@starci/grammar 0.9.3 → 0.9.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +1 -1
  3. package/dist/.build-stamp.json +4 -4
  4. package/dist/common/components-navigation.css +192 -0
  5. package/dist/common/registry.d.ts +3 -2
  6. package/dist/common/registry.d.ts.map +1 -1
  7. package/dist/common/renderers-navigation.d.ts +3 -1
  8. package/dist/common/renderers-navigation.d.ts.map +1 -1
  9. package/dist/common/renderers-navigation.js +3 -1
  10. package/dist/common/renderers-navigation.js.map +1 -1
  11. package/dist/common/styles.css +37 -23
  12. package/dist/core/branch/DataTable/index.d.ts +7 -2
  13. package/dist/core/branch/DataTable/index.d.ts.map +1 -1
  14. package/dist/core/branch/DataTable/index.js +9 -4
  15. package/dist/core/branch/DataTable/index.js.map +1 -1
  16. package/dist/core/branch/FlowGraph/index.d.ts +34 -0
  17. package/dist/core/branch/FlowGraph/index.d.ts.map +1 -0
  18. package/dist/core/branch/FlowGraph/index.js +83 -0
  19. package/dist/core/branch/FlowGraph/index.js.map +1 -0
  20. package/dist/core/branch/FlowGraph/layout.d.ts +17 -0
  21. package/dist/core/branch/FlowGraph/layout.d.ts.map +1 -0
  22. package/dist/core/branch/FlowGraph/layout.js +51 -0
  23. package/dist/core/branch/FlowGraph/layout.js.map +1 -0
  24. package/dist/core/branch/FlowGraph/types.d.ts +28 -0
  25. package/dist/core/branch/FlowGraph/types.d.ts.map +1 -0
  26. package/dist/core/branch/FlowGraph/types.js +2 -0
  27. package/dist/core/branch/FlowGraph/types.js.map +1 -0
  28. package/dist/core/branch/SurfaceListCard/index.d.ts +6 -0
  29. package/dist/core/branch/SurfaceListCard/index.d.ts.map +1 -1
  30. package/dist/core/branch/SurfaceListCard/index.js +10 -3
  31. package/dist/core/branch/SurfaceListCard/index.js.map +1 -1
  32. package/dist/core/composite/DescriptionList/index.d.ts +5 -0
  33. package/dist/core/composite/DescriptionList/index.d.ts.map +1 -1
  34. package/dist/core/composite/DescriptionList/index.js +6 -4
  35. package/dist/core/composite/DescriptionList/index.js.map +1 -1
  36. package/dist/core/composite/ListRow/index.d.ts +8 -1
  37. package/dist/core/composite/ListRow/index.d.ts.map +1 -1
  38. package/dist/core/composite/ListRow/index.js +5 -1
  39. package/dist/core/composite/ListRow/index.js.map +1 -1
  40. package/dist/offset-pop/components-navigation.css +14 -0
  41. package/package.json +6 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/branch/FlowGraph/index.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAEhG,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAElI,MAAM,MAAM,cAAc,GAAG;IACzB,qEAAqE;IACrE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,aAAa,CAAC,CAAA;IAC5C,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,aAAa,CAAC,CAAA;IAC5C,mHAAmH;IACnH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACnC,8HAA8H;IAC9H,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;IAC/C,kDAAkD;IAClD,QAAQ,CAAC,MAAM,CAAC,EAAE,eAAe,CAAA;IACjC,oDAAoD;IACpD,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAA;IAChC,mEAAmE;IACnE,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAA;IAC/B,8EAA8E;IAC9E,QAAQ,CAAC,MAAM,CAAC,EAAE,eAAe,CAAA;IACjC,2DAA2D;IAC3D,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,+HAA+H;IAC/H,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC9B,CAAA;AAgDD;;;;;GAKG;AACH,eAAO,MAAM,SAAS,GAAI,+HAavB,cAAc,gCAuGhB,CAAA"}
