@anlyx/ui 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/dist/components/AnalysisEvidenceList.d.ts +5 -0
  2. package/dist/components/AnalysisEvidenceList.js +61 -0
  3. package/dist/components/AnlyxAppShell.d.ts +1 -1
  4. package/dist/components/AnlyxAppShell.js +159 -15
  5. package/dist/components/ApiCallList.d.ts +3 -3
  6. package/dist/components/ApiCallList.js +12 -3
  7. package/dist/components/CanvasPlaceholder.d.ts +0 -1
  8. package/dist/components/CanvasPlaceholder.js +0 -1
  9. package/dist/components/CaptureStatusEmptyState.d.ts +0 -1
  10. package/dist/components/CaptureStatusEmptyState.js +5 -4
  11. package/dist/components/EndpointList.d.ts +0 -1
  12. package/dist/components/EndpointList.js +1 -2
  13. package/dist/components/EndpointMapCanvas.d.ts +5 -2
  14. package/dist/components/EndpointMapCanvas.js +93 -13
  15. package/dist/components/FlowLegend.d.ts +4 -2
  16. package/dist/components/FlowLegend.js +4 -2
  17. package/dist/components/FlowNodeCard.d.ts +1 -2
  18. package/dist/components/FlowNodeCard.js +25 -3
  19. package/dist/components/FlowStoryView.d.ts +22 -0
  20. package/dist/components/FlowStoryView.js +117 -0
  21. package/dist/components/InspectorPanel.d.ts +8 -3
  22. package/dist/components/InspectorPanel.js +36 -3
  23. package/dist/components/PageList.d.ts +0 -1
  24. package/dist/components/PageList.js +1 -2
  25. package/dist/components/PageStoryboardCard.d.ts +0 -1
  26. package/dist/components/PageStoryboardCard.js +4 -2
  27. package/dist/components/PageStoryboardView.d.ts +4 -3
  28. package/dist/components/PageStoryboardView.js +13 -3
  29. package/dist/components/ProcessFlowView.d.ts +21 -0
  30. package/dist/components/ProcessFlowView.js +16 -0
  31. package/dist/components/ProcessTimeline.d.ts +9 -0
  32. package/dist/components/ProcessTimeline.js +46 -0
  33. package/dist/components/ReplayControls.d.ts +6 -2
  34. package/dist/components/ReplayControls.js +31 -3
  35. package/dist/components/ScreenshotSegmentCard.d.ts +0 -1
  36. package/dist/components/ScreenshotSegmentCard.js +0 -1
  37. package/dist/components/Sidebar.d.ts +5 -4
  38. package/dist/components/Sidebar.js +19 -4
  39. package/dist/components/StatusBadge.d.ts +0 -1
  40. package/dist/components/StatusBadge.js +0 -1
  41. package/dist/flow/build-react-flow-model.d.ts +6 -2
  42. package/dist/flow/build-react-flow-model.js +15 -18
  43. package/dist/flow/layout/elk-layout.d.ts +7 -0
  44. package/dist/flow/layout/elk-layout.js +74 -0
  45. package/dist/index.d.ts +0 -1
  46. package/dist/index.js +0 -1
  47. package/dist/mock-data.d.ts +0 -1
  48. package/dist/mock-data.js +50 -5
  49. package/dist/overlay/AnlyxFlowEdge.d.ts +2 -0
  50. package/dist/overlay/AnlyxFlowEdge.js +15 -0
  51. package/dist/overlay/AnlyxFlowNode.d.ts +13 -0
  52. package/dist/overlay/AnlyxFlowNode.js +28 -0
  53. package/dist/overlay/FlowDrawer.d.ts +2 -0
  54. package/dist/overlay/FlowDrawer.js +59 -0
  55. package/dist/overlay/MainFlowCanvas.d.ts +20 -0
  56. package/dist/overlay/MainFlowCanvas.js +285 -0
  57. package/dist/overlay/RecentApiEventsTable.d.ts +5 -0
  58. package/dist/overlay/RecentApiEventsTable.js +19 -0
  59. package/dist/overlay/overlay-entry.d.ts +8 -0
  60. package/dist/overlay/overlay-entry.js +14 -0
  61. package/dist/overlay/overlay-ui.css +2 -0
  62. package/dist/overlay/overlay-ui.js +14 -0
  63. package/dist/overlay/types.d.ts +38 -0
  64. package/dist/overlay/types.js +1 -0
  65. package/dist/overlay/ui.d.ts +18 -0
  66. package/dist/overlay/ui.js +13 -0
  67. package/dist/readme-demo/ReadmeDemoApp.d.ts +4 -0
  68. package/dist/readme-demo/ReadmeDemoApp.js +126 -0
  69. package/dist/readme-demo/readme-demo-entry.d.ts +1 -0
  70. package/dist/readme-demo/readme-demo-entry.js +8 -0
  71. package/dist/replay/build-replay-steps.d.ts +0 -1
  72. package/dist/replay/build-replay-steps.js +0 -1
  73. package/dist/replay/use-replay-lite.d.ts +2 -2
  74. package/dist/replay/use-replay-lite.js +1 -1
  75. package/dist/styles.css +2018 -178
  76. package/dist/viewer/ViewerApp.d.ts +0 -1
  77. package/dist/viewer/ViewerApp.js +13 -7
  78. package/dist/viewer/viewer-entry.d.ts +1 -1
  79. package/dist/viewer/viewer-entry.js +1 -1
  80. package/package.json +7 -3
  81. package/dist/components/AnlyxAppShell.d.ts.map +0 -1
  82. package/dist/components/AnlyxAppShell.js.map +0 -1
  83. package/dist/components/ApiCallList.d.ts.map +0 -1
  84. package/dist/components/ApiCallList.js.map +0 -1
  85. package/dist/components/CanvasPlaceholder.d.ts.map +0 -1
  86. package/dist/components/CanvasPlaceholder.js.map +0 -1
  87. package/dist/components/CaptureStatusEmptyState.d.ts.map +0 -1
  88. package/dist/components/CaptureStatusEmptyState.js.map +0 -1
  89. package/dist/components/EndpointList.d.ts.map +0 -1
  90. package/dist/components/EndpointList.js.map +0 -1
  91. package/dist/components/EndpointMapCanvas.d.ts.map +0 -1
  92. package/dist/components/EndpointMapCanvas.js.map +0 -1
  93. package/dist/components/FlowLegend.d.ts.map +0 -1
  94. package/dist/components/FlowLegend.js.map +0 -1
  95. package/dist/components/FlowNodeCard.d.ts.map +0 -1
  96. package/dist/components/FlowNodeCard.js.map +0 -1
  97. package/dist/components/InspectorPanel.d.ts.map +0 -1
  98. package/dist/components/InspectorPanel.js.map +0 -1
  99. package/dist/components/PageList.d.ts.map +0 -1
  100. package/dist/components/PageList.js.map +0 -1
  101. package/dist/components/PageStoryboardCard.d.ts.map +0 -1
  102. package/dist/components/PageStoryboardCard.js.map +0 -1
  103. package/dist/components/PageStoryboardView.d.ts.map +0 -1
  104. package/dist/components/PageStoryboardView.js.map +0 -1
  105. package/dist/components/ReplayControls.d.ts.map +0 -1
  106. package/dist/components/ReplayControls.js.map +0 -1
  107. package/dist/components/ScreenshotSegmentCard.d.ts.map +0 -1
  108. package/dist/components/ScreenshotSegmentCard.js.map +0 -1
  109. package/dist/components/Sidebar.d.ts.map +0 -1
  110. package/dist/components/Sidebar.js.map +0 -1
  111. package/dist/components/StatusBadge.d.ts.map +0 -1
  112. package/dist/components/StatusBadge.js.map +0 -1
  113. package/dist/flow/build-react-flow-model.d.ts.map +0 -1
  114. package/dist/flow/build-react-flow-model.js.map +0 -1
  115. package/dist/index.d.ts.map +0 -1
  116. package/dist/index.js.map +0 -1
  117. package/dist/mock-data.d.ts.map +0 -1
  118. package/dist/mock-data.js.map +0 -1
  119. package/dist/replay/build-replay-steps.d.ts.map +0 -1
  120. package/dist/replay/build-replay-steps.js.map +0 -1
  121. package/dist/replay/use-replay-lite.d.ts.map +0 -1
  122. package/dist/replay/use-replay-lite.js.map +0 -1
  123. package/dist/viewer/ViewerApp.d.ts.map +0 -1
  124. package/dist/viewer/ViewerApp.js.map +0 -1
  125. package/dist/viewer/viewer-entry.d.ts.map +0 -1
  126. package/dist/viewer/viewer-entry.js.map +0 -1
