@sudobility/testomniac_ui 0.0.34 → 0.0.36

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.
@@ -0,0 +1,16 @@
1
+ import '@xyflow/react/dist/style.css';
2
+ import type { GraphTransition, GraphView } from '@sudobility/testomniac_client';
3
+ interface PagesGraphViewProps {
4
+ views: GraphView[];
5
+ transitions: GraphTransition[];
6
+ route: GraphTransition[] | null;
7
+ selectedTargetViewId: number | null;
8
+ onSelectTarget: (viewId: number | null) => void;
9
+ showRemoved: boolean;
10
+ onToggleRemoved: (next: boolean) => void;
11
+ originViewId: number | null;
12
+ fill?: boolean;
13
+ }
14
+ export declare function PagesGraphView({ views, transitions, route, selectedTargetViewId, onSelectTarget, showRemoved, onToggleRemoved, originViewId, fill, }: PagesGraphViewProps): import("react").JSX.Element;
15
+ export {};
16
+ //# sourceMappingURL=PagesGraphView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PagesGraphView.d.ts","sourceRoot":"","sources":["../../../src/components/pages/PagesGraphView.tsx"],"names":[],"mappings":"AAYA,OAAO,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAMhF,UAAU,mBAAmB;IAC3B,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,KAAK,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;IAChC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAChD,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAeD,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,WAAW,EACX,KAAK,EACL,oBAAoB,EACpB,cAAc,EACd,WAAW,EACX,eAAe,EACf,YAAY,EACZ,IAAI,GACL,EAAE,mBAAmB,+BA+NrB"}
@@ -0,0 +1,161 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useMemo } from 'react';
3
+ import { ReactFlow, Background, Controls, MiniMap, useNodesState, useEdgesState, MarkerType, } from '@xyflow/react';
4
+ import '@xyflow/react/dist/style.css';
5
+ import { assignColumns, MAX_GRAPH_NODES, UNREACHABLE_COLUMN } from './graphLayout';
6
+ const COLUMN_WIDTH = 260;
7
+ const ROW_HEIGHT = 90;
8
+ /**
9
+ * Label for a view.
10
+ *
11
+ * Several views can share one URL path — a cart with items and an empty one, a
12
+ * modal open and closed. That separation is the whole reason the graph is keyed
13
+ * on signatures, so a shared path gets a short signature suffix rather than
14
+ * collapsing into indistinguishable duplicates.
15
+ */
16
+ function labelFor(view, sharesPath) {
17
+ const base = view.title ? `${view.urlPath} · ${view.title}` : view.urlPath;
18
+ return sharesPath ? `${base} · ${view.signature.slice(0, 6)}` : base;
19
+ }
20
+ export function PagesGraphView({ views, transitions, route, selectedTargetViewId, onSelectTarget, showRemoved, onToggleRemoved, originViewId, fill, }) {
21
+ const pathCounts = useMemo(() => {
22
+ const counts = new Map();
23
+ for (const view of views) {
24
+ counts.set(view.urlPath, (counts.get(view.urlPath) ?? 0) + 1);
25
+ }
26
+ return counts;
27
+ }, [views]);
28
+ /**
29
+ * Views nothing links to. The scan bootstraps by navigating directly to many
30
+ * paths, so an orphan is worth surfacing rather than hiding.
31
+ */
32
+ const inbound = useMemo(() => {
33
+ const seen = new Set();
34
+ for (const transition of transitions) {
35
+ if (transition.removedAt == null && transition.toViewId != null) {
36
+ seen.add(transition.toViewId);
37
+ }
38
+ }
39
+ return seen;
40
+ }, [transitions]);
41
+ const { flowNodes, flowEdges, droppedCount, unreachableCount } = useMemo(() => {
42
+ const liveEdges = transitions.filter(edge => edge.removedAt == null);
43
+ const origin = originViewId ?? views[0]?.id ?? 0;
44
+ const { columns, unreachable } = assignColumns(views, liveEdges, origin);
45
+ // Cap by distance from the origin, keeping the nearest. Unreachable views
46
+ // sort last so they are dropped first.
47
+ const ordered = [...views].sort((a, b) => {
48
+ const ca = columns.get(a.id) ?? UNREACHABLE_COLUMN;
49
+ const cb = columns.get(b.id) ?? UNREACHABLE_COLUMN;
50
+ const ra = ca === UNREACHABLE_COLUMN ? Number.MAX_SAFE_INTEGER : ca;
51
+ const rb = cb === UNREACHABLE_COLUMN ? Number.MAX_SAFE_INTEGER : cb;
52
+ if (ra !== rb)
53
+ return ra - rb;
54
+ return a.urlPath.localeCompare(b.urlPath);
55
+ });
56
+ const kept = ordered.slice(0, MAX_GRAPH_NODES);
57
+ const keptIds = new Set(kept.map(view => view.id));
58
+ // Fixed x for the unreachable column, computed BEFORE positioning so it
59
+ // does not depend on mutation order of rowByColumn.
60
+ const maxColumn = kept.reduce((acc, view) => {
61
+ const column = columns.get(view.id) ?? UNREACHABLE_COLUMN;
62
+ return column > acc ? column : acc;
63
+ }, 0);
64
+ const unreachableX = (maxColumn + 2) * COLUMN_WIDTH;
65
+ // Stable ordering within a column: by path, never by insertion.
66
+ const rowByColumn = new Map();
67
+ const positioned = kept.map(view => {
68
+ const column = columns.get(view.id) ?? UNREACHABLE_COLUMN;
69
+ const row = rowByColumn.get(column) ?? 0;
70
+ rowByColumn.set(column, row + 1);
71
+ const isTarget = view.id === selectedTargetViewId;
72
+ return {
73
+ id: String(view.id),
74
+ position: {
75
+ x: column === UNREACHABLE_COLUMN ? unreachableX : column * COLUMN_WIDTH,
76
+ y: row * ROW_HEIGHT,
77
+ },
78
+ data: {
79
+ label: labelFor(view, (pathCounts.get(view.urlPath) ?? 0) > 1),
80
+ },
81
+ className: [
82
+ 'rounded-md border px-3 py-2 text-xs',
83
+ isTarget
84
+ ? 'border-foreground bg-foreground text-background'
85
+ : 'border-border bg-card text-foreground',
86
+ !inbound.has(view.id) ? 'ring-1 ring-destructive' : '',
87
+ ]
88
+ .filter(Boolean)
89
+ .join(' '),
90
+ };
91
+ });
92
+ const routeIds = new Set((route ?? []).map(edge => edge.id));
93
+ const visible = transitions.filter(edge => edge.toViewId != null &&
94
+ keptIds.has(edge.fromViewId) &&
95
+ keptIds.has(edge.toViewId) &&
96
+ (showRemoved || edge.removedAt == null));
97
+ const flow = visible.map(edge => {
98
+ const onRoute = routeIds.has(edge.id);
99
+ const removed = edge.removedAt != null;
100
+ // A transition callers have reported failing is worth seeing before it is
101
+ // walked: routing only demotes such an edge, it never removes it.
102
+ const unreliable = edge.failureCount > 0;
103
+ return {
104
+ id: String(edge.id),
105
+ source: String(edge.fromViewId),
106
+ target: String(edge.toViewId),
107
+ label: edge.triggerLabel ?? undefined,
108
+ markerEnd: { type: MarkerType.ArrowClosed },
109
+ animated: onRoute,
110
+ style: {
111
+ strokeWidth: onRoute ? 3 : 1,
112
+ opacity: route && !onRoute ? 0.25 : removed ? 0.4 : 1,
113
+ strokeDasharray: removed
114
+ ? '2 4'
115
+ : unreliable
116
+ ? '1 3'
117
+ : edge.kind === 'declared'
118
+ ? '6 4'
119
+ : undefined,
120
+ },
121
+ };
122
+ });
123
+ return {
124
+ flowNodes: positioned,
125
+ flowEdges: flow,
126
+ droppedCount: views.length - kept.length,
127
+ unreachableCount: unreachable.length,
128
+ };
129
+ }, [
130
+ views,
131
+ transitions,
132
+ route,
133
+ selectedTargetViewId,
134
+ showRemoved,
135
+ originViewId,
136
+ pathCounts,
137
+ inbound,
138
+ ]);
139
+ const [rfNodes, setRfNodes, onNodesChange] = useNodesState(flowNodes);
140
+ const [rfEdges, setRfEdges, onEdgesChange] = useEdgesState(flowEdges);
141
+ // useNodesState/useEdgesState only SEED state from their argument. Without
142
+ // this sync the graph goes stale as soon as the selected target or the
143
+ // removed-links toggle changes. PagesMapView.tsx does the same thing.
144
+ useEffect(() => {
145
+ setRfNodes(flowNodes);
146
+ setRfEdges(flowEdges);
147
+ }, [flowNodes, flowEdges, setRfNodes, setRfEdges]);
148
+ const originLabel = useMemo(() => {
149
+ const match = views.find(view => view.id === originViewId);
150
+ return match?.urlPath ?? '(unresolved)';
151
+ }, [views, originViewId]);
152
+ if (views.length === 0) {
153
+ return (_jsx("div", { className: "py-8 text-center text-muted-foreground", children: _jsx("p", { className: "text-muted-foreground", children: "No navigation graph yet. Run a scan to discover links." }) }));
154
+ }
155
+ return (_jsxs("div", { className: fill ? 'flex h-full min-h-[400px] flex-col gap-2' : 'space-y-2', children: [_jsxs("div", { className: "flex flex-shrink-0 flex-wrap items-center gap-3 text-xs text-muted-foreground", children: [_jsxs("label", { className: "flex items-center gap-1", children: [_jsx("span", { children: "Route to" }), _jsxs("select", { className: "rounded border border-border bg-card px-2 py-1 text-foreground", value: selectedTargetViewId ?? '', onChange: event => onSelectTarget(event.target.value ? Number(event.target.value) : null), children: [_jsx("option", { value: "", children: "(none)" }), [...views]
156
+ .sort((a, b) => a.urlPath.localeCompare(b.urlPath))
157
+ .map(view => (_jsx("option", { value: view.id, children: labelFor(view, (pathCounts.get(view.urlPath) ?? 0) > 1) }, view.id)))] })] }), _jsxs("label", { className: "flex items-center gap-1", children: [_jsx("input", { type: "checkbox", checked: showRemoved, onChange: event => onToggleRemoved(event.target.checked) }), _jsx("span", { children: "Show removed links" })] }), _jsxs("span", { children: ["Origin: ", originLabel] }), selectedTargetViewId != null && (_jsx("span", { children: route === null
158
+ ? 'No known route to this view.'
159
+ : `Route: ${route.length} hop${route.length === 1 ? '' : 's'}` })), unreachableCount > 0 && (_jsxs("span", { children: [unreachableCount, " view(s) not reachable from the origin."] })), droppedCount > 0 && (_jsxs("span", { children: [droppedCount, " view(s) not shown (limit ", MAX_GRAPH_NODES, ")."] }))] }), _jsx("div", { className: `w-full overflow-hidden rounded-lg border border-border ${fill ? 'min-h-0 flex-1' : 'h-[600px]'}`, children: _jsxs(ReactFlow, { nodes: rfNodes, edges: rfEdges, onNodesChange: onNodesChange, onEdgesChange: onEdgesChange, defaultViewport: { x: 40, y: 40, zoom: 0.7 }, minZoom: 0.1, className: "bg-muted", children: [_jsx(Background, {}), _jsx(Controls, {}), _jsx(MiniMap, {})] }) })] }));
160
+ }
161
+ //# sourceMappingURL=PagesGraphView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PagesGraphView.js","sourceRoot":"","sources":["../../../src/components/pages/PagesGraphView.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /** Cap on rendered nodes. Excess is dropped by distance and reported, never silently. */
2
+ export declare const MAX_GRAPH_NODES = 300;
3
+ /** Column marker for views with no path from the origin. */
4
+ export declare const UNREACHABLE_COLUMN = -1;
5
+ export interface LayoutInput {
6
+ id: number;
7
+ }
8
+ export interface LayoutEdge {
9
+ fromViewId: number;
10
+ toViewId: number | null;
11
+ }
12
+ /**
13
+ * Assign each view a column by BFS depth from the origin over LIVE transitions.
14
+ *
15
+ * Reachability is a DAG, not a tree, so shortest depth wins when a view is
16
+ * reachable several ways. Views with no path land in UNREACHABLE_COLUMN rather
17
+ * than being dropped — the scan bootstraps by navigating directly to many
18
+ * paths, so unreached views are expected and worth showing.
19
+ *
20
+ * Transitions with a null `toViewId` are skipped: they point at a path whose
21
+ * view has not been observed yet, so there is nothing to lay out.
22
+ */
23
+ export declare function assignColumns(nodes: LayoutInput[], liveEdges: LayoutEdge[], originViewId: number): {
24
+ columns: Map<number, number>;
25
+ unreachable: number[];
26
+ };
27
+ //# sourceMappingURL=graphLayout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphLayout.d.ts","sourceRoot":"","sources":["../../../src/components/pages/graphLayout.ts"],"names":[],"mappings":"AAAA,yFAAyF;AACzF,eAAO,MAAM,eAAe,MAAM,CAAC;AAEnC,4DAA4D;AAC5D,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,WAAW,EAAE,EACpB,SAAS,EAAE,UAAU,EAAE,EACvB,YAAY,EAAE,MAAM,GACnB;IAAE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAA;CAAE,CAsCzD"}
@@ -0,0 +1,56 @@
1
+ /** Cap on rendered nodes. Excess is dropped by distance and reported, never silently. */
2
+ export const MAX_GRAPH_NODES = 300;
3
+ /** Column marker for views with no path from the origin. */
4
+ export const UNREACHABLE_COLUMN = -1;
5
+ /**
6
+ * Assign each view a column by BFS depth from the origin over LIVE transitions.
7
+ *
8
+ * Reachability is a DAG, not a tree, so shortest depth wins when a view is
9
+ * reachable several ways. Views with no path land in UNREACHABLE_COLUMN rather
10
+ * than being dropped — the scan bootstraps by navigating directly to many
11
+ * paths, so unreached views are expected and worth showing.
12
+ *
13
+ * Transitions with a null `toViewId` are skipped: they point at a path whose
14
+ * view has not been observed yet, so there is nothing to lay out.
15
+ */
16
+ export function assignColumns(nodes, liveEdges, originViewId) {
17
+ const known = new Set(nodes.map(node => node.id));
18
+ const outgoing = new Map();
19
+ for (const edge of liveEdges) {
20
+ if (edge.toViewId == null)
21
+ continue;
22
+ if (!known.has(edge.fromViewId) || !known.has(edge.toViewId))
23
+ continue;
24
+ const list = outgoing.get(edge.fromViewId) ?? [];
25
+ list.push(edge.toViewId);
26
+ outgoing.set(edge.fromViewId, list);
27
+ }
28
+ const columns = new Map();
29
+ if (known.has(originViewId)) {
30
+ columns.set(originViewId, 0);
31
+ let frontier = [originViewId];
32
+ let depth = 0;
33
+ while (frontier.length > 0) {
34
+ depth += 1;
35
+ const next = [];
36
+ for (const viewId of frontier) {
37
+ for (const target of outgoing.get(viewId) ?? []) {
38
+ if (columns.has(target))
39
+ continue;
40
+ columns.set(target, depth);
41
+ next.push(target);
42
+ }
43
+ }
44
+ frontier = next;
45
+ }
46
+ }
47
+ const unreachable = [];
48
+ for (const node of nodes) {
49
+ if (!columns.has(node.id)) {
50
+ columns.set(node.id, UNREACHABLE_COLUMN);
51
+ unreachable.push(node.id);
52
+ }
53
+ }
54
+ return { columns, unreachable };
55
+ }
56
+ //# sourceMappingURL=graphLayout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphLayout.js","sourceRoot":"","sources":["../../../src/components/pages/graphLayout.ts"],"names":[],"mappings":"AAAA,yFAAyF;AACzF,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAC;AAEnC,4DAA4D;AAC5D,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,CAAC;AAWrC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAoB,EACpB,SAAuB,EACvB,YAAoB;IAEpB,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC7C,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI;YAAE,SAAS;QACpC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,SAAS;QACvE,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACjD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzB,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,IAAI,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QAC7B,IAAI,QAAQ,GAAG,CAAC,YAAY,CAAC,CAAC;QAC9B,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,KAAK,IAAI,CAAC,CAAC;YACX,MAAM,IAAI,GAAa,EAAE,CAAC;YAC1B,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;gBAC9B,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;oBAChD,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;wBAAE,SAAS;oBAClC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;oBAC3B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC;YACD,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,kBAAkB,CAAC,CAAC;YACzC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AAClC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"PagesPage.d.ts","sourceRoot":"","sources":["../../src/pages/PagesPage.tsx"],"names":[],"mappings":"AAcA,wBAAgB,SAAS,gCAmKxB"}
1
+ {"version":3,"file":"PagesPage.d.ts","sourceRoot":"","sources":["../../src/pages/PagesPage.tsx"],"names":[],"mappings":"AAiBA,wBAAgB,SAAS,gCAmOxB"}
@@ -1,15 +1,18 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useState, useMemo } from 'react';
3
- import { useEnvironmentPages, useEnvironmentTestInteractions, useRunPages, useRunTestInteractions, useRunnerPageStates, } from '@sudobility/testomniac_client';
3
+ import { useEnvironmentPages, useEnvironmentTestInteractions, useNavigationGraph, useRoute, useRunPages, useRunTestInteractions, useRunnerPageStates, } from '@sudobility/testomniac_client';
4
4
  import { ContentLayout } from '@sudobility/components';