@@ -0,0 +1,83 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { Background, Controls, Handle, Position, ReactFlow, useNodesInitialized, useReactFlow, } from "@xyflow/react";
4
+ import { memo, useEffect, useMemo, useState } from "react";
5
+ import { Skeleton } from "../../primitive/Skeleton/index.js";
6
+ import { flowGraphRoot, radialPositions } from "./layout.js";
7
+ export { radialPositions } from "./layout.js";
8
+ const FlowGraphNodeView = memo(({ data }) => {
9
+ const { graphNode, isSelected } = data;
10
+ const hasCount = graphNode.count !== undefined && graphNode.count !== "";
11
+ return (_jsxs("div", { className: "starci-core-flow-graph-node", "data-grammar-flow-node": graphNode.id, "data-grammar-selected": isSelected ? "true" : "false", "data-placeholder": graphNode.isPlaceholder === true ? "true" : undefined, "data-root": graphNode.isRoot === true ? "true" : undefined, "data-size": graphNode.size ?? "md", "data-tone": graphNode.isPlaceholder === true ? "muted" : graphNode.tone ?? "neutral", children: [_jsx(Handle, { className: "starci-core-flow-graph-handle", isConnectable: false, position: Position.Top, type: "target" }), _jsxs("span", { className: "starci-core-flow-graph-copy", children: [_jsx("span", { className: "starci-core-flow-graph-label", children: graphNode.label }), graphNode.description === undefined ? null : _jsx("span", { className: "starci-core-flow-graph-description", children: graphNode.description })] }), hasCount ? _jsx("span", { className: "starci-core-flow-graph-count", children: graphNode.count }) : null, _jsx(Handle, { className: "starci-core-flow-graph-handle", isConnectable: false, position: Position.Top, type: "source" })] }));
12
+ });
13
+ FlowGraphNodeView.displayName = "FlowGraphNodeView";
14
+ const NODE_TYPES = { flowGraph: FlowGraphNodeView };
15
+ const FIT_OPTIONS = { padding: 0.2, duration: 0 };
16
+ /** Re-fits the viewport once the nodes are measured, and again whenever the set of nodes or the layout changes. */
17
+ const Refit = ({ signature }) => {
18
+ const { fitView } = useReactFlow();
19
+ const isReady = useNodesInitialized();
20
+ useEffect(() => {
21
+ if (isReady)
22
+ void fitView(FIT_OPTIONS);
23
+ }, [fitView, isReady, signature]);
24
+ return null;
25
+ };
26
+ const labelFor = (node) => node.count === undefined || node.count === "" ? node.label : `${node.label} (${node.count})`;
27
+ /**
28
+ * A node-and-edge map drawn with React Flow (`@xyflow/react`, a peer dependency) in grammar tokens. The radial layout
29
+ * puts the root in the centre with its children on a ring and their children on an outer ring around them. Nodes are
30
+ * keyboard focusable (Tab) and selectable with Enter or Space; a visually hidden list repeats the nodes for screen readers.
31
+ * Contract: focus FOCUS-2, selection CONTROL-STATE-3, empty STATE-3.
32
+ */
33
+ export const FlowGraph = ({ label, nodes, edges, selectedId, onSelect, height = "md", isInteractive = true, showControls, layout = "radial", emptyLabel = "Nothing to show yet.", isLoading = false, className, }) => {
34
+ const [ownSelectedId, setOwnSelectedId] = useState(null);
35
+ const currentId = selectedId === undefined ? ownSelectedId : selectedId;
36
+ const select = (id) => {
37
+ if (selectedId === undefined)
38
+ setOwnSelectedId(id);
39
+ onSelect?.(id);
40
+ };
41
+ const positions = useMemo(() => layout === "radial" ? radialPositions(nodes, edges) : null, [layout, nodes, edges]);
42
+ const rootId = flowGraphRoot(nodes)?.id;
43
+ const flowNodes = useMemo(() => nodes.map((graphNode) => ({
44
+ id: graphNode.id,
45
+ type: "flowGraph",
46
+ position: positions?.get(graphNode.id) ?? graphNode.position ?? { x: 0, y: 0 },
47
+ data: { graphNode: layout === "radial" ? { ...graphNode, isRoot: graphNode.id === rootId } : graphNode, isSelected: graphNode.id === currentId },
48
+ selected: graphNode.id === currentId,
49
+ ariaLabel: labelFor(graphNode),
50
+ draggable: false,
51
+ connectable: false,
52
+ })), [nodes, positions, layout, rootId, currentId]);
53
+ const flowEdges = useMemo(() => edges.map((edge) => ({
54
+ id: edge.id,
55
+ source: edge.source,
56
+ target: edge.target,
57
+ type: layout === "radial" ? "straight" : "default",
58
+ className: edge.isPlaceholder === true ? "starci-core-flow-graph-edge starci-core-flow-graph-edge-placeholder" : "starci-core-flow-graph-edge",
59
+ focusable: false,
60
+ selectable: false,
61
+ animated: false,
62
+ })), [edges, layout]);
63
+ const signature = `${layout}:${nodes.map((node) => node.id).join("|")}`;
64
+ const onKeyDown = (event) => {
65
+ if (event.key === "Escape") {
66
+ if (currentId !== null)
67
+ select(null);
68
+ return;
69
+ }
70
+ if (event.key !== "Enter" && event.key !== " ")
71
+ return;
72
+ const target = event.target instanceof Element ? event.target.closest(".react-flow__node") : null;
73
+ const id = target?.getAttribute("data-id");
74
+ if (id === null || id === undefined)
75
+ return;
76
+ event.preventDefault();
77
+ select(id);
78
+ };
79
+ const controls = showControls ?? isInteractive;
80
+ return (_jsx("figure", { "aria-label": label, className: ["starci-core-flow-graph", className].filter(Boolean).join(" "), "data-component": "FlowGraph", "data-contract": "FOCUS-2 CONTROL-STATE-3 STATE-3", "data-grammar-flow-height": height, "data-grammar-flow-interactive": isInteractive ? "true" : "false", "data-grammar-flow-layout": layout, "data-tier": "branch", ...(isLoading ? { "aria-busy": true, "data-loading": "true" } : {}), onKeyDown: onKeyDown, children: isLoading ? (_jsx("div", { className: "starci-core-flow-graph-canvas starci-core-flow-graph-loading", "data-grammar-flow-loading": "true", children: _jsx(Skeleton, { shape: "rect" }) })) : nodes.length === 0 ? (_jsx("p", { className: "starci-core-flow-graph-empty", "data-contract": "STATE-3", "data-grammar-flow-empty": "true", children: emptyLabel })) : (_jsxs(_Fragment, { children: [_jsx("div", { className: "starci-core-flow-graph-canvas", children: _jsxs(ReactFlow, { edges: flowEdges, edgesFocusable: false, elementsSelectable: true, fitView: true, fitViewOptions: FIT_OPTIONS, maxZoom: 2, minZoom: 0.2, nodeOrigin: [0.5, 0.5], nodeTypes: NODE_TYPES, nodes: flowNodes, nodesConnectable: false, nodesDraggable: false, nodesFocusable: true, onNodeClick: (_event, node) => select(node.id), onPaneClick: () => { if (currentId !== null)
81
+ select(null); }, panOnDrag: isInteractive, panOnScroll: false, preventScrolling: isInteractive, proOptions: { hideAttribution: true }, zoomOnDoubleClick: false, zoomOnPinch: isInteractive, zoomOnScroll: isInteractive, children: [_jsx(Background, { className: "starci-core-flow-graph-background", gap: 1000, size: 0 }), controls ? _jsx(Controls, { "aria-label": `${label}: zoom`, className: "starci-core-flow-graph-controls", showInteractive: false }) : null, _jsx(Refit, { signature: signature })] }) }), _jsx("ul", { className: "starci-core-visually-hidden", "data-grammar-flow-fallback": "true", children: nodes.map((node) => _jsx("li", { children: labelFor(node) }, node.id)) })] })) }));
82
+ };
83
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/branch/FlowGraph/index.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EACH,UAAU,EACV,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,SAAS,EACT,mBAAmB,EACnB,YAAY,GAKf,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAsB,MAAM,OAAO,CAAA;AAC9E,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAA;AAC5D,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAG5D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAiC7C,MAAM,iBAAiB,GAAG,IAAI,CAAC,CAAC,EAAE,IAAI,EAA6B,EAAE,EAAE;IACnE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,IAAI,CAAA;IACtC,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,KAAK,SAAS,IAAI,SAAS,CAAC,KAAK,KAAK,EAAE,CAAA;IACxE,OAAO,CACH,eACI,SAAS,EAAC,6BAA6B,4BACf,SAAS,CAAC,EAAE,2BACb,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,sBAClC,SAAS,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,eAC5D,SAAS,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,eAC9C,SAAS,CAAC,IAAI,IAAI,IAAI,eACtB,SAAS,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,IAAI,SAAS,aAEnF,KAAC,MAAM,IAAC,SAAS,EAAC,+BAA+B,EAAC,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAC,QAAQ,GAAG,EAChH,gBAAM,SAAS,EAAC,6BAA6B,aACzC,eAAM,SAAS,EAAC,8BAA8B,YAAE,SAAS,CAAC,KAAK,GAAQ,EACtE,SAAS,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,eAAM,SAAS,EAAC,oCAAoC,YAAE,SAAS,CAAC,WAAW,GAAQ,IAC9H,EACN,QAAQ,CAAC,CAAC,CAAC,eAAM,SAAS,EAAC,8BAA8B,YAAE,SAAS,CAAC,KAAK,GAAQ,CAAC,CAAC,CAAC,IAAI,EAC1F,KAAC,MAAM,IAAC,SAAS,EAAC,+BAA+B,EAAC,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAC,QAAQ,GAAG,IAC9G,CACT,CAAA;AACL,CAAC,CAAC,CAAA;AACF,iBAAiB,CAAC,WAAW,GAAG,mBAAmB,CAAA;AAEnD,MAAM,UAAU,GAAc,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAA;AAC9D,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAW,CAAA;AAE1D,mHAAmH;AACnH,MAAM,KAAK,GAAG,CAAC,EAAE,SAAS,EAAkC,EAAE,EAAE;IAC5D,MAAM,EAAE,OAAO,EAAE,GAAG,YAAY,EAAE,CAAA;IAClC,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAA;IACrC,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,OAAO;YAAE,KAAK,OAAO,CAAC,WAAW,CAAC,CAAA;IAC1C,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAA;IACjC,OAAO,IAAI,CAAA;AACf,CAAC,CAAA;AAED,MAAM,QAAQ,GAAG,CAAC,IAAmB,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,GAAG,CAAA;AAEtI;;;;;GAKG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,EACtB,KAAK,EACL,KAAK,EACL,KAAK,EACL,UAAU,EACV,QAAQ,EACR,MAAM,GAAG,IAAI,EACb,aAAa,GAAG,IAAI,EACpB,YAAY,EACZ,MAAM,GAAG,QAAQ,EACjB,UAAU,GAAG,sBAAsB,EACnC,SAAS,GAAG,KAAK,EACjB,SAAS,GACI,EAAE,EAAE;IACjB,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IACvE,MAAM,SAAS,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAA;IACvE,MAAM,MAAM,GAAG,CAAC,EAAiB,EAAE,EAAE;QACjC,IAAI,UAAU,KAAK,SAAS;YAAE,gBAAgB,CAAC,EAAE,CAAC,CAAA;QAClD,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAA;IAClB,CAAC,CAAA;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAA;IACnH,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,EAAE,EAAE,CAAA;IACvC,MAAM,SAAS,GAAG,OAAO,CAAwB,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAC7E,EAAE,EAAE,SAAS,CAAC,EAAE;QAChB,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;QAC9E,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,KAAK,SAAS,EAAE;QAChJ,QAAQ,EAAE,SAAS,CAAC,EAAE,KAAK,SAAS;QACpC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC;QAC9B,SAAS,EAAE,KAAK;QAChB,WAAW,EAAE,KAAK;KACrB,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAA;IACnD,MAAM,SAAS,GAAG,OAAO,CAAc,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC9D,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,IAAI,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;QAClD,SAAS,EAAE,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,qEAAqE,CAAC,CAAC,CAAC,6BAA6B;QAC9I,SAAS,EAAE,KAAK;QAChB,UAAU,EAAE,KAAK;QACjB,QAAQ,EAAE,KAAK;KAClB,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;IACrB,MAAM,SAAS,GAAG,GAAG,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAA;IAEvE,MAAM,SAAS,GAAG,CAAC,KAAiC,EAAE,EAAE;QACpD,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YACzB,IAAI,SAAS,KAAK,IAAI;gBAAE,MAAM,CAAC,IAAI,CAAC,CAAA;YACpC,OAAM;QACV,CAAC;QACD,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG;YAAE,OAAM;QACtD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,YAAY,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAc,mBAAmB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAC9G,MAAM,EAAE,GAAG,MAAM,EAAE,YAAY,CAAC,SAAS,CAAC,CAAA;QAC1C,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,SAAS;YAAE,OAAM;QAC3C,KAAK,CAAC,cAAc,EAAE,CAAA;QACtB,MAAM,CAAC,EAAE,CAAC,CAAA;IACd,CAAC,CAAA;IAED,MAAM,QAAQ,GAAG,YAAY,IAAI,aAAa,CAAA;IAE9C,OAAO,CACH,+BACgB,KAAK,EACjB,SAAS,EAAE,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,oBAC3D,WAAW,mBACZ,iCAAiC,8BACrB,MAAM,mCACD,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,8BACrC,MAAM,eACtB,QAAQ,KACd,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EACpE,SAAS,EAAE,SAAS,YAEnB,SAAS,CAAC,CAAC,CAAC,CACT,cAAK,SAAS,EAAC,8DAA8D,+BAA2B,MAAM,YAAC,KAAC,QAAQ,IAAC,KAAK,EAAC,MAAM,GAAG,GAAM,CACjJ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACrB,YAAG,SAAS,EAAC,8BAA8B,mBAAe,SAAS,6BAAyB,MAAM,YAAE,UAAU,GAAK,CACtH,CAAC,CAAC,CAAC,CACA,8BACI,cAAK,SAAS,EAAC,+BAA+B,YAC1C,MAAC,SAAS,IACN,KAAK,EAAE,SAAS,EAChB,cAAc,EAAE,KAAK,EACrB,kBAAkB,QAClB,OAAO,QACP,cAAc,EAAE,WAAW,EAC3B,OAAO,EAAE,CAAC,EACV,OAAO,EAAE,GAAG,EACZ,UAAU,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EACtB,SAAS,EAAE,UAAU,EACrB,KAAK,EAAE,SAAS,EAChB,gBAAgB,EAAE,KAAK,EACvB,cAAc,EAAE,KAAK,EACrB,cAAc,QACd,WAAW,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAC9C,WAAW,EAAE,GAAG,EAAE,GAAG,IAAI,SAAS,KAAK,IAAI;4BAAE,MAAM,CAAC,IAAI,CAAC,CAAA,CAAC,CAAC,EAC3D,SAAS,EAAE,aAAa,EACxB,WAAW,EAAE,KAAK,EAClB,gBAAgB,EAAE,aAAa,EAC/B,UAAU,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,EACrC,iBAAiB,EAAE,KAAK,EACxB,WAAW,EAAE,aAAa,EAC1B,YAAY,EAAE,aAAa,aAE3B,KAAC,UAAU,IAAC,SAAS,EAAC,mCAAmC,EAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,GAAI,EAC/E,QAAQ,CAAC,CAAC,CAAC,KAAC,QAAQ,kBAAa,GAAG,KAAK,QAAQ,EAAE,SAAS,EAAC,iCAAiC,EAAC,eAAe,EAAE,KAAK,GAAI,CAAC,CAAC,CAAC,IAAI,EACjI,KAAC,KAAK,IAAC,SAAS,EAAE,SAAS,GAAI,IACvB,GACV,EACN,aAAI,SAAS,EAAC,6BAA6B,gCAA4B,MAAM,YACxE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,uBAAmB,QAAQ,CAAC,IAAI,CAAC,IAAxB,IAAI,CAAC,EAAE,CAAuB,CAAC,GAC5D,IACN,CACN,GACI,CACZ,CAAA;AACL,CAAC,CAAA"}
@@ -0,0 +1,17 @@
1
+ import type { FlowGraphEdge, FlowGraphNode } from "./types.js";
2
+ export type FlowGraphPoint = {
3
+ readonly x: number;
4
+ readonly y: number;
5
+ };
6
+ /** Distance of the first ring from the root, and the step between the rings after it. */
7
+ export declare const FLOW_GRAPH_FIRST_RING = 200;
8
+ export declare const FLOW_GRAPH_RING_STEP = 170;
9
+ /** The node the radial layout puts in the centre: the one flagged `isRoot`, else the first. */
10
+ export declare const flowGraphRoot: (nodes: ReadonlyArray<FlowGraphNode>) => FlowGraphNode | undefined;
11
+ /**
12
+ * Radial positions, node centres in graph units, the root at (0, 0). Direct children of the root sit evenly on
13
+ * the first ring; each deeper level sits on the next ring, spread over the wedge of its parent so a branch
14
+ * stays together. Nodes the root cannot reach through any edge (either direction) share an outer ring.
15
+ */
16
+ export declare const radialPositions: (nodes: ReadonlyArray<FlowGraphNode>, edges: ReadonlyArray<FlowGraphEdge>) => ReadonlyMap<string, FlowGraphPoint>;
17
+ //# sourceMappingURL=layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../../src/core/branch/FlowGraph/layout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE9D,MAAM,MAAM,cAAc,GAAG;IAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAEvE,yFAAyF;AACzF,eAAO,MAAM,qBAAqB,MAAM,CAAA;AACxC,eAAO,MAAM,oBAAoB,MAAM,CAAA;AAEvC,+FAA+F;AAC/F,eAAO,MAAM,aAAa,GAAI,OAAO,aAAa,CAAC,aAAa,CAAC,KAAG,aAAa,GAAG,SAC1B,CAAA;AAE1D;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO,aAAa,CAAC,aAAa,CAAC,EAAE,OAAO,aAAa,CAAC,aAAa,CAAC,KAAG,WAAW,CAAC,MAAM,EAAE,cAAc,CAqC5I,CAAA"}
@@ -0,0 +1,51 @@
1
+ /** Distance of the first ring from the root, and the step between the rings after it. */
2
+ export const FLOW_GRAPH_FIRST_RING = 200;
3
+ export const FLOW_GRAPH_RING_STEP = 170;
4
+ /** The node the radial layout puts in the centre: the one flagged `isRoot`, else the first. */
5
+ export const flowGraphRoot = (nodes) => nodes.find((node) => node.isRoot === true) ?? nodes[0];
6
+ /**
7
+ * Radial positions, node centres in graph units, the root at (0, 0). Direct children of the root sit evenly on
8
+ * the first ring; each deeper level sits on the next ring, spread over the wedge of its parent so a branch
9
+ * stays together. Nodes the root cannot reach through any edge (either direction) share an outer ring.
10
+ */
11
+ export const radialPositions = (nodes, edges) => {
12
+ const positions = new Map();
13
+ const root = flowGraphRoot(nodes);
14
+ if (root === undefined)
15
+ return positions;
16
+ const known = new Set(nodes.map((node) => node.id));
17
+ const neighbours = new Map();
18
+ for (const edge of edges) {
19
+ if (!known.has(edge.source) || !known.has(edge.target))
20
+ continue;
21
+ neighbours.set(edge.source, [...(neighbours.get(edge.source) ?? []), edge.target]);
22
+ neighbours.set(edge.target, [...(neighbours.get(edge.target) ?? []), edge.source]);
23
+ }
24
+ positions.set(root.id, { x: 0, y: 0 });
25
+ const radius = (depth) => FLOW_GRAPH_FIRST_RING + (depth - 1) * FLOW_GRAPH_RING_STEP;
26
+ const place = (id, depth, angle) => {
27
+ positions.set(id, { x: Math.cos(angle) * radius(depth), y: Math.sin(angle) * radius(depth) });
28
+ };
29
+ // A level at a time. The root shares the full circle out evenly; every other parent spreads its unplaced
30
+ // neighbours over its own wedge, centred on the direction it was placed in, so a branch stays together.
31
+ let level = [{ id: root.id, angle: -Math.PI / 2, wedge: Math.PI * 2 }];
32
+ let deepest = 0;
33
+ for (let depth = 1; level.length > 0; depth += 1) {
34
+ const next = [];
35
+ for (const parent of level) {
36
+ const children = (neighbours.get(parent.id) ?? []).filter((id, index, all) => !positions.has(id) && all.indexOf(id) === index);
37
+ const slot = parent.wedge / Math.max(children.length, 1);
38
+ children.forEach((id, index) => {
39
+ const angle = depth === 1 ? parent.angle + index * slot : parent.angle + (index - (children.length - 1) / 2) * slot;
40
+ place(id, depth, angle);
41
+ deepest = depth;
42
+ next.push({ id, angle, wedge: Math.min(slot, Math.PI * 0.9) });
43
+ });
44
+ }
45
+ level = next;
46
+ }
47
+ const orphans = nodes.filter((node) => !positions.has(node.id));
48
+ orphans.forEach((node, index) => place(node.id, deepest + 1, -Math.PI / 2 + (index * Math.PI * 2) / orphans.length));
49
+ return positions;
50
+ };
51
+ //# sourceMappingURL=layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.js","sourceRoot":"","sources":["../../../../src/core/branch/FlowGraph/layout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ export type FlowGraphTone = "neutral" | "accent" | "success" | "warning" | "danger" | "muted";
2
+ export type FlowGraphNodeSize = "sm" | "md" | "lg";
3
+ export type FlowGraphHeight = "sm" | "md" | "lg";
4
+ export type FlowGraphLayout = "radial" | "manual";
5
+ export type FlowGraphNode = {
6
+ readonly id: string;
7
+ readonly label: string;
8
+ readonly description?: string;
9
+ readonly tone?: FlowGraphTone;
10
+ readonly size?: FlowGraphNodeSize;
11
+ readonly count?: number | string;
12
+ /** The centre of a radial layout. Defaults to the first node. */
13
+ readonly isRoot?: boolean;
14
+ /** A slot not filled yet: dashed outline, muted. */
15
+ readonly isPlaceholder?: boolean;
16
+ /** Where the node sits in `layout="manual"`, as its centre in graph units. */
17
+ readonly position?: {
18
+ readonly x: number;
19
+ readonly y: number;
20
+ };
21
+ };
22
+ export type FlowGraphEdge = {
23
+ readonly id: string;
24
+ readonly source: string;
25
+ readonly target: string;
26
+ readonly isPlaceholder?: boolean;
27
+ };
28
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/branch/FlowGraph/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAA;AAC7F,MAAM,MAAM,iBAAiB,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;AAClD,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;AAChD,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAEjD,MAAM,MAAM,aAAa,GAAG;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,aAAa,CAAA;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,iBAAiB,CAAA;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAChC,iEAAiE;IACjE,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;IACzB,oDAAoD;IACpD,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAA;IAChC,8EAA8E;IAC9E,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CACjE,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CACnC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/core/branch/FlowGraph/types.ts"],"names":[],"mappings":""}
@@ -20,7 +20,13 @@ type SurfaceListFrameProps = (LabelledSurfaceList | SelfNamedSurfaceList) & {
20
20
  * above this surface so the page never skips a level.
21
21
  */
22
22
  readonly headingLevel?: SurfaceHeadingLevel;
23
+ /**
24
+ * The collection is loading (knowledge STATE-8). With no `children` it draws `loadingRows` skeleton rows (ListRow
25
+ * anatomy, `aria-hidden`) and is `aria-busy`; real `children` win over the skeleton rows.
26
+ */
23
27
  readonly isLoading?: boolean;
28
+ /** How many skeleton rows a loading card draws (default 3, 1 to 12). */
29
+ readonly loadingRows?: number;
24
30
  /**
25
31
  * The collection reports outcomes: it squares its corners and paints each row's verdict edge.
26
32
  *
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/branch/SurfaceListCard/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAA;AAEzE,OAAO,EAAwC,KAAK,mBAAmB,EAAE,MAAM,gCAAgC,CAAA;AAG/G,KAAK,mBAAmB,GAAG;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC9B,CAAA;AAED,KAAK,oBAAoB,GAAG;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAA;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC7B,CAAA;AAED,KAAK,qBAAqB,GAAG,CAAC,mBAAmB,GAAG,oBAAoB,CAAC,GAAG;IACxE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAA;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAA;IACjC;;;OAGG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,mBAAmB,CAAA;IAC3C,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B;;;;;;;OAOG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAClC,CAAA;AAED,sEAAsE;AACtE,MAAM,MAAM,qBAAqB,GAAG,UAAU,CAAA;AAE9C,MAAM,MAAM,oBAAoB,GAAG,qBAAqB,GAAG;IACvD;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;IAC7B;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAA;CAC7B,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,OAAO,oBAAoB,gCAiF1D,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/branch/SurfaceListCard/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAEvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAA;AAEzE,OAAO,EAAwC,KAAK,mBAAmB,EAAE,MAAM,gCAAgC,CAAA;AAG/G,KAAK,mBAAmB,GAAG;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC9B,CAAA;AAED,KAAK,oBAAoB,GAAG;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAA;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC7B,CAAA;AAED,KAAK,qBAAqB,GAAG,CAAC,mBAAmB,GAAG,oBAAoB,CAAC,GAAG;IACxE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAA;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAA;IACjC;;;OAGG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,mBAAmB,CAAA;IAC3C;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,wEAAwE;IACxE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B;;;;;;;OAOG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAClC,CAAA;AAED,sEAAsE;AACtE,MAAM,MAAM,qBAAqB,GAAG,UAAU,CAAA;AAE9C,MAAM,MAAM,oBAAoB,GAAG,qBAAqB,GAAG;IACvD;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;IAC7B;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAA;CAC7B,CAAA;AAKD,eAAO,MAAM,eAAe,GAAI,OAAO,oBAAoB,gCAuF1D,CAAA"}
@@ -1,19 +1,26 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { Children, useId } from "react";
4
+ import { ListRow } from "../../composite/ListRow/index.js";
4
5
  import { VerticalScrollRegion } from "../../composite/VerticalScrollRegion/index.js";
5
6
  import { DEFAULT_SURFACE_HEADING_LEVEL, Label } from "../../primitive/Label/index.js";
6
7
  import { collectionClassName, listShellClassName, surfaceFactClassName, surfaceFooterClassName, surfaceLabelClassName, surfaceListClassName } from "./classNames.js";
8
+ const DEFAULT_LOADING_ROWS = 3;
9
+ const clampRows = (rows) => Math.min(12, Math.max(1, Math.floor(Number.isFinite(rows) ? rows : DEFAULT_LOADING_ROWS)));
7
10
  export const SurfaceListCard = (props) => {
8
- const { label, ariaLabel, children, empty, fact, labelEnd, labelHidden = false, footer, depth = "top", headingLevel = DEFAULT_SURFACE_HEADING_LEVEL, isLoading = false, isVerdict = false, isScrollable = false, } = props;
11
+ const { label, ariaLabel, children, empty, fact, labelEnd, labelHidden = false, footer, depth = "top", headingLevel = DEFAULT_SURFACE_HEADING_LEVEL, isLoading = false, loadingRows = DEFAULT_LOADING_ROWS, isVerdict = false, isScrollable = false, } = props;
9
12
  const headingId = useId();
10
13
  const accessibleName = ariaLabel ?? label;
11
- const isEmpty = empty !== undefined && Children.toArray(children).length === 0;
14
+ const hasRows = Children.toArray(children).length > 0;
15
+ const isSkeleton = isLoading && !hasRows;
16
+ const isEmpty = !isSkeleton && empty !== undefined && !hasRows;
12
17
  const collectionSemantics = isEmpty
13
18
  ? {}
14
19
  : isScrollable
15
20
  ? { role: "list", ...(!labelHidden && label !== undefined ? { "aria-labelledby": headingId } : accessibleName === undefined ? {} : { "aria-label": accessibleName }) }
16
21
  : { as: "ul", role: "list" };
17
- return (_jsxs("section", { className: surfaceListClassName, "data-grammar-label-visibility": labelHidden ? "hidden" : "visible", "data-grammar-surface-list": "true", "data-component": "SurfaceListCard", "data-tier": "branch", "data-grammar-surface-depth": depth, children: [label === undefined || labelHidden ? null : (_jsxs("div", { className: surfaceLabelClassName, "data-contract": "GAP-2", "data-grammar-surface-label": "true", "data-grammar-label-end": labelEnd === undefined ? "false" : "true", children: [_jsx(Label, { as: `h${headingLevel}`, id: headingId, depth: depth, children: label }), fact === undefined ? null : (_jsx("span", { className: surfaceFactClassName, "data-grammar-surface-depth": depth, "data-contract": `TONE-2 ${depth === "nested" ? "FONT-1" : "FONT-2"}`, children: fact })), labelEnd === undefined ? null : _jsx("span", { className: "starci-core-surface-label-end", children: labelEnd })] })), _jsx("div", { "aria-label": labelHidden || label === undefined ? accessibleName : undefined, "aria-labelledby": !labelHidden && label !== undefined ? headingId : undefined, className: listShellClassName, "data-contract": "SURFACE-2 PADDING-0 OVERFLOW-2", "data-grammar-surface": "true", "data-grammar-scroll": isScrollable ? "contained" : "page", "data-grammar-surface-depth": depth, "data-surface-context": depth === "nested" ? "nested" : "page", "data-verdict": String(isVerdict), children: _jsx(VerticalScrollRegion, { ...collectionSemantics, className: collectionClassName, "data-grammar-collection": isVerdict ? "verdict" : "list", "data-grammar-list": "true", "data-loading": String(isLoading), isScrollable: isScrollable, children: isEmpty ? empty : children }) }), footer === undefined ? null : (_jsx("div", { className: surfaceFooterClassName, "data-grammar-surface-footer": "true", children: footer }))] }));
22
+ return (_jsxs("section", { className: surfaceListClassName, "data-grammar-label-visibility": labelHidden ? "hidden" : "visible", "data-grammar-surface-list": "true", "data-component": "SurfaceListCard", "data-tier": "branch", "data-grammar-surface-depth": depth, children: [label === undefined || labelHidden ? null : (_jsxs("div", { className: surfaceLabelClassName, "data-contract": "GAP-2", "data-grammar-surface-label": "true", "data-grammar-label-end": labelEnd === undefined ? "false" : "true", children: [_jsx(Label, { as: `h${headingLevel}`, id: headingId, depth: depth, children: label }), fact === undefined ? null : (_jsx("span", { className: surfaceFactClassName, "data-grammar-surface-depth": depth, "data-contract": `TONE-2 ${depth === "nested" ? "FONT-1" : "FONT-2"}`, children: fact })), labelEnd === undefined ? null : _jsx("span", { className: "starci-core-surface-label-end", children: labelEnd })] })), _jsx("div", { "aria-label": labelHidden || label === undefined ? accessibleName : undefined, "aria-labelledby": !labelHidden && label !== undefined ? headingId : undefined, className: listShellClassName, "data-contract": "SURFACE-2 PADDING-0 OVERFLOW-2", "data-grammar-surface": "true", "data-grammar-scroll": isScrollable ? "contained" : "page", "data-grammar-surface-depth": depth, "data-surface-context": depth === "nested" ? "nested" : "page", "data-verdict": String(isVerdict), children: _jsx(VerticalScrollRegion, { ...collectionSemantics, className: collectionClassName, "data-grammar-collection": isVerdict ? "verdict" : "list", "data-grammar-list": "true", "data-loading": String(isLoading), ...(isLoading ? { "aria-busy": true } : {}), isScrollable: isScrollable, children: isSkeleton
23
+ ? Array.from({ length: clampRows(loadingRows) }, (_, index) => _jsx(ListRow, { isSkeleton: true, title: "", description: "", leading: "", actions: "" }, index))
24
+ : isEmpty ? empty : children }) }), footer === undefined ? null : (_jsx("div", { className: surfaceFooterClassName, "data-grammar-surface-footer": "true", children: footer }))] }));
18
25
  };
19
26
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/branch/SurfaceListCard/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/branch/SurfaceListCard/index.tsx"],"names":[],"mappings":"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"}
@@ -35,6 +35,11 @@ type StatStripLayout = {
35
35
  export type DescriptionListProps = (PairLayout | StatStripLayout) & {
36
36
  /** Draw a separator between pairs (between cells, for `stat-strip`). */
37
37
  readonly isDivided?: boolean;
38
+ /**
39
+ * Unresolved values (knowledge STATE-8): every `term` stays real text, each `description` (and a stat item meta)
40
+ * becomes a Skeleton text line so the cells keep their size, a stat `unit` is dropped, and the list is `aria-busy`.
41
+ */
42
+ readonly isLoading?: boolean;
38
43
  readonly className?: string;
39
44
  };
