@particle-academy/fancy-flow 0.22.0 → 0.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-ZB4HHQMR.js → chunk-OWENS2H5.js} +11 -3
- package/dist/chunk-OWENS2H5.js.map +1 -0
- package/dist/{chunk-YZTBRXBZ.js → chunk-QAA4CA22.js} +8 -4
- package/dist/chunk-QAA4CA22.js.map +1 -0
- package/dist/{chunk-O7F6SGV4.js → chunk-ZS6DVGB3.js} +17 -5
- package/dist/chunk-ZS6DVGB3.js.map +1 -0
- package/dist/engine.js +1 -1
- package/dist/index.cjs +2409 -525
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +15 -5
- package/dist/index.d.ts +15 -5
- package/dist/index.js +182 -37
- package/dist/index.js.map +1 -1
- package/dist/layout/index.d.cts +30 -0
- package/dist/layout/index.d.ts +30 -0
- package/dist/layout.cjs +1693 -0
- package/dist/layout.cjs.map +1 -0
- package/dist/layout.js +1691 -0
- package/dist/layout.js.map +1 -0
- package/dist/registry/index.d.cts +2 -2
- package/dist/registry/index.d.ts +2 -2
- package/dist/registry.cjs +4 -0
- package/dist/registry.cjs.map +1 -1
- package/dist/registry.js +3 -3
- package/dist/runtime/index.d.cts +13 -1
- package/dist/runtime/index.d.ts +13 -1
- package/dist/runtime.cjs +13 -1
- package/dist/runtime.cjs.map +1 -1
- package/dist/runtime.js +2 -2
- package/dist/styles.css +20 -0
- package/dist/styles.css.map +1 -1
- package/dist/{types-DneUoivl.d.cts → types-BekE5JTG.d.cts} +7 -0
- package/dist/{types-CFEtuRWJ.d.ts → types-DwRpXXNy.d.ts} +7 -0
- package/dist/ux.d.cts +1 -1
- package/dist/ux.d.ts +1 -1
- package/package.json +12 -1
- package/dist/chunk-O7F6SGV4.js.map +0 -1
- package/dist/chunk-YZTBRXBZ.js.map +0 -1
- package/dist/chunk-ZB4HHQMR.js.map +0 -1
package/dist/runtime.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { applyStatusesToNodes, createHistory, useFlowHistory, useFlowRun, useFlowState } from './chunk-
|
|
2
|
-
import './chunk-
|
|
1
|
+
export { applyOutputsToNodes, applyStatusesToNodes, createHistory, useFlowHistory, useFlowRun, useFlowState } from './chunk-ZS6DVGB3.js';
|
|
2
|
+
import './chunk-OWENS2H5.js';
|
|
3
3
|
export { runFlow } from './chunk-KDHLKBL2.js';
|
|
4
4
|
import './chunk-TITD5W4Y.js';
|
|
5
5
|
import './chunk-YXRLIV7A.js';
|
package/dist/styles.css
CHANGED
|
@@ -1586,6 +1586,26 @@ svg.react-flow__connectionline {
|
|
|
1586
1586
|
text-overflow: ellipsis;
|
|
1587
1587
|
white-space: nowrap;
|
|
1588
1588
|
}
|
|
1589
|
+
.ff-node__output {
|
|
1590
|
+
margin: 0;
|
|
1591
|
+
padding: 4px 10px 8px;
|
|
1592
|
+
font-size: 11px;
|
|
1593
|
+
font-family:
|
|
1594
|
+
ui-monospace,
|
|
1595
|
+
"SF Mono",
|
|
1596
|
+
Menlo,
|
|
1597
|
+
monospace;
|
|
1598
|
+
color: #059669;
|
|
1599
|
+
overflow: hidden;
|
|
1600
|
+
text-overflow: ellipsis;
|
|
1601
|
+
white-space: nowrap;
|
|
1602
|
+
}
|
|
1603
|
+
.dark .ff-node__output {
|
|
1604
|
+
color: #34d399;
|
|
1605
|
+
}
|
|
1606
|
+
.ff-helper-line {
|
|
1607
|
+
background: #3b82f6;
|
|
1608
|
+
}
|
|
1589
1609
|
.dark .ff-lane {
|
|
1590
1610
|
background: rgba(148, 163, 184, 0.08);
|
|
1591
1611
|
border-color: #3f3f46;
|
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 Dark mode honors both `.dark` ancestor (Tailwind class strategy) and OS\n `prefers-color-scheme: dark`. */\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. xyflow's JS is\n already bundled into our dist, so the consumer has no separate @xyflow/react to\n import its CSS from. */\n@import \"@xyflow/react/dist/style.css\";\n\n.ff-canvas {\n display: flex;\n flex-direction: column;\n border: 1px solid #e4e4e7;\n border-radius: 12px;\n overflow: hidden;\n background: white;\n}\n.dark .ff-canvas { background: #0a0a0a; border-color: #3f3f46; }\n@media (prefers-color-scheme: dark) {\n .ff-canvas:not(.ff-canvas--light) { background: #0a0a0a; border-color: #3f3f46; }\n}\n\n.ff-canvas__toolbar {\n border-bottom: 1px solid #e4e4e7;\n padding: 6px 8px;\n display: flex; gap: 6px; align-items: center;\n background: rgba(244, 244, 245, 0.6);\n font-family: ui-sans-serif, system-ui, sans-serif;\n font-size: 12px;\n}\n.dark .ff-canvas__toolbar { background: rgba(24, 24, 27, 0.6); border-color: #3f3f46; color: #e4e4e7; }\n@media (prefers-color-scheme: dark) {\n .ff-canvas__toolbar { background: rgba(24, 24, 27, 0.6); border-color: #3f3f46; color: #e4e4e7; }\n}\n.ff-canvas__surface { flex: 1; min-height: 0; position: relative; }\n\n/* xyflow background grid color override for dark canvas */\n.dark .react-flow__background pattern circle { fill: rgba(255, 255, 255, 0.10); }\n\n/* === Nodes === */\n.ff-node {\n min-width: 200px;\n max-width: 280px;\n background: white;\n border: 1px solid #d4d4d8;\n border-radius: 8px;\n font-family: ui-sans-serif, system-ui, sans-serif;\n font-size: 12px;\n color: #18181b;\n box-shadow: 0 1px 2px rgba(0,0,0,0.04), 0 4px 12px rgba(0,0,0,0.06);\n transition: box-shadow 200ms, border-color 200ms;\n overflow: hidden;\n}\n.dark .ff-node {\n background: #1c1917;\n color: #fafafa;\n border-color: #3f3f46;\n box-shadow: 0 1px 2px rgba(0,0,0,0.4), 0 6px 16px rgba(0,0,0,0.5);\n}\n@media (prefers-color-scheme: dark) {\n .ff-node { background: #1c1917; color: #fafafa; border-color: #3f3f46; box-shadow: 0 1px 2px rgba(0,0,0,0.4), 0 6px 16px rgba(0,0,0,0.5); }\n}\n.ff-node--selected {\n box-shadow: 0 0 0 2px currentColor, 0 4px 16px rgba(0,0,0,0.20);\n}\n\n.ff-node__header {\n display: flex; align-items: center; gap: 8px;\n padding: 7px 10px;\n color: white;\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.85;\n text-transform: uppercase;\n}\n.ff-node__label { flex: 1; font-size: 13px; }\n.ff-node__desc {\n margin: 0;\n padding: 8px 10px 0;\n font-size: 11px;\n color: #71717a;\n}\n.dark .ff-node__desc { color: #a1a1aa; }\n@media (prefers-color-scheme: dark) { .ff-node__desc { color: #a1a1aa; } }\n\n.ff-node__body { padding: 8px 10px 10px; }\n.ff-node__status-text {\n margin: 0;\n padding: 4px 10px 8px;\n font-size: 11px;\n color: #71717a;\n}\n.dark .ff-node__status-text { color: #a1a1aa; }\n@media (prefers-color-scheme: dark) { .ff-node__status-text { color: #a1a1aa; } }\n.ff-node--status-error .ff-node__status-text { color: #dc2626; }\n.dark .ff-node--status-error .ff-node__status-text { color: #f87171; }\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 rgba(59, 130, 246, 0.4), 0 4px 12px rgba(0,0,0,0.06); }\n 50% { box-shadow: 0 0 0 6px rgba(59, 130, 246, 0.05), 0 4px 12px rgba(0,0,0,0.06); }\n}\n\n/* Status dot in the header */\n.ff-node__dot {\n width: 8px; height: 8px; border-radius: 50%;\n background: rgba(255,255,255,0.5);\n}\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 {\n display: flex; justify-content: space-between;\n font-size: 11px; color: #71717a;\n}\n.dark .ff-subgraph__meta { color: #a1a1aa; }\n@media (prefers-color-scheme: dark) { .ff-subgraph__meta { color: #a1a1aa; } }\n\n/* Note node — no header chrome, sticky-style */\n.ff-note {\n background: #fef3c7;\n border: 1px solid rgba(0,0,0,0.06);\n border-radius: 6px;\n padding: 8px 10px;\n font-family: ui-sans-serif, system-ui, sans-serif;\n font-size: 12px;\n color: #1f2937;\n min-width: 180px;\n box-shadow: 0 1px 2px rgba(0,0,0,0.06), 0 4px 12px rgba(0,0,0,0.06);\n /* Pin to light text-on-yellow even in dark mode for readability */\n color-scheme: light;\n}\n.ff-note--selected { box-shadow: 0 0 0 2px #a855f7, 0 4px 12px rgba(0,0,0,0.2); }\n.ff-note__title { font-weight: 600; margin-bottom: 4px; }\n.ff-note__body { margin: 0; white-space: pre-wrap; }\n\n/* xyflow wraps every custom node in a `.react-flow__node-{type}` div with\n default border / background / box-shadow / padding. Our kit ships its\n own chrome via `.ff-node`, so strip xyflow's defaults for our types\n to avoid the white \"frame\" effect around the colored cards. */\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 — match accent + visible on both themes. */\n.react-flow__handle {\n width: 10px; height: 10px;\n background: white;\n border: 2px solid #94a3b8;\n border-radius: 50%;\n}\n.dark .react-flow__handle { background: #18181b; border-color: #71717a; }\n@media (prefers-color-scheme: dark) {\n .react-flow__handle { background: #18181b; border-color: #71717a; }\n}\n.react-flow__handle:hover { background: #3b82f6; border-color: #3b82f6; }\n\n/* xyflow edge color — softer in dark */\n.dark .react-flow__edge-path { stroke: #71717a; }\n@media (prefers-color-scheme: dark) {\n .react-flow__edge-path { stroke: #71717a; }\n}\n.react-flow__connection-path { stroke: #3b82f6; stroke-width: 2; }\n\n/* xyflow controls — bump specificity + !important so dark theming wins\n over xyflow's default stylesheet. */\n.dark .react-flow__controls,\n.react-flow__controls.ff-controls {\n background: transparent;\n box-shadow: none;\n}\n.dark .react-flow__controls .react-flow__controls-button {\n background: #18181b !important;\n border-color: #3f3f46 !important;\n border-bottom-color: #3f3f46 !important;\n color: #fafafa !important;\n}\n.dark .react-flow__controls .react-flow__controls-button:hover {\n background: #27272a !important;\n}\n.dark .react-flow__controls .react-flow__controls-button svg,\n.dark .react-flow__controls .react-flow__controls-button svg path,\n.dark .react-flow__controls .react-flow__controls-button svg polyline,\n.dark .react-flow__controls .react-flow__controls-button svg polygon {\n fill: currentColor !important;\n stroke: currentColor !important;\n}\n\n/* Run controls */\n.ff-run-controls { display: flex; gap: 6px; }\n.ff-run-controls__btn {\n border: 0; border-radius: 6px;\n padding: 6px 12px;\n font: inherit; font-size: 12px; font-weight: 500;\n cursor: pointer;\n background: #e4e4e7; color: #18181b;\n}\n.dark .ff-run-controls__btn { background: #27272a; color: #fafafa; }\n.ff-run-controls__btn--run { background: #10b981; color: white; }\n.dark .ff-run-controls__btn--run { background: #10b981; color: white; }\n.ff-run-controls__btn--cancel { background: #ef4444; color: white; }\n.ff-run-controls__btn:disabled { opacity: 0.5; cursor: default; }\n\n/* Run feed */\n.ff-run-feed {\n font-family: ui-monospace, monospace;\n font-size: 11px;\n background: #0a0a0a;\n color: #fafafa;\n border-radius: 8px;\n padding: 8px 10px;\n overflow: auto;\n max-height: 240px;\n border: 1px solid #1f1f23;\n}\n.ff-run-feed__empty { color: #71717a; margin: 0; }\n.ff-run-feed__row { display: flex; gap: 8px; padding: 1px 0; }\n.ff-run-feed__row--error .ff-run-feed__text { color: #f87171; }\n.ff-run-feed__row--warn .ff-run-feed__text { color: #fbbf24; }\n.ff-run-feed__row--status .ff-run-feed__text { color: #93c5fd; }\n.ff-run-feed__time { color: #71717a; }\n.ff-run-feed__node { color: #c4b5fd; }\n.ff-run-feed__text { flex: 1; }\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: #71717a; }\n.dark .ff-node__summary-key { color: #a1a1aa; }\n.ff-node__summary-value { font-family: ui-monospace, monospace; }\n.ff-node__summary-more { color: #71717a; font-size: 10px; }\n.ff-node__body-empty { font-size: 11px; color: #a1a1aa; font-style: italic; }\n\n/* === FlowEditor layout === */\n.ff-editor {\n display: grid;\n grid-template-columns: 220px 1fr 320px;\n gap: 12px;\n font-family: ui-sans-serif, system-ui, sans-serif;\n}\n.ff-editor__main { display: flex; flex-direction: column; gap: 8px; min-width: 0; position: relative; }\n/* Slot: rendered over the canvas while the graph is empty. */\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/* Slot: config panel + an optional footer for per-node actions. */\n.ff-editor__panel-wrap { display: flex; flex-direction: column; gap: 8px; min-height: 0; }\n.ff-editor__panel-footer { flex-shrink: 0; display: flex; flex-wrap: wrap; gap: 6px; }\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: 140px; padding: 4px;\n display: flex; flex-direction: column;\n background: white; border: 1px solid #d4d4d8; border-radius: 8px;\n box-shadow: 0 8px 24px rgba(0,0,0,0.12);\n}\n.dark .ff-editor__ctx { background: #18181b; border-color: #3f3f46; }\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: rgba(0,0,0,0.05); }\n.dark .ff-editor__ctx-item:hover { background: #27272a; }\n.ff-editor__ctx-item--danger { color: #dc2626; }\n.dark .ff-editor__ctx-item--danger { color: #f87171; }\n.ff-editor__feed { flex-shrink: 0; }\n.ff-editor__sep { width: 1px; align-self: stretch; background: #e4e4e7; }\n.dark .ff-editor__sep { background: #3f3f46; }\n.ff-editor__btn {\n border: 1px solid #d4d4d8; background: transparent; cursor: pointer;\n border-radius: 6px; padding: 4px 10px;\n color: inherit; font-size: 12px;\n}\n.ff-editor__btn:hover:not(:disabled) { background: rgba(0,0,0,0.04); }\n.ff-editor__btn:disabled { opacity: 0.45; cursor: not-allowed; }\n.dark .ff-editor__btn { border-color: #3f3f46; }\n.dark .ff-editor__btn:hover { background: #27272a; }\n.ff-editor__count {\n margin-left: auto; font-size: 11px; color: #71717a;\n}\n.dark .ff-editor__count { color: #a1a1aa; }\n\n/* === NodePalette === */\n.ff-palette {\n display: flex; flex-direction: column;\n background: white;\n border: 1px solid #e4e4e7;\n border-radius: 12px;\n overflow: hidden;\n font-size: 13px;\n color: #18181b;\n}\n.dark .ff-palette { background: #18181b; color: #fafafa; border-color: #3f3f46; }\n.ff-palette__search { padding: 8px; border-bottom: 1px solid #e4e4e7; }\n.dark .ff-palette__search { border-color: #3f3f46; }\n.ff-palette__search-input {\n width: 100%;\n padding: 6px 10px;\n border: 1px solid #d4d4d8;\n border-radius: 6px;\n background: transparent;\n color: inherit;\n font: inherit;\n}\n.dark .ff-palette__search-input { border-color: #3f3f46; }\n.ff-palette__list { flex: 1; overflow: auto; padding: 4px; }\n.ff-palette__group { padding: 4px 0; }\n.ff-palette__group-label {\n font-size: 10px; letter-spacing: 0.06em; text-transform: uppercase;\n color: #71717a;\n padding: 4px 8px;\n}\n.dark .ff-palette__group-label { color: #a1a1aa; }\n.ff-palette__row {\n width: 100%;\n display: flex; align-items: center; gap: 8px;\n padding: 6px 8px; border: 0; background: transparent; cursor: grab;\n border-radius: 6px;\n text-align: left; color: inherit; font: inherit;\n}\n.ff-palette__row:hover { background: rgba(0,0,0,0.04); }\n.dark .ff-palette__row:hover { background: #27272a; }\n.ff-palette__row:active { cursor: grabbing; }\n.ff-palette__row-dot {\n flex-shrink: 0;\n width: 24px; height: 24px;\n border-radius: 6px;\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: 12px; font-weight: 500; }\n.ff-palette__row-desc {\n font-size: 11px; color: #71717a;\n white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\n}\n.dark .ff-palette__row-desc { color: #a1a1aa; }\n\n/* === NodeConfigPanel === */\n.ff-panel {\n background: white;\n border: 1px solid #e4e4e7;\n border-radius: 12px;\n padding: 12px;\n display: flex; flex-direction: column; gap: 10px;\n overflow: auto;\n font-size: 13px;\n color: #18181b;\n}\n.dark .ff-panel { background: #18181b; color: #fafafa; border-color: #3f3f46; }\n.ff-panel--empty { align-items: center; justify-content: center; }\n.ff-panel__empty { font-size: 12px; color: #a1a1aa; }\n.ff-panel__header { display: flex; flex-direction: column; gap: 4px; }\n.ff-panel__kind-tag {\n align-self: flex-start;\n font-size: 10px; letter-spacing: 0.06em; text-transform: uppercase;\n background: rgba(168, 85, 247, 0.12); color: #a855f7;\n padding: 2px 8px; border-radius: 999px;\n}\n.ff-panel__kind-desc { margin: 0; font-size: 12px; color: #71717a; }\n.dark .ff-panel__kind-desc { color: #a1a1aa; }\n.ff-panel__divider { border: 0; border-top: 1px solid #e4e4e7; margin: 4px 0; }\n.dark .ff-panel__divider { border-top-color: #3f3f46; }\n\n/* Delete lives at the foot of the panel, separated from the config fields, so\n it is always reachable while a node is selected but never mistaken for one. */\n.ff-panel__actions { margin-top: auto; padding-top: 12px; }\n.ff-panel__delete {\n width: 100%;\n padding: 7px 10px;\n font-size: 13px;\n font-weight: 500;\n color: #dc2626;\n background: transparent;\n border: 1px solid #fca5a5;\n border-radius: 6px;\n cursor: pointer;\n}\n.ff-panel__delete:hover { background: #fef2f2; border-color: #dc2626; }\n.dark .ff-panel__delete { color: #f87171; border-color: #7f1d1d; }\n.dark .ff-panel__delete:hover { background: rgba(127,29,29,0.25); border-color: #f87171; }\n.ff-panel__field { display: flex; flex-direction: column; gap: 4px; }\n.ff-panel__label { font-size: 12px; font-weight: 500; }\n.ff-panel__hint { font-size: 11px; color: #71717a; margin: 0; }\n.dark .ff-panel__hint { color: #a1a1aa; }\n.ff-panel__required { color: #dc2626; }\n.ff-panel__input {\n width: 100%;\n padding: 6px 8px;\n border: 1px solid #d4d4d8;\n border-radius: 6px;\n background: transparent;\n color: inherit;\n font: inherit;\n font-size: 12px;\n box-sizing: border-box;\n}\n.ff-panel__input:focus { outline: 2px solid #a855f7; outline-offset: -1px; }\n.dark .ff-panel__input { border-color: #3f3f46; }\n.ff-panel__input--textarea { font-family: inherit; resize: vertical; }\n.ff-panel__input--expression,\n.ff-panel__input--json {\n font-family: ui-monospace, monospace; font-size: 11px;\n}\n.ff-panel__switch { display: inline-flex; align-items: center; cursor: pointer; }\n.ff-panel__switch input { display: none; }\n.ff-panel__switch-slider {\n width: 32px; height: 18px;\n background: #d4d4d8;\n border-radius: 999px;\n position: relative;\n transition: background 200ms;\n}\n.ff-panel__switch-slider::before {\n content: \"\";\n position: absolute; left: 2px; top: 2px;\n width: 14px; height: 14px;\n background: white;\n border-radius: 50%;\n transition: left 200ms;\n}\n.ff-panel__switch input:checked + .ff-panel__switch-slider { background: #a855f7; }\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: #b45309; margin: 2px 0; }\n.dark .ff-panel__issue { color: #fbbf24; }\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: #71717a; margin: 0; font-style: italic; }\n.dark .ff-repeater__empty { color: #a1a1aa; }\n.ff-repeater__row {\n display: flex; flex-direction: column; gap: 6px;\n border: 1px solid #e4e4e7; border-radius: 6px; padding: 8px; background: #fafafa;\n}\n.dark .ff-repeater__row { border-color: #3f3f46; background: #27272a; }\n.ff-repeater__row-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; }\n.ff-repeater__row-title {\n font-size: 11px; font-weight: 600; color: #52525b;\n overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\n}\n.dark .ff-repeater__row-title { color: #d4d4d8; }\n.ff-repeater__row-actions { display: flex; gap: 2px; flex-shrink: 0; }\n.ff-repeater__btn {\n border: 1px solid transparent; background: transparent; cursor: pointer;\n border-radius: 4px; font-size: 11px; line-height: 1; padding: 3px 5px; color: #71717a;\n}\n.ff-repeater__btn:hover:not(:disabled) { background: #e4e4e7; color: #18181b; }\n.dark .ff-repeater__btn:hover:not(:disabled) { background: #3f3f46; color: #fafafa; }\n.ff-repeater__btn:disabled { opacity: .35; cursor: not-allowed; }\n.ff-repeater__btn--danger:hover:not(:disabled) { background: #fee2e2; color: #b91c1c; }\n.dark .ff-repeater__btn--danger:hover:not(:disabled) { background: #7f1d1d; color: #fecaca; }\n.ff-repeater__cell { display: flex; flex-direction: column; gap: 3px; }\n.ff-panel__label--sub { font-size: 11px; color: #71717a; font-weight: 400; }\n.dark .ff-panel__label--sub { color: #a1a1aa; }\n.ff-repeater__add {\n align-self: flex-start; border: 1px dashed #d4d4d8; background: transparent;\n border-radius: 6px; padding: 5px 10px; font-size: 11px; color: #52525b; cursor: pointer;\n}\n.ff-repeater__add:hover:not(:disabled) { border-color: #a855f7; color: #a855f7; }\n.ff-repeater__add:disabled { opacity: .4; cursor: not-allowed; }\n.dark .ff-repeater__add { border-color: #52525b; color: #d4d4d8; }\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: #a1a1aa; }\n.ff-panel__hint--missing { color: #b45309; font-style: italic; }\n.dark .ff-panel__hint--missing { color: #fbbf24; }\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 {\n border: 1px solid #e4e4e7; border-radius: 6px; overflow: hidden;\n max-height: 180px; background: #fff;\n}\n.dark .ff-rich-preview__frame { border-color: #3f3f46; background: #18181b; }\n.ff-rich-preview__unavailable {\n border: 1px dashed #d4d4d8; border-radius: 6px; padding: 10px;\n font-size: 11px; color: #71717a; line-height: 1.5;\n}\n.dark .ff-rich-preview__unavailable { border-color: #52525b; color: #a1a1aa; }\n.ff-rich-preview__unavailable code {\n font-size: 10px; background: #f4f4f5; padding: 1px 4px; border-radius: 3px;\n}\n.dark .ff-rich-preview__unavailable code { background: #27272a; }\n.ff-rich-preview__title { font-size: 11px; font-weight: 600; color: #52525b; }\n.dark .ff-rich-preview__title { color: #d4d4d8; }\n\n/* Resizable nodes (G11) — a resizable kind drops the fixed max-width so the\n card fills the width/height xyflow's NodeResizer writes onto the node. */\n.ff-node--resizable {\n max-width: none;\n width: 100%;\n height: 100%;\n}\n/* NodeResizer chrome (unstyled by default) — themeable border + handles. */\n.react-flow__resize-control.line { border-color: rgba(0, 0, 0, 0.15); }\n.react-flow__resize-control.handle {\n width: 8px; height: 8px; border-radius: 2px; border: 1px solid #fff;\n}\n.dark .react-flow__resize-control.line { border-color: rgba(255, 255, 255, 0.18); }\n.dark .react-flow__resize-control.handle { border-color: #1c1917; }\n\n/* Swimlanes (G6) — a resizable, titled container band. Child nodes are parented\n into it and render on top; this is just the background, so it fills the node's\n width/height and sits behind its children (xyflow orders a parent before its\n children). */\n.ff-lane {\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n background: rgba(100, 116, 139, 0.06);\n border: 1px dashed #cbd5e1;\n border-radius: 8px;\n overflow: hidden;\n}\n.ff-lane--selected { border-style: solid; }\n.ff-lane__header {\n display: flex;\n align-items: center;\n height: 22px;\n padding: 0 8px;\n color: #fff;\n font-size: 11px;\n font-weight: 600;\n font-family: ui-sans-serif, system-ui, sans-serif;\n border-radius: 7px 7px 0 0;\n}\n.ff-lane__title { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.dark .ff-lane { background: rgba(148, 163, 184, 0.08); border-color: #3f3f46; }\n@media (prefers-color-scheme: dark) {\n .ff-lane:not(.ff-canvas--light *) { background: rgba(148, 163, 184, 0.08); border-color: #3f3f46; }\n}\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 Dark mode honors both `.dark` ancestor (Tailwind class strategy) and OS\n `prefers-color-scheme: dark`. */\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. xyflow's JS is\n already bundled into our dist, so the consumer has no separate @xyflow/react to\n import its CSS from. */\n@import \"@xyflow/react/dist/style.css\";\n\n.ff-canvas {\n display: flex;\n flex-direction: column;\n border: 1px solid #e4e4e7;\n border-radius: 12px;\n overflow: hidden;\n background: white;\n}\n.dark .ff-canvas { background: #0a0a0a; border-color: #3f3f46; }\n@media (prefers-color-scheme: dark) {\n .ff-canvas:not(.ff-canvas--light) { background: #0a0a0a; border-color: #3f3f46; }\n}\n\n.ff-canvas__toolbar {\n border-bottom: 1px solid #e4e4e7;\n padding: 6px 8px;\n display: flex; gap: 6px; align-items: center;\n background: rgba(244, 244, 245, 0.6);\n font-family: ui-sans-serif, system-ui, sans-serif;\n font-size: 12px;\n}\n.dark .ff-canvas__toolbar { background: rgba(24, 24, 27, 0.6); border-color: #3f3f46; color: #e4e4e7; }\n@media (prefers-color-scheme: dark) {\n .ff-canvas__toolbar { background: rgba(24, 24, 27, 0.6); border-color: #3f3f46; color: #e4e4e7; }\n}\n.ff-canvas__surface { flex: 1; min-height: 0; position: relative; }\n\n/* xyflow background grid color override for dark canvas */\n.dark .react-flow__background pattern circle { fill: rgba(255, 255, 255, 0.10); }\n\n/* === Nodes === */\n.ff-node {\n min-width: 200px;\n max-width: 280px;\n background: white;\n border: 1px solid #d4d4d8;\n border-radius: 8px;\n font-family: ui-sans-serif, system-ui, sans-serif;\n font-size: 12px;\n color: #18181b;\n box-shadow: 0 1px 2px rgba(0,0,0,0.04), 0 4px 12px rgba(0,0,0,0.06);\n transition: box-shadow 200ms, border-color 200ms;\n overflow: hidden;\n}\n.dark .ff-node {\n background: #1c1917;\n color: #fafafa;\n border-color: #3f3f46;\n box-shadow: 0 1px 2px rgba(0,0,0,0.4), 0 6px 16px rgba(0,0,0,0.5);\n}\n@media (prefers-color-scheme: dark) {\n .ff-node { background: #1c1917; color: #fafafa; border-color: #3f3f46; box-shadow: 0 1px 2px rgba(0,0,0,0.4), 0 6px 16px rgba(0,0,0,0.5); }\n}\n.ff-node--selected {\n box-shadow: 0 0 0 2px currentColor, 0 4px 16px rgba(0,0,0,0.20);\n}\n\n.ff-node__header {\n display: flex; align-items: center; gap: 8px;\n padding: 7px 10px;\n color: white;\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.85;\n text-transform: uppercase;\n}\n.ff-node__label { flex: 1; font-size: 13px; }\n.ff-node__desc {\n margin: 0;\n padding: 8px 10px 0;\n font-size: 11px;\n color: #71717a;\n}\n.dark .ff-node__desc { color: #a1a1aa; }\n@media (prefers-color-scheme: dark) { .ff-node__desc { color: #a1a1aa; } }\n\n.ff-node__body { padding: 8px 10px 10px; }\n.ff-node__status-text {\n margin: 0;\n padding: 4px 10px 8px;\n font-size: 11px;\n color: #71717a;\n}\n.dark .ff-node__status-text { color: #a1a1aa; }\n@media (prefers-color-scheme: dark) { .ff-node__status-text { color: #a1a1aa; } }\n.ff-node--status-error .ff-node__status-text { color: #dc2626; }\n.dark .ff-node--status-error .ff-node__status-text { color: #f87171; }\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 rgba(59, 130, 246, 0.4), 0 4px 12px rgba(0,0,0,0.06); }\n 50% { box-shadow: 0 0 0 6px rgba(59, 130, 246, 0.05), 0 4px 12px rgba(0,0,0,0.06); }\n}\n\n/* Status dot in the header */\n.ff-node__dot {\n width: 8px; height: 8px; border-radius: 50%;\n background: rgba(255,255,255,0.5);\n}\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 {\n display: flex; justify-content: space-between;\n font-size: 11px; color: #71717a;\n}\n.dark .ff-subgraph__meta { color: #a1a1aa; }\n@media (prefers-color-scheme: dark) { .ff-subgraph__meta { color: #a1a1aa; } }\n\n/* Note node — no header chrome, sticky-style */\n.ff-note {\n background: #fef3c7;\n border: 1px solid rgba(0,0,0,0.06);\n border-radius: 6px;\n padding: 8px 10px;\n font-family: ui-sans-serif, system-ui, sans-serif;\n font-size: 12px;\n color: #1f2937;\n min-width: 180px;\n box-shadow: 0 1px 2px rgba(0,0,0,0.06), 0 4px 12px rgba(0,0,0,0.06);\n /* Pin to light text-on-yellow even in dark mode for readability */\n color-scheme: light;\n}\n.ff-note--selected { box-shadow: 0 0 0 2px #a855f7, 0 4px 12px rgba(0,0,0,0.2); }\n.ff-note__title { font-weight: 600; margin-bottom: 4px; }\n.ff-note__body { margin: 0; white-space: pre-wrap; }\n\n/* xyflow wraps every custom node in a `.react-flow__node-{type}` div with\n default border / background / box-shadow / padding. Our kit ships its\n own chrome via `.ff-node`, so strip xyflow's defaults for our types\n to avoid the white \"frame\" effect around the colored cards. */\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 — match accent + visible on both themes. */\n.react-flow__handle {\n width: 10px; height: 10px;\n background: white;\n border: 2px solid #94a3b8;\n border-radius: 50%;\n}\n.dark .react-flow__handle { background: #18181b; border-color: #71717a; }\n@media (prefers-color-scheme: dark) {\n .react-flow__handle { background: #18181b; border-color: #71717a; }\n}\n.react-flow__handle:hover { background: #3b82f6; border-color: #3b82f6; }\n\n/* xyflow edge color — softer in dark */\n.dark .react-flow__edge-path { stroke: #71717a; }\n@media (prefers-color-scheme: dark) {\n .react-flow__edge-path { stroke: #71717a; }\n}\n.react-flow__connection-path { stroke: #3b82f6; stroke-width: 2; }\n\n/* xyflow controls — bump specificity + !important so dark theming wins\n over xyflow's default stylesheet. */\n.dark .react-flow__controls,\n.react-flow__controls.ff-controls {\n background: transparent;\n box-shadow: none;\n}\n.dark .react-flow__controls .react-flow__controls-button {\n background: #18181b !important;\n border-color: #3f3f46 !important;\n border-bottom-color: #3f3f46 !important;\n color: #fafafa !important;\n}\n.dark .react-flow__controls .react-flow__controls-button:hover {\n background: #27272a !important;\n}\n.dark .react-flow__controls .react-flow__controls-button svg,\n.dark .react-flow__controls .react-flow__controls-button svg path,\n.dark .react-flow__controls .react-flow__controls-button svg polyline,\n.dark .react-flow__controls .react-flow__controls-button svg polygon {\n fill: currentColor !important;\n stroke: currentColor !important;\n}\n\n/* Run controls */\n.ff-run-controls { display: flex; gap: 6px; }\n.ff-run-controls__btn {\n border: 0; border-radius: 6px;\n padding: 6px 12px;\n font: inherit; font-size: 12px; font-weight: 500;\n cursor: pointer;\n background: #e4e4e7; color: #18181b;\n}\n.dark .ff-run-controls__btn { background: #27272a; color: #fafafa; }\n.ff-run-controls__btn--run { background: #10b981; color: white; }\n.dark .ff-run-controls__btn--run { background: #10b981; color: white; }\n.ff-run-controls__btn--cancel { background: #ef4444; color: white; }\n.ff-run-controls__btn:disabled { opacity: 0.5; cursor: default; }\n\n/* Run feed */\n.ff-run-feed {\n font-family: ui-monospace, monospace;\n font-size: 11px;\n background: #0a0a0a;\n color: #fafafa;\n border-radius: 8px;\n padding: 8px 10px;\n overflow: auto;\n max-height: 240px;\n border: 1px solid #1f1f23;\n}\n.ff-run-feed__empty { color: #71717a; margin: 0; }\n.ff-run-feed__row { display: flex; gap: 8px; padding: 1px 0; }\n.ff-run-feed__row--error .ff-run-feed__text { color: #f87171; }\n.ff-run-feed__row--warn .ff-run-feed__text { color: #fbbf24; }\n.ff-run-feed__row--status .ff-run-feed__text { color: #93c5fd; }\n.ff-run-feed__time { color: #71717a; }\n.ff-run-feed__node { color: #c4b5fd; }\n.ff-run-feed__text { flex: 1; }\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: #71717a; }\n.dark .ff-node__summary-key { color: #a1a1aa; }\n.ff-node__summary-value { font-family: ui-monospace, monospace; }\n.ff-node__summary-more { color: #71717a; font-size: 10px; }\n.ff-node__body-empty { font-size: 11px; color: #a1a1aa; font-style: italic; }\n\n/* === FlowEditor layout === */\n.ff-editor {\n display: grid;\n grid-template-columns: 220px 1fr 320px;\n gap: 12px;\n font-family: ui-sans-serif, system-ui, sans-serif;\n}\n.ff-editor__main { display: flex; flex-direction: column; gap: 8px; min-width: 0; position: relative; }\n/* Slot: rendered over the canvas while the graph is empty. */\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/* Slot: config panel + an optional footer for per-node actions. */\n.ff-editor__panel-wrap { display: flex; flex-direction: column; gap: 8px; min-height: 0; }\n.ff-editor__panel-footer { flex-shrink: 0; display: flex; flex-wrap: wrap; gap: 6px; }\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: 140px; padding: 4px;\n display: flex; flex-direction: column;\n background: white; border: 1px solid #d4d4d8; border-radius: 8px;\n box-shadow: 0 8px 24px rgba(0,0,0,0.12);\n}\n.dark .ff-editor__ctx { background: #18181b; border-color: #3f3f46; }\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: rgba(0,0,0,0.05); }\n.dark .ff-editor__ctx-item:hover { background: #27272a; }\n.ff-editor__ctx-item--danger { color: #dc2626; }\n.dark .ff-editor__ctx-item--danger { color: #f87171; }\n.ff-editor__feed { flex-shrink: 0; }\n.ff-editor__sep { width: 1px; align-self: stretch; background: #e4e4e7; }\n.dark .ff-editor__sep { background: #3f3f46; }\n.ff-editor__btn {\n border: 1px solid #d4d4d8; background: transparent; cursor: pointer;\n border-radius: 6px; padding: 4px 10px;\n color: inherit; font-size: 12px;\n}\n.ff-editor__btn:hover:not(:disabled) { background: rgba(0,0,0,0.04); }\n.ff-editor__btn:disabled { opacity: 0.45; cursor: not-allowed; }\n.dark .ff-editor__btn { border-color: #3f3f46; }\n.dark .ff-editor__btn:hover { background: #27272a; }\n.ff-editor__count {\n margin-left: auto; font-size: 11px; color: #71717a;\n}\n.dark .ff-editor__count { color: #a1a1aa; }\n\n/* === NodePalette === */\n.ff-palette {\n display: flex; flex-direction: column;\n background: white;\n border: 1px solid #e4e4e7;\n border-radius: 12px;\n overflow: hidden;\n font-size: 13px;\n color: #18181b;\n}\n.dark .ff-palette { background: #18181b; color: #fafafa; border-color: #3f3f46; }\n.ff-palette__search { padding: 8px; border-bottom: 1px solid #e4e4e7; }\n.dark .ff-palette__search { border-color: #3f3f46; }\n.ff-palette__search-input {\n width: 100%;\n padding: 6px 10px;\n border: 1px solid #d4d4d8;\n border-radius: 6px;\n background: transparent;\n color: inherit;\n font: inherit;\n}\n.dark .ff-palette__search-input { border-color: #3f3f46; }\n.ff-palette__list { flex: 1; overflow: auto; padding: 4px; }\n.ff-palette__group { padding: 4px 0; }\n.ff-palette__group-label {\n font-size: 10px; letter-spacing: 0.06em; text-transform: uppercase;\n color: #71717a;\n padding: 4px 8px;\n}\n.dark .ff-palette__group-label { color: #a1a1aa; }\n.ff-palette__row {\n width: 100%;\n display: flex; align-items: center; gap: 8px;\n padding: 6px 8px; border: 0; background: transparent; cursor: grab;\n border-radius: 6px;\n text-align: left; color: inherit; font: inherit;\n}\n.ff-palette__row:hover { background: rgba(0,0,0,0.04); }\n.dark .ff-palette__row:hover { background: #27272a; }\n.ff-palette__row:active { cursor: grabbing; }\n.ff-palette__row-dot {\n flex-shrink: 0;\n width: 24px; height: 24px;\n border-radius: 6px;\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: 12px; font-weight: 500; }\n.ff-palette__row-desc {\n font-size: 11px; color: #71717a;\n white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\n}\n.dark .ff-palette__row-desc { color: #a1a1aa; }\n\n/* === NodeConfigPanel === */\n.ff-panel {\n background: white;\n border: 1px solid #e4e4e7;\n border-radius: 12px;\n padding: 12px;\n display: flex; flex-direction: column; gap: 10px;\n overflow: auto;\n font-size: 13px;\n color: #18181b;\n}\n.dark .ff-panel { background: #18181b; color: #fafafa; border-color: #3f3f46; }\n.ff-panel--empty { align-items: center; justify-content: center; }\n.ff-panel__empty { font-size: 12px; color: #a1a1aa; }\n.ff-panel__header { display: flex; flex-direction: column; gap: 4px; }\n.ff-panel__kind-tag {\n align-self: flex-start;\n font-size: 10px; letter-spacing: 0.06em; text-transform: uppercase;\n background: rgba(168, 85, 247, 0.12); color: #a855f7;\n padding: 2px 8px; border-radius: 999px;\n}\n.ff-panel__kind-desc { margin: 0; font-size: 12px; color: #71717a; }\n.dark .ff-panel__kind-desc { color: #a1a1aa; }\n.ff-panel__divider { border: 0; border-top: 1px solid #e4e4e7; margin: 4px 0; }\n.dark .ff-panel__divider { border-top-color: #3f3f46; }\n\n/* Delete lives at the foot of the panel, separated from the config fields, so\n it is always reachable while a node is selected but never mistaken for one. */\n.ff-panel__actions { margin-top: auto; padding-top: 12px; }\n.ff-panel__delete {\n width: 100%;\n padding: 7px 10px;\n font-size: 13px;\n font-weight: 500;\n color: #dc2626;\n background: transparent;\n border: 1px solid #fca5a5;\n border-radius: 6px;\n cursor: pointer;\n}\n.ff-panel__delete:hover { background: #fef2f2; border-color: #dc2626; }\n.dark .ff-panel__delete { color: #f87171; border-color: #7f1d1d; }\n.dark .ff-panel__delete:hover { background: rgba(127,29,29,0.25); border-color: #f87171; }\n.ff-panel__field { display: flex; flex-direction: column; gap: 4px; }\n.ff-panel__label { font-size: 12px; font-weight: 500; }\n.ff-panel__hint { font-size: 11px; color: #71717a; margin: 0; }\n.dark .ff-panel__hint { color: #a1a1aa; }\n.ff-panel__required { color: #dc2626; }\n.ff-panel__input {\n width: 100%;\n padding: 6px 8px;\n border: 1px solid #d4d4d8;\n border-radius: 6px;\n background: transparent;\n color: inherit;\n font: inherit;\n font-size: 12px;\n box-sizing: border-box;\n}\n.ff-panel__input:focus { outline: 2px solid #a855f7; outline-offset: -1px; }\n.dark .ff-panel__input { border-color: #3f3f46; }\n.ff-panel__input--textarea { font-family: inherit; resize: vertical; }\n.ff-panel__input--expression,\n.ff-panel__input--json {\n font-family: ui-monospace, monospace; font-size: 11px;\n}\n.ff-panel__switch { display: inline-flex; align-items: center; cursor: pointer; }\n.ff-panel__switch input { display: none; }\n.ff-panel__switch-slider {\n width: 32px; height: 18px;\n background: #d4d4d8;\n border-radius: 999px;\n position: relative;\n transition: background 200ms;\n}\n.ff-panel__switch-slider::before {\n content: \"\";\n position: absolute; left: 2px; top: 2px;\n width: 14px; height: 14px;\n background: white;\n border-radius: 50%;\n transition: left 200ms;\n}\n.ff-panel__switch input:checked + .ff-panel__switch-slider { background: #a855f7; }\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: #b45309; margin: 2px 0; }\n.dark .ff-panel__issue { color: #fbbf24; }\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: #71717a; margin: 0; font-style: italic; }\n.dark .ff-repeater__empty { color: #a1a1aa; }\n.ff-repeater__row {\n display: flex; flex-direction: column; gap: 6px;\n border: 1px solid #e4e4e7; border-radius: 6px; padding: 8px; background: #fafafa;\n}\n.dark .ff-repeater__row { border-color: #3f3f46; background: #27272a; }\n.ff-repeater__row-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; }\n.ff-repeater__row-title {\n font-size: 11px; font-weight: 600; color: #52525b;\n overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\n}\n.dark .ff-repeater__row-title { color: #d4d4d8; }\n.ff-repeater__row-actions { display: flex; gap: 2px; flex-shrink: 0; }\n.ff-repeater__btn {\n border: 1px solid transparent; background: transparent; cursor: pointer;\n border-radius: 4px; font-size: 11px; line-height: 1; padding: 3px 5px; color: #71717a;\n}\n.ff-repeater__btn:hover:not(:disabled) { background: #e4e4e7; color: #18181b; }\n.dark .ff-repeater__btn:hover:not(:disabled) { background: #3f3f46; color: #fafafa; }\n.ff-repeater__btn:disabled { opacity: .35; cursor: not-allowed; }\n.ff-repeater__btn--danger:hover:not(:disabled) { background: #fee2e2; color: #b91c1c; }\n.dark .ff-repeater__btn--danger:hover:not(:disabled) { background: #7f1d1d; color: #fecaca; }\n.ff-repeater__cell { display: flex; flex-direction: column; gap: 3px; }\n.ff-panel__label--sub { font-size: 11px; color: #71717a; font-weight: 400; }\n.dark .ff-panel__label--sub { color: #a1a1aa; }\n.ff-repeater__add {\n align-self: flex-start; border: 1px dashed #d4d4d8; background: transparent;\n border-radius: 6px; padding: 5px 10px; font-size: 11px; color: #52525b; cursor: pointer;\n}\n.ff-repeater__add:hover:not(:disabled) { border-color: #a855f7; color: #a855f7; }\n.ff-repeater__add:disabled { opacity: .4; cursor: not-allowed; }\n.dark .ff-repeater__add { border-color: #52525b; color: #d4d4d8; }\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: #a1a1aa; }\n.ff-panel__hint--missing { color: #b45309; font-style: italic; }\n.dark .ff-panel__hint--missing { color: #fbbf24; }\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 {\n border: 1px solid #e4e4e7; border-radius: 6px; overflow: hidden;\n max-height: 180px; background: #fff;\n}\n.dark .ff-rich-preview__frame { border-color: #3f3f46; background: #18181b; }\n.ff-rich-preview__unavailable {\n border: 1px dashed #d4d4d8; border-radius: 6px; padding: 10px;\n font-size: 11px; color: #71717a; line-height: 1.5;\n}\n.dark .ff-rich-preview__unavailable { border-color: #52525b; color: #a1a1aa; }\n.ff-rich-preview__unavailable code {\n font-size: 10px; background: #f4f4f5; padding: 1px 4px; border-radius: 3px;\n}\n.dark .ff-rich-preview__unavailable code { background: #27272a; }\n.ff-rich-preview__title { font-size: 11px; font-weight: 600; color: #52525b; }\n.dark .ff-rich-preview__title { color: #d4d4d8; }\n\n/* Resizable nodes (G11) — a resizable kind drops the fixed max-width so the\n card fills the width/height xyflow's NodeResizer writes onto the node. */\n.ff-node--resizable {\n max-width: none;\n width: 100%;\n height: 100%;\n}\n/* NodeResizer chrome (unstyled by default) — themeable border + handles. */\n.react-flow__resize-control.line { border-color: rgba(0, 0, 0, 0.15); }\n.react-flow__resize-control.handle {\n width: 8px; height: 8px; border-radius: 2px; border: 1px solid #fff;\n}\n.dark .react-flow__resize-control.line { border-color: rgba(255, 255, 255, 0.18); }\n.dark .react-flow__resize-control.handle { border-color: #1c1917; }\n\n/* Swimlanes (G6) — a resizable, titled container band. Child nodes are parented\n into it and render on top; this is just the background, so it fills the node's\n width/height and sits behind its children (xyflow orders a parent before its\n children). */\n.ff-lane {\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n background: rgba(100, 116, 139, 0.06);\n border: 1px dashed #cbd5e1;\n border-radius: 8px;\n overflow: hidden;\n}\n.ff-lane--selected { border-style: solid; }\n.ff-lane__header {\n display: flex;\n align-items: center;\n height: 22px;\n padding: 0 8px;\n color: #fff;\n font-size: 11px;\n font-weight: 600;\n font-family: ui-sans-serif, system-ui, sans-serif;\n border-radius: 7px 7px 0 0;\n}\n.ff-lane__title { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n\n/* Reactive output (G12) — a node's live computed value. */\n.ff-node__output {\n margin: 0;\n padding: 4px 10px 8px;\n font-size: 11px;\n font-family: ui-monospace, \"SF Mono\", Menlo, monospace;\n color: #059669;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.dark .ff-node__output { color: #34d399; }\n\n/* Alignment guide lines (G15). */\n.ff-helper-line { background: #3b82f6; }\n.dark .ff-lane { background: rgba(148, 163, 184, 0.08); border-color: #3f3f46; }\n@media (prefers-color-scheme: dark) {\n .ff-lane:not(.ff-canvas--light *) { background: rgba(148, 163, 184, 0.08); border-color: #3f3f46; }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -271,6 +271,13 @@ type NodeKindDefinition<TConfig = Record<string, unknown>, TIn = any, TOut = any
|
|
|
271
271
|
* xyflow's `NodeProps`.
|
|
272
272
|
*/
|
|
273
273
|
component?: ComponentType<NodeProps<FlowNode>>;
|
|
274
|
+
/**
|
|
275
|
+
* Opt this kind into reactive data flow: during a run, a node's computed
|
|
276
|
+
* output is written back into its `data.output`, so its card reflects the
|
|
277
|
+
* value live ("computing flows"). Default off — non-reactive kinds are
|
|
278
|
+
* untouched, so this is purely additive.
|
|
279
|
+
*/
|
|
280
|
+
reactive?: boolean;
|
|
274
281
|
};
|
|
275
282
|
|
|
276
283
|
export type { ConfigField as C, DocumentConfigField as D, ExpressionConfigField as E, JsonConfigField as J, KeyValueConfigField as K, NodeCategory as N, PortSpec as P, RenderBodyContext as R, SelectConfigField as S, TextConfigField as T, NodeKindDefinition as a, CredentialConfigField as b, NumberConfigField as c, RepeaterConfigField as d, RepeaterRowField as e, SwitchConfigField as f, TextareaConfigField as g };
|
|
@@ -271,6 +271,13 @@ type NodeKindDefinition<TConfig = Record<string, unknown>, TIn = any, TOut = any
|
|
|
271
271
|
* xyflow's `NodeProps`.
|
|
272
272
|
*/
|
|
273
273
|
component?: ComponentType<NodeProps<FlowNode>>;
|
|
274
|
+
/**
|
|
275
|
+
* Opt this kind into reactive data flow: during a run, a node's computed
|
|
276
|
+
* output is written back into its `data.output`, so its card reflects the
|
|
277
|
+
* value live ("computing flows"). Default off — non-reactive kinds are
|
|
278
|
+
* untouched, so this is purely additive.
|
|
279
|
+
*/
|
|
280
|
+
reactive?: boolean;
|
|
274
281
|
};
|
|
275
282
|
|
|
276
283
|
export type { ConfigField as C, DocumentConfigField as D, ExpressionConfigField as E, JsonConfigField as J, KeyValueConfigField as K, NodeCategory as N, PortSpec as P, RenderBodyContext as R, SelectConfigField as S, TextConfigField as T, NodeKindDefinition as a, CredentialConfigField as b, NumberConfigField as c, RepeaterConfigField as d, RepeaterRowField as e, SwitchConfigField as f, TextareaConfigField as g };
|
package/dist/ux.d.cts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { EffectRegistry, DispatchActor } from '@particle-academy/fancy-auto-common';
|
|
2
2
|
export { AutoActivityEvent } from '@particle-academy/fancy-auto-common';
|
|
3
|
-
import { N as NodeCategory, C as ConfigField } from './types-
|
|
3
|
+
import { N as NodeCategory, C as ConfigField } from './types-BekE5JTG.cjs';
|
|
4
4
|
import { E as ExecutorRegistry } from './types-CMSrWVYM.cjs';
|
|
5
5
|
import 'react';
|
|
6
6
|
import '@xyflow/react';
|
package/dist/ux.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { EffectRegistry, DispatchActor } from '@particle-academy/fancy-auto-common';
|
|
2
2
|
export { AutoActivityEvent } from '@particle-academy/fancy-auto-common';
|
|
3
|
-
import { N as NodeCategory, C as ConfigField } from './types-
|
|
3
|
+
import { N as NodeCategory, C as ConfigField } from './types-DwRpXXNy.js';
|
|
4
4
|
import { E as ExecutorRegistry } from './types-CMSrWVYM.js';
|
|
5
5
|
import 'react';
|
|
6
6
|
import '@xyflow/react';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@particle-academy/fancy-flow",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.24.0",
|
|
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",
|
|
@@ -53,6 +53,16 @@
|
|
|
53
53
|
"default": "./dist/schema.cjs"
|
|
54
54
|
}
|
|
55
55
|
},
|
|
56
|
+
"./layout": {
|
|
57
|
+
"import": {
|
|
58
|
+
"types": "./dist/layout/index.d.ts",
|
|
59
|
+
"default": "./dist/layout.js"
|
|
60
|
+
},
|
|
61
|
+
"require": {
|
|
62
|
+
"types": "./dist/layout/index.d.cts",
|
|
63
|
+
"default": "./dist/layout.cjs"
|
|
64
|
+
}
|
|
65
|
+
},
|
|
56
66
|
"./engine": {
|
|
57
67
|
"import": {
|
|
58
68
|
"types": "./dist/engine.d.ts",
|
|
@@ -127,6 +137,7 @@
|
|
|
127
137
|
"@particle-academy/fancy-auto-common": "^0.1.0"
|
|
128
138
|
},
|
|
129
139
|
"devDependencies": {
|
|
140
|
+
"@dagrejs/dagre": "^3.0.0",
|
|
130
141
|
"@particle-academy/fancy-cms-ui": "^0.2.0",
|
|
131
142
|
"@particle-academy/react-fancy": "^4.15.0",
|
|
132
143
|
"@testing-library/dom": "^10.4.1",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/runtime/use-flow-run.ts","../src/runtime/use-flow-state.ts","../src/runtime/history.ts","../src/runtime/use-flow-history.ts"],"names":["useState","useCallback","useRef"],"mappings":"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","file":"chunk-O7F6SGV4.js","sourcesContent":["import { useCallback, useRef, useState } from \"react\";\nimport { runFlow, type RunOptions, type RunResult } from \"./run-flow\";\nimport type {\n ExecutorRegistry,\n FlowGraph,\n NodeRunStatus,\n RunEvent,\n} from \"../types\";\n\nexport type FlowRunFeedEntry = {\n id: string;\n at: number;\n level: \"info\" | \"warn\" | \"error\" | \"status\";\n text: string;\n nodeId?: string;\n detail?: unknown;\n};\n\nexport type UseFlowRunReturn = {\n /** Status keyed by nodeId — drive the UI overlay from this. */\n statuses: Record<string, NodeRunStatus>;\n /** Per-node status text (e.g. error message). */\n statusText: Record<string, string | undefined>;\n /** Live event log (capped to last N). */\n feed: FlowRunFeedEntry[];\n /** Whether a run is currently in progress. */\n running: boolean;\n /** Last run result, or null. */\n lastResult: RunResult | null;\n /** Kick off a run with the provided graph + executors. */\n run: (graph: FlowGraph, executors: ExecutorRegistry, options?: RunOptions) => Promise<RunResult>;\n /** Cancel the current run (if any). */\n cancel: () => void;\n /** Reset all runtime state (statuses, feed, lastResult). */\n reset: () => void;\n};\n\nexport type UseFlowRunOptions = {\n /** Cap the in-memory feed to this many entries. Default 200. */\n maxFeed?: number;\n};\n\n/**\n * useFlowRun — drives `runFlow` + maintains observability state. Pair with\n * `applyStatusesToNodes` (below) before passing nodes to `<FlowCanvas>` so\n * the per-node status badge renders.\n */\nexport function useFlowRun({ maxFeed = 200 }: UseFlowRunOptions = {}): UseFlowRunReturn {\n const [statuses, setStatuses] = useState<Record<string, NodeRunStatus>>({});\n const [statusText, setStatusText] = useState<Record<string, string | undefined>>({});\n const [feed, setFeed] = useState<FlowRunFeedEntry[]>([]);\n const [running, setRunning] = useState(false);\n const [lastResult, setLastResult] = useState<RunResult | null>(null);\n const abortRef = useRef<AbortController | null>(null);\n\n const handleEvent = useCallback(\n (e: RunEvent) => {\n switch (e.type) {\n case \"node-status\":\n setStatuses((s) => ({ ...s, [e.nodeId]: e.status }));\n setStatusText((t) => ({ ...t, [e.nodeId]: e.text }));\n appendFeed({ level: \"status\", text: `${e.nodeId} → ${e.status}${e.text ? ` (${e.text})` : \"\"}`, nodeId: e.nodeId });\n break;\n case \"node-output\":\n appendFeed({ level: \"info\", text: `${e.nodeId}.${e.portId} = ${preview(e.value)}`, nodeId: e.nodeId, detail: e.value });\n break;\n case \"log\":\n appendFeed({ level: e.level, text: e.message, nodeId: e.nodeId, detail: e.detail });\n break;\n case \"run-start\":\n appendFeed({ level: \"info\", text: \"▶ run started\" });\n break;\n case \"run-end\":\n appendFeed({ level: e.ok ? \"info\" : \"error\", text: e.ok ? \"✓ run complete\" : \"✗ run failed\" });\n break;\n case \"run-error\":\n appendFeed({ level: \"error\", text: e.error });\n break;\n }\n function appendFeed(partial: Omit<FlowRunFeedEntry, \"id\" | \"at\">) {\n setFeed((f) => {\n const entry: FlowRunFeedEntry = { id: `${Date.now()}_${f.length}`, at: Date.now(), ...partial };\n const next = [...f, entry];\n return next.length > maxFeed ? next.slice(next.length - maxFeed) : next;\n });\n }\n },\n [maxFeed],\n );\n\n const run = useCallback(\n async (graph: FlowGraph, executors: ExecutorRegistry, options: RunOptions = {}) => {\n if (running) {\n return { ok: false, outputs: {}, error: \"another run is already in progress\" } satisfies RunResult;\n }\n const controller = new AbortController();\n abortRef.current = controller;\n // Reset previous statuses for the nodes we're about to run.\n const idleStatuses: Record<string, NodeRunStatus> = {};\n for (const n of graph.nodes) idleStatuses[n.id] = \"idle\";\n setStatuses(idleStatuses);\n setStatusText({});\n setRunning(true);\n try {\n const result = await runFlow(graph, executors, handleEvent, { ...options, signal: controller.signal });\n setLastResult(result);\n return result;\n } finally {\n setRunning(false);\n abortRef.current = null;\n }\n },\n [handleEvent, running],\n );\n\n const cancel = useCallback(() => abortRef.current?.abort(), []);\n\n const reset = useCallback(() => {\n setStatuses({});\n setStatusText({});\n setFeed([]);\n setLastResult(null);\n }, []);\n\n return { statuses, statusText, feed, running, lastResult, run, cancel, reset };\n}\n\n/** Merge runtime statuses into nodes for rendering. */\nexport function applyStatusesToNodes<TNode extends { id: string; data: any }>(\n nodes: TNode[],\n statuses: Record<string, NodeRunStatus>,\n statusText: Record<string, string | undefined>,\n): TNode[] {\n return nodes.map((n) => ({\n ...n,\n data: {\n ...n.data,\n status: statuses[n.id] ?? n.data?.status ?? \"idle\",\n statusText: statusText[n.id] ?? n.data?.statusText,\n },\n }));\n}\n\nfunction preview(v: unknown): string {\n try {\n const s = JSON.stringify(v);\n return s && s.length > 60 ? s.slice(0, 57) + \"…\" : (s ?? String(v));\n } catch {\n return String(v);\n }\n}\n","import { useCallback, useState } from \"react\";\nimport {\n addEdge,\n applyEdgeChanges,\n applyNodeChanges,\n type Connection,\n type Edge,\n type EdgeChange,\n type NodeChange,\n} from \"@xyflow/react\";\nimport type { FlowEdge, FlowGraph, FlowNode } from \"../types\";\n\nexport type UseFlowStateReturn = {\n nodes: FlowNode[];\n edges: FlowEdge[];\n setNodes: React.Dispatch<React.SetStateAction<FlowNode[]>>;\n setEdges: React.Dispatch<React.SetStateAction<FlowEdge[]>>;\n /**\n * Replace nodes AND edges atomically in a single commit. Use this for any op\n * that touches both (delete-with-edge-prune, undo/redo restore, setGraph):\n * calling `setNodes` then `setEdges` is NOT atomic in controlled mode (each\n * closes over a stale `value`), so the second write clobbers the first.\n */\n setGraph: (graph: FlowGraph) => void;\n onNodesChange: (changes: NodeChange[]) => void;\n onEdgesChange: (changes: EdgeChange[]) => void;\n onConnect: (connection: Connection) => void;\n /** Snapshot the current graph (suitable for serialization). */\n toGraph: () => FlowGraph;\n};\n\n/**\n * useFlowState — React Flow's standard controlled-state plumbing in one hook.\n * Spread into <FlowCanvas>.\n */\nexport function useFlowState(initial: FlowGraph): UseFlowStateReturn {\n const [nodes, setNodes] = useState<FlowNode[]>(initial.nodes);\n const [edges, setEdges] = useState<FlowEdge[]>(initial.edges);\n\n const onNodesChange = useCallback((changes: NodeChange[]) => {\n setNodes((ns) => applyNodeChanges(changes, ns) as FlowNode[]);\n }, []);\n const onEdgesChange = useCallback((changes: EdgeChange[]) => {\n setEdges((es) => applyEdgeChanges(changes, es));\n }, []);\n const onConnect = useCallback((connection: Connection) => {\n setEdges((es) => addEdge(connection, es) as Edge[]);\n }, []);\n\n const setGraph = useCallback((graph: FlowGraph) => {\n // Two useState writes in one event are batched, so this IS atomic here.\n setNodes(graph.nodes);\n setEdges(graph.edges);\n }, []);\n\n const toGraph = useCallback(() => ({ nodes, edges }), [nodes, edges]);\n\n return { nodes, edges, setNodes, setEdges, setGraph, onNodesChange, onEdgesChange, onConnect, toGraph };\n}\n","import type { FlowGraph } from \"../types\";\n\n/**\n * Undo/redo history — a pure, React-free snapshot controller. The editor pushes\n * a graph snapshot BEFORE each committing mutation; `undo`/`redo` swap snapshots\n * between the past/future stacks. Kept free of React so it can be unit-tested\n * and reused by any host (or a headless driver).\n *\n * Coalescing (collapsing a burst of setState calls from one logical op into a\n * single undo step) is the caller's job — see `useFlowHistory`.\n */\nexport type HistoryController = {\n /** Record `graph` as an undo point. Clears the redo stack (new branch). */\n push: (graph: FlowGraph) => void;\n /** Pop the last undo point; `current` is pushed onto the redo stack. */\n undo: (current: FlowGraph) => FlowGraph | null;\n /** Pop the last redo point; `current` is pushed back onto the undo stack. */\n redo: (current: FlowGraph) => FlowGraph | null;\n canUndo: () => boolean;\n canRedo: () => boolean;\n clear: () => void;\n /** Test/inspection helper — sizes of the two stacks. */\n size: () => { past: number; future: number };\n};\n\nexport function createHistory(limit = 100): HistoryController {\n let past: FlowGraph[] = [];\n let future: FlowGraph[] = [];\n\n return {\n push(graph) {\n past.push(graph);\n if (past.length > limit) past.shift();\n future = [];\n },\n undo(current) {\n const prev = past.pop();\n if (prev === undefined) return null;\n future.push(current);\n return prev;\n },\n redo(current) {\n const next = future.pop();\n if (next === undefined) return null;\n past.push(current);\n return next;\n },\n canUndo: () => past.length > 0,\n canRedo: () => future.length > 0,\n clear() {\n past = [];\n future = [];\n },\n size: () => ({ past: past.length, future: future.length }),\n };\n}\n","import { useCallback, useMemo, useRef, useState } from \"react\";\nimport type { EdgeChange, NodeChange } from \"@xyflow/react\";\nimport type { FlowGraph } from \"../types\";\nimport { createHistory } from \"./history\";\nimport type { UseFlowStateReturn } from \"./use-flow-state\";\n\nexport type UseFlowHistoryReturn = {\n /** The flow sink wrapped so committing mutations snapshot for undo first. */\n flow: UseFlowStateReturn;\n undo: () => void;\n redo: () => void;\n canUndo: boolean;\n canRedo: boolean;\n /** Snapshot the current graph as an undo point (before a programmatic edit). */\n capture: () => void;\n /** Wire to `<FlowCanvas onNodeDragStart>` — snapshots the pre-drag graph. */\n onNodeDragStart: () => void;\n};\n\n/**\n * useFlowHistory — the commit/undo pipeline. Wraps a flow sink (the uncontrolled\n * `useFlowState` hook OR the controlled adapter) so every *committing* mutation\n * records a snapshot first, giving undo/redo without the editor threading\n * history through each call site. This is the single interception point the\n * two-sink architecture otherwise lacks.\n *\n * Granularity: a burst of setState calls from one logical op (e.g. a\n * delete = setNodes+setEdges) is coalesced into ONE undo step; transient\n * interactive changes (drag-move, dimension-measure, selection) are NOT captured\n * — a drag is captured once at `onNodeDragStart` instead.\n */\nexport function useFlowHistory(flow: UseFlowStateReturn): UseFlowHistoryReturn {\n const history = useRef(createHistory()).current;\n const restoring = useRef(false);\n const coalesced = useRef(false);\n const [, bump] = useState(0);\n const rerender = useCallback(() => bump((n) => n + 1), []);\n\n // Latest graph via a ref, so capture never reads a stale snapshot.\n const graphRef = useRef<FlowGraph>({ nodes: flow.nodes, edges: flow.edges });\n graphRef.current = { nodes: flow.nodes, edges: flow.edges };\n\n const capture = useCallback(() => {\n if (restoring.current || coalesced.current) return;\n coalesced.current = true;\n queueMicrotask(() => {\n coalesced.current = false;\n });\n history.push(graphRef.current);\n rerender();\n }, [history, rerender]);\n\n const restore = useCallback(\n (g: FlowGraph | null) => {\n if (!g) return;\n restoring.current = true;\n flow.setGraph(g);\n queueMicrotask(() => {\n restoring.current = false;\n });\n rerender();\n },\n [flow, rerender],\n );\n\n const undo = useCallback(() => restore(history.undo(graphRef.current)), [history, restore]);\n const redo = useCallback(() => restore(history.redo(graphRef.current)), [history, restore]);\n\n const wrapped = useMemo<UseFlowStateReturn>(\n () => ({\n ...flow,\n setNodes: (next) => {\n capture();\n flow.setNodes(next);\n },\n setEdges: (next) => {\n capture();\n flow.setEdges(next);\n },\n setGraph: (g) => {\n capture();\n flow.setGraph(g);\n },\n onNodesChange: (changes: NodeChange[]) => {\n // Only structural removes commit; position/dimensions/select are transient.\n if (!restoring.current && changes.some((c) => c.type === \"remove\")) capture();\n flow.onNodesChange(changes);\n },\n onEdgesChange: (changes: EdgeChange[]) => {\n if (!restoring.current && changes.some((c) => c.type === \"remove\")) capture();\n flow.onEdgesChange(changes);\n },\n onConnect: (conn) => {\n capture();\n flow.onConnect(conn);\n },\n }),\n [flow, capture],\n );\n\n return {\n flow: wrapped,\n undo,\n redo,\n canUndo: history.canUndo(),\n canRedo: history.canRedo(),\n capture,\n onNodeDragStart: capture,\n };\n}\n"]}
|