5
5
  import { SEOHead, useTestomniacApi } from '../context/config';
6
6
  import { useRouteParams } from '../context/routing';
7
7
  import { PagesListView } from '../components/pages/PagesListView';
8
8
  import { PagesMapView } from '../components/pages/PagesMapView';
9
+ import { PagesGraphView } from '../components/pages/PagesGraphView';
9
10
  export function PagesPage() {
10
11
  const { entitySlug, envId, runId } = useRouteParams();
11
12
  const { networkClient, token, baseUrl } = useTestomniacApi();
12
13
  const [view, setView] = useState('list');
14
+ const [targetViewId, setTargetViewId] = useState(null);
15
+ const [showRemoved, setShowRemoved] = useState(false);
13
16
  const runScoped = Boolean(runId);
14
17
  const environmentPagesQuery = useEnvironmentPages(networkClient, baseUrl, token ?? '', Number(envId), { enabled: !!envId && !!token && !runScoped });
15
18
  const runPagesQuery = useRunPages(networkClient, baseUrl, token ?? '', Number(runId), {
@@ -39,6 +42,23 @@ export function PagesPage() {
39
42
  const primaryRunnerId = pages.length > 0 ? pages[0].runnerId : 0;
40
43
  const pageStatesQuery = useRunnerPageStates(networkClient, baseUrl, token ?? '', primaryRunnerId, { enabled: !!primaryRunnerId && !!token });
41
44
  const pageStates = useMemo(() => pageStatesQuery.data?.data ?? [], [pageStatesQuery.data]);
45
+ // Graph mode is environment-scoped: base_url lives on the environment and
46
+ // determines which deployed site a graph describes, so staging and
47
+ // production never share one.
48
+ const graphQuery = useNavigationGraph(networkClient, baseUrl, token ?? '', Number(envId), {
49
+ enabled: !!envId && !!token && view === 'graph',
50
+ });
51
+ const graph = graphQuery.data ?? null;
52
+ // Route targets are addressed by path: the graph is keyed on views, and
53
+ // several views can share a path.
54
+ const targetView = useMemo(() => graph?.views.find(v => v.id === targetViewId) ?? null, [graph, targetViewId]);
55
+ const routeQuery = useRoute(networkClient, baseUrl, token ?? '', Number(envId), {
56
+ urlPath: targetView?.urlPath ?? '',
57
+ signature: targetView?.signature,
58
+ }, undefined, {
59
+ enabled: !!envId && !!token && !!targetView && view === 'graph',
60
+ });
61
+ const routeHops = targetView ? (routeQuery.data?.route ?? null) : null;
42
62
  const screenshotsByPageId = useMemo(() => {
43
63
  const map = new Map();
44
64
  for (const ps of pageStates) {
@@ -58,6 +78,8 @@ export function PagesPage() {
58
78
  ? 'bg-foreground text-background'
59
79
  : 'text-muted-foreground hover:text-foreground'} rounded-l-md`, children: "List" }), _jsx("button", { onClick: () => setView('map'), className: `px-4 py-1.5 text-sm font-medium transition-colors ${view === 'map'
60
80
  ? 'bg-foreground text-background'
61
- : 'text-muted-foreground hover:text-foreground'} rounded-r-md`, children: "Map" })] })] })] }), children: pages.length === 0 ? (_jsx("div", { className: "px-4 py-4 sm:px-6", children: _jsx("p", { className: "text-muted-foreground", children: "No pages discovered yet." }) })) : view === 'list' ? (_jsx("div", { className: "px-4 py-4 sm:px-6", children: _jsx(PagesListView, { pages: pages, envId: envId, entitySlug: entitySlug, runId: runId, screenshotsByPageId: screenshotsByPageId, apiUrl: baseUrl }) })) : (_jsx("div", { className: "h-full min-h-0 p-4 sm:p-6", children: _jsx(PagesMapView, { pages: pages, testInteractions: testInteractions, envId: envId, entitySlug: entitySlug, runId: runId, screenshotsByPageId: screenshotsByPageId, apiUrl: baseUrl, fill: true }) })) }));
81
+ : 'text-muted-foreground hover:text-foreground'}`, children: "Map" }), _jsx("button", { onClick: () => setView('graph'), className: `px-4 py-1.5 text-sm font-medium transition-colors ${view === 'graph'
82
+ ? 'bg-foreground text-background'
83
+ : 'text-muted-foreground hover:text-foreground'} rounded-r-md`, children: "Graph" })] })] })] }), children: pages.length === 0 ? (_jsx("div", { className: "px-4 py-4 sm:px-6", children: _jsx("p", { className: "text-muted-foreground", children: "No pages discovered yet." }) })) : view === 'list' ? (_jsx("div", { className: "px-4 py-4 sm:px-6", children: _jsx(PagesListView, { pages: pages, envId: envId, entitySlug: entitySlug, runId: runId, screenshotsByPageId: screenshotsByPageId, apiUrl: baseUrl }) })) : view === 'graph' ? (_jsx("div", { className: "h-full min-h-0 p-4 sm:p-6", children: graphQuery.isLoading ? (_jsx("div", { className: "py-8 text-center text-muted-foreground", children: "Loading graph..." })) : graphQuery.error ? (_jsxs("div", { className: "py-8 text-center text-destructive", children: ["Error: ", graphQuery.error.message] })) : (_jsx(PagesGraphView, { views: graph?.views ?? [], transitions: graph?.transitions ?? [], route: routeHops, selectedTargetViewId: targetViewId, onSelectTarget: setTargetViewId, showRemoved: showRemoved, onToggleRemoved: setShowRemoved, originViewId: routeHops?.[0]?.fromViewId ?? null, fill: true })) })) : (_jsx("div", { className: "h-full min-h-0 p-4 sm:p-6", children: _jsx(PagesMapView, { pages: pages, testInteractions: testInteractions, envId: envId, entitySlug: entitySlug, runId: runId, screenshotsByPageId: screenshotsByPageId, apiUrl: baseUrl, fill: true }) })) }));
62
84
  }