40
45
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/composite/DescriptionList/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;AAG/D,MAAM,MAAM,mBAAmB,GAAG;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAA;CAClC,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,uBAAuB,GAAG,mBAAmB,GAAG;IACxD,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,CAAA;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAA;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAA;CAC5B,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,SAAS,GAAG,YAAY,CAAA;AAExE,KAAK,UAAU,GAAG;IACd;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,CAAA;IACvC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAA;CACrD,CAAA;AAED,KAAK,eAAe,GAAG;IACnB;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;IAC7B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,uBAAuB,CAAC,CAAA;CACzD,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG,CAAC,UAAU,GAAG,eAAe,CAAC,GAAG;IAChE,wEAAwE;IACxE,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC9B,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO,oBAAoB,gCAoC1D,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/composite/DescriptionList/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;AAI/D,MAAM,MAAM,mBAAmB,GAAG;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAA;CAClC,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,uBAAuB,GAAG,mBAAmB,GAAG;IACxD,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,CAAA;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAA;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAA;CAC5B,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,SAAS,GAAG,YAAY,CAAA;AAExE,KAAK,UAAU,GAAG;IACd;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,CAAA;IACvC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAA;CACrD,CAAA;AAED,KAAK,eAAe,GAAG;IACnB;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;IAC7B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,uBAAuB,CAAC,CAAA;CACzD,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG,CAAC,UAAU,GAAG,eAAe,CAAC,GAAG;IAChE,wEAAwE;IACxE,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC9B,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO,oBAAoB,gCAsC1D,CAAA"}
@@ -1,5 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { navigationClassName } from "../../navigationClassNames.js";
3
+ import { Skeleton } from "../../primitive/Skeleton/index.js";
3
4
  import { IconTile } from "../../primitive/IconTile/index.js";