@@ -0,0 +1,38 @@
1
+ import type { Endpoint, EndpointFlow, PageStoryboard } from "@anlyx/core";
2
+ export type OverlayAction = {
3
+ id?: string;
4
+ type?: string;
5
+ label?: string;
6
+ selector?: string;
7
+ };
8
+ export type OverlayApiEvent = {
9
+ id: string;
10
+ method: string;
11
+ path: string;
12
+ status: string | number;
13
+ durationMs: number;
14
+ count?: number;
15
+ lastSeenAt?: number;
16
+ source?: "action" | "background" | "health";
17
+ triggeredBy?: OverlayAction | null;
18
+ matchedEndpoint?: Endpoint | null;
19
+ matchedFlow?: EndpointFlow | null;
20
+ matchedPages?: PageStoryboard[];
21
+ };
22
+ export type OverlayScannedHint = {
23
+ pageRoute: string;
24
+ pageFilePath?: string;
25
+ method: string;
26
+ path: string;
27
+ endpointId?: string;
28
+ endpointLabel?: string;
29
+ evidence: "scanned-page" | "capture";
30
+ };
31
+ export type FlowDrawerProps = {
32
+ selectedEvent: OverlayApiEvent | null;
33
+ events: OverlayApiEvent[];
34
+ latestAction?: OverlayAction | null;
35
+ scannedHints?: OverlayScannedHint[];
36
+ loadError?: string | null;
37
+ runtimeBaseUrl?: string;
38
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,18 @@
1
+ import type { ReactNode } from "react";
2
+ export declare function Card({ children, className }: {
3
+ children: ReactNode;
4
+ className?: string;
5
+ }): JSX.Element;
6
+ export declare function Badge({ children, tone, className }: {
7
+ children: ReactNode;
8
+ tone?: "blue" | "green" | "amber" | "violet" | "gray" | "neutral";
9
+ className?: string;
10
+ }): JSX.Element;
11
+ export declare function Tooltip({ children, content }: {
12
+ children: ReactNode;
13
+ content: string;
14
+ }): JSX.Element;
15
+ export declare function Table({ children, className }: {
16
+ children: ReactNode;
17
+ className?: string;
18
+ }): JSX.Element;
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ export function Card({ children, className = "" }) {
3
+ return _jsx("div", { className: `anlyx-ov-card ${className}`.trim(), children: children });
4
+ }
5
+ export function Badge({ children, tone = "neutral", className = "" }) {
6
+ return (_jsx("span", { className: `anlyx-ov-badge anlyx-ov-badge--${tone} ${className}`.trim(), children: children }));
7
+ }
8
+ export function Tooltip({ children, content }) {
9
+ return _jsx("span", { title: content, children: children });
10
+ }
11
+ export function Table({ children, className = "" }) {
12
+ return _jsx("table", { className: `anlyx-ov-table ${className}`.trim(), children: children });
13
+ }
@@ -0,0 +1,4 @@
1
+ import "@xyflow/react/dist/style.css";
2
+ import "../overlay/overlay.css";
3
+ import "./readme-demo.css";
4
+ export declare function ReadmeDemoApp(): JSX.Element;
@@ -0,0 +1,126 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import "@xyflow/react/dist/style.css";
3
+ import "../overlay/overlay.css";
4
+ import "./readme-demo.css";
5
+ import { useMemo, useState } from "react";
6
+ import { FlowDrawer } from "../overlay/FlowDrawer.js";
7
+ const demoOrder = ["search", "detail", "save", "admin"];
8
+ const flows = {
9
+ search: makeFlow("GET", "/api/public/search", [
10
+ ["endpoint:search", "endpoint", "GET /api/public/search"],
11
+ ["controller:search", "controller", "PublicViewController#search"],
12
+ ["service:search", "service", "SearchIndexService#find"],
13
+ ["repository:search", "repository", "BenefitSearchRepository#query"],
14
+ ["database:search", "database", "benefits_search_index"]
15
+ ]),
16
+ detail: makeFlow("GET", "/api/public/benefits/{id}", [
17
+ ["endpoint:detail", "endpoint", "GET /api/public/benefits/{id}"],
18
+ ["controller:detail", "controller", "PublicBenefitController#getDetail"],
19
+ ["service:detail", "service", "PublicBenefitService#getDetail"],
20
+ ["repository:detail", "repository", "BenefitRepository#findById"],
21
+ ["database:detail", "database", "benefits"]
22
+ ]),
23
+ save: makeFlow("POST", "/api/account/saved-benefits", [
24
+ ["endpoint:save", "endpoint", "POST /api/account/saved-benefits"],
25
+ ["controller:save", "controller", "SavedBenefitController#create"],
26
+ ["service:save", "service", "SavedBenefitService#save"],
27
+ ["repository:save", "repository", "SavedBenefitRepository#insert"],
28
+ ["database:save", "database", "saved_benefit"]
29
+ ]),
30
+ admin: makeFlow("POST", "/api/admin/benefits", [
31
+ ["endpoint:admin", "endpoint", "POST /api/admin/benefits"],
32
+ ["controller:admin", "controller", "AdminBenefitController#create"],
33
+ ["policy:admin", "validator", "AdminRolePolicy#check"],
34
+ ["service:admin", "service", "AdminBenefitService#create"],
35
+ ["repository:admin", "repository", "BenefitRepository#save"]
36
+ ])
37
+ };
38
+ const endpoints = {
39
+ search: endpoint("GET", "/api/public/search", "PublicViewController#search"),
40
+ detail: endpoint("GET", "/api/public/benefits/{id}", "PublicBenefitController#getDetail"),
41
+ save: endpoint("POST", "/api/account/saved-benefits", "SavedBenefitController#create"),
42
+ admin: endpoint("POST", "/api/admin/benefits", "AdminBenefitController#create")
43
+ };
44
+ const events = {
45
+ search: event("search", "GET", "/api/public/search", 200, 28, "Clicked Search benefits"),
46
+ detail: event("detail", "GET", "/api/public/benefits/123", 200, 34, "Opened benefit detail"),
47
+ save: event("save", "POST", "/api/account/saved-benefits", 401, 31, "Clicked Save to my box"),
48
+ admin: event("admin", "POST", "/api/admin/benefits", 403, 42, "Clicked Try admin action")
49
+ };
50
+ Object.entries(events).forEach(([key, value]) => {
51
+ const demoKey = key;
52
+ value.matchedEndpoint = endpoints[demoKey];
53
+ value.matchedFlow = flows[demoKey];
54
+ });
55
+ export function ReadmeDemoApp() {
56
+ const [selectedKey, setSelectedKey] = useState("save");
57
+ const selectedEvent = events[selectedKey];
58
+ const eventList = useMemo(() => [
59
+ selectedEvent,
60
+ {
61
+ id: "background-account",
62
+ method: "GET",
63
+ path: "/api/account/me",
64
+ status: 401,
65
+ durationMs: 19,
66
+ count: 3,
67
+ source: "background",
68
+ matchedEndpoint: endpoint("GET", "/api/account/me", "AccountController#me"),
69
+ matchedFlow: null
70
+ },
71
+ ...demoOrder.filter((key) => key !== selectedKey).map((key) => events[key])
72
+ ], [selectedEvent, selectedKey]);
73
+ return (_jsxs("main", { className: "anlyx-readme-demo", children: [_jsxs("section", { className: "anlyx-readme-demo__control", children: [_jsx("div", { className: "anlyx-readme-demo__logo-card", children: _jsx("img", { src: "/docs/assets/brand/anlyx-logo-card.png", alt: "Anlyx" }) }), _jsxs("div", { children: [_jsx("p", { className: "anlyx-readme-demo__eyebrow", children: "Real Anlyx UI demo" }), _jsx("h1", { children: "Click an action. Watch the drawer remap the backend flow." }), _jsxs("p", { children: ["This README animation renders the actual Anlyx Flow Drawer component from", _jsx("code", { children: "@anlyx/ui" }), "."] })] }), _jsxs("div", { className: "anlyx-readme-demo__actions", "aria-label": "Demo actions", children: [_jsx(DemoButton, { active: selectedKey === "search", label: "Search benefits", meta: "GET /api/public/search", onClick: () => setSelectedKey("search"), demoKey: "search" }), _jsx(DemoButton, { active: selectedKey === "detail", label: "Open benefit detail", meta: "GET /api/public/benefits/{id}", onClick: () => setSelectedKey("detail"), demoKey: "detail" }), _jsx(DemoButton, { active: selectedKey === "save", label: "Save to my box", meta: "POST /api/account/saved-benefits", onClick: () => setSelectedKey("save"), demoKey: "save" }), _jsx(DemoButton, { active: selectedKey === "admin", label: "Try admin action", meta: "POST /api/admin/benefits", onClick: () => setSelectedKey("admin"), demoKey: "admin" })] })] }), _jsxs("section", { className: "anlyx-readme-demo__drawer-shell", "aria-label": "Anlyx Flow Drawer", children: [_jsxs("header", { className: "anlyx-readme-demo__drawer-head", children: [_jsxs("div", { className: "anlyx-readme-demo__drawer-brand", children: [_jsx("img", { src: "/docs/assets/brand/anlyx-icon-card.png", alt: "" }), _jsxs("div", { children: [_jsx("strong", { children: "Anlyx Flow Drawer" }), _jsx("span", { children: "Actual component preview" })] })] }), _jsxs("div", { className: "anlyx-readme-demo__drawer-tools", children: [_jsx("span", { children: "Live" }), _jsx("span", { children: "matched" })] })] }), _jsx(FlowDrawer, { events: eventList, latestAction: selectedEvent.triggeredBy ?? null, scannedHints: [], selectedEvent: selectedEvent })] })] }));
74
+ }
75
+ function DemoButton({ active, label, meta, onClick, demoKey }) {
76
+ return (_jsxs("button", { "aria-pressed": active, className: "anlyx-readme-demo__action", "data-demo": demoKey, type: "button", onClick: onClick, children: [_jsx("strong", { children: label }), _jsx("span", { children: meta })] }));
77
+ }
78
+ function makeFlow(method, path, nodes) {
79
+ const mainPath = nodes.map(([id]) => id);
80
+ return {
81
+ endpointId: `${method}:${path}`,
82
+ nodes: nodes.map(([id, type, label]) => ({
83
+ id,
84
+ type,
85
+ label,
86
+ confidence: "high"
87
+ })),
88
+ edges: mainPath.slice(1).map((to, index) => ({
89
+ id: `edge:${mainPath[index]}:${to}`,
90
+ from: mainPath[index] ?? "",
91
+ to,
92
+ kind: "main",
93
+ confidence: "high"
94
+ })),
95
+ mainPath,
96
+ subFlows: []
97
+ };
98
+ }
99
+ function endpoint(method, path, handler) {
100
+ return {
101
+ id: `${method}:${path}`,
102
+ method,
103
+ path,
104
+ supportLevel: "deep",
105
+ handler,
106
+ confidence: "high"
107
+ };
108
+ }
109
+ function event(id, method, path, status, durationMs, label) {
110
+ return {
111
+ id,
112
+ method,
113
+ path,
114
+ status,
115
+ durationMs,
116
+ count: id === "save" ? 2 : 1,
117
+ source: "action",
118
+ triggeredBy: {
119
+ type: "Clicked",
120
+ label,
121
+ selector: `button[data-demo="${id}"]`
122
+ },
123
+ matchedEndpoint: null,
124
+ matchedFlow: null
125
+ };
126
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createRoot } from "react-dom/client";
3
+ import { ReadmeDemoApp } from "./ReadmeDemoApp.js";
4
+ const root = document.getElementById("root");
5
+ if (!root) {
6
+ throw new Error("Missing #root for Anlyx README demo");
7
+ }
8
+ createRoot(root).render(_jsx(ReadmeDemoApp, {}));
@@ -7,4 +7,3 @@ export type ReplayStep = {
7
7
  index: number;
8
8
  };
9
9
  export declare function buildReplaySteps(mainPath: string[]): ReplayStep[];
10
- //# sourceMappingURL=build-replay-steps.d.ts.map
@@ -23,4 +23,3 @@ export function buildReplaySteps(mainPath) {
23
23
  });