63
85
  //# sourceMappingURL=PagesPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PagesPage.js","sourceRoot":"","sources":["../../src/pages/PagesPage.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PagesPage.js","sourceRoot":"","sources":["../../src/pages/PagesPage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EACL,mBAAmB,EACnB,8BAA8B,EAC9B,kBAAkB,EAClB,QAAQ,EACR,WAAW,EACX,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEpE,MAAM,UAAU,SAAS;IACvB,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,cAAc,EAI/C,CAAC;IACL,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAC7D,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAA2B,MAAM,CAAC,CAAC;IACnE,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IACtE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEtD,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAEjC,MAAM,qBAAqB,GAAG,mBAAmB,CAC/C,aAAa,EACb,OAAO,EACP,KAAK,IAAI,EAAE,EACX,MAAM,CAAC,KAAK,CAAC,EACb,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,EAAE,CAC9C,CAAC;IAEF,MAAM,aAAa,GAAG,WAAW,CAAC,aAAa,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE;QACpF,OAAO,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK;KAC5B,CAAC,CAAC;IAEH,MAAM,wBAAwB,GAAG,8BAA8B,CAC7D,aAAa,EACb,OAAO,EACP,KAAK,IAAI,EAAE,EACX,MAAM,CAAC,KAAK,CAAC,EACb,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,EAAE,CAC9C,CAAC;IAEF,MAAM,gBAAgB,GAAG,sBAAsB,CAC7C,aAAa,EACb,OAAO,EACP,KAAK,IAAI,EAAE,EACX,MAAM,CAAC,KAAK,CAAC,EACb,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,EAAE,CAChC,CAAC;IAEF,MAAM,KAAK,GAAG,SAAS;QACrB,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;QAClC,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,gBAAgB,GAAG,SAAS;QAChC,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;QACrC,CAAC,CAAC,CAAC,wBAAwB,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IAChD,MAAM,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,qBAAqB,CAAC,SAAS,CAAC;IAC3F,MAAM,eAAe,GAAG,SAAS;QAC/B,CAAC,CAAC,gBAAgB,CAAC,SAAS;QAC5B,CAAC,CAAC,wBAAwB,CAAC,SAAS,CAAC;IACvC,MAAM,UAAU,GAAG,SAAS;QAC1B,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,IAAI,IAAI,CAAC;QACxC,CAAC,CAAC,CAAC,qBAAqB,CAAC,KAAK,EAAE,OAAO,IAAI,IAAI,CAAC,CAAC;IACnD,MAAM,aAAa,GAAG,SAAS;QAC7B,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,IAAI,IAAI,CAAC;QAC3C,CAAC,CAAC,CAAC,wBAAwB,CAAC,KAAK,EAAE,OAAO,IAAI,IAAI,CAAC,CAAC;IAEtD,MAAM,SAAS,GAAG,YAAY,IAAI,eAAe,CAAC;IAClD,MAAM,KAAK,GAAG,UAAU,IAAI,aAAa,CAAC;IAE1C,2EAA2E;IAC3E,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,MAAM,eAAe,GAAG,mBAAmB,CACzC,aAAa,EACb,OAAO,EACP,KAAK,IAAI,EAAE,EACX,eAAe,EACf,EAAE,OAAO,EAAE,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,KAAK,EAAE,CAC1C,CAAC;IACF,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;IAE3F,0EAA0E;IAC1E,mEAAmE;IACnE,8BAA8B;IAC9B,MAAM,UAAU,GAAG,kBAAkB,CAAC,aAAa,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE;QACxF,OAAO,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,OAAO;KAChD,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,IAAI,IAAI,CAAC;IAEtC,wEAAwE;IACxE,kCAAkC;IAClC,MAAM,UAAU,GAAG,OAAO,CACxB,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,YAAY,CAAC,IAAI,IAAI,EAC3D,CAAC,KAAK,EAAE,YAAY,CAAC,CACtB,CAAC;IACF,MAAM,UAAU,GAAG,QAAQ,CACzB,aAAa,EACb,OAAO,EACP,KAAK,IAAI,EAAE,EACX,MAAM,CAAC,KAAK,CAAC,EACb;QACE,OAAO,EAAE,UAAU,EAAE,OAAO,IAAI,EAAE;QAClC,SAAS,EAAE,UAAU,EAAE,SAAS;KACjC,EACD,SAAS,EACT;QACE,OAAO,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,UAAU,IAAI,IAAI,KAAK,OAAO;KAChE,CACF,CAAC;IACF,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAEvE,MAAM,mBAAmB,GAAG,OAAO,CAAC,GAAG,EAAE;QACvC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;QACtC,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;YAC5B,IAAI,EAAE,CAAC,cAAc,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC7C,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CACL,cAAK,SAAS,EAAC,YAAY,YACzB,cAAK,SAAS,EAAC,wCAAwC,2BAAiB,GACpE,CACP,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CACL,cAAK,SAAS,EAAC,YAAY,YACzB,eAAK,SAAS,EAAC,mCAAmC,wBAAS,KAAK,IAAO,GACnE,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,KAAC,aAAa,IACZ,gBAAgB,EAAC,SAAS,EAC1B,MAAM,EACJ,eAAK,SAAS,EAAC,+DAA+D,aAC5E,KAAC,OAAO,IAAC,KAAK,EAAC,kBAAkB,EAAC,WAAW,EAAC,EAAE,EAAC,OAAO,SAAG,EAC3D,eAAK,SAAS,EAAC,oEAAoE,aACjF,aAAI,SAAS,EAAC,oCAAoC,YAC/C,SAAS,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,kBAAkB,GACpD,EACL,eAAK,SAAS,EAAC,sCAAsC,aACnD,iBACE,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAC9B,SAAS,EAAE,qDACT,IAAI,KAAK,MAAM;wCACb,CAAC,CAAC,+BAA+B;wCACjC,CAAC,CAAC,6CACN,eAAe,qBAGR,EACT,iBACE,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAC7B,SAAS,EAAE,qDACT,IAAI,KAAK,KAAK;wCACZ,CAAC,CAAC,+BAA+B;wCACjC,CAAC,CAAC,6CACN,EAAE,oBAGK,EACT,iBACE,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAC/B,SAAS,EAAE,qDACT,IAAI,KAAK,OAAO;wCACd,CAAC,CAAC,+BAA+B;wCACjC,CAAC,CAAC,6CACN,eAAe,sBAGR,IACL,IACF,IACF,YAGP,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACpB,cAAK,SAAS,EAAC,mBAAmB,YAChC,YAAG,SAAS,EAAC,uBAAuB,yCAA6B,GAC7D,CACP,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CACpB,cAAK,SAAS,EAAC,mBAAmB,YAChC,KAAC,aAAa,IACZ,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAM,EACb,UAAU,EAAE,UAAW,EACvB,KAAK,EAAE,KAAK,EACZ,mBAAmB,EAAE,mBAAmB,EACxC,MAAM,EAAE,OAAO,GACf,GACE,CACP,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CACrB,cAAK,SAAS,EAAC,2BAA2B,YACvC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CACtB,cAAK,SAAS,EAAC,wCAAwC,iCAAuB,CAC/E,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CACrB,eAAK,SAAS,EAAC,mCAAmC,wBACxC,UAAU,CAAC,KAAK,CAAC,OAAO,IAC5B,CACP,CAAC,CAAC,CAAC,CACF,KAAC,cAAc,IACb,KAAK,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,EACzB,WAAW,EAAE,KAAK,EAAE,WAAW,IAAI,EAAE,EACrC,KAAK,EAAE,SAAS,EAChB,oBAAoB,EAAE,YAAY,EAClC,cAAc,EAAE,eAAe,EAC/B,WAAW,EAAE,WAAW,EACxB,eAAe,EAAE,cAAc,EAC/B,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,IAAI,IAAI,EAChD,IAAI,SACJ,CACH,GACG,CACP,CAAC,CAAC,CAAC,CACF,cAAK,SAAS,EAAC,2BAA2B,YACxC,KAAC,YAAY,IACX,KAAK,EAAE,KAAK,EACZ,gBAAgB,EAAE,gBAAgB,EAClC,KAAK,EAAE,KAAM,EACb,UAAU,EAAE,UAAW,EACvB,KAAK,EAAE,KAAK,EACZ,mBAAmB,EAAE,mBAAmB,EACxC,MAAM,EAAE,OAAO,EACf,IAAI,SACJ,GACE,CACP,GACa,CACjB,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sudobility/testomniac_ui",