4
5
  /**
5
6
  * Term/value pairs (details, metadata, settings summaries) as a real `<dl>`.
@@ -8,10 +9,11 @@ import { IconTile } from "../../primitive/IconTile/index.js";
8
9
  * second `<dd>` of the same term.
9
10
  */
10
11
  export const DescriptionList = (props) => {
11
- const { isDivided = true, className } = props;
12
+ const { isDivided = true, isLoading = false, className } = props;
13
+ const pending = _jsx(Skeleton, { shape: "text" });
12
14
  const layout = props.layout ?? "columns";
13
- return (_jsx("dl", { className: navigationClassName("starci-core-description-list", className), "data-component": "DescriptionList", "data-contract": "HIERARCHY-3 TRUTH-1", "data-tier": "composite", "data-grammar-description-layout": layout, "data-grammar-description-divided": isDivided ? "true" : "false", children: props.layout === "stat-strip"
14
- ? props.items.map((item) => (_jsxs("div", { className: "starci-core-description-pair", "data-grammar-description-pair": "true", children: [_jsxs("dt", { className: "starci-core-description-term starci-core-description-stat-term", children: [item.icon === undefined ? null : _jsx(IconTile, { source: item.icon, size: "sm", tone: "neutral" }), _jsx("span", { children: item.term })] }), _jsxs("dd", { className: "starci-core-description-value starci-core-description-figure", "data-contract": "FONT-5", children: [_jsx("span", { className: "starci-core-description-figure-value", children: item.description }), item.unit === undefined ? null : _jsx("span", { className: "starci-core-description-unit", children: item.unit })] }), item.meta === undefined ? null : (_jsx("dd", { className: "starci-core-description-meta", "data-contract": "FONT-2", children: item.meta }))] }, item.id)))
15
- : props.items.map((item) => (_jsxs("div", { className: "starci-core-description-pair", "data-grammar-description-pair": "true", children: [_jsx("dt", { className: "starci-core-description-term", children: item.term }), _jsx("dd", { className: "starci-core-description-value", children: item.description })] }, item.id))) }));
15
+ return (_jsx("dl", { className: navigationClassName("starci-core-description-list", className), "data-component": "DescriptionList", "data-contract": "HIERARCHY-3 TRUTH-1", "data-tier": "composite", ...(isLoading ? { "aria-busy": true, "data-loading": "true" } : {}), "data-grammar-description-layout": layout, "data-grammar-description-divided": isDivided ? "true" : "false", children: props.layout === "stat-strip"
16
+ ? props.items.map((item) => (_jsxs("div", { className: "starci-core-description-pair", "data-grammar-description-pair": "true", children: [_jsxs("dt", { className: "starci-core-description-term starci-core-description-stat-term", children: [item.icon === undefined ? null : _jsx(IconTile, { source: item.icon, size: "sm", tone: "neutral" }), _jsx("span", { children: item.term })] }), _jsxs("dd", { className: "starci-core-description-value starci-core-description-figure", "data-contract": "FONT-5", children: [_jsx("span", { className: "starci-core-description-figure-value", children: isLoading ? pending : item.description }), item.unit === undefined || isLoading ? null : _jsx("span", { className: "starci-core-description-unit", children: item.unit })] }), item.meta === undefined ? null : (_jsx("dd", { className: "starci-core-description-meta", "data-contract": "FONT-2", children: isLoading ? pending : item.meta }))] }, item.id)))
17
+ : props.items.map((item) => (_jsxs("div", { className: "starci-core-description-pair", "data-grammar-description-pair": "true", children: [_jsx("dt", { className: "starci-core-description-term", children: item.term }), _jsx("dd", { className: "starci-core-description-value", children: isLoading ? pending : item.description })] }, item.id))) }));
16
18
  };
