@anlyx/ui 0.1.0
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.
- package/LICENSE +21 -0
- package/README.md +5 -0
- package/dist/components/AnlyxAppShell.d.ts +6 -0
- package/dist/components/AnlyxAppShell.d.ts.map +1 -0
- package/dist/components/AnlyxAppShell.js +61 -0
- package/dist/components/AnlyxAppShell.js.map +1 -0
- package/dist/components/ApiCallList.d.ts +6 -0
- package/dist/components/ApiCallList.d.ts.map +1 -0
- package/dist/components/ApiCallList.js +18 -0
- package/dist/components/ApiCallList.js.map +1 -0
- package/dist/components/CanvasPlaceholder.d.ts +7 -0
- package/dist/components/CanvasPlaceholder.d.ts.map +1 -0
- package/dist/components/CanvasPlaceholder.js +6 -0
- package/dist/components/CanvasPlaceholder.js.map +1 -0
- package/dist/components/CaptureStatusEmptyState.d.ts +7 -0
- package/dist/components/CaptureStatusEmptyState.d.ts.map +1 -0
- package/dist/components/CaptureStatusEmptyState.js +10 -0
- package/dist/components/CaptureStatusEmptyState.js.map +1 -0
- package/dist/components/EndpointList.d.ts +9 -0
- package/dist/components/EndpointList.d.ts.map +1 -0
- package/dist/components/EndpointList.js +12 -0
- package/dist/components/EndpointList.js.map +1 -0
- package/dist/components/EndpointMapCanvas.d.ts +11 -0
- package/dist/components/EndpointMapCanvas.d.ts.map +1 -0
- package/dist/components/EndpointMapCanvas.js +47 -0
- package/dist/components/EndpointMapCanvas.js.map +1 -0
- package/dist/components/FlowLegend.d.ts +2 -0
- package/dist/components/FlowLegend.d.ts.map +1 -0
- package/dist/components/FlowLegend.js +5 -0
- package/dist/components/FlowLegend.js.map +1 -0
- package/dist/components/FlowNodeCard.d.ts +4 -0
- package/dist/components/FlowNodeCard.d.ts.map +1 -0
- package/dist/components/FlowNodeCard.js +13 -0
- package/dist/components/FlowNodeCard.js.map +1 -0
- package/dist/components/InspectorPanel.d.ts +9 -0
- package/dist/components/InspectorPanel.d.ts.map +1 -0
- package/dist/components/InspectorPanel.js +19 -0
- package/dist/components/InspectorPanel.js.map +1 -0
- package/dist/components/PageList.d.ts +9 -0
- package/dist/components/PageList.d.ts.map +1 -0
- package/dist/components/PageList.js +6 -0
- package/dist/components/PageList.js.map +1 -0
- package/dist/components/PageStoryboardCard.d.ts +6 -0
- package/dist/components/PageStoryboardCard.d.ts.map +1 -0
- package/dist/components/PageStoryboardCard.js +6 -0
- package/dist/components/PageStoryboardCard.js.map +1 -0
- package/dist/components/PageStoryboardView.d.ts +6 -0
- package/dist/components/PageStoryboardView.d.ts.map +1 -0
- package/dist/components/PageStoryboardView.js +9 -0
- package/dist/components/PageStoryboardView.js.map +1 -0
- package/dist/components/ReplayControls.d.ts +13 -0
- package/dist/components/ReplayControls.d.ts.map +1 -0
- package/dist/components/ReplayControls.js +5 -0
- package/dist/components/ReplayControls.js.map +1 -0
- package/dist/components/ScreenshotSegmentCard.d.ts +6 -0
- package/dist/components/ScreenshotSegmentCard.d.ts.map +1 -0
- package/dist/components/ScreenshotSegmentCard.js +6 -0
- package/dist/components/ScreenshotSegmentCard.js.map +1 -0
- package/dist/components/Sidebar.d.ts +13 -0
- package/dist/components/Sidebar.d.ts.map +1 -0
- package/dist/components/Sidebar.js +7 -0
- package/dist/components/Sidebar.js.map +1 -0
- package/dist/components/StatusBadge.d.ts +9 -0
- package/dist/components/StatusBadge.d.ts.map +1 -0
- package/dist/components/StatusBadge.js +5 -0
- package/dist/components/StatusBadge.js.map +1 -0
- package/dist/flow/build-react-flow-model.d.ts +27 -0
- package/dist/flow/build-react-flow-model.d.ts.map +1 -0
- package/dist/flow/build-react-flow-model.js +79 -0
- package/dist/flow/build-react-flow-model.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/mock-data.d.ts +3 -0
- package/dist/mock-data.d.ts.map +1 -0
- package/dist/mock-data.js +222 -0
- package/dist/mock-data.js.map +1 -0
- package/dist/replay/build-replay-steps.d.ts +10 -0
- package/dist/replay/build-replay-steps.d.ts.map +1 -0
- package/dist/replay/build-replay-steps.js +26 -0
- package/dist/replay/build-replay-steps.js.map +1 -0
- package/dist/replay/use-replay-lite.d.ts +26 -0
- package/dist/replay/use-replay-lite.d.ts.map +1 -0
- package/dist/replay/use-replay-lite.js +97 -0
- package/dist/replay/use-replay-lite.js.map +1 -0
- package/dist/styles.css +786 -0
- package/dist/viewer/ViewerApp.d.ts +2 -0
- package/dist/viewer/ViewerApp.d.ts.map +1 -0
- package/dist/viewer/ViewerApp.js +39 -0
- package/dist/viewer/ViewerApp.js.map +1 -0
- package/dist/viewer/viewer-entry.d.ts +2 -0
- package/dist/viewer/viewer-entry.d.ts.map +1 -0
- package/dist/viewer/viewer-entry.js +10 -0
- package/dist/viewer/viewer-entry.js.map +1 -0
- package/dist/viewer/viewer.html +12 -0
- package/package.json +49 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 suhannoh
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AnlyxAppShell.d.ts","sourceRoot":"","sources":["../../src/components/AnlyxAppShell.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAA0B,UAAU,EAAE,MAAM,aAAa,CAAC;AAStE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,UAAU,CAAC;CAClB,CAAC;AAIF,wBAAgB,aAAa,CAAC,EAAE,IAAI,EAAE,EAAE,kBAAkB,GAAG,GAAG,CAAC,OAAO,CAwFvE"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useMemo, useState } from "react";
|
|
3
|
+
import { EndpointMapCanvas } from "./EndpointMapCanvas.js";
|
|
4
|
+
import { InspectorPanel } from "./InspectorPanel.js";
|
|
5
|
+
import { PageStoryboardView } from "./PageStoryboardView.js";
|
|
6
|
+
import { ReplayControls } from "./ReplayControls.js";
|
|
7
|
+
import { Sidebar } from "./Sidebar.js";
|
|
8
|
+
import { useReplayLite } from "../replay/use-replay-lite.js";
|
|
9
|
+
export function AnlyxAppShell({ data }) {
|
|
10
|
+
const [activeView, setActiveView] = useState("endpoint");
|
|
11
|
+
const [selectedEndpointId, setSelectedEndpointId] = useState(data.endpoints[0]?.id);
|
|
12
|
+
const [selectedPageId, setSelectedPageId] = useState(data.pages[0]?.id);
|
|
13
|
+
const selectedEndpoint = data.endpoints.find((endpoint) => endpoint.id === selectedEndpointId) ?? data.endpoints[0];
|
|
14
|
+
const selectedPage = data.pages.find((page) => page.id === selectedPageId) ?? data.pages[0];
|
|
15
|
+
const selectedFlow = useMemo(() => data.flows.find((flow) => flow.endpointId === selectedEndpoint?.id), [data.flows, selectedEndpoint?.id]);
|
|
16
|
+
const replayMainPath = useMemo(() => getReplayMainPath(selectedFlow, selectedEndpoint?.id), [selectedEndpoint?.id, selectedFlow]);
|
|
17
|
+
const replay = useReplayLite({ mainPath: replayMainPath });
|
|
18
|
+
const replayUnavailable = replayMainPath.length === 0;
|
|
19
|
+
const [selectedNodeId, setSelectedNodeId] = useState(() => findDefaultNode(selectedFlow)?.id);
|
|
20
|
+
const selectedNode = findFlowNode(selectedFlow, selectedNodeId) ?? findDefaultNode(selectedFlow);
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
setSelectedEndpointId((current) => data.endpoints.some((endpoint) => endpoint.id === current) ? current : data.endpoints[0]?.id);
|
|
23
|
+
}, [data.endpoints]);
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
setSelectedPageId((current) => data.pages.some((page) => page.id === current) ? current : data.pages[0]?.id);
|
|
26
|
+
}, [data.pages]);
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
setSelectedNodeId(findDefaultNode(selectedFlow)?.id);
|
|
29
|
+
}, [selectedFlow]);
|
|
30
|
+
return (_jsxs("div", { className: "anlyx-shell", role: "application", "aria-label": "Anlyx application shell", children: [_jsx(Sidebar, { data: data, activeView: activeView, selectedEndpointId: selectedEndpoint?.id, selectedPageId: selectedPage?.id, onSelectView: setActiveView, onSelectEndpoint: (endpoint) => {
|
|
31
|
+
setSelectedEndpointId(endpoint.id);
|
|
32
|
+
setActiveView("endpoint");
|
|
33
|
+
}, onSelectPage: (page) => {
|
|
34
|
+
setSelectedPageId(page.id);
|
|
35
|
+
setActiveView("pages");
|
|
36
|
+
} }), _jsxs("div", { className: "anlyx-main", children: [activeView === "endpoint" ? (_jsx(EndpointMapCanvas, { endpoint: selectedEndpoint, flow: selectedFlow, replayState: replay.state, selectedNodeId: selectedNode?.id, onSelectNode: (node) => setSelectedNodeId(node.id) })) : null, activeView === "pages" ? _jsx(PageStoryboardView, { page: selectedPage }) : null, activeView === "replay" ? (_jsx(EndpointMapCanvas, { endpoint: selectedEndpoint, flow: selectedFlow, replayState: replay.state, selectedNodeId: selectedNode?.id, onSelectNode: (node) => setSelectedNodeId(node.id) })) : null, _jsx(ReplayControls, { disabled: replayUnavailable, loop: replay.loop, state: replay.state, unavailableReason: "Replay is unavailable because this endpoint has no main flow.", onPause: replay.pause, onPlay: replay.play, onRestart: replay.restart, onToggleLoop: replay.toggleLoop })] }), _jsx(InspectorPanel, { data: data, selectedFlow: selectedFlow, selectedNode: selectedNode }), _jsxs("div", { className: "anlyx-generated-at", children: ["Generated ", data.generatedAt] })] }));
|
|
37
|
+
}
|
|
38
|
+
function getReplayMainPath(flow, endpointId) {
|
|
39
|
+
if (!flow || flow.mainPath.length === 0) {
|
|
40
|
+
return [];
|
|
41
|
+
}
|
|
42
|
+
const endpointIndex = endpointId ? flow.mainPath.indexOf(endpointId) : -1;
|
|
43
|
+
if (endpointIndex >= 0) {
|
|
44
|
+
return flow.mainPath.slice(endpointIndex);
|
|
45
|
+
}
|
|
46
|
+
return flow.mainPath;
|
|
47
|
+
}
|
|
48
|
+
function findDefaultNode(flow) {
|
|
49
|
+
if (!flow) {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
return (findFlowNode(flow, flow.mainPath[1]) ?? findFlowNode(flow, flow.mainPath[0]) ?? flow.nodes[0]);
|
|
53
|
+
}
|
|
54
|
+
function findFlowNode(flow, nodeId) {
|
|
55
|
+
if (!flow || !nodeId) {
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
return (flow.nodes.find((node) => node.id === nodeId) ??
|
|
59
|
+
flow.subFlows.flatMap((subFlow) => subFlow.nodes).find((node) => node.id === nodeId));
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=AnlyxAppShell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AnlyxAppShell.js","sourceRoot":"","sources":["../../src/components/AnlyxAppShell.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApiCallList.d.ts","sourceRoot":"","sources":["../../src/components/ApiCallList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAI3C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB,CAAC;AAEF,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,CAmCvE"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { StatusBadge } from "./StatusBadge.js";
|
|
3
|
+
export function ApiCallList({ apiCalls }) {
|
|
4
|
+
return (_jsxs("section", { className: "anlyx-storyboard-panel", "aria-label": "API Calls", children: [_jsxs("div", { className: "anlyx-storyboard-section-heading", children: [_jsx("h2", { children: "API Calls" }), _jsx("span", { children: apiCalls.length })] }), apiCalls.length > 0 ? (_jsx("ul", { className: "anlyx-api-call-list", children: apiCalls.map((apiCall, index) => (_jsxs("li", { className: "anlyx-api-call", children: [_jsxs("div", { className: "anlyx-api-call__line", children: [_jsx(StatusBadge, { tone: apiCall.method, children: apiCall.method }), _jsx("span", { className: "anlyx-api-call__path", children: apiCall.path })] }), _jsxs("div", { className: "anlyx-api-call__meta", children: [_jsx(StatusBadge, { tone: statusTone(apiCall.status), children: apiCall.status === undefined ? "unknown" : String(apiCall.status) }), _jsx(StatusBadge, { tone: apiCall.endpointId ? "success" : "unknown", children: apiCall.endpointId ? "Linked endpoint" : "Unmatched" })] }), apiCall.endpointId ? (_jsx("div", { className: "anlyx-api-call__endpoint", children: apiCall.endpointId })) : null] }, `${apiCall.method}:${apiCall.path}:${index}`))) })) : (_jsx("p", { className: "anlyx-empty-inline", children: "No API calls captured yet." }))] }));
|
|
5
|
+
}
|
|
6
|
+
function statusTone(status) {
|
|
7
|
+
if (status === undefined) {
|
|
8
|
+
return "unknown";
|
|
9
|
+
}
|
|
10
|
+
if ([200, 201, 204].includes(status)) {
|
|
11
|
+
return "success";
|
|
12
|
+
}
|
|
13
|
+
if (status >= 400) {
|
|
14
|
+
return "failed";
|
|
15
|
+
}
|
|
16
|
+
return "pending";
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=ApiCallList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApiCallList.js","sourceRoot":"","sources":["../../src/components/ApiCallList.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAM/C,MAAM,UAAU,WAAW,CAAC,EAAE,QAAQ,EAAoB;IACxD,OAAO,CACL,mBAAS,SAAS,EAAC,wBAAwB,gBAAY,WAAW,aAChE,eAAK,SAAS,EAAC,kCAAkC,aAC/C,qCAAkB,EAClB,yBAAO,QAAQ,CAAC,MAAM,GAAQ,IAC1B,EAEL,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACrB,aAAI,SAAS,EAAC,qBAAqB,YAChC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAChC,cAAI,SAAS,EAAC,gBAAgB,aAC5B,eAAK,SAAS,EAAC,sBAAsB,aACnC,KAAC,WAAW,IAAC,IAAI,EAAE,OAAO,CAAC,MAAM,YAAG,OAAO,CAAC,MAAM,GAAe,EACjE,eAAM,SAAS,EAAC,sBAAsB,YAAE,OAAO,CAAC,IAAI,GAAQ,IACxD,EACN,eAAK,SAAS,EAAC,sBAAsB,aACnC,KAAC,WAAW,IAAC,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,YAC1C,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GACtD,EACd,KAAC,WAAW,IAAC,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,YAC1D,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,WAAW,GACzC,IACV,EACL,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CACpB,cAAK,SAAS,EAAC,0BAA0B,YAAE,OAAO,CAAC,UAAU,GAAO,CACrE,CAAC,CAAC,CAAC,IAAI,KAf0B,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI,IAAI,KAAK,EAAE,CAgB3E,CACN,CAAC,GACC,CACN,CAAC,CAAC,CAAC,CACF,YAAG,SAAS,EAAC,oBAAoB,2CAA+B,CACjE,IACO,CACX,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,MAA0B;IAC5C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACrC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;QAClB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Endpoint } from "@anlyx/core";
|
|
2
|
+
type CanvasPlaceholderProps = {
|
|
3
|
+
endpoint: Endpoint | undefined;
|
|
4
|
+
};
|
|
5
|
+
export declare function CanvasPlaceholder({ endpoint }: CanvasPlaceholderProps): JSX.Element;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=CanvasPlaceholder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CanvasPlaceholder.d.ts","sourceRoot":"","sources":["../../src/components/CanvasPlaceholder.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAI5C,KAAK,sBAAsB,GAAG;IAC5B,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAC;CAChC,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE,sBAAsB,GAAG,GAAG,CAAC,OAAO,CAuBnF"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { StatusBadge } from "./StatusBadge.js";
|
|
3
|
+
export function CanvasPlaceholder({ endpoint }) {
|
|
4
|
+
return (_jsxs("main", { className: "anlyx-workspace", "aria-label": "Workspace", children: [_jsxs("header", { className: "anlyx-workspace-header", children: [_jsxs("div", { children: [_jsx("p", { className: "anlyx-eyebrow", children: "Selected endpoint" }), _jsx("h1", { children: endpoint ? `${endpoint.method} ${endpoint.path}` : "No endpoint selected" })] }), endpoint ? (_jsx(StatusBadge, { tone: endpoint.confidence ?? "unknown", children: endpoint.confidence ?? "unknown" })) : null] }), _jsx("section", { className: "anlyx-canvas-placeholder", "aria-label": "Endpoint map canvas placeholder", children: _jsxs("div", { className: "anlyx-canvas-placeholder__content", children: [_jsx("p", { className: "anlyx-eyebrow", children: "Canvas" }), _jsx("h2", { children: "Endpoint Map will render here" })] }) })] }));
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=CanvasPlaceholder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CanvasPlaceholder.js","sourceRoot":"","sources":["../../src/components/CanvasPlaceholder.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAM/C,MAAM,UAAU,iBAAiB,CAAC,EAAE,QAAQ,EAA0B;IACpE,OAAO,CACL,gBAAM,SAAS,EAAC,iBAAiB,gBAAY,WAAW,aACtD,kBAAQ,SAAS,EAAC,wBAAwB,aACxC,0BACE,YAAG,SAAS,EAAC,eAAe,kCAAsB,EAClD,uBAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,sBAAsB,GAAM,IAChF,EACL,QAAQ,CAAC,CAAC,CAAC,CACV,KAAC,WAAW,IAAC,IAAI,EAAE,QAAQ,CAAC,UAAU,IAAI,SAAS,YAChD,QAAQ,CAAC,UAAU,IAAI,SAAS,GACrB,CACf,CAAC,CAAC,CAAC,IAAI,IACD,EAET,kBAAS,SAAS,EAAC,0BAA0B,gBAAY,iCAAiC,YACxF,eAAK,SAAS,EAAC,mCAAmC,aAChD,YAAG,SAAS,EAAC,eAAe,uBAAW,EACvC,yDAAsC,IAClC,GACE,IACL,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { CaptureStatus } from "@anlyx/core";
|
|
2
|
+
export type CaptureStatusEmptyStateProps = {
|
|
3
|
+
status: CaptureStatus;
|
|
4
|
+
reason?: string;
|
|
5
|
+
};
|
|
6
|
+
export declare function CaptureStatusEmptyState({ status, reason }: CaptureStatusEmptyStateProps): JSX.Element | null;
|
|
7
|
+
//# sourceMappingURL=CaptureStatusEmptyState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CaptureStatusEmptyState.d.ts","sourceRoot":"","sources":["../../src/components/CaptureStatusEmptyState.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,MAAM,4BAA4B,GAAG;IACzC,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,EACtC,MAAM,EACN,MAAM,EACP,EAAE,4BAA4B,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAcnD"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
export function CaptureStatusEmptyState({ status, reason }) {
|
|
3
|
+
if (status === "success") {
|
|
4
|
+
return null;
|
|
5
|
+
}
|
|
6
|
+
const title = status === "failed" ? "Capture failed" : "Capture pending";
|
|
7
|
+
const fallbackReason = status === "pending" ? "Waiting for capture input." : "Unknown";
|
|
8
|
+
return (_jsxs("section", { className: `anlyx-capture-state anlyx-capture-state--${status}`, children: [_jsx("h2", { children: title }), _jsxs("p", { children: ["Reason: ", reason ?? fallbackReason] })] }));
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=CaptureStatusEmptyState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CaptureStatusEmptyState.js","sourceRoot":"","sources":["../../src/components/CaptureStatusEmptyState.tsx"],"names":[],"mappings":";AAOA,MAAM,UAAU,uBAAuB,CAAC,EACtC,MAAM,EACN,MAAM,EACuB;IAC7B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,iBAAiB,CAAC;IACzE,MAAM,cAAc,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,SAAS,CAAC;IAEvF,OAAO,CACL,mBAAS,SAAS,EAAE,4CAA4C,MAAM,EAAE,aACtE,uBAAK,KAAK,GAAM,EAChB,oCAAY,MAAM,IAAI,cAAc,IAAK,IACjC,CACX,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Endpoint } from "@anlyx/core";
|
|
2
|
+
type EndpointListProps = {
|
|
3
|
+
endpoints: Endpoint[];
|
|
4
|
+
selectedEndpointId: string | undefined;
|
|
5
|
+
onSelectEndpoint: (endpoint: Endpoint) => void;
|
|
6
|
+
};
|
|
7
|
+
export declare function EndpointList({ endpoints, selectedEndpointId, onSelectEndpoint }: EndpointListProps): JSX.Element;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=EndpointList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EndpointList.d.ts","sourceRoot":"","sources":["../../src/components/EndpointList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAI5C,KAAK,iBAAiB,GAAG;IACvB,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,gBAAgB,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAC;CAChD,CAAC;AAEF,wBAAgB,YAAY,CAAC,EAC3B,SAAS,EACT,kBAAkB,EAClB,gBAAgB,EACjB,EAAE,iBAAiB,GAAG,GAAG,CAAC,OAAO,CA2BjC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { StatusBadge } from "./StatusBadge.js";
|
|
3
|
+
export function EndpointList({ endpoints, selectedEndpointId, onSelectEndpoint }) {
|
|
4
|
+
return (_jsxs("section", { className: "anlyx-sidebar-section", "aria-labelledby": "anlyx-endpoints-heading", children: [_jsx("div", { className: "anlyx-section-heading", id: "anlyx-endpoints-heading", children: "Endpoints" }), _jsx("ul", { className: "anlyx-list", "aria-label": "Endpoint list", children: endpoints.map((endpoint) => (_jsx("li", { className: "anlyx-list-item", children: _jsxs("button", { className: "anlyx-endpoint-button", type: "button", "aria-label": `${endpoint.method} ${endpoint.path} ${formatEndpointHandler(endpoint)}`, "aria-current": endpoint.id === selectedEndpointId ? "true" : undefined, onClick: () => onSelectEndpoint(endpoint), children: [_jsxs("span", { className: "anlyx-list-item__line", children: [_jsx(StatusBadge, { tone: endpoint.method, children: endpoint.method }), _jsx("span", { className: "anlyx-list-item__primary", children: endpoint.path })] }), _jsx("span", { className: "anlyx-list-item__meta", children: formatEndpointHandler(endpoint) })] }) }, endpoint.id))) })] }));
|
|
5
|
+
}
|
|
6
|
+
function formatEndpointHandler(endpoint) {
|
|
7
|
+
if (endpoint.controller && endpoint.handler) {
|
|
8
|
+
return `${endpoint.controller}#${endpoint.handler}`;
|
|
9
|
+
}
|
|
10
|
+
return endpoint.handler ?? endpoint.controller ?? endpoint.id;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=EndpointList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EndpointList.js","sourceRoot":"","sources":["../../src/components/EndpointList.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAQ/C,MAAM,UAAU,YAAY,CAAC,EAC3B,SAAS,EACT,kBAAkB,EAClB,gBAAgB,EACE;IAClB,OAAO,CACL,mBAAS,SAAS,EAAC,uBAAuB,qBAAiB,yBAAyB,aAClF,cAAK,SAAS,EAAC,uBAAuB,EAAC,EAAE,EAAC,yBAAyB,0BAE7D,EACN,aAAI,SAAS,EAAC,YAAY,gBAAY,eAAe,YAClD,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAC3B,aAAI,SAAS,EAAC,iBAAiB,YAC7B,kBACE,SAAS,EAAC,uBAAuB,EACjC,IAAI,EAAC,QAAQ,gBACD,GAAG,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,IAAI,qBAAqB,CAAC,QAAQ,CAAC,EAAE,kBACtE,QAAQ,CAAC,EAAE,KAAK,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EACrE,OAAO,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,aAEzC,gBAAM,SAAS,EAAC,uBAAuB,aACrC,KAAC,WAAW,IAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,YAAG,QAAQ,CAAC,MAAM,GAAe,EACnE,eAAM,SAAS,EAAC,0BAA0B,YAAE,QAAQ,CAAC,IAAI,GAAQ,IAC5D,EACP,eAAM,SAAS,EAAC,uBAAuB,YAAE,qBAAqB,CAAC,QAAQ,CAAC,GAAQ,IACzE,IAb0B,QAAQ,CAAC,EAAE,CAc3C,CACN,CAAC,GACC,IACG,CACX,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,QAAkB;IAC/C,IAAI,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;QAC5C,OAAO,GAAG,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;IACtD,CAAC;IAED,OAAO,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,EAAE,CAAC;AAChE,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Endpoint, EndpointFlow, FlowNode } from "@anlyx/core";
|
|
2
|
+
import type { ReplayLiteState } from "../replay/use-replay-lite.js";
|
|
3
|
+
export type EndpointMapCanvasProps = {
|
|
4
|
+
endpoint: Endpoint | undefined;
|
|
5
|
+
flow: EndpointFlow | undefined;
|
|
6
|
+
selectedNodeId: string | undefined;
|
|
7
|
+
replayState?: ReplayLiteState;
|
|
8
|
+
onSelectNode: (node: FlowNode) => void;
|
|
9
|
+
};
|
|
10
|
+
export declare function EndpointMapCanvas({ endpoint, flow, selectedNodeId, replayState, onSelectNode }: EndpointMapCanvasProps): JSX.Element;
|
|
11
|
+
//# sourceMappingURL=EndpointMapCanvas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EndpointMapCanvas.d.ts","sourceRoot":"","sources":["../../src/components/EndpointMapCanvas.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAYpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAMpE,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC/B,IAAI,EAAE,YAAY,GAAG,SAAS,CAAC;IAC/B,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,YAAY,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;CACxC,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,IAAI,EACJ,cAAc,EACd,WAAW,EACX,YAAY,EACb,EAAE,sBAAsB,GAAG,GAAG,CAAC,OAAO,CAkHtC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { Background, BackgroundVariant, Controls, ReactFlow } from "@xyflow/react";
|
|
3
|
+
import { useMemo } from "react";
|
|
4
|
+
import { FlowLegend } from "./FlowLegend.js";
|
|
5
|
+
import { FlowNodeCard } from "./FlowNodeCard.js";
|
|
6
|
+
import { StatusBadge } from "./StatusBadge.js";
|
|
7
|
+
import { buildReactFlowModel } from "../flow/build-react-flow-model.js";
|
|
8
|
+
const nodeTypes = {
|
|
9
|
+
anlyxNode: FlowNodeCard
|
|
10
|
+
};
|
|
11
|
+
export function EndpointMapCanvas({ endpoint, flow, selectedNodeId, replayState, onSelectNode }) {
|
|
12
|
+
const model = useMemo(() => (flow ? buildReactFlowModel(flow) : undefined), [flow]);
|
|
13
|
+
const nodes = useMemo(() => model?.nodes.map((node) => ({
|
|
14
|
+
...node,
|
|
15
|
+
selected: node.id === selectedNodeId,
|
|
16
|
+
data: {
|
|
17
|
+
...node.data,
|
|
18
|
+
isReplayActive: replayState?.activeNodeId === node.id,
|
|
19
|
+
onSelectNode
|
|
20
|
+
}
|
|
21
|
+
})) ?? [], [model, onSelectNode, replayState?.activeNodeId, selectedNodeId]);
|
|
22
|
+
const edges = useMemo(() => model?.edges.map((edge) => {
|
|
23
|
+
const isReplayActive = isReplayEdgeActive(edge, replayState?.activeEdge);
|
|
24
|
+
const edgeData = edge.data;
|
|
25
|
+
return {
|
|
26
|
+
...edge,
|
|
27
|
+
className: [edge.className, isReplayActive ? "anlyx-flow-edge--replay-active" : ""]
|
|
28
|
+
.filter(Boolean)
|
|
29
|
+
.join(" "),
|
|
30
|
+
data: {
|
|
31
|
+
edge: edgeData.edge,
|
|
32
|
+
flowRole: edgeData.flowRole,
|
|
33
|
+
...(edgeData.confidence ? { confidence: edgeData.confidence } : {}),
|
|
34
|
+
isReplayActive
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
}) ?? [], [model, replayState?.activeEdge]);
|
|
38
|
+
return (_jsxs("main", { className: "anlyx-workspace", children: [_jsxs("header", { className: "anlyx-workspace-header", children: [_jsxs("div", { children: [_jsx("p", { className: "anlyx-eyebrow", children: "Endpoint Map" }), _jsx("h1", { children: endpoint ? `${endpoint.method} ${endpoint.path}` : "No endpoint selected" })] }), endpoint ? (_jsx(StatusBadge, { tone: endpoint.confidence ?? "unknown", children: endpoint.confidence ?? "unknown" })) : null] }), _jsx("section", { className: "anlyx-endpoint-map", role: "region", "aria-label": "Endpoint Map", children: flow && model && model.nodes.length > 0 ? (_jsxs(_Fragment, { children: [_jsx(FlowLegend, {}), _jsx("ul", { className: "anlyx-sr-only", "aria-label": "Endpoint map node list", children: nodes.map((node) => (_jsx("li", { children: _jsxs("button", { type: "button", onClick: () => onSelectNode(node.data.node), children: ["Select node ", node.data.label] }) }, node.id))) }), _jsx("ul", { className: "anlyx-sr-only", "aria-label": "Replay node state", children: nodes.map((node) => (_jsx("li", { "data-replay-active": String(Boolean(node.data.isReplayActive)), "data-testid": `replay-node-${node.id}`, children: node.id }, node.id))) }), _jsx("ul", { className: "anlyx-sr-only", "aria-label": "Replay edge state", children: edges.map((edge) => (_jsxs("li", { "data-replay-active": String(Boolean(edge.data?.isReplayActive)), "data-testid": `replay-edge-${edge.source}-${edge.target}`, children: [edge.source, " to ", edge.target] }, edge.id))) }), _jsxs(ReactFlow, { className: "anlyx-react-flow", edges: edges, fitView: true, maxZoom: 1.25, minZoom: 0.45, nodes: nodes, nodesConnectable: false, nodesDraggable: false, nodeTypes: nodeTypes, onNodeClick: (_, node) => onSelectNode(node.data.node), panOnScroll: true, proOptions: { hideAttribution: true }, zoomOnDoubleClick: false, zoomOnScroll: false, children: [_jsx(Background, { color: "#dfe5ee", gap: 24, variant: BackgroundVariant.Dots }), _jsx(Controls, { showInteractive: false })] })] })) : (_jsx("div", { className: "anlyx-endpoint-map-empty", children: _jsx("p", { children: "No flow available for this endpoint yet." }) })) })] }));
|
|
39
|
+
}
|
|
40
|
+
function isReplayEdgeActive(edge, activeEdge) {
|
|
41
|
+
if (!activeEdge) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
return ((edge.source === activeEdge.from && edge.target === activeEdge.to) ||
|
|
45
|
+
(edge.source === activeEdge.to && edge.target === activeEdge.from));
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=EndpointMapCanvas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EndpointMapCanvas.js","sourceRoot":"","sources":["../../src/components/EndpointMapCanvas.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FlowLegend.d.ts","sourceRoot":"","sources":["../../src/components/FlowLegend.tsx"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,IAAI,GAAG,CAAC,OAAO,CAiBxC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
export function FlowLegend() {
|
|
3
|
+
return (_jsxs("div", { className: "anlyx-flow-legend", "aria-label": "Flow legend", children: [_jsxs("span", { children: [_jsx("i", { className: "anlyx-flow-legend__mark anlyx-flow-legend__mark--main" }), "Main Flow"] }), _jsxs("span", { children: [_jsx("i", { className: "anlyx-flow-legend__mark anlyx-flow-legend__mark--sub" }), "Sub Flow"] }), _jsxs("span", { children: [_jsx("i", { className: "anlyx-flow-legend__mark anlyx-flow-legend__mark--unknown" }), "Unknown"] })] }));
|
|
4
|
+
}
|
|
5
|
+
//# sourceMappingURL=FlowLegend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FlowLegend.js","sourceRoot":"","sources":["../../src/components/FlowLegend.tsx"],"names":[],"mappings":";AAAA,MAAM,UAAU,UAAU;IACxB,OAAO,CACL,eAAK,SAAS,EAAC,mBAAmB,gBAAY,aAAa,aACzD,2BACE,YAAG,SAAS,EAAC,uDAAuD,GAAG,iBAElE,EACP,2BACE,YAAG,SAAS,EAAC,sDAAsD,GAAG,gBAEjE,EACP,2BACE,YAAG,SAAS,EAAC,0DAA0D,GAAG,eAErE,IACH,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { NodeProps } from "@xyflow/react";
|
|
2
|
+
import type { AnlyxReactFlowNode } from "../flow/build-react-flow-model.js";
|
|
3
|
+
export declare function FlowNodeCard({ data, selected }: NodeProps<AnlyxReactFlowNode>): JSX.Element;
|
|
4
|
+
//# sourceMappingURL=FlowNodeCard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FlowNodeCard.d.ts","sourceRoot":"","sources":["../../src/components/FlowNodeCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAE5E,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,SAAS,CAAC,kBAAkB,CAAC,GAAG,GAAG,CAAC,OAAO,CAyB3F"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { StatusBadge } from "./StatusBadge.js";
|
|
3
|
+
export function FlowNodeCard({ data, selected }) {
|
|
4
|
+
const confidence = data.confidence ?? "unknown";
|
|
5
|
+
return (_jsxs("button", { className: [
|
|
6
|
+
"anlyx-flow-node",
|
|
7
|
+
`anlyx-flow-node--${data.type}`,
|
|
8
|
+
`anlyx-flow-node--${data.flowRole}`,
|
|
9
|
+
data.isReplayActive ? "anlyx-flow-node--replay-active" : "",
|
|
10
|
+
selected ? "anlyx-flow-node--selected" : ""
|
|
11
|
+
].join(" "), onClick: () => data.onSelectNode?.(data.node), type: "button", "aria-label": `Select node ${data.label}`, "data-replay-active": String(Boolean(data.isReplayActive)), "data-testid": `flow-node-${data.node.id}`, children: [_jsx("span", { className: "anlyx-flow-node__type", children: data.type }), _jsx("span", { className: "anlyx-flow-node__label", children: data.label }), _jsx(StatusBadge, { tone: confidence, label: "confidence", children: confidence })] }));
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=FlowNodeCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FlowNodeCard.js","sourceRoot":"","sources":["../../src/components/FlowNodeCard.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,MAAM,UAAU,YAAY,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAiC;IAC5E,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,SAAS,CAAC;IAEhD,OAAO,CACL,kBACE,SAAS,EAAE;YACT,iBAAiB;YACjB,oBAAoB,IAAI,CAAC,IAAI,EAAE;YAC/B,oBAAoB,IAAI,CAAC,QAAQ,EAAE;YACnC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,EAAE;YAC3D,QAAQ,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,EAAE;SAC5C,CAAC,IAAI,CAAC,GAAG,CAAC,EACX,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAC7C,IAAI,EAAC,QAAQ,gBACD,eAAe,IAAI,CAAC,KAAK,EAAE,wBACnB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,iBAC3C,aAAa,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,aAExC,eAAM,SAAS,EAAC,uBAAuB,YAAE,IAAI,CAAC,IAAI,GAAQ,EAC1D,eAAM,SAAS,EAAC,wBAAwB,YAAE,IAAI,CAAC,KAAK,GAAQ,EAC5D,KAAC,WAAW,IAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAC,YAAY,YAC9C,UAAU,GACC,IACP,CACV,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { EndpointFlow, FlowNode, ScanResult } from "@anlyx/core";
|
|
2
|
+
type InspectorPanelProps = {
|
|
3
|
+
data: ScanResult;
|
|
4
|
+
selectedFlow: EndpointFlow | undefined;
|
|
5
|
+
selectedNode: FlowNode | undefined;
|
|
6
|
+
};
|
|
7
|
+
export declare function InspectorPanel({ data, selectedFlow, selectedNode }: InspectorPanelProps): JSX.Element;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=InspectorPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InspectorPanel.d.ts","sourceRoot":"","sources":["../../src/components/InspectorPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAkB,UAAU,EAAE,MAAM,aAAa,CAAC;AAItF,KAAK,mBAAmB,GAAG;IACzB,IAAI,EAAE,UAAU,CAAC;IACjB,YAAY,EAAE,YAAY,GAAG,SAAS,CAAC;IACvC,YAAY,EAAE,QAAQ,GAAG,SAAS,CAAC;CACpC,CAAC;AAEF,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,YAAY,EACZ,YAAY,EACb,EAAE,mBAAmB,GAAG,GAAG,CAAC,OAAO,CAsDnC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { StatusBadge } from "./StatusBadge.js";
|
|
3
|
+
export function InspectorPanel({ data, selectedFlow, selectedNode }) {
|
|
4
|
+
const linkedPages = selectedNode ? findLinkedPages(data, selectedNode.id) : [];
|
|
5
|
+
return (_jsxs("aside", { className: "anlyx-inspector", role: "complementary", "aria-label": "Inspector", children: [_jsxs("div", { className: "anlyx-panel-heading", children: [_jsx("p", { className: "anlyx-eyebrow", children: "Inspector" }), _jsx("h2", { children: "Selected Node" })] }), selectedNode ? (_jsxs("div", { className: "anlyx-inspector-stack", children: [_jsx(Field, { label: "Type", value: selectedNode.type }), _jsx(Field, { label: "Label", value: selectedNode.label }), _jsx(Field, { label: "File path", value: selectedNode.filePath ?? "Unknown" }), _jsx(Field, { label: "Line number", value: formatLineNumber(selectedNode.lineNumber) }), selectedNode.metadata ? (_jsxs("section", { className: "anlyx-inspector-group", "aria-label": "Metadata", children: [_jsx("h3", { children: "Metadata" }), _jsx("pre", { className: "anlyx-metadata", children: JSON.stringify(selectedNode.metadata, null, 2) })] })) : null, _jsxs("div", { className: "anlyx-field", children: [_jsx("span", { className: "anlyx-field__label", children: "Confidence" }), _jsx(StatusBadge, { tone: selectedNode.confidence ?? "unknown", label: "confidence", children: selectedNode.confidence ?? "unknown" })] }), _jsxs("section", { className: "anlyx-inspector-group", "aria-label": "Linked pages", children: [_jsx("h3", { children: "Linked pages" }), linkedPages.length > 0 ? (_jsx("ul", { children: linkedPages.map((page) => (_jsx("li", { children: page.route }, page.id))) })) : (_jsx("p", { children: "None" }))] }), _jsxs("section", { className: "anlyx-inspector-group", "aria-label": "Sub flows", children: [_jsx("h3", { children: "Sub flows" }), _jsxs("p", { children: [selectedFlow?.subFlows.length ?? 0, " collapsed"] })] }), _jsxs("section", { className: "anlyx-inspector-group", "aria-label": "DB tables", children: [_jsx("h3", { children: "DB tables" }), _jsx("p", { children: findDatabaseLabel(selectedFlow) ?? "None" })] })] })) : (_jsx("p", { className: "anlyx-empty", children: "No node selected" }))] }));
|
|
6
|
+
}
|
|
7
|
+
function Field({ label, value }) {
|
|
8
|
+
return (_jsxs("div", { className: "anlyx-field", children: [_jsx("span", { className: "anlyx-field__label", children: label }), _jsx("span", { className: "anlyx-field__value", children: value })] }));
|
|
9
|
+
}
|
|
10
|
+
function formatLineNumber(lineNumber) {
|
|
11
|
+
return lineNumber === undefined ? "Unknown" : String(lineNumber);
|
|
12
|
+
}
|
|
13
|
+
function findLinkedPages(data, nodeId) {
|
|
14
|
+
return data.pages.filter((page) => page.apiCalls.some((apiCall) => apiCall.endpointId === nodeId));
|
|
15
|
+
}
|
|
16
|
+
function findDatabaseLabel(flow) {
|
|
17
|
+
return flow?.nodes.find((node) => node.type === "database")?.label;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=InspectorPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InspectorPanel.js","sourceRoot":"","sources":["../../src/components/InspectorPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { PageStoryboard } from "@anlyx/core";
|
|
2
|
+
type PageListProps = {
|
|
3
|
+
pages: PageStoryboard[];
|
|
4
|
+
selectedPageId: string | undefined;
|
|
5
|
+
onSelectPage: (page: PageStoryboard) => void;
|
|
6
|
+
};
|
|
7
|
+
export declare function PageList({ pages, selectedPageId, onSelectPage }: PageListProps): JSX.Element;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=PageList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageList.d.ts","sourceRoot":"","sources":["../../src/components/PageList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAIlD,KAAK,aAAa,GAAG;IACnB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,YAAY,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;CAC9C,CAAC;AAEF,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,EAAE,aAAa,GAAG,GAAG,CAAC,OAAO,CAiC5F"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { StatusBadge } from "./StatusBadge.js";
|
|
3
|
+
export function PageList({ pages, selectedPageId, onSelectPage }) {
|
|
4
|
+
return (_jsxs("section", { className: "anlyx-sidebar-section", "aria-labelledby": "anlyx-pages-heading", children: [_jsx("div", { className: "anlyx-section-heading", id: "anlyx-pages-heading", children: "Pages" }), _jsx("ul", { className: "anlyx-list", "aria-label": "Page list", children: pages.map((page) => (_jsx("li", { className: "anlyx-list-item", children: _jsxs("button", { className: "anlyx-page-button", type: "button", "aria-current": page.id === selectedPageId ? "true" : undefined, "aria-label": `${page.route} ${page.captureStatus} ${page.apiCalls.length} API calls ${page.screenshots.length} screenshots`, onClick: () => onSelectPage(page), children: [_jsx("span", { className: "anlyx-list-item__line", children: _jsx("span", { className: "anlyx-list-item__primary", children: page.route }) }), _jsxs("span", { className: "anlyx-list-item__meta", children: [_jsx(StatusBadge, { tone: page.captureStatus, children: page.captureStatus }), _jsxs("span", { children: [page.apiCalls.length, " API calls"] }), _jsxs("span", { children: [page.screenshots.length, " screenshots"] })] }), page.errorMessage ? (_jsx("span", { className: "anlyx-list-item__meta", children: page.errorMessage })) : null] }) }, page.id))) })] }));
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=PageList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageList.js","sourceRoot":"","sources":["../../src/components/PageList.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAQ/C,MAAM,UAAU,QAAQ,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,EAAiB;IAC7E,OAAO,CACL,mBAAS,SAAS,EAAC,uBAAuB,qBAAiB,qBAAqB,aAC9E,cAAK,SAAS,EAAC,uBAAuB,EAAC,EAAE,EAAC,qBAAqB,sBAEzD,EACN,aAAI,SAAS,EAAC,YAAY,gBAAY,WAAW,YAC9C,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACnB,aAAI,SAAS,EAAC,iBAAiB,YAC7B,kBACE,SAAS,EAAC,mBAAmB,EAC7B,IAAI,EAAC,QAAQ,kBACC,IAAI,CAAC,EAAE,KAAK,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,gBACjD,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,cAAc,IAAI,CAAC,WAAW,CAAC,MAAM,cAAc,EAC1H,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,aAEjC,eAAM,SAAS,EAAC,uBAAuB,YACrC,eAAM,SAAS,EAAC,0BAA0B,YAAE,IAAI,CAAC,KAAK,GAAQ,GACzD,EACP,gBAAM,SAAS,EAAC,uBAAuB,aACrC,KAAC,WAAW,IAAC,IAAI,EAAE,IAAI,CAAC,aAAa,YAAG,IAAI,CAAC,aAAa,GAAe,EACzE,2BAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,kBAAkB,EAC7C,2BAAO,IAAI,CAAC,WAAW,CAAC,MAAM,oBAAoB,IAC7C,EACN,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CACnB,eAAM,SAAS,EAAC,uBAAuB,YAAE,IAAI,CAAC,YAAY,GAAQ,CACnE,CAAC,CAAC,CAAC,IAAI,IACD,IAnB0B,IAAI,CAAC,EAAE,CAoBvC,CACN,CAAC,GACC,IACG,CACX,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageStoryboardCard.d.ts","sourceRoot":"","sources":["../../src/components/PageStoryboardCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAIlD,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,cAAc,CAAC;CACtB,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,EAAE,IAAI,EAAE,EAAE,uBAAuB,GAAG,GAAG,CAAC,OAAO,CAsBjF"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { ScreenshotSegmentCard } from "./ScreenshotSegmentCard.js";
|
|
3
|
+
export function PageStoryboardCard({ page }) {
|
|
4
|
+
return (_jsxs("section", { className: "anlyx-storyboard-panel", "aria-label": "Screenshot segments", children: [_jsxs("div", { className: "anlyx-storyboard-section-heading", children: [_jsx("h2", { children: "Segments" }), _jsx("span", { children: page.screenshots.length })] }), page.screenshots.length > 0 ? (_jsx("div", { className: "anlyx-segment-grid", children: page.screenshots.map((segment) => (_jsx(ScreenshotSegmentCard, { segment: segment }, `${page.id}:segment:${segment.segmentIndex}`))) })) : (_jsx("p", { className: "anlyx-empty-inline", children: "No screenshots captured yet." }))] }));
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=PageStoryboardCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageStoryboardCard.js","sourceRoot":"","sources":["../../src/components/PageStoryboardCard.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAMnE,MAAM,UAAU,kBAAkB,CAAC,EAAE,IAAI,EAA2B;IAClE,OAAO,CACL,mBAAS,SAAS,EAAC,wBAAwB,gBAAY,qBAAqB,aAC1E,eAAK,SAAS,EAAC,kCAAkC,aAC/C,oCAAiB,EACjB,yBAAO,IAAI,CAAC,WAAW,CAAC,MAAM,GAAQ,IAClC,EAEL,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAC7B,cAAK,SAAS,EAAC,oBAAoB,YAChC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CACjC,KAAC,qBAAqB,IAEpB,OAAO,EAAE,OAAO,IADX,GAAG,IAAI,CAAC,EAAE,YAAY,OAAO,CAAC,YAAY,EAAE,CAEjD,CACH,CAAC,GACE,CACP,CAAC,CAAC,CAAC,CACF,YAAG,SAAS,EAAC,oBAAoB,6CAAiC,CACnE,IACO,CACX,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { PageStoryboard } from "@anlyx/core";
|
|
2
|
+
export type PageStoryboardViewProps = {
|
|
3
|
+
page: PageStoryboard | undefined;
|
|
4
|
+
};
|
|
5
|
+
export declare function PageStoryboardView({ page }: PageStoryboardViewProps): JSX.Element;
|
|
6
|
+
//# sourceMappingURL=PageStoryboardView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageStoryboardView.d.ts","sourceRoot":"","sources":["../../src/components/PageStoryboardView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAOlD,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,cAAc,GAAG,SAAS,CAAC;CAClC,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,EAAE,IAAI,EAAE,EAAE,uBAAuB,GAAG,GAAG,CAAC,OAAO,CA+CjF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { ApiCallList } from "./ApiCallList.js";
|
|
3
|
+
import { CaptureStatusEmptyState } from "./CaptureStatusEmptyState.js";
|
|
4
|
+
import { PageStoryboardCard } from "./PageStoryboardCard.js";
|
|
5
|
+
import { StatusBadge } from "./StatusBadge.js";
|
|
6
|
+
export function PageStoryboardView({ page }) {
|
|
7
|
+
return (_jsxs("main", { className: "anlyx-workspace", children: [_jsxs("header", { className: "anlyx-workspace-header", children: [_jsxs("div", { children: [_jsx("p", { className: "anlyx-eyebrow", children: "Page Storyboard" }), _jsx("h1", { children: "Page Storyboard" })] }), page ? _jsx(StatusBadge, { tone: page.captureStatus, children: page.captureStatus }) : null] }), _jsx("section", { className: "anlyx-page-storyboard", role: "region", "aria-label": "Page Storyboard", children: page ? (_jsxs(_Fragment, { children: [_jsxs("section", { className: "anlyx-page-summary", "aria-label": "Selected page summary", children: [_jsxs("div", { children: [_jsx("span", { className: "anlyx-field__label", children: "Route" }), _jsx("h2", { children: page.route })] }), _jsxs("div", { children: [_jsx("span", { className: "anlyx-field__label", children: "File" }), _jsx("p", { children: page.filePath ?? "Unknown" })] }), _jsxs("div", { children: [_jsx("span", { className: "anlyx-field__label", children: "Status" }), _jsx(StatusBadge, { tone: page.captureStatus, children: page.captureStatus })] })] }), _jsx(CaptureStatusEmptyState, { status: page.captureStatus, ...(page.errorMessage ? { reason: page.errorMessage } : {}) }), _jsxs("div", { className: "anlyx-storyboard-grid", children: [_jsx(PageStoryboardCard, { page: page }), _jsx(ApiCallList, { apiCalls: page.apiCalls })] })] })) : (_jsx("div", { className: "anlyx-storyboard-empty", children: _jsx("p", { children: "No pages available yet." }) })) })] }));
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=PageStoryboardView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageStoryboardView.js","sourceRoot":"","sources":["../../src/components/PageStoryboardView.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAM/C,MAAM,UAAU,kBAAkB,CAAC,EAAE,IAAI,EAA2B;IAClE,OAAO,CACL,gBAAM,SAAS,EAAC,iBAAiB,aAC/B,kBAAQ,SAAS,EAAC,wBAAwB,aACxC,0BACE,YAAG,SAAS,EAAC,eAAe,gCAAoB,EAChD,2CAAwB,IACpB,EACL,IAAI,CAAC,CAAC,CAAC,KAAC,WAAW,IAAC,IAAI,EAAE,IAAI,CAAC,aAAa,YAAG,IAAI,CAAC,aAAa,GAAe,CAAC,CAAC,CAAC,IAAI,IACjF,EAET,kBAAS,SAAS,EAAC,uBAAuB,EAAC,IAAI,EAAC,QAAQ,gBAAY,iBAAiB,YAClF,IAAI,CAAC,CAAC,CAAC,CACN,8BACE,mBAAS,SAAS,EAAC,oBAAoB,gBAAY,uBAAuB,aACxE,0BACE,eAAM,SAAS,EAAC,oBAAoB,sBAAa,EACjD,uBAAK,IAAI,CAAC,KAAK,GAAM,IACjB,EACN,0BACE,eAAM,SAAS,EAAC,oBAAoB,qBAAY,EAChD,sBAAI,IAAI,CAAC,QAAQ,IAAI,SAAS,GAAK,IAC/B,EACN,0BACE,eAAM,SAAS,EAAC,oBAAoB,uBAAc,EAClD,KAAC,WAAW,IAAC,IAAI,EAAE,IAAI,CAAC,aAAa,YAAG,IAAI,CAAC,aAAa,GAAe,IACrE,IACE,EAEV,KAAC,uBAAuB,IACtB,MAAM,EAAE,IAAI,CAAC,aAAa,KACtB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAC5D,EAEF,eAAK,SAAS,EAAC,uBAAuB,aACpC,KAAC,kBAAkB,IAAC,IAAI,EAAE,IAAI,GAAI,EAClC,KAAC,WAAW,IAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,GAAI,IACpC,IACL,CACJ,CAAC,CAAC,CAAC,CACF,cAAK,SAAS,EAAC,wBAAwB,YACrC,kDAA8B,GAC1B,CACP,GACO,IACL,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ReplayLiteState } from "../replay/use-replay-lite.js";
|
|
2
|
+
export type ReplayControlsProps = {
|
|
3
|
+
state: ReplayLiteState;
|
|
4
|
+
loop: boolean;
|
|
5
|
+
disabled?: boolean;
|
|
6
|
+
unavailableReason?: string;
|
|
7
|
+
onPlay: () => void;
|
|
8
|
+
onPause: () => void;
|
|
9
|
+
onRestart: () => void;
|
|
10
|
+
onToggleLoop: () => void;
|
|
11
|
+
};
|
|
12
|
+
export declare function ReplayControls({ state, loop, disabled, unavailableReason, onPlay, onPause, onRestart, onToggleLoop }: ReplayControlsProps): JSX.Element;
|
|
13
|
+
//# sourceMappingURL=ReplayControls.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReplayControls.d.ts","sourceRoot":"","sources":["../../src/components/ReplayControls.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE,eAAe,CAAC;IACvB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B,CAAC;AAEF,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,IAAI,EACJ,QAAgB,EAChB,iBAAiB,EACjB,MAAM,EACN,OAAO,EACP,SAAS,EACT,YAAY,EACb,EAAE,mBAAmB,GAAG,GAAG,CAAC,OAAO,CA2BnC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
export function ReplayControls({ state, loop, disabled = false, unavailableReason, onPlay, onPause, onRestart, onToggleLoop }) {
|
|
3
|
+
return (_jsxs("section", { className: "anlyx-replay", "aria-label": "Replay Lite controls", children: [_jsxs("div", { className: "anlyx-replay__buttons", "aria-label": "Replay actions", children: [_jsx("button", { type: "button", disabled: disabled || state.isPlaying, onClick: onPlay, children: "Play" }), _jsx("button", { type: "button", disabled: disabled || !state.isPlaying, onClick: onPause, children: "Pause" }), _jsx("button", { type: "button", disabled: disabled, onClick: onRestart, children: "Restart" }), _jsxs("button", { type: "button", "aria-pressed": loop, disabled: disabled, onClick: onToggleLoop, children: ["Loop ", loop ? "on" : "off"] })] }), _jsxs("div", { className: "anlyx-replay__state", children: [_jsxs("span", { children: ["Phase: ", state.phase] }), _jsxs("span", { children: ["Active: ", state.activeNodeId ?? "none"] }), _jsx("span", { children: "Main Flow only" })] }), disabled && unavailableReason ? (_jsx("p", { className: "anlyx-replay__empty", children: unavailableReason })) : null] }));
|
|
4
|
+
}
|
|
5
|
+
//# sourceMappingURL=ReplayControls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReplayControls.js","sourceRoot":"","sources":["../../src/components/ReplayControls.tsx"],"names":[],"mappings":";AAaA,MAAM,UAAU,cAAc,CAAC,EAC7B,KAAK,EACL,IAAI,EACJ,QAAQ,GAAG,KAAK,EAChB,iBAAiB,EACjB,MAAM,EACN,OAAO,EACP,SAAS,EACT,YAAY,EACQ;IACpB,OAAO,CACL,mBAAS,SAAS,EAAC,cAAc,gBAAY,sBAAsB,aACjE,eAAK,SAAS,EAAC,uBAAuB,gBAAY,gBAAgB,aAChE,iBAAQ,IAAI,EAAC,QAAQ,EAAC,QAAQ,EAAE,QAAQ,IAAI,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,qBAEnE,EACT,iBAAQ,IAAI,EAAC,QAAQ,EAAC,QAAQ,EAAE,QAAQ,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,sBAErE,EACT,iBAAQ,IAAI,EAAC,QAAQ,EAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,wBAEnD,EACT,kBAAQ,IAAI,EAAC,QAAQ,kBAAe,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,sBAC3E,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAClB,IACL,EACN,eAAK,SAAS,EAAC,qBAAqB,aAClC,sCAAc,KAAK,CAAC,KAAK,IAAQ,EACjC,uCAAe,KAAK,CAAC,YAAY,IAAI,MAAM,IAAQ,EACnD,4CAA2B,IACvB,EACL,QAAQ,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAC/B,YAAG,SAAS,EAAC,qBAAqB,YAAE,iBAAiB,GAAK,CAC3D,CAAC,CAAC,CAAC,IAAI,IACA,CACX,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ScreenshotSegment } from "@anlyx/core";
|
|
2
|
+
export type ScreenshotSegmentCardProps = {
|
|
3
|
+
segment: ScreenshotSegment;
|
|
4
|
+
};
|
|
5
|
+
export declare function ScreenshotSegmentCard({ segment }: ScreenshotSegmentCardProps): JSX.Element;
|
|
6
|
+
//# sourceMappingURL=ScreenshotSegmentCard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScreenshotSegmentCard.d.ts","sourceRoot":"","sources":["../../src/components/ScreenshotSegmentCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,MAAM,MAAM,0BAA0B,GAAG;IACvC,OAAO,EAAE,iBAAiB,CAAC;CAC5B,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,EAAE,OAAO,EAAE,EAAE,0BAA0B,GAAG,GAAG,CAAC,OAAO,CAqB1F"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
export function ScreenshotSegmentCard({ segment }) {
|
|
3
|
+
const title = segment.title ?? `Segment ${segment.segmentIndex + 1}`;
|
|
4
|
+
return (_jsxs("article", { className: "anlyx-segment-card", children: [_jsx("div", { className: "anlyx-segment-card__image", children: segment.path ? _jsx("img", { alt: title, src: segment.path }) : _jsx("span", { children: "No image path" }) }), _jsxs("div", { className: "anlyx-segment-card__body", children: [_jsxs("h3", { children: ["Segment ", segment.segmentIndex + 1] }), segment.title ? _jsx("p", { children: segment.title }) : null, segment.path ? _jsx("code", { children: segment.path }) : _jsx("code", { children: "No path" }), _jsxs("div", { className: "anlyx-segment-card__meta", children: [_jsxs("span", { children: ["scrollY ", segment.scrollY] }), _jsxs("span", { children: [segment.viewport.width, " x ", segment.viewport.height] })] })] })] }));
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=ScreenshotSegmentCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScreenshotSegmentCard.js","sourceRoot":"","sources":["../../src/components/ScreenshotSegmentCard.tsx"],"names":[],"mappings":";AAMA,MAAM,UAAU,qBAAqB,CAAC,EAAE,OAAO,EAA8B;IAC3E,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,WAAW,OAAO,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;IAErE,OAAO,CACL,mBAAS,SAAS,EAAC,oBAAoB,aACrC,cAAK,SAAS,EAAC,2BAA2B,YACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,cAAK,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,IAAI,GAAI,CAAC,CAAC,CAAC,2CAA0B,GAC/E,EACN,eAAK,SAAS,EAAC,0BAA0B,aACvC,qCAAa,OAAO,CAAC,YAAY,GAAG,CAAC,IAAM,EAC1C,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,sBAAI,OAAO,CAAC,KAAK,GAAK,CAAC,CAAC,CAAC,IAAI,EAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,yBAAO,OAAO,CAAC,IAAI,GAAQ,CAAC,CAAC,CAAC,qCAAoB,EAClE,eAAK,SAAS,EAAC,0BAA0B,aACvC,uCAAe,OAAO,CAAC,OAAO,IAAQ,EACtC,2BACG,OAAO,CAAC,QAAQ,CAAC,KAAK,SAAK,OAAO,CAAC,QAAQ,CAAC,MAAM,IAC9C,IACH,IACF,IACE,CACX,CAAC;AACJ,CAAC"}
|