3
- "version": "0.0.34",
3
+ "version": "0.0.36",
4
4
  "description": "Shared dashboard UI components, pages, and hooks for Testomniac apps (router/i18n-agnostic)",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -29,8 +29,8 @@
29
29
  "@heroicons/react": ">=2.0.0",
30
30
  "@sudobility/components": "^5.0.98",
31
31
  "@sudobility/design": "^1.1.46",
32
- "@sudobility/testomniac_client": "^0.0.112",
33
- "@sudobility/testomniac_lib": "^0.0.123",
32
+ "@sudobility/testomniac_client": "^0.0.115",
33
+ "@sudobility/testomniac_lib": "^0.0.124",
34
34
  "@sudobility/testomniac_types": "^0.0.88",
35
35
  "@sudobility/types": "^1.9.62",
36
36
  "@tanstack/react-query": ">=5.0.0",
@@ -44,8 +44,8 @@
44
44
  "@heroicons/react": "^2.2.0",
45
45
  "@sudobility/components": "^5.0.98",
46
46
  "@sudobility/design": "^1.1.46",
47
- "@sudobility/testomniac_client": "^0.0.112",
48
- "@sudobility/testomniac_lib": "^0.0.123",
47
+ "@sudobility/testomniac_client": "^0.0.115",
48
+ "@sudobility/testomniac_lib": "^0.0.124",
49
49
  "@sudobility/testomniac_types": "^0.0.88",
50
50
  "@sudobility/types": "^1.9.62",
51
51
  "@tanstack/react-query": "^5.90.5",