17
19
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/composite/DescriptionList/index.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AAEnE,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAA;AA6C5D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAA2B,EAAE,EAAE;IAC3D,MAAM,EAAE,SAAS,GAAG,IAAI,EAAE,SAAS,EAAE,GAAG,KAAK,CAAA;IAC7C,MAAM,MAAM,GAA0B,KAAK,CAAC,MAAM,IAAI,SAAS,CAAA;IAC/D,OAAO,CACH,aACI,SAAS,EAAE,mBAAmB,CAAC,8BAA8B,EAAE,SAAS,CAAC,oBAC1D,iBAAiB,mBAClB,qBAAqB,eACzB,WAAW,qCACY,MAAM,sCACL,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,YAE7D,KAAK,CAAC,MAAM,KAAK,YAAY;YAC1B,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACxB,eAAmB,SAAS,EAAC,8BAA8B,mCAA+B,MAAM,aAC5F,cAAI,SAAS,EAAC,gEAAgE,aACzE,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAC,QAAQ,IAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,SAAS,GAAG,EAC1F,yBAAO,IAAI,CAAC,IAAI,GAAQ,IACvB,EACL,cAAI,SAAS,EAAC,8DAA8D,mBAAe,QAAQ,aAC/F,eAAM,SAAS,EAAC,sCAAsC,YAAE,IAAI,CAAC,WAAW,GAAQ,EAC/E,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,eAAM,SAAS,EAAC,8BAA8B,YAAE,IAAI,CAAC,IAAI,GAAQ,IAClG,EACJ,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAC9B,aAAI,SAAS,EAAC,8BAA8B,mBAAe,QAAQ,YAAE,IAAI,CAAC,IAAI,GAAM,CACvF,KAXK,IAAI,CAAC,EAAE,CAYX,CACT,CAAC;YACF,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACxB,eAAmB,SAAS,EAAC,8BAA8B,mCAA+B,MAAM,aAC5F,aAAI,SAAS,EAAC,8BAA8B,YAAE,IAAI,CAAC,IAAI,GAAM,EAC7D,aAAI,SAAS,EAAC,+BAA+B,YAAE,IAAI,CAAC,WAAW,GAAM,KAF/D,IAAI,CAAC,EAAE,CAGX,CACT,CAAC,GACL,CACR,CAAA;AACL,CAAC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/composite/DescriptionList/index.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AAEnE,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAA;AAkD5D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAA2B,EAAE,EAAE;IAC3D,MAAM,EAAE,SAAS,GAAG,IAAI,EAAE,SAAS,GAAG,KAAK,EAAE,SAAS,EAAE,GAAG,KAAK,CAAA;IAChE,MAAM,OAAO,GAAG,KAAC,QAAQ,IAAC,KAAK,EAAC,MAAM,GAAG,CAAA;IACzC,MAAM,MAAM,GAA0B,KAAK,CAAC,MAAM,IAAI,SAAS,CAAA;IAC/D,OAAO,CACH,aACI,SAAS,EAAE,mBAAmB,CAAC,8BAA8B,EAAE,SAAS,CAAC,oBAC1D,iBAAiB,mBAClB,qBAAqB,eACzB,WAAW,KACjB,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,qCACnC,MAAM,sCACL,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,YAE7D,KAAK,CAAC,MAAM,KAAK,YAAY;YAC1B,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACxB,eAAmB,SAAS,EAAC,8BAA8B,mCAA+B,MAAM,aAC5F,cAAI,SAAS,EAAC,gEAAgE,aACzE,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAC,QAAQ,IAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,SAAS,GAAG,EAC1F,yBAAO,IAAI,CAAC,IAAI,GAAQ,IACvB,EACL,cAAI,SAAS,EAAC,8DAA8D,mBAAe,QAAQ,aAC/F,eAAM,SAAS,EAAC,sCAAsC,YAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,GAAQ,EACrG,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,eAAM,SAAS,EAAC,8BAA8B,YAAE,IAAI,CAAC,IAAI,GAAQ,IAC/G,EACJ,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAC9B,aAAI,SAAS,EAAC,8BAA8B,mBAAe,QAAQ,YAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAM,CAC7G,KAXK,IAAI,CAAC,EAAE,CAYX,CACT,CAAC;YACF,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACxB,eAAmB,SAAS,EAAC,8BAA8B,mCAA+B,MAAM,aAC5F,aAAI,SAAS,EAAC,8BAA8B,YAAE,IAAI,CAAC,IAAI,GAAM,EAC7D,aAAI,SAAS,EAAC,+BAA+B,YAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,GAAM,KAFrF,IAAI,CAAC,EAAE,CAGX,CACT,CAAC,GACL,CACR,CAAA;AACL,CAAC,CAAA"}
@@ -18,6 +18,13 @@ export type ListRowProps = {
18
18
  readonly state?: PresentationState;
19
19
  /** In a verdict collection, the outcome this row reports (the collection's leading edge). */
20
20
  readonly verdict?: RowVerdict;
21
+ /**
22
+ * Draw the row as inert geometry while its content is unresolved (knowledge STATE-8): `title` becomes a Skeleton
23
+ * text line, `description` a second line, `leading` a Skeleton circle and `actions` a small Skeleton footprint,
24
+ * each only if it is passed, so the loading row has the size of the loaded one. The row is `aria-hidden` and
25
+ * renders no interactive child, `badges` and `children` included; the collection owns `aria-busy`.
26
+ */
27
+ readonly isSkeleton?: boolean;
21
28
  };
