@industry-theme/principal-view-panels 0.4.46 → 0.4.48
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/panels.bundle.js +298 -298
- package/dist/panels.bundle.js.map +1 -1
- package/package.json +2 -2
- package/dist/adapters/PanelFileSystemAdapter.d.ts +0 -82
- package/dist/adapters/PanelFileSystemAdapter.d.ts.map +0 -1
- package/dist/demo/DemoApp.d.ts +0 -13
- package/dist/demo/DemoApp.d.ts.map +0 -1
- package/dist/demo/DemoApp.stories.d.ts +0 -71
- package/dist/demo/DemoApp.stories.d.ts.map +0 -1
- package/dist/demo/api/browser.d.ts +0 -15
- package/dist/demo/api/browser.d.ts.map +0 -1
- package/dist/demo/api/handlers.d.ts +0 -8
- package/dist/demo/api/handlers.d.ts.map +0 -1
- package/dist/demo/components/BookDetails/BookDetails.d.ts +0 -16
- package/dist/demo/components/BookDetails/BookDetails.d.ts.map +0 -1
- package/dist/demo/components/CardCatalog/CardCatalog.d.ts +0 -16
- package/dist/demo/components/CardCatalog/CardCatalog.d.ts.map +0 -1
- package/dist/demo/components/ReadingRoom/ReadingRoom.d.ts +0 -17
- package/dist/demo/components/ReadingRoom/ReadingRoom.d.ts.map +0 -1
- package/dist/demo/data/mockData.d.ts +0 -33
- package/dist/demo/data/mockData.d.ts.map +0 -1
- package/dist/demo/data/types.d.ts +0 -166
- package/dist/demo/data/types.d.ts.map +0 -1
- package/dist/index.d.ts +0 -63
- package/dist/index.d.ts.map +0 -1
- package/dist/mocks/panelContext.d.ts +0 -31
- package/dist/mocks/panelContext.d.ts.map +0 -1
- package/dist/mocks/vvfConfigs.d.ts +0 -32
- package/dist/mocks/vvfConfigs.d.ts.map +0 -1
- package/dist/panels/AgentMonitoringGapExplainerPanel.d.ts +0 -6
- package/dist/panels/AgentMonitoringGapExplainerPanel.d.ts.map +0 -1
- package/dist/panels/AgentMonitoringGapExplainerPanel.stories.d.ts +0 -12
- package/dist/panels/AgentMonitoringGapExplainerPanel.stories.d.ts.map +0 -1
- package/dist/panels/BookAnalogyExplainerPanel.d.ts +0 -7
- package/dist/panels/BookAnalogyExplainerPanel.d.ts.map +0 -1
- package/dist/panels/BookAnalogyExplainerPanel.stories.d.ts +0 -33
- package/dist/panels/BookAnalogyExplainerPanel.stories.d.ts.map +0 -1
- package/dist/panels/CanvasDetailPanel.d.ts +0 -58
- package/dist/panels/CanvasDetailPanel.d.ts.map +0 -1
- package/dist/panels/CanvasDetailPanel.stories.d.ts +0 -105
- package/dist/panels/CanvasDetailPanel.stories.d.ts.map +0 -1
- package/dist/panels/CanvasEditorPanel.d.ts +0 -29
- package/dist/panels/CanvasEditorPanel.d.ts.map +0 -1
- package/dist/panels/CanvasEditorPanel.stories.d.ts +0 -32
- package/dist/panels/CanvasEditorPanel.stories.d.ts.map +0 -1
- package/dist/panels/CanvasListPanel.d.ts +0 -13
- package/dist/panels/CanvasListPanel.d.ts.map +0 -1
- package/dist/panels/CanvasListPanel.stories.d.ts +0 -62
- package/dist/panels/CanvasListPanel.stories.d.ts.map +0 -1
- package/dist/panels/CanvasTypesExplainerPanel.d.ts +0 -7
- package/dist/panels/CanvasTypesExplainerPanel.d.ts.map +0 -1
- package/dist/panels/CanvasTypesExplainerPanel.stories.d.ts +0 -33
- package/dist/panels/CanvasTypesExplainerPanel.stories.d.ts.map +0 -1
- package/dist/panels/ChangeImpactAnalysisExplainerPanel.d.ts +0 -7
- package/dist/panels/ChangeImpactAnalysisExplainerPanel.d.ts.map +0 -1
- package/dist/panels/ChangeImpactAnalysisExplainerPanel.stories.d.ts +0 -33
- package/dist/panels/ChangeImpactAnalysisExplainerPanel.stories.d.ts.map +0 -1
- package/dist/panels/ControlTowerIntegration.stories.d.ts +0 -12
- package/dist/panels/ControlTowerIntegration.stories.d.ts.map +0 -1
- package/dist/panels/EventControllerPanel.d.ts +0 -32
- package/dist/panels/EventControllerPanel.d.ts.map +0 -1
- package/dist/panels/EventControllerPanel.stories.d.ts +0 -53
- package/dist/panels/EventControllerPanel.stories.d.ts.map +0 -1
- package/dist/panels/EventRecorderPanel.d.ts +0 -54
- package/dist/panels/EventRecorderPanel.d.ts.map +0 -1
- package/dist/panels/EventRecorderPanel.stories.d.ts +0 -12
- package/dist/panels/EventRecorderPanel.stories.d.ts.map +0 -1
- package/dist/panels/EventRecordingIntegration.stories.d.ts +0 -21
- package/dist/panels/EventRecordingIntegration.stories.d.ts.map +0 -1
- package/dist/panels/HierarchicalCanvasCompositionExplainerPanel.d.ts +0 -7
- package/dist/panels/HierarchicalCanvasCompositionExplainerPanel.d.ts.map +0 -1
- package/dist/panels/HierarchicalCanvasCompositionExplainerPanel.stories.d.ts +0 -33
- package/dist/panels/HierarchicalCanvasCompositionExplainerPanel.stories.d.ts.map +0 -1
- package/dist/panels/LibraryAnchoringExplainerPanel.d.ts +0 -7
- package/dist/panels/LibraryAnchoringExplainerPanel.d.ts.map +0 -1
- package/dist/panels/LibraryAnchoringExplainerPanel.stories.d.ts +0 -33
- package/dist/panels/LibraryAnchoringExplainerPanel.stories.d.ts.map +0 -1
- package/dist/panels/MonorepoComposabilityExplainerPanel.d.ts +0 -7
- package/dist/panels/MonorepoComposabilityExplainerPanel.d.ts.map +0 -1
- package/dist/panels/MonorepoComposabilityExplainerPanel.stories.d.ts +0 -33
- package/dist/panels/MonorepoComposabilityExplainerPanel.stories.d.ts.map +0 -1
- package/dist/panels/MultipleCanvasViewsExplainerPanel.d.ts +0 -7
- package/dist/panels/MultipleCanvasViewsExplainerPanel.d.ts.map +0 -1
- package/dist/panels/MultipleCanvasViewsExplainerPanel.stories.d.ts +0 -33
- package/dist/panels/MultipleCanvasViewsExplainerPanel.stories.d.ts.map +0 -1
- package/dist/panels/NarrativeExplainerPanel.d.ts +0 -7
- package/dist/panels/NarrativeExplainerPanel.d.ts.map +0 -1
- package/dist/panels/NarrativeExplainerPanel.stories.d.ts +0 -23
- package/dist/panels/NarrativeExplainerPanel.stories.d.ts.map +0 -1
- package/dist/panels/ProductionDebuggingExplainerPanel.d.ts +0 -7
- package/dist/panels/ProductionDebuggingExplainerPanel.d.ts.map +0 -1
- package/dist/panels/ProductionDebuggingExplainerPanel.stories.d.ts +0 -33
- package/dist/panels/ProductionDebuggingExplainerPanel.stories.d.ts.map +0 -1
- package/dist/panels/RuntimeValidationExplainerPanel.d.ts +0 -7
- package/dist/panels/RuntimeValidationExplainerPanel.d.ts.map +0 -1
- package/dist/panels/RuntimeValidationExplainerPanel.stories.d.ts +0 -33
- package/dist/panels/RuntimeValidationExplainerPanel.stories.d.ts.map +0 -1
- package/dist/panels/ScenarioEnumerationExplainerPanel.d.ts +0 -7
- package/dist/panels/ScenarioEnumerationExplainerPanel.d.ts.map +0 -1
- package/dist/panels/ScenarioEnumerationExplainerPanel.stories.d.ts +0 -33
- package/dist/panels/ScenarioEnumerationExplainerPanel.stories.d.ts.map +0 -1
- package/dist/panels/SkillInstallation.stories.d.ts +0 -45
- package/dist/panels/SkillInstallation.stories.d.ts.map +0 -1
- package/dist/panels/SystemStoriesSolutionExplainerPanel.d.ts +0 -6
- package/dist/panels/SystemStoriesSolutionExplainerPanel.d.ts.map +0 -1
- package/dist/panels/SystemStoriesSolutionExplainerPanel.stories.d.ts +0 -12
- package/dist/panels/SystemStoriesSolutionExplainerPanel.stories.d.ts.map +0 -1
- package/dist/panels/TelemetryCoverageExplainerPanel.d.ts +0 -7
- package/dist/panels/TelemetryCoverageExplainerPanel.d.ts.map +0 -1
- package/dist/panels/TelemetryCoverageExplainerPanel.stories.d.ts +0 -33
- package/dist/panels/TelemetryCoverageExplainerPanel.stories.d.ts.map +0 -1
- package/dist/panels/TestVsProductionExplainerPanel.d.ts +0 -7
- package/dist/panels/TestVsProductionExplainerPanel.d.ts.map +0 -1
- package/dist/panels/TestVsProductionExplainerPanel.stories.d.ts +0 -33
- package/dist/panels/TestVsProductionExplainerPanel.stories.d.ts.map +0 -1
- package/dist/panels/WhyNowAgentRevolutionExplainerPanel.d.ts +0 -6
- package/dist/panels/WhyNowAgentRevolutionExplainerPanel.d.ts.map +0 -1
- package/dist/panels/WhyNowAgentRevolutionExplainerPanel.stories.d.ts +0 -12
- package/dist/panels/WhyNowAgentRevolutionExplainerPanel.stories.d.ts.map +0 -1
- package/dist/panels/canvas-list/components/CanvasCard.d.ts +0 -13
- package/dist/panels/canvas-list/components/CanvasCard.d.ts.map +0 -1
- package/dist/panels/canvas-list/hooks/useCanvasData.d.ts +0 -18
- package/dist/panels/canvas-list/hooks/useCanvasData.d.ts.map +0 -1
- package/dist/panels/canvas-list/hooks/useCanvasNarrativeData.d.ts +0 -25
- package/dist/panels/canvas-list/hooks/useCanvasNarrativeData.d.ts.map +0 -1
- package/dist/panels/execution-viewer/EventNodeMapper.d.ts +0 -46
- package/dist/panels/execution-viewer/EventNodeMapper.d.ts.map +0 -1
- package/dist/panels/execution-viewer/ExecutionLoader.d.ts +0 -121
- package/dist/panels/execution-viewer/ExecutionLoader.d.ts.map +0 -1
- package/dist/panels/execution-viewer/ExecutionStats.d.ts +0 -11
- package/dist/panels/execution-viewer/ExecutionStats.d.ts.map +0 -1
- package/dist/panels/execution-viewer/NarrativeLoader.d.ts +0 -65
- package/dist/panels/execution-viewer/NarrativeLoader.d.ts.map +0 -1
- package/dist/panels/execution-viewer/NarrativeRenderer.d.ts +0 -25
- package/dist/panels/execution-viewer/NarrativeRenderer.d.ts.map +0 -1
- package/dist/panels/execution-viewer/NarrativeTemplatePanel.d.ts +0 -13
- package/dist/panels/execution-viewer/NarrativeTemplatePanel.d.ts.map +0 -1
- package/dist/panels/execution-viewer/ScenarioDetailsPanel.d.ts +0 -60
- package/dist/panels/execution-viewer/ScenarioDetailsPanel.d.ts.map +0 -1
- package/dist/panels/execution-viewer/narrative-converter.d.ts +0 -44
- package/dist/panels/execution-viewer/narrative-converter.d.ts.map +0 -1
- package/dist/panels/principal-view/ConfigLoader.d.ts +0 -43
- package/dist/panels/principal-view/ConfigLoader.d.ts.map +0 -1
- package/dist/panels/principal-view/EmptyStateContent.d.ts +0 -12
- package/dist/panels/principal-view/EmptyStateContent.d.ts.map +0 -1
- package/dist/panels/principal-view/ErrorStateContent.d.ts +0 -14
- package/dist/panels/principal-view/ErrorStateContent.d.ts.map +0 -1
- package/dist/stubs/codebase-quality-lenses-stub.d.ts +0 -26
- package/dist/stubs/codebase-quality-lenses-stub.d.ts.map +0 -1
- package/dist/tools/index.d.ts +0 -32
- package/dist/tools/index.d.ts.map +0 -1
- package/dist/types/index.d.ts +0 -7
- package/dist/types/index.d.ts.map +0 -1
package/dist/panels.bundle.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
try {
|
|
4
4
|
if (typeof document != "undefined") {
|
|
5
5
|
var elementStyle = document.createElement("style");
|
|
6
|
-
elementStyle.appendChild(document.createTextNode('/* 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: rgb(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: rgb(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, var(--xy-background-color-props, 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}\n.react-flow__pane.selection {\n cursor: pointer;\n }\n.react-flow__pane.draggable {\n cursor: grab;\n }\n.react-flow__pane.draggable.dragging {\n cursor: grabbing;\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__edges {\n position: absolute;\n}\n.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.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__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.left {\n left: 0;\n }\n.react-flow__panel.right {\n right: 0;\n }\n.react-flow__panel.center {\n left: 50%;\n transform: translateX(-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__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: 4px;\n height: 4px;\n border: 1px solid #fff;\n border-radius: 1px;\n background-color: var(--xy-resize-background-color, var(--xy-resize-background-color-default));\n transform: 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.animated-resizable-layout{width:100%;height:100%;position:relative;background-color:var(--panel-background)}.hybrid-panel{overflow:auto;height:100%;background-color:var(--panel-background)}.resize-handle{width:8px;background-color:var(--panel-handle);display:flex;justify-content:center;align-items:center;cursor:col-resize;position:relative;transition:background-color .2s,opacity .3s,width .3s}.resize-handle.collapsed{opacity:0;pointer-events:none}.resize-handle:hover{background-color:var(--panel-handle-hover)}.resize-handle:active{background-color:var(--panel-handle-active)}.handle-bar{height:100%;width:100%;display:flex;align-items:center;justify-content:center;position:relative}.collapse-toggle{position:absolute;background:var(--panel-button-bg);border:1px solid var(--panel-button-border);padding:4px 8px;cursor:pointer;color:var(--panel-button-icon);font-size:14px;outline:none;display:flex;align-items:center;justify-content:center;border-radius:4px;z-index:10;transition:all .2s;box-shadow:0 2px 4px #0000001a}.animated-vertical-layout{width:100%;height:100%;position:relative;background-color:var(--panel-background)}.vertical-panel{overflow:auto;width:100%;background-color:var(--panel-background)}.panel-content-wrapper{width:100%;height:100%;overflow:auto}.vertical-resize-handle{height:8px;background-color:var(--panel-handle);display:flex;justify-content:center;align-items:center;cursor:row-resize;position:relative;transition:background-color .2s,opacity .3s,height .3s}.vertical-resize-handle.collapsed{opacity:0;pointer-events:none}.vertical-resize-handle:hover{background-color:var(--panel-handle-hover)}.vertical-resize-handle:active{background-color:var(--panel-handle-active)}.handle-bar{width:100%;height:100%;display:flex;align-items:center;justify-content:center;gap:8px;position:relative}.collapse-toggle{background:var(--panel-button-bg);border:1px solid var(--panel-button-border);padding:4px 8px;cursor:pointer;color:var(--panel-button-icon);font-size:14px;outline:none;display:flex;align-items:center;justify-content:center;border-radius:4px;z-index:10;transition:all .2s;box-shadow:0 2px 4px #0000001a}.collapse-toggle:hover:not(:disabled){background-color:var(--panel-button-hover);box-shadow:0 2px 6px #00000026}.collapse-toggle:active:not(:disabled){opacity:.8}.three-panel-item.collapsible-panel.collapsed{flex:0!important;min-width:0!important}.panel-content-wrapper{flex:1;overflow:auto;will-change:opacity;box-sizing:border-box}.resize-handle.collapsed{width:0!important}.tab-group{display:flex;height:100%;width:100%;overflow:hidden}.tab-group.tab-position-top,.tab-group.tab-position-bottom{flex-direction:column}.tab-group.tab-position-left,.tab-group.tab-position-right{flex-direction:row}.tab-list{display:flex;background:var(--tab-list-bg, #f5f5f5);border-bottom:1px solid var(--tab-border, #ddd);gap:0;padding:0;flex-shrink:0;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;-ms-overflow-style:none}.tab-list::-webkit-scrollbar{display:none}.tab-position-top .tab-list,.tab-position-bottom .tab-list{width:100%}.tab-list.centered{justify-content:flex-start}@media (min-width:0){.tab-list.centered{justify-content:center}.tab-list.centered:has(.tab-button:nth-child(n)){justify-content:flex-start}}.tab-position-bottom .tab-list{border-bottom:none;border-top:none}.tab-position-left .tab-list,.tab-position-right .tab-list{flex-direction:column;border-bottom:none;border-right:none;width:auto;min-width:120px}.tab-position-top .tab-button,.tab-position-bottom .tab-button{flex:1 1 0;min-width:40px;max-width:100%}.tab-button{background:var(--tab-bg, #fff);border:1px solid var(--tab-border, #ddd);border-radius:0;padding:8px 16px;cursor:pointer;font-size:14px;font-weight:500;color:var(--tab-text, #333);transition:all .2s ease;white-space:nowrap;display:flex;align-items:center;justify-content:center;gap:6px;height:39px;line-height:1;box-sizing:border-box;container-type:inline-size}.tab-position-top .tab-button{border-bottom:none;border-top:none;border-left:none}.tab-position-top .tab-button:last-child{border-right:none}.tab-position-bottom .tab-button{border-top:none;border-bottom:none;border-left:none}.tab-position-bottom .tab-button:last-child{border-right:none}.tab-position-left .tab-button{border-right:none;border-bottom:none}.tab-position-left .tab-button:last-child{border-bottom:1px solid var(--tab-border, #ddd)}.tab-position-right .tab-button{border-left:none;border-bottom:none}.tab-position-right .tab-button:last-child{border-bottom:1px solid var(--tab-border, #ddd)}.tab-icon{display:inline-flex;align-items:center;justify-content:center}.tab-label{display:none}@container (min-width: 250px){.tab-label{display:inline}.tab-icon{display:none}}.tab-button:hover{background:var(--tab-bg-hover, #f9f9f9)}.tab-button.active{background:var(--tab-bg-active, #007bff);color:var(--tab-text-active, #fff);border-color:var(--tab-border-active, #007bff)}.tab-button:focus-visible{outline:2px solid var(--tab-focus, #007bff);outline-offset:2px}.tab-content{flex:1;overflow:auto;background:var(--tab-content-bg, #fff)}.tab-group-empty{display:flex;align-items:center;justify-content:center;height:100%;color:var(--tab-empty-text, #999);font-style:italic}.three-panel-layout{height:100%;width:100%;display:flex;flex-direction:column;position:relative;background-color:var(--panel-background);box-sizing:border-box}.three-panel-item{display:flex;flex-direction:column;overflow:hidden;position:relative;background-color:var(--panel-background);box-sizing:border-box}.three-panel-item[data-edit-mode=true]{background-color:var(--panel-accent-bg);border-radius:12px}.three-panel-item.collapsible-panel{will-change:flex}.three-panel-item.collapsible-panel.animating{pointer-events:none}.three-panel-item.collapsible-panel.collapsed{flex:0!important;min-width:0!important;max-width:0!important;width:0!important;overflow:hidden!important;visibility:hidden}.three-panel-item.middle-panel{flex:1;min-width:200px}.panel-content-wrapper{flex:1;overflow-x:hidden;overflow-y:auto;will-change:opacity;box-sizing:border-box}.resize-handle{position:relative;display:flex;align-items:center;justify-content:center;width:1px!important;cursor:col-resize;background:var(--panel-border);overflow:visible!important}.resize-handle:before{content:"";position:absolute;top:0;right:-10px;bottom:0;left:-10px;background:transparent}.resize-handle:after{content:"";position:absolute;top:0;right:-10px;bottom:0;left:-10px;background:var(--panel-handle);opacity:0;transition:opacity .2s ease;z-index:-1}.resize-handle:hover:after{opacity:1}.resize-handle:hover{background:var(--panel-handle-hover)}.resize-handle:active:after{opacity:1;background:var(--panel-handle-active)}.resize-handle:active{background:var(--panel-handle-active)}.resize-handle.collapsed{width:0!important;visibility:hidden}.resize-handle.left-handle.collapsed{margin-right:-1px}.resize-handle.right-handle.collapsed{margin-left:-1px}.handle-bar{position:relative;width:100%;height:100%;display:flex;align-items:center;justify-content:center;z-index:2}.collapse-toggle{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:20px;height:40px;background:var(--panel-button-bg);border:1px solid var(--panel-button-border);border-radius:4px;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:12px;color:var(--panel-button-icon);transition:all .2s ease;z-index:10;padding:0;line-height:1}.collapse-toggle:hover{background:var(--panel-button-hover)}.collapse-toggle:active{opacity:.8}.collapse-toggle:disabled{opacity:.5;cursor:not-allowed}@media (max-width:768px){.resize-handle:before{left:-8px;right:-8px}.resize-handle:after{left:-8px;right:-8px}.collapse-toggle{width:24px;height:48px;font-size:14px}}.snap-carousel-container{display:flex;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;scroll-behavior:smooth;gap:var(--snap-carousel-gap, 0px);padding:0;margin:0;width:100%;height:100%;background-color:var(--panel-background);box-sizing:border-box;position:relative;left:0;transform:none;container-type:inline-size;-ms-overflow-style:none;scrollbar-width:none}.snap-carousel-container::-webkit-scrollbar{display:none}.snap-carousel-panel{flex:0 0 auto;scroll-snap-align:start;scroll-snap-stop:always;width:var(--snap-carousel-panel-width, 33.33%);height:100%;box-sizing:border-box;overflow:hidden}@media (max-width:540px){.snap-carousel-panel{min-width:280px}}@keyframes wiggle{0%{transform:rotate(0)}25%{transform:rotate(1deg)}50%{transform:rotate(0)}75%{transform:rotate(-1deg)}to{transform:rotate(0)}}@keyframes scaleIn{0%{transform:scale(.95);opacity:0}to{transform:scale(1);opacity:1}}@keyframes pulse{0%,to{box-shadow:0 0 #3b82f666}50%{box-shadow:0 0 0 8px #3b82f600}}.editable-panel-layout{position:relative;width:100%;height:100%}.editable-panel-layout.edit-mode-active{background:#0000000d}[data-slot][data-edit-mode=true]{transform:scale(.95);transform-origin:center center;cursor:grab;will-change:transform;transition:transform .3s cubic-bezier(.4,0,.2,1)}[data-slot][data-edit-mode=true]:active{cursor:grabbing}[data-slot][data-dragging=true]{cursor:grabbing!important;transform:scale(.95)!important;transition:none!important}.edit-mode-active [data-slot][data-edit-mode=true]{transform-origin:center center}.slot-with-overlay{position:relative;width:100%;height:100%}.slot-with-overlay.dragging{opacity:0;pointer-events:none}.slot-edit-overlay{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;border:none;pointer-events:auto;cursor:grab;z-index:100;display:flex;flex-direction:column;align-items:center;justify-content:center}.slot-edit-overlay:hover{background:#3b82f608}.slot-edit-overlay:active{cursor:grabbing}.drag-indicator,.slot-position-label{display:none}.edit-mode-toggle{position:absolute;top:16px;right:16px;z-index:1000;padding:8px 16px;border-radius:8px;border:1px solid #e5e7eb;background:#fff;color:#374151;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s ease;box-shadow:0 2px 4px #0000001a}.edit-mode-toggle:hover{background:#f9fafb;box-shadow:0 4px 6px #0000001a}.edit-mode-toggle.active{background:#3b82f6;color:#fff;border-color:#2563eb}.edit-mode-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0000004d;z-index:998;animation:fadeIn .2s ease}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.edit-mode-configurator{position:relative;z-index:999;padding:20px;animation:scaleIn .3s ease}.panel-slot{position:relative;min-height:120px;border:2px dashed transparent;border-radius:12px;transition:all .3s ease;padding:12px}.panel-slot.edit-mode{border-color:#d1d5db;background:#ffffff80}.panel-slot.drag-over{border-color:#3b82f6;background:#3b82f61a;box-shadow:0 0 0 4px #3b82f61a}.panel-slot.empty{display:flex;align-items:center;justify-content:center;color:#9ca3af;font-size:14px}.draggable-panel{position:relative;padding:12px 16px;margin:8px 0;border-radius:8px;background:#fff;border:1px solid #e5e7eb;cursor:grab;transition:all .2s ease;-webkit-user-select:none;user-select:none}.draggable-panel:hover{border-color:#3b82f6;box-shadow:0 2px 8px #0000001a}.draggable-panel.dragging{opacity:.5;cursor:grabbing}.draggable-panel.edit-mode{animation:wiggle .4s ease-in-out infinite;transform-origin:center}.draggable-panel.edit-mode:nth-child(odd){animation-delay:.1s}.draggable-panel.edit-mode:nth-child(2n){animation-delay:.2s}.remove-button{position:absolute;top:-6px;right:-6px;width:20px;height:20px;border-radius:50%;background:#ef4444;color:#fff;border:2px solid white;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:12px;font-weight:700;opacity:0;transform:scale(0);transition:all .2s ease;z-index:10;box-shadow:0 2px 4px #0003}.draggable-panel.edit-mode .remove-button{opacity:1;transform:scale(1);animation:pulse 2s infinite}.remove-button:hover{background:#dc2626;transform:scale(1.1)}.panel-label{display:flex;align-items:center;gap:8px;font-size:14px;font-weight:500;color:#374151}.panel-icon{width:20px;height:20px;display:flex;align-items:center;justify-content:center}.drag-handle{display:none;width:24px;height:24px;opacity:.4;cursor:grab}.edit-mode .drag-handle{display:flex;align-items:center;justify-content:center}.drag-overlay{padding:12px 16px;border-radius:8px;background:#fff;border:2px solid #3b82f6;box-shadow:0 8px 16px #0003;cursor:grabbing;opacity:.9}.panel-group{border:2px solid #e5e7eb;border-radius:12px;padding:8px;background:#fff}.panel-group.edit-mode{animation:wiggle .5s ease-in-out infinite;border-color:#3b82f6}.panel-group-header{display:flex;justify-content:space-between;align-items:center;padding:8px;border-bottom:1px solid #e5e7eb;margin-bottom:8px}.panel-group-title{font-size:12px;font-weight:600;color:#6b7280;text-transform:uppercase}.available-panels{background:#fff;border-radius:12px;padding:16px;box-shadow:0 4px 6px #0000001a}.available-panels-title{font-size:16px;font-weight:600;color:#374151;margin-bottom:12px}.available-panels-list{display:flex;flex-direction:column;gap:8px}.slot-label{font-size:12px;font-weight:600;color:#6b7280;text-transform:uppercase;margin-bottom:8px;display:flex;align-items:center;gap:8px}.slot-indicator{width:8px;height:8px;border-radius:50%;background:#d1d5db}.slot-indicator.active{background:#3b82f6}.action-buttons{position:fixed;bottom:24px;left:50%;transform:translate(-50%);z-index:1001;display:flex;gap:12px;padding:12px 24px;background:#fff;border-radius:12px;box-shadow:0 8px 16px #00000026;animation:scaleIn .3s ease}.action-button{padding:10px 20px;border-radius:8px;border:1px solid #e5e7eb;background:#fff;color:#374151;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s ease}.action-button:hover{background:#f9fafb}.action-button.primary{background:#3b82f6;color:#fff;border-color:#2563eb}.action-button.primary:hover{background:#2563eb}@media (max-width:768px){.edit-mode-toggle{top:8px;right:8px;padding:6px 12px;font-size:12px}.action-buttons{bottom:16px;padding:10px 16px}.action-button{padding:8px 16px;font-size:13px}}@media (prefers-color-scheme:dark){.edit-mode-toggle{background:#1f2937;color:#f9fafb;border-color:#374151}.edit-mode-toggle:hover{background:#374151}.draggable-panel{background:#1f2937;color:#f9fafb;border-color:#374151}.available-panels{background:#1f2937}.panel-label{color:#f9fafb}.action-buttons{background:#1f2937}.action-button{background:#1f2937;color:#f9fafb;border-color:#374151}.action-button:hover{background:#374151}}.panel-configurator{display:flex;flex-direction:column;gap:2rem;padding:1.5rem;background:var(--configurator-bg);border-radius:8px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}.configurator-section{display:flex;flex-direction:column;gap:1rem}.section-title{margin:0;font-size:.875rem;font-weight:600;color:var(--configurator-title);text-transform:uppercase;letter-spacing:.05em;text-align:center}.slots-container{display:grid;grid-template-columns:repeat(3,1fr);gap:1rem;width:75%;margin:0 auto;align-items:start}.slot{position:relative;aspect-ratio:1 / 1.3;width:100%;padding:2.5rem 1rem 1rem;background:var(--slot-bg);border:2px solid var(--slot-border);border-radius:6px;cursor:pointer;transition:all .2s ease;display:flex;flex-direction:column;gap:.5rem;overflow:hidden;box-sizing:border-box}.slot:hover{border-color:var(--slot-border-hover);box-shadow:0 2px 4px #0000000d}.slot.selected{border-color:var(--slot-border-selected);background:var(--slot-bg-selected);box-shadow:0 0 0 3px var(--slot-bg-selected)}.slot.empty{border-style:dashed}.slot-label{font-size:.75rem;font-weight:600;color:var(--slot-label);text-transform:capitalize;text-align:left}.slot[data-position=middle] .slot-label,.slot[data-position=middle] .slot-panel-name,.slot[data-position=middle] .slot-empty-state{text-align:center}.slot[data-position=right] .slot-label,.slot[data-position=right] .slot-panel-name,.slot[data-position=right] .slot-empty-state{text-align:right}.slot-content{flex:1;display:flex;flex-direction:column;gap:.5rem;overflow-y:auto;min-height:0}.slot-panel-name{font-weight:600;color:var(--slot-content-text);font-size:.875rem}.slot-preview{flex:1;display:flex;align-items:center;justify-content:center;padding:.5rem;background:var(--slot-preview-bg);border-radius:4px;border:1px solid var(--slot-preview-border);font-size:.75rem;color:var(--slot-preview-text)}.slot-empty-state{flex:1;display:flex;align-items:center;justify-content:center;color:var(--slot-empty-text);font-size:.875rem;font-style:italic;min-height:0}.slot-clear-btn{position:absolute;top:.25rem;right:.25rem;width:24px;height:24px;padding:0;background:var(--clear-btn-bg);color:var(--clear-btn-text);border:none;border-radius:4px;cursor:pointer;font-size:1.25rem;line-height:1;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .2s ease}.slot:hover .slot-clear-btn{opacity:1}.slot-clear-btn:hover{background:var(--clear-btn-hover);transform:scale(1.1)}.available-panels{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:.75rem;width:75%;margin:0 auto}.available-panel{min-height:80px;padding:.75rem;background:var(--panel-bg);border:2px solid var(--panel-border);border-radius:6px;cursor:pointer;transition:all .2s ease;display:flex;flex-direction:column;gap:.5rem}.available-panel:hover{border-color:var(--panel-border-hover);box-shadow:0 2px 4px #0000000d;transform:translateY(-2px)}.available-panel.selected{border-color:var(--panel-border-selected);background:var(--panel-bg-selected);box-shadow:0 0 0 3px var(--panel-bg-selected)}.available-panel.in-use{opacity:.5;border-style:dashed}.available-panel.in-use:hover{transform:translateY(0);opacity:.6}.panel-label{font-weight:600;color:var(--panel-label-text);font-size:.875rem}.panel-preview{flex:1;display:flex;align-items:center;justify-content:center;padding:.5rem;background:var(--panel-preview-bg);border-radius:4px;font-size:.75rem;color:var(--panel-preview-text)}.selection-hint{padding:.75rem 1rem;background:var(--hint-bg);border:1px solid var(--hint-border);border-radius:6px;color:var(--hint-text);font-size:.875rem;text-align:center}.available-panel.multi-selected{border-color:var(--panel-border-selected);background:var(--panel-bg-selected);box-shadow:0 0 0 2px var(--panel-bg-selected)}.multi-select-badge{margin-left:.5rem;padding:.25rem .5rem;background:var(--panel-border-selected);color:#fff;font-size:.75rem;border-radius:12px;font-weight:400}.multi-select-hint{background:var(--panel-bg-selected);border-color:var(--panel-border-selected)}.slot.tab-group{border-style:solid}.group-content{position:relative;overflow-y:auto;min-height:0}.group-badge{font-size:.75rem;font-weight:600;color:var(--panel-border-selected);margin-bottom:.5rem}.group-panels{display:flex;flex-direction:column;gap:.25rem;flex:1;overflow-y:auto;min-height:0}.group-panel-label{font-size:.75rem;color:var(--slot-content-text);padding:.25rem .5rem;background:var(--slot-preview-bg);border-radius:3px;border-left:3px solid var(--panel-border-selected)}.slot-panel-label{font-weight:600;color:var(--slot-content-text);font-size:.875rem;text-align:center}.create-tab-group-btn{margin-top:.5rem;padding:.5rem .75rem;background:var(--panel-border-selected);color:#fff;border:none;border-radius:4px;font-size:.75rem;font-weight:600;cursor:pointer;transition:all .2s ease}.create-tab-group-btn:hover{transform:scale(1.05);box-shadow:0 2px 4px #0000001a}.tab-mode-toggle{position:absolute;top:.5rem;left:.5rem;padding:.25rem .5rem;background:var(--slot-bg);border:1px solid var(--slot-border);border-radius:4px;font-size:.85rem;cursor:pointer;transition:all .2s ease;z-index:10;opacity:.7;color:var(--slot-content-text)}.tab-mode-toggle svg{display:block}.tab-mode-toggle:hover{opacity:1;border-color:var(--slot-border-hover);background:var(--slot-preview-bg)}.tab-mode-toggle.active{opacity:1;background:var(--panel-border-selected);color:#fff;border-color:var(--panel-border-selected)}.tab-config-controls{margin-bottom:.5rem}.tab-config-label{display:flex;align-items:center;gap:.5rem;font-size:.75rem;color:var(--slot-label)}.tab-config-label select{padding:.25rem .5rem;border:1px solid var(--slot-border);border-radius:3px;background:var(--slot-bg);color:var(--slot-content-text);font-size:.7rem;cursor:pointer}.group-panel-item{display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding:.25rem .5rem;background:var(--slot-preview-bg);border-radius:3px;border-left:3px solid var(--panel-border-selected)}.group-panel-label{flex:1;font-size:.75rem;color:var(--slot-content-text);display:flex;align-items:center;gap:.25rem}.default-badge{color:var(--panel-border-selected);font-size:.9em}.remove-from-group-btn{width:18px;height:18px;padding:0;background:var(--clear-btn-bg);color:var(--clear-btn-text);border:none;border-radius:3px;cursor:pointer;font-size:1rem;line-height:1;display:flex;align-items:center;justify-content:center;opacity:.7;transition:all .2s ease}.remove-from-group-btn:hover{opacity:1;transform:scale(1.1)}.usage-hint{padding:.75rem 1rem;background:var(--slot-preview-bg);border:1px solid var(--slot-border);border-radius:6px;color:var(--hint-text);font-size:.875rem;text-align:center}'));
|
|
6
|
+
elementStyle.appendChild(document.createTextNode('/* 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: rgb(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: rgb(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, var(--xy-background-color-props, 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}\n.react-flow__pane.selection {\n cursor: pointer;\n }\n.react-flow__pane.draggable {\n cursor: grab;\n }\n.react-flow__pane.draggable.dragging {\n cursor: grabbing;\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__edges {\n position: absolute;\n}\n.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.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__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.left {\n left: 0;\n }\n.react-flow__panel.right {\n right: 0;\n }\n.react-flow__panel.center {\n left: 50%;\n transform: translateX(-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__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: 4px;\n height: 4px;\n border: 1px solid #fff;\n border-radius: 1px;\n background-color: var(--xy-resize-background-color, var(--xy-resize-background-color-default));\n transform: 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.animated-resizable-layout{width:100%;height:100%;position:relative;background-color:var(--panel-background)}.hybrid-panel{overflow:auto;height:100%;background-color:var(--panel-background)}.resize-handle{width:8px;background-color:var(--panel-handle);display:flex;justify-content:center;align-items:center;cursor:col-resize;position:relative;transition:background-color .2s,opacity .3s,width .3s}.resize-handle.collapsed{opacity:0;pointer-events:none}.resize-handle:hover{background-color:var(--panel-handle-hover)}.resize-handle:active{background-color:var(--panel-handle-active)}.handle-bar{height:100%;width:100%;display:flex;align-items:center;justify-content:center;position:relative}.collapse-toggle{position:absolute;background:var(--panel-button-bg);border:1px solid var(--panel-button-border);padding:4px 8px;cursor:pointer;color:var(--panel-button-icon);font-size:14px;outline:none;display:flex;align-items:center;justify-content:center;border-radius:4px;z-index:10;transition:all .2s;box-shadow:0 2px 4px #0000001a}.animated-vertical-layout{width:100%;height:100%;position:relative;background-color:var(--panel-background)}.vertical-panel{overflow:auto;width:100%;background-color:var(--panel-background)}.panel-content-wrapper{width:100%;height:100%;overflow:auto}.vertical-resize-handle{height:8px;background-color:var(--panel-handle);display:flex;justify-content:center;align-items:center;cursor:row-resize;position:relative;transition:background-color .2s,opacity .3s,height .3s}.vertical-resize-handle.collapsed{opacity:0;pointer-events:none}.vertical-resize-handle:hover{background-color:var(--panel-handle-hover)}.vertical-resize-handle:active{background-color:var(--panel-handle-active)}.handle-bar{width:100%;height:100%;display:flex;align-items:center;justify-content:center;gap:8px;position:relative}.collapse-toggle{background:var(--panel-button-bg);border:1px solid var(--panel-button-border);padding:4px 8px;cursor:pointer;color:var(--panel-button-icon);font-size:14px;outline:none;display:flex;align-items:center;justify-content:center;border-radius:4px;z-index:10;transition:all .2s;box-shadow:0 2px 4px #0000001a}.collapse-toggle:hover:not(:disabled){background-color:var(--panel-button-hover);box-shadow:0 2px 6px #00000026}.collapse-toggle:active:not(:disabled){opacity:.8}.tab-group{display:flex;height:100%;width:100%;overflow:hidden}.tab-group.tab-position-top,.tab-group.tab-position-bottom{flex-direction:column}.tab-group.tab-position-left,.tab-group.tab-position-right{flex-direction:row}.tab-list{display:flex;background:var(--tab-list-bg, #f5f5f5);border-bottom:1px solid var(--tab-border, #ddd);gap:0;padding:0;flex-shrink:0;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;-ms-overflow-style:none}.tab-list::-webkit-scrollbar{display:none}.tab-position-top .tab-list,.tab-position-bottom .tab-list{width:100%}.tab-list.centered{justify-content:flex-start}@media (min-width:0){.tab-list.centered{justify-content:center}.tab-list.centered:has(.tab-button:nth-child(n)){justify-content:flex-start}}.tab-position-bottom .tab-list{border-bottom:none;border-top:none}.tab-position-left .tab-list,.tab-position-right .tab-list{flex-direction:column;border-bottom:none;border-right:none;width:auto;min-width:120px}.tab-position-top .tab-button,.tab-position-bottom .tab-button{flex:1 1 0;min-width:40px;max-width:100%}.tab-button{background:var(--tab-bg, #fff);border:1px solid var(--tab-border, #ddd);border-radius:0;padding:8px 16px;cursor:pointer;font-family:var(--tab-font-family, inherit);font-size:var(--tab-font-size, 14px);font-weight:var(--tab-font-weight, 500);color:var(--tab-text, #333);transition:all .2s ease;white-space:nowrap;display:flex;align-items:center;justify-content:center;gap:6px;height:39px;line-height:1;box-sizing:border-box;container-type:inline-size}.tab-position-top .tab-button{border-bottom:none;border-top:none;border-left:none}.tab-position-top .tab-button:last-child{border-right:none}.tab-position-bottom .tab-button{border-top:none;border-bottom:none;border-left:none}.tab-position-bottom .tab-button:last-child{border-right:none}.tab-position-left .tab-button{border-right:none;border-bottom:none}.tab-position-left .tab-button:last-child{border-bottom:1px solid var(--tab-border, #ddd)}.tab-position-right .tab-button{border-left:none;border-bottom:none}.tab-position-right .tab-button:last-child{border-bottom:1px solid var(--tab-border, #ddd)}.tab-icon{display:inline-flex;align-items:center;justify-content:center}.tab-label{display:none}@container (min-width: 100px){.tab-label{display:inline}.tab-icon{display:none}}.tab-button:hover{background:var(--tab-bg-hover, #f9f9f9)}.tab-button.active{background:var(--tab-bg-active, #007bff);color:var(--tab-text-active, #fff);border-color:var(--tab-border-active, #007bff)}.tab-button:focus-visible{outline:2px solid var(--tab-focus, #007bff);outline-offset:2px}.tab-content{flex:1;overflow:auto;background:var(--tab-content-bg, #fff)}.tab-group-empty{display:flex;align-items:center;justify-content:center;height:100%;color:var(--tab-empty-text, #999);font-style:italic}.three-panel-layout{height:100%;width:100%;display:flex;flex-direction:column;position:relative;background-color:var(--panel-background);box-sizing:border-box}.three-panel-item{display:flex;flex-direction:column;overflow:hidden;position:relative;background-color:var(--panel-background);box-sizing:border-box}.three-panel-item[data-edit-mode=true]{background-color:var(--panel-accent-bg);border-radius:12px}.three-panel-item.collapsible-panel{will-change:flex}.three-panel-item.collapsible-panel.animating{pointer-events:none}.three-panel-item.collapsible-panel.collapsed{flex:0!important;min-width:0!important;max-width:0!important;width:0!important;overflow:hidden!important;visibility:hidden}.three-panel-item.middle-panel{flex:1;min-width:200px}.panel-content-wrapper{flex:1;overflow-x:hidden;overflow-y:auto;will-change:opacity;box-sizing:border-box}.resize-handle{position:relative;display:flex;align-items:center;justify-content:center;width:1px!important;cursor:col-resize;background:var(--panel-border);overflow:visible!important}.resize-handle:before{content:"";position:absolute;top:0;right:-10px;bottom:0;left:-10px;background:transparent}.resize-handle:after{content:"";position:absolute;top:0;right:-10px;bottom:0;left:-10px;background:var(--panel-handle);opacity:0;transition:opacity .2s ease;z-index:-1}.resize-handle:hover:after{opacity:1}.resize-handle:hover{background:var(--panel-handle-hover)}.resize-handle:active:after{opacity:1;background:var(--panel-handle-active)}.resize-handle:active{background:var(--panel-handle-active)}.resize-handle.collapsed{width:0!important;visibility:hidden}.resize-handle.left-handle.collapsed{margin-right:-1px}.resize-handle.right-handle.collapsed{margin-left:-1px}.handle-bar{position:relative;width:100%;height:100%;display:flex;align-items:center;justify-content:center;z-index:2}.collapse-toggle{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:20px;height:40px;background:var(--panel-button-bg);border:1px solid var(--panel-button-border);border-radius:4px;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:12px;color:var(--panel-button-icon);transition:all .2s ease;z-index:10;padding:0;line-height:1}.collapse-toggle:hover{background:var(--panel-button-hover)}.collapse-toggle:active{opacity:.8}.collapse-toggle:disabled{opacity:.5;cursor:not-allowed}@media (max-width:768px){.resize-handle:before{left:-8px;right:-8px}.resize-handle:after{left:-8px;right:-8px}.collapse-toggle{width:24px;height:48px;font-size:14px}}.snap-carousel-container{display:flex;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;scroll-behavior:smooth;gap:var(--snap-carousel-gap, 0px);padding:0;margin:0;width:100%;height:100%;background-color:var(--panel-background);box-sizing:border-box;position:relative;left:0;transform:none;container-type:inline-size;-ms-overflow-style:none;scrollbar-width:none}.snap-carousel-container::-webkit-scrollbar{display:none}.snap-carousel-container.swipe-disabled{touch-action:pan-y pinch-zoom;overscroll-behavior-x:none}.snap-carousel-panel{flex:0 0 auto;scroll-snap-align:start;scroll-snap-stop:always;width:var(--snap-carousel-panel-width, 33.33%);height:100%;box-sizing:border-box;overflow:hidden}@media (max-width:540px){.snap-carousel-panel{min-width:280px}}.mobile-tab-layout{display:flex;flex-direction:column;height:100%;width:100%;overflow:hidden}.mobile-tab-content{flex:1;overflow:hidden;min-height:0}.mobile-tab-nav{display:flex;background:var(--tab-list-bg, #f5f5f5);border-top:1px solid var(--tab-border, #ddd);flex-shrink:0;padding:0;margin:0}.mobile-tab-button{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;background:transparent;border:none;padding:14px 4px;padding-bottom:calc(14px + min(12px,env(safe-area-inset-bottom,0px)));cursor:pointer;font-family:var(--tab-font-family, inherit);font-size:var(--tab-font-size, 11px);font-weight:var(--tab-font-weight, 500);color:var(--tab-text, #666);transition:color .2s ease;min-width:0}.mobile-tab-button:hover{color:var(--tab-text-hover, #333)}.mobile-tab-button.active{color:var(--mobile-tab-text-active, #007bff)}.mobile-tab-button .tab-icon{display:flex;align-items:center;justify-content:center;font-size:24px;color:var(--tab-icon-color, #999);transition:color .2s ease}.mobile-tab-button.active .tab-icon{color:var(--mobile-tab-icon-active, #007bff)}.mobile-tab-button .tab-label{display:block;font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;line-height:1.2;color:inherit;opacity:1}.mobile-tab-button:focus-visible{outline:2px solid var(--tab-focus, #007bff);outline-offset:-2px;z-index:1}@keyframes wiggle{0%{transform:rotate(0)}25%{transform:rotate(1deg)}50%{transform:rotate(0)}75%{transform:rotate(-1deg)}to{transform:rotate(0)}}@keyframes scaleIn{0%{transform:scale(.95);opacity:0}to{transform:scale(1);opacity:1}}@keyframes pulse{0%,to{box-shadow:0 0 #3b82f666}50%{box-shadow:0 0 0 8px #3b82f600}}.editable-panel-layout{position:relative;width:100%;height:100%}.editable-panel-layout.edit-mode-active{background:#0000000d}[data-slot][data-edit-mode=true]{transform:scale(.95);transform-origin:center center;cursor:grab;will-change:transform;transition:transform .3s cubic-bezier(.4,0,.2,1)}[data-slot][data-edit-mode=true]:active{cursor:grabbing}[data-slot][data-dragging=true]{cursor:grabbing!important;transform:scale(.95)!important;transition:none!important}.edit-mode-active [data-slot][data-edit-mode=true]{transform-origin:center center}.slot-with-overlay{position:relative;width:100%;height:100%}.slot-with-overlay.dragging{opacity:0;pointer-events:none}.slot-edit-overlay{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;border:none;pointer-events:auto;cursor:grab;z-index:100;display:flex;flex-direction:column;align-items:center;justify-content:center}.slot-edit-overlay:hover{background:#3b82f608}.slot-edit-overlay:active{cursor:grabbing}.drag-indicator,.slot-position-label{display:none}.edit-mode-toggle{position:absolute;top:16px;right:16px;z-index:1000;padding:8px 16px;border-radius:8px;border:1px solid #e5e7eb;background:#fff;color:#374151;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s ease;box-shadow:0 2px 4px #0000001a}.edit-mode-toggle:hover{background:#f9fafb;box-shadow:0 4px 6px #0000001a}.edit-mode-toggle.active{background:#3b82f6;color:#fff;border-color:#2563eb}.edit-mode-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0000004d;z-index:998;animation:fadeIn .2s ease}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.edit-mode-configurator{position:relative;z-index:999;padding:20px;animation:scaleIn .3s ease}.panel-slot{position:relative;min-height:120px;border:2px dashed transparent;border-radius:12px;transition:all .3s ease;padding:12px}.panel-slot.edit-mode{border-color:#d1d5db;background:#ffffff80}.panel-slot.drag-over{border-color:#3b82f6;background:#3b82f61a;box-shadow:0 0 0 4px #3b82f61a}.panel-slot.empty{display:flex;align-items:center;justify-content:center;color:#9ca3af;font-size:14px}.draggable-panel{position:relative;padding:12px 16px;margin:8px 0;border-radius:8px;background:#fff;border:1px solid #e5e7eb;cursor:grab;transition:all .2s ease;-webkit-user-select:none;user-select:none}.draggable-panel:hover{border-color:#3b82f6;box-shadow:0 2px 8px #0000001a}.draggable-panel.dragging{opacity:.5;cursor:grabbing}.draggable-panel.edit-mode{animation:wiggle .4s ease-in-out infinite;transform-origin:center}.draggable-panel.edit-mode:nth-child(odd){animation-delay:.1s}.draggable-panel.edit-mode:nth-child(2n){animation-delay:.2s}.remove-button{position:absolute;top:-6px;right:-6px;width:20px;height:20px;border-radius:50%;background:#ef4444;color:#fff;border:2px solid white;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:12px;font-weight:700;opacity:0;transform:scale(0);transition:all .2s ease;z-index:10;box-shadow:0 2px 4px #0003}.draggable-panel.edit-mode .remove-button{opacity:1;transform:scale(1);animation:pulse 2s infinite}.remove-button:hover{background:#dc2626;transform:scale(1.1)}.panel-label{display:flex;align-items:center;gap:8px;font-size:14px;font-weight:500;color:#374151}.panel-icon{width:20px;height:20px;display:flex;align-items:center;justify-content:center}.drag-handle{display:none;width:24px;height:24px;opacity:.4;cursor:grab}.edit-mode .drag-handle{display:flex;align-items:center;justify-content:center}.drag-overlay{padding:12px 16px;border-radius:8px;background:#fff;border:2px solid #3b82f6;box-shadow:0 8px 16px #0003;cursor:grabbing;opacity:.9}.panel-group{border:2px solid #e5e7eb;border-radius:12px;padding:8px;background:#fff}.panel-group.edit-mode{animation:wiggle .5s ease-in-out infinite;border-color:#3b82f6}.panel-group-header{display:flex;justify-content:space-between;align-items:center;padding:8px;border-bottom:1px solid #e5e7eb;margin-bottom:8px}.panel-group-title{font-size:12px;font-weight:600;color:#6b7280;text-transform:uppercase}.available-panels{background:#fff;border-radius:12px;padding:16px;box-shadow:0 4px 6px #0000001a}.available-panels-title{font-size:16px;font-weight:600;color:#374151;margin-bottom:12px}.available-panels-list{display:flex;flex-direction:column;gap:8px}.slot-label{font-size:12px;font-weight:600;color:#6b7280;text-transform:uppercase;margin-bottom:8px;display:flex;align-items:center;gap:8px}.slot-indicator{width:8px;height:8px;border-radius:50%;background:#d1d5db}.slot-indicator.active{background:#3b82f6}.action-buttons{position:fixed;bottom:24px;left:50%;transform:translate(-50%);z-index:1001;display:flex;gap:12px;padding:12px 24px;background:#fff;border-radius:12px;box-shadow:0 8px 16px #00000026;animation:scaleIn .3s ease}.action-button{padding:10px 20px;border-radius:8px;border:1px solid #e5e7eb;background:#fff;color:#374151;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s ease}.action-button:hover{background:#f9fafb}.action-button.primary{background:#3b82f6;color:#fff;border-color:#2563eb}.action-button.primary:hover{background:#2563eb}@media (max-width:768px){.edit-mode-toggle{top:8px;right:8px;padding:6px 12px;font-size:12px}.action-buttons{bottom:16px;padding:10px 16px}.action-button{padding:8px 16px;font-size:13px}}@media (prefers-color-scheme:dark){.edit-mode-toggle{background:#1f2937;color:#f9fafb;border-color:#374151}.edit-mode-toggle:hover{background:#374151}.draggable-panel{background:#1f2937;color:#f9fafb;border-color:#374151}.available-panels{background:#1f2937}.panel-label{color:#f9fafb}.action-buttons{background:#1f2937}.action-button{background:#1f2937;color:#f9fafb;border-color:#374151}.action-button:hover{background:#374151}}.panel-configurator{display:flex;flex-direction:column;gap:2rem;padding:1.5rem;background:var(--configurator-bg);border-radius:8px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}.configurator-section{display:flex;flex-direction:column;gap:1rem}.section-title{margin:0;font-size:.875rem;font-weight:600;color:var(--configurator-title);text-transform:uppercase;letter-spacing:.05em;text-align:center}.slots-container{display:grid;grid-template-columns:repeat(3,1fr);gap:1rem;width:75%;margin:0 auto;align-items:start}.slot{position:relative;aspect-ratio:1 / 1.3;width:100%;padding:2.5rem 1rem 1rem;background:var(--slot-bg);border:2px solid var(--slot-border);border-radius:6px;cursor:pointer;transition:all .2s ease;display:flex;flex-direction:column;gap:.5rem;overflow:hidden;box-sizing:border-box}.slot:hover{border-color:var(--slot-border-hover);box-shadow:0 2px 4px #0000000d}.slot.selected{border-color:var(--slot-border-selected);background:var(--slot-bg-selected);box-shadow:0 0 0 3px var(--slot-bg-selected)}.slot.empty{border-style:dashed}.slot-label{font-size:.75rem;font-weight:600;color:var(--slot-label);text-transform:capitalize;text-align:left}.slot[data-position=middle] .slot-label,.slot[data-position=middle] .slot-panel-name,.slot[data-position=middle] .slot-empty-state{text-align:center}.slot[data-position=right] .slot-label,.slot[data-position=right] .slot-panel-name,.slot[data-position=right] .slot-empty-state{text-align:right}.slot-content{flex:1;display:flex;flex-direction:column;gap:.5rem;overflow-y:auto;min-height:0}.slot-panel-name{font-weight:600;color:var(--slot-content-text);font-size:.875rem}.slot-preview{flex:1;display:flex;align-items:center;justify-content:center;padding:.5rem;background:var(--slot-preview-bg);border-radius:4px;border:1px solid var(--slot-preview-border);font-size:.75rem;color:var(--slot-preview-text)}.slot-empty-state{flex:1;display:flex;align-items:center;justify-content:center;color:var(--slot-empty-text);font-size:.875rem;font-style:italic;min-height:0}.slot-clear-btn{position:absolute;top:.25rem;right:.25rem;width:24px;height:24px;padding:0;background:var(--clear-btn-bg);color:var(--clear-btn-text);border:none;border-radius:4px;cursor:pointer;font-size:1.25rem;line-height:1;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .2s ease}.slot:hover .slot-clear-btn{opacity:1}.slot-clear-btn:hover{background:var(--clear-btn-hover);transform:scale(1.1)}.available-panels{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:.75rem;width:75%;margin:0 auto}.available-panel{min-height:80px;padding:.75rem;background:var(--panel-bg);border:2px solid var(--panel-border);border-radius:6px;cursor:pointer;transition:all .2s ease;display:flex;flex-direction:column;gap:.5rem}.available-panel:hover{border-color:var(--panel-border-hover);box-shadow:0 2px 4px #0000000d;transform:translateY(-2px)}.available-panel.selected{border-color:var(--panel-border-selected);background:var(--panel-bg-selected);box-shadow:0 0 0 3px var(--panel-bg-selected)}.available-panel.in-use{opacity:.5;border-style:dashed}.available-panel.in-use:hover{transform:translateY(0);opacity:.6}.panel-label{font-weight:600;color:var(--panel-label-text);font-size:.875rem}.panel-preview{flex:1;display:flex;align-items:center;justify-content:center;padding:.5rem;background:var(--panel-preview-bg);border-radius:4px;font-size:.75rem;color:var(--panel-preview-text)}.selection-hint{padding:.75rem 1rem;background:var(--hint-bg);border:1px solid var(--hint-border);border-radius:6px;color:var(--hint-text);font-size:.875rem;text-align:center}.available-panel.multi-selected{border-color:var(--panel-border-selected);background:var(--panel-bg-selected);box-shadow:0 0 0 2px var(--panel-bg-selected)}.multi-select-badge{margin-left:.5rem;padding:.25rem .5rem;background:var(--panel-border-selected);color:#fff;font-size:.75rem;border-radius:12px;font-weight:400}.multi-select-hint{background:var(--panel-bg-selected);border-color:var(--panel-border-selected)}.slot.tab-group{border-style:solid}.group-content{position:relative;overflow-y:auto;min-height:0}.group-badge{font-size:.75rem;font-weight:600;color:var(--panel-border-selected);margin-bottom:.5rem}.group-panels{display:flex;flex-direction:column;gap:.25rem;flex:1;overflow-y:auto;min-height:0}.group-panel-label{font-size:.75rem;color:var(--slot-content-text);padding:.25rem .5rem;background:var(--slot-preview-bg);border-radius:3px;border-left:3px solid var(--panel-border-selected)}.slot-panel-label{font-weight:600;color:var(--slot-content-text);font-size:.875rem;text-align:center}.create-tab-group-btn{margin-top:.5rem;padding:.5rem .75rem;background:var(--panel-border-selected);color:#fff;border:none;border-radius:4px;font-size:.75rem;font-weight:600;cursor:pointer;transition:all .2s ease}.create-tab-group-btn:hover{transform:scale(1.05);box-shadow:0 2px 4px #0000001a}.tab-mode-toggle{position:absolute;top:.5rem;left:.5rem;padding:.25rem .5rem;background:var(--slot-bg);border:1px solid var(--slot-border);border-radius:4px;font-size:.85rem;cursor:pointer;transition:all .2s ease;z-index:10;opacity:.7;color:var(--slot-content-text)}.tab-mode-toggle svg{display:block}.tab-mode-toggle:hover{opacity:1;border-color:var(--slot-border-hover);background:var(--slot-preview-bg)}.tab-mode-toggle.active{opacity:1;background:var(--panel-border-selected);color:#fff;border-color:var(--panel-border-selected)}.tab-config-controls{margin-bottom:.5rem}.tab-config-label{display:flex;align-items:center;gap:.5rem;font-size:.75rem;color:var(--slot-label)}.tab-config-label select{padding:.25rem .5rem;border:1px solid var(--slot-border);border-radius:3px;background:var(--slot-bg);color:var(--slot-content-text);font-size:.7rem;cursor:pointer}.group-panel-item{display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding:.25rem .5rem;background:var(--slot-preview-bg);border-radius:3px;border-left:3px solid var(--panel-border-selected)}.group-panel-label{flex:1;font-size:.75rem;color:var(--slot-content-text);display:flex;align-items:center;gap:.25rem}.default-badge{color:var(--panel-border-selected);font-size:.9em}.remove-from-group-btn{width:18px;height:18px;padding:0;background:var(--clear-btn-bg);color:var(--clear-btn-text);border:none;border-radius:3px;cursor:pointer;font-size:1rem;line-height:1;display:flex;align-items:center;justify-content:center;opacity:.7;transition:all .2s ease}.remove-from-group-btn:hover{opacity:1;transform:scale(1.1)}.usage-hint{padding:.75rem 1rem;background:var(--slot-preview-bg);border:1px solid var(--slot-border);border-radius:6px;color:var(--hint-text);font-size:.875rem;text-align:center}'));
|
|
7
7
|
document.head.appendChild(elementStyle);
|
|
8
8
|
}
|
|
9
9
|
} catch (e) {
|
|
@@ -12,12 +12,12 @@
|
|
|
12
12
|
})();
|
|
13
13
|
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
14
14
|
import * as React2 from "react";
|
|
15
|
-
import React2__default, { createContext, useContext, useState,
|
|
15
|
+
import React2__default, { createContext, useContext, useState, useCallback, useMemo, memo, forwardRef, useRef, useEffect, useLayoutEffect, createElement, useImperativeHandle } from "react";
|
|
16
16
|
import { createPortal } from "react-dom";
|
|
17
17
|
import { CanvasConverter, renderNarrative, computeAggregates, selectScenario, parseTemplate, ExecutionValidator, CanvasDiscovery } from "@principal-ai/principal-view-core";
|
|
18
18
|
import { CanvasNarrativeTreeCore } from "@principal-ade/dynamic-file-tree";
|
|
19
|
-
var ThemeContext
|
|
20
|
-
var getThemeContext
|
|
19
|
+
var ThemeContext;
|
|
20
|
+
var getThemeContext = () => {
|
|
21
21
|
if (typeof window !== "undefined") {
|
|
22
22
|
const globalWindow = window;
|
|
23
23
|
if (!globalWindow.__principlemd_theme_context__) {
|
|
@@ -25,15 +25,15 @@ var getThemeContext$1 = () => {
|
|
|
25
25
|
}
|
|
26
26
|
return globalWindow.__principlemd_theme_context__;
|
|
27
27
|
} else {
|
|
28
|
-
if (!ThemeContext
|
|
29
|
-
ThemeContext
|
|
28
|
+
if (!ThemeContext) {
|
|
29
|
+
ThemeContext = createContext(void 0);
|
|
30
30
|
}
|
|
31
|
-
return ThemeContext
|
|
31
|
+
return ThemeContext;
|
|
32
32
|
}
|
|
33
33
|
};
|
|
34
|
-
var ThemeContextSingleton
|
|
35
|
-
var useTheme
|
|
36
|
-
const context = useContext(ThemeContextSingleton
|
|
34
|
+
var ThemeContextSingleton = getThemeContext();
|
|
35
|
+
var useTheme = () => {
|
|
36
|
+
const context = useContext(ThemeContextSingleton);
|
|
37
37
|
if (!context) {
|
|
38
38
|
throw new Error("useTheme must be used within a ThemeProvider");
|
|
39
39
|
}
|
|
@@ -1563,21 +1563,21 @@ function tanh(x) {
|
|
|
1563
1563
|
}
|
|
1564
1564
|
const interpolateZoom = (function zoomRho(rho, rho2, rho4) {
|
|
1565
1565
|
function zoom2(p0, p1) {
|
|
1566
|
-
var ux0 = p0[0], uy0 = p0[1], w0 = p0[2], ux1 = p1[0], uy1 = p1[1], w1 = p1[2], dx = ux1 - ux0, dy = uy1 - uy0, d2 = dx * dx + dy * dy, i,
|
|
1566
|
+
var ux0 = p0[0], uy0 = p0[1], w0 = p0[2], ux1 = p1[0], uy1 = p1[1], w1 = p1[2], dx = ux1 - ux0, dy = uy1 - uy0, d2 = dx * dx + dy * dy, i, S;
|
|
1567
1567
|
if (d2 < epsilon2) {
|
|
1568
|
-
|
|
1568
|
+
S = Math.log(w1 / w0) / rho;
|
|
1569
1569
|
i = function(t) {
|
|
1570
1570
|
return [
|
|
1571
1571
|
ux0 + t * dx,
|
|
1572
1572
|
uy0 + t * dy,
|
|
1573
|
-
w0 * Math.exp(rho * t *
|
|
1573
|
+
w0 * Math.exp(rho * t * S)
|
|
1574
1574
|
];
|
|
1575
1575
|
};
|
|
1576
1576
|
} else {
|
|
1577
1577
|
var d1 = Math.sqrt(d2), b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1), b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1), r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0), r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);
|
|
1578
|
-
|
|
1578
|
+
S = (r1 - r0) / rho;
|
|
1579
1579
|
i = function(t) {
|
|
1580
|
-
var s = t *
|
|
1580
|
+
var s = t * S, coshr0 = cosh(r0), u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));
|
|
1581
1581
|
return [
|
|
1582
1582
|
ux0 + u * dx,
|
|
1583
1583
|
uy0 + u * dy,
|
|
@@ -1585,7 +1585,7 @@ const interpolateZoom = (function zoomRho(rho, rho2, rho4) {
|
|
|
1585
1585
|
];
|
|
1586
1586
|
};
|
|
1587
1587
|
}
|
|
1588
|
-
i.duration =
|
|
1588
|
+
i.duration = S * 1e3 * rho / Math.SQRT2;
|
|
1589
1589
|
return i;
|
|
1590
1590
|
}
|
|
1591
1591
|
zoom2.rho = function(_) {
|
|
@@ -4974,152 +4974,135 @@ function getDefaultExportFromCjs(x) {
|
|
|
4974
4974
|
return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x;
|
|
4975
4975
|
}
|
|
4976
4976
|
var withSelector = { exports: {} };
|
|
4977
|
-
var
|
|
4977
|
+
var withSelector_production_min = {};
|
|
4978
4978
|
var shim = { exports: {} };
|
|
4979
|
-
var
|
|
4979
|
+
var useSyncExternalStoreShim_production_min = {};
|
|
4980
4980
|
/**
|
|
4981
4981
|
* @license React
|
|
4982
|
-
* use-sync-external-store-shim.production.js
|
|
4982
|
+
* use-sync-external-store-shim.production.min.js
|
|
4983
4983
|
*
|
|
4984
|
-
* Copyright (c)
|
|
4984
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
4985
4985
|
*
|
|
4986
4986
|
* This source code is licensed under the MIT license found in the
|
|
4987
4987
|
* LICENSE file in the root directory of this source tree.
|
|
4988
4988
|
*/
|
|
4989
|
-
var
|
|
4990
|
-
function
|
|
4991
|
-
if (
|
|
4992
|
-
|
|
4993
|
-
var
|
|
4994
|
-
function
|
|
4995
|
-
return
|
|
4996
|
-
}
|
|
4997
|
-
var
|
|
4998
|
-
function
|
|
4999
|
-
var
|
|
5000
|
-
|
|
5001
|
-
|
|
5002
|
-
|
|
5003
|
-
|
|
5004
|
-
|
|
5005
|
-
|
|
5006
|
-
|
|
5007
|
-
|
|
5008
|
-
|
|
5009
|
-
|
|
5010
|
-
|
|
5011
|
-
|
|
5012
|
-
|
|
5013
|
-
});
|
|
5014
|
-
},
|
|
5015
|
-
[subscribe]
|
|
5016
|
-
);
|
|
5017
|
-
useDebugValue2(value);
|
|
5018
|
-
return value;
|
|
4989
|
+
var hasRequiredUseSyncExternalStoreShim_production_min;
|
|
4990
|
+
function requireUseSyncExternalStoreShim_production_min() {
|
|
4991
|
+
if (hasRequiredUseSyncExternalStoreShim_production_min) return useSyncExternalStoreShim_production_min;
|
|
4992
|
+
hasRequiredUseSyncExternalStoreShim_production_min = 1;
|
|
4993
|
+
var e = React2__default;
|
|
4994
|
+
function h(a, b) {
|
|
4995
|
+
return a === b && (0 !== a || 1 / a === 1 / b) || a !== a && b !== b;
|
|
4996
|
+
}
|
|
4997
|
+
var k = "function" === typeof Object.is ? Object.is : h, l = e.useState, m = e.useEffect, n = e.useLayoutEffect, p = e.useDebugValue;
|
|
4998
|
+
function q(a, b) {
|
|
4999
|
+
var d = b(), f = l({ inst: { value: d, getSnapshot: b } }), c = f[0].inst, g = f[1];
|
|
5000
|
+
n(function() {
|
|
5001
|
+
c.value = d;
|
|
5002
|
+
c.getSnapshot = b;
|
|
5003
|
+
r(c) && g({ inst: c });
|
|
5004
|
+
}, [a, d, b]);
|
|
5005
|
+
m(function() {
|
|
5006
|
+
r(c) && g({ inst: c });
|
|
5007
|
+
return a(function() {
|
|
5008
|
+
r(c) && g({ inst: c });
|
|
5009
|
+
});
|
|
5010
|
+
}, [a]);
|
|
5011
|
+
p(d);
|
|
5012
|
+
return d;
|
|
5019
5013
|
}
|
|
5020
|
-
function
|
|
5021
|
-
var
|
|
5022
|
-
|
|
5014
|
+
function r(a) {
|
|
5015
|
+
var b = a.getSnapshot;
|
|
5016
|
+
a = a.value;
|
|
5023
5017
|
try {
|
|
5024
|
-
var
|
|
5025
|
-
return !
|
|
5026
|
-
} catch (
|
|
5018
|
+
var d = b();
|
|
5019
|
+
return !k(a, d);
|
|
5020
|
+
} catch (f) {
|
|
5027
5021
|
return true;
|
|
5028
5022
|
}
|
|
5029
5023
|
}
|
|
5030
|
-
function
|
|
5031
|
-
return
|
|
5024
|
+
function t(a, b) {
|
|
5025
|
+
return b();
|
|
5032
5026
|
}
|
|
5033
|
-
var
|
|
5034
|
-
|
|
5035
|
-
return
|
|
5027
|
+
var u = "undefined" === typeof window || "undefined" === typeof window.document || "undefined" === typeof window.document.createElement ? t : q;
|
|
5028
|
+
useSyncExternalStoreShim_production_min.useSyncExternalStore = void 0 !== e.useSyncExternalStore ? e.useSyncExternalStore : u;
|
|
5029
|
+
return useSyncExternalStoreShim_production_min;
|
|
5036
5030
|
}
|
|
5037
5031
|
var hasRequiredShim;
|
|
5038
5032
|
function requireShim() {
|
|
5039
5033
|
if (hasRequiredShim) return shim.exports;
|
|
5040
5034
|
hasRequiredShim = 1;
|
|
5041
5035
|
{
|
|
5042
|
-
shim.exports =
|
|
5036
|
+
shim.exports = requireUseSyncExternalStoreShim_production_min();
|
|
5043
5037
|
}
|
|
5044
5038
|
return shim.exports;
|
|
5045
5039
|
}
|
|
5046
5040
|
/**
|
|
5047
5041
|
* @license React
|
|
5048
|
-
* use-sync-external-store-shim/with-selector.production.js
|
|
5042
|
+
* use-sync-external-store-shim/with-selector.production.min.js
|
|
5049
5043
|
*
|
|
5050
|
-
* Copyright (c)
|
|
5044
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
5051
5045
|
*
|
|
5052
5046
|
* This source code is licensed under the MIT license found in the
|
|
5053
5047
|
* LICENSE file in the root directory of this source tree.
|
|
5054
5048
|
*/
|
|
5055
|
-
var
|
|
5056
|
-
function
|
|
5057
|
-
if (
|
|
5058
|
-
|
|
5059
|
-
var
|
|
5060
|
-
function
|
|
5061
|
-
return
|
|
5062
|
-
}
|
|
5063
|
-
var
|
|
5064
|
-
|
|
5065
|
-
var
|
|
5066
|
-
if (null ===
|
|
5067
|
-
var
|
|
5068
|
-
|
|
5069
|
-
} else
|
|
5070
|
-
|
|
5071
|
-
function() {
|
|
5072
|
-
|
|
5073
|
-
|
|
5074
|
-
|
|
5075
|
-
|
|
5076
|
-
|
|
5077
|
-
|
|
5078
|
-
|
|
5079
|
-
if (isEqual(currentSelection, nextSnapshot))
|
|
5080
|
-
return memoizedSelection = currentSelection;
|
|
5081
|
-
}
|
|
5082
|
-
return memoizedSelection = nextSnapshot;
|
|
5049
|
+
var hasRequiredWithSelector_production_min;
|
|
5050
|
+
function requireWithSelector_production_min() {
|
|
5051
|
+
if (hasRequiredWithSelector_production_min) return withSelector_production_min;
|
|
5052
|
+
hasRequiredWithSelector_production_min = 1;
|
|
5053
|
+
var h = React2__default, n = requireShim();
|
|
5054
|
+
function p(a, b) {
|
|
5055
|
+
return a === b && (0 !== a || 1 / a === 1 / b) || a !== a && b !== b;
|
|
5056
|
+
}
|
|
5057
|
+
var q = "function" === typeof Object.is ? Object.is : p, r = n.useSyncExternalStore, t = h.useRef, u = h.useEffect, v = h.useMemo, w = h.useDebugValue;
|
|
5058
|
+
withSelector_production_min.useSyncExternalStoreWithSelector = function(a, b, e, l, g) {
|
|
5059
|
+
var c = t(null);
|
|
5060
|
+
if (null === c.current) {
|
|
5061
|
+
var f = { hasValue: false, value: null };
|
|
5062
|
+
c.current = f;
|
|
5063
|
+
} else f = c.current;
|
|
5064
|
+
c = v(function() {
|
|
5065
|
+
function a2(a3) {
|
|
5066
|
+
if (!c2) {
|
|
5067
|
+
c2 = true;
|
|
5068
|
+
d2 = a3;
|
|
5069
|
+
a3 = l(a3);
|
|
5070
|
+
if (void 0 !== g && f.hasValue) {
|
|
5071
|
+
var b2 = f.value;
|
|
5072
|
+
if (g(b2, a3)) return k = b2;
|
|
5083
5073
|
}
|
|
5084
|
-
|
|
5085
|
-
if (objectIs(memoizedSnapshot, nextSnapshot)) return currentSelection;
|
|
5086
|
-
var nextSelection = selector2(nextSnapshot);
|
|
5087
|
-
if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))
|
|
5088
|
-
return memoizedSnapshot = nextSnapshot, currentSelection;
|
|
5089
|
-
memoizedSnapshot = nextSnapshot;
|
|
5090
|
-
return memoizedSelection = nextSelection;
|
|
5074
|
+
return k = a3;
|
|
5091
5075
|
}
|
|
5092
|
-
|
|
5093
|
-
return
|
|
5094
|
-
|
|
5095
|
-
|
|
5096
|
-
|
|
5097
|
-
|
|
5098
|
-
|
|
5099
|
-
|
|
5100
|
-
|
|
5101
|
-
|
|
5102
|
-
|
|
5103
|
-
|
|
5104
|
-
|
|
5105
|
-
|
|
5106
|
-
|
|
5107
|
-
|
|
5108
|
-
|
|
5109
|
-
|
|
5110
|
-
|
|
5111
|
-
);
|
|
5112
|
-
|
|
5113
|
-
return value;
|
|
5076
|
+
b2 = k;
|
|
5077
|
+
if (q(d2, a3)) return b2;
|
|
5078
|
+
var e2 = l(a3);
|
|
5079
|
+
if (void 0 !== g && g(b2, e2)) return b2;
|
|
5080
|
+
d2 = a3;
|
|
5081
|
+
return k = e2;
|
|
5082
|
+
}
|
|
5083
|
+
var c2 = false, d2, k, m = void 0 === e ? null : e;
|
|
5084
|
+
return [function() {
|
|
5085
|
+
return a2(b());
|
|
5086
|
+
}, null === m ? void 0 : function() {
|
|
5087
|
+
return a2(m());
|
|
5088
|
+
}];
|
|
5089
|
+
}, [b, e, l, g]);
|
|
5090
|
+
var d = r(a, c[0], c[1]);
|
|
5091
|
+
u(function() {
|
|
5092
|
+
f.hasValue = true;
|
|
5093
|
+
f.value = d;
|
|
5094
|
+
}, [d]);
|
|
5095
|
+
w(d);
|
|
5096
|
+
return d;
|
|
5114
5097
|
};
|
|
5115
|
-
return
|
|
5098
|
+
return withSelector_production_min;
|
|
5116
5099
|
}
|
|
5117
5100
|
var hasRequiredWithSelector;
|
|
5118
5101
|
function requireWithSelector() {
|
|
5119
5102
|
if (hasRequiredWithSelector) return withSelector.exports;
|
|
5120
5103
|
hasRequiredWithSelector = 1;
|
|
5121
5104
|
{
|
|
5122
|
-
withSelector.exports =
|
|
5105
|
+
withSelector.exports = requireWithSelector_production_min();
|
|
5123
5106
|
}
|
|
5124
5107
|
return withSelector.exports;
|
|
5125
5108
|
}
|
|
@@ -5185,7 +5168,8 @@ function shallow$1(objA, objB) {
|
|
|
5185
5168
|
return false;
|
|
5186
5169
|
}
|
|
5187
5170
|
if (objA instanceof Map && objB instanceof Map) {
|
|
5188
|
-
if (objA.size !== objB.size)
|
|
5171
|
+
if (objA.size !== objB.size)
|
|
5172
|
+
return false;
|
|
5189
5173
|
for (const [key, value] of objA) {
|
|
5190
5174
|
if (!Object.is(value, objB.get(key))) {
|
|
5191
5175
|
return false;
|
|
@@ -5194,7 +5178,8 @@ function shallow$1(objA, objB) {
|
|
|
5194
5178
|
return true;
|
|
5195
5179
|
}
|
|
5196
5180
|
if (objA instanceof Set && objB instanceof Set) {
|
|
5197
|
-
if (objA.size !== objB.size)
|
|
5181
|
+
if (objA.size !== objB.size)
|
|
5182
|
+
return false;
|
|
5198
5183
|
for (const value of objA) {
|
|
5199
5184
|
if (!objB.has(value)) {
|
|
5200
5185
|
return false;
|
|
@@ -5206,8 +5191,8 @@ function shallow$1(objA, objB) {
|
|
|
5206
5191
|
if (keysA.length !== Object.keys(objB).length) {
|
|
5207
5192
|
return false;
|
|
5208
5193
|
}
|
|
5209
|
-
for (
|
|
5210
|
-
if (!Object.prototype.hasOwnProperty.call(objB,
|
|
5194
|
+
for (let i = 0; i < keysA.length; i++) {
|
|
5195
|
+
if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !Object.is(objA[keysA[i]], objB[keysA[i]])) {
|
|
5211
5196
|
return false;
|
|
5212
5197
|
}
|
|
5213
5198
|
}
|
|
@@ -8184,29 +8169,6 @@ function NodeResizer({ nodeId, isVisible = true, handleClassName, handleStyle, l
|
|
|
8184
8169
|
}
|
|
8185
8170
|
return jsxs(Fragment, { children: [XY_RESIZER_LINE_POSITIONS.map((position) => jsx(NodeResizeControl, { className: lineClassName, style: lineStyle, nodeId, position, variant: ResizeControlVariant.Line, color: color2, minWidth, minHeight, maxWidth, maxHeight, onResizeStart, keepAspectRatio, shouldResize, onResize, onResizeEnd }, position)), XY_RESIZER_HANDLE_POSITIONS.map((position) => jsx(NodeResizeControl, { className: handleClassName, style: handleStyle, nodeId, position, color: color2, minWidth, minHeight, maxWidth, maxHeight, onResizeStart, keepAspectRatio, shouldResize, onResize, onResizeEnd }, position))] });
|
|
8186
8171
|
}
|
|
8187
|
-
var ThemeContext;
|
|
8188
|
-
var getThemeContext = () => {
|
|
8189
|
-
if (typeof window !== "undefined") {
|
|
8190
|
-
const globalWindow = window;
|
|
8191
|
-
if (!globalWindow.__principlemd_theme_context__) {
|
|
8192
|
-
globalWindow.__principlemd_theme_context__ = createContext(void 0);
|
|
8193
|
-
}
|
|
8194
|
-
return globalWindow.__principlemd_theme_context__;
|
|
8195
|
-
} else {
|
|
8196
|
-
if (!ThemeContext) {
|
|
8197
|
-
ThemeContext = createContext(void 0);
|
|
8198
|
-
}
|
|
8199
|
-
return ThemeContext;
|
|
8200
|
-
}
|
|
8201
|
-
};
|
|
8202
|
-
var ThemeContextSingleton = getThemeContext();
|
|
8203
|
-
var useTheme = () => {
|
|
8204
|
-
const context = useContext(ThemeContextSingleton);
|
|
8205
|
-
if (!context) {
|
|
8206
|
-
throw new Error("useTheme must be used within a ThemeProvider");
|
|
8207
|
-
}
|
|
8208
|
-
return context;
|
|
8209
|
-
};
|
|
8210
8172
|
/**
|
|
8211
8173
|
* @license lucide-react v0.554.0 - ISC
|
|
8212
8174
|
*
|
|
@@ -47470,7 +47432,7 @@ const CanvasEditorPanel = ({
|
|
|
47470
47432
|
canvasFileInfo
|
|
47471
47433
|
}) => {
|
|
47472
47434
|
var _a, _b;
|
|
47473
|
-
const { theme } = useTheme
|
|
47435
|
+
const { theme } = useTheme();
|
|
47474
47436
|
const graphRef = useRef(null);
|
|
47475
47437
|
const [dimensions, setDimensions] = useState({ width: 800, height: 600 });
|
|
47476
47438
|
const resizeObserverRef = useRef(null);
|
|
@@ -48183,7 +48145,7 @@ const NarrativeRenderer = ({
|
|
|
48183
48145
|
activeEventIndex,
|
|
48184
48146
|
showOnlySummary = false
|
|
48185
48147
|
}) => {
|
|
48186
|
-
const { theme } = useTheme
|
|
48148
|
+
const { theme } = useTheme();
|
|
48187
48149
|
const activeEventRef = React2__default.useRef(null);
|
|
48188
48150
|
const [contextMenu, setContextMenu] = React2__default.useState({ visible: false, x: 0, y: 0, event: null });
|
|
48189
48151
|
React2__default.useEffect(() => {
|
|
@@ -48718,7 +48680,7 @@ const ScenarioDetailsPanel = ({
|
|
|
48718
48680
|
selectedScenario
|
|
48719
48681
|
}) => {
|
|
48720
48682
|
var _a;
|
|
48721
|
-
const { theme } = useTheme
|
|
48683
|
+
const { theme } = useTheme();
|
|
48722
48684
|
const [showHelp, setShowHelp] = useState(false);
|
|
48723
48685
|
const [showExecutionSelector, setShowExecutionSelector] = useState(false);
|
|
48724
48686
|
const highlightTemplateVariables = (text) => {
|
|
@@ -50321,7 +50283,7 @@ const sections$c = [
|
|
|
50321
50283
|
{ id: "workflow", title: "End-to-End Workflow", component: Step7Workflow }
|
|
50322
50284
|
];
|
|
50323
50285
|
const NarrativeExplainerPanel = ({ className }) => {
|
|
50324
|
-
const { theme } = useTheme
|
|
50286
|
+
const { theme } = useTheme();
|
|
50325
50287
|
const [expandedSections, setExpandedSections] = useState(/* @__PURE__ */ new Set(["what"]));
|
|
50326
50288
|
const toggleSection = (id2) => {
|
|
50327
50289
|
const newExpanded = new Set(expandedSections);
|
|
@@ -50476,11 +50438,14 @@ const NarrativeExplainerPanel = ({ className }) => {
|
|
|
50476
50438
|
};
|
|
50477
50439
|
const NarrativeTemplatePanel = ({
|
|
50478
50440
|
narrativeTemplate,
|
|
50441
|
+
availableExecutions = [],
|
|
50442
|
+
executionScenarioMap = {},
|
|
50443
|
+
onExecutionSelect,
|
|
50479
50444
|
onScenarioHover,
|
|
50480
50445
|
onScenarioClick
|
|
50481
50446
|
}) => {
|
|
50482
50447
|
var _a;
|
|
50483
|
-
const { theme } = useTheme
|
|
50448
|
+
const { theme } = useTheme();
|
|
50484
50449
|
const handleScenarioClick = (scenarioId, scenario) => {
|
|
50485
50450
|
if (onScenarioClick) {
|
|
50486
50451
|
onScenarioClick(scenarioId, scenario);
|
|
@@ -50532,7 +50497,11 @@ const NarrativeTemplatePanel = ({
|
|
|
50532
50497
|
}
|
|
50533
50498
|
),
|
|
50534
50499
|
/* @__PURE__ */ jsx("div", { style: { flex: 1, overflow: "auto" }, children: (_a = narrativeTemplate.scenarios) == null ? void 0 : _a.map((scenario, index2) => {
|
|
50535
|
-
|
|
50500
|
+
const scenarioId = scenario.id || String(index2);
|
|
50501
|
+
const matchingExecutions = availableExecutions.filter(
|
|
50502
|
+
(exec) => executionScenarioMap[exec.id] === scenarioId
|
|
50503
|
+
);
|
|
50504
|
+
return /* @__PURE__ */ jsxs(
|
|
50536
50505
|
"div",
|
|
50537
50506
|
{
|
|
50538
50507
|
style: {
|
|
@@ -50540,36 +50509,77 @@ const NarrativeTemplatePanel = ({
|
|
|
50540
50509
|
borderBottom: `1px solid ${theme.colors.border}`,
|
|
50541
50510
|
overflow: "hidden"
|
|
50542
50511
|
},
|
|
50543
|
-
children:
|
|
50544
|
-
|
|
50545
|
-
|
|
50546
|
-
|
|
50547
|
-
|
|
50548
|
-
|
|
50549
|
-
|
|
50550
|
-
|
|
50551
|
-
|
|
50552
|
-
|
|
50553
|
-
|
|
50554
|
-
|
|
50555
|
-
|
|
50556
|
-
e
|
|
50557
|
-
|
|
50558
|
-
|
|
50559
|
-
|
|
50560
|
-
|
|
50561
|
-
|
|
50562
|
-
|
|
50563
|
-
e
|
|
50564
|
-
|
|
50565
|
-
onScenarioHover
|
|
50566
|
-
|
|
50512
|
+
children: [
|
|
50513
|
+
/* @__PURE__ */ jsx(
|
|
50514
|
+
"div",
|
|
50515
|
+
{
|
|
50516
|
+
onClick: () => handleScenarioClick(scenarioId, scenario),
|
|
50517
|
+
style: {
|
|
50518
|
+
padding: "12px 12px 12px 20px",
|
|
50519
|
+
cursor: "pointer",
|
|
50520
|
+
display: "flex",
|
|
50521
|
+
alignItems: "center",
|
|
50522
|
+
transition: "background 0.2s",
|
|
50523
|
+
background: "transparent"
|
|
50524
|
+
},
|
|
50525
|
+
onMouseEnter: (e) => {
|
|
50526
|
+
e.currentTarget.style.background = theme.colors.backgroundSecondary;
|
|
50527
|
+
if (onScenarioHover) {
|
|
50528
|
+
const eventNames = getScenarioEventNames(scenario);
|
|
50529
|
+
onScenarioHover(eventNames);
|
|
50530
|
+
}
|
|
50531
|
+
},
|
|
50532
|
+
onMouseLeave: (e) => {
|
|
50533
|
+
e.currentTarget.style.background = "transparent";
|
|
50534
|
+
if (onScenarioHover) {
|
|
50535
|
+
onScenarioHover(null);
|
|
50536
|
+
}
|
|
50537
|
+
},
|
|
50538
|
+
children: /* @__PURE__ */ jsxs("div", { style: { flex: 1 }, children: [
|
|
50539
|
+
/* @__PURE__ */ jsx("h3", { style: { margin: 0, fontSize: theme.fontSizes[1], fontWeight: 600 }, children: scenarioId.split("-").map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ") }),
|
|
50540
|
+
matchingExecutions.length > 0 && /* @__PURE__ */ jsxs("div", { style: {
|
|
50541
|
+
marginTop: "4px",
|
|
50542
|
+
fontSize: theme.fontSizes[0],
|
|
50543
|
+
color: theme.colors.textSecondary
|
|
50544
|
+
}, children: [
|
|
50545
|
+
matchingExecutions.length,
|
|
50546
|
+
" execution",
|
|
50547
|
+
matchingExecutions.length !== 1 ? "s" : ""
|
|
50548
|
+
] })
|
|
50549
|
+
] })
|
|
50550
|
+
}
|
|
50551
|
+
),
|
|
50552
|
+
matchingExecutions.length > 0 && /* @__PURE__ */ jsx("div", { style: { paddingLeft: "20px", paddingBottom: "8px" }, children: matchingExecutions.map((exec) => /* @__PURE__ */ jsx(
|
|
50553
|
+
"div",
|
|
50554
|
+
{
|
|
50555
|
+
onClick: (e) => {
|
|
50556
|
+
e.stopPropagation();
|
|
50557
|
+
if (onExecutionSelect) {
|
|
50558
|
+
onExecutionSelect(exec.id);
|
|
50559
|
+
}
|
|
50560
|
+
},
|
|
50561
|
+
style: {
|
|
50562
|
+
padding: "6px 12px",
|
|
50563
|
+
marginBottom: "4px",
|
|
50564
|
+
background: theme.colors.backgroundSecondary,
|
|
50565
|
+
borderRadius: "4px",
|
|
50566
|
+
cursor: "pointer",
|
|
50567
|
+
fontSize: theme.fontSizes[0],
|
|
50568
|
+
transition: "background 0.2s"
|
|
50569
|
+
},
|
|
50570
|
+
onMouseEnter: (e) => {
|
|
50571
|
+
e.currentTarget.style.background = theme.colors.border;
|
|
50572
|
+
},
|
|
50573
|
+
onMouseLeave: (e) => {
|
|
50574
|
+
e.currentTarget.style.background = theme.colors.backgroundSecondary;
|
|
50575
|
+
},
|
|
50576
|
+
children: exec.name
|
|
50567
50577
|
},
|
|
50568
|
-
|
|
50569
|
-
}
|
|
50570
|
-
|
|
50578
|
+
exec.id
|
|
50579
|
+
)) })
|
|
50580
|
+
]
|
|
50571
50581
|
},
|
|
50572
|
-
|
|
50582
|
+
scenarioId
|
|
50573
50583
|
);
|
|
50574
50584
|
}) })
|
|
50575
50585
|
]
|
|
@@ -50801,7 +50811,7 @@ const CanvasDetailPanel = ({
|
|
|
50801
50811
|
narrativeFileInfo: narrativeFileInfoProp
|
|
50802
50812
|
}) => {
|
|
50803
50813
|
var _a, _b;
|
|
50804
|
-
const { theme } = useTheme
|
|
50814
|
+
const { theme } = useTheme();
|
|
50805
50815
|
const [state, setState] = useState({
|
|
50806
50816
|
canvas: null,
|
|
50807
50817
|
execution: null,
|
|
@@ -53314,21 +53324,24 @@ function panelDataHelper(panelDataArray, panelData, layout) {
|
|
|
53314
53324
|
pivotIndices
|
|
53315
53325
|
};
|
|
53316
53326
|
}
|
|
53317
|
-
function
|
|
53327
|
+
function C(e) {
|
|
53318
53328
|
return { "--panel-background": e.colors.background, "--panel-border": e.colors.border, "--panel-handle": e.colors.backgroundSecondary, "--panel-handle-hover": e.colors.backgroundHover, "--panel-handle-active": e.colors.primary, "--panel-button-bg": e.colors.surface, "--panel-button-hover": e.colors.backgroundHover, "--panel-button-border": e.colors.border, "--panel-button-icon": e.colors.textSecondary, "--panel-accent-bg": e.colors.primary + "15" };
|
|
53319
53329
|
}
|
|
53320
|
-
const z = forwardRef(({ panels: o, className: a = "", style: s, theme: d, minPanelWidth: u = 350, idealPanelWidth: p = 0.333, showSeparator: h = false, onPanelChange: m, preventKeyboardScroll: f = true },
|
|
53321
|
-
const
|
|
53322
|
-
useImperativeHandle(
|
|
53323
|
-
if (!
|
|
53324
|
-
const t =
|
|
53330
|
+
const z = forwardRef(({ panels: o, className: a = "", style: s, theme: d, minPanelWidth: u = 350, idealPanelWidth: p = 0.333, showSeparator: h = false, onPanelChange: m, preventKeyboardScroll: f = true, disableSwipe: g = false }, v) => {
|
|
53331
|
+
const b = useRef(null), y = useRef(false), w = useRef(null), x = C(d);
|
|
53332
|
+
useImperativeHandle(v, () => ({ scrollToPanel: (e) => {
|
|
53333
|
+
if (!b.current) return;
|
|
53334
|
+
const t = b.current, n = t.children[e];
|
|
53325
53335
|
if (n) {
|
|
53336
|
+
y.current = true, w.current && clearTimeout(w.current);
|
|
53326
53337
|
const e2 = n.offsetLeft;
|
|
53327
|
-
t.scrollTo({ left: e2, behavior: "smooth" })
|
|
53338
|
+
t.scrollTo({ left: e2, behavior: "smooth" }), w.current = setTimeout(() => {
|
|
53339
|
+
y.current = false;
|
|
53340
|
+
}, 500);
|
|
53328
53341
|
}
|
|
53329
53342
|
}, getCurrentPanel: () => {
|
|
53330
|
-
if (!
|
|
53331
|
-
const e =
|
|
53343
|
+
if (!b.current || 0 === b.current.children.length) return 0;
|
|
53344
|
+
const e = b.current, t = e.getBoundingClientRect().left;
|
|
53332
53345
|
let n = 0, r = 1 / 0;
|
|
53333
53346
|
for (let o2 = 0; o2 < e.children.length; o2++) {
|
|
53334
53347
|
const i = e.children[o2].getBoundingClientRect(), a2 = Math.abs(i.left - t);
|
|
@@ -53337,8 +53350,8 @@ const z = forwardRef(({ panels: o, className: a = "", style: s, theme: d, minPan
|
|
|
53337
53350
|
return n;
|
|
53338
53351
|
} }));
|
|
53339
53352
|
useEffect(() => {
|
|
53340
|
-
if (!f || !
|
|
53341
|
-
const e =
|
|
53353
|
+
if (!f || !b.current) return;
|
|
53354
|
+
const e = b.current, t = (e2) => {
|
|
53342
53355
|
const t2 = e2.target;
|
|
53343
53356
|
if ("INPUT" === t2.tagName || "TEXTAREA" === t2.tagName || "SELECT" === t2.tagName || t2.isContentEditable || null !== t2.closest(".xterm") || null !== t2.closest('[contenteditable="true"]')) return;
|
|
53344
53357
|
[" ", "Space", "ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight", "PageUp", "PageDown"].includes(e2.key) && e2.preventDefault();
|
|
@@ -53346,37 +53359,40 @@ const z = forwardRef(({ panels: o, className: a = "", style: s, theme: d, minPan
|
|
|
53346
53359
|
return e.addEventListener("keydown", t), () => {
|
|
53347
53360
|
e.removeEventListener("keydown", t);
|
|
53348
53361
|
};
|
|
53349
|
-
}, [f])
|
|
53350
|
-
|
|
53351
|
-
|
|
53352
|
-
|
|
53353
|
-
|
|
53362
|
+
}, [f]), useEffect(() => () => {
|
|
53363
|
+
w.current && clearTimeout(w.current);
|
|
53364
|
+
}, []);
|
|
53365
|
+
const S = o.length, R = 2 * u;
|
|
53366
|
+
let N;
|
|
53367
|
+
N = 1 === S || 2 === S ? "100%" : `max(${u}px, ${100 * p}%)`;
|
|
53368
|
+
const E = React2__default.useId().replace(/:/g, "_");
|
|
53354
53369
|
return jsxs(Fragment, { children: [
|
|
53355
|
-
2 ===
|
|
53356
|
-
.snap-carousel-container[data-carousel-id="${
|
|
53370
|
+
2 === S && /* @__PURE__ */ jsx("style", { children: `
|
|
53371
|
+
.snap-carousel-container[data-carousel-id="${E}"][data-panel-count="2"] .snap-carousel-panel {
|
|
53357
53372
|
width: 100%;
|
|
53358
53373
|
}
|
|
53359
|
-
@container (min-width: ${
|
|
53360
|
-
.snap-carousel-container[data-carousel-id="${
|
|
53374
|
+
@container (min-width: ${R}px) {
|
|
53375
|
+
.snap-carousel-container[data-carousel-id="${E}"][data-panel-count="2"] .snap-carousel-panel {
|
|
53361
53376
|
width: 50%;
|
|
53362
53377
|
}
|
|
53363
53378
|
}
|
|
53364
53379
|
` }),
|
|
53365
|
-
/* @__PURE__ */ jsx("div", { ref:
|
|
53366
|
-
if (!m || !
|
|
53367
|
-
|
|
53380
|
+
/* @__PURE__ */ jsx("div", { ref: b, className: `snap-carousel-container ${g ? "swipe-disabled" : ""} ${a}`, style: { ...x, ...s, "--snap-carousel-min-width": `${u}px`, "--snap-carousel-ideal-width": 100 * p + "%", "--snap-carousel-gap": h ? "1px" : "0px", "--snap-carousel-panel-width": N, "--snap-carousel-panel-count": S, "--snap-carousel-two-panel-threshold": `${R}px` }, onScroll: (e) => {
|
|
53381
|
+
if (!m || !b.current || 0 === b.current.children.length) return;
|
|
53382
|
+
if (y.current) return;
|
|
53383
|
+
const t = b.current, n = t.getBoundingClientRect().left;
|
|
53368
53384
|
let r = 0, o2 = 1 / 0;
|
|
53369
53385
|
for (let i = 0; i < t.children.length; i++) {
|
|
53370
53386
|
const e2 = t.children[i].getBoundingClientRect(), a2 = Math.abs(e2.left - n);
|
|
53371
53387
|
a2 < o2 && (o2 = a2, r = i);
|
|
53372
53388
|
}
|
|
53373
53389
|
m(r);
|
|
53374
|
-
}, "data-panel-count":
|
|
53390
|
+
}, "data-panel-count": S, "data-carousel-id": E, children: o.map((t, n) => /* @__PURE__ */ jsx("div", { className: "snap-carousel-panel", children: t }, n)) })
|
|
53375
53391
|
] });
|
|
53376
53392
|
});
|
|
53377
53393
|
z.displayName = "SnapCarousel";
|
|
53378
|
-
var le, se;
|
|
53379
|
-
(se = le || (le = {})).DragStart = "dragStart", se.DragMove = "dragMove", se.DragEnd = "dragEnd", se.DragCancel = "dragCancel", se.DragOver = "dragOver", se.RegisterDroppable = "registerDroppable", se.SetDroppableDisabled = "setDroppableDisabled", se.UnregisterDroppable = "unregisterDroppable";
|
|
53394
|
+
var le$1, se;
|
|
53395
|
+
(se = le$1 || (le$1 = {})).DragStart = "dragStart", se.DragMove = "dragMove", se.DragEnd = "dragEnd", se.DragCancel = "dragCancel", se.DragOver = "dragOver", se.RegisterDroppable = "registerDroppable", se.SetDroppableDisabled = "setDroppableDisabled", se.UnregisterDroppable = "unregisterDroppable";
|
|
53380
53396
|
const de = /* @__PURE__ */ Object.freeze({ x: 0, y: 0 });
|
|
53381
53397
|
var Te, Ae;
|
|
53382
53398
|
(Ae = Te || (Te = {}))[Ae.Forward = 1] = "Forward", Ae[Ae.Backward = -1] = "Backward";
|
|
@@ -53385,8 +53401,8 @@ var _e, je, He, Ke;
|
|
|
53385
53401
|
({ start: [He.Space, He.Enter], cancel: [He.Esc], end: [He.Space, He.Enter, He.Tab] });
|
|
53386
53402
|
var rt, ot;
|
|
53387
53403
|
(ot = rt || (rt = {}))[ot.RightClick = 2] = "RightClick";
|
|
53388
|
-
var at
|
|
53389
|
-
(lt = at
|
|
53404
|
+
var at, lt, st, ct;
|
|
53405
|
+
(lt = at || (at = {}))[lt.Pointer = 0] = "Pointer", lt[lt.DraggableRect = 1] = "DraggableRect", (ct = st || (st = {}))[ct.TreeOrder = 0] = "TreeOrder", ct[ct.ReversedTreeOrder = 1] = "ReversedTreeOrder";
|
|
53390
53406
|
({ x: { [Te.Backward]: false, [Te.Forward]: false }, y: { [Te.Backward]: false, [Te.Forward]: false } });
|
|
53391
53407
|
var pt, ht, mt;
|
|
53392
53408
|
(ht = pt || (pt = {}))[ht.Always = 0] = "Always", ht[ht.BeforeDragging = 1] = "BeforeDragging", ht[ht.WhileDragging = 2] = "WhileDragging", (mt || (mt = {})).Optimized = "optimized";
|
|
@@ -53402,13 +53418,13 @@ var Ut;
|
|
|
53402
53418
|
}
|
|
53403
53419
|
return Ut || (Ut = createContext(void 0)), Ut;
|
|
53404
53420
|
})();
|
|
53405
|
-
var
|
|
53406
|
-
var
|
|
53407
|
-
var
|
|
53408
|
-
class
|
|
53421
|
+
var Ee = Object.defineProperty;
|
|
53422
|
+
var Re = (o, e, t) => e in o ? Ee(o, e, { enumerable: true, configurable: true, writable: true, value: t }) : o[e] = t;
|
|
53423
|
+
var le = (o, e, t) => Re(o, typeof e != "symbol" ? e + "" : e, t);
|
|
53424
|
+
class Me {
|
|
53409
53425
|
constructor() {
|
|
53410
|
-
|
|
53411
|
-
|
|
53426
|
+
le(this, "PRESETS_KEY", "panel-layouts:workspace-presets");
|
|
53427
|
+
le(this, "REPO_STATE_PREFIX", "panel-layouts:repo-state:");
|
|
53412
53428
|
}
|
|
53413
53429
|
/**
|
|
53414
53430
|
* Load all user-created workspace presets
|
|
@@ -53468,14 +53484,14 @@ class Le {
|
|
|
53468
53484
|
for (let t = 0; t < localStorage.length; t++) {
|
|
53469
53485
|
const r = localStorage.key(t);
|
|
53470
53486
|
if (r && r.startsWith(this.REPO_STATE_PREFIX)) {
|
|
53471
|
-
const
|
|
53472
|
-
if (
|
|
53487
|
+
const s = r.substring(this.REPO_STATE_PREFIX.length), i = localStorage.getItem(r);
|
|
53488
|
+
if (i)
|
|
53473
53489
|
try {
|
|
53474
|
-
e[
|
|
53475
|
-
} catch (
|
|
53490
|
+
e[s] = JSON.parse(i);
|
|
53491
|
+
} catch (a) {
|
|
53476
53492
|
console.error(
|
|
53477
|
-
`Failed to parse repository state for ${
|
|
53478
|
-
|
|
53493
|
+
`Failed to parse repository state for ${s}:`,
|
|
53494
|
+
a
|
|
53479
53495
|
);
|
|
53480
53496
|
}
|
|
53481
53497
|
}
|
|
@@ -53486,7 +53502,7 @@ class Le {
|
|
|
53486
53502
|
}
|
|
53487
53503
|
}
|
|
53488
53504
|
}
|
|
53489
|
-
class
|
|
53505
|
+
class O {
|
|
53490
53506
|
/**
|
|
53491
53507
|
* Configure a custom storage adapter (for Electron IPC or remote storage)
|
|
53492
53508
|
*/
|
|
@@ -53513,7 +53529,7 @@ class D {
|
|
|
53513
53529
|
* Create a new workspace layout
|
|
53514
53530
|
*/
|
|
53515
53531
|
static async createWorkspaceLayout(e) {
|
|
53516
|
-
const t = await this.adapter.loadWorkspacePresets(), r = this.generateWorkspaceId(e.name),
|
|
53532
|
+
const t = await this.adapter.loadWorkspacePresets(), r = this.generateWorkspaceId(e.name), s = {
|
|
53517
53533
|
id: r,
|
|
53518
53534
|
name: e.name,
|
|
53519
53535
|
description: e.description,
|
|
@@ -53523,34 +53539,34 @@ class D {
|
|
|
53523
53539
|
createdAt: Date.now(),
|
|
53524
53540
|
updatedAt: Date.now(),
|
|
53525
53541
|
isBuiltIn: false
|
|
53526
|
-
},
|
|
53542
|
+
}, i = {
|
|
53527
53543
|
...t,
|
|
53528
|
-
[r]:
|
|
53544
|
+
[r]: s
|
|
53529
53545
|
};
|
|
53530
|
-
return await this.adapter.saveWorkspacePresets(
|
|
53546
|
+
return await this.adapter.saveWorkspacePresets(i), s;
|
|
53531
53547
|
}
|
|
53532
53548
|
/**
|
|
53533
53549
|
* Update an existing workspace layout
|
|
53534
53550
|
*/
|
|
53535
53551
|
static async updateWorkspaceLayout(e, t) {
|
|
53536
|
-
const r = await this.adapter.loadWorkspacePresets(),
|
|
53537
|
-
if (!
|
|
53552
|
+
const r = await this.adapter.loadWorkspacePresets(), s = r[e];
|
|
53553
|
+
if (!s)
|
|
53538
53554
|
return console.error(`Workspace layout ${e} not found`), null;
|
|
53539
|
-
if (
|
|
53555
|
+
if (s.isBuiltIn)
|
|
53540
53556
|
return console.error(`Cannot update built-in workspace layout ${e}`), null;
|
|
53541
|
-
const
|
|
53542
|
-
...
|
|
53557
|
+
const i = {
|
|
53558
|
+
...s,
|
|
53543
53559
|
...t,
|
|
53544
53560
|
id: e,
|
|
53545
53561
|
// Preserve ID
|
|
53546
|
-
createdAt:
|
|
53562
|
+
createdAt: s.createdAt,
|
|
53547
53563
|
// Preserve creation time
|
|
53548
53564
|
updatedAt: Date.now()
|
|
53549
|
-
},
|
|
53565
|
+
}, a = {
|
|
53550
53566
|
...r,
|
|
53551
|
-
[e]:
|
|
53567
|
+
[e]: i
|
|
53552
53568
|
};
|
|
53553
|
-
return await this.adapter.saveWorkspacePresets(
|
|
53569
|
+
return await this.adapter.saveWorkspacePresets(a), i;
|
|
53554
53570
|
}
|
|
53555
53571
|
/**
|
|
53556
53572
|
* Delete a workspace layout
|
|
@@ -53561,8 +53577,8 @@ class D {
|
|
|
53561
53577
|
return console.error(`Workspace layout ${e} not found`), false;
|
|
53562
53578
|
if (r.isBuiltIn)
|
|
53563
53579
|
return console.error(`Cannot delete built-in workspace layout ${e}`), false;
|
|
53564
|
-
const
|
|
53565
|
-
return delete
|
|
53580
|
+
const s = { ...t };
|
|
53581
|
+
return delete s[e], await this.adapter.saveWorkspacePresets(s), true;
|
|
53566
53582
|
}
|
|
53567
53583
|
/**
|
|
53568
53584
|
* Get repository state (which workspace + current sizes/collapsed)
|
|
@@ -53600,23 +53616,23 @@ class D {
|
|
|
53600
53616
|
* Check if repository state differs from workspace defaults
|
|
53601
53617
|
*/
|
|
53602
53618
|
static hasStateDeviation(e, t) {
|
|
53603
|
-
const r = t.defaultSizes ? JSON.stringify(e.sizes) !== JSON.stringify(t.defaultSizes) : false,
|
|
53604
|
-
return { hasSizeDeviation: r, hasCollapsedDeviation:
|
|
53619
|
+
const r = t.defaultSizes ? JSON.stringify(e.sizes) !== JSON.stringify(t.defaultSizes) : false, s = t.defaultCollapsed ? JSON.stringify(e.collapsed) !== JSON.stringify(t.defaultCollapsed) : false;
|
|
53620
|
+
return { hasSizeDeviation: r, hasCollapsedDeviation: s };
|
|
53605
53621
|
}
|
|
53606
53622
|
/**
|
|
53607
53623
|
* Update workspace defaults from repository state
|
|
53608
53624
|
*/
|
|
53609
53625
|
static async updateWorkspaceFromRepositoryState(e, t) {
|
|
53610
|
-
const r = await this.getWorkspaceLayout(e),
|
|
53611
|
-
if (!r || !
|
|
53626
|
+
const r = await this.getWorkspaceLayout(e), s = await this.getRepositoryState(t);
|
|
53627
|
+
if (!r || !s || r.isBuiltIn) {
|
|
53612
53628
|
console.error(
|
|
53613
53629
|
"Cannot update built-in workspace or workspace/state not found"
|
|
53614
53630
|
);
|
|
53615
53631
|
return;
|
|
53616
53632
|
}
|
|
53617
53633
|
await this.updateWorkspaceLayout(e, {
|
|
53618
|
-
defaultSizes:
|
|
53619
|
-
defaultCollapsed:
|
|
53634
|
+
defaultSizes: s.sizes,
|
|
53635
|
+
defaultCollapsed: s.collapsed
|
|
53620
53636
|
});
|
|
53621
53637
|
}
|
|
53622
53638
|
/**
|
|
@@ -53628,9 +53644,9 @@ class D {
|
|
|
53628
53644
|
console.error(`Workspace ${t} not found`);
|
|
53629
53645
|
return;
|
|
53630
53646
|
}
|
|
53631
|
-
const
|
|
53632
|
-
|
|
53633
|
-
...
|
|
53647
|
+
const s = await this.getRepositoryState(e);
|
|
53648
|
+
s && await this.setRepositoryState(e, {
|
|
53649
|
+
...s,
|
|
53634
53650
|
sizes: r.defaultSizes || { left: 20, middle: 45, right: 35 },
|
|
53635
53651
|
collapsed: r.defaultCollapsed || { left: false, right: false }
|
|
53636
53652
|
});
|
|
@@ -53646,8 +53662,8 @@ class D {
|
|
|
53646
53662
|
*/
|
|
53647
53663
|
static async findMatchingWorkspace(e) {
|
|
53648
53664
|
const t = await this.getWorkspaceLayouts();
|
|
53649
|
-
for (const [r,
|
|
53650
|
-
if (this.isLayoutMatchingWorkspace(e,
|
|
53665
|
+
for (const [r, s] of Object.entries(t))
|
|
53666
|
+
if (this.isLayoutMatchingWorkspace(e, s))
|
|
53651
53667
|
return r;
|
|
53652
53668
|
return null;
|
|
53653
53669
|
}
|
|
@@ -53875,17 +53891,17 @@ class D {
|
|
|
53875
53891
|
Object.keys(e).length;
|
|
53876
53892
|
}
|
|
53877
53893
|
}
|
|
53878
|
-
|
|
53879
|
-
function
|
|
53894
|
+
le(O, "adapter", new Me());
|
|
53895
|
+
function gt(o, e, t, r) {
|
|
53880
53896
|
useEffect(() => {
|
|
53881
|
-
const
|
|
53897
|
+
const s = e.on(
|
|
53882
53898
|
"panel:focus",
|
|
53883
|
-
(
|
|
53884
|
-
|
|
53899
|
+
(a) => {
|
|
53900
|
+
a.payload.panelId === o && t();
|
|
53885
53901
|
}
|
|
53886
53902
|
);
|
|
53887
53903
|
return () => {
|
|
53888
|
-
|
|
53904
|
+
s();
|
|
53889
53905
|
};
|
|
53890
53906
|
}, [o, e, t, r]);
|
|
53891
53907
|
}
|
|
@@ -54043,9 +54059,9 @@ const CanvasListPanel = ({
|
|
|
54043
54059
|
actions,
|
|
54044
54060
|
events
|
|
54045
54061
|
}) => {
|
|
54046
|
-
const { theme } = useTheme
|
|
54062
|
+
const { theme } = useTheme();
|
|
54047
54063
|
const panelRef = useRef(null);
|
|
54048
|
-
|
|
54064
|
+
gt("canvas-list", events, () => {
|
|
54049
54065
|
var _a;
|
|
54050
54066
|
return (_a = panelRef.current) == null ? void 0 : _a.focus();
|
|
54051
54067
|
});
|
|
@@ -54078,7 +54094,7 @@ const CanvasListPanel = ({
|
|
|
54078
54094
|
return filtered;
|
|
54079
54095
|
}, [canvases, searchQuery]);
|
|
54080
54096
|
const handleTreeNodeClick = useCallback((node) => {
|
|
54081
|
-
if (node.type === "
|
|
54097
|
+
if (node.type === "storyboard" && node.canvas) {
|
|
54082
54098
|
setSelectedCanvasId(node.canvas.id);
|
|
54083
54099
|
if (events) {
|
|
54084
54100
|
const canvasFileInfo = getCanvasFileInfo(node.canvas.path);
|
|
@@ -54087,10 +54103,12 @@ const CanvasListPanel = ({
|
|
|
54087
54103
|
source: "canvas-list-panel",
|
|
54088
54104
|
timestamp: Date.now(),
|
|
54089
54105
|
payload: {
|
|
54090
|
-
action: "
|
|
54106
|
+
action: "openCanvas",
|
|
54091
54107
|
canvasId: node.canvas.id,
|
|
54092
54108
|
canvas: node.canvas,
|
|
54093
|
-
canvasFileInfo
|
|
54109
|
+
canvasFileInfo,
|
|
54110
|
+
openMode: "editor"
|
|
54111
|
+
// Indicates canvas editor should be opened
|
|
54094
54112
|
}
|
|
54095
54113
|
});
|
|
54096
54114
|
}
|
|
@@ -54104,38 +54122,21 @@ const CanvasListPanel = ({
|
|
|
54104
54122
|
source: "canvas-list-panel",
|
|
54105
54123
|
timestamp: Date.now(),
|
|
54106
54124
|
payload: {
|
|
54107
|
-
action: "
|
|
54125
|
+
action: "openCanvas",
|
|
54108
54126
|
canvasId: node.canvas.id,
|
|
54109
54127
|
canvas: node.canvas,
|
|
54110
54128
|
canvasFileInfo,
|
|
54111
54129
|
narrativeId: node.narrative.id,
|
|
54112
54130
|
narrative: node.narrative,
|
|
54113
54131
|
narrativeTemplate: node.narrativeTemplate,
|
|
54114
|
-
narrativeFileInfo
|
|
54132
|
+
narrativeFileInfo,
|
|
54133
|
+
openMode: "detail"
|
|
54134
|
+
// Indicates canvas detail should be opened
|
|
54115
54135
|
}
|
|
54116
54136
|
});
|
|
54117
54137
|
}
|
|
54118
54138
|
}
|
|
54119
54139
|
}, [events, getCanvasFileInfo]);
|
|
54120
|
-
const handleOpenCanvas = useCallback((canvas) => {
|
|
54121
|
-
if (actions == null ? void 0 : actions.openFile) {
|
|
54122
|
-
actions.openFile(canvas.path);
|
|
54123
|
-
}
|
|
54124
|
-
if (events) {
|
|
54125
|
-
const canvasFileInfo = getCanvasFileInfo(canvas.path);
|
|
54126
|
-
events.emit({
|
|
54127
|
-
type: "custom",
|
|
54128
|
-
source: "canvas-list-panel",
|
|
54129
|
-
timestamp: Date.now(),
|
|
54130
|
-
payload: {
|
|
54131
|
-
action: "openCanvas",
|
|
54132
|
-
canvasId: canvas.id,
|
|
54133
|
-
canvas,
|
|
54134
|
-
canvasFileInfo
|
|
54135
|
-
}
|
|
54136
|
-
});
|
|
54137
|
-
}
|
|
54138
|
-
}, [actions, events, getCanvasFileInfo]);
|
|
54139
54140
|
const handleRefresh = () => {
|
|
54140
54141
|
setIsRefreshing(true);
|
|
54141
54142
|
if (events) {
|
|
@@ -54402,7 +54403,6 @@ const CanvasListPanel = ({
|
|
|
54402
54403
|
narratives,
|
|
54403
54404
|
theme,
|
|
54404
54405
|
onClick: handleTreeNodeClick,
|
|
54405
|
-
onOpenCanvas: handleOpenCanvas,
|
|
54406
54406
|
selectedNodeId: selectedCanvasId ? `canvas:${selectedCanvasId}` : void 0,
|
|
54407
54407
|
defaultOpen: false,
|
|
54408
54408
|
horizontalNodePadding: "clamp(16px, 4vw, 24px)",
|
|
@@ -54669,7 +54669,7 @@ const EventControllerPanel = ({
|
|
|
54669
54669
|
autoPlay = false,
|
|
54670
54670
|
loop = false
|
|
54671
54671
|
}) => {
|
|
54672
|
-
const { theme } = useTheme
|
|
54672
|
+
const { theme } = useTheme();
|
|
54673
54673
|
const [status, setStatus] = useState("stopped");
|
|
54674
54674
|
const [currentIndex, setCurrentIndex] = useState(-1);
|
|
54675
54675
|
const [speed, setSpeed] = useState(defaultSpeed);
|
|
@@ -55585,7 +55585,7 @@ const sections$b = [
|
|
|
55585
55585
|
{ id: "workflow", title: "End-to-End Workflow", component: Step7EndToEnd$1 }
|
|
55586
55586
|
];
|
|
55587
55587
|
const LibraryAnchoringExplainerPanel = ({ className }) => {
|
|
55588
|
-
const { theme } = useTheme
|
|
55588
|
+
const { theme } = useTheme();
|
|
55589
55589
|
const [expandedSections, setExpandedSections] = useState(/* @__PURE__ */ new Set(["what"]));
|
|
55590
55590
|
const toggleSection = (id2) => {
|
|
55591
55591
|
const newExpanded = new Set(expandedSections);
|
|
@@ -56166,7 +56166,7 @@ const sections$a = [
|
|
|
56166
56166
|
{ id: "workflow", title: "Complete Workflow", component: Step7EndToEnd }
|
|
56167
56167
|
];
|
|
56168
56168
|
const RuntimeValidationExplainerPanel = ({ className }) => {
|
|
56169
|
-
const { theme } = useTheme
|
|
56169
|
+
const { theme } = useTheme();
|
|
56170
56170
|
const [expandedSections, setExpandedSections] = useState(/* @__PURE__ */ new Set(["problem"]));
|
|
56171
56171
|
const toggleSection = (id2) => {
|
|
56172
56172
|
const newExpanded = new Set(expandedSections);
|
|
@@ -56757,7 +56757,7 @@ const sections$9 = [
|
|
|
56757
56757
|
{ id: "together", title: "How They Work Together", component: Step7WorkingTogether }
|
|
56758
56758
|
];
|
|
56759
56759
|
const TestVsProductionExplainerPanel = ({ className }) => {
|
|
56760
|
-
const { theme } = useTheme
|
|
56760
|
+
const { theme } = useTheme();
|
|
56761
56761
|
const [expandedSections, setExpandedSections] = useState(/* @__PURE__ */ new Set(["infrastructure"]));
|
|
56762
56762
|
const toggleSection = (id2) => {
|
|
56763
56763
|
const newExpanded = new Set(expandedSections);
|
|
@@ -57302,7 +57302,7 @@ const sections$8 = [
|
|
|
57302
57302
|
{ id: "benefits", title: "Why This Matters", component: Step7Benefits$4 }
|
|
57303
57303
|
];
|
|
57304
57304
|
const ScenarioEnumerationExplainerPanel = ({ className }) => {
|
|
57305
|
-
const { theme } = useTheme
|
|
57305
|
+
const { theme } = useTheme();
|
|
57306
57306
|
const [expandedSections, setExpandedSections] = useState(/* @__PURE__ */ new Set(["problem"]));
|
|
57307
57307
|
const toggleSection = (id2) => {
|
|
57308
57308
|
const newExpanded = new Set(expandedSections);
|
|
@@ -57916,7 +57916,7 @@ const sections$7 = [
|
|
|
57916
57916
|
{ id: "evolution", title: "Evolution Path", component: Step7Evolution }
|
|
57917
57917
|
];
|
|
57918
57918
|
const CanvasTypesExplainerPanel = ({ className }) => {
|
|
57919
|
-
const { theme } = useTheme
|
|
57919
|
+
const { theme } = useTheme();
|
|
57920
57920
|
const [expandedSections, setExpandedSections] = useState(/* @__PURE__ */ new Set(["types"]));
|
|
57921
57921
|
const toggleSection = (id2) => {
|
|
57922
57922
|
const newExpanded = new Set(expandedSections);
|
|
@@ -58468,7 +58468,7 @@ const sections$6 = [
|
|
|
58468
58468
|
{ id: "benefits", title: "Benefits of Composability", component: Step7Benefits$3 }
|
|
58469
58469
|
];
|
|
58470
58470
|
const MonorepoComposabilityExplainerPanel = ({ className }) => {
|
|
58471
|
-
const { theme } = useTheme
|
|
58471
|
+
const { theme } = useTheme();
|
|
58472
58472
|
const [expandedSections, setExpandedSections] = useState(/* @__PURE__ */ new Set(["challenge"]));
|
|
58473
58473
|
const toggleSection = (id2) => {
|
|
58474
58474
|
const newExpanded = new Set(expandedSections);
|
|
@@ -59037,7 +59037,7 @@ const sections$5 = [
|
|
|
59037
59037
|
{ id: "benefits", title: "Why It Matters", component: Step7Benefits$2 }
|
|
59038
59038
|
];
|
|
59039
59039
|
const HierarchicalCanvasCompositionExplainerPanel = ({ className }) => {
|
|
59040
|
-
const { theme } = useTheme
|
|
59040
|
+
const { theme } = useTheme();
|
|
59041
59041
|
const [expandedSections, setExpandedSections] = useState(/* @__PURE__ */ new Set(["pattern"]));
|
|
59042
59042
|
const toggleSection = (id2) => {
|
|
59043
59043
|
const newExpanded = new Set(expandedSections);
|
|
@@ -59556,7 +59556,7 @@ const sections$4 = [
|
|
|
59556
59556
|
{ id: "why", title: "Why This Analogy Works", component: Step7WhyItWorks }
|
|
59557
59557
|
];
|
|
59558
59558
|
const BookAnalogyExplainerPanel = ({ className }) => {
|
|
59559
|
-
const { theme } = useTheme
|
|
59559
|
+
const { theme } = useTheme();
|
|
59560
59560
|
const [expandedSections, setExpandedSections] = useState(/* @__PURE__ */ new Set(["structure"]));
|
|
59561
59561
|
const toggleSection = (id2) => {
|
|
59562
59562
|
const newExpanded = new Set(expandedSections);
|
|
@@ -60062,7 +60062,7 @@ const sections$3 = [
|
|
|
60062
60062
|
{ id: "benefits", title: "Why This Works", component: Step7Benefits$1 }
|
|
60063
60063
|
];
|
|
60064
60064
|
const ProductionDebuggingExplainerPanel = ({ className }) => {
|
|
60065
|
-
const { theme } = useTheme
|
|
60065
|
+
const { theme } = useTheme();
|
|
60066
60066
|
const [expandedSections, setExpandedSections] = useState(/* @__PURE__ */ new Set(["scenario"]));
|
|
60067
60067
|
const toggleSection = (id2) => {
|
|
60068
60068
|
const newExpanded = new Set(expandedSections);
|
|
@@ -60635,7 +60635,7 @@ const sections$2 = [
|
|
|
60635
60635
|
{ id: "benefits", title: "Why It Matters", component: Step6Benefits$1 }
|
|
60636
60636
|
];
|
|
60637
60637
|
const MultipleCanvasViewsExplainerPanel = ({ className }) => {
|
|
60638
|
-
const { theme } = useTheme
|
|
60638
|
+
const { theme } = useTheme();
|
|
60639
60639
|
const [expandedSections, setExpandedSections] = useState(/* @__PURE__ */ new Set(["onetrace"]));
|
|
60640
60640
|
const toggleSection = (id2) => {
|
|
60641
60641
|
const newExpanded = new Set(expandedSections);
|
|
@@ -61138,7 +61138,7 @@ const sections$1 = [
|
|
|
61138
61138
|
{ id: "implementation", title: "Implementation", component: Step7Implementation }
|
|
61139
61139
|
];
|
|
61140
61140
|
const TelemetryCoverageExplainerPanel = ({ className }) => {
|
|
61141
|
-
const { theme } = useTheme
|
|
61141
|
+
const { theme } = useTheme();
|
|
61142
61142
|
const [expandedSections, setExpandedSections] = useState(/* @__PURE__ */ new Set(["problem"]));
|
|
61143
61143
|
const toggleSection = (id2) => {
|
|
61144
61144
|
const newExpanded = new Set(expandedSections);
|
|
@@ -61629,7 +61629,7 @@ const sections = [
|
|
|
61629
61629
|
{ id: "benefits", title: "Why It Matters", component: Step7Benefits }
|
|
61630
61630
|
];
|
|
61631
61631
|
const ChangeImpactAnalysisExplainerPanel = ({ className }) => {
|
|
61632
|
-
const { theme } = useTheme
|
|
61632
|
+
const { theme } = useTheme();
|
|
61633
61633
|
const [expandedSections, setExpandedSections] = useState(/* @__PURE__ */ new Set(["problem"]));
|
|
61634
61634
|
const toggleSection = (id2) => {
|
|
61635
61635
|
const newExpanded = new Set(expandedSections);
|