24
24
  return [...requestSteps, ...responseSteps];
25
25
  }
26
- //# sourceMappingURL=build-replay-steps.js.map
@@ -1,4 +1,4 @@
1
- import { type ReplayPhase } from "./build-replay-steps.js";
1
+ import { type ReplayPhase, type ReplayStep } from "./build-replay-steps.js";
2
2
  export type ReplayLiteState = {
3
3
  phase: ReplayPhase;
4
4
  isPlaying: boolean;
@@ -16,6 +16,7 @@ export type UseReplayLiteOptions = {
16
16
  };
17
17
  export type UseReplayLiteResult = {
18
18
  state: ReplayLiteState;
19
+ steps: ReplayStep[];
19
20
  loop: boolean;
20
21
  play: () => void;
21
22
  pause: () => void;
@@ -23,4 +24,3 @@ export type UseReplayLiteResult = {
23
24
  toggleLoop: () => void;
24
25
  };
25
26
  export declare function useReplayLite({ mainPath, loop: initialLoop, intervalMs }: UseReplayLiteOptions): UseReplayLiteResult;
26
- //# sourceMappingURL=use-replay-lite.d.ts.map
@@ -67,6 +67,7 @@ export function useReplayLite({ mainPath, loop: initialLoop = false, intervalMs
67
67
  isPlaying,
68
68
  phase
69
69
  }),
70
+ steps,
70
71
  loop,
71
72
  play,
72
73
  pause,
@@ -94,4 +95,3 @@ function toReplayState(options) {
94
95
  : {})
95
96
  };
96
97
  }
97
- //# sourceMappingURL=use-replay-lite.js.map