22
29
  /**
23
30
  * One interactive row in a `SurfaceListCard` (or an app-owned `<ul>`): leading mark, title with its badges,
@@ -27,5 +34,5 @@ export type ListRowProps = {
27
34
  * between consecutive rows - so static and interactive rows mix in one collection. It is an `<li>`: render it
28
35
  * inside a list, never loose. The actions keep their own semantics; the row itself is not a target.
29
36
  */
30
- export declare const ListRow: ({ title, description, leading, badges, actions, children, state, verdict }: ListRowProps) => import("react").JSX.Element;
37
+ export declare const ListRow: ({ title, description, leading, badges, actions, children, state, verdict, isSkeleton }: ListRowProps) => import("react").JSX.Element;
31
38
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/composite/ListRow/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,OAAO,EAAgB,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AACrE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAE5D,MAAM,MAAM,YAAY,GAAG;IACvB,yEAAyE;IACzE,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;IACzB,gFAAgF;IAChF,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAA;IAChC,wIAAwI;IACxI,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAA;IAC5B,sGAAsG;IACtG,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAA;IAC3B,uGAAuG;IACvG,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAA;IAC5B,6GAA6G;IAC7G,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;IAC7B,oGAAoG;IACpG,QAAQ,CAAC,KAAK,CAAC,EAAE,iBAAiB,CAAA;IAClC,6FAA6F;IAC7F,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAA;CAChC,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,OAAO,GAAI,4EAAwF,YAAY,gCA2B3H,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/composite/ListRow/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGtC,OAAO,EAAgB,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AACrE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAE5D,MAAM,MAAM,YAAY,GAAG;IACvB,yEAAyE;IACzE,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;IACzB,gFAAgF;IAChF,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAA;IAChC,wIAAwI;IACxI,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAA;IAC5B,sGAAsG;IACtG,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAA;IAC3B,uGAAuG;IACvG,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAA;IAC5B,6GAA6G;IAC7G,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;IAC7B,oGAAoG;IACpG,QAAQ,CAAC,KAAK,CAAC,EAAE,iBAAiB,CAAA;IAClC,6FAA6F;IAC7F,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAA;IAC7B;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAChC,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,OAAO,GAAI,wFAA4G,YAAY,gCAmD/I,CAAA"}
@@ -1,5 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { staticRowClassName } from "../../classNames.js";
3
+ import { Skeleton } from "../../primitive/Skeleton/index.js";
3
4
  import { treatmentFor } from "../../state.js";
4
5
  /**
5
6
  * One interactive row in a `SurfaceListCard` (or an app-owned `<ul>`): leading mark, title with its badges,
@@ -9,8 +10,11 @@ import { treatmentFor } from "../../state.js";
9
10
  * between consecutive rows - so static and interactive rows mix in one collection. It is an `<li>`: render it
10
11
  * inside a list, never loose. The actions keep their own semantics; the row itself is not a target.
11
12
  */
12
- export const ListRow = ({ title, description, leading, badges, actions, children, state = "neutral", verdict }) => {
13
+ export const ListRow = ({ title, description, leading, badges, actions, children, state = "neutral", verdict, isSkeleton = false }) => {
13
14
  const treatment = treatmentFor(state);
15
+ if (isSkeleton) {
16
+ return (_jsxs("li", { "aria-hidden": "true", className: `${staticRowClassName} starci-core-list-row`, "data-grammar-row": "true", "data-component": "ListRow", "data-tier": "composite", "data-grammar-skeleton": "true", "data-grammar-state": "neutral", "data-grammar-treatment": treatmentFor("neutral").tone, "data-grammar-leading": leading == null ? "false" : "true", "data-grammar-actions": actions == null ? "false" : "true", "data-contract": "GAP-3 PADDING-4 BOUNDARY-3 STATE-8", children: [leading == null ? null : _jsx("span", { className: "starci-core-list-row-leading", children: _jsx(Skeleton, { shape: "circle", size: "md" }) }), _jsxs("span", { className: "starci-core-list-row-copy", "data-contract": "GAP-1", children: [_jsx("span", { className: "starci-core-list-row-title", children: _jsx("span", { className: "starci-core-list-row-name", children: _jsx(Skeleton, { shape: "text" }) }) }), description == null ? null : _jsx("span", { className: "starci-core-list-row-description", children: _jsx(Skeleton, { shape: "text" }) })] }), actions == null ? null : _jsx("span", { className: "starci-core-list-row-actions", children: _jsx("span", { className: "starci-core-list-row-skeleton-action", children: _jsx(Skeleton, { shape: "rect" }) }) })] }));
17
+ }
14
18
  return (_jsxs("li", { className: `${staticRowClassName} starci-core-list-row`, "data-grammar-row": "true", "data-component": "ListRow", "data-tier": "composite", "data-grammar-state": state, "data-grammar-treatment": treatment.tone, "data-grammar-leading": leading == null ? "false" : "true", "data-grammar-actions": actions == null ? "false" : "true", ...(verdict === undefined ? {} : { "data-verdict": verdict }), "data-contract": "GAP-3 PADDING-4 BOUNDARY-3", children: [leading == null ? null : _jsx("span", { className: "starci-core-list-row-leading", children: leading }), _jsxs("span", { className: "starci-core-list-row-copy", "data-contract": "GAP-1", children: [_jsxs("span", { className: "starci-core-list-row-title", children: [_jsx("span", { className: "starci-core-list-row-name", children: title }), badges == null ? null : _jsx("span", { className: "starci-core-list-row-badges", "data-contract": "GAP-2", children: badges })] }), description == null ? null : _jsx("span", { className: "starci-core-list-row-description", "data-contract": "TONE-2 FONT-2", children: description })] }), actions == null ? null : _jsx("span", { className: "starci-core-list-row-actions", "data-contract": "GAP-2", children: actions }), children == null ? null : _jsx("div", { className: "starci-core-list-row-detail", "data-contract": "GAP-3", children: children })] }));
15
19
  };
16
20
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/composite/ListRow/index.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,EAAE,YAAY,EAA0B,MAAM,gBAAgB,CAAA;AAsBrE;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,GAAG,SAAS,EAAE,OAAO,EAAgB,EAAE,EAAE;IAC5H,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,CAAA;IACrC,OAAO,CACH,cACI,SAAS,EAAE,GAAG,kBAAkB,uBAAuB,sBACtC,MAAM,oBACR,SAAS,eACd,WAAW,wBACD,KAAK,4BACD,SAAS,CAAC,IAAI,0BAChB,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,0BAClC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,KACpD,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,mBAChD,4BAA4B,aAEzC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,eAAM,SAAS,EAAC,8BAA8B,YAAE,OAAO,GAAQ,EACzF,gBAAM,SAAS,EAAC,2BAA2B,mBAAe,OAAO,aAC7D,gBAAM,SAAS,EAAC,4BAA4B,aACxC,eAAM,SAAS,EAAC,2BAA2B,YAAE,KAAK,GAAQ,EACzD,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,eAAM,SAAS,EAAC,6BAA6B,mBAAe,OAAO,YAAE,MAAM,GAAQ,IACzG,EACN,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,eAAM,SAAS,EAAC,kCAAkC,mBAAe,eAAe,YAAE,WAAW,GAAQ,IAChI,EACN,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,eAAM,SAAS,EAAC,8BAA8B,mBAAe,OAAO,YAAE,OAAO,GAAQ,EAC9G,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAK,SAAS,EAAC,6BAA6B,mBAAe,OAAO,YAAE,QAAQ,GAAO,IAC7G,CACR,CAAA;AACL,CAAC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/composite/ListRow/index.tsx"],"names":[],"mappings":"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"}
@@ -371,6 +371,20 @@
371
371
  }
