@principal-ai/subsystems-react 0.44.0 → 0.44.2
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/dist/subsystem/SubsystemModelTransition.d.ts +12 -1
- package/dist/subsystem/SubsystemModelTransition.d.ts.map +1 -1
- package/dist/subsystem/SubsystemModelTransition.js +194 -18
- package/dist/subsystem/SubsystemModelTransition.js.map +1 -1
- package/package.json +1 -1
- package/src/stories/Subsystem/ComponentGraph/AnimatedProgression.stories.tsx +28 -5
- package/src/subsystem/SubsystemModelTransition.tsx +254 -23
|
@@ -22,17 +22,28 @@ export interface SubsystemTransitionStep {
|
|
|
22
22
|
showEdgeLabels?: boolean;
|
|
23
23
|
/** Explicit boundary frame colors (region key → hex); host override. */
|
|
24
24
|
boundaryColors?: Record<string, string>;
|
|
25
|
+
/**
|
|
26
|
+
* Cycle this step's walkthrough hops: focus each step (dim non-participants,
|
|
27
|
+
* number the labels, frame the step). Typically only the walkthrough layer.
|
|
28
|
+
*/
|
|
29
|
+
autoPlayWalkthroughs?: boolean;
|
|
30
|
+
/** Show the focused walkthrough's title chip (with step ticks). */
|
|
31
|
+
showWalkthroughTitle?: boolean;
|
|
25
32
|
}
|
|
26
33
|
export interface SubsystemModelTransitionProps {
|
|
27
34
|
steps: SubsystemTransitionStep[];
|
|
28
35
|
/** Which step is shown. Controlled by the host (its nav / timer). */
|
|
29
36
|
activeIndex: number;
|
|
30
|
-
/** Tween duration, ms. @default
|
|
37
|
+
/** Tween duration, ms. @default 950 */
|
|
31
38
|
durationMs?: number;
|
|
32
39
|
/** fitView padding for the viewport refit. @default 0.18 */
|
|
33
40
|
fitPadding?: number;
|
|
34
41
|
/** Called when a node is clicked. */
|
|
35
42
|
onSelect?: (componentAlias: string) => void;
|
|
43
|
+
/** How an autoplayed walkthrough step reads. @default 'focus' */
|
|
44
|
+
walkthroughStepMode?: 'focus' | 'dim';
|
|
45
|
+
/** Dwell per walkthrough step while autoplaying, ms. @default 4000 */
|
|
46
|
+
walkthroughAutoPlayIntervalMs?: number;
|
|
36
47
|
className?: string;
|
|
37
48
|
style?: CSSProperties;
|
|
38
49
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubsystemModelTransition.d.ts","sourceRoot":"","sources":["../../src/subsystem/SubsystemModelTransition.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAA4D,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"SubsystemModelTransition.d.ts","sourceRoot":"","sources":["../../src/subsystem/SubsystemModelTransition.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAA4D,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAcrG,OAAO,8BAA8B,CAAC;AAEtC,OAAO,EAOL,KAAK,sBAAsB,EAE5B,MAAM,SAAS,CAAC;AAiBjB,uEAAuE;AACvE,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,sBAAsB,CAAC;IAC9B,oEAAoE;IACpE,aAAa,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACjC,oDAAoD;IACpD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,wEAAwE;IACxE,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,mEAAmE;IACnE,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,6BAA6B;IAC5C,KAAK,EAAE,uBAAuB,EAAE,CAAC;IACjC,qEAAqE;IACrE,WAAW,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,iEAAiE;IACjE,mBAAmB,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IACtC,sEAAsE;IACtE,6BAA6B,CAAC,EAAE,MAAM,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AA4gBD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,6BAA6B,+BAM5E"}
|
|
@@ -12,10 +12,10 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
12
12
|
* the graph's real (ELK-routed, mechanism-colored) edges appear once it settles.
|
|
13
13
|
*/
|
|
14
14
|
import { useEffect, useMemo, useRef, useState } from 'react';
|
|
15
|
-
import { Background, EdgeLabelRenderer, ReactFlow, ReactFlowProvider, useReactFlow, } from '@xyflow/react';
|
|
15
|
+
import { Background, EdgeLabelRenderer, ReactFlow, ReactFlowProvider, useReactFlow, useStore, } from '@xyflow/react';
|
|
16
16
|
import '@xyflow/react/dist/style.css';
|
|
17
17
|
import { useTheme } from '@principal-ade/industry-theme';
|
|
18
|
-
import { buildSubsystemGraph, edgeColor, MECHANISM_DESCRIPTIONS, } from './model';
|
|
18
|
+
import { buildSubsystemGraph, edgeColor, MECHANISM_DESCRIPTIONS, walkthroughStepGraphEdgeId, } from './model';
|
|
19
19
|
import { hexWithAlpha, SubsystemCallbacksProvider, SubsystemComponentNode, SubsystemEdge, SubsystemGroupNode, } from './nodes';
|
|
20
20
|
import { GRAPH_CANVAS_CLASS, GRAPH_NAV_PROPS, GraphChrome } from './graphChrome';
|
|
21
21
|
import { EDGE_LABEL_CLOUD_EXTRA_TOP, EDGE_LABEL_CLOUD_PATH, EDGE_LABEL_FONT_SIZE, EDGE_LABEL_HEIGHT, EDGE_LABEL_WIDTH, } from '../utils/edgeLabel';
|
|
@@ -25,6 +25,9 @@ function TransitionEdge(props) {
|
|
|
25
25
|
const data = props.data;
|
|
26
26
|
const mechanism = data?.mechanism ?? 'uses';
|
|
27
27
|
const color = edgeColor({ mechanism, provenance: data?.provenance });
|
|
28
|
+
const text = data?.stepNos?.length
|
|
29
|
+
? `${data.stepNos.map((n) => `${n}:`).join(' ')} ${mechanism}`
|
|
30
|
+
: mechanism;
|
|
28
31
|
const verifiable = data?.provenance === 'graphify' ||
|
|
29
32
|
MECHANISM_DESCRIPTIONS.find(([m]) => m === mechanism)?.[2] !== false;
|
|
30
33
|
const labelBg = theme.colors.backgroundSecondary ?? theme.colors.background;
|
|
@@ -40,6 +43,7 @@ function TransitionEdge(props) {
|
|
|
40
43
|
boxSizing: 'border-box',
|
|
41
44
|
padding: '7px 8px',
|
|
42
45
|
pointerEvents: 'none',
|
|
46
|
+
opacity: data?.dimmed ? 0.15 : 1,
|
|
43
47
|
}, children: [verifiable ? (_jsx("span", { "aria-hidden": true, style: {
|
|
44
48
|
position: 'absolute',
|
|
45
49
|
inset: 0,
|
|
@@ -58,7 +62,7 @@ function TransitionEdge(props) {
|
|
|
58
62
|
fontFamily: theme.fonts.monospace,
|
|
59
63
|
fontWeight: 500,
|
|
60
64
|
color,
|
|
61
|
-
}, children:
|
|
65
|
+
}, children: text })] }) }))] }));
|
|
62
66
|
}
|
|
63
67
|
const nodeTypes = {
|
|
64
68
|
'subsystem-component': SubsystemComponentNode,
|
|
@@ -93,15 +97,36 @@ function flatten(result, boundaryColors) {
|
|
|
93
97
|
}
|
|
94
98
|
return { rects, meta, order, edges: result.edges };
|
|
95
99
|
}
|
|
96
|
-
function TransitionInner({ steps, activeIndex, durationMs =
|
|
100
|
+
function TransitionInner({ steps, activeIndex, durationMs = 950, fitPadding = 0.18, onSelect, walkthroughStepMode = 'focus', walkthroughAutoPlayIntervalMs = 4000, className, style, }) {
|
|
97
101
|
const { theme } = useTheme();
|
|
98
102
|
const { fitBounds } = useReactFlow();
|
|
103
|
+
// React Flow only owns a size once its pane has mounted + measured; fitting
|
|
104
|
+
// before that clamps the view. Gate the fit on RF's own dimensions.
|
|
105
|
+
const rfSized = useStore((s) => (s.width ?? 0) > 0 && (s.height ?? 0) > 0);
|
|
99
106
|
const [layouts, setLayouts] = useState(null);
|
|
100
107
|
const [display, setDisplay] = useState(new Map());
|
|
101
108
|
const [settled, setSettled] = useState(false);
|
|
109
|
+
// React Flow can't fit until its pane has a real size; the first mount often
|
|
110
|
+
// reports 0, which clamped the initial fit (right-hand nodes cut off).
|
|
111
|
+
const [sized, setSized] = useState(false);
|
|
112
|
+
const wrapRef = useRef(null);
|
|
102
113
|
const displayRef = useRef(display);
|
|
103
114
|
displayRef.current = display;
|
|
104
115
|
const rafRef = useRef(null);
|
|
116
|
+
useEffect(() => {
|
|
117
|
+
const el = wrapRef.current;
|
|
118
|
+
if (!el)
|
|
119
|
+
return;
|
|
120
|
+
const measure = () => {
|
|
121
|
+
const r = el.getBoundingClientRect();
|
|
122
|
+
if (r.width > 0 && r.height > 0)
|
|
123
|
+
setSized(true);
|
|
124
|
+
};
|
|
125
|
+
measure();
|
|
126
|
+
const ro = new ResizeObserver(measure);
|
|
127
|
+
ro.observe(el);
|
|
128
|
+
return () => ro.disconnect();
|
|
129
|
+
}, []);
|
|
105
130
|
// Lay out every step whenever the steps prop changes (identity-keyed).
|
|
106
131
|
useEffect(() => {
|
|
107
132
|
let alive = true;
|
|
@@ -130,14 +155,6 @@ function TransitionInner({ steps, activeIndex, durationMs = 750, fitPadding = 0.
|
|
|
130
155
|
if (!step)
|
|
131
156
|
return;
|
|
132
157
|
setSettled(false);
|
|
133
|
-
const rects = [...step.rects.values()];
|
|
134
|
-
if (rects.length > 0) {
|
|
135
|
-
const minX = Math.min(...rects.map((r) => r.x));
|
|
136
|
-
const minY = Math.min(...rects.map((r) => r.y));
|
|
137
|
-
const maxX = Math.max(...rects.map((r) => r.x + r.w));
|
|
138
|
-
const maxY = Math.max(...rects.map((r) => r.y + r.h));
|
|
139
|
-
fitBounds({ x: minX, y: minY, width: maxX - minX, height: maxY - minY }, { padding: fitPadding, duration: durationMs });
|
|
140
|
-
}
|
|
141
158
|
const start = new Map(displayRef.current);
|
|
142
159
|
const ids = new Set([...start.keys(), ...step.rects.keys()]);
|
|
143
160
|
const t0 = performance.now();
|
|
@@ -175,7 +192,24 @@ function TransitionInner({ steps, activeIndex, durationMs = 750, fitPadding = 0.
|
|
|
175
192
|
if (rafRef.current != null)
|
|
176
193
|
cancelAnimationFrame(rafRef.current);
|
|
177
194
|
};
|
|
178
|
-
}, [layouts, activeIndex, durationMs
|
|
195
|
+
}, [layouts, activeIndex, durationMs]);
|
|
196
|
+
// Refit the viewport to the active step — once the pane is sized, and on every
|
|
197
|
+
// step change. Kept separate so the initial fit waits for a real pane size.
|
|
198
|
+
useEffect(() => {
|
|
199
|
+
if (!sized || !rfSized || !layouts)
|
|
200
|
+
return;
|
|
201
|
+
const step = layouts[activeIndex];
|
|
202
|
+
if (!step)
|
|
203
|
+
return;
|
|
204
|
+
const rects = [...step.rects.values()];
|
|
205
|
+
if (rects.length === 0)
|
|
206
|
+
return;
|
|
207
|
+
const minX = Math.min(...rects.map((r) => r.x));
|
|
208
|
+
const minY = Math.min(...rects.map((r) => r.y));
|
|
209
|
+
const maxX = Math.max(...rects.map((r) => r.x + r.w));
|
|
210
|
+
const maxY = Math.max(...rects.map((r) => r.y + r.h));
|
|
211
|
+
fitBounds({ x: minX, y: minY, width: maxX - minX, height: maxY - minY }, { padding: fitPadding, duration: durationMs });
|
|
212
|
+
}, [sized, rfSized, layouts, activeIndex, fitPadding, durationMs, fitBounds]);
|
|
179
213
|
const unionMeta = useMemo(() => {
|
|
180
214
|
const m = new Map();
|
|
181
215
|
for (const s of layouts ?? [])
|
|
@@ -185,6 +219,52 @@ function TransitionInner({ steps, activeIndex, durationMs = 750, fitPadding = 0.
|
|
|
185
219
|
return m;
|
|
186
220
|
}, [layouts]);
|
|
187
221
|
const activeLayout = layouts?.[activeIndex];
|
|
222
|
+
// Walkthrough step focus: cycle the active step's hops, dim non-participants,
|
|
223
|
+
// number the labels, and (in `focus` mode) frame the step.
|
|
224
|
+
const activeStepDef = steps[activeIndex];
|
|
225
|
+
const activeWalkthroughs = activeStepDef?.model.walkthroughs;
|
|
226
|
+
const autoPlaySteps = activeStepDef?.autoPlayWalkthroughs === true && (activeWalkthroughs?.length ?? 0) > 0;
|
|
227
|
+
const hopList = useMemo(() => {
|
|
228
|
+
const out = [];
|
|
229
|
+
for (const wt of (activeWalkthroughs ?? [])) {
|
|
230
|
+
wt.steps.forEach((s, i) => {
|
|
231
|
+
out.push({
|
|
232
|
+
edgeId: walkthroughStepGraphEdgeId(s),
|
|
233
|
+
from: s.from,
|
|
234
|
+
to: s.to,
|
|
235
|
+
stepNo: i + 1,
|
|
236
|
+
total: wt.steps.length,
|
|
237
|
+
walkthroughId: wt.id,
|
|
238
|
+
walkthroughTitle: wt.title,
|
|
239
|
+
});
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
return out;
|
|
243
|
+
}, [activeWalkthroughs]);
|
|
244
|
+
const [stepPointer, setStepPointer] = useState(0);
|
|
245
|
+
useEffect(() => {
|
|
246
|
+
setStepPointer(0);
|
|
247
|
+
}, [activeIndex, hopList.length]);
|
|
248
|
+
useEffect(() => {
|
|
249
|
+
if (!autoPlaySteps || hopList.length === 0)
|
|
250
|
+
return;
|
|
251
|
+
// Pointer 0 = whole flow (no step focus); 1..N = each hop, then wraps.
|
|
252
|
+
const t = window.setInterval(() => setStepPointer((p) => (p + 1) % (hopList.length + 1)), Math.max(600, walkthroughAutoPlayIntervalMs));
|
|
253
|
+
return () => window.clearInterval(t);
|
|
254
|
+
}, [autoPlaySteps, hopList.length, walkthroughAutoPlayIntervalMs]);
|
|
255
|
+
const focusedHop = autoPlaySteps && hopList.length > 0 && stepPointer > 0
|
|
256
|
+
? hopList[(stepPointer - 1) % hopList.length]
|
|
257
|
+
: undefined;
|
|
258
|
+
const stepNoByEdge = useMemo(() => {
|
|
259
|
+
const m = new Map();
|
|
260
|
+
for (const h of hopList) {
|
|
261
|
+
const arr = m.get(h.edgeId) ?? [];
|
|
262
|
+
arr.push(h.stepNo);
|
|
263
|
+
m.set(h.edgeId, arr);
|
|
264
|
+
}
|
|
265
|
+
return m;
|
|
266
|
+
}, [hopList]);
|
|
267
|
+
const focusParticipants = useMemo(() => (focusedHop ? new Set([focusedHop.from, focusedHop.to]) : null), [focusedHop]);
|
|
188
268
|
const nodes = useMemo(() => {
|
|
189
269
|
const activeOrder = new Set(activeLayout?.order ?? []);
|
|
190
270
|
const ids = [...display.entries()]
|
|
@@ -210,21 +290,117 @@ function TransitionInner({ steps, activeIndex, durationMs = 750, fitPadding = 0.
|
|
|
210
290
|
data: meta.data,
|
|
211
291
|
draggable: false,
|
|
212
292
|
selectable: false,
|
|
213
|
-
style: {
|
|
293
|
+
style: {
|
|
294
|
+
opacity: rect.o * (focusParticipants && !focusParticipants.has(id) ? 0.18 : 1),
|
|
295
|
+
},
|
|
214
296
|
});
|
|
215
297
|
}
|
|
216
298
|
return out;
|
|
217
|
-
}, [display, activeLayout, unionMeta]);
|
|
218
|
-
|
|
299
|
+
}, [display, activeLayout, unionMeta, focusParticipants]);
|
|
300
|
+
// Real graph edges once settled; step focus adds hop numbers and dims the
|
|
301
|
+
// non-focused hops.
|
|
302
|
+
const edges = useMemo(() => {
|
|
303
|
+
if (!settled)
|
|
304
|
+
return [];
|
|
305
|
+
const list = activeLayout?.edges ?? [];
|
|
306
|
+
const numbering = autoPlaySteps && hopList.length > 0;
|
|
307
|
+
if (!numbering && !focusedHop)
|
|
308
|
+
return list;
|
|
309
|
+
return list.map((e) => {
|
|
310
|
+
// Number every hop while autoplaying (whole view included); dim only the
|
|
311
|
+
// hops other than the focused one.
|
|
312
|
+
const stepNos = numbering ? stepNoByEdge.get(e.id) : undefined;
|
|
313
|
+
const dimmed = focusedHop ? e.id !== focusedHop.edgeId : false;
|
|
314
|
+
if (!stepNos && !dimmed)
|
|
315
|
+
return e;
|
|
316
|
+
return {
|
|
317
|
+
...e,
|
|
318
|
+
data: { ...e.data, stepNos, dimmed },
|
|
319
|
+
};
|
|
320
|
+
});
|
|
321
|
+
}, [settled, activeLayout, focusedHop, stepNoByEdge, autoPlaySteps, hopList.length]);
|
|
322
|
+
// Camera: frame a focused hop's endpoints, or the whole graph during the
|
|
323
|
+
// "whole flow" phase.
|
|
324
|
+
useEffect(() => {
|
|
325
|
+
if (walkthroughStepMode !== 'focus' || !settled || !sized || !rfSized || !autoPlaySteps)
|
|
326
|
+
return;
|
|
327
|
+
if (!activeLayout)
|
|
328
|
+
return;
|
|
329
|
+
const rects = focusedHop
|
|
330
|
+
? [focusedHop.from, focusedHop.to]
|
|
331
|
+
.map((id) => activeLayout.rects.get(id))
|
|
332
|
+
.filter((r) => !!r)
|
|
333
|
+
: [...activeLayout.rects.values()];
|
|
334
|
+
if (rects.length === 0)
|
|
335
|
+
return;
|
|
336
|
+
const minX = Math.min(...rects.map((r) => r.x));
|
|
337
|
+
const minY = Math.min(...rects.map((r) => r.y));
|
|
338
|
+
const maxX = Math.max(...rects.map((r) => r.x + r.w));
|
|
339
|
+
const maxY = Math.max(...rects.map((r) => r.y + r.h));
|
|
340
|
+
fitBounds({ x: minX, y: minY, width: maxX - minX, height: maxY - minY }, { padding: focusedHop ? 0.3 : fitPadding, duration: durationMs });
|
|
341
|
+
}, [
|
|
342
|
+
walkthroughStepMode,
|
|
343
|
+
focusedHop,
|
|
344
|
+
settled,
|
|
345
|
+
sized,
|
|
346
|
+
rfSized,
|
|
347
|
+
activeLayout,
|
|
348
|
+
durationMs,
|
|
349
|
+
fitBounds,
|
|
350
|
+
autoPlaySteps,
|
|
351
|
+
fitPadding,
|
|
352
|
+
]);
|
|
219
353
|
const callbacks = useMemo(() => (onSelect ? { onSelect } : {}), [onSelect]);
|
|
220
|
-
return (
|
|
354
|
+
return (_jsxs("div", { ref: wrapRef, className: className, style: {
|
|
221
355
|
position: 'relative',
|
|
222
356
|
width: '100%',
|
|
223
357
|
height: '100%',
|
|
224
358
|
minHeight: 0,
|
|
225
359
|
background: theme.colors.background,
|
|
226
360
|
...style,
|
|
227
|
-
}, children: !layouts ? null : (_jsx(SubsystemCallbacksProvider, { value: callbacks, children: _jsxs(ReactFlow, { nodes: nodes, edges: edges, nodeTypes: nodeTypes, edgeTypes: edgeTypes, className: GRAPH_CANVAS_CLASS, ...GRAPH_NAV_PROPS, proOptions: { hideAttribution: true }, nodesDraggable: false, nodesConnectable: false, style: { width: '100%', height: '100%', background: theme.colors.background }, children: [_jsx(Background, {}), _jsx(GraphChrome, {})] }) })) }
|
|
361
|
+
}, children: [!layouts ? null : (_jsx(SubsystemCallbacksProvider, { value: callbacks, children: _jsxs(ReactFlow, { nodes: nodes, edges: edges, nodeTypes: nodeTypes, edgeTypes: edgeTypes, className: GRAPH_CANVAS_CLASS, ...GRAPH_NAV_PROPS, proOptions: { hideAttribution: true }, nodesDraggable: false, nodesConnectable: false, style: { width: '100%', height: '100%', background: theme.colors.background }, children: [_jsx(Background, {}), _jsx(GraphChrome, {})] }) })), activeStepDef?.showWalkthroughTitle && focusedHop && (_jsxs("div", { "aria-label": `${focusedHop.walkthroughTitle}, step ${focusedHop.stepNo} of ${focusedHop.total}`, style: {
|
|
362
|
+
position: 'absolute',
|
|
363
|
+
top: 12,
|
|
364
|
+
left: '50%',
|
|
365
|
+
transform: 'translateX(-50%)',
|
|
366
|
+
minWidth: 160,
|
|
367
|
+
maxWidth: '60%',
|
|
368
|
+
display: 'flex',
|
|
369
|
+
flexDirection: 'column',
|
|
370
|
+
background: theme.colors.backgroundSecondary ?? theme.colors.background,
|
|
371
|
+
border: `1px solid ${theme.colors.border}`,
|
|
372
|
+
borderRadius: 6,
|
|
373
|
+
boxShadow: '0 1px 4px rgba(0,0,0,0.25)',
|
|
374
|
+
overflow: 'hidden',
|
|
375
|
+
opacity: 0.95,
|
|
376
|
+
pointerEvents: 'none',
|
|
377
|
+
zIndex: 10,
|
|
378
|
+
}, children: [_jsx("div", { style: {
|
|
379
|
+
padding: '5px 14px',
|
|
380
|
+
fontSize: theme.fontSizes[2] ?? theme.fontSizes[1],
|
|
381
|
+
fontWeight: 600,
|
|
382
|
+
fontFamily: theme.fonts.monospace,
|
|
383
|
+
color: theme.colors.text,
|
|
384
|
+
overflow: 'hidden',
|
|
385
|
+
textOverflow: 'ellipsis',
|
|
386
|
+
whiteSpace: 'nowrap',
|
|
387
|
+
textAlign: 'center',
|
|
388
|
+
}, children: focusedHop.walkthroughTitle }), focusedHop.total > 0 && (_jsx("div", { style: { display: 'flex', gap: 3, padding: '0 6px 5px' }, "aria-hidden": "true", children: Array.from({ length: focusedHop.total }, (_, i) => {
|
|
389
|
+
const n = i + 1;
|
|
390
|
+
const active = n === focusedHop.stepNo;
|
|
391
|
+
const done = n < focusedHop.stepNo;
|
|
392
|
+
return (_jsx("span", { style: {
|
|
393
|
+
flex: 1,
|
|
394
|
+
height: 2,
|
|
395
|
+
borderRadius: 1,
|
|
396
|
+
background: active
|
|
397
|
+
? (theme.colors.accent ?? theme.colors.primary ?? theme.colors.text)
|
|
398
|
+
: done
|
|
399
|
+
? (theme.colors.textSecondary ?? theme.colors.text)
|
|
400
|
+
: (theme.colors.border ?? 'rgba(127,127,127,0.45)'),
|
|
401
|
+
opacity: active ? 1 : done ? 0.75 : 0.4,
|
|
402
|
+
} }, n));
|
|
403
|
+
}) }))] }))] }));
|
|
228
404
|
}
|
|
229
405
|
export function SubsystemModelTransition(props) {
|
|
230
406
|
return (_jsx(ReactFlowProvider, { children: _jsx(TransitionInner, { ...props }) }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubsystemModelTransition.js","sourceRoot":"","sources":["../../src/subsystem/SubsystemModelTransition.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SubsystemModelTransition.js","sourceRoot":"","sources":["../../src/subsystem/SubsystemModelTransition.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -67,27 +67,50 @@ const STEPS: SubsystemTransitionStep[] = [
|
|
|
67
67
|
moduleNesting: 'path',
|
|
68
68
|
},
|
|
69
69
|
{
|
|
70
|
-
|
|
70
|
+
// Dynamic topology = process framing only (no runtime edges).
|
|
71
|
+
model: { title: 'Booking', components },
|
|
71
72
|
moduleNesting: 'path',
|
|
72
73
|
},
|
|
73
74
|
{
|
|
74
75
|
model: { title: 'Booking', components, walkthroughs },
|
|
75
76
|
moduleNesting: 'path',
|
|
77
|
+
autoPlayWalkthroughs: true,
|
|
78
|
+
showWalkthroughTitle: true,
|
|
76
79
|
},
|
|
77
80
|
];
|
|
78
81
|
|
|
82
|
+
const STEP_MS = 4000;
|
|
83
|
+
|
|
84
|
+
/** Dwell long enough for an autoplaying step to cycle all its hops. */
|
|
85
|
+
function dwellFor(index: number): number {
|
|
86
|
+
const step = STEPS[index];
|
|
87
|
+
if (step?.autoPlayWalkthroughs) {
|
|
88
|
+
const hops = step.model.walkthroughs?.reduce((n, w) => n + w.steps.length, 0) ?? 0;
|
|
89
|
+
// Whole-flow phase + one tick per hop.
|
|
90
|
+
if (hops > 0) return (hops + 1) * STEP_MS;
|
|
91
|
+
}
|
|
92
|
+
return 3200;
|
|
93
|
+
}
|
|
94
|
+
|
|
79
95
|
function Harness() {
|
|
80
96
|
const [active, setActive] = useState(0);
|
|
81
97
|
const steps = useMemo(() => STEPS, []);
|
|
82
98
|
|
|
83
99
|
useEffect(() => {
|
|
84
|
-
const t = window.
|
|
85
|
-
|
|
86
|
-
|
|
100
|
+
const t = window.setTimeout(
|
|
101
|
+
() => setActive((i) => (i + 1) % STEPS.length),
|
|
102
|
+
dwellFor(active),
|
|
103
|
+
);
|
|
104
|
+
return () => window.clearTimeout(t);
|
|
105
|
+
}, [active]);
|
|
87
106
|
|
|
88
107
|
return (
|
|
89
108
|
<div style={{ position: 'relative', width: '100%', height: '100vh', background: defaultEditorTheme.colors.background }}>
|
|
90
|
-
<SubsystemModelTransition
|
|
109
|
+
<SubsystemModelTransition
|
|
110
|
+
steps={steps}
|
|
111
|
+
activeIndex={active}
|
|
112
|
+
walkthroughAutoPlayIntervalMs={STEP_MS}
|
|
113
|
+
/>
|
|
91
114
|
<div style={{ position: 'absolute', top: 12, left: 12, display: 'flex', gap: 8, zIndex: 10 }}>
|
|
92
115
|
{LABELS.map((label, i) => (
|
|
93
116
|
<button
|
|
@@ -18,6 +18,7 @@ import {
|
|
|
18
18
|
ReactFlow,
|
|
19
19
|
ReactFlowProvider,
|
|
20
20
|
useReactFlow,
|
|
21
|
+
useStore,
|
|
21
22
|
type Edge,
|
|
22
23
|
type EdgeProps,
|
|
23
24
|
type EdgeTypes,
|
|
@@ -30,9 +31,11 @@ import {
|
|
|
30
31
|
buildSubsystemGraph,
|
|
31
32
|
edgeColor,
|
|
32
33
|
MECHANISM_DESCRIPTIONS,
|
|
34
|
+
walkthroughStepGraphEdgeId,
|
|
33
35
|
type SubsystemEdgeProvenance,
|
|
34
36
|
type SubsystemGraphNode,
|
|
35
37
|
type SubsystemModelDocument,
|
|
38
|
+
type SubsystemWalkthrough,
|
|
36
39
|
} from './model';
|
|
37
40
|
import {
|
|
38
41
|
hexWithAlpha,
|
|
@@ -59,18 +62,29 @@ export interface SubsystemTransitionStep {
|
|
|
59
62
|
showEdgeLabels?: boolean;
|
|
60
63
|
/** Explicit boundary frame colors (region key → hex); host override. */
|
|
61
64
|
boundaryColors?: Record<string, string>;
|
|
65
|
+
/**
|
|
66
|
+
* Cycle this step's walkthrough hops: focus each step (dim non-participants,
|
|
67
|
+
* number the labels, frame the step). Typically only the walkthrough layer.
|
|
68
|
+
*/
|
|
69
|
+
autoPlayWalkthroughs?: boolean;
|
|
70
|
+
/** Show the focused walkthrough's title chip (with step ticks). */
|
|
71
|
+
showWalkthroughTitle?: boolean;
|
|
62
72
|
}
|
|
63
73
|
|
|
64
74
|
export interface SubsystemModelTransitionProps {
|
|
65
75
|
steps: SubsystemTransitionStep[];
|
|
66
76
|
/** Which step is shown. Controlled by the host (its nav / timer). */
|
|
67
77
|
activeIndex: number;
|
|
68
|
-
/** Tween duration, ms. @default
|
|
78
|
+
/** Tween duration, ms. @default 950 */
|
|
69
79
|
durationMs?: number;
|
|
70
80
|
/** fitView padding for the viewport refit. @default 0.18 */
|
|
71
81
|
fitPadding?: number;
|
|
72
82
|
/** Called when a node is clicked. */
|
|
73
83
|
onSelect?: (componentAlias: string) => void;
|
|
84
|
+
/** How an autoplayed walkthrough step reads. @default 'focus' */
|
|
85
|
+
walkthroughStepMode?: 'focus' | 'dim';
|
|
86
|
+
/** Dwell per walkthrough step while autoplaying, ms. @default 4000 */
|
|
87
|
+
walkthroughAutoPlayIntervalMs?: number;
|
|
74
88
|
className?: string;
|
|
75
89
|
style?: CSSProperties;
|
|
76
90
|
}
|
|
@@ -79,10 +93,20 @@ export interface SubsystemModelTransitionProps {
|
|
|
79
93
|
function TransitionEdge(props: EdgeProps) {
|
|
80
94
|
const { theme } = useTheme();
|
|
81
95
|
const data = props.data as
|
|
82
|
-
| {
|
|
96
|
+
| {
|
|
97
|
+
mechanism?: string;
|
|
98
|
+
provenance?: SubsystemEdgeProvenance;
|
|
99
|
+
labelX?: number;
|
|
100
|
+
labelY?: number;
|
|
101
|
+
stepNos?: number[];
|
|
102
|
+
dimmed?: boolean;
|
|
103
|
+
}
|
|
83
104
|
| undefined;
|
|
84
105
|
const mechanism = data?.mechanism ?? 'uses';
|
|
85
106
|
const color = edgeColor({ mechanism, provenance: data?.provenance });
|
|
107
|
+
const text = data?.stepNos?.length
|
|
108
|
+
? `${data.stepNos.map((n) => `${n}:`).join(' ')} ${mechanism}`
|
|
109
|
+
: mechanism;
|
|
86
110
|
const verifiable =
|
|
87
111
|
data?.provenance === 'graphify' ||
|
|
88
112
|
MECHANISM_DESCRIPTIONS.find(([m]) => m === mechanism)?.[2] !== false;
|
|
@@ -105,6 +129,7 @@ function TransitionEdge(props: EdgeProps) {
|
|
|
105
129
|
boxSizing: 'border-box',
|
|
106
130
|
padding: '7px 8px',
|
|
107
131
|
pointerEvents: 'none',
|
|
132
|
+
opacity: data?.dimmed ? 0.15 : 1,
|
|
108
133
|
}}
|
|
109
134
|
>
|
|
110
135
|
{verifiable ? (
|
|
@@ -150,7 +175,7 @@ function TransitionEdge(props: EdgeProps) {
|
|
|
150
175
|
color,
|
|
151
176
|
}}
|
|
152
177
|
>
|
|
153
|
-
{
|
|
178
|
+
{text}
|
|
154
179
|
</span>
|
|
155
180
|
</div>
|
|
156
181
|
</EdgeLabelRenderer>
|
|
@@ -210,21 +235,43 @@ function flatten(
|
|
|
210
235
|
function TransitionInner({
|
|
211
236
|
steps,
|
|
212
237
|
activeIndex,
|
|
213
|
-
durationMs =
|
|
238
|
+
durationMs = 950,
|
|
214
239
|
fitPadding = 0.18,
|
|
215
240
|
onSelect,
|
|
241
|
+
walkthroughStepMode = 'focus',
|
|
242
|
+
walkthroughAutoPlayIntervalMs = 4000,
|
|
216
243
|
className,
|
|
217
244
|
style,
|
|
218
245
|
}: SubsystemModelTransitionProps) {
|
|
219
246
|
const { theme } = useTheme();
|
|
220
247
|
const { fitBounds } = useReactFlow();
|
|
248
|
+
// React Flow only owns a size once its pane has mounted + measured; fitting
|
|
249
|
+
// before that clamps the view. Gate the fit on RF's own dimensions.
|
|
250
|
+
const rfSized = useStore((s) => (s.width ?? 0) > 0 && (s.height ?? 0) > 0);
|
|
221
251
|
const [layouts, setLayouts] = useState<StepLayout[] | null>(null);
|
|
222
252
|
const [display, setDisplay] = useState<Map<string, Live>>(new Map());
|
|
223
253
|
const [settled, setSettled] = useState(false);
|
|
254
|
+
// React Flow can't fit until its pane has a real size; the first mount often
|
|
255
|
+
// reports 0, which clamped the initial fit (right-hand nodes cut off).
|
|
256
|
+
const [sized, setSized] = useState(false);
|
|
257
|
+
const wrapRef = useRef<HTMLDivElement>(null);
|
|
224
258
|
const displayRef = useRef(display);
|
|
225
259
|
displayRef.current = display;
|
|
226
260
|
const rafRef = useRef<number | null>(null);
|
|
227
261
|
|
|
262
|
+
useEffect(() => {
|
|
263
|
+
const el = wrapRef.current;
|
|
264
|
+
if (!el) return;
|
|
265
|
+
const measure = () => {
|
|
266
|
+
const r = el.getBoundingClientRect();
|
|
267
|
+
if (r.width > 0 && r.height > 0) setSized(true);
|
|
268
|
+
};
|
|
269
|
+
measure();
|
|
270
|
+
const ro = new ResizeObserver(measure);
|
|
271
|
+
ro.observe(el);
|
|
272
|
+
return () => ro.disconnect();
|
|
273
|
+
}, []);
|
|
274
|
+
|
|
228
275
|
// Lay out every step whenever the steps prop changes (identity-keyed).
|
|
229
276
|
useEffect(() => {
|
|
230
277
|
let alive = true;
|
|
@@ -252,18 +299,6 @@ function TransitionInner({
|
|
|
252
299
|
if (!step) return;
|
|
253
300
|
setSettled(false);
|
|
254
301
|
|
|
255
|
-
const rects = [...step.rects.values()];
|
|
256
|
-
if (rects.length > 0) {
|
|
257
|
-
const minX = Math.min(...rects.map((r) => r.x));
|
|
258
|
-
const minY = Math.min(...rects.map((r) => r.y));
|
|
259
|
-
const maxX = Math.max(...rects.map((r) => r.x + r.w));
|
|
260
|
-
const maxY = Math.max(...rects.map((r) => r.y + r.h));
|
|
261
|
-
fitBounds(
|
|
262
|
-
{ x: minX, y: minY, width: maxX - minX, height: maxY - minY },
|
|
263
|
-
{ padding: fitPadding, duration: durationMs },
|
|
264
|
-
);
|
|
265
|
-
}
|
|
266
|
-
|
|
267
302
|
const start = new Map(displayRef.current);
|
|
268
303
|
const ids = new Set<string>([...start.keys(), ...step.rects.keys()]);
|
|
269
304
|
const t0 = performance.now();
|
|
@@ -298,7 +333,25 @@ function TransitionInner({
|
|
|
298
333
|
return () => {
|
|
299
334
|
if (rafRef.current != null) cancelAnimationFrame(rafRef.current);
|
|
300
335
|
};
|
|
301
|
-
}, [layouts, activeIndex, durationMs
|
|
336
|
+
}, [layouts, activeIndex, durationMs]);
|
|
337
|
+
|
|
338
|
+
// Refit the viewport to the active step — once the pane is sized, and on every
|
|
339
|
+
// step change. Kept separate so the initial fit waits for a real pane size.
|
|
340
|
+
useEffect(() => {
|
|
341
|
+
if (!sized || !rfSized || !layouts) return;
|
|
342
|
+
const step = layouts[activeIndex];
|
|
343
|
+
if (!step) return;
|
|
344
|
+
const rects = [...step.rects.values()];
|
|
345
|
+
if (rects.length === 0) return;
|
|
346
|
+
const minX = Math.min(...rects.map((r) => r.x));
|
|
347
|
+
const minY = Math.min(...rects.map((r) => r.y));
|
|
348
|
+
const maxX = Math.max(...rects.map((r) => r.x + r.w));
|
|
349
|
+
const maxY = Math.max(...rects.map((r) => r.y + r.h));
|
|
350
|
+
fitBounds(
|
|
351
|
+
{ x: minX, y: minY, width: maxX - minX, height: maxY - minY },
|
|
352
|
+
{ padding: fitPadding, duration: durationMs },
|
|
353
|
+
);
|
|
354
|
+
}, [sized, rfSized, layouts, activeIndex, fitPadding, durationMs, fitBounds]);
|
|
302
355
|
|
|
303
356
|
const unionMeta = useMemo(() => {
|
|
304
357
|
const m = new Map<string, StepMeta>();
|
|
@@ -308,6 +361,68 @@ function TransitionInner({
|
|
|
308
361
|
|
|
309
362
|
const activeLayout = layouts?.[activeIndex];
|
|
310
363
|
|
|
364
|
+
// Walkthrough step focus: cycle the active step's hops, dim non-participants,
|
|
365
|
+
// number the labels, and (in `focus` mode) frame the step.
|
|
366
|
+
const activeStepDef = steps[activeIndex];
|
|
367
|
+
const activeWalkthroughs = activeStepDef?.model.walkthroughs;
|
|
368
|
+
const autoPlaySteps =
|
|
369
|
+
activeStepDef?.autoPlayWalkthroughs === true && (activeWalkthroughs?.length ?? 0) > 0;
|
|
370
|
+
const hopList = useMemo(() => {
|
|
371
|
+
const out: Array<{
|
|
372
|
+
edgeId: string;
|
|
373
|
+
from: string;
|
|
374
|
+
to: string;
|
|
375
|
+
stepNo: number;
|
|
376
|
+
total: number;
|
|
377
|
+
walkthroughId: string;
|
|
378
|
+
walkthroughTitle: string;
|
|
379
|
+
}> = [];
|
|
380
|
+
for (const wt of (activeWalkthroughs ?? []) as SubsystemWalkthrough[]) {
|
|
381
|
+
wt.steps.forEach((s, i) => {
|
|
382
|
+
out.push({
|
|
383
|
+
edgeId: walkthroughStepGraphEdgeId(s),
|
|
384
|
+
from: s.from,
|
|
385
|
+
to: s.to,
|
|
386
|
+
stepNo: i + 1,
|
|
387
|
+
total: wt.steps.length,
|
|
388
|
+
walkthroughId: wt.id,
|
|
389
|
+
walkthroughTitle: wt.title,
|
|
390
|
+
});
|
|
391
|
+
});
|
|
392
|
+
}
|
|
393
|
+
return out;
|
|
394
|
+
}, [activeWalkthroughs]);
|
|
395
|
+
const [stepPointer, setStepPointer] = useState(0);
|
|
396
|
+
useEffect(() => {
|
|
397
|
+
setStepPointer(0);
|
|
398
|
+
}, [activeIndex, hopList.length]);
|
|
399
|
+
useEffect(() => {
|
|
400
|
+
if (!autoPlaySteps || hopList.length === 0) return;
|
|
401
|
+
// Pointer 0 = whole flow (no step focus); 1..N = each hop, then wraps.
|
|
402
|
+
const t = window.setInterval(
|
|
403
|
+
() => setStepPointer((p) => (p + 1) % (hopList.length + 1)),
|
|
404
|
+
Math.max(600, walkthroughAutoPlayIntervalMs),
|
|
405
|
+
);
|
|
406
|
+
return () => window.clearInterval(t);
|
|
407
|
+
}, [autoPlaySteps, hopList.length, walkthroughAutoPlayIntervalMs]);
|
|
408
|
+
const focusedHop =
|
|
409
|
+
autoPlaySteps && hopList.length > 0 && stepPointer > 0
|
|
410
|
+
? hopList[(stepPointer - 1) % hopList.length]
|
|
411
|
+
: undefined;
|
|
412
|
+
const stepNoByEdge = useMemo(() => {
|
|
413
|
+
const m = new Map<string, number[]>();
|
|
414
|
+
for (const h of hopList) {
|
|
415
|
+
const arr = m.get(h.edgeId) ?? [];
|
|
416
|
+
arr.push(h.stepNo);
|
|
417
|
+
m.set(h.edgeId, arr);
|
|
418
|
+
}
|
|
419
|
+
return m;
|
|
420
|
+
}, [hopList]);
|
|
421
|
+
const focusParticipants = useMemo(
|
|
422
|
+
() => (focusedHop ? new Set([focusedHop.from, focusedHop.to]) : null),
|
|
423
|
+
[focusedHop],
|
|
424
|
+
);
|
|
425
|
+
|
|
311
426
|
const nodes: Node[] = useMemo(() => {
|
|
312
427
|
const activeOrder = new Set(activeLayout?.order ?? []);
|
|
313
428
|
const ids = [...display.entries()]
|
|
@@ -332,21 +447,73 @@ function TransitionInner({
|
|
|
332
447
|
data: meta.data,
|
|
333
448
|
draggable: false,
|
|
334
449
|
selectable: false,
|
|
335
|
-
style: {
|
|
450
|
+
style: {
|
|
451
|
+
opacity:
|
|
452
|
+
rect.o * (focusParticipants && !focusParticipants.has(id) ? 0.18 : 1),
|
|
453
|
+
},
|
|
336
454
|
} as Node);
|
|
337
455
|
}
|
|
338
456
|
return out;
|
|
339
|
-
}, [display, activeLayout, unionMeta]);
|
|
457
|
+
}, [display, activeLayout, unionMeta, focusParticipants]);
|
|
340
458
|
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
459
|
+
// Real graph edges once settled; step focus adds hop numbers and dims the
|
|
460
|
+
// non-focused hops.
|
|
461
|
+
const edges: Edge[] = useMemo(() => {
|
|
462
|
+
if (!settled) return [];
|
|
463
|
+
const list = activeLayout?.edges ?? [];
|
|
464
|
+
const numbering = autoPlaySteps && hopList.length > 0;
|
|
465
|
+
if (!numbering && !focusedHop) return list;
|
|
466
|
+
return list.map((e) => {
|
|
467
|
+
// Number every hop while autoplaying (whole view included); dim only the
|
|
468
|
+
// hops other than the focused one.
|
|
469
|
+
const stepNos = numbering ? stepNoByEdge.get(e.id) : undefined;
|
|
470
|
+
const dimmed = focusedHop ? e.id !== focusedHop.edgeId : false;
|
|
471
|
+
if (!stepNos && !dimmed) return e;
|
|
472
|
+
return {
|
|
473
|
+
...e,
|
|
474
|
+
data: { ...(e.data as object), stepNos, dimmed },
|
|
475
|
+
} as Edge;
|
|
476
|
+
});
|
|
477
|
+
}, [settled, activeLayout, focusedHop, stepNoByEdge, autoPlaySteps, hopList.length]);
|
|
478
|
+
|
|
479
|
+
// Camera: frame a focused hop's endpoints, or the whole graph during the
|
|
480
|
+
// "whole flow" phase.
|
|
481
|
+
useEffect(() => {
|
|
482
|
+
if (walkthroughStepMode !== 'focus' || !settled || !sized || !rfSized || !autoPlaySteps)
|
|
483
|
+
return;
|
|
484
|
+
if (!activeLayout) return;
|
|
485
|
+
const rects = focusedHop
|
|
486
|
+
? [focusedHop.from, focusedHop.to]
|
|
487
|
+
.map((id) => activeLayout.rects.get(id))
|
|
488
|
+
.filter((r): r is Rect => !!r)
|
|
489
|
+
: [...activeLayout.rects.values()];
|
|
490
|
+
if (rects.length === 0) return;
|
|
491
|
+
const minX = Math.min(...rects.map((r) => r.x));
|
|
492
|
+
const minY = Math.min(...rects.map((r) => r.y));
|
|
493
|
+
const maxX = Math.max(...rects.map((r) => r.x + r.w));
|
|
494
|
+
const maxY = Math.max(...rects.map((r) => r.y + r.h));
|
|
495
|
+
fitBounds(
|
|
496
|
+
{ x: minX, y: minY, width: maxX - minX, height: maxY - minY },
|
|
497
|
+
{ padding: focusedHop ? 0.3 : fitPadding, duration: durationMs },
|
|
498
|
+
);
|
|
499
|
+
}, [
|
|
500
|
+
walkthroughStepMode,
|
|
501
|
+
focusedHop,
|
|
502
|
+
settled,
|
|
503
|
+
sized,
|
|
504
|
+
rfSized,
|
|
505
|
+
activeLayout,
|
|
506
|
+
durationMs,
|
|
507
|
+
fitBounds,
|
|
508
|
+
autoPlaySteps,
|
|
509
|
+
fitPadding,
|
|
510
|
+
]);
|
|
345
511
|
|
|
346
512
|
const callbacks = useMemo(() => (onSelect ? { onSelect } : {}), [onSelect]);
|
|
347
513
|
|
|
348
514
|
return (
|
|
349
515
|
<div
|
|
516
|
+
ref={wrapRef}
|
|
350
517
|
className={className}
|
|
351
518
|
style={{
|
|
352
519
|
position: 'relative',
|
|
@@ -376,6 +543,70 @@ function TransitionInner({
|
|
|
376
543
|
</ReactFlow>
|
|
377
544
|
</SubsystemCallbacksProvider>
|
|
378
545
|
)}
|
|
546
|
+
{activeStepDef?.showWalkthroughTitle && focusedHop && (
|
|
547
|
+
<div
|
|
548
|
+
aria-label={`${focusedHop.walkthroughTitle}, step ${focusedHop.stepNo} of ${focusedHop.total}`}
|
|
549
|
+
style={{
|
|
550
|
+
position: 'absolute',
|
|
551
|
+
top: 12,
|
|
552
|
+
left: '50%',
|
|
553
|
+
transform: 'translateX(-50%)',
|
|
554
|
+
minWidth: 160,
|
|
555
|
+
maxWidth: '60%',
|
|
556
|
+
display: 'flex',
|
|
557
|
+
flexDirection: 'column',
|
|
558
|
+
background: theme.colors.backgroundSecondary ?? theme.colors.background,
|
|
559
|
+
border: `1px solid ${theme.colors.border}`,
|
|
560
|
+
borderRadius: 6,
|
|
561
|
+
boxShadow: '0 1px 4px rgba(0,0,0,0.25)',
|
|
562
|
+
overflow: 'hidden',
|
|
563
|
+
opacity: 0.95,
|
|
564
|
+
pointerEvents: 'none',
|
|
565
|
+
zIndex: 10,
|
|
566
|
+
}}
|
|
567
|
+
>
|
|
568
|
+
<div
|
|
569
|
+
style={{
|
|
570
|
+
padding: '5px 14px',
|
|
571
|
+
fontSize: theme.fontSizes[2] ?? theme.fontSizes[1],
|
|
572
|
+
fontWeight: 600,
|
|
573
|
+
fontFamily: theme.fonts.monospace,
|
|
574
|
+
color: theme.colors.text,
|
|
575
|
+
overflow: 'hidden',
|
|
576
|
+
textOverflow: 'ellipsis',
|
|
577
|
+
whiteSpace: 'nowrap',
|
|
578
|
+
textAlign: 'center',
|
|
579
|
+
}}
|
|
580
|
+
>
|
|
581
|
+
{focusedHop.walkthroughTitle}
|
|
582
|
+
</div>
|
|
583
|
+
{focusedHop.total > 0 && (
|
|
584
|
+
<div style={{ display: 'flex', gap: 3, padding: '0 6px 5px' }} aria-hidden="true">
|
|
585
|
+
{Array.from({ length: focusedHop.total }, (_, i) => {
|
|
586
|
+
const n = i + 1;
|
|
587
|
+
const active = n === focusedHop.stepNo;
|
|
588
|
+
const done = n < focusedHop.stepNo;
|
|
589
|
+
return (
|
|
590
|
+
<span
|
|
591
|
+
key={n}
|
|
592
|
+
style={{
|
|
593
|
+
flex: 1,
|
|
594
|
+
height: 2,
|
|
595
|
+
borderRadius: 1,
|
|
596
|
+
background: active
|
|
597
|
+
? (theme.colors.accent ?? theme.colors.primary ?? theme.colors.text)
|
|
598
|
+
: done
|
|
599
|
+
? (theme.colors.textSecondary ?? theme.colors.text)
|
|
600
|
+
: (theme.colors.border ?? 'rgba(127,127,127,0.45)'),
|
|
601
|
+
opacity: active ? 1 : done ? 0.75 : 0.4,
|
|
602
|
+
}}
|
|
603
|
+
/>
|
|
604
|
+
);
|
|
605
|
+
})}
|
|
606
|
+
</div>
|
|
607
|
+
)}
|
|
608
|
+
</div>
|
|
609
|
+
)}
|
|
379
610
|
</div>
|
|
380
611
|
);
|
|
381
612
|
}
|