@particle-academy/fancy-flow 0.40.2 → 0.40.4
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/{chunk-5UCWY7G3.js → chunk-WOO4B7M5.js} +37 -6
- package/dist/chunk-WOO4B7M5.js.map +1 -0
- package/dist/index.cjs +34 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +2 -2
- package/dist/screens.cjs +34 -3
- package/dist/screens.cjs.map +1 -1
- package/dist/screens.js +2 -2
- package/dist/styles.css +3 -1
- package/dist/styles.css.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-5UCWY7G3.js.map +0 -1
package/dist/screens.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { FlowViewer } from './chunk-
|
|
2
|
-
export { FlowViewer } from './chunk-
|
|
1
|
+
import { FlowViewer } from './chunk-WOO4B7M5.js';
|
|
2
|
+
export { FlowViewer } from './chunk-WOO4B7M5.js';
|
|
3
3
|
import './chunk-UX65ML3J.js';
|
|
4
4
|
import './chunk-OWENS2H5.js';
|
|
5
5
|
import './chunk-UEOE6B52.js';
|
package/dist/styles.css
CHANGED
|
@@ -613,7 +613,9 @@ svg.react-flow__connectionline {
|
|
|
613
613
|
--ff-shadow-lg: 0 10px 20px -6px rgba(0,0,0,.12), 0 4px 8px -6px rgba(0,0,0,.08);
|
|
614
614
|
}
|
|
615
615
|
.dark :is(.ff-editor, .ff-canvas, .ff-palette, .ff-panel, .ff-run-feed, .ff-prompt),
|
|
616
|
-
[data-theme=dark] :is(.ff-editor, .ff-canvas, .ff-palette, .ff-panel, .ff-run-feed, .ff-prompt)
|
|
616
|
+
[data-theme=dark] :is(.ff-editor, .ff-canvas, .ff-palette, .ff-panel, .ff-run-feed, .ff-prompt),
|
|
617
|
+
.dark:is(.ff-editor, .ff-canvas, .ff-palette, .ff-panel, .ff-run-feed, .ff-prompt),
|
|
618
|
+
[data-theme=dark]:is(.ff-editor, .ff-canvas, .ff-palette, .ff-panel, .ff-run-feed, .ff-prompt) {
|
|
617
619
|
--ff-surface: #1c1c22;
|
|
618
620
|
--ff-surface-2: #141419;
|
|
619
621
|
--ff-surface-3: #27272a;
|
package/dist/styles.css.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../node_modules/@xyflow/react/dist/style.css","../src/styles.css"],"sourcesContent":["/* this gets exported as style.css and can be used for the default theming */\n/* these are the necessary styles for React/Svelte Flow, they get used by base.css and style.css */\n.react-flow {\n direction: ltr;\n\n --xy-edge-stroke-default: #b1b1b7;\n --xy-edge-stroke-width-default: 1;\n --xy-edge-stroke-selected-default: #555;\n\n --xy-connectionline-stroke-default: #b1b1b7;\n --xy-connectionline-stroke-width-default: 1;\n\n --xy-attribution-background-color-default: rgba(255, 255, 255, 0.5);\n\n --xy-minimap-background-color-default: #fff;\n --xy-minimap-mask-background-color-default: rgba(240, 240, 240, 0.6);\n --xy-minimap-mask-stroke-color-default: transparent;\n --xy-minimap-mask-stroke-width-default: 1;\n --xy-minimap-node-background-color-default: #e2e2e2;\n --xy-minimap-node-stroke-color-default: transparent;\n --xy-minimap-node-stroke-width-default: 2;\n\n --xy-background-color-default: transparent;\n --xy-background-pattern-dots-color-default: #91919a;\n --xy-background-pattern-lines-color-default: #eee;\n --xy-background-pattern-cross-color-default: #e2e2e2;\n background-color: var(--xy-background-color, var(--xy-background-color-default));\n --xy-node-color-default: inherit;\n --xy-node-border-default: 1px solid #1a192b;\n --xy-node-background-color-default: #fff;\n --xy-node-group-background-color-default: rgba(240, 240, 240, 0.25);\n --xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(0, 0, 0, 0.08);\n --xy-node-boxshadow-selected-default: 0 0 0 0.5px #1a192b;\n --xy-node-border-radius-default: 3px;\n\n --xy-handle-background-color-default: #1a192b;\n --xy-handle-border-color-default: #fff;\n\n --xy-selection-background-color-default: rgba(0, 89, 220, 0.08);\n --xy-selection-border-default: 1px dotted rgba(0, 89, 220, 0.8);\n\n --xy-controls-button-background-color-default: #fefefe;\n --xy-controls-button-background-color-hover-default: #f4f4f4;\n --xy-controls-button-color-default: inherit;\n --xy-controls-button-color-hover-default: inherit;\n --xy-controls-button-border-color-default: #eee;\n --xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, 0.08);\n\n --xy-edge-label-background-color-default: #ffffff;\n --xy-edge-label-color-default: inherit;\n --xy-resize-background-color-default: #3367d9;\n}\n.react-flow.dark {\n --xy-edge-stroke-default: #3e3e3e;\n --xy-edge-stroke-width-default: 1;\n --xy-edge-stroke-selected-default: #727272;\n\n --xy-connectionline-stroke-default: #b1b1b7;\n --xy-connectionline-stroke-width-default: 1;\n\n --xy-attribution-background-color-default: rgba(150, 150, 150, 0.25);\n\n --xy-minimap-background-color-default: #141414;\n --xy-minimap-mask-background-color-default: rgba(60, 60, 60, 0.6);\n --xy-minimap-mask-stroke-color-default: transparent;\n --xy-minimap-mask-stroke-width-default: 1;\n --xy-minimap-node-background-color-default: #2b2b2b;\n --xy-minimap-node-stroke-color-default: transparent;\n --xy-minimap-node-stroke-width-default: 2;\n\n --xy-background-color-default: #141414;\n --xy-background-pattern-dots-color-default: #777;\n --xy-background-pattern-lines-color-default: #777;\n --xy-background-pattern-cross-color-default: #777;\n --xy-node-color-default: #f8f8f8;\n --xy-node-border-default: 1px solid #3c3c3c;\n --xy-node-background-color-default: #1e1e1e;\n --xy-node-group-background-color-default: rgba(240, 240, 240, 0.25);\n --xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(255, 255, 255, 0.08);\n --xy-node-boxshadow-selected-default: 0 0 0 0.5px #999;\n\n --xy-handle-background-color-default: #bebebe;\n --xy-handle-border-color-default: #1e1e1e;\n\n --xy-selection-background-color-default: rgba(200, 200, 220, 0.08);\n --xy-selection-border-default: 1px dotted rgba(200, 200, 220, 0.8);\n\n --xy-controls-button-background-color-default: #2b2b2b;\n --xy-controls-button-background-color-hover-default: #3e3e3e;\n --xy-controls-button-color-default: #f8f8f8;\n --xy-controls-button-color-hover-default: #fff;\n --xy-controls-button-border-color-default: #5b5b5b;\n --xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, 0.08);\n\n --xy-edge-label-background-color-default: #141414;\n --xy-edge-label-color-default: #f8f8f8;\n}\n.react-flow__background {\n background-color: var(--xy-background-color-props, var(--xy-background-color, var(--xy-background-color-default)));\n pointer-events: none;\n z-index: -1;\n}\n.react-flow__container {\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n}\n.react-flow__pane {\n z-index: 1;\n touch-action: none;\n}\n.react-flow__pane.draggable {\n cursor: grab;\n }\n.react-flow__pane.dragging {\n cursor: grabbing;\n }\n.react-flow__pane.selection {\n cursor: pointer;\n }\n.react-flow__viewport {\n transform-origin: 0 0;\n z-index: 2;\n pointer-events: none;\n}\n.react-flow__renderer {\n z-index: 4;\n}\n.react-flow__selection {\n z-index: 6;\n}\n.react-flow__nodesselection-rect:focus,\n.react-flow__nodesselection-rect:focus-visible {\n outline: none;\n}\n.react-flow__edge-path {\n stroke: var(--xy-edge-stroke, var(--xy-edge-stroke-default));\n stroke-width: var(--xy-edge-stroke-width, var(--xy-edge-stroke-width-default));\n fill: none;\n}\n.react-flow__connection-path {\n stroke: var(--xy-connectionline-stroke, var(--xy-connectionline-stroke-default));\n stroke-width: var(--xy-connectionline-stroke-width, var(--xy-connectionline-stroke-width-default));\n fill: none;\n}\n.react-flow .react-flow__edges {\n position: absolute;\n}\n.react-flow .react-flow__edges svg {\n overflow: visible;\n position: absolute;\n pointer-events: none;\n }\n.react-flow__edge {\n pointer-events: visibleStroke;\n}\n.react-flow__edge.selectable {\n cursor: pointer;\n }\n.react-flow__edge.animated path {\n stroke-dasharray: 5;\n animation: dashdraw 0.5s linear infinite;\n }\n.react-flow__edge.animated path.react-flow__edge-interaction {\n stroke-dasharray: none;\n animation: none;\n }\n.react-flow__edge.inactive {\n pointer-events: none;\n }\n.react-flow__edge.selected,\n .react-flow__edge:focus,\n .react-flow__edge:focus-visible {\n outline: none;\n }\n.react-flow__edge.selected .react-flow__edge-path,\n .react-flow__edge.selectable:focus .react-flow__edge-path,\n .react-flow__edge.selectable:focus-visible .react-flow__edge-path {\n stroke: var(--xy-edge-stroke-selected, var(--xy-edge-stroke-selected-default));\n }\n.react-flow__edge-textwrapper {\n pointer-events: all;\n }\n.react-flow__edge .react-flow__edge-text {\n pointer-events: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n }\n/* Arrowhead marker styles - use CSS custom properties as default */\n.react-flow__arrowhead polyline {\n stroke: var(--xy-edge-stroke, var(--xy-edge-stroke-default));\n}\n.react-flow__arrowhead polyline.arrowclosed {\n fill: var(--xy-edge-stroke, var(--xy-edge-stroke-default));\n}\n.react-flow__connection {\n pointer-events: none;\n}\n.react-flow__connection .animated {\n stroke-dasharray: 5;\n animation: dashdraw 0.5s linear infinite;\n }\nsvg.react-flow__connectionline {\n z-index: 1001;\n overflow: visible;\n position: absolute;\n}\n.react-flow__nodes {\n pointer-events: none;\n transform-origin: 0 0;\n}\n.react-flow__node {\n position: absolute;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n pointer-events: all;\n transform-origin: 0 0;\n box-sizing: border-box;\n cursor: default;\n}\n.react-flow__node.selectable {\n cursor: pointer;\n }\n.react-flow__node.draggable {\n cursor: grab;\n pointer-events: all;\n }\n.react-flow__node.draggable.dragging {\n cursor: grabbing;\n }\n.react-flow__nodesselection {\n z-index: 3;\n transform-origin: left top;\n pointer-events: none;\n}\n.react-flow__nodesselection-rect {\n position: absolute;\n pointer-events: all;\n cursor: grab;\n }\n.react-flow__handle {\n position: absolute;\n pointer-events: none;\n min-width: 5px;\n min-height: 5px;\n width: 6px;\n height: 6px;\n background-color: var(--xy-handle-background-color, var(--xy-handle-background-color-default));\n border: 1px solid var(--xy-handle-border-color, var(--xy-handle-border-color-default));\n border-radius: 100%;\n}\n.react-flow__handle.connectingfrom {\n pointer-events: all;\n }\n.react-flow__handle.connectionindicator {\n pointer-events: all;\n cursor: crosshair;\n }\n.react-flow__handle-bottom {\n top: auto;\n left: 50%;\n bottom: 0;\n transform: translate(-50%, 50%);\n }\n.react-flow__handle-top {\n top: 0;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n.react-flow__handle-left {\n top: 50%;\n left: 0;\n transform: translate(-50%, -50%);\n }\n.react-flow__handle-right {\n top: 50%;\n right: 0;\n transform: translate(50%, -50%);\n }\n.react-flow__edgeupdater {\n cursor: move;\n pointer-events: all;\n}\n.react-flow__pane.selection .react-flow__panel {\n pointer-events: none;\n}\n.react-flow__panel {\n position: absolute;\n z-index: 5;\n margin: 15px;\n}\n.react-flow__panel.top {\n top: 0;\n }\n.react-flow__panel.bottom {\n bottom: 0;\n }\n.react-flow__panel.top.center, .react-flow__panel.bottom.center {\n left: 50%;\n transform: translateX(-15px) translateX(-50%);\n }\n.react-flow__panel.left {\n left: 0;\n }\n.react-flow__panel.right {\n right: 0;\n }\n.react-flow__panel.left.center, .react-flow__panel.right.center {\n top: 50%;\n transform: translateY(-15px) translateY(-50%);\n }\n.react-flow__attribution {\n font-size: 10px;\n background: var(--xy-attribution-background-color, var(--xy-attribution-background-color-default));\n padding: 2px 3px;\n margin: 0;\n}\n.react-flow__attribution a {\n text-decoration: none;\n color: #999;\n }\n@keyframes dashdraw {\n from {\n stroke-dashoffset: 10;\n }\n}\n.react-flow__edgelabel-renderer {\n position: absolute;\n width: 100%;\n height: 100%;\n pointer-events: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n left: 0;\n top: 0;\n}\n.react-flow__viewport-portal {\n position: absolute;\n width: 100%;\n height: 100%;\n left: 0;\n top: 0;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n.react-flow__minimap {\n background: var(\n --xy-minimap-background-color-props,\n var(--xy-minimap-background-color, var(--xy-minimap-background-color-default))\n );\n}\n.react-flow__minimap-svg {\n display: block;\n }\n.react-flow__minimap-mask {\n fill: var(\n --xy-minimap-mask-background-color-props,\n var(--xy-minimap-mask-background-color, var(--xy-minimap-mask-background-color-default))\n );\n stroke: var(\n --xy-minimap-mask-stroke-color-props,\n var(--xy-minimap-mask-stroke-color, var(--xy-minimap-mask-stroke-color-default))\n );\n stroke-width: var(\n --xy-minimap-mask-stroke-width-props,\n var(--xy-minimap-mask-stroke-width, var(--xy-minimap-mask-stroke-width-default))\n );\n }\n.react-flow__minimap-node {\n fill: var(\n --xy-minimap-node-background-color-props,\n var(--xy-minimap-node-background-color, var(--xy-minimap-node-background-color-default))\n );\n stroke: var(\n --xy-minimap-node-stroke-color-props,\n var(--xy-minimap-node-stroke-color, var(--xy-minimap-node-stroke-color-default))\n );\n stroke-width: var(\n --xy-minimap-node-stroke-width-props,\n var(--xy-minimap-node-stroke-width, var(--xy-minimap-node-stroke-width-default))\n );\n }\n.react-flow__background-pattern.dots {\n fill: var(\n --xy-background-pattern-color-props,\n var(--xy-background-pattern-color, var(--xy-background-pattern-dots-color-default))\n );\n }\n.react-flow__background-pattern.lines {\n stroke: var(\n --xy-background-pattern-color-props,\n var(--xy-background-pattern-color, var(--xy-background-pattern-lines-color-default))\n );\n }\n.react-flow__background-pattern.cross {\n stroke: var(\n --xy-background-pattern-color-props,\n var(--xy-background-pattern-color, var(--xy-background-pattern-cross-color-default))\n );\n }\n.react-flow__controls {\n display: flex;\n flex-direction: column;\n box-shadow: var(--xy-controls-box-shadow, var(--xy-controls-box-shadow-default));\n}\n.react-flow__controls.horizontal {\n flex-direction: row;\n }\n.react-flow__controls-button {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 26px;\n width: 26px;\n padding: 4px;\n border: none;\n background: var(--xy-controls-button-background-color, var(--xy-controls-button-background-color-default));\n border-bottom: 1px solid\n var(\n --xy-controls-button-border-color-props,\n var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default))\n );\n color: var(\n --xy-controls-button-color-props,\n var(--xy-controls-button-color, var(--xy-controls-button-color-default))\n );\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n }\n.react-flow__controls-button svg {\n width: 100%;\n max-width: 12px;\n max-height: 12px;\n fill: currentColor;\n }\n.react-flow__edge.updating .react-flow__edge-path {\n stroke: #777;\n }\n.react-flow__edge-text {\n font-size: 10px;\n }\n.react-flow__node.selectable:focus,\n .react-flow__node.selectable:focus-visible {\n outline: none;\n }\n.react-flow__node-input,\n.react-flow__node-default,\n.react-flow__node-output,\n.react-flow__node-group {\n padding: 10px;\n border-radius: var(--xy-node-border-radius, var(--xy-node-border-radius-default));\n width: 150px;\n font-size: 12px;\n color: var(--xy-node-color, var(--xy-node-color-default));\n text-align: center;\n border: var(--xy-node-border, var(--xy-node-border-default));\n background-color: var(--xy-node-background-color, var(--xy-node-background-color-default));\n}\n.react-flow__node-input.selectable:hover, .react-flow__node-default.selectable:hover, .react-flow__node-output.selectable:hover, .react-flow__node-group.selectable:hover {\n box-shadow: var(--xy-node-boxshadow-hover, var(--xy-node-boxshadow-hover-default));\n }\n.react-flow__node-input.selectable.selected,\n .react-flow__node-input.selectable:focus,\n .react-flow__node-input.selectable:focus-visible,\n .react-flow__node-default.selectable.selected,\n .react-flow__node-default.selectable:focus,\n .react-flow__node-default.selectable:focus-visible,\n .react-flow__node-output.selectable.selected,\n .react-flow__node-output.selectable:focus,\n .react-flow__node-output.selectable:focus-visible,\n .react-flow__node-group.selectable.selected,\n .react-flow__node-group.selectable:focus,\n .react-flow__node-group.selectable:focus-visible {\n box-shadow: var(--xy-node-boxshadow-selected, var(--xy-node-boxshadow-selected-default));\n }\n.react-flow__node-group {\n background-color: var(--xy-node-group-background-color, var(--xy-node-group-background-color-default));\n}\n.react-flow__nodesselection-rect,\n.react-flow__selection {\n background: var(--xy-selection-background-color, var(--xy-selection-background-color-default));\n border: var(--xy-selection-border, var(--xy-selection-border-default));\n}\n.react-flow__nodesselection-rect:focus,\n .react-flow__nodesselection-rect:focus-visible,\n .react-flow__selection:focus,\n .react-flow__selection:focus-visible {\n outline: none;\n }\n.react-flow__controls-button:hover {\n background: var(\n --xy-controls-button-background-color-hover-props,\n var(--xy-controls-button-background-color-hover, var(--xy-controls-button-background-color-hover-default))\n );\n color: var(\n --xy-controls-button-color-hover-props,\n var(--xy-controls-button-color-hover, var(--xy-controls-button-color-hover-default))\n );\n }\n.react-flow__controls-button:disabled {\n pointer-events: none;\n }\n.react-flow__controls-button:disabled svg {\n fill-opacity: 0.4;\n }\n.react-flow__controls-button:last-child {\n border-bottom: none;\n }\n.react-flow__controls.horizontal .react-flow__controls-button {\n border-bottom: none;\n border-right: 1px solid\n var(\n --xy-controls-button-border-color-props,\n var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default))\n );\n }\n.react-flow__controls.horizontal .react-flow__controls-button:last-child {\n border-right: none;\n }\n.react-flow__resize-control {\n position: absolute;\n}\n.react-flow__resize-control.left,\n.react-flow__resize-control.right {\n cursor: ew-resize;\n}\n.react-flow__resize-control.top,\n.react-flow__resize-control.bottom {\n cursor: ns-resize;\n}\n.react-flow__resize-control.top.left,\n.react-flow__resize-control.bottom.right {\n cursor: nwse-resize;\n}\n.react-flow__resize-control.bottom.left,\n.react-flow__resize-control.top.right {\n cursor: nesw-resize;\n}\n/* handle styles */\n.react-flow__resize-control.handle {\n width: 5px;\n height: 5px;\n border: 1px solid #fff;\n border-radius: 1px;\n background-color: var(--xy-resize-background-color, var(--xy-resize-background-color-default));\n translate: -50% -50%;\n}\n.react-flow__resize-control.handle.left {\n left: 0;\n top: 50%;\n}\n.react-flow__resize-control.handle.right {\n left: 100%;\n top: 50%;\n}\n.react-flow__resize-control.handle.top {\n left: 50%;\n top: 0;\n}\n.react-flow__resize-control.handle.bottom {\n left: 50%;\n top: 100%;\n}\n.react-flow__resize-control.handle.top.left {\n left: 0;\n}\n.react-flow__resize-control.handle.bottom.left {\n left: 0;\n}\n.react-flow__resize-control.handle.top.right {\n left: 100%;\n}\n.react-flow__resize-control.handle.bottom.right {\n left: 100%;\n}\n/* line styles */\n.react-flow__resize-control.line {\n border-color: var(--xy-resize-background-color, var(--xy-resize-background-color-default));\n border-width: 0;\n border-style: solid;\n}\n.react-flow__resize-control.line.left,\n.react-flow__resize-control.line.right {\n width: 1px;\n transform: translate(-50%, 0);\n top: 0;\n height: 100%;\n}\n.react-flow__resize-control.line.left {\n left: 0;\n border-left-width: 1px;\n}\n.react-flow__resize-control.line.right {\n left: 100%;\n border-right-width: 1px;\n}\n.react-flow__resize-control.line.top,\n.react-flow__resize-control.line.bottom {\n height: 1px;\n transform: translate(0, -50%);\n left: 0;\n width: 100%;\n}\n.react-flow__resize-control.line.top {\n top: 0;\n border-top-width: 1px;\n}\n.react-flow__resize-control.line.bottom {\n border-bottom-width: 1px;\n top: 100%;\n}\n.react-flow__edge-textbg {\n fill: var(--xy-edge-label-background-color, var(--xy-edge-label-background-color-default));\n}\n.react-flow__edge-text {\n fill: var(--xy-edge-label-color, var(--xy-edge-label-color-default));\n}\n","/* @particle-academy/fancy-flow styles.\n Themeable: every surface, text, border, and accent resolves from a `--ff-*`\n custom-property layer defined on the component roots below. Override any of\n them on `.ff-editor` (or any ancestor, e.g. `:root`) to retheme the editor\n without fighting specificity — e.g.\n .ff-editor { --ff-accent: #ec4899; --ff-radius: 16px; }\n Dark mode honors both a `.dark` / `[data-theme=\"dark\"]` ancestor (Tailwind\n class strategy, what `colorMode` stamps) and the OS `prefers-color-scheme`,\n with a `.ff-canvas--light` opt-out for the OS path. */\n\n/* React Flow base layout CSS — bundled in so consumers import only this one\n stylesheet. Without it `.react-flow__node` isn't absolutely positioned and the\n pane/viewport transforms don't work, so the canvas renders blank. */\n@import \"@xyflow/react/dist/style.css\";\n\n/* ─── Theme tokens — LIGHT (defaults) ──────────────────────────────────────\n Defined on every component root so both composed (`<FlowEditor>`) and\n standalone (`<NodePalette>`, `<NodeConfigPanel>`, `<FlowRunFeed>`, `<FlowCanvas>`)\n usage inherits them. Nodes inherit from `.ff-canvas`. */\n.ff-editor, .ff-canvas, .ff-palette, .ff-panel, .ff-run-feed, .ff-prompt {\n --ff-font: ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif;\n --ff-mono: ui-monospace, \"SF Mono\", \"JetBrains Mono\", Menlo, Consolas, monospace;\n\n --ff-surface: #ffffff; /* raised: cards, nodes, inputs */\n --ff-surface-2: #f4f4f5; /* recessed: palette, panel, run feed, toolbar */\n --ff-surface-3: #fafafa; /* nested: repeater rows, hover */\n --ff-canvas-bg: #ffffff;\n --ff-canvas-dot: rgba(9, 9, 11, 0.09);\n --ff-node-bg: #ffffff;\n\n --ff-fg: #18181b;\n --ff-fg-muted: #52525b;\n --ff-fg-subtle: #71717a;\n --ff-fg-faint: #a1a1aa;\n\n --ff-border: #e4e4e7;\n --ff-border-strong: #d4d4d8;\n --ff-edge: #9ca3af;\n\n --ff-accent: #8b5cf6; /* selection, focus, brand */\n --ff-accent-soft: rgba(139, 92, 246, 0.12);\n --ff-accent-ring: rgba(139, 92, 246, 0.22);\n\n --ff-run: #10b981;\n --ff-run-hover: #059669;\n --ff-danger: #ef4444;\n --ff-warn: #d97706;\n --ff-warn-soft: rgba(245, 158, 11, 0.15);\n\n --ff-feed-node: #7c3aed; /* node id + status lines in the run feed */\n --ff-feed-ok: #059669;\n\n --ff-radius: 12px; /* shells, cards */\n --ff-radius-md: 8px; /* buttons, nodes */\n --ff-radius-sm: 6px; /* inputs, chips */\n\n --ff-shadow-sm: 0 1px 2px rgba(0,0,0,.05);\n --ff-shadow-md: 0 1px 2px rgba(0,0,0,.04), 0 4px 12px rgba(0,0,0,.06);\n --ff-shadow-lg: 0 10px 20px -6px rgba(0,0,0,.12), 0 4px 8px -6px rgba(0,0,0,.08);\n}\n\n/* ─── Theme tokens — DARK ──────────────────────────────────────────────── */\n.dark :is(.ff-editor, .ff-canvas, .ff-palette, .ff-panel, .ff-run-feed, .ff-prompt),\n[data-theme=\"dark\"] :is(.ff-editor, .ff-canvas, .ff-palette, .ff-panel, .ff-run-feed, .ff-prompt) {\n --ff-surface: #1c1c22;\n --ff-surface-2: #141419;\n --ff-surface-3: #27272a;\n --ff-canvas-bg: #0a0a0c;\n --ff-canvas-dot: rgba(255, 255, 255, 0.10);\n --ff-node-bg: #1c1c22;\n\n --ff-fg: #fafafa;\n --ff-fg-muted: #d4d4d8;\n --ff-fg-subtle: #a1a1aa;\n --ff-fg-faint: #71717a;\n\n --ff-border: #3f3f46;\n --ff-border-strong: #52525b;\n --ff-edge: #71717a;\n\n --ff-accent: #a78bfa;\n --ff-accent-soft: rgba(167, 139, 250, 0.16);\n --ff-accent-ring: rgba(167, 139, 250, 0.30);\n\n --ff-warn: #fb923c;\n --ff-warn-soft: rgba(251, 146, 60, 0.16);\n --ff-feed-node: #c4b5fd;\n --ff-feed-ok: #34d399;\n\n --ff-shadow-md: 0 1px 2px rgba(0,0,0,.4), 0 6px 16px rgba(0,0,0,.5);\n --ff-shadow-lg: 0 12px 28px -8px rgba(0,0,0,.6), 0 4px 10px -6px rgba(0,0,0,.5);\n}\n@media (prefers-color-scheme: dark) {\n :is(.ff-editor, .ff-canvas, .ff-palette, .ff-panel, .ff-run-feed, .ff-prompt):not(.ff-canvas--light):not(.ff-canvas--light *) {\n --ff-surface: #1c1c22;\n --ff-surface-2: #141419;\n --ff-surface-3: #27272a;\n --ff-canvas-bg: #0a0a0c;\n --ff-canvas-dot: rgba(255, 255, 255, 0.10);\n --ff-node-bg: #1c1c22;\n --ff-fg: #fafafa;\n --ff-fg-muted: #d4d4d8;\n --ff-fg-subtle: #a1a1aa;\n --ff-fg-faint: #71717a;\n --ff-border: #3f3f46;\n --ff-border-strong: #52525b;\n --ff-edge: #71717a;\n --ff-accent: #a78bfa;\n --ff-accent-soft: rgba(167, 139, 250, 0.16);\n --ff-accent-ring: rgba(167, 139, 250, 0.30);\n --ff-warn: #fb923c;\n --ff-warn-soft: rgba(251, 146, 60, 0.16);\n --ff-feed-node: #c4b5fd;\n --ff-feed-ok: #34d399;\n --ff-shadow-md: 0 1px 2px rgba(0,0,0,.4), 0 6px 16px rgba(0,0,0,.5);\n --ff-shadow-lg: 0 12px 28px -8px rgba(0,0,0,.6), 0 4px 10px -6px rgba(0,0,0,.5);\n }\n}\n\n/* ─── Canvas (standalone <FlowCanvas>) ─────────────────────────────────── */\n.ff-canvas {\n display: flex;\n flex-direction: column;\n border: 1px solid var(--ff-border);\n border-radius: var(--ff-radius);\n overflow: hidden;\n background: var(--ff-canvas-bg);\n}\n.ff-canvas__toolbar {\n border-bottom: 1px solid var(--ff-border);\n padding: 8px 10px;\n display: flex; gap: 6px; align-items: center; flex-wrap: wrap;\n background: var(--ff-surface-2);\n color: var(--ff-fg-muted);\n font-family: var(--ff-font);\n font-size: 12px;\n}\n.ff-canvas__surface { flex: 1; min-height: 0; position: relative; background: var(--ff-canvas-bg); }\n\n/* xyflow background grid color via theme token */\n.react-flow__background pattern circle { fill: var(--ff-canvas-dot); }\n\n/* ─── Nodes ────────────────────────────────────────────────────────────── */\n.ff-node {\n min-width: 200px;\n max-width: 280px;\n background: var(--ff-node-bg);\n border: 1px solid var(--ff-border-strong);\n border-radius: var(--ff-radius-md);\n font-family: var(--ff-font);\n font-size: 12px;\n color: var(--ff-fg);\n box-shadow: var(--ff-shadow-md);\n transition: box-shadow 200ms, border-color 200ms;\n overflow: hidden;\n}\n.ff-node:hover { border-color: var(--ff-border); box-shadow: var(--ff-shadow-lg); }\n.ff-node--selected {\n border-color: var(--ff-accent);\n box-shadow: 0 0 0 3px var(--ff-accent-ring), var(--ff-shadow-lg);\n}\n\n.ff-node__header {\n display: flex; align-items: center; gap: 8px;\n padding: 7px 10px;\n color: #fff;\n font-weight: 600;\n}\n.ff-node__icon { font-size: 14px; line-height: 1; }\n.ff-node__tag {\n font-size: 10px;\n letter-spacing: 0.06em;\n font-weight: 700;\n opacity: 0.9;\n text-transform: uppercase;\n}\n.ff-node__label { flex: 1; font-size: 13px; }\n.ff-node__desc { margin: 0; padding: 8px 10px 0; font-size: 11px; color: var(--ff-fg-subtle); }\n.ff-node__body { padding: 8px 10px 10px; }\n.ff-node__status-text { margin: 0; padding: 4px 10px 8px; font-size: 11px; color: var(--ff-fg-subtle); }\n.ff-node--status-error .ff-node__status-text { color: var(--ff-danger); }\n\n.ff-node--status-running { animation: ff-pulse 1.4s ease-in-out infinite; }\n@keyframes ff-pulse {\n 0%, 100% { box-shadow: 0 0 0 0 var(--ff-accent-ring), var(--ff-shadow-md); }\n 50% { box-shadow: 0 0 0 6px transparent, var(--ff-shadow-md); }\n}\n\n/* Status dot in the header */\n.ff-node__dot { width: 8px; height: 8px; border-radius: 50%; background: rgba(255,255,255,0.5); }\n.ff-node__dot--queued { background: #fbbf24; }\n.ff-node__dot--running { background: #fde68a; box-shadow: 0 0 6px #fde68a; }\n.ff-node__dot--done { background: #34d399; }\n.ff-node__dot--error { background: #f87171; }\n\n/* Subgraph metadata row */\n.ff-subgraph__meta { display: flex; justify-content: space-between; font-size: 11px; color: var(--ff-fg-subtle); }\n\n/* Node summary inside the card */\n.ff-node__summary { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 2px; }\n.ff-node__summary li { display: flex; gap: 6px; font-size: 11px; }\n.ff-node__summary-key { color: var(--ff-fg-subtle); }\n.ff-node__summary-value { font-family: var(--ff-mono); }\n.ff-node__summary-more { color: var(--ff-fg-subtle); font-size: 10px; }\n.ff-node__body-empty { font-size: 11px; color: var(--ff-fg-faint); font-style: italic; }\n\n/* Reactive output (G12) — a node's live computed value. */\n.ff-node__output {\n margin: 0; padding: 4px 10px 8px;\n font-size: 11px; font-family: var(--ff-mono);\n color: var(--ff-feed-ok);\n overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\n}\n\n/* xyflow wraps every custom node in a `.react-flow__node-{type}` div with\n default chrome. Our kit ships its own via `.ff-node`, so strip xyflow's. */\n.react-flow__node-trigger,\n.react-flow__node-action,\n.react-flow__node-decision,\n.react-flow__node-output,\n.react-flow__node-note,\n.react-flow__node-subgraph {\n background: transparent !important;\n border: none !important;\n padding: 0 !important;\n box-shadow: none !important;\n border-radius: 0 !important;\n}\n\n/* xyflow handle */\n.react-flow__handle {\n width: 10px; height: 10px;\n background: var(--ff-surface);\n border: 2px solid var(--ff-border-strong);\n border-radius: 50%;\n}\n.react-flow__handle:hover { background: var(--ff-accent); border-color: var(--ff-accent); }\n\n/* xyflow edges */\n.react-flow__edge-path { stroke: var(--ff-edge); }\n.react-flow__connection-path { stroke: var(--ff-accent); stroke-width: 2; }\n\n/* xyflow controls — themed via tokens (bump specificity + !important to beat\n xyflow's own stylesheet). */\n.react-flow__controls { background: transparent; box-shadow: none; }\n.react-flow__controls .react-flow__controls-button {\n background: var(--ff-surface) !important;\n border-color: var(--ff-border) !important;\n border-bottom-color: var(--ff-border) !important;\n color: var(--ff-fg) !important;\n border-radius: var(--ff-radius-sm);\n}\n.react-flow__controls .react-flow__controls-button:hover { background: var(--ff-surface-3) !important; }\n.react-flow__controls .react-flow__controls-button svg,\n.react-flow__controls .react-flow__controls-button svg path,\n.react-flow__controls .react-flow__controls-button svg polyline,\n.react-flow__controls .react-flow__controls-button svg polygon {\n fill: currentColor !important;\n stroke: currentColor !important;\n}\n\n/* NodeResizer chrome */\n.react-flow__resize-control.line { border-color: var(--ff-accent-ring); }\n.react-flow__resize-control.handle { width: 8px; height: 8px; border-radius: 2px; border: 1px solid var(--ff-surface); background: var(--ff-accent); }\n\n/* ─── Swimlanes (G6) ───────────────────────────────────────────────────── */\n.ff-lane {\n width: 100%; height: 100%; box-sizing: border-box;\n background: var(--ff-accent-soft);\n border: 1px dashed var(--ff-border-strong);\n border-radius: var(--ff-radius-md);\n overflow: hidden;\n}\n.ff-lane--selected { border-style: solid; border-color: var(--ff-accent); }\n.ff-lane__header {\n display: flex; align-items: center;\n height: 22px; padding: 0 8px;\n color: #fff; font-size: 11px; font-weight: 600;\n font-family: var(--ff-font);\n border-radius: 7px 7px 0 0;\n}\n.ff-lane__title { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n\n/* ─── Notes (annotation) — sticky-note, visual-only ────────────────────── */\n.ff-note {\n width: 100%; height: 100%; box-sizing: border-box;\n padding: 8px 10px;\n border: 1px solid transparent;\n border-radius: var(--ff-radius-md);\n font-family: var(--ff-font);\n box-shadow: var(--ff-shadow-sm);\n overflow: hidden;\n display: flex; flex-direction: column; gap: 4px;\n}\n.ff-note--selected { box-shadow: 0 0 0 2px currentColor; }\n.ff-note__title { font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; }\n.ff-note__body {\n flex: 1; min-height: 0;\n font-size: 12px; line-height: 1.5;\n color: var(--ff-fg-muted);\n white-space: pre-wrap; overflow: auto;\n}\n.ff-note__placeholder { color: var(--ff-fg-faint); font-style: italic; }\n.ff-note__input {\n flex: 1; min-height: 0; width: 100%;\n resize: none; border: none; outline: none; background: transparent;\n font: inherit; font-size: 12px; line-height: 1.5; color: inherit;\n}\n\n/* ─── Run controls ─────────────────────────────────────────────────────── */\n.ff-run-controls { display: flex; gap: 6px; }\n.ff-run-controls__btn {\n border: 1px solid var(--ff-border); border-radius: var(--ff-radius-sm);\n padding: 6px 12px;\n font: inherit; font-size: 12px; font-weight: 500;\n cursor: pointer;\n background: var(--ff-surface); color: var(--ff-fg);\n transition: background 150ms, border-color 150ms;\n}\n.ff-run-controls__btn:hover:not(:disabled) { background: var(--ff-surface-3); }\n.ff-run-controls__btn--run { background: var(--ff-run); border-color: var(--ff-run-hover); color: #fff; }\n.ff-run-controls__btn--run:hover:not(:disabled) { background: var(--ff-run-hover); }\n.ff-run-controls__btn--cancel { background: var(--ff-danger); border-color: var(--ff-danger); color: #fff; }\n.ff-run-controls__btn:disabled { opacity: 0.5; cursor: default; }\n\n/* ─── Run feed (header + scrolling body) ───────────────────────────────── */\n.ff-run-feed {\n display: flex; flex-direction: column;\n font-family: var(--ff-mono);\n background: var(--ff-surface-2);\n color: var(--ff-fg);\n border: 1px solid var(--ff-border);\n border-radius: var(--ff-radius-md);\n overflow: hidden;\n max-height: 260px;\n}\n.ff-run-feed__header {\n display: flex; align-items: center; gap: 8px;\n padding: 7px 12px;\n border-bottom: 1px solid var(--ff-border);\n font-family: var(--ff-font);\n font-size: 11.5px; font-weight: 600; color: var(--ff-fg-muted);\n flex-shrink: 0;\n}\n.ff-run-feed__title { color: var(--ff-accent); font-family: var(--ff-mono); }\n.ff-run-feed__badge {\n font-family: var(--ff-font); font-size: 10px; font-weight: 600;\n color: var(--ff-warn); background: var(--ff-warn-soft);\n padding: 1px 8px; border-radius: 999px;\n}\n.ff-run-feed__count { margin-left: auto; font-family: var(--ff-mono); font-size: 10.5px; color: var(--ff-fg-faint); }\n.ff-run-feed__body { flex: 1; min-height: 0; overflow: auto; padding: 8px 12px; font-size: 11px; line-height: 1.7; }\n.ff-run-feed__empty { color: var(--ff-fg-subtle); margin: 0; }\n.ff-run-feed__row { display: flex; gap: 9px; padding: 1px 0; white-space: pre-wrap; word-break: break-word; }\n.ff-run-feed__time { color: var(--ff-fg-faint); flex-shrink: 0; }\n.ff-run-feed__node { color: var(--ff-feed-node); flex-shrink: 0; }\n.ff-run-feed__text { flex: 1; min-width: 0; }\n.ff-run-feed__row--error .ff-run-feed__text { color: var(--ff-danger); }\n.ff-run-feed__row--warn .ff-run-feed__text { color: var(--ff-warn); }\n.ff-run-feed__row--status .ff-run-feed__text { color: var(--ff-feed-node); }\n\n/* ─── FlowEditor — unified shell ───────────────────────────────────────── */\n.ff-editor {\n display: grid;\n grid-template-columns: 216px 1fr 300px;\n gap: 0;\n font-family: var(--ff-font);\n background: var(--ff-surface);\n border: 1px solid var(--ff-border);\n border-radius: var(--ff-radius);\n overflow: hidden;\n box-shadow: var(--ff-shadow-md);\n}\n.ff-editor__main { display: flex; flex-direction: column; min-width: 0; min-height: 0; position: relative; background: var(--ff-canvas-bg); }\n/* The canvas fills the middle column seamlessly — the shell owns the frame. */\n.ff-editor__main .ff-canvas { flex: 1; min-height: 0; border: none; border-radius: 0; }\n.ff-editor__empty {\n position: absolute; inset: 0; display: grid; place-items: center;\n padding: 24px; text-align: center; pointer-events: none;\n}\n.ff-editor__empty > * { pointer-events: auto; }\n\n.ff-editor__palette { border: none; border-right: 1px solid var(--ff-border); border-radius: 0; background: var(--ff-surface-2); }\n.ff-editor__panel-wrap {\n display: flex; flex-direction: column; min-height: 0;\n border-left: 1px solid var(--ff-border);\n background: var(--ff-surface-2);\n}\n.ff-editor__panel { flex: 1; min-height: 0; border: none; border-radius: 0; background: transparent; }\n.ff-editor__panel-footer { flex-shrink: 0; display: flex; flex-wrap: wrap; gap: 6px; padding: 0 12px 12px; }\n.ff-editor__feed { flex-shrink: 0; height: 168px; max-height: none; border: none; border-top: 1px solid var(--ff-border); border-radius: 0; }\n\n/* Node right-click menu — fixed so the canvas' overflow can't clip it. */\n.ff-editor__ctx {\n position: fixed; z-index: 50; min-width: 150px; padding: 4px;\n display: flex; flex-direction: column;\n background: var(--ff-surface); border: 1px solid var(--ff-border-strong); border-radius: var(--ff-radius-md);\n box-shadow: var(--ff-shadow-lg);\n}\n.ff-editor__ctx-item {\n border: 0; background: transparent; cursor: pointer; text-align: left;\n padding: 6px 10px; border-radius: 5px; font-size: 12.5px; color: inherit;\n}\n.ff-editor__ctx-item:hover { background: var(--ff-surface-3); }\n.ff-editor__ctx-item--danger { color: var(--ff-danger); }\n\n.ff-editor__sep { width: 1px; align-self: stretch; background: var(--ff-border); margin: 0 3px; }\n.ff-editor__btn {\n display: inline-flex; align-items: center; gap: 6px;\n border: 1px solid var(--ff-border); background: var(--ff-surface); cursor: pointer;\n border-radius: var(--ff-radius-sm); padding: 5px 11px;\n color: var(--ff-fg-muted); font-size: 12px; font-weight: 500;\n transition: background 150ms, color 150ms;\n}\n.ff-editor__btn:hover:not(:disabled) { background: var(--ff-surface-3); color: var(--ff-fg); }\n.ff-editor__btn:disabled { opacity: 0.45; cursor: not-allowed; }\n.ff-editor__count { margin-left: auto; font-family: var(--ff-mono); font-size: 11px; color: var(--ff-fg-faint); }\n\n/* ─── NodePalette ──────────────────────────────────────────────────────── */\n.ff-palette {\n display: flex; flex-direction: column;\n background: var(--ff-surface-2);\n border: 1px solid var(--ff-border);\n border-radius: var(--ff-radius);\n overflow: hidden;\n font-size: 13px;\n color: var(--ff-fg);\n}\n.ff-palette__search { padding: 10px; border-bottom: 1px solid var(--ff-border); }\n.ff-palette__search-input {\n width: 100%; padding: 7px 10px;\n border: 1px solid var(--ff-border); border-radius: var(--ff-radius-sm);\n background: var(--ff-surface); color: inherit; font: inherit; font-size: 12.5px;\n outline: none; transition: border-color 150ms, box-shadow 150ms;\n}\n.ff-palette__search-input:focus { border-color: var(--ff-accent); box-shadow: 0 0 0 3px var(--ff-accent-soft); }\n.ff-palette__list { flex: 1; overflow: auto; padding: 8px; }\n.ff-palette__group { padding: 2px 0; }\n.ff-palette__group-label {\n font-size: 9.5px; letter-spacing: 0.07em; text-transform: uppercase;\n color: var(--ff-fg-faint); font-weight: 700;\n padding: 11px 8px 6px;\n}\n.ff-palette__row {\n width: 100%;\n display: flex; align-items: flex-start; gap: 9px;\n padding: 8px; border: 1px solid transparent; background: transparent; cursor: grab;\n border-radius: var(--ff-radius-md);\n text-align: left; color: inherit; font: inherit;\n transition: background 130ms, border-color 130ms;\n}\n.ff-palette__row:hover { background: var(--ff-surface-3); border-color: var(--ff-border); }\n.ff-palette__row:active { cursor: grabbing; }\n.ff-palette__row-dot {\n flex-shrink: 0; width: 24px; height: 24px;\n border-radius: 7px;\n display: inline-flex; align-items: center; justify-content: center;\n color: white; font-size: 14px;\n}\n.ff-palette__row-text { display: flex; flex-direction: column; min-width: 0; }\n.ff-palette__row-label { font-size: 12.5px; font-weight: 600; line-height: 1.2; }\n.ff-palette__row-desc {\n font-size: 10.5px; color: var(--ff-fg-faint); line-height: 1.35; margin-top: 2px;\n overflow: hidden; text-overflow: ellipsis;\n display: -webkit-box; -webkit-line-clamp: 1; -webkit-box-orient: vertical;\n}\n\n/* ─── NodeConfigPanel ──────────────────────────────────────────────────── */\n.ff-panel {\n background: var(--ff-surface-2);\n border: 1px solid var(--ff-border);\n border-radius: var(--ff-radius);\n padding: 14px;\n display: flex; flex-direction: column; gap: 12px;\n overflow: auto;\n font-size: 13px;\n color: var(--ff-fg);\n}\n.ff-panel--empty { align-items: center; justify-content: center; }\n.ff-panel__empty { font-size: 12px; color: var(--ff-fg-faint); text-align: center; }\n.ff-panel__header { display: flex; align-items: center; gap: 10px; }\n.ff-panel__head-icon {\n flex-shrink: 0; width: 28px; height: 28px; border-radius: var(--ff-radius-sm);\n display: grid; place-items: center; color: #fff; font-size: 15px;\n}\n.ff-panel__head-text { display: flex; flex-direction: column; min-width: 0; gap: 1px; }\n.ff-panel__head-kind { font-size: 9.5px; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; color: var(--ff-fg-faint); }\n.ff-panel__head-name { font-size: 13.5px; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n/* legacy tag (kept for back-compat with hand-composed panels) */\n.ff-panel__kind-tag {\n align-self: flex-start;\n font-size: 10px; letter-spacing: 0.06em; text-transform: uppercase;\n background: var(--ff-accent-soft); color: var(--ff-accent);\n padding: 2px 8px; border-radius: 999px;\n}\n.ff-panel__kind-desc { margin: 0; font-size: 12px; color: var(--ff-fg-subtle); line-height: 1.5; }\n.ff-panel__divider { border: 0; border-top: 1px solid var(--ff-border); margin: 2px 0; }\n\n.ff-panel__actions { margin-top: auto; padding-top: 12px; }\n.ff-panel__delete {\n width: 100%; padding: 8px 10px;\n font-size: 13px; font-weight: 500;\n color: var(--ff-danger); background: transparent;\n border: 1px solid var(--ff-danger); border-radius: var(--ff-radius-sm);\n cursor: pointer; opacity: 0.85; transition: opacity 150ms, background 150ms;\n}\n.ff-panel__delete:hover { opacity: 1; background: rgba(239, 68, 68, 0.08); }\n.ff-panel__field { display: flex; flex-direction: column; gap: 5px; }\n.ff-panel__label { font-size: 12px; font-weight: 600; color: var(--ff-fg-muted); }\n.ff-panel__hint { font-size: 11px; color: var(--ff-fg-faint); margin: 0; line-height: 1.4; }\n.ff-panel__required { color: var(--ff-danger); }\n.ff-panel__input {\n width: 100%; padding: 7px 10px;\n border: 1px solid var(--ff-border); border-radius: var(--ff-radius-sm);\n background: var(--ff-surface); color: inherit; font: inherit; font-size: 12.5px;\n box-sizing: border-box; outline: none;\n transition: border-color 150ms, box-shadow 150ms;\n}\n.ff-panel__input:focus { border-color: var(--ff-accent); box-shadow: 0 0 0 3px var(--ff-accent-soft); }\n.ff-panel__input--textarea { font-family: inherit; resize: vertical; line-height: 1.5; }\n.ff-panel__input--expression,\n.ff-panel__input--json { font-family: var(--ff-mono); font-size: 11.5px; }\n.ff-panel__switch { display: inline-flex; align-items: center; cursor: pointer; }\n.ff-panel__switch input { display: none; }\n.ff-panel__switch-slider { width: 32px; height: 18px; background: var(--ff-border-strong); border-radius: 999px; position: relative; transition: background 200ms; }\n.ff-panel__switch-slider::before { content: \"\"; position: absolute; left: 2px; top: 2px; width: 14px; height: 14px; background: #fff; border-radius: 50%; transition: left 200ms; }\n.ff-panel__switch input:checked + .ff-panel__switch-slider { background: var(--ff-accent); }\n.ff-panel__switch input:checked + .ff-panel__switch-slider::before { left: 16px; }\n.ff-panel__issues { margin-top: 4px; }\n.ff-panel__issue { font-size: 11px; color: var(--ff-warn); margin: 2px 0; }\n\n/* Repeater / key-value config fields */\n.ff-repeater { display: flex; flex-direction: column; gap: 8px; }\n.ff-repeater__empty { font-size: 11px; color: var(--ff-fg-subtle); margin: 0; font-style: italic; }\n.ff-repeater__row {\n display: flex; flex-direction: column; gap: 6px;\n border: 1px solid var(--ff-border); border-radius: var(--ff-radius-sm); padding: 10px; background: var(--ff-surface);\n}\n.ff-repeater__row-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; }\n.ff-repeater__row-title { font-size: 11px; font-weight: 600; color: var(--ff-fg-muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.ff-repeater__row-actions { display: flex; gap: 2px; flex-shrink: 0; }\n.ff-repeater__btn { border: 1px solid transparent; background: transparent; cursor: pointer; border-radius: 4px; font-size: 11px; line-height: 1; padding: 3px 5px; color: var(--ff-fg-subtle); }\n.ff-repeater__btn:hover:not(:disabled) { background: var(--ff-surface-3); color: var(--ff-fg); }\n.ff-repeater__btn:disabled { opacity: .35; cursor: not-allowed; }\n.ff-repeater__btn--danger:hover:not(:disabled) { background: rgba(239,68,68,0.12); color: var(--ff-danger); }\n.ff-repeater__cell { display: flex; flex-direction: column; gap: 3px; }\n.ff-panel__label--sub { font-size: 11px; color: var(--ff-fg-subtle); font-weight: 400; }\n.ff-repeater__add {\n align-self: flex-start; border: 1px dashed var(--ff-border-strong); background: transparent;\n border-radius: var(--ff-radius-sm); padding: 6px 11px; font-size: 11px; color: var(--ff-fg-muted); cursor: pointer;\n}\n.ff-repeater__add:hover:not(:disabled) { border-color: var(--ff-accent); color: var(--ff-accent); }\n.ff-repeater__add:disabled { opacity: .4; cursor: not-allowed; }\n\n.ff-keyvalue { display: flex; flex-direction: column; gap: 6px; }\n.ff-keyvalue__head,\n.ff-keyvalue__row { display: grid; grid-template-columns: 1fr 1fr auto; gap: 6px; align-items: center; }\n.ff-keyvalue__head { font-size: 10px; text-transform: uppercase; letter-spacing: .04em; color: var(--ff-fg-faint); }\n.ff-panel__hint--missing { color: var(--ff-warn); font-style: italic; }\n\n/* Edge label editor */\n.ff-editor__edge-label { padding: 6px; min-width: 200px; }\n.ff-editor__edge-label .ff-panel__input { width: 100%; }\n\n/* Rich user input preview */\n.ff-rich-preview { display: flex; flex-direction: column; gap: 6px; }\n.ff-rich-preview__frame { border: 1px solid var(--ff-border); border-radius: var(--ff-radius-sm); overflow: hidden; max-height: 180px; background: var(--ff-surface); }\n.ff-rich-preview__unavailable { border: 1px dashed var(--ff-border-strong); border-radius: var(--ff-radius-sm); padding: 10px; font-size: 11px; color: var(--ff-fg-subtle); line-height: 1.5; }\n.ff-rich-preview__unavailable code { font-size: 10px; background: var(--ff-surface-3); padding: 1px 4px; border-radius: 3px; }\n.ff-rich-preview__title { font-size: 11px; font-weight: 600; color: var(--ff-fg-muted); }\n\n/* Resizable nodes (G11) */\n.ff-node--resizable { max-width: none; width: 100%; height: 100%; }\n\n/* ─── In-editor human-input modal ──────────────────────────────────────── */\n.ff-prompt-overlay {\n position: absolute; inset: 0; z-index: 20;\n display: grid; place-items: center; padding: 16px;\n background: rgba(9, 9, 11, 0.5);\n backdrop-filter: blur(2px);\n}\n.ff-prompt {\n width: 100%; max-width: 420px; max-height: 100%; overflow: auto;\n padding: 18px;\n border-radius: var(--ff-radius);\n background: var(--ff-surface);\n border: 1px solid var(--ff-border);\n box-shadow: var(--ff-shadow-lg);\n font-family: var(--ff-font);\n color: var(--ff-fg);\n}\n.ff-prompt__title { font-size: 14px; font-weight: 600; color: var(--ff-fg); margin-bottom: 10px; }\n.ff-prompt__desc { font-size: 13px; line-height: 1.5; color: var(--ff-fg-subtle); margin-bottom: 12px; }\n.ff-prompt__fields { display: flex; flex-direction: column; gap: 12px; margin-bottom: 16px; }\n.ff-prompt__field { display: flex; flex-direction: column; gap: 5px; }\n.ff-prompt__label { font-size: 12px; font-weight: 500; color: var(--ff-fg-muted); }\n.ff-prompt__req { color: var(--ff-danger); }\n.ff-prompt__input {\n width: 100%; box-sizing: border-box; padding: 8px 10px;\n font-size: 13px; border-radius: var(--ff-radius-sm);\n border: 1px solid var(--ff-border); background: var(--ff-surface); color: var(--ff-fg);\n outline: none; transition: border-color 150ms, box-shadow 150ms;\n}\n.ff-prompt__input:focus { border-color: var(--ff-accent); box-shadow: 0 0 0 3px var(--ff-accent-soft); }\n.ff-prompt__switch { width: 16px; height: 16px; }\n.ff-prompt__actions { display: flex; justify-content: flex-end; gap: 8px; }\n.ff-prompt__btn { padding: 8px 14px; font-size: 13px; font-weight: 500; border-radius: var(--ff-radius-sm); border: 1px solid transparent; cursor: pointer; }\n.ff-prompt__btn--ghost { background: transparent; border-color: var(--ff-border-strong); color: var(--ff-fg-muted); }\n.ff-prompt__btn--ghost:hover { background: var(--ff-surface-3); }\n.ff-prompt__btn--primary { background: var(--ff-accent); color: #fff; }\n.ff-prompt__btn--primary:disabled { opacity: 0.5; cursor: not-allowed; }\n.ff-prompt__btn--danger { background: transparent; border-color: var(--ff-danger); color: var(--ff-danger); }\n\n/* Alignment guide lines (G15) */\n.ff-helper-line { background: var(--ff-accent); }\n\n/* ─── Responsive ───────────────────────────────────────────────────────── */\n@media (max-width: 1024px) {\n .ff-editor { grid-template-columns: 190px 1fr; }\n .ff-editor__panel-wrap { display: none; }\n}\n@media (max-width: 720px) {\n .ff-editor { grid-template-columns: 1fr; }\n .ff-editor__palette { display: none; }\n}\n\n/* ─── FlowViewer ─────────────────────────────────────────────────────────────\n Read-only rendering of a workflow. Every colour here reads from the same\n --ff-* token layer the editor uses, so a consumer that themed the editor gets\n a themed viewer for free and does not restyle the same surface twice.\n ──────────────────────────────────────────────────────────────────────────── */\n.ff-viewer { color: var(--ff-fg, inherit); }\n\n.ff-viewer--empty {\n display: grid;\n place-items: center;\n padding: 2rem 1rem;\n border: 1px dashed var(--ff-border, #3f3f46);\n border-radius: var(--ff-radius, 12px);\n}\n.ff-viewer__empty { font-size: 13px; color: var(--ff-fg-muted, #a1a1aa); }\n\n.ff-viewer__list { display: grid; gap: 6px; margin: 0; padding: 0; list-style: none; }\n\n.ff-viewer__row {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n width: 100%;\n padding: 10px 12px;\n text-align: left;\n background: var(--ff-surface, transparent);\n border: 1px solid var(--ff-border, #3f3f46);\n border-radius: var(--ff-radius, 10px);\n}\n.ff-viewer__row--interactive { cursor: pointer; transition: border-color .15s ease, background-color .15s ease; }\n.ff-viewer__row--interactive:hover { border-color: var(--ff-accent, #8b5cf6); }\n.ff-viewer__row--selected { border-color: var(--ff-accent, #8b5cf6); }\n\n.ff-viewer__index {\n flex: none;\n display: grid;\n place-items: center;\n width: 22px; height: 22px;\n border-radius: 999px;\n font-size: 11px; font-weight: 700; font-variant-numeric: tabular-nums;\n color: #fff;\n}\n\n/* min-width:0 is what lets the long-title truncation below actually engage —\n a flex child defaults to min-width:auto, i.e. its min-content width. */\n.ff-viewer__body { display: grid; gap: 2px; min-width: 0; flex: 1 1 auto; }\n.ff-viewer__title { font-size: 13px; font-weight: 600; line-height: 1.3; }\n.ff-viewer__desc {\n font-size: 12px; line-height: 1.4;\n color: var(--ff-fg-muted, #a1a1aa);\n overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2;\n}\n\n.ff-viewer__status {\n flex: none;\n padding: 2px 8px;\n border-radius: 999px;\n font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: .04em;\n}\n.ff-viewer__status--ok { background: #10b98122; color: #34d399; }\n.ff-viewer__status--running { background: #3b82f622; color: #60a5fa; }\n.ff-viewer__status--failed { background: #ef444422; color: #f87171; }\n.ff-viewer__status--skipped { background: #71717a22; color: #a1a1aa; }\n.ff-viewer__status--pending { background: #a855f722; color: #c084fc; }\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../node_modules/@xyflow/react/dist/style.css","../src/styles.css"],"sourcesContent":["/* this gets exported as style.css and can be used for the default theming */\n/* these are the necessary styles for React/Svelte Flow, they get used by base.css and style.css */\n.react-flow {\n direction: ltr;\n\n --xy-edge-stroke-default: #b1b1b7;\n --xy-edge-stroke-width-default: 1;\n --xy-edge-stroke-selected-default: #555;\n\n --xy-connectionline-stroke-default: #b1b1b7;\n --xy-connectionline-stroke-width-default: 1;\n\n --xy-attribution-background-color-default: rgba(255, 255, 255, 0.5);\n\n --xy-minimap-background-color-default: #fff;\n --xy-minimap-mask-background-color-default: rgba(240, 240, 240, 0.6);\n --xy-minimap-mask-stroke-color-default: transparent;\n --xy-minimap-mask-stroke-width-default: 1;\n --xy-minimap-node-background-color-default: #e2e2e2;\n --xy-minimap-node-stroke-color-default: transparent;\n --xy-minimap-node-stroke-width-default: 2;\n\n --xy-background-color-default: transparent;\n --xy-background-pattern-dots-color-default: #91919a;\n --xy-background-pattern-lines-color-default: #eee;\n --xy-background-pattern-cross-color-default: #e2e2e2;\n background-color: var(--xy-background-color, var(--xy-background-color-default));\n --xy-node-color-default: inherit;\n --xy-node-border-default: 1px solid #1a192b;\n --xy-node-background-color-default: #fff;\n --xy-node-group-background-color-default: rgba(240, 240, 240, 0.25);\n --xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(0, 0, 0, 0.08);\n --xy-node-boxshadow-selected-default: 0 0 0 0.5px #1a192b;\n --xy-node-border-radius-default: 3px;\n\n --xy-handle-background-color-default: #1a192b;\n --xy-handle-border-color-default: #fff;\n\n --xy-selection-background-color-default: rgba(0, 89, 220, 0.08);\n --xy-selection-border-default: 1px dotted rgba(0, 89, 220, 0.8);\n\n --xy-controls-button-background-color-default: #fefefe;\n --xy-controls-button-background-color-hover-default: #f4f4f4;\n --xy-controls-button-color-default: inherit;\n --xy-controls-button-color-hover-default: inherit;\n --xy-controls-button-border-color-default: #eee;\n --xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, 0.08);\n\n --xy-edge-label-background-color-default: #ffffff;\n --xy-edge-label-color-default: inherit;\n --xy-resize-background-color-default: #3367d9;\n}\n.react-flow.dark {\n --xy-edge-stroke-default: #3e3e3e;\n --xy-edge-stroke-width-default: 1;\n --xy-edge-stroke-selected-default: #727272;\n\n --xy-connectionline-stroke-default: #b1b1b7;\n --xy-connectionline-stroke-width-default: 1;\n\n --xy-attribution-background-color-default: rgba(150, 150, 150, 0.25);\n\n --xy-minimap-background-color-default: #141414;\n --xy-minimap-mask-background-color-default: rgba(60, 60, 60, 0.6);\n --xy-minimap-mask-stroke-color-default: transparent;\n --xy-minimap-mask-stroke-width-default: 1;\n --xy-minimap-node-background-color-default: #2b2b2b;\n --xy-minimap-node-stroke-color-default: transparent;\n --xy-minimap-node-stroke-width-default: 2;\n\n --xy-background-color-default: #141414;\n --xy-background-pattern-dots-color-default: #777;\n --xy-background-pattern-lines-color-default: #777;\n --xy-background-pattern-cross-color-default: #777;\n --xy-node-color-default: #f8f8f8;\n --xy-node-border-default: 1px solid #3c3c3c;\n --xy-node-background-color-default: #1e1e1e;\n --xy-node-group-background-color-default: rgba(240, 240, 240, 0.25);\n --xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(255, 255, 255, 0.08);\n --xy-node-boxshadow-selected-default: 0 0 0 0.5px #999;\n\n --xy-handle-background-color-default: #bebebe;\n --xy-handle-border-color-default: #1e1e1e;\n\n --xy-selection-background-color-default: rgba(200, 200, 220, 0.08);\n --xy-selection-border-default: 1px dotted rgba(200, 200, 220, 0.8);\n\n --xy-controls-button-background-color-default: #2b2b2b;\n --xy-controls-button-background-color-hover-default: #3e3e3e;\n --xy-controls-button-color-default: #f8f8f8;\n --xy-controls-button-color-hover-default: #fff;\n --xy-controls-button-border-color-default: #5b5b5b;\n --xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, 0.08);\n\n --xy-edge-label-background-color-default: #141414;\n --xy-edge-label-color-default: #f8f8f8;\n}\n.react-flow__background {\n background-color: var(--xy-background-color-props, var(--xy-background-color, var(--xy-background-color-default)));\n pointer-events: none;\n z-index: -1;\n}\n.react-flow__container {\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n}\n.react-flow__pane {\n z-index: 1;\n touch-action: none;\n}\n.react-flow__pane.draggable {\n cursor: grab;\n }\n.react-flow__pane.dragging {\n cursor: grabbing;\n }\n.react-flow__pane.selection {\n cursor: pointer;\n }\n.react-flow__viewport {\n transform-origin: 0 0;\n z-index: 2;\n pointer-events: none;\n}\n.react-flow__renderer {\n z-index: 4;\n}\n.react-flow__selection {\n z-index: 6;\n}\n.react-flow__nodesselection-rect:focus,\n.react-flow__nodesselection-rect:focus-visible {\n outline: none;\n}\n.react-flow__edge-path {\n stroke: var(--xy-edge-stroke, var(--xy-edge-stroke-default));\n stroke-width: var(--xy-edge-stroke-width, var(--xy-edge-stroke-width-default));\n fill: none;\n}\n.react-flow__connection-path {\n stroke: var(--xy-connectionline-stroke, var(--xy-connectionline-stroke-default));\n stroke-width: var(--xy-connectionline-stroke-width, var(--xy-connectionline-stroke-width-default));\n fill: none;\n}\n.react-flow .react-flow__edges {\n position: absolute;\n}\n.react-flow .react-flow__edges svg {\n overflow: visible;\n position: absolute;\n pointer-events: none;\n }\n.react-flow__edge {\n pointer-events: visibleStroke;\n}\n.react-flow__edge.selectable {\n cursor: pointer;\n }\n.react-flow__edge.animated path {\n stroke-dasharray: 5;\n animation: dashdraw 0.5s linear infinite;\n }\n.react-flow__edge.animated path.react-flow__edge-interaction {\n stroke-dasharray: none;\n animation: none;\n }\n.react-flow__edge.inactive {\n pointer-events: none;\n }\n.react-flow__edge.selected,\n .react-flow__edge:focus,\n .react-flow__edge:focus-visible {\n outline: none;\n }\n.react-flow__edge.selected .react-flow__edge-path,\n .react-flow__edge.selectable:focus .react-flow__edge-path,\n .react-flow__edge.selectable:focus-visible .react-flow__edge-path {\n stroke: var(--xy-edge-stroke-selected, var(--xy-edge-stroke-selected-default));\n }\n.react-flow__edge-textwrapper {\n pointer-events: all;\n }\n.react-flow__edge .react-flow__edge-text {\n pointer-events: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n }\n/* Arrowhead marker styles - use CSS custom properties as default */\n.react-flow__arrowhead polyline {\n stroke: var(--xy-edge-stroke, var(--xy-edge-stroke-default));\n}\n.react-flow__arrowhead polyline.arrowclosed {\n fill: var(--xy-edge-stroke, var(--xy-edge-stroke-default));\n}\n.react-flow__connection {\n pointer-events: none;\n}\n.react-flow__connection .animated {\n stroke-dasharray: 5;\n animation: dashdraw 0.5s linear infinite;\n }\nsvg.react-flow__connectionline {\n z-index: 1001;\n overflow: visible;\n position: absolute;\n}\n.react-flow__nodes {\n pointer-events: none;\n transform-origin: 0 0;\n}\n.react-flow__node {\n position: absolute;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n pointer-events: all;\n transform-origin: 0 0;\n box-sizing: border-box;\n cursor: default;\n}\n.react-flow__node.selectable {\n cursor: pointer;\n }\n.react-flow__node.draggable {\n cursor: grab;\n pointer-events: all;\n }\n.react-flow__node.draggable.dragging {\n cursor: grabbing;\n }\n.react-flow__nodesselection {\n z-index: 3;\n transform-origin: left top;\n pointer-events: none;\n}\n.react-flow__nodesselection-rect {\n position: absolute;\n pointer-events: all;\n cursor: grab;\n }\n.react-flow__handle {\n position: absolute;\n pointer-events: none;\n min-width: 5px;\n min-height: 5px;\n width: 6px;\n height: 6px;\n background-color: var(--xy-handle-background-color, var(--xy-handle-background-color-default));\n border: 1px solid var(--xy-handle-border-color, var(--xy-handle-border-color-default));\n border-radius: 100%;\n}\n.react-flow__handle.connectingfrom {\n pointer-events: all;\n }\n.react-flow__handle.connectionindicator {\n pointer-events: all;\n cursor: crosshair;\n }\n.react-flow__handle-bottom {\n top: auto;\n left: 50%;\n bottom: 0;\n transform: translate(-50%, 50%);\n }\n.react-flow__handle-top {\n top: 0;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n.react-flow__handle-left {\n top: 50%;\n left: 0;\n transform: translate(-50%, -50%);\n }\n.react-flow__handle-right {\n top: 50%;\n right: 0;\n transform: translate(50%, -50%);\n }\n.react-flow__edgeupdater {\n cursor: move;\n pointer-events: all;\n}\n.react-flow__pane.selection .react-flow__panel {\n pointer-events: none;\n}\n.react-flow__panel {\n position: absolute;\n z-index: 5;\n margin: 15px;\n}\n.react-flow__panel.top {\n top: 0;\n }\n.react-flow__panel.bottom {\n bottom: 0;\n }\n.react-flow__panel.top.center, .react-flow__panel.bottom.center {\n left: 50%;\n transform: translateX(-15px) translateX(-50%);\n }\n.react-flow__panel.left {\n left: 0;\n }\n.react-flow__panel.right {\n right: 0;\n }\n.react-flow__panel.left.center, .react-flow__panel.right.center {\n top: 50%;\n transform: translateY(-15px) translateY(-50%);\n }\n.react-flow__attribution {\n font-size: 10px;\n background: var(--xy-attribution-background-color, var(--xy-attribution-background-color-default));\n padding: 2px 3px;\n margin: 0;\n}\n.react-flow__attribution a {\n text-decoration: none;\n color: #999;\n }\n@keyframes dashdraw {\n from {\n stroke-dashoffset: 10;\n }\n}\n.react-flow__edgelabel-renderer {\n position: absolute;\n width: 100%;\n height: 100%;\n pointer-events: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n left: 0;\n top: 0;\n}\n.react-flow__viewport-portal {\n position: absolute;\n width: 100%;\n height: 100%;\n left: 0;\n top: 0;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n.react-flow__minimap {\n background: var(\n --xy-minimap-background-color-props,\n var(--xy-minimap-background-color, var(--xy-minimap-background-color-default))\n );\n}\n.react-flow__minimap-svg {\n display: block;\n }\n.react-flow__minimap-mask {\n fill: var(\n --xy-minimap-mask-background-color-props,\n var(--xy-minimap-mask-background-color, var(--xy-minimap-mask-background-color-default))\n );\n stroke: var(\n --xy-minimap-mask-stroke-color-props,\n var(--xy-minimap-mask-stroke-color, var(--xy-minimap-mask-stroke-color-default))\n );\n stroke-width: var(\n --xy-minimap-mask-stroke-width-props,\n var(--xy-minimap-mask-stroke-width, var(--xy-minimap-mask-stroke-width-default))\n );\n }\n.react-flow__minimap-node {\n fill: var(\n --xy-minimap-node-background-color-props,\n var(--xy-minimap-node-background-color, var(--xy-minimap-node-background-color-default))\n );\n stroke: var(\n --xy-minimap-node-stroke-color-props,\n var(--xy-minimap-node-stroke-color, var(--xy-minimap-node-stroke-color-default))\n );\n stroke-width: var(\n --xy-minimap-node-stroke-width-props,\n var(--xy-minimap-node-stroke-width, var(--xy-minimap-node-stroke-width-default))\n );\n }\n.react-flow__background-pattern.dots {\n fill: var(\n --xy-background-pattern-color-props,\n var(--xy-background-pattern-color, var(--xy-background-pattern-dots-color-default))\n );\n }\n.react-flow__background-pattern.lines {\n stroke: var(\n --xy-background-pattern-color-props,\n var(--xy-background-pattern-color, var(--xy-background-pattern-lines-color-default))\n );\n }\n.react-flow__background-pattern.cross {\n stroke: var(\n --xy-background-pattern-color-props,\n var(--xy-background-pattern-color, var(--xy-background-pattern-cross-color-default))\n );\n }\n.react-flow__controls {\n display: flex;\n flex-direction: column;\n box-shadow: var(--xy-controls-box-shadow, var(--xy-controls-box-shadow-default));\n}\n.react-flow__controls.horizontal {\n flex-direction: row;\n }\n.react-flow__controls-button {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 26px;\n width: 26px;\n padding: 4px;\n border: none;\n background: var(--xy-controls-button-background-color, var(--xy-controls-button-background-color-default));\n border-bottom: 1px solid\n var(\n --xy-controls-button-border-color-props,\n var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default))\n );\n color: var(\n --xy-controls-button-color-props,\n var(--xy-controls-button-color, var(--xy-controls-button-color-default))\n );\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n }\n.react-flow__controls-button svg {\n width: 100%;\n max-width: 12px;\n max-height: 12px;\n fill: currentColor;\n }\n.react-flow__edge.updating .react-flow__edge-path {\n stroke: #777;\n }\n.react-flow__edge-text {\n font-size: 10px;\n }\n.react-flow__node.selectable:focus,\n .react-flow__node.selectable:focus-visible {\n outline: none;\n }\n.react-flow__node-input,\n.react-flow__node-default,\n.react-flow__node-output,\n.react-flow__node-group {\n padding: 10px;\n border-radius: var(--xy-node-border-radius, var(--xy-node-border-radius-default));\n width: 150px;\n font-size: 12px;\n color: var(--xy-node-color, var(--xy-node-color-default));\n text-align: center;\n border: var(--xy-node-border, var(--xy-node-border-default));\n background-color: var(--xy-node-background-color, var(--xy-node-background-color-default));\n}\n.react-flow__node-input.selectable:hover, .react-flow__node-default.selectable:hover, .react-flow__node-output.selectable:hover, .react-flow__node-group.selectable:hover {\n box-shadow: var(--xy-node-boxshadow-hover, var(--xy-node-boxshadow-hover-default));\n }\n.react-flow__node-input.selectable.selected,\n .react-flow__node-input.selectable:focus,\n .react-flow__node-input.selectable:focus-visible,\n .react-flow__node-default.selectable.selected,\n .react-flow__node-default.selectable:focus,\n .react-flow__node-default.selectable:focus-visible,\n .react-flow__node-output.selectable.selected,\n .react-flow__node-output.selectable:focus,\n .react-flow__node-output.selectable:focus-visible,\n .react-flow__node-group.selectable.selected,\n .react-flow__node-group.selectable:focus,\n .react-flow__node-group.selectable:focus-visible {\n box-shadow: var(--xy-node-boxshadow-selected, var(--xy-node-boxshadow-selected-default));\n }\n.react-flow__node-group {\n background-color: var(--xy-node-group-background-color, var(--xy-node-group-background-color-default));\n}\n.react-flow__nodesselection-rect,\n.react-flow__selection {\n background: var(--xy-selection-background-color, var(--xy-selection-background-color-default));\n border: var(--xy-selection-border, var(--xy-selection-border-default));\n}\n.react-flow__nodesselection-rect:focus,\n .react-flow__nodesselection-rect:focus-visible,\n .react-flow__selection:focus,\n .react-flow__selection:focus-visible {\n outline: none;\n }\n.react-flow__controls-button:hover {\n background: var(\n --xy-controls-button-background-color-hover-props,\n var(--xy-controls-button-background-color-hover, var(--xy-controls-button-background-color-hover-default))\n );\n color: var(\n --xy-controls-button-color-hover-props,\n var(--xy-controls-button-color-hover, var(--xy-controls-button-color-hover-default))\n );\n }\n.react-flow__controls-button:disabled {\n pointer-events: none;\n }\n.react-flow__controls-button:disabled svg {\n fill-opacity: 0.4;\n }\n.react-flow__controls-button:last-child {\n border-bottom: none;\n }\n.react-flow__controls.horizontal .react-flow__controls-button {\n border-bottom: none;\n border-right: 1px solid\n var(\n --xy-controls-button-border-color-props,\n var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default))\n );\n }\n.react-flow__controls.horizontal .react-flow__controls-button:last-child {\n border-right: none;\n }\n.react-flow__resize-control {\n position: absolute;\n}\n.react-flow__resize-control.left,\n.react-flow__resize-control.right {\n cursor: ew-resize;\n}\n.react-flow__resize-control.top,\n.react-flow__resize-control.bottom {\n cursor: ns-resize;\n}\n.react-flow__resize-control.top.left,\n.react-flow__resize-control.bottom.right {\n cursor: nwse-resize;\n}\n.react-flow__resize-control.bottom.left,\n.react-flow__resize-control.top.right {\n cursor: nesw-resize;\n}\n/* handle styles */\n.react-flow__resize-control.handle {\n width: 5px;\n height: 5px;\n border: 1px solid #fff;\n border-radius: 1px;\n background-color: var(--xy-resize-background-color, var(--xy-resize-background-color-default));\n translate: -50% -50%;\n}\n.react-flow__resize-control.handle.left {\n left: 0;\n top: 50%;\n}\n.react-flow__resize-control.handle.right {\n left: 100%;\n top: 50%;\n}\n.react-flow__resize-control.handle.top {\n left: 50%;\n top: 0;\n}\n.react-flow__resize-control.handle.bottom {\n left: 50%;\n top: 100%;\n}\n.react-flow__resize-control.handle.top.left {\n left: 0;\n}\n.react-flow__resize-control.handle.bottom.left {\n left: 0;\n}\n.react-flow__resize-control.handle.top.right {\n left: 100%;\n}\n.react-flow__resize-control.handle.bottom.right {\n left: 100%;\n}\n/* line styles */\n.react-flow__resize-control.line {\n border-color: var(--xy-resize-background-color, var(--xy-resize-background-color-default));\n border-width: 0;\n border-style: solid;\n}\n.react-flow__resize-control.line.left,\n.react-flow__resize-control.line.right {\n width: 1px;\n transform: translate(-50%, 0);\n top: 0;\n height: 100%;\n}\n.react-flow__resize-control.line.left {\n left: 0;\n border-left-width: 1px;\n}\n.react-flow__resize-control.line.right {\n left: 100%;\n border-right-width: 1px;\n}\n.react-flow__resize-control.line.top,\n.react-flow__resize-control.line.bottom {\n height: 1px;\n transform: translate(0, -50%);\n left: 0;\n width: 100%;\n}\n.react-flow__resize-control.line.top {\n top: 0;\n border-top-width: 1px;\n}\n.react-flow__resize-control.line.bottom {\n border-bottom-width: 1px;\n top: 100%;\n}\n.react-flow__edge-textbg {\n fill: var(--xy-edge-label-background-color, var(--xy-edge-label-background-color-default));\n}\n.react-flow__edge-text {\n fill: var(--xy-edge-label-color, var(--xy-edge-label-color-default));\n}\n","/* @particle-academy/fancy-flow styles.\n Themeable: every surface, text, border, and accent resolves from a `--ff-*`\n custom-property layer defined on the component roots below. Override any of\n them on `.ff-editor` (or any ancestor, e.g. `:root`) to retheme the editor\n without fighting specificity — e.g.\n .ff-editor { --ff-accent: #ec4899; --ff-radius: 16px; }\n Dark mode honors both a `.dark` / `[data-theme=\"dark\"]` ancestor (Tailwind\n class strategy, what `colorMode` stamps) and the OS `prefers-color-scheme`,\n with a `.ff-canvas--light` opt-out for the OS path. */\n\n/* React Flow base layout CSS — bundled in so consumers import only this one\n stylesheet. Without it `.react-flow__node` isn't absolutely positioned and the\n pane/viewport transforms don't work, so the canvas renders blank. */\n@import \"@xyflow/react/dist/style.css\";\n\n/* ─── Theme tokens — LIGHT (defaults) ──────────────────────────────────────\n Defined on every component root so both composed (`<FlowEditor>`) and\n standalone (`<NodePalette>`, `<NodeConfigPanel>`, `<FlowRunFeed>`, `<FlowCanvas>`)\n usage inherits them. Nodes inherit from `.ff-canvas`. */\n.ff-editor, .ff-canvas, .ff-palette, .ff-panel, .ff-run-feed, .ff-prompt {\n --ff-font: ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif;\n --ff-mono: ui-monospace, \"SF Mono\", \"JetBrains Mono\", Menlo, Consolas, monospace;\n\n --ff-surface: #ffffff; /* raised: cards, nodes, inputs */\n --ff-surface-2: #f4f4f5; /* recessed: palette, panel, run feed, toolbar */\n --ff-surface-3: #fafafa; /* nested: repeater rows, hover */\n --ff-canvas-bg: #ffffff;\n --ff-canvas-dot: rgba(9, 9, 11, 0.09);\n --ff-node-bg: #ffffff;\n\n --ff-fg: #18181b;\n --ff-fg-muted: #52525b;\n --ff-fg-subtle: #71717a;\n --ff-fg-faint: #a1a1aa;\n\n --ff-border: #e4e4e7;\n --ff-border-strong: #d4d4d8;\n --ff-edge: #9ca3af;\n\n --ff-accent: #8b5cf6; /* selection, focus, brand */\n --ff-accent-soft: rgba(139, 92, 246, 0.12);\n --ff-accent-ring: rgba(139, 92, 246, 0.22);\n\n --ff-run: #10b981;\n --ff-run-hover: #059669;\n --ff-danger: #ef4444;\n --ff-warn: #d97706;\n --ff-warn-soft: rgba(245, 158, 11, 0.15);\n\n --ff-feed-node: #7c3aed; /* node id + status lines in the run feed */\n --ff-feed-ok: #059669;\n\n --ff-radius: 12px; /* shells, cards */\n --ff-radius-md: 8px; /* buttons, nodes */\n --ff-radius-sm: 6px; /* inputs, chips */\n\n --ff-shadow-sm: 0 1px 2px rgba(0,0,0,.05);\n --ff-shadow-md: 0 1px 2px rgba(0,0,0,.04), 0 4px 12px rgba(0,0,0,.06);\n --ff-shadow-lg: 0 10px 20px -6px rgba(0,0,0,.12), 0 4px 8px -6px rgba(0,0,0,.08);\n}\n\n/* ─── Theme tokens — DARK ──────────────────────────────────────────────── */\n/* Both a DESCENDANT of a dark root and the element itself.\n `FlowCanvas` puts `dark` on its own root when a colour mode resolves, and the\n descendant-only form could never match that — so the class the component sets\n on itself, and which a comment there claims drives these tokens, did nothing.\n A host that marks <html class=\"dark\"> still matches the first two. */\n.dark :is(.ff-editor, .ff-canvas, .ff-palette, .ff-panel, .ff-run-feed, .ff-prompt),\n[data-theme=\"dark\"] :is(.ff-editor, .ff-canvas, .ff-palette, .ff-panel, .ff-run-feed, .ff-prompt),\n.dark:is(.ff-editor, .ff-canvas, .ff-palette, .ff-panel, .ff-run-feed, .ff-prompt),\n[data-theme=\"dark\"]:is(.ff-editor, .ff-canvas, .ff-palette, .ff-panel, .ff-run-feed, .ff-prompt) {\n --ff-surface: #1c1c22;\n --ff-surface-2: #141419;\n --ff-surface-3: #27272a;\n --ff-canvas-bg: #0a0a0c;\n --ff-canvas-dot: rgba(255, 255, 255, 0.10);\n --ff-node-bg: #1c1c22;\n\n --ff-fg: #fafafa;\n --ff-fg-muted: #d4d4d8;\n --ff-fg-subtle: #a1a1aa;\n --ff-fg-faint: #71717a;\n\n --ff-border: #3f3f46;\n --ff-border-strong: #52525b;\n --ff-edge: #71717a;\n\n --ff-accent: #a78bfa;\n --ff-accent-soft: rgba(167, 139, 250, 0.16);\n --ff-accent-ring: rgba(167, 139, 250, 0.30);\n\n --ff-warn: #fb923c;\n --ff-warn-soft: rgba(251, 146, 60, 0.16);\n --ff-feed-node: #c4b5fd;\n --ff-feed-ok: #34d399;\n\n --ff-shadow-md: 0 1px 2px rgba(0,0,0,.4), 0 6px 16px rgba(0,0,0,.5);\n --ff-shadow-lg: 0 12px 28px -8px rgba(0,0,0,.6), 0 4px 10px -6px rgba(0,0,0,.5);\n}\n@media (prefers-color-scheme: dark) {\n :is(.ff-editor, .ff-canvas, .ff-palette, .ff-panel, .ff-run-feed, .ff-prompt):not(.ff-canvas--light):not(.ff-canvas--light *) {\n --ff-surface: #1c1c22;\n --ff-surface-2: #141419;\n --ff-surface-3: #27272a;\n --ff-canvas-bg: #0a0a0c;\n --ff-canvas-dot: rgba(255, 255, 255, 0.10);\n --ff-node-bg: #1c1c22;\n --ff-fg: #fafafa;\n --ff-fg-muted: #d4d4d8;\n --ff-fg-subtle: #a1a1aa;\n --ff-fg-faint: #71717a;\n --ff-border: #3f3f46;\n --ff-border-strong: #52525b;\n --ff-edge: #71717a;\n --ff-accent: #a78bfa;\n --ff-accent-soft: rgba(167, 139, 250, 0.16);\n --ff-accent-ring: rgba(167, 139, 250, 0.30);\n --ff-warn: #fb923c;\n --ff-warn-soft: rgba(251, 146, 60, 0.16);\n --ff-feed-node: #c4b5fd;\n --ff-feed-ok: #34d399;\n --ff-shadow-md: 0 1px 2px rgba(0,0,0,.4), 0 6px 16px rgba(0,0,0,.5);\n --ff-shadow-lg: 0 12px 28px -8px rgba(0,0,0,.6), 0 4px 10px -6px rgba(0,0,0,.5);\n }\n}\n\n/* ─── Canvas (standalone <FlowCanvas>) ─────────────────────────────────── */\n.ff-canvas {\n display: flex;\n flex-direction: column;\n border: 1px solid var(--ff-border);\n border-radius: var(--ff-radius);\n overflow: hidden;\n background: var(--ff-canvas-bg);\n}\n.ff-canvas__toolbar {\n border-bottom: 1px solid var(--ff-border);\n padding: 8px 10px;\n display: flex; gap: 6px; align-items: center; flex-wrap: wrap;\n background: var(--ff-surface-2);\n color: var(--ff-fg-muted);\n font-family: var(--ff-font);\n font-size: 12px;\n}\n.ff-canvas__surface { flex: 1; min-height: 0; position: relative; background: var(--ff-canvas-bg); }\n\n/* xyflow background grid color via theme token */\n.react-flow__background pattern circle { fill: var(--ff-canvas-dot); }\n\n/* ─── Nodes ────────────────────────────────────────────────────────────── */\n.ff-node {\n min-width: 200px;\n max-width: 280px;\n background: var(--ff-node-bg);\n border: 1px solid var(--ff-border-strong);\n border-radius: var(--ff-radius-md);\n font-family: var(--ff-font);\n font-size: 12px;\n color: var(--ff-fg);\n box-shadow: var(--ff-shadow-md);\n transition: box-shadow 200ms, border-color 200ms;\n overflow: hidden;\n}\n.ff-node:hover { border-color: var(--ff-border); box-shadow: var(--ff-shadow-lg); }\n.ff-node--selected {\n border-color: var(--ff-accent);\n box-shadow: 0 0 0 3px var(--ff-accent-ring), var(--ff-shadow-lg);\n}\n\n.ff-node__header {\n display: flex; align-items: center; gap: 8px;\n padding: 7px 10px;\n color: #fff;\n font-weight: 600;\n}\n.ff-node__icon { font-size: 14px; line-height: 1; }\n.ff-node__tag {\n font-size: 10px;\n letter-spacing: 0.06em;\n font-weight: 700;\n opacity: 0.9;\n text-transform: uppercase;\n}\n.ff-node__label { flex: 1; font-size: 13px; }\n.ff-node__desc { margin: 0; padding: 8px 10px 0; font-size: 11px; color: var(--ff-fg-subtle); }\n.ff-node__body { padding: 8px 10px 10px; }\n.ff-node__status-text { margin: 0; padding: 4px 10px 8px; font-size: 11px; color: var(--ff-fg-subtle); }\n.ff-node--status-error .ff-node__status-text { color: var(--ff-danger); }\n\n.ff-node--status-running { animation: ff-pulse 1.4s ease-in-out infinite; }\n@keyframes ff-pulse {\n 0%, 100% { box-shadow: 0 0 0 0 var(--ff-accent-ring), var(--ff-shadow-md); }\n 50% { box-shadow: 0 0 0 6px transparent, var(--ff-shadow-md); }\n}\n\n/* Status dot in the header */\n.ff-node__dot { width: 8px; height: 8px; border-radius: 50%; background: rgba(255,255,255,0.5); }\n.ff-node__dot--queued { background: #fbbf24; }\n.ff-node__dot--running { background: #fde68a; box-shadow: 0 0 6px #fde68a; }\n.ff-node__dot--done { background: #34d399; }\n.ff-node__dot--error { background: #f87171; }\n\n/* Subgraph metadata row */\n.ff-subgraph__meta { display: flex; justify-content: space-between; font-size: 11px; color: var(--ff-fg-subtle); }\n\n/* Node summary inside the card */\n.ff-node__summary { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 2px; }\n.ff-node__summary li { display: flex; gap: 6px; font-size: 11px; }\n.ff-node__summary-key { color: var(--ff-fg-subtle); }\n.ff-node__summary-value { font-family: var(--ff-mono); }\n.ff-node__summary-more { color: var(--ff-fg-subtle); font-size: 10px; }\n.ff-node__body-empty { font-size: 11px; color: var(--ff-fg-faint); font-style: italic; }\n\n/* Reactive output (G12) — a node's live computed value. */\n.ff-node__output {\n margin: 0; padding: 4px 10px 8px;\n font-size: 11px; font-family: var(--ff-mono);\n color: var(--ff-feed-ok);\n overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\n}\n\n/* xyflow wraps every custom node in a `.react-flow__node-{type}` div with\n default chrome. Our kit ships its own via `.ff-node`, so strip xyflow's. */\n.react-flow__node-trigger,\n.react-flow__node-action,\n.react-flow__node-decision,\n.react-flow__node-output,\n.react-flow__node-note,\n.react-flow__node-subgraph {\n background: transparent !important;\n border: none !important;\n padding: 0 !important;\n box-shadow: none !important;\n border-radius: 0 !important;\n}\n\n/* xyflow handle */\n.react-flow__handle {\n width: 10px; height: 10px;\n background: var(--ff-surface);\n border: 2px solid var(--ff-border-strong);\n border-radius: 50%;\n}\n.react-flow__handle:hover { background: var(--ff-accent); border-color: var(--ff-accent); }\n\n/* xyflow edges */\n.react-flow__edge-path { stroke: var(--ff-edge); }\n.react-flow__connection-path { stroke: var(--ff-accent); stroke-width: 2; }\n\n/* xyflow controls — themed via tokens (bump specificity + !important to beat\n xyflow's own stylesheet). */\n.react-flow__controls { background: transparent; box-shadow: none; }\n.react-flow__controls .react-flow__controls-button {\n background: var(--ff-surface) !important;\n border-color: var(--ff-border) !important;\n border-bottom-color: var(--ff-border) !important;\n color: var(--ff-fg) !important;\n border-radius: var(--ff-radius-sm);\n}\n.react-flow__controls .react-flow__controls-button:hover { background: var(--ff-surface-3) !important; }\n.react-flow__controls .react-flow__controls-button svg,\n.react-flow__controls .react-flow__controls-button svg path,\n.react-flow__controls .react-flow__controls-button svg polyline,\n.react-flow__controls .react-flow__controls-button svg polygon {\n fill: currentColor !important;\n stroke: currentColor !important;\n}\n\n/* NodeResizer chrome */\n.react-flow__resize-control.line { border-color: var(--ff-accent-ring); }\n.react-flow__resize-control.handle { width: 8px; height: 8px; border-radius: 2px; border: 1px solid var(--ff-surface); background: var(--ff-accent); }\n\n/* ─── Swimlanes (G6) ───────────────────────────────────────────────────── */\n.ff-lane {\n width: 100%; height: 100%; box-sizing: border-box;\n background: var(--ff-accent-soft);\n border: 1px dashed var(--ff-border-strong);\n border-radius: var(--ff-radius-md);\n overflow: hidden;\n}\n.ff-lane--selected { border-style: solid; border-color: var(--ff-accent); }\n.ff-lane__header {\n display: flex; align-items: center;\n height: 22px; padding: 0 8px;\n color: #fff; font-size: 11px; font-weight: 600;\n font-family: var(--ff-font);\n border-radius: 7px 7px 0 0;\n}\n.ff-lane__title { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n\n/* ─── Notes (annotation) — sticky-note, visual-only ────────────────────── */\n.ff-note {\n width: 100%; height: 100%; box-sizing: border-box;\n padding: 8px 10px;\n border: 1px solid transparent;\n border-radius: var(--ff-radius-md);\n font-family: var(--ff-font);\n box-shadow: var(--ff-shadow-sm);\n overflow: hidden;\n display: flex; flex-direction: column; gap: 4px;\n}\n.ff-note--selected { box-shadow: 0 0 0 2px currentColor; }\n.ff-note__title { font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; }\n.ff-note__body {\n flex: 1; min-height: 0;\n font-size: 12px; line-height: 1.5;\n color: var(--ff-fg-muted);\n white-space: pre-wrap; overflow: auto;\n}\n.ff-note__placeholder { color: var(--ff-fg-faint); font-style: italic; }\n.ff-note__input {\n flex: 1; min-height: 0; width: 100%;\n resize: none; border: none; outline: none; background: transparent;\n font: inherit; font-size: 12px; line-height: 1.5; color: inherit;\n}\n\n/* ─── Run controls ─────────────────────────────────────────────────────── */\n.ff-run-controls { display: flex; gap: 6px; }\n.ff-run-controls__btn {\n border: 1px solid var(--ff-border); border-radius: var(--ff-radius-sm);\n padding: 6px 12px;\n font: inherit; font-size: 12px; font-weight: 500;\n cursor: pointer;\n background: var(--ff-surface); color: var(--ff-fg);\n transition: background 150ms, border-color 150ms;\n}\n.ff-run-controls__btn:hover:not(:disabled) { background: var(--ff-surface-3); }\n.ff-run-controls__btn--run { background: var(--ff-run); border-color: var(--ff-run-hover); color: #fff; }\n.ff-run-controls__btn--run:hover:not(:disabled) { background: var(--ff-run-hover); }\n.ff-run-controls__btn--cancel { background: var(--ff-danger); border-color: var(--ff-danger); color: #fff; }\n.ff-run-controls__btn:disabled { opacity: 0.5; cursor: default; }\n\n/* ─── Run feed (header + scrolling body) ───────────────────────────────── */\n.ff-run-feed {\n display: flex; flex-direction: column;\n font-family: var(--ff-mono);\n background: var(--ff-surface-2);\n color: var(--ff-fg);\n border: 1px solid var(--ff-border);\n border-radius: var(--ff-radius-md);\n overflow: hidden;\n max-height: 260px;\n}\n.ff-run-feed__header {\n display: flex; align-items: center; gap: 8px;\n padding: 7px 12px;\n border-bottom: 1px solid var(--ff-border);\n font-family: var(--ff-font);\n font-size: 11.5px; font-weight: 600; color: var(--ff-fg-muted);\n flex-shrink: 0;\n}\n.ff-run-feed__title { color: var(--ff-accent); font-family: var(--ff-mono); }\n.ff-run-feed__badge {\n font-family: var(--ff-font); font-size: 10px; font-weight: 600;\n color: var(--ff-warn); background: var(--ff-warn-soft);\n padding: 1px 8px; border-radius: 999px;\n}\n.ff-run-feed__count { margin-left: auto; font-family: var(--ff-mono); font-size: 10.5px; color: var(--ff-fg-faint); }\n.ff-run-feed__body { flex: 1; min-height: 0; overflow: auto; padding: 8px 12px; font-size: 11px; line-height: 1.7; }\n.ff-run-feed__empty { color: var(--ff-fg-subtle); margin: 0; }\n.ff-run-feed__row { display: flex; gap: 9px; padding: 1px 0; white-space: pre-wrap; word-break: break-word; }\n.ff-run-feed__time { color: var(--ff-fg-faint); flex-shrink: 0; }\n.ff-run-feed__node { color: var(--ff-feed-node); flex-shrink: 0; }\n.ff-run-feed__text { flex: 1; min-width: 0; }\n.ff-run-feed__row--error .ff-run-feed__text { color: var(--ff-danger); }\n.ff-run-feed__row--warn .ff-run-feed__text { color: var(--ff-warn); }\n.ff-run-feed__row--status .ff-run-feed__text { color: var(--ff-feed-node); }\n\n/* ─── FlowEditor — unified shell ───────────────────────────────────────── */\n.ff-editor {\n display: grid;\n grid-template-columns: 216px 1fr 300px;\n gap: 0;\n font-family: var(--ff-font);\n background: var(--ff-surface);\n border: 1px solid var(--ff-border);\n border-radius: var(--ff-radius);\n overflow: hidden;\n box-shadow: var(--ff-shadow-md);\n}\n.ff-editor__main { display: flex; flex-direction: column; min-width: 0; min-height: 0; position: relative; background: var(--ff-canvas-bg); }\n/* The canvas fills the middle column seamlessly — the shell owns the frame. */\n.ff-editor__main .ff-canvas { flex: 1; min-height: 0; border: none; border-radius: 0; }\n.ff-editor__empty {\n position: absolute; inset: 0; display: grid; place-items: center;\n padding: 24px; text-align: center; pointer-events: none;\n}\n.ff-editor__empty > * { pointer-events: auto; }\n\n.ff-editor__palette { border: none; border-right: 1px solid var(--ff-border); border-radius: 0; background: var(--ff-surface-2); }\n.ff-editor__panel-wrap {\n display: flex; flex-direction: column; min-height: 0;\n border-left: 1px solid var(--ff-border);\n background: var(--ff-surface-2);\n}\n.ff-editor__panel { flex: 1; min-height: 0; border: none; border-radius: 0; background: transparent; }\n.ff-editor__panel-footer { flex-shrink: 0; display: flex; flex-wrap: wrap; gap: 6px; padding: 0 12px 12px; }\n.ff-editor__feed { flex-shrink: 0; height: 168px; max-height: none; border: none; border-top: 1px solid var(--ff-border); border-radius: 0; }\n\n/* Node right-click menu — fixed so the canvas' overflow can't clip it. */\n.ff-editor__ctx {\n position: fixed; z-index: 50; min-width: 150px; padding: 4px;\n display: flex; flex-direction: column;\n background: var(--ff-surface); border: 1px solid var(--ff-border-strong); border-radius: var(--ff-radius-md);\n box-shadow: var(--ff-shadow-lg);\n}\n.ff-editor__ctx-item {\n border: 0; background: transparent; cursor: pointer; text-align: left;\n padding: 6px 10px; border-radius: 5px; font-size: 12.5px; color: inherit;\n}\n.ff-editor__ctx-item:hover { background: var(--ff-surface-3); }\n.ff-editor__ctx-item--danger { color: var(--ff-danger); }\n\n.ff-editor__sep { width: 1px; align-self: stretch; background: var(--ff-border); margin: 0 3px; }\n.ff-editor__btn {\n display: inline-flex; align-items: center; gap: 6px;\n border: 1px solid var(--ff-border); background: var(--ff-surface); cursor: pointer;\n border-radius: var(--ff-radius-sm); padding: 5px 11px;\n color: var(--ff-fg-muted); font-size: 12px; font-weight: 500;\n transition: background 150ms, color 150ms;\n}\n.ff-editor__btn:hover:not(:disabled) { background: var(--ff-surface-3); color: var(--ff-fg); }\n.ff-editor__btn:disabled { opacity: 0.45; cursor: not-allowed; }\n.ff-editor__count { margin-left: auto; font-family: var(--ff-mono); font-size: 11px; color: var(--ff-fg-faint); }\n\n/* ─── NodePalette ──────────────────────────────────────────────────────── */\n.ff-palette {\n display: flex; flex-direction: column;\n background: var(--ff-surface-2);\n border: 1px solid var(--ff-border);\n border-radius: var(--ff-radius);\n overflow: hidden;\n font-size: 13px;\n color: var(--ff-fg);\n}\n.ff-palette__search { padding: 10px; border-bottom: 1px solid var(--ff-border); }\n.ff-palette__search-input {\n width: 100%; padding: 7px 10px;\n border: 1px solid var(--ff-border); border-radius: var(--ff-radius-sm);\n background: var(--ff-surface); color: inherit; font: inherit; font-size: 12.5px;\n outline: none; transition: border-color 150ms, box-shadow 150ms;\n}\n.ff-palette__search-input:focus { border-color: var(--ff-accent); box-shadow: 0 0 0 3px var(--ff-accent-soft); }\n.ff-palette__list { flex: 1; overflow: auto; padding: 8px; }\n.ff-palette__group { padding: 2px 0; }\n.ff-palette__group-label {\n font-size: 9.5px; letter-spacing: 0.07em; text-transform: uppercase;\n color: var(--ff-fg-faint); font-weight: 700;\n padding: 11px 8px 6px;\n}\n.ff-palette__row {\n width: 100%;\n display: flex; align-items: flex-start; gap: 9px;\n padding: 8px; border: 1px solid transparent; background: transparent; cursor: grab;\n border-radius: var(--ff-radius-md);\n text-align: left; color: inherit; font: inherit;\n transition: background 130ms, border-color 130ms;\n}\n.ff-palette__row:hover { background: var(--ff-surface-3); border-color: var(--ff-border); }\n.ff-palette__row:active { cursor: grabbing; }\n.ff-palette__row-dot {\n flex-shrink: 0; width: 24px; height: 24px;\n border-radius: 7px;\n display: inline-flex; align-items: center; justify-content: center;\n color: white; font-size: 14px;\n}\n.ff-palette__row-text { display: flex; flex-direction: column; min-width: 0; }\n.ff-palette__row-label { font-size: 12.5px; font-weight: 600; line-height: 1.2; }\n.ff-palette__row-desc {\n font-size: 10.5px; color: var(--ff-fg-faint); line-height: 1.35; margin-top: 2px;\n overflow: hidden; text-overflow: ellipsis;\n display: -webkit-box; -webkit-line-clamp: 1; -webkit-box-orient: vertical;\n}\n\n/* ─── NodeConfigPanel ──────────────────────────────────────────────────── */\n.ff-panel {\n background: var(--ff-surface-2);\n border: 1px solid var(--ff-border);\n border-radius: var(--ff-radius);\n padding: 14px;\n display: flex; flex-direction: column; gap: 12px;\n overflow: auto;\n font-size: 13px;\n color: var(--ff-fg);\n}\n.ff-panel--empty { align-items: center; justify-content: center; }\n.ff-panel__empty { font-size: 12px; color: var(--ff-fg-faint); text-align: center; }\n.ff-panel__header { display: flex; align-items: center; gap: 10px; }\n.ff-panel__head-icon {\n flex-shrink: 0; width: 28px; height: 28px; border-radius: var(--ff-radius-sm);\n display: grid; place-items: center; color: #fff; font-size: 15px;\n}\n.ff-panel__head-text { display: flex; flex-direction: column; min-width: 0; gap: 1px; }\n.ff-panel__head-kind { font-size: 9.5px; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; color: var(--ff-fg-faint); }\n.ff-panel__head-name { font-size: 13.5px; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n/* legacy tag (kept for back-compat with hand-composed panels) */\n.ff-panel__kind-tag {\n align-self: flex-start;\n font-size: 10px; letter-spacing: 0.06em; text-transform: uppercase;\n background: var(--ff-accent-soft); color: var(--ff-accent);\n padding: 2px 8px; border-radius: 999px;\n}\n.ff-panel__kind-desc { margin: 0; font-size: 12px; color: var(--ff-fg-subtle); line-height: 1.5; }\n.ff-panel__divider { border: 0; border-top: 1px solid var(--ff-border); margin: 2px 0; }\n\n.ff-panel__actions { margin-top: auto; padding-top: 12px; }\n.ff-panel__delete {\n width: 100%; padding: 8px 10px;\n font-size: 13px; font-weight: 500;\n color: var(--ff-danger); background: transparent;\n border: 1px solid var(--ff-danger); border-radius: var(--ff-radius-sm);\n cursor: pointer; opacity: 0.85; transition: opacity 150ms, background 150ms;\n}\n.ff-panel__delete:hover { opacity: 1; background: rgba(239, 68, 68, 0.08); }\n.ff-panel__field { display: flex; flex-direction: column; gap: 5px; }\n.ff-panel__label { font-size: 12px; font-weight: 600; color: var(--ff-fg-muted); }\n.ff-panel__hint { font-size: 11px; color: var(--ff-fg-faint); margin: 0; line-height: 1.4; }\n.ff-panel__required { color: var(--ff-danger); }\n.ff-panel__input {\n width: 100%; padding: 7px 10px;\n border: 1px solid var(--ff-border); border-radius: var(--ff-radius-sm);\n background: var(--ff-surface); color: inherit; font: inherit; font-size: 12.5px;\n box-sizing: border-box; outline: none;\n transition: border-color 150ms, box-shadow 150ms;\n}\n.ff-panel__input:focus { border-color: var(--ff-accent); box-shadow: 0 0 0 3px var(--ff-accent-soft); }\n.ff-panel__input--textarea { font-family: inherit; resize: vertical; line-height: 1.5; }\n.ff-panel__input--expression,\n.ff-panel__input--json { font-family: var(--ff-mono); font-size: 11.5px; }\n.ff-panel__switch { display: inline-flex; align-items: center; cursor: pointer; }\n.ff-panel__switch input { display: none; }\n.ff-panel__switch-slider { width: 32px; height: 18px; background: var(--ff-border-strong); border-radius: 999px; position: relative; transition: background 200ms; }\n.ff-panel__switch-slider::before { content: \"\"; position: absolute; left: 2px; top: 2px; width: 14px; height: 14px; background: #fff; border-radius: 50%; transition: left 200ms; }\n.ff-panel__switch input:checked + .ff-panel__switch-slider { background: var(--ff-accent); }\n.ff-panel__switch input:checked + .ff-panel__switch-slider::before { left: 16px; }\n.ff-panel__issues { margin-top: 4px; }\n.ff-panel__issue { font-size: 11px; color: var(--ff-warn); margin: 2px 0; }\n\n/* Repeater / key-value config fields */\n.ff-repeater { display: flex; flex-direction: column; gap: 8px; }\n.ff-repeater__empty { font-size: 11px; color: var(--ff-fg-subtle); margin: 0; font-style: italic; }\n.ff-repeater__row {\n display: flex; flex-direction: column; gap: 6px;\n border: 1px solid var(--ff-border); border-radius: var(--ff-radius-sm); padding: 10px; background: var(--ff-surface);\n}\n.ff-repeater__row-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; }\n.ff-repeater__row-title { font-size: 11px; font-weight: 600; color: var(--ff-fg-muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.ff-repeater__row-actions { display: flex; gap: 2px; flex-shrink: 0; }\n.ff-repeater__btn { border: 1px solid transparent; background: transparent; cursor: pointer; border-radius: 4px; font-size: 11px; line-height: 1; padding: 3px 5px; color: var(--ff-fg-subtle); }\n.ff-repeater__btn:hover:not(:disabled) { background: var(--ff-surface-3); color: var(--ff-fg); }\n.ff-repeater__btn:disabled { opacity: .35; cursor: not-allowed; }\n.ff-repeater__btn--danger:hover:not(:disabled) { background: rgba(239,68,68,0.12); color: var(--ff-danger); }\n.ff-repeater__cell { display: flex; flex-direction: column; gap: 3px; }\n.ff-panel__label--sub { font-size: 11px; color: var(--ff-fg-subtle); font-weight: 400; }\n.ff-repeater__add {\n align-self: flex-start; border: 1px dashed var(--ff-border-strong); background: transparent;\n border-radius: var(--ff-radius-sm); padding: 6px 11px; font-size: 11px; color: var(--ff-fg-muted); cursor: pointer;\n}\n.ff-repeater__add:hover:not(:disabled) { border-color: var(--ff-accent); color: var(--ff-accent); }\n.ff-repeater__add:disabled { opacity: .4; cursor: not-allowed; }\n\n.ff-keyvalue { display: flex; flex-direction: column; gap: 6px; }\n.ff-keyvalue__head,\n.ff-keyvalue__row { display: grid; grid-template-columns: 1fr 1fr auto; gap: 6px; align-items: center; }\n.ff-keyvalue__head { font-size: 10px; text-transform: uppercase; letter-spacing: .04em; color: var(--ff-fg-faint); }\n.ff-panel__hint--missing { color: var(--ff-warn); font-style: italic; }\n\n/* Edge label editor */\n.ff-editor__edge-label { padding: 6px; min-width: 200px; }\n.ff-editor__edge-label .ff-panel__input { width: 100%; }\n\n/* Rich user input preview */\n.ff-rich-preview { display: flex; flex-direction: column; gap: 6px; }\n.ff-rich-preview__frame { border: 1px solid var(--ff-border); border-radius: var(--ff-radius-sm); overflow: hidden; max-height: 180px; background: var(--ff-surface); }\n.ff-rich-preview__unavailable { border: 1px dashed var(--ff-border-strong); border-radius: var(--ff-radius-sm); padding: 10px; font-size: 11px; color: var(--ff-fg-subtle); line-height: 1.5; }\n.ff-rich-preview__unavailable code { font-size: 10px; background: var(--ff-surface-3); padding: 1px 4px; border-radius: 3px; }\n.ff-rich-preview__title { font-size: 11px; font-weight: 600; color: var(--ff-fg-muted); }\n\n/* Resizable nodes (G11) */\n.ff-node--resizable { max-width: none; width: 100%; height: 100%; }\n\n/* ─── In-editor human-input modal ──────────────────────────────────────── */\n.ff-prompt-overlay {\n position: absolute; inset: 0; z-index: 20;\n display: grid; place-items: center; padding: 16px;\n background: rgba(9, 9, 11, 0.5);\n backdrop-filter: blur(2px);\n}\n.ff-prompt {\n width: 100%; max-width: 420px; max-height: 100%; overflow: auto;\n padding: 18px;\n border-radius: var(--ff-radius);\n background: var(--ff-surface);\n border: 1px solid var(--ff-border);\n box-shadow: var(--ff-shadow-lg);\n font-family: var(--ff-font);\n color: var(--ff-fg);\n}\n.ff-prompt__title { font-size: 14px; font-weight: 600; color: var(--ff-fg); margin-bottom: 10px; }\n.ff-prompt__desc { font-size: 13px; line-height: 1.5; color: var(--ff-fg-subtle); margin-bottom: 12px; }\n.ff-prompt__fields { display: flex; flex-direction: column; gap: 12px; margin-bottom: 16px; }\n.ff-prompt__field { display: flex; flex-direction: column; gap: 5px; }\n.ff-prompt__label { font-size: 12px; font-weight: 500; color: var(--ff-fg-muted); }\n.ff-prompt__req { color: var(--ff-danger); }\n.ff-prompt__input {\n width: 100%; box-sizing: border-box; padding: 8px 10px;\n font-size: 13px; border-radius: var(--ff-radius-sm);\n border: 1px solid var(--ff-border); background: var(--ff-surface); color: var(--ff-fg);\n outline: none; transition: border-color 150ms, box-shadow 150ms;\n}\n.ff-prompt__input:focus { border-color: var(--ff-accent); box-shadow: 0 0 0 3px var(--ff-accent-soft); }\n.ff-prompt__switch { width: 16px; height: 16px; }\n.ff-prompt__actions { display: flex; justify-content: flex-end; gap: 8px; }\n.ff-prompt__btn { padding: 8px 14px; font-size: 13px; font-weight: 500; border-radius: var(--ff-radius-sm); border: 1px solid transparent; cursor: pointer; }\n.ff-prompt__btn--ghost { background: transparent; border-color: var(--ff-border-strong); color: var(--ff-fg-muted); }\n.ff-prompt__btn--ghost:hover { background: var(--ff-surface-3); }\n.ff-prompt__btn--primary { background: var(--ff-accent); color: #fff; }\n.ff-prompt__btn--primary:disabled { opacity: 0.5; cursor: not-allowed; }\n.ff-prompt__btn--danger { background: transparent; border-color: var(--ff-danger); color: var(--ff-danger); }\n\n/* Alignment guide lines (G15) */\n.ff-helper-line { background: var(--ff-accent); }\n\n/* ─── Responsive ───────────────────────────────────────────────────────── */\n@media (max-width: 1024px) {\n .ff-editor { grid-template-columns: 190px 1fr; }\n .ff-editor__panel-wrap { display: none; }\n}\n@media (max-width: 720px) {\n .ff-editor { grid-template-columns: 1fr; }\n .ff-editor__palette { display: none; }\n}\n\n/* ─── FlowViewer ─────────────────────────────────────────────────────────────\n Read-only rendering of a workflow. Every colour here reads from the same\n --ff-* token layer the editor uses, so a consumer that themed the editor gets\n a themed viewer for free and does not restyle the same surface twice.\n ──────────────────────────────────────────────────────────────────────────── */\n.ff-viewer { color: var(--ff-fg, inherit); }\n\n.ff-viewer--empty {\n display: grid;\n place-items: center;\n padding: 2rem 1rem;\n border: 1px dashed var(--ff-border, #3f3f46);\n border-radius: var(--ff-radius, 12px);\n}\n.ff-viewer__empty { font-size: 13px; color: var(--ff-fg-muted, #a1a1aa); }\n\n.ff-viewer__list { display: grid; gap: 6px; margin: 0; padding: 0; list-style: none; }\n\n.ff-viewer__row {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n width: 100%;\n padding: 10px 12px;\n text-align: left;\n background: var(--ff-surface, transparent);\n border: 1px solid var(--ff-border, #3f3f46);\n border-radius: var(--ff-radius, 10px);\n}\n.ff-viewer__row--interactive { cursor: pointer; transition: border-color .15s ease, background-color .15s ease; }\n.ff-viewer__row--interactive:hover { border-color: var(--ff-accent, #8b5cf6); }\n.ff-viewer__row--selected { border-color: var(--ff-accent, #8b5cf6); }\n\n.ff-viewer__index {\n flex: none;\n display: grid;\n place-items: center;\n width: 22px; height: 22px;\n border-radius: 999px;\n font-size: 11px; font-weight: 700; font-variant-numeric: tabular-nums;\n color: #fff;\n}\n\n/* min-width:0 is what lets the long-title truncation below actually engage —\n a flex child defaults to min-width:auto, i.e. its min-content width. */\n.ff-viewer__body { display: grid; gap: 2px; min-width: 0; flex: 1 1 auto; }\n.ff-viewer__title { font-size: 13px; font-weight: 600; line-height: 1.3; }\n.ff-viewer__desc {\n font-size: 12px; line-height: 1.4;\n color: var(--ff-fg-muted, #a1a1aa);\n overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2;\n}\n\n.ff-viewer__status {\n flex: none;\n padding: 2px 8px;\n border-radius: 999px;\n font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: .04em;\n}\n.ff-viewer__status--ok { background: #10b98122; color: #34d399; }\n.ff-viewer__status--running { background: #3b82f622; color: #60a5fa; }\n.ff-viewer__status--failed { background: #ef444422; color: #f87171; }\n.ff-viewer__status--skipped { background: #71717a22; color: #a1a1aa; }\n.ff-viewer__status--pending { background: #a855f722; color: #c084fc; }\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@particle-academy/fancy-flow",
|
|
3
|
-
"version": "0.40.
|
|
3
|
+
"version": "0.40.4",
|
|
4
4
|
"description": "Workflow editor + runner. Six built-in node kits (trigger / action / decision / output / note / subgraph), tokenized theme, topological execution with per-node status. React-flow bundled; consumers npm install fancy-flow and get nothing extra.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/nodes/NodeShell.tsx","../src/components/nodes/TriggerNode.tsx","../src/components/nodes/ActionNode.tsx","../src/components/nodes/DecisionNode.tsx","../src/components/nodes/OutputNode.tsx","../src/components/nodes/SubgraphNode.tsx","../src/components/nodes/index.ts","../src/components/FlowEditor/graph-ops.ts","../src/components/canvas/helper-lines.ts","../src/components/canvas/HelperLines.tsx","../src/components/canvas/FlowCanvas.tsx","../src/components/FlowViewer/FlowViewer.tsx"],"names":["jsx","memo","jsxs","reconnectEdge","cx","useMemo","index"],"mappings":"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","file":"chunk-5UCWY7G3.js","sourcesContent":["import { type ReactNode, memo } from \"react\";\nimport { Handle, Position, type NodeProps } from \"@xyflow/react\";\nimport type { FlowNode, NodeRunStatus, PortDescriptor } from \"../../types\";\n\nexport type NodeShellProps = {\n /** Required: the xyflow node this is rendering. */\n node: NodeProps<FlowNode>;\n /** Accent color for the title bar / status ring. */\n accent: string;\n /** Tag/label shown to the left of the title (e.g. \"TRIGGER\", \"ACTION\"). */\n tag: string;\n /** Optional icon glyph (single-character string is fine). */\n icon?: ReactNode;\n /** Whether to show input handles on the left. Defaults true. */\n showInputs?: boolean;\n /** Whether to show output handles on the right. Defaults true. */\n showOutputs?: boolean;\n /** Body content under the title bar. */\n children?: ReactNode;\n};\n\n/**\n * Shared chrome for every kit node — title bar, accent border, status ring,\n * port handles. Specific node kinds compose this with their body content.\n */\nfunction NodeShellInner({\n node,\n accent,\n tag,\n icon,\n showInputs = true,\n showOutputs = true,\n children,\n}: NodeShellProps) {\n const data = node.data;\n const status: NodeRunStatus = data.status ?? \"idle\";\n const inputs = data.inputs ?? defaultInputs(showInputs);\n const outputs = data.outputs ?? defaultOutputs(showOutputs);\n\n return (\n <div\n className={[\"ff-node\", `ff-node--status-${status}`, node.selected ? \"ff-node--selected\" : \"\"].filter(Boolean).join(\" \")}\n style={{ borderColor: node.selected ? accent : undefined }}\n >\n <header className=\"ff-node__header\" style={{ background: accent }}>\n <span className=\"ff-node__icon\" aria-hidden>{icon ?? null}</span>\n <span className=\"ff-node__tag\">{tag}</span>\n <span className=\"ff-node__label\">{data.label}</span>\n {status !== \"idle\" && <StatusDot status={status} />}\n </header>\n\n {data.description && <p className=\"ff-node__desc\">{data.description}</p>}\n {children && <div className=\"ff-node__body\">{children}</div>}\n {data.statusText && <p className=\"ff-node__status-text\">{data.statusText}</p>}\n\n {inputs.map((p, i) => (\n <Handle\n key={p.id}\n type=\"target\"\n position={Position.Left}\n id={p.id}\n style={portStyle(i, inputs.length)}\n title={p.label ?? p.id}\n />\n ))}\n {outputs.map((p, i) => (\n <Handle\n key={p.id}\n type=\"source\"\n position={Position.Right}\n id={p.id}\n style={portStyle(i, outputs.length)}\n title={p.label ?? p.id}\n />\n ))}\n </div>\n );\n}\n\nexport const NodeShell = memo(NodeShellInner);\n\nfunction defaultInputs(show: boolean): PortDescriptor[] {\n return show ? [{ id: \"in\" }] : [];\n}\nfunction defaultOutputs(show: boolean): PortDescriptor[] {\n return show ? [{ id: \"out\" }] : [];\n}\n\nfunction portStyle(i: number, total: number): React.CSSProperties {\n if (total <= 1) return {};\n const slot = (100 / (total + 1)) * (i + 1);\n return { top: `${slot}%` };\n}\n\nfunction StatusDot({ status }: { status: NodeRunStatus }) {\n return <span className={`ff-node__dot ff-node__dot--${status}`} aria-label={`status ${status}`} />;\n}\n","import { memo } from \"react\";\nimport type { NodeProps } from \"@xyflow/react\";\nimport type { FlowNode } from \"../../types\";\nimport { NodeShell } from \"./NodeShell\";\n\n/** Entry-point node — outputs only, no inputs. */\nfunction TriggerNodeInner(props: NodeProps<FlowNode>) {\n return <NodeShell node={props} accent=\"#10b981\" tag=\"TRIGGER\" icon=\"⚡\" showInputs={false} />;\n}\nexport const TriggerNode = memo(TriggerNodeInner);\n","import { memo } from \"react\";\nimport type { NodeProps } from \"@xyflow/react\";\nimport type { FlowNode } from \"../../types\";\nimport { NodeShell } from \"./NodeShell\";\n\n/** General-purpose work node — inputs and outputs. */\nfunction ActionNodeInner(props: NodeProps<FlowNode>) {\n return <NodeShell node={props} accent=\"#3b82f6\" tag=\"ACTION\" icon=\"▸\" />;\n}\nexport const ActionNode = memo(ActionNodeInner);\n","import { memo } from \"react\";\nimport type { NodeProps } from \"@xyflow/react\";\nimport type { FlowNode, PortDescriptor } from \"../../types\";\nimport { NodeShell } from \"./NodeShell\";\n\nconst DEFAULT_BRANCHES: PortDescriptor[] = [\n { id: \"true\", label: \"true\" },\n { id: \"false\", label: \"false\" },\n];\n\n/** Branching node — multiple typed outputs, one input. */\nfunction DecisionNodeInner(props: NodeProps<FlowNode>) {\n // If the host hasn't customised outputs, default to a true/false split.\n if (!props.data.outputs) {\n props = { ...props, data: { ...props.data, outputs: DEFAULT_BRANCHES } };\n }\n return <NodeShell node={props} accent=\"#f59e0b\" tag=\"DECISION\" icon=\"◇\" />;\n}\nexport const DecisionNode = memo(DecisionNodeInner);\n","import { memo } from \"react\";\nimport type { NodeProps } from \"@xyflow/react\";\nimport type { FlowNode } from \"../../types\";\nimport { NodeShell } from \"./NodeShell\";\n\n/** Terminal node — receives the workflow's final result; no outputs. */\nfunction OutputNodeInner(props: NodeProps<FlowNode>) {\n return <NodeShell node={props} accent=\"#a855f7\" tag=\"OUTPUT\" icon=\"●\" showOutputs={false} />;\n}\nexport const OutputNode = memo(OutputNodeInner);\n","import { memo } from \"react\";\nimport type { NodeProps } from \"@xyflow/react\";\nimport type { FlowNode, SubgraphNodeData } from \"../../types\";\nimport { NodeShell } from \"./NodeShell\";\n\n/**\n * SubgraphNode — collapses a group of nodes behind a single facade with\n * inputs and outputs that map to the inner graph's boundary ports. The\n * runtime treats it like an action node: when running, it dispatches to\n * the registered \"subgraph\" executor (host decides expand vs inline).\n *\n * v0.1 just renders the facade. Expand/collapse interactions and inner-\n * graph editing are deferred — host apps can implement those by toggling\n * `data.collapsed` and rendering a nested <FlowCanvas> when expanded.\n */\nfunction SubgraphNodeInner(props: NodeProps<FlowNode>) {\n const data = props.data as SubgraphNodeData;\n const childCount = data.childIds?.length ?? 0;\n return (\n <NodeShell node={props} accent=\"#0ea5e9\" tag=\"SUBGRAPH\" icon=\"❐\">\n <div className=\"ff-subgraph__meta\">\n <span>{childCount} node{childCount === 1 ? \"\" : \"s\"}</span>\n <span>{data.collapsed === false ? \"expanded\" : \"collapsed\"}</span>\n </div>\n </NodeShell>\n );\n}\nexport const SubgraphNode = memo(SubgraphNodeInner);\n","import type { NodeTypes } from \"@xyflow/react\";\nimport { TriggerNode } from \"./TriggerNode\";\nimport { ActionNode } from \"./ActionNode\";\nimport { DecisionNode } from \"./DecisionNode\";\nimport { OutputNode } from \"./OutputNode\";\nimport { NoteNode } from \"./NoteNode\";\nimport { SubgraphNode } from \"./SubgraphNode\";\n\nexport { TriggerNode, ActionNode, DecisionNode, OutputNode, NoteNode, SubgraphNode };\nexport { LaneNode } from \"./LaneNode\";\nexport { NodeShell, type NodeShellProps } from \"./NodeShell\";\n\n/**\n * Default xyflow `nodeTypes` map covering the kit. Spread into your own:\n *\n * <FlowCanvas nodeTypes={{ ...defaultNodeTypes, custom: MyNode }} ... />\n */\nexport const defaultNodeTypes: NodeTypes = {\n trigger: TriggerNode,\n action: ActionNode,\n decision: DecisionNode,\n output: OutputNode,\n note: NoteNode,\n subgraph: SubgraphNode,\n};\n","import { reconnectEdge as xyReconnectEdge, type Connection, type Edge } from \"@xyflow/react\";\nimport type { FlowGraph, FlowNode } from \"../../types\";\n\n/**\n * Remove nodes AND every edge attached to them.\n *\n * Deleting a node without pruning its edges leaves danglers that point at\n * nothing — they survive a round-trip through the schema and blow up the\n * runner, so the two always move together.\n */\nexport function removeNodes(graph: FlowGraph, ids: string[]): FlowGraph {\n if (ids.length === 0) return graph;\n const doomed = new Set(ids);\n\n return {\n nodes: graph.nodes.filter((n) => !doomed.has(n.id)),\n edges: graph.edges.filter((e) => !doomed.has(e.source) && !doomed.has(e.target)),\n };\n}\n\n/** Remove edges by id, leaving nodes untouched. */\nexport function removeEdges(edges: Edge[], ids: string[]): Edge[] {\n if (ids.length === 0) return edges;\n const doomed = new Set(ids);\n\n return edges.filter((e) => !doomed.has(e.id));\n}\n\n/**\n * Set (or clear) an edge's label.\n *\n * An empty/whitespace label is removed rather than stored as `\"\"` — xyflow\n * renders an empty label as an empty chip on the wire, and a blank key would\n * survive export into the workflow schema.\n */\nexport function setEdgeLabel(edges: Edge[], id: string, label: string | undefined): Edge[] {\n const next = label?.trim();\n return edges.map((e) => {\n if (e.id !== id) return e;\n if (!next) {\n const { label: _drop, ...rest } = e;\n return rest as Edge;\n }\n return { ...e, label: next };\n });\n}\n\n/** Copy a node with a fresh id, offset so it doesn't sit exactly on top. */\nexport function duplicateNode(node: FlowNode, id: string, offset = 40): FlowNode {\n return {\n ...node,\n id,\n position: { x: node.position.x + offset, y: node.position.y + offset },\n // Deep copy so the clone's config edits don't mutate the original.\n data: JSON.parse(JSON.stringify(node.data ?? {})),\n } as FlowNode;\n}\n\n/**\n * Clone a set of nodes AND the edges internal to that set, remapping every id.\n * This is the piece `duplicateNode` lacks: a copy/paste (or duplicate-selection)\n * that preserves the wiring *between* the copied nodes. Edges with an endpoint\n * outside the set are dropped (they'd dangle). A `parentId` pointing inside the\n * set is remapped; one pointing outside is detached.\n */\nexport function cloneSubgraph(\n nodes: FlowNode[],\n edges: Edge[],\n opts: { makeId: () => string; offset?: number },\n): { nodes: FlowNode[]; edges: Edge[]; idMap: Map<string, string> } {\n const offset = opts.offset ?? 40;\n const idMap = new Map<string, string>();\n for (const n of nodes) idMap.set(n.id, opts.makeId());\n\n const clonedNodes = nodes.map((n) => {\n const cloned = duplicateNode(n, idMap.get(n.id)!, offset) as any;\n const parentId = (n as any).parentId;\n if (parentId && idMap.has(parentId)) cloned.parentId = idMap.get(parentId);\n else if (parentId) delete cloned.parentId;\n return cloned as FlowNode;\n });\n\n const clonedEdges = edges\n .filter((e) => idMap.has(e.source) && idMap.has(e.target))\n .map((e) => ({ ...e, id: opts.makeId(), source: idMap.get(e.source)!, target: idMap.get(e.target)! }));\n\n return { nodes: clonedNodes, edges: clonedEdges, idMap };\n}\n\n/**\n * Rewire one edge's endpoint(s) — wraps xyflow's `reconnectEdge`. Keeps the\n * edge's id (`shouldReplaceId: false`) so its label and identity survive the\n * rewire instead of being regenerated from the new endpoints.\n */\nexport function reconnectEdge(edges: Edge[], oldEdge: Edge, newConnection: Connection): Edge[] {\n return xyReconnectEdge(oldEdge, newConnection, edges, { shouldReplaceId: false });\n}\n\nexport type AlignEdge = \"left\" | \"hcenter\" | \"right\" | \"top\" | \"vcenter\" | \"bottom\";\n\nconst nodeW = (n: FlowNode): number => (n as any).width ?? (n as any).measured?.width ?? 0;\nconst nodeH = (n: FlowNode): number => (n as any).height ?? (n as any).measured?.height ?? 0;\n\n/** Align a selection to a shared edge/center of its bounding box. */\nexport function alignNodes(nodes: FlowNode[], edge: AlignEdge): FlowNode[] {\n if (nodes.length < 2) return nodes;\n const minL = Math.min(...nodes.map((n) => n.position.x));\n const maxR = Math.max(...nodes.map((n) => n.position.x + nodeW(n)));\n const minT = Math.min(...nodes.map((n) => n.position.y));\n const maxB = Math.max(...nodes.map((n) => n.position.y + nodeH(n)));\n const cx = (minL + maxR) / 2;\n const cy = (minT + maxB) / 2;\n return nodes.map((n) => {\n let { x, y } = n.position;\n if (edge === \"left\") x = minL;\n else if (edge === \"right\") x = maxR - nodeW(n);\n else if (edge === \"hcenter\") x = cx - nodeW(n) / 2;\n else if (edge === \"top\") y = minT;\n else if (edge === \"bottom\") y = maxB - nodeH(n);\n else if (edge === \"vcenter\") y = cy - nodeH(n) / 2;\n return { ...n, position: { x, y } };\n });\n}\n\n/**\n * Order nodes so every parent precedes its children — xyflow misrenders (and\n * warns) when a child appears before its `parentId` in the array. Stable\n * otherwise. Apply at the render boundary once grouping is in play.\n */\nexport function sortNodesParentFirst<T extends { id: string; parentId?: string }>(nodes: T[]): T[] {\n const byId = new Map(nodes.map((n) => [n.id, n] as const));\n const seen = new Set<string>();\n const out: T[] = [];\n const visit = (n: T) => {\n if (seen.has(n.id)) return;\n const pid = (n as any).parentId as string | undefined;\n if (pid && byId.has(pid) && !seen.has(pid)) visit(byId.get(pid)!);\n seen.add(n.id);\n out.push(n);\n };\n for (const n of nodes) visit(n);\n return out;\n}\n\n/** Absolute position of a node, accounting for one level of parent nesting. */\nfunction absolutePosition(node: FlowNode, nodes: FlowNode[]): { x: number; y: number } {\n const pid = (node as any).parentId as string | undefined;\n if (!pid) return node.position;\n const parent = nodes.find((n) => n.id === pid);\n return parent ? { x: node.position.x + parent.position.x, y: node.position.y + parent.position.y } : node.position;\n}\n\n/**\n * Put a node inside a lane/container: set `parentId` + `extent:'parent'` and\n * convert its position to be relative to the lane. Idempotent-safe; a no-op if\n * either id is missing or they're the same node.\n */\nexport function assignToLane(nodes: FlowNode[], nodeId: string, laneId: string): FlowNode[] {\n if (nodeId === laneId) return nodes;\n const node = nodes.find((n) => n.id === nodeId);\n const lane = nodes.find((n) => n.id === laneId);\n if (!node || !lane) return nodes;\n const abs = absolutePosition(node, nodes);\n const laneAbs = absolutePosition(lane, nodes);\n const rel = { x: abs.x - laneAbs.x, y: abs.y - laneAbs.y };\n return nodes.map((n) => (n.id === nodeId ? ({ ...n, parentId: laneId, extent: \"parent\", position: rel } as FlowNode) : n));\n}\n\n/** Take a node out of its lane: drop `parentId`/`extent`, restore absolute position. */\nexport function removeFromLane(nodes: FlowNode[], nodeId: string): FlowNode[] {\n const node = nodes.find((n) => n.id === nodeId);\n if (!node || !(node as any).parentId) return nodes;\n const abs = absolutePosition(node, nodes);\n return nodes.map((n) => {\n if (n.id !== nodeId) return n;\n const { parentId: _p, extent: _e, ...rest } = n as any;\n return { ...rest, position: abs } as FlowNode;\n });\n}\n\n/**\n * Stack lanes into contiguous rows (horizontal) or columns (vertical) — the\n * \"fixed rows/columns\" behavior. `isLane` picks which nodes are lanes; they're\n * ordered by their current cross-axis position and repacked from the first\n * lane's origin. Each lane keeps its own size (independently resizable).\n */\nexport function stackLanes(\n nodes: FlowNode[],\n isLane: (n: FlowNode) => boolean,\n opts: { orientation?: \"horizontal\" | \"vertical\"; gap?: number } = {},\n): FlowNode[] {\n const orientation = opts.orientation ?? \"horizontal\";\n const gap = opts.gap ?? 12;\n const vertical = orientation === \"vertical\";\n const lanes = nodes.filter(isLane).sort((a, b) => (vertical ? a.position.x - b.position.x : a.position.y - b.position.y));\n if (lanes.length === 0) return nodes;\n const originX = lanes[0].position.x;\n const originY = lanes[0].position.y;\n const moves = new Map<string, { x: number; y: number }>();\n let cursor = vertical ? originX : originY;\n for (const lane of lanes) {\n moves.set(lane.id, vertical ? { x: cursor, y: originY } : { x: originX, y: cursor });\n cursor += (vertical ? ((lane as any).width ?? 320) : ((lane as any).height ?? 160)) + gap;\n }\n return nodes.map((n) => (moves.has(n.id) ? { ...n, position: moves.get(n.id)! } : n));\n}\n\n/** Evenly distribute a selection's gaps along an axis (needs 3+ nodes). */\nexport function distributeNodes(nodes: FlowNode[], axis: \"h\" | \"v\"): FlowNode[] {\n if (nodes.length < 3) return nodes;\n const size = (n: FlowNode) => (axis === \"h\" ? nodeW(n) : nodeH(n));\n const coord = (n: FlowNode) => (axis === \"h\" ? n.position.x : n.position.y);\n const sorted = [...nodes].sort((a, b) => coord(a) - coord(b));\n const start = coord(sorted[0]);\n const last = sorted[sorted.length - 1];\n const end = coord(last) + size(last);\n const totalSize = sorted.reduce((s, n) => s + size(n), 0);\n const gap = (end - start - totalSize) / (sorted.length - 1);\n const posById = new Map<string, number>();\n let cursor = start;\n for (const n of sorted) {\n posById.set(n.id, cursor);\n cursor += size(n) + gap;\n }\n return nodes.map((n) => {\n const p = posById.get(n.id)!;\n return { ...n, position: axis === \"h\" ? { ...n.position, x: p } : { ...n.position, y: p } };\n });\n}\n","import type { FlowNode } from \"../../types\";\n\nexport type HelperLineChange = { id: string; position?: { x: number; y: number } };\n\nexport type HelperLinesResult = {\n /** Y of a horizontal guide line (flow coords), if the drag aligns on Y. */\n horizontal?: number;\n /** X of a vertical guide line (flow coords), if the drag aligns on X. */\n vertical?: number;\n /** The snapped position to apply to the dragged node. */\n snapPosition: { x?: number; y?: number };\n};\n\nconst w = (n: FlowNode): number => (n as any).width ?? (n as any).measured?.width ?? 0;\nconst h = (n: FlowNode): number => (n as any).height ?? (n as any).measured?.height ?? 0;\n\n/**\n * Compute alignment guide lines (and a snapped position) for a node being\n * dragged to `change.position`, against the other nodes. Standard \"helper\n * lines\" algorithm: match the dragged node's left/right/top/bottom edges to any\n * other node's edges within `distance`, snapping to the nearest. Pure + testable.\n */\nexport function getHelperLines(change: HelperLineChange, nodes: FlowNode[], distance = 6): HelperLinesResult {\n const result: HelperLinesResult = { snapPosition: { x: undefined, y: undefined } };\n const a = nodes.find((n) => n.id === change.id);\n if (!a || !change.position) return result;\n\n const A = {\n left: change.position.x,\n right: change.position.x + w(a),\n top: change.position.y,\n bottom: change.position.y + h(a),\n width: w(a),\n height: h(a),\n };\n let vDist = distance;\n let hDist = distance;\n\n for (const b of nodes) {\n if (b.id === a.id) continue;\n const B = { left: b.position.x, right: b.position.x + w(b), top: b.position.y, bottom: b.position.y + h(b) };\n\n // Vertical guides (X alignment).\n const ll = Math.abs(A.left - B.left);\n if (ll < vDist) { result.snapPosition.x = B.left; result.vertical = B.left; vDist = ll; }\n const rr = Math.abs(A.right - B.right);\n if (rr < vDist) { result.snapPosition.x = B.right - A.width; result.vertical = B.right; vDist = rr; }\n const lr = Math.abs(A.left - B.right);\n if (lr < vDist) { result.snapPosition.x = B.right; result.vertical = B.right; vDist = lr; }\n const rl = Math.abs(A.right - B.left);\n if (rl < vDist) { result.snapPosition.x = B.left - A.width; result.vertical = B.left; vDist = rl; }\n\n // Horizontal guides (Y alignment).\n const tt = Math.abs(A.top - B.top);\n if (tt < hDist) { result.snapPosition.y = B.top; result.horizontal = B.top; hDist = tt; }\n const bb = Math.abs(A.bottom - B.bottom);\n if (bb < hDist) { result.snapPosition.y = B.bottom - A.height; result.horizontal = B.bottom; hDist = bb; }\n const tb = Math.abs(A.top - B.bottom);\n if (tb < hDist) { result.snapPosition.y = B.bottom; result.horizontal = B.bottom; hDist = tb; }\n const bt = Math.abs(A.bottom - B.top);\n if (bt < hDist) { result.snapPosition.y = B.top - A.height; result.horizontal = B.top; hDist = bt; }\n }\n\n return result;\n}\n","import { ViewportPortal } from \"@xyflow/react\";\n\n/**\n * HelperLines — alignment guides drawn during a drag. Rendered in flow\n * coordinate space (ViewportPortal), so the lines track pan/zoom. Positions come\n * from `getHelperLines`.\n */\nexport function HelperLines({ horizontal, vertical }: { horizontal?: number; vertical?: number }) {\n if (horizontal === undefined && vertical === undefined) return null;\n return (\n <ViewportPortal>\n {vertical !== undefined && (\n <div\n className=\"ff-helper-line\"\n style={{ position: \"absolute\", transform: `translateX(${vertical}px)`, top: -5000, height: 10000, width: 1, pointerEvents: \"none\" }}\n />\n )}\n {horizontal !== undefined && (\n <div\n className=\"ff-helper-line\"\n style={{ position: \"absolute\", transform: `translateY(${horizontal}px)`, left: -5000, width: 10000, height: 1, pointerEvents: \"none\" }}\n />\n )}\n </ViewportPortal>\n );\n}\n","import {\n type CSSProperties,\n type ReactNode,\n type WheelEvent as ReactWheelEvent,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport {\n ReactFlow,\n Background,\n BackgroundVariant,\n Controls,\n MiniMap,\n type DefaultEdgeOptions,\n type Edge,\n type EdgeTypes,\n type FitViewOptions,\n type NodeTypes,\n type ReactFlowProps,\n} from \"@xyflow/react\";\nimport \"@xyflow/react/dist/style.css\";\nimport { defaultNodeTypes } from \"../nodes\";\nimport { createConnectionValidator, type ConnectionValidatorOptions } from \"../../registry/connection\";\nimport { sortNodesParentFirst } from \"../FlowEditor/graph-ops\";\nimport { getHelperLines } from \"./helper-lines\";\nimport { HelperLines } from \"./HelperLines\";\nimport type { FlowNode } from \"../../types\";\n\n/**\n * With wheel-zoom off, Shift+wheel still zooms — and must not ALSO scroll the\n * page while it does. React Flow's own `preventScrolling` is all-or-nothing, so\n * the modifier case is handled here: swallow the gesture that zooms, leave the\n * one that doesn't alone.\n *\n * Capture phase, so it lands before React Flow's own wheel handling.\n */\nfunction preventScrollWhileZooming(event: ReactWheelEvent<HTMLDivElement>): void {\n if (event.shiftKey) event.preventDefault();\n}\n\n/**\n * The three React Flow props that together decide what the wheel does.\n *\n * Extracted because they only make sense as a set, and getting the set wrong is\n * invisible in a screenshot: the canvas looks fine and feels broken. This is\n * the unit worth testing — mounting a canvas to assert it would be testing\n * d3-zoom through jsdom.\n *\n * - **on** (default): no modifier needed, and the page never scrolls under a\n * wheel that is zooming.\n * - **off**: zoom moves to Shift+wheel and the bare wheel goes back to the\n * page. `preventScrolling` alone cannot express that — left true it swallows\n * the bare wheel (page frozen, nothing zooms), left false it lets Shift+wheel\n * zoom *and* scroll at once — so the handler covers the modifier case.\n */\nexport function wheelZoomProps(zoomOnWheel: boolean): {\n zoomActivationKeyCode: string | null;\n preventScrolling: boolean;\n onWheelCapture?: (event: ReactWheelEvent<HTMLDivElement>) => void;\n} {\n return zoomOnWheel\n ? { zoomActivationKeyCode: null, preventScrolling: true }\n : {\n zoomActivationKeyCode: \"Shift\",\n preventScrolling: false,\n onWheelCapture: preventScrollWhileZooming,\n };\n}\n\nexport type FlowCanvasProps = Omit<ReactFlowProps<FlowNode, Edge>, \"nodes\" | \"edges\" | \"height\"> & {\n nodes: FlowNode[];\n edges: Edge[];\n /** Background variant. Default: \"dots\". */\n background?: BackgroundVariant | \"none\";\n /** Show pan/zoom/fit controls. Default true. */\n showControls?: boolean;\n /** Show minimap. Default false (turn on for big graphs). */\n showMinimap?: boolean;\n /** Pixel height; FlowCanvas expects a sized container. Default 600. */\n height?: number | string;\n /**\n * Enforce port-type compatibility on new connections. `true` (default) uses\n * the built-in validator: a connection is refused only when both ports\n * declare a concrete, differing `type` (so untyped graphs are unaffected),\n * and self-loops are blocked. Pass options to tune the rule, or `false` to\n * disable. An `isValidConnection` you pass yourself always takes precedence.\n */\n validateConnections?: boolean | ConnectionValidatorOptions;\n /** Show alignment guide lines while dragging, and snap to them. Default off. */\n showHelperLines?: boolean;\n /**\n * A bare mouse wheel over the canvas zooms it. Default **true**.\n *\n * Turn it off for a canvas embedded mid-page, where a reader scrolling past\n * would otherwise get trapped zooming. With it off the wheel scrolls the page\n * and **Shift+wheel** zooms instead.\n *\n * Either way, a wheel gesture that zooms never also scrolls the page — the\n * two happening at once is the thing that makes an embedded canvas feel\n * broken.\n */\n zoomOnWheel?: boolean;\n /** Optional toolbar / palette etc. rendered above the canvas. */\n toolbar?: ReactNode;\n className?: string;\n style?: CSSProperties;\n};\n\nconst DEFAULT_FIT_VIEW: FitViewOptions = { padding: 0.2 };\nconst DEFAULT_EDGE_OPTIONS: DefaultEdgeOptions = {\n type: \"smoothstep\",\n animated: false,\n};\n\n/**\n * FlowCanvas — themed React Flow surface with the kit's nodes registered\n * by default. Pass your own `nodeTypes` to extend; the kit's defaults are\n * merged behind yours.\n *\n * Hosts wire `onNodesChange` / `onEdgesChange` / `onConnect` themselves\n * (xyflow's standard pattern). The surrounding `useFlowState` hook in\n * `runtime/use-flow-state.ts` is a convenience that wires those for you.\n */\nexport function FlowCanvas({\n nodes,\n edges,\n background = BackgroundVariant.Dots,\n showControls = true,\n showMinimap = false,\n height = 600,\n validateConnections = true,\n isValidConnection,\n colorMode,\n showHelperLines = false,\n zoomOnWheel = true,\n onNodesChange,\n toolbar,\n nodeTypes,\n edgeTypes,\n className,\n style,\n ...rest\n}: FlowCanvasProps) {\n const mergedNodeTypes = useMemo<NodeTypes>(\n () => ({ ...defaultNodeTypes, ...(nodeTypes ?? {}) }),\n [nodeTypes],\n );\n\n // Read nodes live through a ref so the validator (built once) always sees the\n // current graph without being rebuilt on every node change.\n const nodesRef = useRef(nodes);\n nodesRef.current = nodes;\n const builtinValidator = useMemo(\n () =>\n validateConnections === false\n ? undefined\n : createConnectionValidator(\n () => nodesRef.current,\n validateConnections === true ? undefined : validateConnections,\n ),\n [validateConnections],\n );\n // A caller-supplied predicate wins; otherwise fall back to port-type validation.\n const resolvedIsValidConnection = isValidConnection ?? builtinValidator;\n\n const mergedEdgeTypes = useMemo<EdgeTypes | undefined>(\n () => (edgeTypes ? { ...edgeTypes } : undefined),\n [edgeTypes],\n );\n\n // xyflow requires a parent node to precede its children in the array; grouping\n // (swimlanes) can produce any order, so normalize it here at the boundary.\n const orderedNodes = useMemo(() => sortNodesParentFirst(nodes), [nodes]);\n\n // Helper lines: on a single-node drag, snap to aligned edges + show guides.\n const [helperLines, setHelperLines] = useState<{ horizontal?: number; vertical?: number }>({});\n const handleNodesChange = useCallback(\n (changes: any[]) => {\n if (showHelperLines) {\n const pos = changes.filter((c) => c.type === \"position\" && c.position);\n if (pos.length === 1 && pos[0].dragging) {\n const lines = getHelperLines(pos[0], nodesRef.current);\n if (lines.snapPosition.x !== undefined) pos[0].position.x = lines.snapPosition.x;\n if (lines.snapPosition.y !== undefined) pos[0].position.y = lines.snapPosition.y;\n setHelperLines({ horizontal: lines.horizontal, vertical: lines.vertical });\n } else {\n setHelperLines({});\n }\n }\n onNodesChange?.(changes as any);\n },\n [showHelperLines, onNodesChange],\n );\n\n return (\n <div\n className={[\n \"ff-canvas\",\n // colorMode drives BOTH react-flow's chrome (below) and our `ff-` styles\n // via the shared `.dark` class / light opt-out — one theme signal.\n colorMode === \"dark\" ? \"dark\" : \"\",\n colorMode === \"light\" ? \"ff-canvas--light\" : \"\",\n className ?? \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n style={{ height, ...style }}\n >\n {toolbar && <div className=\"ff-canvas__toolbar\">{toolbar}</div>}\n <div className=\"ff-canvas__surface\">\n <ReactFlow\n nodes={orderedNodes}\n edges={edges}\n onNodesChange={handleNodesChange}\n colorMode={colorMode}\n nodeTypes={mergedNodeTypes}\n edgeTypes={mergedEdgeTypes}\n fitView\n fitViewOptions={DEFAULT_FIT_VIEW}\n defaultEdgeOptions={DEFAULT_EDGE_OPTIONS}\n proOptions={{ hideAttribution: true }}\n // Wheel zooms by default; `zoomOnWheel={false}` moves that onto\n // Shift+wheel and gives the bare wheel back to the page. The three\n // props only make sense as a set — see wheelZoomProps.\n {...wheelZoomProps(zoomOnWheel)}\n isValidConnection={resolvedIsValidConnection}\n {...rest}\n >\n {background !== \"none\" && (\n <Background variant={background as BackgroundVariant} gap={20} size={1} color=\"rgba(0,0,0,0.18)\" />\n )}\n {showControls && <Controls className=\"ff-controls\" position=\"bottom-right\" />}\n {showMinimap && <MiniMap className=\"ff-minimap\" pannable zoomable />}\n {showHelperLines && <HelperLines horizontal={helperLines.horizontal} vertical={helperLines.vertical} />}\n </ReactFlow>\n </div>\n </div>\n );\n}\n","import { useMemo, type CSSProperties, type ReactNode } from \"react\";\nimport { FlowCanvas } from \"../canvas\";\nimport { buildNodeTypes } from \"../../registry\";\nimport { categoryAccent, getNodeKind } from \"../../registry/registry\";\nimport type { FlowGraph, FlowNode } from \"../../types\";\n\n/** Outcome of one node in a run, for annotating the graph after the fact. */\nexport type FlowNodeStatus = \"ok\" | \"running\" | \"failed\" | \"skipped\" | \"pending\";\n\nexport interface FlowViewerClassNames {\n root?: string;\n list?: string;\n row?: string;\n rowIndex?: string;\n rowTitle?: string;\n rowDescription?: string;\n rowStatus?: string;\n}\n\nexport interface FlowViewerProps {\n /** The graph to show. */\n graph: FlowGraph;\n /**\n * `canvas` draws the graph. `list` renders the nodes as rows — for a docs\n * page, a narrow column, print, or an audit view, where a pan-zoom surface is\n * the wrong shape and often not usable at all.\n */\n variant?: \"canvas\" | \"list\";\n /** Canvas height. Ignored by `list`. Default 480. */\n height?: number | string;\n /** Canvas minimap. Default false. */\n showMinimap?: boolean;\n /** Canvas pan/zoom/fit controls. Default true. */\n showControls?: boolean;\n /**\n * Per-node run outcome, keyed by node id. Lets the same component serve\n * \"here is the workflow\" and \"here is what happened on Tuesday\".\n */\n statuses?: Record<string, FlowNodeStatus>;\n /** Controlled selection. */\n selectedNodeId?: string | null;\n /** Omit and nothing is clickable — a viewer with no handler is inert. */\n onSelectNode?: (node: FlowNode) => void;\n className?: string;\n classNames?: FlowViewerClassNames;\n style?: CSSProperties;\n /** Rendered when the graph has no nodes. */\n empty?: ReactNode;\n}\n\nconst STATUS_LABEL: Record<FlowNodeStatus, string> = {\n ok: \"ok\",\n running: \"running\",\n failed: \"failed\",\n skipped: \"skipped\",\n pending: \"pending\",\n};\n\n/**\n * FlowViewer — a workflow, read-only.\n *\n * **Read-only by construction, not by configuration.** There is no prop that\n * makes this editable, because a viewer that can be switched into an editor is\n * a viewer somebody eventually switches into an editor by accident. Before this\n * existed the only way to show a flow was `FlowEditor` (the whole editor) or\n * `FlowCanvas` plus four React Flow flags a consumer had to know to pass —\n * assembly, not an affordance, and nothing stopped the next person shipping a\n * fully editable canvas where they wanted a picture.\n *\n * Node titles come from the registry, so `overrideNodeKind()` renames apply\n * here too.\n */\nexport function FlowViewer({\n graph,\n variant = \"canvas\",\n height = 480,\n showMinimap = false,\n showControls = true,\n statuses,\n selectedNodeId = null,\n onSelectNode,\n className,\n classNames = {},\n style,\n empty,\n}: FlowViewerProps) {\n const nodeTypes = useMemo(() => buildNodeTypes(), []);\n\n const rows = useMemo(\n () =>\n graph.nodes.map((node, index) => {\n const kind = getNodeKind(node.data?.kind ?? node.type ?? \"\");\n return {\n node,\n index,\n title: kind?.label ?? node.data?.label ?? node.data?.kind ?? node.id,\n description: kind?.description ?? null,\n accent: kind?.accent ?? categoryAccent(kind?.category ?? \"custom\"),\n status: statuses?.[node.id] ?? null,\n };\n }),\n [graph.nodes, statuses],\n );\n\n if (graph.nodes.length === 0) {\n return (\n <div className={cx(\"ff-viewer ff-viewer--empty\", className, classNames.root)} style={style}>\n {empty ?? <span className=\"ff-viewer__empty\">This flow has no nodes.</span>}\n </div>\n );\n }\n\n if (variant === \"list\") {\n return (\n <div\n className={cx(\"ff-viewer ff-viewer--list\", className, classNames.root)}\n style={style}\n data-flow-viewer=\"list\"\n >\n <ol className={cx(\"ff-viewer__list\", classNames.list)}>\n {rows.map(({ node, index, title, description, accent, status }) => {\n const selected = node.id === selectedNodeId;\n const Row = onSelectNode ? \"button\" : \"div\";\n\n return (\n <li key={node.id}>\n <Row\n {...(onSelectNode\n ? { type: \"button\" as const, onClick: () => onSelectNode(node) }\n : {})}\n className={cx(\n \"ff-viewer__row\",\n selected && \"ff-viewer__row--selected\",\n onSelectNode && \"ff-viewer__row--interactive\",\n classNames.row,\n )}\n data-flow-viewer-node={node.id}\n data-flow-viewer-status={status ?? undefined}\n aria-current={selected || undefined}\n >\n <span\n className={cx(\"ff-viewer__index\", classNames.rowIndex)}\n style={{ backgroundColor: accent }}\n aria-hidden\n >\n {index + 1}\n </span>\n\n <span className=\"ff-viewer__body\">\n <span className={cx(\"ff-viewer__title\", classNames.rowTitle)}>{title}</span>\n {description && (\n <span className={cx(\"ff-viewer__desc\", classNames.rowDescription)}>\n {description}\n </span>\n )}\n </span>\n\n {status && (\n <span\n className={cx(\n \"ff-viewer__status\",\n `ff-viewer__status--${status}`,\n classNames.rowStatus,\n )}\n >\n {STATUS_LABEL[status]}\n </span>\n )}\n </Row>\n </li>\n );\n })}\n </ol>\n </div>\n );\n }\n\n return (\n <div\n className={cx(\"ff-viewer ff-viewer--canvas\", className, classNames.root)}\n style={style}\n data-flow-viewer=\"canvas\"\n >\n <FlowCanvas\n nodes={graph.nodes}\n edges={graph.edges}\n nodeTypes={nodeTypes}\n height={height}\n showControls={showControls}\n showMinimap={showMinimap}\n // The read-only contract. Every mutation path React Flow offers is\n // closed here rather than left to the caller to remember.\n nodesDraggable={false}\n nodesConnectable={false}\n nodesFocusable={Boolean(onSelectNode)}\n edgesFocusable={false}\n elementsSelectable={Boolean(onSelectNode)}\n deleteKeyCode={null}\n selectionKeyCode={null}\n multiSelectionKeyCode={null}\n connectOnClick={false}\n // A canvas embedded mid-page must not trap a reader's scroll.\n zoomOnScroll={false}\n onNodeClick={onSelectNode ? (_, node) => onSelectNode(node as FlowNode) : undefined}\n fitView\n />\n </div>\n );\n}\n\nfunction cx(...parts: Array<string | false | null | undefined>): string {\n return parts.filter(Boolean).join(\" \");\n}\n"]}
|