372
372
 
373
373
  /* Reduced motion removes family transforms and transitions. */
374
+ /*
375
+ * FlowGraph: the family frame (ink outline, small hard shadow) round the canvas, and the selected node in the
376
+ * ink outline with its hard shadow; the edges, tints and ring stay on the Common tokens.
377
+ */
378
+ .grammar-common-root[data-grammar-family="offset-pop"] [data-component="FlowGraph"] {
379
+ border: var(--offset-pop-outline-width) solid var(--offset-pop-ink);
380
+ box-shadow: 0.125rem 0.1875rem 0 var(--offset-pop-shadow-ink);
381
+ }
382
+
383
+ .grammar-common-root[data-grammar-family="offset-pop"] [data-component="FlowGraph"] [data-grammar-selected="true"] {
384
+ border-color: var(--offset-pop-ink);
385
+ box-shadow: 0.125rem 0.1875rem 0 var(--offset-pop-shadow-ink);
386
+ }
387
+
374
388
  @media (prefers-reduced-motion: reduce) {
375
389
  .grammar-common-root[data-grammar-family="offset-pop"] [data-component="Disclosure"] *,
376
390
  .grammar-common-root[data-grammar-family="offset-pop"] [data-component="Accordion"] *,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@starci/grammar",
3
- "version": "0.9.3",
3
+ "version": "0.9.5",
4
4
  "description": "Reusable StarCi React components, compositions, and packaged visual DNA.",
5
5
  "keywords": [
6
6
  "starci",
@@ -59,7 +59,7 @@
59
59
  "scripts": {
60
60
  "build": "node scripts/clean.mjs && tsc -p tsconfig.build.json && node scripts/copy-css.mjs && node scripts/build-stamp.mjs",
61
61
  "typecheck": "tsc -p tsconfig.build.json --noEmit && tsc -p tsconfig.stories.json",
62
- "test": "npm run build && node --test src/common/index.spec.mjs src/core/index.spec.mjs src/offset-pop/index.spec.mjs src/package-boundary.spec.mjs && vitest run --config vitest.config.ts src/shipped-geometry.spec.ts src/core/shipped-claims.spec.tsx src/common/conformance.spec.ts src/common/styles.spec.ts src/core/family.spec.tsx src/core/styles.spec.ts src/core/surface-card-family.spec.tsx src/core/scrollable-surfaces.spec.tsx src/core/primitive/Badge/index.spec.tsx src/core/primitive/Button/index.spec.tsx src/core/primitive/Divider/index.spec.tsx src/core/primitive/Region/index.spec.tsx src/core/primitive/NavLandmark/index.spec.tsx src/core/primitive/List/index.spec.tsx src/core/primitive/Heading/index.spec.tsx src/core/primitive/Icon/index.spec.tsx src/core/primitive/IconButton/index.spec.tsx src/core/primitive/IconTile/index.spec.tsx src/core/primitive/Input/index.spec.tsx src/core/primitive/Input/copyable.spec.tsx src/core/composite/ChatBubble/index.spec.tsx src/core/composite/FillViewport/index.spec.tsx src/core/primitive/IconButton/badge.spec.tsx src/core/primitive/Textarea/mentions.spec.tsx src/core/v090.spec.tsx src/core/v093.spec.tsx src/core/primitive/PressableField/index.spec.tsx src/core/primitive/Progress/index.spec.tsx src/core/primitive/Text/index.spec.tsx src/core/primitive/TextAction/index.spec.tsx src/core/primitive/Label/index.spec.tsx src/core/primitive/RankArtwork/index.spec.tsx src/core/composite/EmptyNotice/index.spec.tsx src/core/composite/ListRow/index.spec.tsx src/core/branch/Tabs/index.spec.tsx src/core/branch/Subnav/index.spec.tsx src/core/branch/Subnav/styles.spec.ts src/core/branch/Tooltip/index.spec.tsx src/core/composition/NavigationFeatureNav/index.spec.tsx src/core/composition/NavigationFeatureNav/styles.spec.ts src/core/composition/Sidebar/index.spec.tsx src/core/composition/Sidebar/styles.spec.ts src/core/composition/collapse.spec.tsx src/core/composition/WorkspaceShell/index.spec.tsx src/core/composition/ChatWorkspace/index.spec.tsx src/heritage/index.spec.tsx src/heritage/styles.spec.ts src/offset-pop/index.spec.tsx src/offset-pop/render.spec.tsx src/offset-pop/styles.spec.ts src/offset-pop/family.spec.tsx src/offset-pop/shipped-claims.spec.tsx src/offset-pop/surface-card-family.spec.tsx src/offset-pop/scrollable-surfaces.spec.tsx src/offset-pop/conformance.spec.ts src/core/branch/Accordion/index.spec.tsx src/core/branch/AlertDialog/index.spec.tsx src/core/branch/Calendar/index.spec.tsx src/core/branch/ComboBox/index.spec.tsx src/core/branch/DataTable/index.spec.tsx src/core/branch/DatePicker/index.spec.tsx src/core/branch/DateRangePicker/index.spec.tsx src/core/branch/Dialog/index.spec.tsx src/core/branch/Disclosure/index.spec.tsx src/core/branch/Drawer/index.spec.tsx src/core/branch/DropdownMenu/index.spec.tsx src/core/branch/ListBox/index.spec.tsx src/core/branch/Popover/index.spec.tsx src/core/branch/Select/index.spec.tsx src/core/branch/Toast/index.spec.tsx src/core/composite/Alert/index.spec.tsx src/core/composite/AvatarGroup/index.spec.tsx src/core/composite/Breadcrumbs/index.spec.tsx src/core/composite/ButtonGroup/index.spec.tsx src/core/composite/CheckboxGroup/index.spec.tsx src/core/composite/DescriptionList/index.spec.tsx src/core/composite/Fieldset/index.spec.tsx src/core/composite/Form/index.spec.tsx src/core/composite/Pagination/index.spec.tsx src/core/composite/RadioGroup/index.spec.tsx src/core/composite/SegmentedControl/index.spec.tsx src/core/composite/Stepper/index.spec.tsx src/core/composite/TagGroup/index.spec.tsx src/core/composite/Timeline/index.spec.tsx src/core/composition/BottomNav/index.spec.tsx src/core/composition/Footer/index.spec.tsx src/core/composition/TopBar/index.spec.tsx src/core/primitive/Avatar/index.spec.tsx src/core/primitive/Checkbox/index.spec.tsx src/core/primitive/CloseButton/index.spec.tsx src/core/primitive/DateField/index.spec.tsx src/core/primitive/Field/index.spec.tsx src/core/primitive/FileDropzone/index.spec.tsx src/core/primitive/Image/index.spec.tsx src/core/primitive/Kbd/index.spec.tsx src/core/primitive/Link/index.spec.tsx src/core/primitive/Meter/index.spec.tsx src/core/primitive/NumberField/index.spec.tsx src/core/primitive/ProgressCircle/index.spec.tsx src/core/primitive/Rating/index.spec.tsx src/core/primitive/SearchField/index.spec.tsx src/core/primitive/Skeleton/index.spec.tsx src/core/primitive/Slider/index.spec.tsx src/core/primitive/Spinner/index.spec.tsx src/core/primitive/Switch/index.spec.tsx src/core/primitive/Textarea/index.spec.tsx src/core/primitive/TimeField/index.spec.tsx src/offset-pop/components-forms.spec.ts src/offset-pop/components-navigation.spec.ts src/offset-pop/components-overlays.spec.ts src/core/branch/SurfaceCard/index.spec.tsx src/core/branch/SurfaceListCard/index.spec.tsx src/core/branch/SurfaceAccordionCard/index.spec.tsx src/core/branch/Rail/index.spec.tsx src/core/branch/MarkdownArticle/index.spec.tsx src/core/composite/VerticalScrollRegion/index.spec.tsx src/core/primitive/SectionHeader/index.spec.tsx src/core/primitive/PinnedActionBar/index.spec.tsx src/core/branch/SurfaceCard/ink.spec.ts src/core/data-component.spec.tsx src/core/OtpInput.spec.tsx src/core/field-variant.spec.tsx src/stories/catalog.spec.ts",
62
+ "test": "npm run build && node --test src/common/index.spec.mjs src/core/index.spec.mjs src/offset-pop/index.spec.mjs src/package-boundary.spec.mjs && vitest run --config vitest.config.ts src/shipped-geometry.spec.ts src/core/shipped-claims.spec.tsx src/common/conformance.spec.ts src/common/styles.spec.ts src/core/family.spec.tsx src/core/styles.spec.ts src/core/surface-card-family.spec.tsx src/core/scrollable-surfaces.spec.tsx src/core/primitive/Badge/index.spec.tsx src/core/primitive/Button/index.spec.tsx src/core/primitive/Divider/index.spec.tsx src/core/primitive/Region/index.spec.tsx src/core/primitive/NavLandmark/index.spec.tsx src/core/primitive/List/index.spec.tsx src/core/primitive/Heading/index.spec.tsx src/core/primitive/Icon/index.spec.tsx src/core/primitive/IconButton/index.spec.tsx src/core/primitive/IconTile/index.spec.tsx src/core/primitive/Input/index.spec.tsx src/core/primitive/Input/copyable.spec.tsx src/core/composite/ChatBubble/index.spec.tsx src/core/composite/FillViewport/index.spec.tsx src/core/primitive/IconButton/badge.spec.tsx src/core/primitive/Textarea/mentions.spec.tsx src/core/v090.spec.tsx src/core/v093.spec.tsx src/core/v094.spec.tsx src/core/v095.spec.tsx src/core/loading.spec.tsx src/core/branch/FlowGraph/index.spec.tsx src/core/primitive/PressableField/index.spec.tsx src/core/primitive/Progress/index.spec.tsx src/core/primitive/Text/index.spec.tsx src/core/primitive/TextAction/index.spec.tsx src/core/primitive/Label/index.spec.tsx src/core/primitive/RankArtwork/index.spec.tsx src/core/composite/EmptyNotice/index.spec.tsx src/core/composite/ListRow/index.spec.tsx src/core/branch/Tabs/index.spec.tsx src/core/branch/Subnav/index.spec.tsx src/core/branch/Subnav/styles.spec.ts src/core/branch/Tooltip/index.spec.tsx src/core/composition/NavigationFeatureNav/index.spec.tsx src/core/composition/NavigationFeatureNav/styles.spec.ts src/core/composition/Sidebar/index.spec.tsx src/core/composition/Sidebar/styles.spec.ts src/core/composition/collapse.spec.tsx src/core/composition/WorkspaceShell/index.spec.tsx src/core/composition/ChatWorkspace/index.spec.tsx src/heritage/index.spec.tsx src/heritage/styles.spec.ts src/offset-pop/index.spec.tsx src/offset-pop/render.spec.tsx src/offset-pop/styles.spec.ts src/offset-pop/family.spec.tsx src/offset-pop/shipped-claims.spec.tsx src/offset-pop/surface-card-family.spec.tsx src/offset-pop/scrollable-surfaces.spec.tsx src/offset-pop/conformance.spec.ts src/core/branch/Accordion/index.spec.tsx src/core/branch/AlertDialog/index.spec.tsx src/core/branch/Calendar/index.spec.tsx src/core/branch/ComboBox/index.spec.tsx src/core/branch/DataTable/index.spec.tsx src/core/branch/DatePicker/index.spec.tsx src/core/branch/DateRangePicker/index.spec.tsx src/core/branch/Dialog/index.spec.tsx src/core/branch/Disclosure/index.spec.tsx src/core/branch/Drawer/index.spec.tsx src/core/branch/DropdownMenu/index.spec.tsx src/core/branch/ListBox/index.spec.tsx src/core/branch/Popover/index.spec.tsx src/core/branch/Select/index.spec.tsx src/core/branch/Toast/index.spec.tsx src/core/composite/Alert/index.spec.tsx src/core/composite/AvatarGroup/index.spec.tsx src/core/composite/Breadcrumbs/index.spec.tsx src/core/composite/ButtonGroup/index.spec.tsx src/core/composite/CheckboxGroup/index.spec.tsx src/core/composite/DescriptionList/index.spec.tsx src/core/composite/Fieldset/index.spec.tsx src/core/composite/Form/index.spec.tsx src/core/composite/Pagination/index.spec.tsx src/core/composite/RadioGroup/index.spec.tsx src/core/composite/SegmentedControl/index.spec.tsx src/core/composite/Stepper/index.spec.tsx src/core/composite/TagGroup/index.spec.tsx src/core/composite/Timeline/index.spec.tsx src/core/composition/BottomNav/index.spec.tsx src/core/composition/Footer/index.spec.tsx src/core/composition/TopBar/index.spec.tsx src/core/primitive/Avatar/index.spec.tsx src/core/primitive/Checkbox/index.spec.tsx src/core/primitive/CloseButton/index.spec.tsx src/core/primitive/DateField/index.spec.tsx src/core/primitive/Field/index.spec.tsx src/core/primitive/FileDropzone/index.spec.tsx src/core/primitive/Image/index.spec.tsx src/core/primitive/Kbd/index.spec.tsx src/core/primitive/Link/index.spec.tsx src/core/primitive/Meter/index.spec.tsx src/core/primitive/NumberField/index.spec.tsx src/core/primitive/ProgressCircle/index.spec.tsx src/core/primitive/Rating/index.spec.tsx src/core/primitive/SearchField/index.spec.tsx src/core/primitive/Skeleton/index.spec.tsx src/core/primitive/Slider/index.spec.tsx src/core/primitive/Spinner/index.spec.tsx src/core/primitive/Switch/index.spec.tsx src/core/primitive/Textarea/index.spec.tsx src/core/primitive/TimeField/index.spec.tsx src/offset-pop/components-forms.spec.ts src/offset-pop/components-navigation.spec.ts src/offset-pop/components-overlays.spec.ts src/core/branch/SurfaceCard/index.spec.tsx src/core/branch/SurfaceListCard/index.spec.tsx src/core/branch/SurfaceAccordionCard/index.spec.tsx src/core/branch/Rail/index.spec.tsx src/core/branch/MarkdownArticle/index.spec.tsx src/core/composite/VerticalScrollRegion/index.spec.tsx src/core/primitive/SectionHeader/index.spec.tsx src/core/primitive/PinnedActionBar/index.spec.tsx src/core/branch/SurfaceCard/ink.spec.ts src/core/data-component.spec.tsx src/core/OtpInput.spec.tsx src/core/field-variant.spec.tsx src/stories/catalog.spec.ts",
63
63
  "test:a11y": "vitest run --config vitest.a11y.config.ts",
64
64
  "pack:check": "npm run build && node --test src/package-boundary.spec.mjs",
65
65
  "prepack": "npm run typecheck && npm test",
@@ -71,7 +71,8 @@
71
71
  },
72
72
  "peerDependencies": {
73
73
  "react": ">=18",
74
- "@heroui/react": ">=3.2.0"
74
+ "@heroui/react": ">=3.2.0",
75
+ "@xyflow/react": "^12.11.6"
75
76
  },
76
77
  "devDependencies": {
77
78
  "@types/react": "^19.0.0",
@@ -94,7 +95,8 @@
94
95
  "react-dom": "^19.0.0",
95
96
  "@internationalized/date": "^3.12.4",
96
97
  "vite": "^8.3.0",
97
- "@types/node": "^22.0.0"
98
+ "@types/node": "^22.0.0",
99
+ "@xyflow/react": "12.11.6"
98
100
  },
99
101
  "license": "MIT",
100
102
  "publishConfig": {