@mastra/playground-ui 69.0.0-alpha.1 → 69.0.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components.css +6 -0
- package/dist/{CodeEditor-ZoBu3Gjw.js → CodeEditor-BqAM9L7t.js} +5 -2
- package/dist/{CodeEditor-ZoBu3Gjw.js.map → CodeEditor-BqAM9L7t.js.map} +1 -1
- package/dist/{CodeEditor-DHIDfP5g.cjs → CodeEditor-zMSUzPdX.cjs} +5 -2
- package/dist/{CodeEditor-DHIDfP5g.cjs.map → CodeEditor-zMSUzPdX.cjs.map} +1 -1
- package/dist/{Comment-rQxuMDQv.cjs → Comment-A07IvOt2.cjs} +3 -3
- package/dist/{Comment-rQxuMDQv.cjs.map → Comment-A07IvOt2.cjs.map} +1 -1
- package/dist/{Comment-2q9SomE2.js → Comment-D_gSx7oM.js} +3 -3
- package/dist/{Comment-2q9SomE2.js.map → Comment-D_gSx7oM.js.map} +1 -1
- package/dist/{Composer-u1K6edoZ.cjs → Composer-D2BqRyb5.cjs} +2 -2
- package/dist/Composer-D2BqRyb5.cjs.map +1 -0
- package/dist/{Composer-bVE8qK52.js → Composer-kjwmlIgL.js} +2 -2
- package/dist/Composer-kjwmlIgL.js.map +1 -0
- package/dist/{DataCodeSection-CTodi9wg.js → DataCodeSection-CcX8Z68Y.js} +2 -2
- package/dist/{DataCodeSection-CTodi9wg.js.map → DataCodeSection-CcX8Z68Y.js.map} +1 -1
- package/dist/{DataCodeSection-7SvRJj6f.cjs → DataCodeSection-JPGTWLcL.cjs} +2 -2
- package/dist/{DataCodeSection-7SvRJj6f.cjs.map → DataCodeSection-JPGTWLcL.cjs.map} +1 -1
- package/dist/{DataDetailsPanel-BDoD6pxx.cjs → DataDetailsPanel-DCMlaG7j.cjs} +2 -2
- package/dist/{DataDetailsPanel-BDoD6pxx.cjs.map → DataDetailsPanel-DCMlaG7j.cjs.map} +1 -1
- package/dist/{DataDetailsPanel-BU05psHL.js → DataDetailsPanel-mTfbbQho.js} +2 -2
- package/dist/{DataDetailsPanel-BU05psHL.js.map → DataDetailsPanel-mTfbbQho.js.map} +1 -1
- package/dist/{DataPanel-BRRAvWYQ.cjs → DataPanel-LfExjFpP.cjs} +2 -2
- package/dist/{DataPanel-BRRAvWYQ.cjs.map → DataPanel-LfExjFpP.cjs.map} +1 -1
- package/dist/{DataPanel-pVr5LVaK.js → DataPanel-Rv5Mb_pf.js} +2 -2
- package/dist/{DataPanel-pVr5LVaK.js.map → DataPanel-Rv5Mb_pf.js.map} +1 -1
- package/dist/{FilterBar-CFacnMNl.js → FilterBar-DgHNtsDI.js} +5 -5
- package/dist/FilterBar-DgHNtsDI.js.map +1 -0
- package/dist/{FilterBar-CR8nbvoe.cjs → FilterBar-O8SYau_Q.cjs} +5 -5
- package/dist/FilterBar-O8SYau_Q.cjs.map +1 -0
- package/dist/{Tree-kgLG4IbP.cjs → Tree-6pubDJLQ.cjs} +2 -2
- package/dist/Tree-6pubDJLQ.cjs.map +1 -0
- package/dist/{Tree-D1_VJClB.js → Tree-DpRLmis3.js} +2 -2
- package/dist/Tree-DpRLmis3.js.map +1 -0
- package/dist/{Workflow-CXRv3YXx.js → Workflow-BVVYys0W.js} +2 -2
- package/dist/{Workflow-CXRv3YXx.js.map → Workflow-BVVYys0W.js.map} +1 -1
- package/dist/{Workflow-DIfTVqZs.cjs → Workflow-CwIjxwC6.cjs} +2 -2
- package/dist/{Workflow-DIfTVqZs.cjs.map → Workflow-CwIjxwC6.cjs.map} +1 -1
- package/dist/{ask-user-D4ezQ6pt.js → ask-user-CqzPUD9E.js} +2 -2
- package/dist/{ask-user-D4ezQ6pt.js.map → ask-user-CqzPUD9E.js.map} +1 -1
- package/dist/{ask-user-DcnUNMM5.cjs → ask-user-DIYcPkoX.cjs} +2 -2
- package/dist/{ask-user-DcnUNMM5.cjs.map → ask-user-DIYcPkoX.cjs.map} +1 -1
- package/dist/{combobox-lbSxWRMl.js → combobox-DLdInLYm.js} +2 -2
- package/dist/{combobox-lbSxWRMl.js.map → combobox-DLdInLYm.js.map} +1 -1
- package/dist/{combobox-i723LxeC.cjs → combobox-DU2jsrGa.cjs} +2 -2
- package/dist/{combobox-i723LxeC.cjs.map → combobox-DU2jsrGa.cjs.map} +1 -1
- package/dist/{combobox-parts-BeNqgCbj.cjs → combobox-parts-C236ZHtn.cjs} +2 -2
- package/dist/combobox-parts-C236ZHtn.cjs.map +1 -0
- package/dist/{combobox-parts-C9o4UfH_.js → combobox-parts-_m3Qgmci.js} +2 -2
- package/dist/combobox-parts-_m3Qgmci.js.map +1 -0
- package/dist/components/CodeEditor.cjs.js +1 -1
- package/dist/components/CodeEditor.es.js +1 -1
- package/dist/components/Combobox.cjs.js +2 -2
- package/dist/components/Combobox.es.js +2 -2
- package/dist/components/Command.cjs.js +1 -1
- package/dist/components/Command.cjs.js.map +1 -1
- package/dist/components/Command.es.js +1 -1
- package/dist/components/Command.es.js.map +1 -1
- package/dist/components/Comment.cjs.js +1 -1
- package/dist/components/Comment.es.js +1 -1
- package/dist/components/Composer.cjs.js +1 -1
- package/dist/components/Composer.es.js +1 -1
- package/dist/components/DataCodeSection.cjs.js +1 -1
- package/dist/components/DataCodeSection.es.js +1 -1
- package/dist/components/DataDetailsPanel.cjs.js +1 -1
- package/dist/components/DataDetailsPanel.es.js +1 -1
- package/dist/components/DataList.cjs.js +1 -1
- package/dist/components/DataList.es.js +1 -1
- package/dist/components/DataPanel.cjs.js +1 -1
- package/dist/components/DataPanel.es.js +1 -1
- package/dist/components/DateTimePicker.cjs.js +1 -1
- package/dist/components/DateTimePicker.es.js +1 -1
- package/dist/components/DateTimeRangePicker.cjs.js +1 -1
- package/dist/components/DateTimeRangePicker.es.js +1 -1
- package/dist/components/EnvironmentVariablesEditor.cjs.js +1 -1
- package/dist/components/EnvironmentVariablesEditor.es.js +1 -1
- package/dist/components/FilterBar.cjs.js +3 -3
- package/dist/components/FilterBar.es.js +3 -3
- package/dist/components/FormFieldBlocks.cjs.js +1 -1
- package/dist/components/FormFieldBlocks.es.js +1 -1
- package/dist/components/Input.cjs.js +1 -1
- package/dist/components/Input.es.js +1 -1
- package/dist/components/InputGroup.cjs.js +1 -1
- package/dist/components/InputGroup.es.js +1 -1
- package/dist/components/InputNumber.cjs.js +1 -1
- package/dist/components/InputNumber.es.js +1 -1
- package/dist/components/JSONSchemaForm.cjs.js +1 -1
- package/dist/components/JSONSchemaForm.es.js +1 -1
- package/dist/components/PropertyFilter.cjs.js +2 -2
- package/dist/components/PropertyFilter.es.js +2 -2
- package/dist/components/RuleBuilder.cjs.js +1 -1
- package/dist/components/RuleBuilder.es.js +1 -1
- package/dist/components/SavedViews.cjs.js +2 -2
- package/dist/components/SavedViews.cjs.js.map +1 -1
- package/dist/components/SavedViews.es.js +2 -2
- package/dist/components/SavedViews.es.js.map +1 -1
- package/dist/components/SearchInput.cjs.js +1 -1
- package/dist/components/SearchInput.es.js +1 -1
- package/dist/components/SideDialog.cjs.js +1 -1
- package/dist/components/SideDialog.es.js +1 -1
- package/dist/components/Textarea.cjs.js +1 -1
- package/dist/components/Textarea.cjs.js.map +1 -1
- package/dist/components/Textarea.es.js +1 -1
- package/dist/components/Textarea.es.js.map +1 -1
- package/dist/components/Tree.cjs.js +1 -1
- package/dist/components/Tree.es.js +1 -1
- package/dist/components/Workflow.cjs.js +1 -1
- package/dist/components/Workflow.es.js +1 -1
- package/dist/components/ai/ask-user.cjs.js +1 -1
- package/dist/components/ai/ask-user.es.js +1 -1
- package/dist/{date-time-range-picker-BUjjjvo8.js → date-time-range-picker-CJyhcug7.js} +2 -2
- package/dist/{date-time-range-picker-BUjjjvo8.js.map → date-time-range-picker-CJyhcug7.js.map} +1 -1
- package/dist/{date-time-range-picker-2a-wUBTk.cjs → date-time-range-picker-Dhnuwa-U.cjs} +2 -2
- package/dist/{date-time-range-picker-2a-wUBTk.cjs.map → date-time-range-picker-Dhnuwa-U.cjs.map} +1 -1
- package/dist/domains/chat/attachments/composer-attachment-list.cjs.js +1 -1
- package/dist/domains/chat/attachments/composer-attachment-list.es.js +1 -1
- package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js +1 -1
- package/dist/domains/chat/components/network-choice-metadata-dialog.es.js +1 -1
- package/dist/domains/chat/messages/dataset-save-action.cjs.js +1 -1
- package/dist/domains/chat/messages/dataset-save-action.es.js +1 -1
- package/dist/domains/chat/messages/message-row.cjs.js +1 -1
- package/dist/domains/chat/messages/message-row.es.js +1 -1
- package/dist/domains/chat/tools/badges/agent-badge-wrapper.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/agent-badge-wrapper.es.js +1 -1
- package/dist/domains/chat/tools/badges/agent-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/agent-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/ask-user-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/ask-user-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/background-task-metadata-dialog.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/background-task-metadata-dialog.es.js +1 -1
- package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/code-mode-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/tool-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/tool-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/workflow-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/workflow-badge.es.js +1 -1
- package/dist/domains/chat/tools/mcp-input-request-tool.cjs.js +2 -2
- package/dist/domains/chat/tools/mcp-input-request-tool.es.js +2 -2
- package/dist/domains/chat/tools/tool-card.cjs.js +1 -1
- package/dist/domains/chat/tools/tool-card.es.js +1 -1
- package/dist/domains/datasets/components/add-dataset-item-dialog/add-dataset-item-dialog.cjs.js +1 -1
- package/dist/domains/datasets/components/add-dataset-item-dialog/add-dataset-item-dialog.es.js +1 -1
- package/dist/domains/datasets/components/add-dataset-item-dialog/trajectory-editor.cjs.js +2 -2
- package/dist/domains/datasets/components/add-dataset-item-dialog/trajectory-editor.es.js +2 -2
- package/dist/domains/datasets/components/save-as-dataset-item-dialog.cjs.js +2 -2
- package/dist/domains/datasets/components/save-as-dataset-item-dialog.es.js +2 -2
- package/dist/domains/knowledge/components/KnowledgePageExplorer.cjs.js +2 -2
- package/dist/domains/knowledge/components/KnowledgePageExplorer.es.js +2 -2
- package/dist/domains/logs/components/log-data-panel.cjs.js +1 -1
- package/dist/domains/logs/components/log-data-panel.es.js +1 -1
- package/dist/domains/logs/components/logs-saved-views.cjs.js +1 -1
- package/dist/domains/logs/components/logs-saved-views.es.js +1 -1
- package/dist/domains/logs/components/logs-toolbar.cjs.js +1 -1
- package/dist/domains/logs/components/logs-toolbar.es.js +1 -1
- package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
- package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
- package/dist/domains/metrics/components/metrics-time-range-chip.cjs.js +1 -1
- package/dist/domains/metrics/components/metrics-time-range-chip.es.js +1 -1
- package/dist/domains/observability/saved-views/observability-saved-views.cjs.js +1 -1
- package/dist/domains/observability/saved-views/observability-saved-views.es.js +1 -1
- package/dist/domains/observability/saved-views.cjs.js +1 -1
- package/dist/domains/observability/saved-views.es.js +1 -1
- package/dist/domains/observability.cjs.js +1 -1
- package/dist/domains/observability.es.js +1 -1
- package/dist/domains/scores/components/score-data-panel.cjs.js +1 -1
- package/dist/domains/scores/components/score-data-panel.es.js +1 -1
- package/dist/domains/scores/components/span-scoring.cjs.js +1 -1
- package/dist/domains/scores/components/span-scoring.es.js +1 -1
- package/dist/domains/skills/skill-simple-form.cjs.js +2 -2
- package/dist/domains/skills/skill-simple-form.es.js +2 -2
- package/dist/domains/spans/components/spans-explorer-body.cjs.js +1 -1
- package/dist/domains/spans/components/spans-explorer-body.es.js +1 -1
- package/dist/domains/spans/components/spans-filter-bar.cjs.js +2 -2
- package/dist/domains/spans/components/spans-filter-bar.es.js +2 -2
- package/dist/domains/spans/hooks/use-spans-filter-bar.cjs.js +1 -1
- package/dist/domains/spans/hooks/use-spans-filter-bar.es.js +1 -1
- package/dist/domains/threads/components/threads-explorer-body.cjs.js +1 -1
- package/dist/domains/threads/components/threads-explorer-body.es.js +1 -1
- package/dist/domains/threads/components/threads-filter-bar.cjs.js +2 -2
- package/dist/domains/threads/components/threads-filter-bar.es.js +2 -2
- package/dist/domains/threads/hooks/use-threads-filter-bar.cjs.js +1 -1
- package/dist/domains/threads/hooks/use-threads-filter-bar.es.js +1 -1
- package/dist/domains/traces/components/feedback-thread.cjs.js +2 -2
- package/dist/domains/traces/components/feedback-thread.es.js +2 -2
- package/dist/domains/traces/components/span-data-panel-view.cjs.js +1 -1
- package/dist/domains/traces/components/span-data-panel-view.es.js +1 -1
- package/dist/domains/traces/components/span-details-view.cjs.js +1 -1
- package/dist/domains/traces/components/span-details-view.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-json.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-json.es.js +1 -1
- package/dist/domains/traces/components/span-summary-description.cjs.js +1 -1
- package/dist/domains/traces/components/span-summary-description.es.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js +1 -1
- package/dist/domains/traces/components/trace-columns-menu.cjs.js +1 -1
- package/dist/domains/traces/components/trace-columns-menu.es.js +1 -1
- package/dist/domains/traces/components/trace-data-panel-view.cjs.js +1 -1
- package/dist/domains/traces/components/trace-data-panel-view.es.js +1 -1
- package/dist/domains/traces/components/trace-details-view.cjs.js +1 -1
- package/dist/domains/traces/components/trace-details-view.es.js +1 -1
- package/dist/domains/traces/components/trace-id-button.cjs.js +1 -1
- package/dist/domains/traces/components/trace-id-button.es.js +1 -1
- package/dist/domains/traces/components/trace-summary-description.cjs.js +1 -1
- package/dist/domains/traces/components/trace-summary-description.es.js +1 -1
- package/dist/domains/traces/components/trace-thread-panel.cjs.js +1 -1
- package/dist/domains/traces/components/trace-thread-panel.es.js +1 -1
- package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.cjs.js +2 -2
- package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.es.js +2 -2
- package/dist/domains/traces/components/traces-explorer/traces-explorer-saved-views.cjs.js +1 -1
- package/dist/domains/traces/components/traces-explorer/traces-explorer-saved-views.es.js +1 -1
- package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.cjs.js +1 -1
- package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.es.js +1 -1
- package/dist/domains/workflows/components/workflow-combobox.cjs.js +1 -1
- package/dist/domains/workflows/components/workflow-combobox.es.js +1 -1
- package/dist/domains/workflows/components/workflow-layout.cjs.js +1 -1
- package/dist/domains/workflows/components/workflow-layout.es.js +1 -1
- package/dist/domains/workflows/components/workflow-step-detail.cjs.js +2 -2
- package/dist/domains/workflows/components/workflow-step-detail.es.js +2 -2
- package/dist/domains/workflows/workflow/data/workflow-data-button.cjs.js +1 -1
- package/dist/domains/workflows/workflow/data/workflow-data-button.es.js +1 -1
- package/dist/domains/workflows/workflow/data/workflow-data-inspector.cjs.js +1 -1
- package/dist/domains/workflows/workflow/data/workflow-data-inspector.es.js +1 -1
- package/dist/domains/workflows/workflow/input/workflow-json-input.cjs.js +1 -1
- package/dist/domains/workflows/workflow/input/workflow-json-input.es.js +1 -1
- package/dist/domains/workflows/workflow/use-workflow-graph-runtime.cjs.js +1 -1
- package/dist/domains/workflows/workflow/use-workflow-graph-runtime.es.js +1 -1
- package/dist/domains/workflows/workflow/utils.cjs.js +1 -1
- package/dist/domains/workflows/workflow/utils.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-body-graph.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-body-graph.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-data-edge.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-data-edge.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-debug-step-controls.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-debug-step-controls.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-graph-inner.cjs.js +2 -2
- package/dist/domains/workflows/workflow/workflow-graph-inner.es.js +2 -2
- package/dist/domains/workflows/workflow/workflow-graph-layout.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-graph-layout.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-graph-node.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-graph-node.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-graph.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-graph.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-map-config-dialog.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-map-config-dialog.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-nested-graph.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-nested-graph.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-run-data.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-run-data.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-status.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-status.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-step-action-bar.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-step-action-bar.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-step-node-utils.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-step-node-utils.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-suspended-steps.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-suspended-steps.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-time-travel-form.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-time-travel-form.es.js +1 -1
- package/dist/domains/workspace/components/workspace-create-directory.cjs.js +1 -1
- package/dist/domains/workspace/components/workspace-create-directory.es.js +1 -1
- package/dist/domains/workspace/components/workspace-search.cjs.js +1 -1
- package/dist/domains/workspace/components/workspace-search.es.js +1 -1
- package/dist/domains/workspace/components/workspace-tree.cjs.js +1 -1
- package/dist/domains/workspace/components/workspace-tree.es.js +1 -1
- package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js +1 -1
- package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +1 -1
- package/dist/ee/signals/settings/trace-signal-settings.cjs.js +1 -1
- package/dist/ee/signals/settings/trace-signal-settings.es.js +1 -1
- package/dist/{filter-bar-chip-NBtfDca9.js → filter-bar-chip-Cz5GYBWP.js} +2 -2
- package/dist/{filter-bar-chip-NBtfDca9.js.map → filter-bar-chip-Cz5GYBWP.js.map} +1 -1
- package/dist/{filter-bar-chip-DFsbUZ-V.cjs → filter-bar-chip-q2Zr-cnY.cjs} +2 -2
- package/dist/{filter-bar-chip-DFsbUZ-V.cjs.map → filter-bar-chip-q2Zr-cnY.cjs.map} +1 -1
- package/dist/{filter-bar-time-range-CEgdThCy.cjs → filter-bar-time-range-D4C3kU0J.cjs} +3 -3
- package/dist/{filter-bar-time-range-CEgdThCy.cjs.map → filter-bar-time-range-D4C3kU0J.cjs.map} +1 -1
- package/dist/{filter-bar-time-range-CHSMbpPd.js → filter-bar-time-range-ao2YiYEJ.js} +3 -3
- package/dist/{filter-bar-time-range-CHSMbpPd.js.map → filter-bar-time-range-ao2YiYEJ.js.map} +1 -1
- package/dist/{input-Cyit5ZSc.js → input-BNykbvOz.js} +2 -2
- package/dist/input-BNykbvOz.js.map +1 -0
- package/dist/{input-BpnUsQSt.cjs → input-D_V0m95F.cjs} +2 -2
- package/dist/input-D_V0m95F.cjs.map +1 -0
- package/dist/{input-group-NV4ZzKOk.js → input-group-CCSyY4J5.js} +3 -3
- package/dist/{input-group-NV4ZzKOk.js.map → input-group-CCSyY4J5.js.map} +1 -1
- package/dist/{input-group-DBCilXjT.cjs → input-group-Da8HBo30.cjs} +3 -3
- package/dist/{input-group-DBCilXjT.cjs.map → input-group-Da8HBo30.cjs.map} +1 -1
- package/dist/layout/tabbed-container.cjs.js +1 -1
- package/dist/layout/tabbed-container.es.js +1 -1
- package/dist/lib/form/components/number-field.cjs.js +1 -1
- package/dist/lib/form/components/number-field.es.js +1 -1
- package/dist/lib/form/components/record-field.cjs.js +1 -1
- package/dist/lib/form/components/record-field.es.js +1 -1
- package/dist/{observability-saved-views-UM8HBJ6J.cjs → observability-saved-views-CzRPN_9m.cjs} +3 -3
- package/dist/{observability-saved-views-UM8HBJ6J.cjs.map → observability-saved-views-CzRPN_9m.cjs.map} +1 -1
- package/dist/{observability-saved-views-lLWk1w0g.js → observability-saved-views-hu_hkXVY.js} +3 -3
- package/dist/{observability-saved-views-lLWk1w0g.js.map → observability-saved-views-hu_hkXVY.js.map} +1 -1
- package/dist/primitives/menu-item.cjs.js +1 -1
- package/dist/primitives/menu-item.cjs.js.map +1 -1
- package/dist/primitives/menu-item.es.js +1 -1
- package/dist/primitives/menu-item.es.js.map +1 -1
- package/dist/{property-filter-applied-iYDdM1hb.cjs → property-filter-applied-ML84st6J.cjs} +2 -2
- package/dist/{property-filter-applied-iYDdM1hb.cjs.map → property-filter-applied-ML84st6J.cjs.map} +1 -1
- package/dist/{property-filter-applied-BBVmWRsC.js → property-filter-applied-PaJ7sLsM.js} +2 -2
- package/dist/{property-filter-applied-BBVmWRsC.js.map → property-filter-applied-PaJ7sLsM.js.map} +1 -1
- package/dist/style.css +6 -0
- package/dist/{tabbed-container-Bmk5dgJ4.cjs → tabbed-container-BMLD6mvc.cjs} +2 -2
- package/dist/{tabbed-container-Bmk5dgJ4.cjs.map → tabbed-container-BMLD6mvc.cjs.map} +1 -1
- package/dist/{tabbed-container-9yvqEQON.js → tabbed-container-CaS8cZCS.js} +2 -2
- package/dist/{tabbed-container-9yvqEQON.js.map → tabbed-container-CaS8cZCS.js.map} +1 -1
- package/dist/{tool-card-BjOV2sXi.js → tool-card-CM0aHG3p.js} +2 -2
- package/dist/{tool-card-BjOV2sXi.js.map → tool-card-CM0aHG3p.js.map} +1 -1
- package/dist/{tool-card-CO_3C_Bn.cjs → tool-card-xDlCD0m6.cjs} +2 -2
- package/dist/{tool-card-CO_3C_Bn.cjs.map → tool-card-xDlCD0m6.cjs.map} +1 -1
- package/dist/{use-workflow-graph-runtime-D_PpEIQ5.cjs → use-workflow-graph-runtime-DEJA9rk4.cjs} +2 -2
- package/dist/{use-workflow-graph-runtime-D_PpEIQ5.cjs.map → use-workflow-graph-runtime-DEJA9rk4.cjs.map} +1 -1
- package/dist/{use-workflow-graph-runtime-B_dKpjUe.js → use-workflow-graph-runtime-DHOsA1DM.js} +2 -2
- package/dist/{use-workflow-graph-runtime-B_dKpjUe.js.map → use-workflow-graph-runtime-DHOsA1DM.js.map} +1 -1
- package/package.json +3 -3
- package/dist/Composer-bVE8qK52.js.map +0 -1
- package/dist/Composer-u1K6edoZ.cjs.map +0 -1
- package/dist/FilterBar-CFacnMNl.js.map +0 -1
- package/dist/FilterBar-CR8nbvoe.cjs.map +0 -1
- package/dist/Tree-D1_VJClB.js.map +0 -1
- package/dist/Tree-kgLG4IbP.cjs.map +0 -1
- package/dist/combobox-parts-BeNqgCbj.cjs.map +0 -1
- package/dist/combobox-parts-C9o4UfH_.js.map +0 -1
- package/dist/input-BpnUsQSt.cjs.map +0 -1
- package/dist/input-Cyit5ZSc.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Workflow-CXRv3YXx.js","names":["_Fragment","_Fragment","_Fragment","_Fragment","_Fragment","_Fragment"],"sources":["../src/ds/components/Workflow/workflow-canvas-inset.ts","../src/ds/components/Workflow/cards/workflow-card-kind.ts","../src/ds/components/Workflow/cards/workflow-type-badge.tsx","../src/ds/components/Workflow/cards/workflow-card-badge-utils.ts","../src/ds/components/Workflow/cards/workflow-clock.tsx","../src/ds/components/Workflow/cards/condition/workflow-condition-expression.ts","../src/ds/components/Workflow/cards/condition/workflow-condition-source.tsx","../src/ds/components/Workflow/cards/condition/workflow-condition-card-view.tsx","../src/ds/components/Workflow/cards/timing/workflow-time-dial.tsx","../src/ds/components/Workflow/cards/timing/workflow-timing.tsx","../src/ds/components/Workflow/cards/step/workflow-step-card-view.tsx","../src/ds/components/Workflow/data/workflow-code-dialog-content.tsx","../src/ds/components/Workflow/data/workflow-edge-data-button.tsx","../src/ds/components/Workflow/graph/types.ts","../src/ds/components/Workflow/graph/workflow-boundary-node.tsx","../src/ds/components/Workflow/graph/workflow-data-edge-view.tsx","../src/ds/components/Workflow/graph/workflow-camera-duration.ts","../src/ds/components/Workflow/graph/workflow-graph-groups.tsx","../src/ds/components/Workflow/graph/zoom-slider.tsx","../src/ds/components/Workflow/graph/workflow-graph-canvas.tsx","../src/ds/components/Workflow/graph/workflow-node-frame.tsx","../src/ds/components/Workflow/controls/workflow-debug-controls.tsx","../src/ds/components/Workflow/graph/workflow-graph-placeholder.tsx","../src/ds/components/Workflow/cards/condition/workflow-condition-card.tsx","../src/ds/components/Workflow/controls/workflow-step-actions.tsx","../src/ds/components/Workflow/controls/workflow-step-action.tsx"],"sourcesContent":["import type { FitViewOptions } from '@xyflow/react';\nimport { createContext } from 'react';\n\nexport const WorkflowCanvasInsetContext = createContext(0);\n\nexport function workflowFitOptions(leftInset: number, isInline = false): FitViewOptions {\n return {\n maxZoom: 1,\n padding: isInline ? '20px' : { left: `${leftInset + 40}px`, right: '40px', top: '40px', bottom: '64px' },\n };\n}\n","import {\n ArrowRightLeft,\n Bot,\n Braces,\n CalendarClock,\n GitBranch,\n GitFork,\n Repeat2,\n Timer,\n Workflow,\n Wrench,\n} from 'lucide-react';\nimport type { LucideIcon } from 'lucide-react';\nimport type { WorkflowStepCardViewProps } from '../types';\nimport type { BadgeVariant } from '@/ds/components/Badge';\n\nexport type WorkflowTypeBadgeProps = Pick<\n WorkflowStepCardViewProps,\n 'nodeKind' | 'isForEach' | 'isNestedWorkflowStep' | 'stepGraph' | 'isParallel' | 'mapConfig' | 'date' | 'duration'\n>;\n\nexport function getWorkflowCardBadge(props: WorkflowTypeBadgeProps): {\n label: string;\n Icon: LucideIcon;\n tone: BadgeVariant;\n indicator?: string;\n} {\n if (props.isForEach) return { label: 'For each', tone: 'orange', Icon: Repeat2, indicator: 'foreach' };\n if (props.isNestedWorkflowStep || props.stepGraph)\n return { label: 'Workflow', tone: 'purple', Icon: Workflow, indicator: 'workflow' };\n if (props.isParallel && !props.nodeKind)\n return { label: 'Parallel', tone: 'blue', Icon: GitFork, indicator: 'parallel' };\n if (props.nodeKind === 'map' || props.mapConfig)\n return { label: 'Map', tone: 'orange', Icon: ArrowRightLeft, indicator: 'map' };\n if (props.nodeKind === 'wait-until' || props.date)\n return { label: 'Wait until', tone: 'purple', Icon: CalendarClock, indicator: 'sleep-until' };\n if (props.nodeKind === 'delay' || props.duration !== undefined)\n return { label: 'Delay', tone: 'purple', Icon: Timer, indicator: 'sleep' };\n if (props.nodeKind === 'agent') return { label: 'Agent', tone: 'cyan', Icon: Bot };\n if (props.nodeKind === 'tool') return { label: 'Tool', tone: 'pink', Icon: Wrench };\n if (props.nodeKind === 'classifier') return { label: 'Classifier', tone: 'blue', Icon: GitBranch };\n return { label: 'Step', tone: 'neutral', Icon: Braces };\n}\n","import { getWorkflowCardBadge } from './workflow-card-kind';\nimport type { WorkflowTypeBadgeProps } from './workflow-card-kind';\nimport { Badge } from '@/ds/components/Badge';\n\nexport function WorkflowTypeBadge(props: WorkflowTypeBadgeProps) {\n const { label, Icon, tone } = getWorkflowCardBadge(props);\n return (\n <Badge size=\"xs\" variant={tone} icon={<Icon aria-hidden />}>\n {label}\n </Badge>\n );\n}\n","import {\n CalendarClock,\n Clock,\n CornerDownRight,\n GitBranch,\n Layers,\n List,\n Network,\n PlayCircle,\n RefreshCw,\n Repeat,\n Repeat1,\n Timer,\n Workflow,\n} from 'lucide-react';\nimport type { LucideIcon } from 'lucide-react';\n\nexport const BADGE_COLORS = {\n sleep: 'var(--badge-purple-indicator)',\n forEach: 'var(--badge-orange-indicator)',\n map: 'var(--badge-orange-indicator)',\n parallel: 'var(--badge-blue-indicator)',\n suspend: 'var(--badge-pink-indicator)',\n after: 'var(--badge-cyan-indicator)',\n workflow: 'var(--badge-purple-indicator)',\n when: 'var(--badge-amber-indicator)',\n dountil: 'var(--badge-purple-indicator)',\n dowhile: 'var(--badge-cyan-indicator)',\n until: 'var(--badge-amber-indicator)',\n while: 'var(--badge-green-indicator)',\n if: 'var(--badge-blue-indicator)',\n else: 'var(--muted-foreground)',\n} as const;\n\nexport const BADGE_ICONS = {\n sleep: Timer,\n sleepUntil: CalendarClock,\n forEach: List,\n map: List,\n parallel: Workflow,\n suspend: PlayCircle,\n after: Clock,\n workflow: Layers,\n when: Network,\n dountil: Repeat1,\n dowhile: Repeat,\n until: Timer,\n while: RefreshCw,\n if: GitBranch,\n else: CornerDownRight,\n} as const;\n\nexport interface ConditionIconConfig {\n icon: LucideIcon | undefined;\n color: string | undefined;\n}\n\nexport interface WorkflowCardIndicator {\n id: string;\n label: string;\n icon: LucideIcon;\n color: string;\n}\n\nconst CONDITION_LABELS: Record<string, string> = {\n when: 'When condition',\n dountil: 'Do until condition',\n dowhile: 'Do while condition',\n until: 'Until condition',\n while: 'While condition',\n if: 'If condition',\n else: 'Else condition',\n and: 'And condition',\n or: 'Or condition',\n not: 'Not condition',\n};\n\nexport const getConditionIconAndColor = (type?: string): ConditionIconConfig => {\n switch (type) {\n case 'when':\n return { icon: BADGE_ICONS.when, color: BADGE_COLORS.when };\n case 'dountil':\n return { icon: BADGE_ICONS.dountil, color: BADGE_COLORS.dountil };\n case 'dowhile':\n return { icon: BADGE_ICONS.dowhile, color: BADGE_COLORS.dowhile };\n case 'until':\n return { icon: BADGE_ICONS.until, color: BADGE_COLORS.until };\n case 'while':\n return { icon: BADGE_ICONS.while, color: BADGE_COLORS.while };\n case 'if':\n return { icon: BADGE_ICONS.if, color: BADGE_COLORS.if };\n case 'else':\n return { icon: BADGE_ICONS.else, color: BADGE_COLORS.else };\n case 'and':\n case 'or':\n case 'not':\n return { icon: BADGE_ICONS.when, color: BADGE_COLORS.when };\n default:\n return { icon: undefined, color: undefined };\n }\n};\n\nexport const getConditionIndicator = (type?: string): WorkflowCardIndicator | undefined => {\n const { icon, color } = getConditionIconAndColor(type);\n\n if (!type || !icon || !color) {\n return undefined;\n }\n\n return {\n id: `condition-${type}`,\n label: CONDITION_LABELS[type] ?? `${type} condition`,\n icon,\n color,\n };\n};\n\nexport interface WorkflowNodeBadgeInfo {\n isSleepNode: boolean;\n isForEachNode: boolean;\n isMapNode: boolean;\n isNestedWorkflow: boolean;\n hasSpecialBadge: boolean;\n}\n\nexport interface WorkflowCardBadgesProps {\n duration?: number;\n date?: Date;\n isForEach?: boolean;\n mapConfig?: string;\n canSuspend?: boolean;\n isParallel?: boolean;\n stepGraph?: unknown;\n}\n\nexport const getNodeBadgeInfo = ({\n duration,\n date,\n isForEach,\n mapConfig,\n canSuspend,\n isParallel,\n stepGraph,\n}: WorkflowCardBadgesProps): WorkflowNodeBadgeInfo => {\n const isSleepNode = Boolean(duration || date);\n const isForEachNode = Boolean(isForEach);\n const isMapNode = Boolean(mapConfig && !isForEach);\n const isNestedWorkflow = Boolean(stepGraph);\n const hasSpecialBadge =\n isSleepNode || Boolean(canSuspend || isParallel) || isForEachNode || isMapNode || isNestedWorkflow;\n\n return {\n isSleepNode,\n isForEachNode,\n isMapNode,\n isNestedWorkflow,\n hasSpecialBadge,\n };\n};\n\nexport const getNodeIndicators = (props: WorkflowCardBadgesProps): WorkflowCardIndicator[] => {\n const { isSleepNode, isForEachNode, isMapNode, isNestedWorkflow } = getNodeBadgeInfo(props);\n const indicators: WorkflowCardIndicator[] = [];\n\n if (isSleepNode) {\n indicators.push({\n id: props.date ? 'sleep-until' : 'sleep',\n label: props.date ? 'Sleep until step' : 'Sleep step',\n icon: props.date ? BADGE_ICONS.sleepUntil : BADGE_ICONS.sleep,\n color: BADGE_COLORS.sleep,\n });\n }\n\n if (props.canSuspend) {\n indicators.push({\n id: 'suspend',\n label: 'Suspend/resume step',\n icon: BADGE_ICONS.suspend,\n color: BADGE_COLORS.suspend,\n });\n }\n\n if (props.isParallel) {\n indicators.push({\n id: 'parallel',\n label: 'Parallel step',\n icon: BADGE_ICONS.parallel,\n color: BADGE_COLORS.parallel,\n });\n }\n\n if (isNestedWorkflow) {\n indicators.push({\n id: 'workflow',\n label: 'Nested workflow step',\n icon: BADGE_ICONS.workflow,\n color: BADGE_COLORS.workflow,\n });\n }\n\n if (isForEachNode) {\n indicators.push({\n id: 'foreach',\n label: 'Foreach step',\n icon: BADGE_ICONS.forEach,\n color: BADGE_COLORS.forEach,\n });\n }\n\n if (isMapNode) {\n indicators.push({\n id: 'map',\n label: 'Map step',\n icon: BADGE_ICONS.map,\n color: BADGE_COLORS.map,\n });\n }\n\n return indicators;\n};\n","import { useEffect, useState } from 'react';\nimport { Txt } from '@/ds/components/Txt';\nimport { formatDuration } from '@/utils/duration';\n\ninterface WorkflowClockProps {\n startedAt: number;\n endedAt?: number;\n isRunning?: boolean;\n spansSuspension?: boolean;\n}\n\nexport const WorkflowClock = ({ startedAt, endedAt, isRunning = false, spansSuspension }: WorkflowClockProps) => {\n if (isRunning && endedAt === undefined && Number.isFinite(startedAt)) {\n return <RunningWorkflowClock key={startedAt} startedAt={startedAt} spansSuspension={spansSuspension} />;\n }\n return <ElapsedTime startedAt={startedAt} endedAt={endedAt} spansSuspension={spansSuspension} />;\n};\n\nfunction RunningWorkflowClock({ startedAt, spansSuspension }: Omit<WorkflowClockProps, 'isRunning'>) {\n const [time, setTime] = useState(() => Date.now());\n useEffect(() => {\n const interval = setInterval(() => setTime(Date.now()), 100);\n return () => clearInterval(interval);\n }, []);\n return <ElapsedTime startedAt={startedAt} endedAt={time} spansSuspension={spansSuspension} />;\n}\n\nfunction ElapsedTime({ startedAt, endedAt, spansSuspension }: Omit<WorkflowClockProps, 'isRunning'>) {\n const elapsed = endedAt === undefined ? undefined : formatDuration(endedAt - startedAt);\n\n return (\n <Txt\n variant=\"meta\"\n tone=\"muted\"\n font=\"mono\"\n className=\"whitespace-nowrap\"\n title={elapsed && spansSuspension ? 'Includes time spent suspended waiting for input' : undefined}\n >\n {elapsed === undefined ? <span aria-label=\"Timing unavailable\">—</span> : elapsed}\n </Txt>\n );\n}\n","import type { WorkflowCardCondition } from '../../types';\n\nexport function conditionExpression(condition: WorkflowCardCondition) {\n if (condition.fnString !== undefined) return condition.fnString;\n return JSON.stringify({ ref: condition.ref, query: condition.query, conj: condition.conj }, null, 2);\n}\n","import { useEffect, useState } from 'react';\nimport { Code } from '@/ds/components/Code';\nimport { formatTypeScript } from '@/utils/formatting';\n\nconst MAX_FORMATTED_SOURCE_CHARS = 10_000;\n\nexport function WorkflowConditionSource({ source }: { source: string }) {\n if (source.length > MAX_FORMATTED_SOURCE_CHARS) return <Code code={source} />;\n return <FormattedConditionSource key={source} source={source} />;\n}\n\nfunction FormattedConditionSource({ source }: { source: string }) {\n const [formatted, setFormatted] = useState<string>();\n\n useEffect(() => {\n let cancelled = false;\n formatTypeScript(source)\n .then(expression => {\n if (!cancelled) setFormatted(expression.trim());\n })\n .catch(() => undefined);\n return () => {\n cancelled = true;\n };\n }, [source]);\n\n return <Code code={formatted ?? source} lang={formatted === undefined ? undefined : 'typescript'} />;\n}\n","import { Braces } from 'lucide-react';\nimport type { WorkflowConditionCardViewProps } from '../../types';\nimport { getConditionIndicator } from '../workflow-card-badge-utils';\nimport { conditionExpression } from './workflow-condition-expression';\nimport { WorkflowConditionSource } from './workflow-condition-source';\nimport { Badge } from '@/ds/components/Badge';\nimport { Code } from '@/ds/components/Code';\nimport { CopyButton } from '@/ds/components/CopyButton';\nimport { raisedSurfaceStyle } from '@/ds/primitives/raised-surface';\n\nconst surfaceClasses = 'rounded-[calc(var(--radius-xl)-2px)] bg-card text-meta';\n\nexport function WorkflowConditionCardView({\n type,\n conditions,\n previousDisplayStatus,\n actionBar,\n}: WorkflowConditionCardViewProps) {\n const indicator = getConditionIndicator(type);\n const Icon = indicator?.icon ?? Braces;\n const label = indicator?.label.replace(/ condition$/, '') ?? 'Condition';\n const occurrences = new Map<string, number>();\n const sources = conditions.map(condition => {\n const expression = conditionExpression(condition);\n const identity = `${condition.type}:${expression}`;\n const occurrence = occurrences.get(identity) ?? 0;\n occurrences.set(identity, occurrence + 1);\n return { condition, expression, key: `${identity}:${occurrence}` };\n });\n const copyContent =\n conditions.length > 1 ? JSON.stringify(conditions, null, 2) : sources.map(source => source.expression).join('\\n');\n const hasExpression = type !== 'else' && sources.some(({ expression }) => expression.trim().length > 0);\n\n return (\n <div\n className={`${raisedSurfaceStyle} w-[274px] overflow-hidden rounded-xl p-0.5 has-focus-visible:outline-1 has-focus-visible:outline-offset-4 has-focus-visible:outline-border-focus`}\n data-workflow-node\n data-testid=\"workflow-condition-node\"\n data-workflow-step-status={previousDisplayStatus ?? 'idle'}\n >\n <div className=\"flex h-[46px] items-center gap-2 px-2.5 text-meta text-muted-foreground\">\n <Badge size=\"xs\" variant={type === 'else' ? 'neutral' : 'amber'} emphasis=\"subtle\" icon={<Icon aria-hidden />}>\n {label}\n </Badge>\n {hasExpression && (\n <>\n <span className=\"ml-auto\">Expression</span>\n <CopyButton content={copyContent} tooltip=\"Copy expression\" className=\"nodrag nopan\" />\n </>\n )}\n </div>\n {hasExpression ? (\n <div\n role=\"region\"\n aria-label=\"Condition details\"\n tabIndex={0}\n className={`${surfaceClasses} nodrag nopan nowheel max-h-55 overflow-auto p-3.5 text-foreground [&_pre]:leading-relaxed [&_pre]:whitespace-pre-wrap`}\n >\n {sources.map(({ condition, expression, key }) => (\n <div key={key}>\n {condition.conj && (\n <Badge size=\"xs\" variant=\"neutral\">\n {condition.conj.toUpperCase()}\n </Badge>\n )}\n {condition.fnString !== undefined ? (\n <WorkflowConditionSource source={condition.fnString} />\n ) : (\n <Code code={expression} />\n )}\n </div>\n ))}\n </div>\n ) : (\n <p className={`${surfaceClasses} p-3 text-muted-foreground`}>\n {type === 'else' ? 'When no other branch matches' : 'Condition expression unavailable'}\n </p>\n )}\n {actionBar && <div className=\"nodrag nopan flex justify-end px-2.5 py-1.5 empty:hidden\">{actionBar}</div>}\n </div>\n );\n}\n","import type { ComponentProps, ReactNode } from 'react';\nimport { cn } from '@/utils/cn';\n\nexport type DurationUnit = 'ms' | 's' | 'min' | 'h';\n\nconst DIAL_CENTER = 58;\nconst CLOCK_TICK_ANGLES = Array.from({ length: 60 }, (_, index) => index * 6);\nconst DURATION_TICK_ANGLES = Array.from({ length: 41 }, (_, index) => -120 + index * 6);\n\nfunction pointAt(angle: number, radius: number) {\n const radians = (angle * Math.PI) / 180;\n return {\n x: DIAL_CENTER + Math.sin(radians) * radius,\n y: DIAL_CENTER - Math.cos(radians) * radius,\n };\n}\n\nfunction DialTick({ angle, major, className, ...props }: ComponentProps<'line'> & { angle: number; major: boolean }) {\n const outer = pointAt(angle, 49);\n const inner = pointAt(angle, major ? 38 : 43);\n return (\n <line\n x1={inner.x}\n y1={inner.y}\n x2={outer.x}\n y2={outer.y}\n className={cn(major ? 'stroke-placeholder' : 'stroke-border-strong', className)}\n {...props}\n />\n );\n}\n\nfunction DialHand({ angle, length }: { angle: number; length: number }) {\n const tip = pointAt(angle, length);\n return (\n <line\n x1={DIAL_CENTER}\n y1={DIAL_CENTER}\n x2={tip.x}\n y2={tip.y}\n className=\"stroke-1.5 stroke-muted-foreground\"\n strokeLinecap=\"round\"\n />\n );\n}\n\nfunction DialFace({ tickAngles, children }: { tickAngles: number[]; children: ReactNode }) {\n return (\n <span className=\"block size-28 shrink-0 text-muted-foreground\" aria-hidden>\n <svg viewBox=\"0 0 116 116\" fill=\"none\" className=\"block size-full overflow-visible\">\n {tickAngles.map((angle, index) => (\n <DialTick key={angle} angle={angle} major={index % 5 === 0} />\n ))}\n {children}\n </svg>\n </span>\n );\n}\n\nexport function ClockDial({ date }: { date: Date }) {\n const minutes = date.getUTCMinutes();\n return (\n <DialFace tickAngles={CLOCK_TICK_ANGLES}>\n <DialHand angle={((date.getUTCHours() % 12) + minutes / 60) * 30} length={26} />\n <DialHand angle={minutes * 6} length={37} />\n <circle cx={DIAL_CENTER} cy={DIAL_CENTER} r={2} fill=\"currentColor\" />\n </DialFace>\n );\n}\n\nexport function DurationDial({ amount, unit }: { amount: number; unit: DurationUnit }) {\n const scale = Math.max({ h: 24, ms: 1000, s: 60, min: 60 }[unit], Math.ceil(amount / 10) * 10);\n return (\n <DialFace tickAngles={DURATION_TICK_ANGLES}>\n <DialTick\n angle={-120 + (amount / scale) * 240}\n major\n className=\"stroke-foreground stroke-2\"\n strokeLinecap=\"round\"\n />\n <text x={DIAL_CENTER} y={94} textAnchor=\"middle\" className=\"fill-muted-foreground font-body text-meta\">\n {scale} {unit}\n </text>\n <text x={DIAL_CENTER} y={106} textAnchor=\"middle\" className=\"fill-placeholder font-body text-meta\">\n scale\n </text>\n </DialFace>\n );\n}\n","import type { ReactNode } from 'react';\nimport type { WorkflowStepCardViewProps } from '../../types';\nimport { ClockDial, DurationDial } from './workflow-time-dial';\nimport type { DurationUnit } from './workflow-time-dial';\nimport { Txt } from '@/ds/components/Txt';\nimport { formatDate, formatShortDate } from '@/utils/date-format';\nimport { formatDuration } from '@/utils/duration';\n\nconst captionClasses = 'text-meta tracking-wider whitespace-nowrap text-muted-foreground uppercase';\n\nfunction durationReading(duration: number): { amount: number; unit: DurationUnit } {\n if (duration < 1000) return { amount: duration, unit: 'ms' };\n if (duration < 60000) return { amount: duration / 1000, unit: 's' };\n if (duration < 3600000) return { amount: duration / 60000, unit: 'min' };\n return { amount: duration / 3600000, unit: 'h' };\n}\n\nfunction TimingReading({\n value,\n unit,\n caption,\n dial,\n}: {\n value: string;\n unit?: string;\n caption: string;\n dial: ReactNode;\n}) {\n return (\n <span className=\"mt-1 flex min-h-27 items-center justify-between gap-1 text-foreground\">\n <span className=\"z-10 flex min-w-0 flex-col gap-2\">\n <Txt\n as=\"span\"\n variant=\"display\"\n className=\"flex items-baseline gap-1 leading-none tracking-tighter whitespace-nowrap tabular-nums\"\n >\n {value}\n {unit && <small className=\"text-meta tracking-normal text-muted-foreground\">{unit}</small>}\n </Txt>\n <span className={captionClasses}>{caption}</span>\n </span>\n {dial}\n </span>\n );\n}\n\nexport function WorkflowTiming({ duration, date }: Pick<WorkflowStepCardViewProps, 'duration' | 'date'>) {\n if (date) {\n const scheduled = new Date(date);\n if (!Number.isFinite(scheduled.getTime())) {\n return <span className={captionClasses}>Schedule unavailable</span>;\n }\n return (\n <TimingReading\n value={formatDate(scheduled, 'time', { timeZone: 'UTC' }) ?? ''}\n unit=\"UTC\"\n caption={formatShortDate(scheduled, { timeZone: 'UTC', now: 0 }) ?? ''}\n dial={<ClockDial date={scheduled} />}\n />\n );\n }\n if (duration === undefined) return null;\n if (!Number.isFinite(duration) || duration < 0) {\n return <span className={captionClasses}>Delay unavailable</span>;\n }\n const reading = durationReading(duration);\n return (\n <TimingReading\n value={formatDuration(duration) ?? ''}\n caption=\"Configured delay\"\n dial={<DurationDial {...reading} />}\n />\n );\n}\n","import { useState } from 'react';\nimport type { CSSProperties } from 'react';\nimport type { WorkflowCardDisplayStatus, WorkflowStepCardViewProps } from '../../types';\nimport { WorkflowTiming } from '../timing/workflow-timing';\nimport { getNodeIndicators } from '../workflow-card-badge-utils';\nimport { getWorkflowCardBadge } from '../workflow-card-kind';\nimport { WorkflowClock } from '../workflow-clock';\nimport { WorkflowTypeBadge } from '../workflow-type-badge';\nimport { ActivityWick } from '@/ds/components/Activity';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/ds/components/Collapsible';\nimport { DisclosureChevron } from '@/ds/components/DisclosureChevron';\nimport { Metadata } from '@/ds/components/Metadata';\nimport { Shimmer } from '@/ds/components/Shimmer';\nimport { Txt } from '@/ds/components/Txt';\nimport { raisedSurfaceStyle, surfaceStateLayerStyle } from '@/ds/primitives/raised-surface';\nimport { cn } from '@/utils/cn';\n\ntype ReportedStatus = NonNullable<WorkflowCardDisplayStatus>;\n\nconst statusLabels = {\n running: 'Running',\n success: 'Completed',\n failed: 'Failed',\n suspended: 'Needs input',\n waiting: 'Waiting',\n paused: 'Paused',\n skipped: 'Skipped',\n canceled: 'Canceled',\n tripwire: 'Tripwire blocked',\n} satisfies Record<ReportedStatus, string>;\n\nconst statusLineClasses: Partial<Record<ReportedStatus, string>> = {\n success: 'after:bg-success-indicator',\n failed: 'after:bg-destructive-indicator',\n tripwire: 'after:bg-warning-indicator',\n waiting: 'after:bg-warning-indicator',\n paused: 'after:bg-warning-indicator',\n skipped: 'after:bg-muted-foreground',\n};\n\nconst footerStatusClasses: Partial<Record<ReportedStatus, string>> = {\n success: 'text-success-indicator',\n failed: 'text-destructive-foreground',\n suspended: 'text-warning-foreground',\n tripwire: 'text-warning-foreground',\n};\n\nconst suspendedWickStyle: CSSProperties & { '--belt-hue': string } = { '--belt-hue': 'var(--warning-indicator)' };\n\nexport function WorkflowStepCardView(props: WorkflowStepCardViewProps) {\n const {\n label,\n description,\n displayStatus,\n stepKey,\n isSelected,\n isWaiting,\n isHovered,\n onHoverChange,\n onSelect,\n isForEach,\n foreachProgress,\n startedAt,\n endedAt,\n actionBar,\n body,\n } = props;\n const [expanded, setExpanded] = useState(props.initiallyOpen ?? false);\n const isRunning = displayStatus === 'running';\n const isSuspended = displayStatus === 'suspended';\n const reportedStatusLabel =\n displayStatus && Object.hasOwn(statusLabels, displayStatus) ? statusLabels[displayStatus] : undefined;\n const statusLabel = displayStatus ? (reportedStatusLabel ?? 'Status unavailable') : 'Not started';\n const kind = getWorkflowCardBadge(props);\n const capabilities = getNodeIndicators(props)\n .filter(indicator => indicator.id !== kind.indicator)\n .map(indicator => indicator.label.replace(/ step$/, ''));\n const hasActivity = isRunning || isSuspended;\n const isStacked = isForEach && !expanded;\n const isBodyExpanded = Boolean(body) && expanded;\n const Summary = onSelect ? 'button' : 'div';\n\n return (\n <div\n className={cn(\n 'relative isolate w-[274px]',\n isBodyExpanded && 'w-172',\n isStacked &&\n 'pb-3 before:absolute before:inset-x-1.5 before:top-2 before:bottom-1.5 before:-z-10 before:rounded-xl before:border before:border-border before:bg-card after:absolute after:inset-x-3 after:top-3.5 after:bottom-0 after:-z-20 after:rounded-xl after:border after:border-border after:bg-card',\n )}\n >\n <Collapsible\n open={expanded}\n onOpenChange={setExpanded}\n className={cn(\n raisedSurfaceStyle,\n 'relative rounded-xl border border-transparent text-foreground transition-[border-color,background-color,box-shadow] [--card-radius:calc(var(--radius-xl)-2px)] motion-reduce:transition-none',\n 'after:pointer-events-none after:absolute after:inset-x-4 after:-top-px after:h-px after:mask-x-from-76%',\n displayStatus && statusLineClasses[displayStatus],\n 'has-focus-visible:outline-1 has-focus-visible:outline-offset-4 has-focus-visible:outline-border-focus',\n isSelected && 'outline-1 outline-offset-4 outline-border-focus',\n isBodyExpanded && 'border-dashed border-muted-foreground/40 shadow-none',\n isWaiting && 'border-info-indicator',\n isHovered && !isSelected && 'bg-muted',\n )}\n data-workflow-node\n data-workflow-step-key={stepKey}\n data-workflow-step-status={displayStatus ?? 'idle'}\n data-workflow-step-active={isSelected || undefined}\n data-workflow-step-waiting={isWaiting || undefined}\n data-workflow-step-hovered={isHovered || undefined}\n data-testid={props.isNestedWorkflowStep ? 'workflow-nested-node' : 'workflow-default-node'}\n onMouseEnter={() => onHoverChange?.(true)}\n onMouseLeave={() => onHoverChange?.(false)}\n >\n <div className=\"m-0.5 overflow-hidden rounded-(--card-radius)\">\n <Summary\n className={cn(\n 'nodrag nopan flex w-full flex-col text-left',\n onSelect && 'group cursor-pointer focus-visible:outline-hidden',\n )}\n type={onSelect ? 'button' : undefined}\n aria-label={onSelect ? `Inspect ${label}` : undefined}\n aria-pressed={onSelect ? Boolean(isSelected) : undefined}\n onClick={onSelect}\n >\n <span className=\"flex items-start justify-between gap-2.5 rounded-(--card-radius) px-3.5 py-3 group-hover:bg-fill-subtle\">\n <Txt as=\"span\" variant=\"column\" tone=\"ink\" className=\"min-w-0 wrap-anywhere\" title={label}>\n <Shimmer active={isRunning}>{label}</Shimmer>\n </Txt>\n <WorkflowTypeBadge {...props} />\n </span>\n <span className=\"flex flex-col gap-2 rounded-t-(--card-radius) bg-card px-3.5 py-3 empty:py-1.5\">\n {description && (\n <Txt as=\"span\" variant=\"caption\" tone=\"muted\" className=\"wrap-anywhere\">\n {description}\n </Txt>\n )}\n <WorkflowTiming duration={props.duration} date={props.date} />\n {isWaiting && (\n <Txt as=\"span\" variant=\"meta\" className=\"text-info-indicator\">\n Next step in debug\n </Txt>\n )}\n {isForEach && foreachProgress && (\n <Txt as=\"span\" variant=\"meta\" className=\"flex flex-col gap-2 py-1\">\n <span>\n <strong>{foreachProgress.completedCount}</strong> of {foreachProgress.totalCount} items complete\n </span>\n {foreachProgress.totalCount > 0 ? (\n <progress\n className=\"h-1 w-full appearance-none border-0 bg-muted accent-success-indicator [&::-moz-progress-bar]:bg-success-indicator [&::-webkit-progress-bar]:bg-muted [&::-webkit-progress-value]:bg-success-indicator\"\n aria-label={`${label} completed items`}\n value={foreachProgress.completedCount}\n max={foreachProgress.totalCount}\n />\n ) : (\n <span>No items to process</span>\n )}\n </Txt>\n )}\n {capabilities.length > 0 && (\n <Txt as=\"span\" variant=\"meta\" tone=\"muted\">\n <Metadata>\n {capabilities.map(capability => (\n <Metadata.Item key={capability}>{capability}</Metadata.Item>\n ))}\n </Metadata>\n </Txt>\n )}\n </span>\n </Summary>\n <div\n className={cn(\n 'nodrag nopan flex min-h-7 items-center justify-between gap-2 bg-card px-3.5 pb-2.5 text-meta text-muted-foreground',\n displayStatus && footerStatusClasses[displayStatus],\n )}\n >\n <span role=\"status\" className={isRunning ? 'sr-only motion-reduce:not-sr-only' : undefined}>\n {statusLabel}\n </span>\n {startedAt !== undefined && (\n <span className=\"ml-auto\">\n <WorkflowClock\n startedAt={startedAt}\n endedAt={endedAt}\n isRunning={isRunning}\n spansSuspension={props.spansSuspension}\n />\n </span>\n )}\n {actionBar}\n </div>\n\n {body && (\n <>\n <CollapsibleTrigger\n className={cn(\n surfaceStateLayerStyle,\n 'nodrag nopan flex min-h-11 w-full items-center justify-between border-t border-border bg-card px-3.5 py-2.5 text-caption focus-visible:outline-hidden',\n )}\n >\n <span>\n {expanded ? 'Collapse' : 'Expand'} {isForEach ? 'loop' : 'workflow'}\n </span>\n <DisclosureChevron direction=\"right\" className=\"size-3.5\" />\n </CollapsibleTrigger>\n <CollapsibleContent className=\"h-155 overflow-hidden border-t border-dashed border-border\">\n {body}\n </CollapsibleContent>\n </>\n )}\n </div>\n {hasActivity && (\n <ActivityWick\n status={isSuspended ? 'ready' : 'working'}\n aria-hidden\n className=\"before:hidden\"\n style={isSuspended ? suspendedWickStyle : undefined}\n />\n )}\n </Collapsible>\n </div>\n );\n}\n","import { javascript } from '@codemirror/lang-javascript';\nimport { jsonLanguage } from '@codemirror/lang-json';\nimport { EditorView } from '@codemirror/view';\nimport CodeMirror from '@uiw/react-codemirror';\nimport { codeFoldGutter, useCodemirrorTheme } from '@/ds/components/CodeEditor';\nimport { CopyButton } from '@/ds/components/CopyButton';\n\nexport const WorkflowCodeContent = ({\n data,\n language = 'auto',\n}: {\n data: unknown;\n language?: 'json' | 'javascript' | 'auto';\n}) => {\n const theme = useCodemirrorTheme();\n\n const getExtensions = (content: string) => {\n if (language === 'javascript') {\n return [javascript(), EditorView.lineWrapping];\n }\n if (language === 'json') {\n return [jsonLanguage, EditorView.lineWrapping];\n }\n\n try {\n JSON.parse(content);\n return [jsonLanguage, EditorView.lineWrapping];\n } catch {\n if (\n content.includes('=>') ||\n content.includes('function') ||\n content.includes('const ') ||\n content.includes('return ')\n ) {\n return [javascript(), EditorView.lineWrapping];\n }\n return [EditorView.lineWrapping];\n }\n };\n\n if (typeof data !== 'string') {\n const content = JSON.stringify(data, null, 2);\n return (\n <div className=\"relative overflow-auto\" style={{ maxHeight: 500 }}>\n <div className=\"absolute top-2 right-2 z-10 rounded-full bg-muted\">\n <CopyButton content={content} />\n </div>\n <div className=\"rounded-lg bg-muted p-4\">\n <CodeMirror\n value={content}\n theme={theme}\n extensions={[jsonLanguage, EditorView.lineWrapping, codeFoldGutter]}\n basicSetup={{ foldGutter: false }}\n />\n </div>\n </div>\n );\n }\n\n const extensions = getExtensions(data);\n\n let displayContent = data;\n try {\n const json = JSON.parse(data);\n displayContent = JSON.stringify(json, null, 2);\n } catch {}\n\n return (\n <div className=\"relative overflow-auto\" style={{ maxHeight: 500 }}>\n <div className=\"absolute top-2 right-2 z-10 rounded-full bg-muted\">\n <CopyButton content={data} />\n </div>\n <div className=\"rounded-lg bg-muted p-4\">\n <CodeMirror\n value={displayContent}\n theme={theme}\n extensions={[...extensions, codeFoldGutter]}\n basicSetup={{ foldGutter: false }}\n />\n </div>\n </div>\n );\n};\n","import { Database } from 'lucide-react';\nimport { useState } from 'react';\nimport type { MouseEventHandler } from 'react';\nimport { WorkflowCodeContent } from './workflow-code-dialog-content';\nimport { Button } from '@/ds/components/Button';\nimport { Dialog, DialogBody, DialogContent, DialogHeader, DialogTitle } from '@/ds/components/Dialog';\nimport { Txt } from '@/ds/components/Txt';\nimport { raisedSurfaceStyle, surfaceStateLayerStyle } from '@/ds/primitives/raised-surface';\nimport { cn } from '@/lib/utils';\n\nexport interface WorkflowEdgeDataButtonProps {\n previousStepId?: string;\n output?: unknown;\n label?: string;\n selected?: boolean;\n onInspect?: MouseEventHandler<HTMLButtonElement>;\n}\n\nexport const WorkflowEdgeDataButton = ({\n previousStepId,\n output,\n label,\n selected,\n onInspect,\n}: WorkflowEdgeDataButtonProps) => {\n const [isOpen, setIsOpen] = useState(false);\n const dataLabel = label ?? (previousStepId ? `${previousStepId} output` : 'Previous output');\n\n if (output === undefined) {\n return null;\n }\n\n return (\n <>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={onInspect ?? (() => setIsOpen(true))}\n aria-label={`View ${dataLabel}`}\n aria-pressed={selected}\n className={cn(\n raisedSurfaceStyle,\n surfaceStateLayerStyle,\n 'h-7 rounded-lg px-2 text-foreground aria-pressed:before:bg-fill',\n )}\n icon={<Database className=\"text-muted-foreground\" />}\n >\n Data\n </Button>\n\n <Dialog open={isOpen} onOpenChange={setIsOpen}>\n <DialogContent size=\"xl\">\n <DialogHeader>\n <DialogTitle>Step output</DialogTitle>\n </DialogHeader>\n <DialogBody>\n <div className=\"min-w-0 rounded-lg border border-border bg-background p-3\">\n <Txt variant=\"caption\" tone=\"ink\" className=\"mb-2 block\">\n {dataLabel}\n </Txt>\n <WorkflowCodeContent data={output} />\n </div>\n </DialogBody>\n </DialogContent>\n </Dialog>\n </>\n );\n};\n","import type { Edge, Node } from '@xyflow/react';\n\nexport const WORKFLOW_DATA_EDGE_TYPE = 'workflow-data-edge';\nexport const WORKFLOW_BOUNDARY_NODE_TYPE = 'workflow-boundary-node';\n\nexport interface WorkflowDataEdgeData {\n [key: string]: unknown;\n previousStepId?: string;\n nextStepId?: string;\n conditionNode?: boolean;\n boundaryPayload?: 'workflow-input' | 'workflow-output';\n edgeStatus?: 'success' | 'idle';\n dataLabelPlacement?: 'source' | 'hidden';\n}\n\nexport type WorkflowDataEdgeModel = Edge<WorkflowDataEdgeData, typeof WORKFLOW_DATA_EDGE_TYPE>;\n\nexport type WorkflowBoundaryNodeData = {\n boundaryRole: 'start' | 'end';\n label: string;\n};\n\nexport type WorkflowBoundaryNodeModel = Node<WorkflowBoundaryNodeData, typeof WORKFLOW_BOUNDARY_NODE_TYPE>;\n","import { Handle, Position } from '@xyflow/react';\nimport type { NodeProps } from '@xyflow/react';\n\nimport type { WorkflowBoundaryNodeModel } from './types';\nimport { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/utils/cn';\n\nexport const WorkflowBoundaryNode = ({ data }: NodeProps<WorkflowBoundaryNodeModel>) => {\n const isStart = data.boundaryRole === 'start';\n\n return (\n <>\n {!isStart && <Handle type=\"target\" position={Position.Top} style={{ visibility: 'hidden' }} />}\n <div\n data-workflow-boundary-node\n data-testid={`workflow-boundary-${data.boundaryRole}`}\n className={cn(\n 'relative flex h-[38px] w-28 items-center justify-center text-muted-foreground after:absolute after:inset-x-0 after:mask-x-from-60%',\n isStart\n ? 'after:bottom-0 after:h-px after:bg-muted-foreground'\n : 'after:top-0 after:h-1 after:border-y after:border-muted-foreground',\n )}\n >\n <Txt variant=\"meta\">{data.label}</Txt>\n </div>\n {isStart && <Handle type=\"source\" position={Position.Bottom} style={{ visibility: 'hidden' }} />}\n </>\n );\n};\n","import { BaseEdge, EdgeLabelRenderer, getBezierPath, Position, useInternalNode } from '@xyflow/react';\nimport type { EdgeProps } from '@xyflow/react';\nimport { useId } from 'react';\nimport type { ReactNode } from 'react';\nimport { WorkflowEdgeDataButton } from '../data/workflow-edge-data-button';\nimport type { WorkflowDataEdgeModel } from './types';\n\nexport interface WorkflowDataEdgeViewProps extends EdgeProps<WorkflowDataEdgeModel> {\n output?: unknown;\n dataControl?: ReactNode;\n}\n\nexport function WorkflowDataEdgeView({ output, label, dataControl, ...props }: WorkflowDataEdgeViewProps) {\n const source = useInternalNode(props.source);\n const target = useInternalNode(props.target);\n const sourceWidth = source?.measured?.width ?? source?.width;\n const sourceHeight = source?.measured?.height ?? source?.height;\n const targetWidth = target?.measured?.width ?? target?.width;\n const hasBottomSource =\n source && sourceWidth !== undefined && sourceHeight !== undefined && props.sourcePosition === Position.Bottom;\n const hasTopTarget = target && targetWidth !== undefined && props.targetPosition === Position.Top;\n // Nested canvases scale DOM handle measurements twice; route in graph coordinates.\n const sourceX = hasBottomSource ? source.internals.positionAbsolute.x + sourceWidth / 2 : props.sourceX;\n const sourceY = hasBottomSource ? source.internals.positionAbsolute.y + sourceHeight : props.sourceY;\n const targetX = hasTopTarget ? target.internals.positionAbsolute.x + targetWidth / 2 : props.targetX;\n const targetY = hasTopTarget ? target.internals.positionAbsolute.y : props.targetY;\n const [edgePath, midpointX, midpointY] = getBezierPath({\n ...props,\n sourceX,\n sourceY,\n targetX,\n targetY,\n });\n const labelPlacement = props.data?.dataLabelPlacement;\n const labelX = labelPlacement === 'source' ? sourceX : midpointX;\n const labelY = labelPlacement === 'source' ? sourceY + Math.min(24, Math.max(0, (targetY - sourceY) / 4)) : midpointY;\n const arrowId = useId();\n const isExecuted = props.data?.edgeStatus === 'success';\n const pathColor = isExecuted ? 'var(--success-indicator)' : 'var(--muted-foreground)';\n\n return (\n <>\n <defs>\n <marker id={arrowId} viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerWidth=\"5\" markerHeight=\"5\" orient=\"auto\">\n <path d=\"M1 1 L9 5 L1 9 Z\" fill={pathColor} />\n </marker>\n </defs>\n <BaseEdge\n id={props.id}\n path={edgePath}\n markerEnd={`url(#${arrowId})`}\n style={{\n ...props.style,\n stroke: pathColor,\n strokeWidth: isExecuted ? 2 : 1,\n strokeLinecap: 'round',\n strokeDasharray: isExecuted ? 'none' : '5 6',\n }}\n vectorEffect=\"non-scaling-stroke\"\n data-edge-status={props.data?.edgeStatus ?? 'idle'}\n data-edge-from={props.data?.previousStepId}\n data-edge-to={props.data?.nextStepId}\n />\n {labelPlacement !== 'hidden' && (\n <EdgeLabelRenderer>\n <div\n className=\"nodrag nopan flex items-center justify-center\"\n style={{\n position: 'absolute',\n pointerEvents: 'all',\n transform: `translate(-50%, -50%) translate(${labelX}px, ${labelY}px)`,\n }}\n >\n {dataControl ?? (\n <WorkflowEdgeDataButton\n previousStepId={props.data?.boundaryPayload ? undefined : props.data?.previousStepId}\n output={output}\n label={typeof label === 'string' ? label : undefined}\n />\n )}\n </div>\n </EdgeLabelRenderer>\n )}\n </>\n );\n}\n","export function workflowCameraDuration() {\n return window.matchMedia?.('(prefers-reduced-motion: reduce)').matches ? 0 : 300;\n}\n","import { useViewport } from '@xyflow/react';\nimport type { Node } from '@xyflow/react';\nimport { GitFork } from 'lucide-react';\nimport { Badge } from '@/ds/components/Badge';\n\nexport interface WorkflowGraphGroup {\n id: string;\n label: string;\n description: string;\n nodeIds: string[];\n}\n\nexport function WorkflowGraphGroups({ nodes, groups }: { nodes: Node[]; groups: WorkflowGraphGroup[] }) {\n const { x, y, zoom } = useViewport();\n return (\n <div\n className=\"pointer-events-none absolute inset-0 z-0 origin-top-left\"\n style={{ transform: `translate(${x}px, ${y}px) scale(${zoom})` }}\n >\n {groups.map(group => {\n const members = nodes.flatMap(node => {\n if (!group.nodeIds.includes(node.id) || !node.measured?.width || !node.measured.height) return [];\n return [{ x: node.position.x, y: node.position.y, width: node.measured.width, height: node.measured.height }];\n });\n if (!members.length || members.length !== group.nodeIds.length) return null;\n const left = Math.min(...members.map(node => node.x)) - 20;\n const top = Math.min(...members.map(node => node.y)) - 54;\n const right = Math.max(...members.map(node => node.x + node.width)) + 20;\n const bottom = Math.max(...members.map(node => node.y + node.height)) + 20;\n return (\n <div\n key={group.id}\n className=\"absolute rounded-xl border border-dashed border-muted-foreground/25 bg-muted-foreground/3\"\n style={{ transform: `translate(${left}px, ${top}px)`, width: right - left, height: bottom - top }}\n >\n <div className=\"flex items-center gap-2 px-5 py-4 text-meta text-muted-foreground\">\n <Badge size=\"xs\" variant=\"blue\" emphasis=\"subtle\" icon={<GitFork aria-hidden />}>\n {group.label}\n </Badge>\n <span>{group.description}</span>\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n","import type { PanelProps } from '@xyflow/react';\nimport { Panel, useViewport, useReactFlow, useStore } from '@xyflow/react';\nimport { Maximize, Minus, Plus } from 'lucide-react';\nimport { forwardRef } from 'react';\nimport { workflowCameraDuration } from './workflow-camera-duration';\nimport { Button } from '@/ds/components/Button';\nimport { Slider } from '@/ds/components/Slider';\nimport { cn } from '@/utils/cn';\n\nexport const ZoomSlider = forwardRef<\n HTMLDivElement,\n Omit<PanelProps, 'children'> & { compact?: boolean; onFitView?: () => void }\n>(({ className, compact = false, onFitView, ...props }, ref) => {\n const { zoom } = useViewport();\n const { zoomTo, zoomIn, zoomOut, fitView } = useReactFlow();\n const minZoom = useStore(state => state.minZoom);\n const maxZoom = useStore(state => state.maxZoom);\n\n return (\n <Panel\n ref={ref}\n className={cn(\n 'flex items-center gap-1 rounded-full border border-border bg-background p-1 text-foreground',\n className,\n )}\n {...props}\n >\n <Button\n size=\"icon-sm\"\n tooltip=\"Zoom out\"\n disabled={zoom <= minZoom}\n onClick={() => zoomOut({ duration: workflowCameraDuration() })}\n >\n <Minus />\n </Button>\n {!compact && (\n <Slider\n className=\"w-35\"\n aria-label=\"Canvas zoom\"\n value={[zoom]}\n min={minZoom}\n max={maxZoom}\n step={0.01}\n largeStep={0.25}\n format={{ style: 'percent' }}\n onValueChange={values => {\n const [nextZoom] = values;\n if (nextZoom !== undefined) void zoomTo(nextZoom);\n }}\n />\n )}\n <Button\n size=\"icon-sm\"\n tooltip=\"Zoom in\"\n disabled={zoom >= maxZoom}\n onClick={() => zoomIn({ duration: workflowCameraDuration() })}\n >\n <Plus />\n </Button>\n <Button\n size=\"sm\"\n className=\"min-w-16 tabular-nums\"\n tooltip=\"Reset to actual size (100%)\"\n onClick={() => zoomTo(1, { duration: workflowCameraDuration() })}\n >\n {(100 * zoom).toFixed(0)}%\n </Button>\n <Button\n size=\"icon-sm\"\n tooltip=\"Fit view\"\n onClick={onFitView ?? (() => fitView({ duration: workflowCameraDuration(), maxZoom: 1 }))}\n >\n <Maximize />\n </Button>\n </Panel>\n );\n});\n\nZoomSlider.displayName = 'ZoomSlider';\n","import { Background, BackgroundVariant, ReactFlow, useNodesInitialized, useReactFlow, useStore } from '@xyflow/react';\nimport type { Edge, Node, ReactFlowProps } from '@xyflow/react';\nimport { useContext, useEffect, useId, useRef } from 'react';\nimport { WorkflowCanvasInsetContext, workflowFitOptions } from '../workflow-canvas-inset';\nimport { workflowCameraDuration } from './workflow-camera-duration';\nimport { WorkflowGraphGroups } from './workflow-graph-groups';\nimport type { WorkflowGraphGroup } from './workflow-graph-groups';\nimport { ZoomSlider } from './zoom-slider';\nimport { cn } from '@/utils/cn';\nimport '@xyflow/react/dist/style.css';\n\nexport type { WorkflowGraphGroup } from './workflow-graph-groups';\n\nexport interface WorkflowGraphCanvasProps<NodeType extends Node = Node, EdgeType extends Edge = Edge> extends Pick<\n ReactFlowProps<NodeType, EdgeType>,\n 'nodes' | 'edges' | 'nodeTypes' | 'edgeTypes' | 'onNodesChange' | 'onNodeClick'\n> {\n focusNodeId?: string;\n variant?: 'default' | 'nested' | 'inline';\n groups?: WorkflowGraphGroup[];\n}\n\nexport function WorkflowGraphCanvas<NodeType extends Node, EdgeType extends Edge>({\n nodes,\n edges,\n nodeTypes,\n edgeTypes,\n onNodesChange,\n onNodeClick,\n focusNodeId,\n groups,\n variant = 'default',\n}: WorkflowGraphCanvasProps<NodeType, EdgeType>) {\n const graphRef = useRef<HTMLDivElement>(null);\n const backgroundId = useId();\n const panelInset = useContext(WorkflowCanvasInsetContext);\n const leftInset = variant === 'default' ? panelInset : 0;\n const isInline = variant === 'inline';\n const { getNodes, setCenter, fitView } = useReactFlow<NodeType, EdgeType>();\n const nodesInitialized = useNodesInitialized();\n const canvasWidth = useStore(state => state.width);\n const canvasHeight = useStore(state => state.height);\n const hasCompactZoom = canvasWidth - leftInset < 560;\n const inlineNodeLayout = isInline\n ? JSON.stringify(\n nodes?.map(node => [\n node.id,\n node.position.x,\n node.position.y,\n node.measured?.width ?? node.width,\n node.measured?.height ?? node.height,\n ]),\n )\n : undefined;\n\n useEffect(() => {\n if (!canvasWidth || !canvasHeight || !nodesInitialized) return;\n if (variant === 'default') return;\n void fitView({ ...workflowFitOptions(leftInset, isInline), duration: 0 });\n }, [canvasWidth, canvasHeight, nodesInitialized, inlineNodeLayout, fitView, leftInset, isInline, variant]);\n\n useEffect(() => {\n if (!canvasWidth || !canvasHeight || !nodesInitialized || !focusNodeId) return;\n const focusNode = getNodes().find(node => node.id === focusNodeId);\n if (!focusNode) return;\n if (!graphRef.current?.contains(document.activeElement)) {\n graphRef.current?.focus({ preventScroll: true });\n }\n const width = focusNode.measured?.width ?? focusNode.width ?? 274;\n const height = focusNode.measured?.height ?? focusNode.height ?? 100;\n const duration = workflowCameraDuration();\n const exceedsVisibleWidth = canvasWidth > 0 && width > canvasWidth - leftInset - 80;\n const exceedsVisibleHeight = canvasHeight > 0 && height > canvasHeight - 104;\n if (exceedsVisibleWidth || exceedsVisibleHeight) {\n void fitView({ ...workflowFitOptions(leftInset), nodes: [{ id: focusNode.id }], duration });\n return;\n }\n void setCenter(focusNode.position.x + width / 2 - leftInset / 2, focusNode.position.y + height / 2, {\n duration,\n zoom: 1,\n });\n }, [canvasWidth, canvasHeight, nodesInitialized, focusNodeId, getNodes, setCenter, fitView, leftInset]);\n\n return (\n <div\n ref={graphRef}\n tabIndex={-1}\n data-testid=\"workflow-graph-viewport\"\n className={cn('size-full outline-none', variant === 'nested' ? 'bg-sidebar' : 'bg-background')}\n >\n <ReactFlow\n fitView={variant === 'default'}\n fitViewOptions={workflowFitOptions(leftInset)}\n nodes={nodes}\n edges={edges}\n nodeTypes={nodeTypes}\n edgeTypes={edgeTypes}\n onNodesChange={onNodesChange}\n onNodeClick={onNodeClick}\n nodesDraggable={false}\n nodesConnectable={false}\n elementsSelectable={false}\n deleteKeyCode={null}\n panOnScroll={!isInline}\n panOnDrag={!isInline}\n zoomOnPinch={!isInline}\n zoomOnDoubleClick={!isInline}\n preventScrolling={!isInline}\n proOptions={isInline ? { hideAttribution: true } : undefined}\n zoomOnScroll={false}\n minZoom={0.1}\n maxZoom={4}\n >\n {!isInline && (\n <ZoomSlider\n position=\"top-right\"\n className=\"m-2!\"\n compact={hasCompactZoom}\n onFitView={() => fitView({ ...workflowFitOptions(leftInset), duration: workflowCameraDuration() })}\n />\n )}\n {groups && <WorkflowGraphGroups nodes={nodes ?? []} groups={groups} />}\n {!isInline && <Background id={backgroundId} variant={BackgroundVariant.Dots} gap={12} size={0.5} />}\n </ReactFlow>\n </div>\n );\n}\n","import { Handle, Position } from '@xyflow/react';\nimport type { ReactNode } from 'react';\n\nexport interface WorkflowNodeFrameProps {\n withoutTopHandle?: boolean;\n withoutBottomHandle?: boolean;\n children: ReactNode;\n}\n\nexport function WorkflowNodeFrame({ withoutTopHandle, withoutBottomHandle, children }: WorkflowNodeFrameProps) {\n return (\n <>\n {!withoutTopHandle && <Handle type=\"target\" position={Position.Top} style={{ visibility: 'hidden' }} />}\n <div className=\"nodrag pointer-events-auto\">{children}</div>\n {!withoutBottomHandle && <Handle type=\"source\" position={Position.Bottom} style={{ visibility: 'hidden' }} />}\n </>\n );\n}\n","import { Loader2, Pause, PlayIcon, StepForwardIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { Badge } from '@/ds/components/Badge';\nimport { Button } from '@/ds/components/Button';\nimport { Txt } from '@/ds/components/Txt';\n\nexport interface WorkflowDebugControlsProps {\n isStreaming?: boolean;\n canRunNextStep: boolean;\n nextStepLabel?: string;\n disabled?: boolean;\n children?: ReactNode;\n onRunNextStep: () => void;\n onContinueRun: () => void;\n}\n\nexport function WorkflowDebugControls({\n isStreaming,\n canRunNextStep,\n nextStepLabel,\n disabled,\n children,\n onRunNextStep,\n onContinueRun,\n}: WorkflowDebugControlsProps) {\n const nextStepFallback = canRunNextStep ? 'Ready to advance' : 'Next step unavailable';\n const actionsDisabled = !canRunNextStep || isStreaming || disabled;\n\n return (\n <div className=\"flex min-w-0 flex-col gap-3\" data-testid=\"workflow-debug-step-controls\">\n <div className=\"rounded-xl border border-surface-rim bg-background p-3\">\n <div className=\"mb-2 flex flex-wrap items-center justify-between gap-2\">\n <Txt as=\"span\" variant=\"meta\" tone=\"muted\">\n Next step\n </Txt>\n <Badge size=\"sm\" icon={<Pause />} emphasis=\"subtle\">\n Step by step\n </Badge>\n </div>\n <div className=\"text-subheading break-words text-foreground\" aria-live=\"polite\">\n {nextStepLabel || nextStepFallback}\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <Button\n type=\"button\"\n variant=\"primary\"\n className=\"min-w-0 flex-1\"\n aria-label=\"Run next step\"\n onClick={onRunNextStep}\n disabled={actionsDisabled}\n icon={isStreaming ? <Loader2 className=\"motion-safe:animate-spin\" /> : <StepForwardIcon />}\n >\n {isStreaming ? 'Running step…' : 'Run next step'}\n </Button>\n\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-md\"\n tooltip=\"Continue full run\"\n onClick={onContinueRun}\n disabled={actionsDisabled}\n >\n <PlayIcon />\n </Button>\n {children}\n </div>\n </div>\n );\n}\n","import { AlertCircleIcon } from 'lucide-react';\nimport { Skeleton } from '@/ds/components/Skeleton';\n\nexport type WorkflowGraphPlaceholderProps = { isLoading: true } | { isLoading?: false; workflowName: string };\n\nexport function WorkflowGraphPlaceholder(props: WorkflowGraphPlaceholderProps) {\n if (props.isLoading) {\n return (\n <div className=\"p-4\">\n <Skeleton className=\"h-full\" />\n </div>\n );\n }\n\n return (\n <div className=\"grid h-full place-items-center\">\n <div className=\"flex flex-col items-center gap-2\">\n <AlertCircleIcon />\n <div>We couldn't find {props.workflowName} workflow.</div>\n </div>\n </div>\n );\n}\n","import type { WorkflowConditionCardViewProps } from '../../types';\nimport { WorkflowConditionCardView } from './workflow-condition-card-view';\n\nexport type WorkflowConditionCardProps = Omit<WorkflowConditionCardViewProps, 'type'>;\n\nexport function WorkflowConditionCard({ conditions, ...props }: WorkflowConditionCardProps) {\n return <WorkflowConditionCardView {...props} type={conditions[0]?.type} conditions={conditions} />;\n}\n","import { MoreVerticalIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { Button } from '@/ds/components/Button';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu';\n\nexport function WorkflowStepActions({ children }: { children: ReactNode }) {\n return (\n <DropdownMenu>\n <DropdownMenu.Trigger\n render={\n <Button\n size=\"icon-sm\"\n variant=\"ghost\"\n aria-label=\"Step actions\"\n title=\"Step actions\"\n className=\"nodrag nopan\"\n >\n <MoreVerticalIcon />\n </Button>\n }\n />\n <DropdownMenu.Content align=\"end\">{children}</DropdownMenu.Content>\n </DropdownMenu>\n );\n}\n","import {\n AlertCircleIcon,\n BracesIcon,\n Clock3Icon,\n PanelRightIcon,\n PlayIcon,\n RotateCcwIcon,\n ShieldAlertIcon,\n StepForwardIcon,\n} from 'lucide-react';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu';\n\nconst actions = {\n nested: { icon: PanelRightIcon, label: 'View nested graph', activeLabel: 'Hide nested graph' },\n map: { icon: BracesIcon, label: 'Map config', activeLabel: 'Hide map config' },\n timeTravel: { icon: Clock3Icon, label: 'Time travel' },\n runStep: { icon: PlayIcon, label: 'Run step' },\n continueRun: { icon: StepForwardIcon, label: 'Continue run' },\n resumeData: { icon: RotateCcwIcon, label: 'Resume data' },\n error: { icon: AlertCircleIcon, label: 'Error' },\n tripwire: { icon: ShieldAlertIcon, label: 'Tripwire' },\n};\n\nexport interface WorkflowStepActionProps {\n action: keyof typeof actions;\n isActive?: boolean;\n onSelect: () => void;\n}\n\nexport function WorkflowStepAction({ action, isActive, onSelect }: WorkflowStepActionProps) {\n const definition = actions[action];\n const ActionIcon = definition.icon;\n const label = isActive && 'activeLabel' in definition ? definition.activeLabel : definition.label;\n return (\n <DropdownMenu.Item onSelect={onSelect} className={action === 'tripwire' ? 'text-warning-foreground' : undefined}>\n <ActionIcon />\n <span>{label}</span>\n </DropdownMenu.Item>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,IAAa,6BAA6B,cAAc,CAAC;AAEzD,SAAgB,mBAAmB,WAAmB,WAAW,OAAuB;CACtF,OAAO;EACL,SAAS;EACT,SAAS,WAAW,SAAS;GAAE,MAAM,GAAG,YAAY,GAAG;GAAK,OAAO;GAAQ,KAAK;GAAQ,QAAQ;EAAO;CACzG;AACF;;ACWA,SAAgB,qBAAqB,OAKnC;CACA,IAAI,MAAM,WAAW,OAAO;EAAE,OAAO;EAAY,MAAM;EAAU,MAAM;EAAS,WAAW;CAAU;CACrG,IAAI,MAAM,wBAAwB,MAAM,WACtC,OAAO;EAAE,OAAO;EAAY,MAAM;EAAU,MAAM;EAAU,WAAW;CAAW;CACpF,IAAI,MAAM,cAAc,CAAC,MAAM,UAC7B,OAAO;EAAE,OAAO;EAAY,MAAM;EAAQ,MAAM;EAAS,WAAW;CAAW;CACjF,IAAI,MAAM,aAAa,SAAS,MAAM,WACpC,OAAO;EAAE,OAAO;EAAO,MAAM;EAAU,MAAM;EAAgB,WAAW;CAAM;CAChF,IAAI,MAAM,aAAa,gBAAgB,MAAM,MAC3C,OAAO;EAAE,OAAO;EAAc,MAAM;EAAU,MAAM;EAAe,WAAW;CAAc;CAC9F,IAAI,MAAM,aAAa,WAAW,MAAM,aAAa,KAAA,GACnD,OAAO;EAAE,OAAO;EAAS,MAAM;EAAU,MAAM;EAAO,WAAW;CAAQ;CAC3E,IAAI,MAAM,aAAa,SAAS,OAAO;EAAE,OAAO;EAAS,MAAM;EAAQ,MAAM;CAAI;CACjF,IAAI,MAAM,aAAa,QAAQ,OAAO;EAAE,OAAO;EAAQ,MAAM;EAAQ,MAAM;CAAO;CAClF,IAAI,MAAM,aAAa,cAAc,OAAO;EAAE,OAAO;EAAc,MAAM;EAAQ,MAAM;CAAU;CACjG,OAAO;EAAE,OAAO;EAAQ,MAAM;EAAW,MAAM;CAAO;AACxD;;ACtCA,SAAgB,kBAAkB,OAA+B;CAC/D,MAAM,EAAE,OAAO,MAAM,SAAS,qBAAqB,KAAK;CACxD,OACE,oBAAC,OAAD;EAAO,MAAK;EAAK,SAAS;EAAM,MAAM,oBAAC,MAAD,EAAM,eAAA,KAAa,CAAA;EACtD,UAAA;CACI,CAAA;AAEX;;ACMA,IAAa,eAAe;CAC1B,OAAO;CACP,SAAS;CACT,KAAK;CACL,UAAU;CACV,SAAS;CACT,OAAO;CACP,UAAU;CACV,MAAM;CACN,SAAS;CACT,SAAS;CACT,OAAO;CACP,OAAO;CACP,IAAI;CACJ,MAAM;AACR;AAEA,IAAa,cAAc;CACzB,OAAO;CACP,YAAY;CACZ,SAAS;CACT,KAAK;CACL,UAAU;CACV,SAAS;CACT,OAAO;CACP,UAAU;CACV,MAAM;CACN,SAAS;CACT,SAAS;CACT,OAAO;CACP,OAAO;CACP,IAAI;CACJ,MAAM;AACR;AAcA,IAAM,mBAA2C;CAC/C,MAAM;CACN,SAAS;CACT,SAAS;CACT,OAAO;CACP,OAAO;CACP,IAAI;CACJ,MAAM;CACN,KAAK;CACL,IAAI;CACJ,KAAK;AACP;AAEA,IAAa,4BAA4B,SAAuC;CAC9E,QAAQ,MAAR;EACE,KAAK,QACH,OAAO;GAAE,MAAM,YAAY;GAAM,OAAO,aAAa;EAAK;EAC5D,KAAK,WACH,OAAO;GAAE,MAAM,YAAY;GAAS,OAAO,aAAa;EAAQ;EAClE,KAAK,WACH,OAAO;GAAE,MAAM,YAAY;GAAS,OAAO,aAAa;EAAQ;EAClE,KAAK,SACH,OAAO;GAAE,MAAM,YAAY;GAAO,OAAO,aAAa;EAAM;EAC9D,KAAK,SACH,OAAO;GAAE,MAAM,YAAY;GAAO,OAAO,aAAa;EAAM;EAC9D,KAAK,MACH,OAAO;GAAE,MAAM,YAAY;GAAI,OAAO,aAAa;EAAG;EACxD,KAAK,QACH,OAAO;GAAE,MAAM,YAAY;GAAM,OAAO,aAAa;EAAK;EAC5D,KAAK;EACL,KAAK;EACL,KAAK,OACH,OAAO;GAAE,MAAM,YAAY;GAAM,OAAO,aAAa;EAAK;EAC5D,SACE,OAAO;GAAE,MAAM,KAAA;GAAW,OAAO,KAAA;EAAU;CAC/C;AACF;AAEA,IAAa,yBAAyB,SAAqD;CACzF,MAAM,EAAE,MAAM,UAAU,yBAAyB,IAAI;CAErD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OACrB;CAGF,OAAO;EACL,IAAI,aAAa;EACjB,OAAO,iBAAiB,SAAS,GAAG,KAAK;EACzC;EACA;CACF;AACF;AAoBA,IAAa,oBAAoB,EAC/B,UACA,MACA,WACA,WACA,YACA,YACA,gBACoD;CACpD,MAAM,cAAc,QAAQ,YAAY,IAAI;CAC5C,MAAM,gBAAgB,QAAQ,SAAS;CACvC,MAAM,YAAY,QAAQ,aAAa,CAAC,SAAS;CACjD,MAAM,mBAAmB,QAAQ,SAAS;CAI1C,OAAO;EACL;EACA;EACA;EACA;EACA,iBAPA,eAAe,QAAQ,cAAc,UAAU,KAAK,iBAAiB,aAAa;CAQpF;AACF;AAEA,IAAa,qBAAqB,UAA4D;CAC5F,MAAM,EAAE,aAAa,eAAe,WAAW,qBAAqB,iBAAiB,KAAK;CAC1F,MAAM,aAAsC,CAAC;CAE7C,IAAI,aACF,WAAW,KAAK;EACd,IAAI,MAAM,OAAO,gBAAgB;EACjC,OAAO,MAAM,OAAO,qBAAqB;EACzC,MAAM,MAAM,OAAO,YAAY,aAAa,YAAY;EACxD,OAAO,aAAa;CACtB,CAAC;CAGH,IAAI,MAAM,YACR,WAAW,KAAK;EACd,IAAI;EACJ,OAAO;EACP,MAAM,YAAY;EAClB,OAAO,aAAa;CACtB,CAAC;CAGH,IAAI,MAAM,YACR,WAAW,KAAK;EACd,IAAI;EACJ,OAAO;EACP,MAAM,YAAY;EAClB,OAAO,aAAa;CACtB,CAAC;CAGH,IAAI,kBACF,WAAW,KAAK;EACd,IAAI;EACJ,OAAO;EACP,MAAM,YAAY;EAClB,OAAO,aAAa;CACtB,CAAC;CAGH,IAAI,eACF,WAAW,KAAK;EACd,IAAI;EACJ,OAAO;EACP,MAAM,YAAY;EAClB,OAAO,aAAa;CACtB,CAAC;CAGH,IAAI,WACF,WAAW,KAAK;EACd,IAAI;EACJ,OAAO;EACP,MAAM,YAAY;EAClB,OAAO,aAAa;CACtB,CAAC;CAGH,OAAO;AACT;;AChNA,IAAa,iBAAiB,EAAE,WAAW,SAAS,YAAY,OAAO,sBAA0C;CAC/G,IAAI,aAAa,YAAY,KAAA,KAAa,OAAO,SAAS,SAAS,GACjE,OAAO,oBAAC,sBAAD;EAAiD;EAA4B;CAAkB,GAApE,SAAoE;CAExG,OAAO,oBAAC,aAAD;EAAwB;EAAoB;EAA0B;CAAkB,CAAA;AACjG;AAEA,SAAS,qBAAqB,EAAE,WAAW,mBAA0D;CACnG,MAAM,CAAC,MAAM,WAAW,eAAe,KAAK,IAAI,CAAC;CACjD,gBAAgB;EACd,MAAM,WAAW,kBAAkB,QAAQ,KAAK,IAAI,CAAC,GAAG,GAAG;EAC3D,aAAa,cAAc,QAAQ;CACrC,GAAG,CAAC,CAAC;CACL,OAAO,oBAAC,aAAD;EAAwB;EAAW,SAAS;EAAuB;CAAkB,CAAA;AAC9F;AAEA,SAAS,YAAY,EAAE,WAAW,SAAS,mBAA0D;CACnG,MAAM,UAAU,YAAY,KAAA,IAAY,KAAA,IAAY,eAAe,UAAU,SAAS;CAEtF,OACE,oBAAC,KAAD;EACE,SAAQ;EACR,MAAK;EACL,MAAK;EACL,WAAU;EACV,OAAO,WAAW,kBAAkB,oDAAoD,KAAA;EAEvF,UAAA,YAAY,KAAA,IAAY,oBAAC,QAAD;GAAM,cAAW;GAAqB,UAAA;EAAO,CAAA,IAAI;CACvE,CAAA;AAET;;ACvCA,SAAgB,oBAAoB,WAAkC;CACpE,IAAI,UAAU,aAAa,KAAA,GAAW,OAAO,UAAU;CACvD,OAAO,KAAK,UAAU;EAAE,KAAK,UAAU;EAAK,OAAO,UAAU;EAAO,MAAM,UAAU;CAAK,GAAG,MAAM,CAAC;AACrG;;ACDA,IAAM,6BAA6B;AAEnC,SAAgB,wBAAwB,EAAE,UAA8B;CACtE,IAAI,OAAO,SAAS,4BAA4B,OAAO,oBAAC,MAAD,EAAM,MAAM,OAAS,CAAA;CAC5E,OAAO,oBAAC,0BAAD,EAA+C,OAAS,GAAzB,MAAyB;AACjE;AAEA,SAAS,yBAAyB,EAAE,UAA8B;CAChE,MAAM,CAAC,WAAW,gBAAgB,SAAiB;CAEnD,gBAAgB;EACd,IAAI,YAAY;EAChB,iBAAiB,MAAM,CAAC,CACrB,MAAK,eAAc;GAClB,IAAI,CAAC,WAAW,aAAa,WAAW,KAAK,CAAC;EAChD,CAAC,CAAC,CACD,YAAY,KAAA,CAAS;EACxB,aAAa;GACX,YAAY;EACd;CACF,GAAG,CAAC,MAAM,CAAC;CAEX,OAAO,oBAAC,MAAD;EAAM,MAAM,aAAa;EAAQ,MAAM,cAAc,KAAA,IAAY,KAAA,IAAY;CAAe,CAAA;AACrG;;ACjBA,IAAM,iBAAiB;AAEvB,SAAgB,0BAA0B,EACxC,MACA,YACA,uBACA,aACiC;CACjC,MAAM,YAAY,sBAAsB,IAAI;CAC5C,MAAM,OAAO,WAAW,QAAQ;CAChC,MAAM,QAAQ,WAAW,MAAM,QAAQ,eAAe,EAAE,KAAK;CAC7D,MAAM,8BAAc,IAAI,IAAoB;CAC5C,MAAM,UAAU,WAAW,KAAI,cAAa;EAC1C,MAAM,aAAa,oBAAoB,SAAS;EAChD,MAAM,WAAW,GAAG,UAAU,KAAK,GAAG;EACtC,MAAM,aAAa,YAAY,IAAI,QAAQ,KAAK;EAChD,YAAY,IAAI,UAAU,aAAa,CAAC;EACxC,OAAO;GAAE;GAAW;GAAY,KAAK,GAAG,SAAS,GAAG;EAAa;CACnE,CAAC;CACD,MAAM,cACJ,WAAW,SAAS,IAAI,KAAK,UAAU,YAAY,MAAM,CAAC,IAAI,QAAQ,KAAI,WAAU,OAAO,UAAU,CAAC,CAAC,KAAK,IAAI;CAClH,MAAM,gBAAgB,SAAS,UAAU,QAAQ,MAAM,EAAE,iBAAiB,WAAW,KAAK,CAAC,CAAC,SAAS,CAAC;CAEtG,OACE,qBAAC,OAAD;EACE,WAAW,GAAG,mBAAmB;EACjC,sBAAA;EACA,eAAY;EACZ,6BAA2B,yBAAyB;EAJtD,UAAA;GAME,qBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,oBAAC,OAAD;KAAO,MAAK;KAAK,SAAS,SAAS,SAAS,YAAY;KAAS,UAAS;KAAS,MAAM,oBAAC,MAAD,EAAM,eAAA,KAAa,CAAA;KACzG,UAAA;IACI,CAAA,GACN,iBACC,qBAAAA,YAAA,EAAA,UAAA,CACE,oBAAC,QAAD;KAAM,WAAU;KAAU,UAAA;IAAgB,CAAA,GAC1C,oBAAC,YAAD;KAAY,SAAS;KAAa,SAAQ;KAAkB,WAAU;IAAgB,CAAA,CACtF,EAAA,CAAA,CAED;;GACJ,gBACC,oBAAC,OAAD;IACE,MAAK;IACL,cAAW;IACX,UAAU;IACV,WAAW,GAAG,eAAe;IAE5B,UAAA,QAAQ,KAAK,EAAE,WAAW,YAAY,UACrC,qBAAC,OAAD,EAAA,UAAA,CACG,UAAU,QACT,oBAAC,OAAD;KAAO,MAAK;KAAK,SAAQ;KACtB,UAAA,UAAU,KAAK,YAAY;IACvB,CAAA,GAER,UAAU,aAAa,KAAA,IACtB,oBAAC,yBAAD,EAAyB,QAAQ,UAAU,SAAW,CAAA,IAEtD,oBAAC,MAAD,EAAM,MAAM,WAAa,CAAA,CAExB,EAAA,GAXK,GAWL,CACN;GACE,CAAA,IAEL,oBAAC,KAAD;IAAG,WAAW,GAAG,eAAe;IAC7B,UAAA,SAAS,SAAS,iCAAiC;GACnD,CAAA;GAEJ,aAAa,oBAAC,OAAD;IAAK,WAAU;IAA4D,UAAA;GAAe,CAAA;EACrG;;AAET;;AC5EA,IAAM,cAAc;AACpB,IAAM,oBAAoB,MAAM,KAAK,EAAE,QAAQ,GAAG,IAAI,GAAG,UAAU,QAAQ,CAAC;AAC5E,IAAM,uBAAuB,MAAM,KAAK,EAAE,QAAQ,GAAG,IAAI,GAAG,UAAU,OAAO,QAAQ,CAAC;AAEtF,SAAS,QAAQ,OAAe,QAAgB;CAC9C,MAAM,UAAW,QAAQ,KAAK,KAAM;CACpC,OAAO;EACL,GAAG,cAAc,KAAK,IAAI,OAAO,IAAI;EACrC,GAAG,cAAc,KAAK,IAAI,OAAO,IAAI;CACvC;AACF;AAEA,SAAS,SAAS,EAAE,OAAO,OAAO,WAAW,GAAG,SAAqE;CACnH,MAAM,QAAQ,QAAQ,OAAO,EAAE;CAC/B,MAAM,QAAQ,QAAQ,OAAO,QAAQ,KAAK,EAAE;CAC5C,OACE,oBAAC,QAAD;EACE,IAAI,MAAM;EACV,IAAI,MAAM;EACV,IAAI,MAAM;EACV,IAAI,MAAM;EACV,WAAW,GAAG,QAAQ,uBAAuB,wBAAwB,SAAS;EAC9E,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,SAAS,EAAE,OAAO,UAA6C;CACtE,MAAM,MAAM,QAAQ,OAAO,MAAM;CACjC,OACE,oBAAC,QAAD;EACE,IAAI;EACJ,IAAI;EACJ,IAAI,IAAI;EACR,IAAI,IAAI;EACR,WAAU;EACV,eAAc;CACf,CAAA;AAEL;AAEA,SAAS,SAAS,EAAE,YAAY,YAA2D;CACzF,OACE,oBAAC,QAAD;EAAM,WAAU;EAA+C,eAAA;EAC7D,UAAA,qBAAC,OAAD;GAAK,SAAQ;GAAc,MAAK;GAAO,WAAU;GAAjD,UAAA,CACG,WAAW,KAAK,OAAO,UACtB,oBAAC,UAAD;IAA6B;IAAO,OAAO,QAAQ,MAAM;GAAI,GAA9C,KAA8C,CAC9D,GACA,QACE;;CACD,CAAA;AAEV;AAEA,SAAgB,UAAU,EAAE,QAAwB;CAClD,MAAM,UAAU,KAAK,cAAc;CACnC,OACE,qBAAC,UAAD;EAAU,YAAY;EAAtB,UAAA;GACE,oBAAC,UAAD;IAAU,QAAS,KAAK,YAAY,IAAI,KAAM,UAAU,MAAM;IAAI,QAAQ;GAAK,CAAA;GAC/E,oBAAC,UAAD;IAAU,OAAO,UAAU;IAAG,QAAQ;GAAK,CAAA;GAC3C,oBAAC,UAAD;IAAQ,IAAI;IAAa,IAAI;IAAa,GAAG;IAAG,MAAK;GAAgB,CAAA;EAC7D;;AAEd;AAEA,SAAgB,aAAa,EAAE,QAAQ,QAAgD;CACrF,MAAM,QAAQ,KAAK,IAAI;EAAE,GAAG;EAAI,IAAI;EAAM,GAAG;EAAI,KAAK;CAAG,EAAE,OAAO,KAAK,KAAK,SAAS,EAAE,IAAI,EAAE;CAC7F,OACE,qBAAC,UAAD;EAAU,YAAY;EAAtB,UAAA;GACE,oBAAC,UAAD;IACE,OAAO,OAAQ,SAAS,QAAS;IACjC,OAAA;IACA,WAAU;IACV,eAAc;GACf,CAAA;GACD,qBAAC,QAAD;IAAM,GAAG;IAAa,GAAG;IAAI,YAAW;IAAS,WAAU;IAA3D,UAAA;KACG;KAAM;KAAE;IACL;;GACN,oBAAC,QAAD;IAAM,GAAG;IAAa,GAAG;IAAK,YAAW;IAAS,WAAU;IAAuC,UAAA;GAE7F,CAAA;EACE;;AAEd;;AChFA,IAAM,iBAAiB;AAEvB,SAAS,gBAAgB,UAA0D;CACjF,IAAI,WAAW,KAAM,OAAO;EAAE,QAAQ;EAAU,MAAM;CAAK;CAC3D,IAAI,WAAW,KAAO,OAAO;EAAE,QAAQ,WAAW;EAAM,MAAM;CAAI;CAClE,IAAI,WAAW,MAAS,OAAO;EAAE,QAAQ,WAAW;EAAO,MAAM;CAAM;CACvE,OAAO;EAAE,QAAQ,WAAW;EAAS,MAAM;CAAI;AACjD;AAEA,SAAS,cAAc,EACrB,OACA,MACA,SACA,QAMC;CACD,OACE,qBAAC,QAAD;EAAM,WAAU;EAAhB,UAAA,CACE,qBAAC,QAAD;GAAM,WAAU;GAAhB,UAAA,CACE,qBAAC,KAAD;IACE,IAAG;IACH,SAAQ;IACR,WAAU;IAHZ,UAAA,CAKG,OACA,QAAQ,oBAAC,SAAD;KAAO,WAAU;KAAmD,UAAA;IAAY,CAAA,CACtF;GACL,CAAA,GAAA,oBAAC,QAAD;IAAM,WAAW;IAAiB,UAAA;GAAc,CAAA,CAC5C;EACL,CAAA,GAAA,IACG;;AAEV;AAEA,SAAgB,eAAe,EAAE,UAAU,QAA8D;CACvG,IAAI,MAAM;EACR,MAAM,YAAY,IAAI,KAAK,IAAI;EAC/B,IAAI,CAAC,OAAO,SAAS,UAAU,QAAQ,CAAC,GACtC,OAAO,oBAAC,QAAD;GAAM,WAAW;GAAgB,UAAA;EAA0B,CAAA;EAEpE,OACE,oBAAC,eAAD;GACE,OAAO,WAAW,WAAW,QAAQ,EAAE,UAAU,MAAM,CAAC,KAAK;GAC7D,MAAK;GACL,SAAS,gBAAgB,WAAW;IAAE,UAAU;IAAO,KAAK;GAAE,CAAC,KAAK;GACpE,MAAM,oBAAC,WAAD,EAAW,MAAM,UAAY,CAAA;EACpC,CAAA;CAEL;CACA,IAAI,aAAa,KAAA,GAAW,OAAO;CACnC,IAAI,CAAC,OAAO,SAAS,QAAQ,KAAK,WAAW,GAC3C,OAAO,oBAAC,QAAD;EAAM,WAAW;EAAgB,UAAA;CAAuB,CAAA;CAEjE,MAAM,UAAU,gBAAgB,QAAQ;CACxC,OACE,oBAAC,eAAD;EACE,OAAO,eAAe,QAAQ,KAAK;EACnC,SAAQ;EACR,MAAM,oBAAC,cAAD,EAAc,GAAI,QAAU,CAAA;CACnC,CAAA;AAEL;;ACtDA,IAAM,eAAe;CACnB,SAAS;CACT,SAAS;CACT,QAAQ;CACR,WAAW;CACX,SAAS;CACT,QAAQ;CACR,SAAS;CACT,UAAU;CACV,UAAU;AACZ;AAEA,IAAM,oBAA6D;CACjE,SAAS;CACT,QAAQ;CACR,UAAU;CACV,SAAS;CACT,QAAQ;CACR,SAAS;AACX;AAEA,IAAM,sBAA+D;CACnE,SAAS;CACT,QAAQ;CACR,WAAW;CACX,UAAU;AACZ;AAEA,IAAM,qBAA+D,EAAE,cAAc,2BAA2B;AAEhH,SAAgB,qBAAqB,OAAkC;CACrE,MAAM,EACJ,OACA,aACA,eACA,SACA,YACA,WACA,WACA,eACA,UACA,WACA,iBACA,WACA,SACA,WACA,SACE;CACJ,MAAM,CAAC,UAAU,eAAe,SAAS,MAAM,iBAAiB,KAAK;CACrE,MAAM,YAAY,kBAAkB;CACpC,MAAM,cAAc,kBAAkB;CACtC,MAAM,sBACJ,iBAAiB,OAAO,OAAO,cAAc,aAAa,IAAI,aAAa,iBAAiB,KAAA;CAC9F,MAAM,cAAc,gBAAiB,uBAAuB,uBAAwB;CACpF,MAAM,OAAO,qBAAqB,KAAK;CACvC,MAAM,eAAe,kBAAkB,KAAK,CAAC,CAC1C,QAAO,cAAa,UAAU,OAAO,KAAK,SAAS,CAAC,CACpD,KAAI,cAAa,UAAU,MAAM,QAAQ,UAAU,EAAE,CAAC;CACzD,MAAM,cAAc,aAAa;CACjC,MAAM,YAAY,aAAa,CAAC;CAChC,MAAM,iBAAiB,QAAQ,IAAI,KAAK;CACxC,MAAM,UAAU,WAAW,WAAW;CAEtC,OACE,oBAAC,OAAD;EACE,WAAW,GACT,8BACA,kBAAkB,SAClB,aACE,iSACJ;EAEA,UAAA,qBAAC,aAAD;GACE,MAAM;GACN,cAAc;GACd,WAAW,GACT,oBACA,gMACA,2GACA,iBAAiB,kBAAkB,gBACnC,yGACA,cAAc,mDACd,kBAAkB,wDAClB,aAAa,yBACb,aAAa,CAAC,cAAc,UAC9B;GACA,sBAAA;GACA,0BAAwB;GACxB,6BAA2B,iBAAiB;GAC5C,6BAA2B,cAAc,KAAA;GACzC,8BAA4B,aAAa,KAAA;GACzC,8BAA4B,aAAa,KAAA;GACzC,eAAa,MAAM,uBAAuB,yBAAyB;GACnE,oBAAoB,gBAAgB,IAAI;GACxC,oBAAoB,gBAAgB,KAAK;GAtB3C,UAAA,CAwBE,qBAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KACE,qBAAC,SAAD;MACE,WAAW,GACT,+CACA,YAAY,mDACd;MACA,MAAM,WAAW,WAAW,KAAA;MAC5B,cAAY,WAAW,WAAW,UAAU,KAAA;MAC5C,gBAAc,WAAW,QAAQ,UAAU,IAAI,KAAA;MAC/C,SAAS;MARX,UAAA,CAUE,qBAAC,QAAD;OAAM,WAAU;OAAhB,UAAA,CACE,oBAAC,KAAD;QAAK,IAAG;QAAO,SAAQ;QAAS,MAAK;QAAM,WAAU;QAAwB,OAAO;QAClF,UAAA,oBAAC,SAAD;SAAS,QAAQ;SAAY,UAAA;QAAe,CAAA;OACzC,CAAA,GACL,oBAAC,mBAAD,EAAmB,GAAI,MAAQ,CAAA,CAC3B;MACN,CAAA,GAAA,qBAAC,QAAD;OAAM,WAAU;OAAhB,UAAA;QACG,eACC,oBAAC,KAAD;SAAK,IAAG;SAAO,SAAQ;SAAU,MAAK;SAAQ,WAAU;SACrD,UAAA;QACE,CAAA;QAEP,oBAAC,gBAAD;SAAgB,UAAU,MAAM;SAAU,MAAM,MAAM;QAAO,CAAA;QAC5D,aACC,oBAAC,KAAD;SAAK,IAAG;SAAO,SAAQ;SAAO,WAAU;SAAsB,UAAA;QAEzD,CAAA;QAEN,aAAa,mBACZ,qBAAC,KAAD;SAAK,IAAG;SAAO,SAAQ;SAAO,WAAU;SAAxC,UAAA,CACE,qBAAC,QAAD,EAAA,UAAA;UACE,oBAAC,UAAD,EAAA,UAAS,gBAAgB,eAAuB,CAAA;UAAC;UAAK,gBAAgB;UAAW;SAC7E,EAAA,CAAA,GACL,gBAAgB,aAAa,IAC5B,oBAAC,YAAD;UACE,WAAU;UACV,cAAY,GAAG,MAAM;UACrB,OAAO,gBAAgB;UACvB,KAAK,gBAAgB;SACtB,CAAA,IAED,oBAAC,QAAD,EAAA,UAAM,sBAAyB,CAAA,CAE9B;;QAEN,aAAa,SAAS,KACrB,oBAAC,KAAD;SAAK,IAAG;SAAO,SAAQ;SAAO,MAAK;SACjC,UAAA,oBAAC,UAAD,EAAA,UACG,aAAa,KAAI,eAChB,oBAAC,SAAS,MAAV,EAAA,UAAiC,WAA0B,GAAvC,UAAuC,CAC5D,EACO,CAAA;QACP,CAAA;OAEH;MACC,CAAA,CAAA;;KACT,qBAAC,OAAD;MACE,WAAW,GACT,sHACA,iBAAiB,oBAAoB,cACvC;MAJF,UAAA;OAME,oBAAC,QAAD;QAAM,MAAK;QAAS,WAAW,YAAY,sCAAsC,KAAA;QAC9E,UAAA;OACG,CAAA;OACL,cAAc,KAAA,KACb,oBAAC,QAAD;QAAM,WAAU;QACd,UAAA,oBAAC,eAAD;SACa;SACF;SACE;SACX,iBAAiB,MAAM;QACxB,CAAA;OACG,CAAA;OAEP;MACE;;KAEJ,QACC,qBAAAC,YAAA,EAAA,UAAA,CACE,qBAAC,oBAAD;MACE,WAAW,GAAA,eAET,uJACF;MAJF,UAAA,CAME,qBAAC,QAAD,EAAA,UAAA;OACG,WAAW,aAAa;OAAS;OAAE,YAAY,SAAS;MACrD,EAAA,CAAA,GACN,oBAAC,mBAAD;OAAmB,WAAU;OAAQ,WAAU;MAAY,CAAA,CACzC;KACpB,CAAA,GAAA,oBAAC,oBAAD;MAAoB,WAAU;MAC3B,UAAA;KACiB,CAAA,CACpB,EAAA,CAAA;IAED;GACJ,CAAA,GAAA,eACC,oBAAC,cAAD;IACE,QAAQ,cAAc,UAAU;IAChC,eAAA;IACA,WAAU;IACV,OAAO,cAAc,qBAAqB,KAAA;GAC3C,CAAA,CAEQ;;CACV,CAAA;AAET;;ACzNA,IAAa,uBAAuB,EAClC,MACA,WAAW,aAIP;CACJ,MAAM,QAAQ,mBAAmB;CAEjC,MAAM,iBAAiB,YAAoB;EACzC,IAAI,aAAa,cACf,OAAO,CAAC,WAAW,GAAG,WAAW,YAAY;EAE/C,IAAI,aAAa,QACf,OAAO,CAAC,cAAc,WAAW,YAAY;EAG/C,IAAI;GACF,KAAK,MAAM,OAAO;GAClB,OAAO,CAAC,cAAc,WAAW,YAAY;EAC/C,QAAQ;GACN,IACE,QAAQ,SAAS,IAAI,KACrB,QAAQ,SAAS,UAAU,KAC3B,QAAQ,SAAS,QAAQ,KACzB,QAAQ,SAAS,SAAS,GAE1B,OAAO,CAAC,WAAW,GAAG,WAAW,YAAY;GAE/C,OAAO,CAAC,WAAW,YAAY;EACjC;CACF;CAEA,IAAI,OAAO,SAAS,UAAU;EAC5B,MAAM,UAAU,KAAK,UAAU,MAAM,MAAM,CAAC;EAC5C,OACE,qBAAC,OAAD;GAAK,WAAU;GAAyB,OAAO,EAAE,WAAW,IAAI;GAAhE,UAAA,CACE,oBAAC,OAAD;IAAK,WAAU;IACb,UAAA,oBAAC,YAAD,EAAqB,QAAU,CAAA;GAC5B,CAAA,GACL,oBAAC,OAAD;IAAK,WAAU;IACb,UAAA,oBAAC,YAAD;KACE,OAAO;KACA;KACP,YAAY;MAAC;MAAc,WAAW;MAAc;KAAc;KAClE,YAAY,EAAE,YAAY,MAAM;IACjC,CAAA;GACE,CAAA,CACF;;CAET;CAEA,MAAM,aAAa,cAAc,IAAI;CAErC,IAAI,iBAAiB;CACrB,IAAI;EACF,MAAM,OAAO,KAAK,MAAM,IAAI;EAC5B,iBAAiB,KAAK,UAAU,MAAM,MAAM,CAAC;CAC/C,QAAQ,CAAC;CAET,OACE,qBAAC,OAAD;EAAK,WAAU;EAAyB,OAAO,EAAE,WAAW,IAAI;EAAhE,UAAA,CACE,oBAAC,OAAD;GAAK,WAAU;GACb,UAAA,oBAAC,YAAD,EAAY,SAAS,KAAO,CAAA;EACzB,CAAA,GACL,oBAAC,OAAD;GAAK,WAAU;GACb,UAAA,oBAAC,YAAD;IACE,OAAO;IACA;IACP,YAAY,CAAC,GAAG,YAAY,cAAc;IAC1C,YAAY,EAAE,YAAY,MAAM;GACjC,CAAA;EACE,CAAA,CACF;;AAET;;AChEA,IAAa,0BAA0B,EACrC,gBACA,QACA,OACA,UACA,gBACiC;CACjC,MAAM,CAAC,QAAQ,aAAa,SAAS,KAAK;CAC1C,MAAM,YAAY,UAAU,iBAAiB,GAAG,eAAe,WAAW;CAE1E,IAAI,WAAW,KAAA,GACb,OAAO;CAGT,OACE,qBAAAC,YAAA,EAAA,UAAA,CACE,oBAAC,QAAD;EACE,MAAK;EACL,SAAQ;EACR,SAAS,oBAAoB,UAAU,IAAI;EAC3C,cAAY,QAAQ;EACpB,gBAAc;EACd,WAAW,GACT,oBACA,wBACA,iEACF;EACA,MAAM,oBAAC,UAAD,EAAU,WAAU,wBAAyB,CAAA;EACpD,UAAA;CAEO,CAAA,GAER,oBAAC,QAAD;EAAQ,MAAM;EAAQ,cAAc;EAClC,UAAA,qBAAC,eAAD;GAAe,MAAK;GAApB,UAAA,CACE,oBAAC,cAAD,EAAA,UACE,oBAAC,aAAD,EAAA,UAAa,cAAwB,CAAA,EACzB,CAAA,GACd,oBAAC,YAAD,EAAA,UACE,qBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,oBAAC,KAAD;KAAK,SAAQ;KAAU,MAAK;KAAM,WAAU;KACzC,UAAA;IACE,CAAA,GACL,oBAAC,qBAAD,EAAqB,MAAM,OAAS,CAAA,CACjC;GACK,CAAA,EAAA,CAAA,CACC;;CACT,CAAA,CACR,EAAA,CAAA;AAEN;;ACjEA,IAAa,0BAA0B;AACvC,IAAa,8BAA8B;;ACI3C,IAAa,wBAAwB,EAAE,WAAiD;CACtF,MAAM,UAAU,KAAK,iBAAiB;CAEtC,OACE,qBAAAC,YAAA,EAAA,UAAA;EACG,CAAC,WAAW,oBAAC,QAAD;GAAQ,MAAK;GAAS,UAAU,SAAS;GAAK,OAAO,EAAE,YAAY,SAAS;EAAI,CAAA;EAC7F,oBAAC,OAAD;GACE,+BAAA;GACA,eAAa,qBAAqB,KAAK;GACvC,WAAW,GACT,sIACA,UACI,wDACA,oEACN;GAEA,UAAA,oBAAC,KAAD;IAAK,SAAQ;IAAQ,UAAA,KAAK;GAAW,CAAA;EAClC,CAAA;EACJ,WAAW,oBAAC,QAAD;GAAQ,MAAK;GAAS,UAAU,SAAS;GAAQ,OAAO,EAAE,YAAY,SAAS;EAAI,CAAA;CAC/F,EAAA,CAAA;AAEN;;AChBA,SAAgB,qBAAqB,EAAE,QAAQ,OAAO,aAAa,GAAG,SAAoC;CACxG,MAAM,SAAS,gBAAgB,MAAM,MAAM;CAC3C,MAAM,SAAS,gBAAgB,MAAM,MAAM;CAC3C,MAAM,cAAc,QAAQ,UAAU,SAAS,QAAQ;CACvD,MAAM,eAAe,QAAQ,UAAU,UAAU,QAAQ;CACzD,MAAM,cAAc,QAAQ,UAAU,SAAS,QAAQ;CACvD,MAAM,kBACJ,UAAU,gBAAgB,KAAA,KAAa,iBAAiB,KAAA,KAAa,MAAM,mBAAmB,SAAS;CACzG,MAAM,eAAe,UAAU,gBAAgB,KAAA,KAAa,MAAM,mBAAmB,SAAS;CAE9F,MAAM,UAAU,kBAAkB,OAAO,UAAU,iBAAiB,IAAI,cAAc,IAAI,MAAM;CAChG,MAAM,UAAU,kBAAkB,OAAO,UAAU,iBAAiB,IAAI,eAAe,MAAM;CAC7F,MAAM,UAAU,eAAe,OAAO,UAAU,iBAAiB,IAAI,cAAc,IAAI,MAAM;CAC7F,MAAM,UAAU,eAAe,OAAO,UAAU,iBAAiB,IAAI,MAAM;CAC3E,MAAM,CAAC,UAAU,WAAW,aAAa,cAAc;EACrD,GAAG;EACH;EACA;EACA;EACA;CACF,CAAC;CACD,MAAM,iBAAiB,MAAM,MAAM;CACnC,MAAM,SAAS,mBAAmB,WAAW,UAAU;CACvD,MAAM,SAAS,mBAAmB,WAAW,UAAU,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,UAAU,WAAW,CAAC,CAAC,IAAI;CAC5G,MAAM,UAAU,MAAM;CACtB,MAAM,aAAa,MAAM,MAAM,eAAe;CAC9C,MAAM,YAAY,aAAa,6BAA6B;CAE5D,OACE,qBAAAC,YAAA,EAAA,UAAA;EACE,oBAAC,QAAD,EAAA,UACE,oBAAC,UAAD;GAAQ,IAAI;GAAS,SAAQ;GAAY,MAAK;GAAI,MAAK;GAAI,aAAY;GAAI,cAAa;GAAI,QAAO;GACjG,UAAA,oBAAC,QAAD;IAAM,GAAE;IAAmB,MAAM;GAAY,CAAA;EACvC,CAAA,EACJ,CAAA;EACN,oBAAC,UAAD;GACE,IAAI,MAAM;GACV,MAAM;GACN,WAAW,QAAQ,QAAQ;GAC3B,OAAO;IACL,GAAG,MAAM;IACT,QAAQ;IACR,aAAa,aAAa,IAAI;IAC9B,eAAe;IACf,iBAAiB,aAAa,SAAS;GACzC;GACA,cAAa;GACb,oBAAkB,MAAM,MAAM,cAAc;GAC5C,kBAAgB,MAAM,MAAM;GAC5B,gBAAc,MAAM,MAAM;EAC3B,CAAA;EACA,mBAAmB,YAClB,oBAAC,mBAAD,EAAA,UACE,oBAAC,OAAD;GACE,WAAU;GACV,OAAO;IACL,UAAU;IACV,eAAe;IACf,WAAW,mCAAmC,OAAO,MAAM,OAAO;GACpE;GAEC,UAAA,eACC,oBAAC,wBAAD;IACE,gBAAgB,MAAM,MAAM,kBAAkB,KAAA,IAAY,MAAM,MAAM;IAC9D;IACR,OAAO,OAAO,UAAU,WAAW,QAAQ,KAAA;GAC5C,CAAA;EAEA,CAAA,EACY,CAAA;CAErB,EAAA,CAAA;AAEN;;ACrFA,SAAgB,yBAAyB;CACvC,OAAO,OAAO,aAAa,kCAAkC,CAAC,CAAC,UAAU,IAAI;AAC/E;;ACUA,SAAgB,oBAAoB,EAAE,OAAO,UAA2D;CACtG,MAAM,EAAE,GAAG,GAAG,SAAS,YAAY;CACnC,OACE,oBAAC,OAAD;EACE,WAAU;EACV,OAAO,EAAE,WAAW,aAAa,EAAE,MAAM,EAAE,YAAY,KAAK,GAAG;EAE9D,UAAA,OAAO,KAAI,UAAS;GACnB,MAAM,UAAU,MAAM,SAAQ,SAAQ;IACpC,IAAI,CAAC,MAAM,QAAQ,SAAS,KAAK,EAAE,KAAK,CAAC,KAAK,UAAU,SAAS,CAAC,KAAK,SAAS,QAAQ,OAAO,CAAC;IAChG,OAAO,CAAC;KAAE,GAAG,KAAK,SAAS;KAAG,GAAG,KAAK,SAAS;KAAG,OAAO,KAAK,SAAS;KAAO,QAAQ,KAAK,SAAS;IAAO,CAAC;GAC9G,CAAC;GACD,IAAI,CAAC,QAAQ,UAAU,QAAQ,WAAW,MAAM,QAAQ,QAAQ,OAAO;GACvE,MAAM,OAAO,KAAK,IAAI,GAAG,QAAQ,KAAI,SAAQ,KAAK,CAAC,CAAC,IAAI;GACxD,MAAM,MAAM,KAAK,IAAI,GAAG,QAAQ,KAAI,SAAQ,KAAK,CAAC,CAAC,IAAI;GACvD,MAAM,QAAQ,KAAK,IAAI,GAAG,QAAQ,KAAI,SAAQ,KAAK,IAAI,KAAK,KAAK,CAAC,IAAI;GACtE,MAAM,SAAS,KAAK,IAAI,GAAG,QAAQ,KAAI,SAAQ,KAAK,IAAI,KAAK,MAAM,CAAC,IAAI;GACxE,OACE,oBAAC,OAAD;IAEE,WAAU;IACV,OAAO;KAAE,WAAW,aAAa,KAAK,MAAM,IAAI;KAAM,OAAO,QAAQ;KAAM,QAAQ,SAAS;IAAI;IAEhG,UAAA,qBAAC,OAAD;KAAK,WAAU;KAAf,UAAA,CACE,oBAAC,OAAD;MAAO,MAAK;MAAK,SAAQ;MAAO,UAAS;MAAS,MAAM,oBAAC,SAAD,EAAS,eAAA,KAAa,CAAA;MAC3E,UAAA,MAAM;KACF,CAAA,GACP,oBAAC,QAAD,EAAA,UAAO,MAAM,YAAkB,CAAA,CAC5B;;GACF,GAVE,MAAM,EAUR;EAET,CAAC;CACE,CAAA;AAET;;ACrCA,IAAa,aAAa,YAGvB,EAAE,WAAW,UAAU,OAAO,WAAW,GAAG,SAAS,QAAQ;CAC9D,MAAM,EAAE,SAAS,YAAY;CAC7B,MAAM,EAAE,QAAQ,QAAQ,SAAS,YAAY,aAAa;CAC1D,MAAM,UAAU,UAAS,UAAS,MAAM,OAAO;CAC/C,MAAM,UAAU,UAAS,UAAS,MAAM,OAAO;CAE/C,OACE,qBAAC,OAAD;EACO;EACL,WAAW,GACT,+FACA,SACF;EACA,GAAI;EANN,UAAA;GAQE,oBAAC,QAAD;IACE,MAAK;IACL,SAAQ;IACR,UAAU,QAAQ;IAClB,eAAe,QAAQ,EAAE,UAAU,uBAAuB,EAAE,CAAC;IAE7D,UAAA,oBAAC,OAAD,CAAQ,CAAA;GACF,CAAA;GACP,CAAC,WACA,oBAAC,QAAD;IACE,WAAU;IACV,cAAW;IACX,OAAO,CAAC,IAAI;IACZ,KAAK;IACL,KAAK;IACL,MAAM;IACN,WAAW;IACX,QAAQ,EAAE,OAAO,UAAU;IAC3B,gBAAe,WAAU;KACvB,MAAM,CAAC,YAAY;KACnB,IAAI,aAAa,KAAA,GAAW,OAAY,QAAQ;IAClD;GACD,CAAA;GAEH,oBAAC,QAAD;IACE,MAAK;IACL,SAAQ;IACR,UAAU,QAAQ;IAClB,eAAe,OAAO,EAAE,UAAU,uBAAuB,EAAE,CAAC;IAE5D,UAAA,oBAAC,MAAD,CAAO,CAAA;GACD,CAAA;GACR,qBAAC,QAAD;IACE,MAAK;IACL,WAAU;IACV,SAAQ;IACR,eAAe,OAAO,GAAG,EAAE,UAAU,uBAAuB,EAAE,CAAC;IAJjE,UAAA,EAMI,MAAM,KAAA,CAAM,QAAQ,CAAC,GAAE,GACnB;;GACR,oBAAC,QAAD;IACE,MAAK;IACL,SAAQ;IACR,SAAS,oBAAoB,QAAQ;KAAE,UAAU,uBAAuB;KAAG,SAAS;IAAE,CAAC;IAEvF,UAAA,oBAAC,UAAD,CAAW,CAAA;GACL,CAAA;EACH;;AAEX,CAAC;AAED,WAAW,cAAc;;ACxDzB,SAAgB,oBAAkE,EAChF,OACA,OACA,WACA,WACA,eACA,aACA,aACA,QACA,UAAU,aACqC;CAC/C,MAAM,WAAW,OAAuB,IAAI;CAC5C,MAAM,eAAe,MAAM;CAC3B,MAAM,aAAa,WAAW,0BAA0B;CACxD,MAAM,YAAY,YAAY,YAAY,aAAa;CACvD,MAAM,WAAW,YAAY;CAC7B,MAAM,EAAE,UAAU,WAAW,YAAY,aAAiC;CAC1E,MAAM,mBAAmB,oBAAoB;CAC7C,MAAM,cAAc,UAAS,UAAS,MAAM,KAAK;CACjD,MAAM,eAAe,UAAS,UAAS,MAAM,MAAM;CACnD,MAAM,iBAAiB,cAAc,YAAY;CACjD,MAAM,mBAAmB,WACrB,KAAK,UACH,OAAO,KAAI,SAAQ;EACjB,KAAK;EACL,KAAK,SAAS;EACd,KAAK,SAAS;EACd,KAAK,UAAU,SAAS,KAAK;EAC7B,KAAK,UAAU,UAAU,KAAK;CAChC,CAAC,CACH,IACA,KAAA;CAEJ,gBAAgB;EACd,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,kBAAkB;EACxD,IAAI,YAAY,WAAW;EAC3B,QAAa;GAAE,GAAG,mBAAmB,WAAW,QAAQ;GAAG,UAAU;EAAE,CAAC;CAC1E,GAAG;EAAC;EAAa;EAAc;EAAkB;EAAkB;EAAS;EAAW;EAAU;CAAO,CAAC;CAEzG,gBAAgB;EACd,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,aAAa;EACxE,MAAM,YAAY,SAAS,CAAC,CAAC,MAAK,SAAQ,KAAK,OAAO,WAAW;EACjE,IAAI,CAAC,WAAW;EAChB,IAAI,CAAC,SAAS,SAAS,SAAS,SAAS,aAAa,GACpD,SAAS,SAAS,MAAM,EAAE,eAAe,KAAK,CAAC;EAEjD,MAAM,QAAQ,UAAU,UAAU,SAAS,UAAU,SAAS;EAC9D,MAAM,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU;EACjE,MAAM,WAAW,uBAAuB;EACxC,MAAM,sBAAsB,cAAc,KAAK,QAAQ,cAAc,YAAY;EACjF,MAAM,uBAAuB,eAAe,KAAK,SAAS,eAAe;EACzE,IAAI,uBAAuB,sBAAsB;GAC/C,QAAa;IAAE,GAAG,mBAAmB,SAAS;IAAG,OAAO,CAAC,EAAE,IAAI,UAAU,GAAG,CAAC;IAAG;GAAS,CAAC;GAC1F;EACF;EACA,UAAe,UAAU,SAAS,IAAI,QAAQ,IAAI,YAAY,GAAG,UAAU,SAAS,IAAI,SAAS,GAAG;GAClG;GACA,MAAM;EACR,CAAC;CACH,GAAG;EAAC;EAAa;EAAc;EAAkB;EAAa;EAAU;EAAW;EAAS;CAAS,CAAC;CAEtG,OACE,oBAAC,OAAD;EACE,KAAK;EACL,UAAU;EACV,eAAY;EACZ,WAAW,GAAG,0BAA0B,YAAY,WAAW,eAAe,eAAe;EAE7F,UAAA,qBAAC,WAAD;GACE,SAAS,YAAY;GACrB,gBAAgB,mBAAmB,SAAS;GACrC;GACA;GACI;GACA;GACI;GACF;GACb,gBAAgB;GAChB,kBAAkB;GAClB,oBAAoB;GACpB,eAAe;GACf,aAAa,CAAC;GACd,WAAW,CAAC;GACZ,aAAa,CAAC;GACd,mBAAmB,CAAC;GACpB,kBAAkB,CAAC;GACnB,YAAY,WAAW,EAAE,iBAAiB,KAAK,IAAI,KAAA;GACnD,cAAc;GACd,SAAS;GACT,SAAS;GArBX,UAAA;IAuBG,CAAC,YACA,oBAAC,YAAD;KACE,UAAS;KACT,WAAU;KACV,SAAS;KACT,iBAAiB,QAAQ;MAAE,GAAG,mBAAmB,SAAS;MAAG,UAAU,uBAAuB;KAAE,CAAC;IAClG,CAAA;IAEF,UAAU,oBAAC,qBAAD;KAAqB,OAAO,SAAS,CAAC;KAAW;IAAS,CAAA;IACpE,CAAC,YAAY,oBAAC,YAAD;KAAY,IAAI;KAAc,SAAS,kBAAkB;KAAM,KAAK;KAAI,MAAM;IAAM,CAAA;GACzF;;CACR,CAAA;AAET;;ACrHA,SAAgB,kBAAkB,EAAE,kBAAkB,qBAAqB,YAAoC;CAC7G,OACE,qBAAAC,YAAA,EAAA,UAAA;EACG,CAAC,oBAAoB,oBAAC,QAAD;GAAQ,MAAK;GAAS,UAAU,SAAS;GAAK,OAAO,EAAE,YAAY,SAAS;EAAI,CAAA;EACtG,oBAAC,OAAD;GAAK,WAAU;GAA8B;EAAc,CAAA;EAC1D,CAAC,uBAAuB,oBAAC,QAAD;GAAQ,MAAK;GAAS,UAAU,SAAS;GAAQ,OAAO,EAAE,YAAY,SAAS;EAAI,CAAA;CAC5G,EAAA,CAAA;AAEN;;ACDA,SAAgB,sBAAsB,EACpC,aACA,gBACA,eACA,UACA,UACA,eACA,iBAC6B;CAC7B,MAAM,mBAAmB,iBAAiB,qBAAqB;CAC/D,MAAM,kBAAkB,CAAC,kBAAkB,eAAe;CAE1D,OACE,qBAAC,OAAD;EAAK,WAAU;EAA8B,eAAY;EAAzD,UAAA,CACE,qBAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACE,qBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,oBAAC,KAAD;KAAK,IAAG;KAAO,SAAQ;KAAO,MAAK;KAAQ,UAAA;IAEtC,CAAA,GACL,oBAAC,OAAD;KAAO,MAAK;KAAK,MAAM,oBAAC,OAAD,CAAQ,CAAA;KAAG,UAAS;KAAS,UAAA;IAE7C,CAAA,CACJ;GACL,CAAA,GAAA,oBAAC,OAAD;IAAK,WAAU;IAA8C,aAAU;IACpE,UAAA,iBAAiB;GACf,CAAA,CACF;EACL,CAAA,GAAA,qBAAC,OAAD;GAAK,WAAU;GAAf,UAAA;IACE,oBAAC,QAAD;KACE,MAAK;KACL,SAAQ;KACR,WAAU;KACV,cAAW;KACX,SAAS;KACT,UAAU;KACV,MAAM,cAAc,oBAAC,SAAD,EAAS,WAAU,2BAA4B,CAAA,IAAI,oBAAC,iBAAD,CAAkB,CAAA;KAExF,UAAA,cAAc,kBAAkB;IAC3B,CAAA;IAER,oBAAC,QAAD;KACE,MAAK;KACL,SAAQ;KACR,MAAK;KACL,SAAQ;KACR,SAAS;KACT,UAAU;KAEV,UAAA,oBAAC,UAAD,CAAW,CAAA;IACL,CAAA;IACP;GACE;EACF,CAAA,CAAA;;AAET;;ACjEA,SAAgB,yBAAyB,OAAsC;CAC7E,IAAI,MAAM,WACR,OACE,oBAAC,OAAD;EAAK,WAAU;EACb,UAAA,oBAAC,UAAD,EAAU,WAAU,SAAU,CAAA;CAC3B,CAAA;CAIT,OACE,oBAAC,OAAD;EAAK,WAAU;EACb,UAAA,qBAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACE,oBAAC,iBAAD,CAAkB,CAAA,GAClB,qBAAC,OAAD,EAAA,UAAA;IAAK;IAAuB,MAAM;IAAa;GAAe,EAAA,CAAA,CAC3D;;CACF,CAAA;AAET;;ACjBA,SAAgB,sBAAsB,EAAE,YAAY,GAAG,SAAqC;CAC1F,OAAO,oBAAC,2BAAD;EAA2B,GAAI;EAAO,MAAM,WAAW,EAAE,EAAE;EAAkB;CAAa,CAAA;AACnG;;ACFA,SAAgB,oBAAoB,EAAE,YAAqC;CACzE,OACE,qBAAC,cAAD,EAAA,UAAA,CACE,oBAAC,aAAa,SAAd,EACE,QACE,oBAAC,QAAD;EACE,MAAK;EACL,SAAQ;EACR,cAAW;EACX,OAAM;EACN,WAAU;EAEV,UAAA,oBAAC,kBAAD,CAAmB,CAAA;CACb,CAAA,EAEX,CAAA,GACD,oBAAC,aAAa,SAAd;EAAsB,OAAM;EAAO;CAA+B,CAAA,CACtD,EAAA,CAAA;AAElB;;ACZA,IAAM,UAAU;CACd,QAAQ;EAAE,MAAM;EAAgB,OAAO;EAAqB,aAAa;CAAoB;CAC7F,KAAK;EAAE,MAAM;EAAY,OAAO;EAAc,aAAa;CAAkB;CAC7E,YAAY;EAAE,MAAM;EAAY,OAAO;CAAc;CACrD,SAAS;EAAE,MAAM;EAAU,OAAO;CAAW;CAC7C,aAAa;EAAE,MAAM;EAAiB,OAAO;CAAe;CAC5D,YAAY;EAAE,MAAM;EAAe,OAAO;CAAc;CACxD,OAAO;EAAE,MAAM;EAAiB,OAAO;CAAQ;CAC/C,UAAU;EAAE,MAAM;EAAiB,OAAO;CAAW;AACvD;AAQA,SAAgB,mBAAmB,EAAE,QAAQ,UAAU,YAAqC;CAC1F,MAAM,aAAa,QAAQ;CAC3B,MAAM,aAAa,WAAW;CAC9B,MAAM,QAAQ,YAAY,iBAAiB,aAAa,WAAW,cAAc,WAAW;CAC5F,OACE,qBAAC,aAAa,MAAd;EAA6B;EAAU,WAAW,WAAW,aAAa,4BAA4B,KAAA;EAAtG,UAAA,CACE,oBAAC,YAAD,CAAa,CAAA,GACb,oBAAC,QAAD,EAAA,UAAO,MAAY,CAAA,CACF;;AAEvB"}
|
|
1
|
+
{"version":3,"file":"Workflow-BVVYys0W.js","names":["_Fragment","_Fragment","_Fragment","_Fragment","_Fragment","_Fragment"],"sources":["../src/ds/components/Workflow/workflow-canvas-inset.ts","../src/ds/components/Workflow/cards/workflow-card-kind.ts","../src/ds/components/Workflow/cards/workflow-type-badge.tsx","../src/ds/components/Workflow/cards/workflow-card-badge-utils.ts","../src/ds/components/Workflow/cards/workflow-clock.tsx","../src/ds/components/Workflow/cards/condition/workflow-condition-expression.ts","../src/ds/components/Workflow/cards/condition/workflow-condition-source.tsx","../src/ds/components/Workflow/cards/condition/workflow-condition-card-view.tsx","../src/ds/components/Workflow/cards/timing/workflow-time-dial.tsx","../src/ds/components/Workflow/cards/timing/workflow-timing.tsx","../src/ds/components/Workflow/cards/step/workflow-step-card-view.tsx","../src/ds/components/Workflow/data/workflow-code-dialog-content.tsx","../src/ds/components/Workflow/data/workflow-edge-data-button.tsx","../src/ds/components/Workflow/graph/types.ts","../src/ds/components/Workflow/graph/workflow-boundary-node.tsx","../src/ds/components/Workflow/graph/workflow-data-edge-view.tsx","../src/ds/components/Workflow/graph/workflow-camera-duration.ts","../src/ds/components/Workflow/graph/workflow-graph-groups.tsx","../src/ds/components/Workflow/graph/zoom-slider.tsx","../src/ds/components/Workflow/graph/workflow-graph-canvas.tsx","../src/ds/components/Workflow/graph/workflow-node-frame.tsx","../src/ds/components/Workflow/controls/workflow-debug-controls.tsx","../src/ds/components/Workflow/graph/workflow-graph-placeholder.tsx","../src/ds/components/Workflow/cards/condition/workflow-condition-card.tsx","../src/ds/components/Workflow/controls/workflow-step-actions.tsx","../src/ds/components/Workflow/controls/workflow-step-action.tsx"],"sourcesContent":["import type { FitViewOptions } from '@xyflow/react';\nimport { createContext } from 'react';\n\nexport const WorkflowCanvasInsetContext = createContext(0);\n\nexport function workflowFitOptions(leftInset: number, isInline = false): FitViewOptions {\n return {\n maxZoom: 1,\n padding: isInline ? '20px' : { left: `${leftInset + 40}px`, right: '40px', top: '40px', bottom: '64px' },\n };\n}\n","import {\n ArrowRightLeft,\n Bot,\n Braces,\n CalendarClock,\n GitBranch,\n GitFork,\n Repeat2,\n Timer,\n Workflow,\n Wrench,\n} from 'lucide-react';\nimport type { LucideIcon } from 'lucide-react';\nimport type { WorkflowStepCardViewProps } from '../types';\nimport type { BadgeVariant } from '@/ds/components/Badge';\n\nexport type WorkflowTypeBadgeProps = Pick<\n WorkflowStepCardViewProps,\n 'nodeKind' | 'isForEach' | 'isNestedWorkflowStep' | 'stepGraph' | 'isParallel' | 'mapConfig' | 'date' | 'duration'\n>;\n\nexport function getWorkflowCardBadge(props: WorkflowTypeBadgeProps): {\n label: string;\n Icon: LucideIcon;\n tone: BadgeVariant;\n indicator?: string;\n} {\n if (props.isForEach) return { label: 'For each', tone: 'orange', Icon: Repeat2, indicator: 'foreach' };\n if (props.isNestedWorkflowStep || props.stepGraph)\n return { label: 'Workflow', tone: 'purple', Icon: Workflow, indicator: 'workflow' };\n if (props.isParallel && !props.nodeKind)\n return { label: 'Parallel', tone: 'blue', Icon: GitFork, indicator: 'parallel' };\n if (props.nodeKind === 'map' || props.mapConfig)\n return { label: 'Map', tone: 'orange', Icon: ArrowRightLeft, indicator: 'map' };\n if (props.nodeKind === 'wait-until' || props.date)\n return { label: 'Wait until', tone: 'purple', Icon: CalendarClock, indicator: 'sleep-until' };\n if (props.nodeKind === 'delay' || props.duration !== undefined)\n return { label: 'Delay', tone: 'purple', Icon: Timer, indicator: 'sleep' };\n if (props.nodeKind === 'agent') return { label: 'Agent', tone: 'cyan', Icon: Bot };\n if (props.nodeKind === 'tool') return { label: 'Tool', tone: 'pink', Icon: Wrench };\n if (props.nodeKind === 'classifier') return { label: 'Classifier', tone: 'blue', Icon: GitBranch };\n return { label: 'Step', tone: 'neutral', Icon: Braces };\n}\n","import { getWorkflowCardBadge } from './workflow-card-kind';\nimport type { WorkflowTypeBadgeProps } from './workflow-card-kind';\nimport { Badge } from '@/ds/components/Badge';\n\nexport function WorkflowTypeBadge(props: WorkflowTypeBadgeProps) {\n const { label, Icon, tone } = getWorkflowCardBadge(props);\n return (\n <Badge size=\"xs\" variant={tone} icon={<Icon aria-hidden />}>\n {label}\n </Badge>\n );\n}\n","import {\n CalendarClock,\n Clock,\n CornerDownRight,\n GitBranch,\n Layers,\n List,\n Network,\n PlayCircle,\n RefreshCw,\n Repeat,\n Repeat1,\n Timer,\n Workflow,\n} from 'lucide-react';\nimport type { LucideIcon } from 'lucide-react';\n\nexport const BADGE_COLORS = {\n sleep: 'var(--badge-purple-indicator)',\n forEach: 'var(--badge-orange-indicator)',\n map: 'var(--badge-orange-indicator)',\n parallel: 'var(--badge-blue-indicator)',\n suspend: 'var(--badge-pink-indicator)',\n after: 'var(--badge-cyan-indicator)',\n workflow: 'var(--badge-purple-indicator)',\n when: 'var(--badge-amber-indicator)',\n dountil: 'var(--badge-purple-indicator)',\n dowhile: 'var(--badge-cyan-indicator)',\n until: 'var(--badge-amber-indicator)',\n while: 'var(--badge-green-indicator)',\n if: 'var(--badge-blue-indicator)',\n else: 'var(--muted-foreground)',\n} as const;\n\nexport const BADGE_ICONS = {\n sleep: Timer,\n sleepUntil: CalendarClock,\n forEach: List,\n map: List,\n parallel: Workflow,\n suspend: PlayCircle,\n after: Clock,\n workflow: Layers,\n when: Network,\n dountil: Repeat1,\n dowhile: Repeat,\n until: Timer,\n while: RefreshCw,\n if: GitBranch,\n else: CornerDownRight,\n} as const;\n\nexport interface ConditionIconConfig {\n icon: LucideIcon | undefined;\n color: string | undefined;\n}\n\nexport interface WorkflowCardIndicator {\n id: string;\n label: string;\n icon: LucideIcon;\n color: string;\n}\n\nconst CONDITION_LABELS: Record<string, string> = {\n when: 'When condition',\n dountil: 'Do until condition',\n dowhile: 'Do while condition',\n until: 'Until condition',\n while: 'While condition',\n if: 'If condition',\n else: 'Else condition',\n and: 'And condition',\n or: 'Or condition',\n not: 'Not condition',\n};\n\nexport const getConditionIconAndColor = (type?: string): ConditionIconConfig => {\n switch (type) {\n case 'when':\n return { icon: BADGE_ICONS.when, color: BADGE_COLORS.when };\n case 'dountil':\n return { icon: BADGE_ICONS.dountil, color: BADGE_COLORS.dountil };\n case 'dowhile':\n return { icon: BADGE_ICONS.dowhile, color: BADGE_COLORS.dowhile };\n case 'until':\n return { icon: BADGE_ICONS.until, color: BADGE_COLORS.until };\n case 'while':\n return { icon: BADGE_ICONS.while, color: BADGE_COLORS.while };\n case 'if':\n return { icon: BADGE_ICONS.if, color: BADGE_COLORS.if };\n case 'else':\n return { icon: BADGE_ICONS.else, color: BADGE_COLORS.else };\n case 'and':\n case 'or':\n case 'not':\n return { icon: BADGE_ICONS.when, color: BADGE_COLORS.when };\n default:\n return { icon: undefined, color: undefined };\n }\n};\n\nexport const getConditionIndicator = (type?: string): WorkflowCardIndicator | undefined => {\n const { icon, color } = getConditionIconAndColor(type);\n\n if (!type || !icon || !color) {\n return undefined;\n }\n\n return {\n id: `condition-${type}`,\n label: CONDITION_LABELS[type] ?? `${type} condition`,\n icon,\n color,\n };\n};\n\nexport interface WorkflowNodeBadgeInfo {\n isSleepNode: boolean;\n isForEachNode: boolean;\n isMapNode: boolean;\n isNestedWorkflow: boolean;\n hasSpecialBadge: boolean;\n}\n\nexport interface WorkflowCardBadgesProps {\n duration?: number;\n date?: Date;\n isForEach?: boolean;\n mapConfig?: string;\n canSuspend?: boolean;\n isParallel?: boolean;\n stepGraph?: unknown;\n}\n\nexport const getNodeBadgeInfo = ({\n duration,\n date,\n isForEach,\n mapConfig,\n canSuspend,\n isParallel,\n stepGraph,\n}: WorkflowCardBadgesProps): WorkflowNodeBadgeInfo => {\n const isSleepNode = Boolean(duration || date);\n const isForEachNode = Boolean(isForEach);\n const isMapNode = Boolean(mapConfig && !isForEach);\n const isNestedWorkflow = Boolean(stepGraph);\n const hasSpecialBadge =\n isSleepNode || Boolean(canSuspend || isParallel) || isForEachNode || isMapNode || isNestedWorkflow;\n\n return {\n isSleepNode,\n isForEachNode,\n isMapNode,\n isNestedWorkflow,\n hasSpecialBadge,\n };\n};\n\nexport const getNodeIndicators = (props: WorkflowCardBadgesProps): WorkflowCardIndicator[] => {\n const { isSleepNode, isForEachNode, isMapNode, isNestedWorkflow } = getNodeBadgeInfo(props);\n const indicators: WorkflowCardIndicator[] = [];\n\n if (isSleepNode) {\n indicators.push({\n id: props.date ? 'sleep-until' : 'sleep',\n label: props.date ? 'Sleep until step' : 'Sleep step',\n icon: props.date ? BADGE_ICONS.sleepUntil : BADGE_ICONS.sleep,\n color: BADGE_COLORS.sleep,\n });\n }\n\n if (props.canSuspend) {\n indicators.push({\n id: 'suspend',\n label: 'Suspend/resume step',\n icon: BADGE_ICONS.suspend,\n color: BADGE_COLORS.suspend,\n });\n }\n\n if (props.isParallel) {\n indicators.push({\n id: 'parallel',\n label: 'Parallel step',\n icon: BADGE_ICONS.parallel,\n color: BADGE_COLORS.parallel,\n });\n }\n\n if (isNestedWorkflow) {\n indicators.push({\n id: 'workflow',\n label: 'Nested workflow step',\n icon: BADGE_ICONS.workflow,\n color: BADGE_COLORS.workflow,\n });\n }\n\n if (isForEachNode) {\n indicators.push({\n id: 'foreach',\n label: 'Foreach step',\n icon: BADGE_ICONS.forEach,\n color: BADGE_COLORS.forEach,\n });\n }\n\n if (isMapNode) {\n indicators.push({\n id: 'map',\n label: 'Map step',\n icon: BADGE_ICONS.map,\n color: BADGE_COLORS.map,\n });\n }\n\n return indicators;\n};\n","import { useEffect, useState } from 'react';\nimport { Txt } from '@/ds/components/Txt';\nimport { formatDuration } from '@/utils/duration';\n\ninterface WorkflowClockProps {\n startedAt: number;\n endedAt?: number;\n isRunning?: boolean;\n spansSuspension?: boolean;\n}\n\nexport const WorkflowClock = ({ startedAt, endedAt, isRunning = false, spansSuspension }: WorkflowClockProps) => {\n if (isRunning && endedAt === undefined && Number.isFinite(startedAt)) {\n return <RunningWorkflowClock key={startedAt} startedAt={startedAt} spansSuspension={spansSuspension} />;\n }\n return <ElapsedTime startedAt={startedAt} endedAt={endedAt} spansSuspension={spansSuspension} />;\n};\n\nfunction RunningWorkflowClock({ startedAt, spansSuspension }: Omit<WorkflowClockProps, 'isRunning'>) {\n const [time, setTime] = useState(() => Date.now());\n useEffect(() => {\n const interval = setInterval(() => setTime(Date.now()), 100);\n return () => clearInterval(interval);\n }, []);\n return <ElapsedTime startedAt={startedAt} endedAt={time} spansSuspension={spansSuspension} />;\n}\n\nfunction ElapsedTime({ startedAt, endedAt, spansSuspension }: Omit<WorkflowClockProps, 'isRunning'>) {\n const elapsed = endedAt === undefined ? undefined : formatDuration(endedAt - startedAt);\n\n return (\n <Txt\n variant=\"meta\"\n tone=\"muted\"\n font=\"mono\"\n className=\"whitespace-nowrap\"\n title={elapsed && spansSuspension ? 'Includes time spent suspended waiting for input' : undefined}\n >\n {elapsed === undefined ? <span aria-label=\"Timing unavailable\">—</span> : elapsed}\n </Txt>\n );\n}\n","import type { WorkflowCardCondition } from '../../types';\n\nexport function conditionExpression(condition: WorkflowCardCondition) {\n if (condition.fnString !== undefined) return condition.fnString;\n return JSON.stringify({ ref: condition.ref, query: condition.query, conj: condition.conj }, null, 2);\n}\n","import { useEffect, useState } from 'react';\nimport { Code } from '@/ds/components/Code';\nimport { formatTypeScript } from '@/utils/formatting';\n\nconst MAX_FORMATTED_SOURCE_CHARS = 10_000;\n\nexport function WorkflowConditionSource({ source }: { source: string }) {\n if (source.length > MAX_FORMATTED_SOURCE_CHARS) return <Code code={source} />;\n return <FormattedConditionSource key={source} source={source} />;\n}\n\nfunction FormattedConditionSource({ source }: { source: string }) {\n const [formatted, setFormatted] = useState<string>();\n\n useEffect(() => {\n let cancelled = false;\n formatTypeScript(source)\n .then(expression => {\n if (!cancelled) setFormatted(expression.trim());\n })\n .catch(() => undefined);\n return () => {\n cancelled = true;\n };\n }, [source]);\n\n return <Code code={formatted ?? source} lang={formatted === undefined ? undefined : 'typescript'} />;\n}\n","import { Braces } from 'lucide-react';\nimport type { WorkflowConditionCardViewProps } from '../../types';\nimport { getConditionIndicator } from '../workflow-card-badge-utils';\nimport { conditionExpression } from './workflow-condition-expression';\nimport { WorkflowConditionSource } from './workflow-condition-source';\nimport { Badge } from '@/ds/components/Badge';\nimport { Code } from '@/ds/components/Code';\nimport { CopyButton } from '@/ds/components/CopyButton';\nimport { raisedSurfaceStyle } from '@/ds/primitives/raised-surface';\n\nconst surfaceClasses = 'rounded-[calc(var(--radius-xl)-2px)] bg-card text-meta';\n\nexport function WorkflowConditionCardView({\n type,\n conditions,\n previousDisplayStatus,\n actionBar,\n}: WorkflowConditionCardViewProps) {\n const indicator = getConditionIndicator(type);\n const Icon = indicator?.icon ?? Braces;\n const label = indicator?.label.replace(/ condition$/, '') ?? 'Condition';\n const occurrences = new Map<string, number>();\n const sources = conditions.map(condition => {\n const expression = conditionExpression(condition);\n const identity = `${condition.type}:${expression}`;\n const occurrence = occurrences.get(identity) ?? 0;\n occurrences.set(identity, occurrence + 1);\n return { condition, expression, key: `${identity}:${occurrence}` };\n });\n const copyContent =\n conditions.length > 1 ? JSON.stringify(conditions, null, 2) : sources.map(source => source.expression).join('\\n');\n const hasExpression = type !== 'else' && sources.some(({ expression }) => expression.trim().length > 0);\n\n return (\n <div\n className={`${raisedSurfaceStyle} w-[274px] overflow-hidden rounded-xl p-0.5 has-focus-visible:outline-1 has-focus-visible:outline-offset-4 has-focus-visible:outline-border-focus`}\n data-workflow-node\n data-testid=\"workflow-condition-node\"\n data-workflow-step-status={previousDisplayStatus ?? 'idle'}\n >\n <div className=\"flex h-[46px] items-center gap-2 px-2.5 text-meta text-muted-foreground\">\n <Badge size=\"xs\" variant={type === 'else' ? 'neutral' : 'amber'} emphasis=\"subtle\" icon={<Icon aria-hidden />}>\n {label}\n </Badge>\n {hasExpression && (\n <>\n <span className=\"ml-auto\">Expression</span>\n <CopyButton content={copyContent} tooltip=\"Copy expression\" className=\"nodrag nopan\" />\n </>\n )}\n </div>\n {hasExpression ? (\n <div\n role=\"region\"\n aria-label=\"Condition details\"\n tabIndex={0}\n className={`${surfaceClasses} nodrag nopan nowheel max-h-55 overflow-auto p-3.5 text-foreground [&_pre]:leading-relaxed [&_pre]:whitespace-pre-wrap`}\n >\n {sources.map(({ condition, expression, key }) => (\n <div key={key}>\n {condition.conj && (\n <Badge size=\"xs\" variant=\"neutral\">\n {condition.conj.toUpperCase()}\n </Badge>\n )}\n {condition.fnString !== undefined ? (\n <WorkflowConditionSource source={condition.fnString} />\n ) : (\n <Code code={expression} />\n )}\n </div>\n ))}\n </div>\n ) : (\n <p className={`${surfaceClasses} p-3 text-muted-foreground`}>\n {type === 'else' ? 'When no other branch matches' : 'Condition expression unavailable'}\n </p>\n )}\n {actionBar && <div className=\"nodrag nopan flex justify-end px-2.5 py-1.5 empty:hidden\">{actionBar}</div>}\n </div>\n );\n}\n","import type { ComponentProps, ReactNode } from 'react';\nimport { cn } from '@/utils/cn';\n\nexport type DurationUnit = 'ms' | 's' | 'min' | 'h';\n\nconst DIAL_CENTER = 58;\nconst CLOCK_TICK_ANGLES = Array.from({ length: 60 }, (_, index) => index * 6);\nconst DURATION_TICK_ANGLES = Array.from({ length: 41 }, (_, index) => -120 + index * 6);\n\nfunction pointAt(angle: number, radius: number) {\n const radians = (angle * Math.PI) / 180;\n return {\n x: DIAL_CENTER + Math.sin(radians) * radius,\n y: DIAL_CENTER - Math.cos(radians) * radius,\n };\n}\n\nfunction DialTick({ angle, major, className, ...props }: ComponentProps<'line'> & { angle: number; major: boolean }) {\n const outer = pointAt(angle, 49);\n const inner = pointAt(angle, major ? 38 : 43);\n return (\n <line\n x1={inner.x}\n y1={inner.y}\n x2={outer.x}\n y2={outer.y}\n className={cn(major ? 'stroke-placeholder' : 'stroke-border-strong', className)}\n {...props}\n />\n );\n}\n\nfunction DialHand({ angle, length }: { angle: number; length: number }) {\n const tip = pointAt(angle, length);\n return (\n <line\n x1={DIAL_CENTER}\n y1={DIAL_CENTER}\n x2={tip.x}\n y2={tip.y}\n className=\"stroke-1.5 stroke-muted-foreground\"\n strokeLinecap=\"round\"\n />\n );\n}\n\nfunction DialFace({ tickAngles, children }: { tickAngles: number[]; children: ReactNode }) {\n return (\n <span className=\"block size-28 shrink-0 text-muted-foreground\" aria-hidden>\n <svg viewBox=\"0 0 116 116\" fill=\"none\" className=\"block size-full overflow-visible\">\n {tickAngles.map((angle, index) => (\n <DialTick key={angle} angle={angle} major={index % 5 === 0} />\n ))}\n {children}\n </svg>\n </span>\n );\n}\n\nexport function ClockDial({ date }: { date: Date }) {\n const minutes = date.getUTCMinutes();\n return (\n <DialFace tickAngles={CLOCK_TICK_ANGLES}>\n <DialHand angle={((date.getUTCHours() % 12) + minutes / 60) * 30} length={26} />\n <DialHand angle={minutes * 6} length={37} />\n <circle cx={DIAL_CENTER} cy={DIAL_CENTER} r={2} fill=\"currentColor\" />\n </DialFace>\n );\n}\n\nexport function DurationDial({ amount, unit }: { amount: number; unit: DurationUnit }) {\n const scale = Math.max({ h: 24, ms: 1000, s: 60, min: 60 }[unit], Math.ceil(amount / 10) * 10);\n return (\n <DialFace tickAngles={DURATION_TICK_ANGLES}>\n <DialTick\n angle={-120 + (amount / scale) * 240}\n major\n className=\"stroke-foreground stroke-2\"\n strokeLinecap=\"round\"\n />\n <text x={DIAL_CENTER} y={94} textAnchor=\"middle\" className=\"fill-muted-foreground font-body text-meta\">\n {scale} {unit}\n </text>\n <text x={DIAL_CENTER} y={106} textAnchor=\"middle\" className=\"fill-placeholder font-body text-meta\">\n scale\n </text>\n </DialFace>\n );\n}\n","import type { ReactNode } from 'react';\nimport type { WorkflowStepCardViewProps } from '../../types';\nimport { ClockDial, DurationDial } from './workflow-time-dial';\nimport type { DurationUnit } from './workflow-time-dial';\nimport { Txt } from '@/ds/components/Txt';\nimport { formatDate, formatShortDate } from '@/utils/date-format';\nimport { formatDuration } from '@/utils/duration';\n\nconst captionClasses = 'text-meta tracking-wider whitespace-nowrap text-muted-foreground uppercase';\n\nfunction durationReading(duration: number): { amount: number; unit: DurationUnit } {\n if (duration < 1000) return { amount: duration, unit: 'ms' };\n if (duration < 60000) return { amount: duration / 1000, unit: 's' };\n if (duration < 3600000) return { amount: duration / 60000, unit: 'min' };\n return { amount: duration / 3600000, unit: 'h' };\n}\n\nfunction TimingReading({\n value,\n unit,\n caption,\n dial,\n}: {\n value: string;\n unit?: string;\n caption: string;\n dial: ReactNode;\n}) {\n return (\n <span className=\"mt-1 flex min-h-27 items-center justify-between gap-1 text-foreground\">\n <span className=\"z-10 flex min-w-0 flex-col gap-2\">\n <Txt\n as=\"span\"\n variant=\"display\"\n className=\"flex items-baseline gap-1 leading-none tracking-tighter whitespace-nowrap tabular-nums\"\n >\n {value}\n {unit && <small className=\"text-meta tracking-normal text-muted-foreground\">{unit}</small>}\n </Txt>\n <span className={captionClasses}>{caption}</span>\n </span>\n {dial}\n </span>\n );\n}\n\nexport function WorkflowTiming({ duration, date }: Pick<WorkflowStepCardViewProps, 'duration' | 'date'>) {\n if (date) {\n const scheduled = new Date(date);\n if (!Number.isFinite(scheduled.getTime())) {\n return <span className={captionClasses}>Schedule unavailable</span>;\n }\n return (\n <TimingReading\n value={formatDate(scheduled, 'time', { timeZone: 'UTC' }) ?? ''}\n unit=\"UTC\"\n caption={formatShortDate(scheduled, { timeZone: 'UTC', now: 0 }) ?? ''}\n dial={<ClockDial date={scheduled} />}\n />\n );\n }\n if (duration === undefined) return null;\n if (!Number.isFinite(duration) || duration < 0) {\n return <span className={captionClasses}>Delay unavailable</span>;\n }\n const reading = durationReading(duration);\n return (\n <TimingReading\n value={formatDuration(duration) ?? ''}\n caption=\"Configured delay\"\n dial={<DurationDial {...reading} />}\n />\n );\n}\n","import { useState } from 'react';\nimport type { CSSProperties } from 'react';\nimport type { WorkflowCardDisplayStatus, WorkflowStepCardViewProps } from '../../types';\nimport { WorkflowTiming } from '../timing/workflow-timing';\nimport { getNodeIndicators } from '../workflow-card-badge-utils';\nimport { getWorkflowCardBadge } from '../workflow-card-kind';\nimport { WorkflowClock } from '../workflow-clock';\nimport { WorkflowTypeBadge } from '../workflow-type-badge';\nimport { ActivityWick } from '@/ds/components/Activity';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/ds/components/Collapsible';\nimport { DisclosureChevron } from '@/ds/components/DisclosureChevron';\nimport { Metadata } from '@/ds/components/Metadata';\nimport { Shimmer } from '@/ds/components/Shimmer';\nimport { Txt } from '@/ds/components/Txt';\nimport { raisedSurfaceStyle, surfaceStateLayerStyle } from '@/ds/primitives/raised-surface';\nimport { cn } from '@/utils/cn';\n\ntype ReportedStatus = NonNullable<WorkflowCardDisplayStatus>;\n\nconst statusLabels = {\n running: 'Running',\n success: 'Completed',\n failed: 'Failed',\n suspended: 'Needs input',\n waiting: 'Waiting',\n paused: 'Paused',\n skipped: 'Skipped',\n canceled: 'Canceled',\n tripwire: 'Tripwire blocked',\n} satisfies Record<ReportedStatus, string>;\n\nconst statusLineClasses: Partial<Record<ReportedStatus, string>> = {\n success: 'after:bg-success-indicator',\n failed: 'after:bg-destructive-indicator',\n tripwire: 'after:bg-warning-indicator',\n waiting: 'after:bg-warning-indicator',\n paused: 'after:bg-warning-indicator',\n skipped: 'after:bg-muted-foreground',\n};\n\nconst footerStatusClasses: Partial<Record<ReportedStatus, string>> = {\n success: 'text-success-indicator',\n failed: 'text-destructive-foreground',\n suspended: 'text-warning-foreground',\n tripwire: 'text-warning-foreground',\n};\n\nconst suspendedWickStyle: CSSProperties & { '--belt-hue': string } = { '--belt-hue': 'var(--warning-indicator)' };\n\nexport function WorkflowStepCardView(props: WorkflowStepCardViewProps) {\n const {\n label,\n description,\n displayStatus,\n stepKey,\n isSelected,\n isWaiting,\n isHovered,\n onHoverChange,\n onSelect,\n isForEach,\n foreachProgress,\n startedAt,\n endedAt,\n actionBar,\n body,\n } = props;\n const [expanded, setExpanded] = useState(props.initiallyOpen ?? false);\n const isRunning = displayStatus === 'running';\n const isSuspended = displayStatus === 'suspended';\n const reportedStatusLabel =\n displayStatus && Object.hasOwn(statusLabels, displayStatus) ? statusLabels[displayStatus] : undefined;\n const statusLabel = displayStatus ? (reportedStatusLabel ?? 'Status unavailable') : 'Not started';\n const kind = getWorkflowCardBadge(props);\n const capabilities = getNodeIndicators(props)\n .filter(indicator => indicator.id !== kind.indicator)\n .map(indicator => indicator.label.replace(/ step$/, ''));\n const hasActivity = isRunning || isSuspended;\n const isStacked = isForEach && !expanded;\n const isBodyExpanded = Boolean(body) && expanded;\n const Summary = onSelect ? 'button' : 'div';\n\n return (\n <div\n className={cn(\n 'relative isolate w-[274px]',\n isBodyExpanded && 'w-172',\n isStacked &&\n 'pb-3 before:absolute before:inset-x-1.5 before:top-2 before:bottom-1.5 before:-z-10 before:rounded-xl before:border before:border-border before:bg-card after:absolute after:inset-x-3 after:top-3.5 after:bottom-0 after:-z-20 after:rounded-xl after:border after:border-border after:bg-card',\n )}\n >\n <Collapsible\n open={expanded}\n onOpenChange={setExpanded}\n className={cn(\n raisedSurfaceStyle,\n 'relative rounded-xl border border-transparent text-foreground transition-[border-color,background-color,box-shadow] [--card-radius:calc(var(--radius-xl)-2px)] motion-reduce:transition-none',\n 'after:pointer-events-none after:absolute after:inset-x-4 after:-top-px after:h-px after:mask-x-from-76%',\n displayStatus && statusLineClasses[displayStatus],\n 'has-focus-visible:outline-1 has-focus-visible:outline-offset-4 has-focus-visible:outline-border-focus',\n isSelected && 'outline-1 outline-offset-4 outline-border-focus',\n isBodyExpanded && 'border-dashed border-muted-foreground/40 shadow-none',\n isWaiting && 'border-info-indicator',\n isHovered && !isSelected && 'bg-muted',\n )}\n data-workflow-node\n data-workflow-step-key={stepKey}\n data-workflow-step-status={displayStatus ?? 'idle'}\n data-workflow-step-active={isSelected || undefined}\n data-workflow-step-waiting={isWaiting || undefined}\n data-workflow-step-hovered={isHovered || undefined}\n data-testid={props.isNestedWorkflowStep ? 'workflow-nested-node' : 'workflow-default-node'}\n onMouseEnter={() => onHoverChange?.(true)}\n onMouseLeave={() => onHoverChange?.(false)}\n >\n <div className=\"m-0.5 overflow-hidden rounded-(--card-radius)\">\n <Summary\n className={cn(\n 'nodrag nopan flex w-full flex-col text-left',\n onSelect && 'group cursor-pointer focus-visible:outline-hidden',\n )}\n type={onSelect ? 'button' : undefined}\n aria-label={onSelect ? `Inspect ${label}` : undefined}\n aria-pressed={onSelect ? Boolean(isSelected) : undefined}\n onClick={onSelect}\n >\n <span className=\"flex items-start justify-between gap-2.5 rounded-(--card-radius) px-3.5 py-3 group-hover:bg-fill-subtle\">\n <Txt as=\"span\" variant=\"column\" tone=\"ink\" className=\"min-w-0 wrap-anywhere\" title={label}>\n <Shimmer active={isRunning}>{label}</Shimmer>\n </Txt>\n <WorkflowTypeBadge {...props} />\n </span>\n <span className=\"flex flex-col gap-2 rounded-t-(--card-radius) bg-card px-3.5 py-3 empty:py-1.5\">\n {description && (\n <Txt as=\"span\" variant=\"caption\" tone=\"muted\" className=\"wrap-anywhere\">\n {description}\n </Txt>\n )}\n <WorkflowTiming duration={props.duration} date={props.date} />\n {isWaiting && (\n <Txt as=\"span\" variant=\"meta\" className=\"text-info-indicator\">\n Next step in debug\n </Txt>\n )}\n {isForEach && foreachProgress && (\n <Txt as=\"span\" variant=\"meta\" className=\"flex flex-col gap-2 py-1\">\n <span>\n <strong>{foreachProgress.completedCount}</strong> of {foreachProgress.totalCount} items complete\n </span>\n {foreachProgress.totalCount > 0 ? (\n <progress\n className=\"h-1 w-full appearance-none border-0 bg-muted accent-success-indicator [&::-moz-progress-bar]:bg-success-indicator [&::-webkit-progress-bar]:bg-muted [&::-webkit-progress-value]:bg-success-indicator\"\n aria-label={`${label} completed items`}\n value={foreachProgress.completedCount}\n max={foreachProgress.totalCount}\n />\n ) : (\n <span>No items to process</span>\n )}\n </Txt>\n )}\n {capabilities.length > 0 && (\n <Txt as=\"span\" variant=\"meta\" tone=\"muted\">\n <Metadata>\n {capabilities.map(capability => (\n <Metadata.Item key={capability}>{capability}</Metadata.Item>\n ))}\n </Metadata>\n </Txt>\n )}\n </span>\n </Summary>\n <div\n className={cn(\n 'nodrag nopan flex min-h-7 items-center justify-between gap-2 bg-card px-3.5 pb-2.5 text-meta text-muted-foreground',\n displayStatus && footerStatusClasses[displayStatus],\n )}\n >\n <span role=\"status\" className={isRunning ? 'sr-only motion-reduce:not-sr-only' : undefined}>\n {statusLabel}\n </span>\n {startedAt !== undefined && (\n <span className=\"ml-auto\">\n <WorkflowClock\n startedAt={startedAt}\n endedAt={endedAt}\n isRunning={isRunning}\n spansSuspension={props.spansSuspension}\n />\n </span>\n )}\n {actionBar}\n </div>\n\n {body && (\n <>\n <CollapsibleTrigger\n className={cn(\n surfaceStateLayerStyle,\n 'nodrag nopan flex min-h-11 w-full items-center justify-between border-t border-border bg-card px-3.5 py-2.5 text-caption focus-visible:outline-hidden',\n )}\n >\n <span>\n {expanded ? 'Collapse' : 'Expand'} {isForEach ? 'loop' : 'workflow'}\n </span>\n <DisclosureChevron direction=\"right\" className=\"size-3.5\" />\n </CollapsibleTrigger>\n <CollapsibleContent className=\"h-155 overflow-hidden border-t border-dashed border-border\">\n {body}\n </CollapsibleContent>\n </>\n )}\n </div>\n {hasActivity && (\n <ActivityWick\n status={isSuspended ? 'ready' : 'working'}\n aria-hidden\n className=\"before:hidden\"\n style={isSuspended ? suspendedWickStyle : undefined}\n />\n )}\n </Collapsible>\n </div>\n );\n}\n","import { javascript } from '@codemirror/lang-javascript';\nimport { jsonLanguage } from '@codemirror/lang-json';\nimport { EditorView } from '@codemirror/view';\nimport CodeMirror from '@uiw/react-codemirror';\nimport { codeFoldGutter, useCodemirrorTheme } from '@/ds/components/CodeEditor';\nimport { CopyButton } from '@/ds/components/CopyButton';\n\nexport const WorkflowCodeContent = ({\n data,\n language = 'auto',\n}: {\n data: unknown;\n language?: 'json' | 'javascript' | 'auto';\n}) => {\n const theme = useCodemirrorTheme();\n\n const getExtensions = (content: string) => {\n if (language === 'javascript') {\n return [javascript(), EditorView.lineWrapping];\n }\n if (language === 'json') {\n return [jsonLanguage, EditorView.lineWrapping];\n }\n\n try {\n JSON.parse(content);\n return [jsonLanguage, EditorView.lineWrapping];\n } catch {\n if (\n content.includes('=>') ||\n content.includes('function') ||\n content.includes('const ') ||\n content.includes('return ')\n ) {\n return [javascript(), EditorView.lineWrapping];\n }\n return [EditorView.lineWrapping];\n }\n };\n\n if (typeof data !== 'string') {\n const content = JSON.stringify(data, null, 2);\n return (\n <div className=\"relative overflow-auto\" style={{ maxHeight: 500 }}>\n <div className=\"absolute top-2 right-2 z-10 rounded-full bg-muted\">\n <CopyButton content={content} />\n </div>\n <div className=\"rounded-lg bg-muted p-4\">\n <CodeMirror\n value={content}\n theme={theme}\n extensions={[jsonLanguage, EditorView.lineWrapping, codeFoldGutter]}\n basicSetup={{ foldGutter: false }}\n />\n </div>\n </div>\n );\n }\n\n const extensions = getExtensions(data);\n\n let displayContent = data;\n try {\n const json = JSON.parse(data);\n displayContent = JSON.stringify(json, null, 2);\n } catch {}\n\n return (\n <div className=\"relative overflow-auto\" style={{ maxHeight: 500 }}>\n <div className=\"absolute top-2 right-2 z-10 rounded-full bg-muted\">\n <CopyButton content={data} />\n </div>\n <div className=\"rounded-lg bg-muted p-4\">\n <CodeMirror\n value={displayContent}\n theme={theme}\n extensions={[...extensions, codeFoldGutter]}\n basicSetup={{ foldGutter: false }}\n />\n </div>\n </div>\n );\n};\n","import { Database } from 'lucide-react';\nimport { useState } from 'react';\nimport type { MouseEventHandler } from 'react';\nimport { WorkflowCodeContent } from './workflow-code-dialog-content';\nimport { Button } from '@/ds/components/Button';\nimport { Dialog, DialogBody, DialogContent, DialogHeader, DialogTitle } from '@/ds/components/Dialog';\nimport { Txt } from '@/ds/components/Txt';\nimport { raisedSurfaceStyle, surfaceStateLayerStyle } from '@/ds/primitives/raised-surface';\nimport { cn } from '@/lib/utils';\n\nexport interface WorkflowEdgeDataButtonProps {\n previousStepId?: string;\n output?: unknown;\n label?: string;\n selected?: boolean;\n onInspect?: MouseEventHandler<HTMLButtonElement>;\n}\n\nexport const WorkflowEdgeDataButton = ({\n previousStepId,\n output,\n label,\n selected,\n onInspect,\n}: WorkflowEdgeDataButtonProps) => {\n const [isOpen, setIsOpen] = useState(false);\n const dataLabel = label ?? (previousStepId ? `${previousStepId} output` : 'Previous output');\n\n if (output === undefined) {\n return null;\n }\n\n return (\n <>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={onInspect ?? (() => setIsOpen(true))}\n aria-label={`View ${dataLabel}`}\n aria-pressed={selected}\n className={cn(\n raisedSurfaceStyle,\n surfaceStateLayerStyle,\n 'h-7 rounded-lg px-2 text-foreground aria-pressed:before:bg-fill',\n )}\n icon={<Database className=\"text-muted-foreground\" />}\n >\n Data\n </Button>\n\n <Dialog open={isOpen} onOpenChange={setIsOpen}>\n <DialogContent size=\"xl\">\n <DialogHeader>\n <DialogTitle>Step output</DialogTitle>\n </DialogHeader>\n <DialogBody>\n <div className=\"min-w-0 rounded-lg border border-border bg-background p-3\">\n <Txt variant=\"caption\" tone=\"ink\" className=\"mb-2 block\">\n {dataLabel}\n </Txt>\n <WorkflowCodeContent data={output} />\n </div>\n </DialogBody>\n </DialogContent>\n </Dialog>\n </>\n );\n};\n","import type { Edge, Node } from '@xyflow/react';\n\nexport const WORKFLOW_DATA_EDGE_TYPE = 'workflow-data-edge';\nexport const WORKFLOW_BOUNDARY_NODE_TYPE = 'workflow-boundary-node';\n\nexport interface WorkflowDataEdgeData {\n [key: string]: unknown;\n previousStepId?: string;\n nextStepId?: string;\n conditionNode?: boolean;\n boundaryPayload?: 'workflow-input' | 'workflow-output';\n edgeStatus?: 'success' | 'idle';\n dataLabelPlacement?: 'source' | 'hidden';\n}\n\nexport type WorkflowDataEdgeModel = Edge<WorkflowDataEdgeData, typeof WORKFLOW_DATA_EDGE_TYPE>;\n\nexport type WorkflowBoundaryNodeData = {\n boundaryRole: 'start' | 'end';\n label: string;\n};\n\nexport type WorkflowBoundaryNodeModel = Node<WorkflowBoundaryNodeData, typeof WORKFLOW_BOUNDARY_NODE_TYPE>;\n","import { Handle, Position } from '@xyflow/react';\nimport type { NodeProps } from '@xyflow/react';\n\nimport type { WorkflowBoundaryNodeModel } from './types';\nimport { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/utils/cn';\n\nexport const WorkflowBoundaryNode = ({ data }: NodeProps<WorkflowBoundaryNodeModel>) => {\n const isStart = data.boundaryRole === 'start';\n\n return (\n <>\n {!isStart && <Handle type=\"target\" position={Position.Top} style={{ visibility: 'hidden' }} />}\n <div\n data-workflow-boundary-node\n data-testid={`workflow-boundary-${data.boundaryRole}`}\n className={cn(\n 'relative flex h-[38px] w-28 items-center justify-center text-muted-foreground after:absolute after:inset-x-0 after:mask-x-from-60%',\n isStart\n ? 'after:bottom-0 after:h-px after:bg-muted-foreground'\n : 'after:top-0 after:h-1 after:border-y after:border-muted-foreground',\n )}\n >\n <Txt variant=\"meta\">{data.label}</Txt>\n </div>\n {isStart && <Handle type=\"source\" position={Position.Bottom} style={{ visibility: 'hidden' }} />}\n </>\n );\n};\n","import { BaseEdge, EdgeLabelRenderer, getBezierPath, Position, useInternalNode } from '@xyflow/react';\nimport type { EdgeProps } from '@xyflow/react';\nimport { useId } from 'react';\nimport type { ReactNode } from 'react';\nimport { WorkflowEdgeDataButton } from '../data/workflow-edge-data-button';\nimport type { WorkflowDataEdgeModel } from './types';\n\nexport interface WorkflowDataEdgeViewProps extends EdgeProps<WorkflowDataEdgeModel> {\n output?: unknown;\n dataControl?: ReactNode;\n}\n\nexport function WorkflowDataEdgeView({ output, label, dataControl, ...props }: WorkflowDataEdgeViewProps) {\n const source = useInternalNode(props.source);\n const target = useInternalNode(props.target);\n const sourceWidth = source?.measured?.width ?? source?.width;\n const sourceHeight = source?.measured?.height ?? source?.height;\n const targetWidth = target?.measured?.width ?? target?.width;\n const hasBottomSource =\n source && sourceWidth !== undefined && sourceHeight !== undefined && props.sourcePosition === Position.Bottom;\n const hasTopTarget = target && targetWidth !== undefined && props.targetPosition === Position.Top;\n // Nested canvases scale DOM handle measurements twice; route in graph coordinates.\n const sourceX = hasBottomSource ? source.internals.positionAbsolute.x + sourceWidth / 2 : props.sourceX;\n const sourceY = hasBottomSource ? source.internals.positionAbsolute.y + sourceHeight : props.sourceY;\n const targetX = hasTopTarget ? target.internals.positionAbsolute.x + targetWidth / 2 : props.targetX;\n const targetY = hasTopTarget ? target.internals.positionAbsolute.y : props.targetY;\n const [edgePath, midpointX, midpointY] = getBezierPath({\n ...props,\n sourceX,\n sourceY,\n targetX,\n targetY,\n });\n const labelPlacement = props.data?.dataLabelPlacement;\n const labelX = labelPlacement === 'source' ? sourceX : midpointX;\n const labelY = labelPlacement === 'source' ? sourceY + Math.min(24, Math.max(0, (targetY - sourceY) / 4)) : midpointY;\n const arrowId = useId();\n const isExecuted = props.data?.edgeStatus === 'success';\n const pathColor = isExecuted ? 'var(--success-indicator)' : 'var(--muted-foreground)';\n\n return (\n <>\n <defs>\n <marker id={arrowId} viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerWidth=\"5\" markerHeight=\"5\" orient=\"auto\">\n <path d=\"M1 1 L9 5 L1 9 Z\" fill={pathColor} />\n </marker>\n </defs>\n <BaseEdge\n id={props.id}\n path={edgePath}\n markerEnd={`url(#${arrowId})`}\n style={{\n ...props.style,\n stroke: pathColor,\n strokeWidth: isExecuted ? 2 : 1,\n strokeLinecap: 'round',\n strokeDasharray: isExecuted ? 'none' : '5 6',\n }}\n vectorEffect=\"non-scaling-stroke\"\n data-edge-status={props.data?.edgeStatus ?? 'idle'}\n data-edge-from={props.data?.previousStepId}\n data-edge-to={props.data?.nextStepId}\n />\n {labelPlacement !== 'hidden' && (\n <EdgeLabelRenderer>\n <div\n className=\"nodrag nopan flex items-center justify-center\"\n style={{\n position: 'absolute',\n pointerEvents: 'all',\n transform: `translate(-50%, -50%) translate(${labelX}px, ${labelY}px)`,\n }}\n >\n {dataControl ?? (\n <WorkflowEdgeDataButton\n previousStepId={props.data?.boundaryPayload ? undefined : props.data?.previousStepId}\n output={output}\n label={typeof label === 'string' ? label : undefined}\n />\n )}\n </div>\n </EdgeLabelRenderer>\n )}\n </>\n );\n}\n","export function workflowCameraDuration() {\n return window.matchMedia?.('(prefers-reduced-motion: reduce)').matches ? 0 : 300;\n}\n","import { useViewport } from '@xyflow/react';\nimport type { Node } from '@xyflow/react';\nimport { GitFork } from 'lucide-react';\nimport { Badge } from '@/ds/components/Badge';\n\nexport interface WorkflowGraphGroup {\n id: string;\n label: string;\n description: string;\n nodeIds: string[];\n}\n\nexport function WorkflowGraphGroups({ nodes, groups }: { nodes: Node[]; groups: WorkflowGraphGroup[] }) {\n const { x, y, zoom } = useViewport();\n return (\n <div\n className=\"pointer-events-none absolute inset-0 z-0 origin-top-left\"\n style={{ transform: `translate(${x}px, ${y}px) scale(${zoom})` }}\n >\n {groups.map(group => {\n const members = nodes.flatMap(node => {\n if (!group.nodeIds.includes(node.id) || !node.measured?.width || !node.measured.height) return [];\n return [{ x: node.position.x, y: node.position.y, width: node.measured.width, height: node.measured.height }];\n });\n if (!members.length || members.length !== group.nodeIds.length) return null;\n const left = Math.min(...members.map(node => node.x)) - 20;\n const top = Math.min(...members.map(node => node.y)) - 54;\n const right = Math.max(...members.map(node => node.x + node.width)) + 20;\n const bottom = Math.max(...members.map(node => node.y + node.height)) + 20;\n return (\n <div\n key={group.id}\n className=\"absolute rounded-xl border border-dashed border-muted-foreground/25 bg-muted-foreground/3\"\n style={{ transform: `translate(${left}px, ${top}px)`, width: right - left, height: bottom - top }}\n >\n <div className=\"flex items-center gap-2 px-5 py-4 text-meta text-muted-foreground\">\n <Badge size=\"xs\" variant=\"blue\" emphasis=\"subtle\" icon={<GitFork aria-hidden />}>\n {group.label}\n </Badge>\n <span>{group.description}</span>\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n","import type { PanelProps } from '@xyflow/react';\nimport { Panel, useViewport, useReactFlow, useStore } from '@xyflow/react';\nimport { Maximize, Minus, Plus } from 'lucide-react';\nimport { forwardRef } from 'react';\nimport { workflowCameraDuration } from './workflow-camera-duration';\nimport { Button } from '@/ds/components/Button';\nimport { Slider } from '@/ds/components/Slider';\nimport { cn } from '@/utils/cn';\n\nexport const ZoomSlider = forwardRef<\n HTMLDivElement,\n Omit<PanelProps, 'children'> & { compact?: boolean; onFitView?: () => void }\n>(({ className, compact = false, onFitView, ...props }, ref) => {\n const { zoom } = useViewport();\n const { zoomTo, zoomIn, zoomOut, fitView } = useReactFlow();\n const minZoom = useStore(state => state.minZoom);\n const maxZoom = useStore(state => state.maxZoom);\n\n return (\n <Panel\n ref={ref}\n className={cn(\n 'flex items-center gap-1 rounded-full border border-border bg-background p-1 text-foreground',\n className,\n )}\n {...props}\n >\n <Button\n size=\"icon-sm\"\n tooltip=\"Zoom out\"\n disabled={zoom <= minZoom}\n onClick={() => zoomOut({ duration: workflowCameraDuration() })}\n >\n <Minus />\n </Button>\n {!compact && (\n <Slider\n className=\"w-35\"\n aria-label=\"Canvas zoom\"\n value={[zoom]}\n min={minZoom}\n max={maxZoom}\n step={0.01}\n largeStep={0.25}\n format={{ style: 'percent' }}\n onValueChange={values => {\n const [nextZoom] = values;\n if (nextZoom !== undefined) void zoomTo(nextZoom);\n }}\n />\n )}\n <Button\n size=\"icon-sm\"\n tooltip=\"Zoom in\"\n disabled={zoom >= maxZoom}\n onClick={() => zoomIn({ duration: workflowCameraDuration() })}\n >\n <Plus />\n </Button>\n <Button\n size=\"sm\"\n className=\"min-w-16 tabular-nums\"\n tooltip=\"Reset to actual size (100%)\"\n onClick={() => zoomTo(1, { duration: workflowCameraDuration() })}\n >\n {(100 * zoom).toFixed(0)}%\n </Button>\n <Button\n size=\"icon-sm\"\n tooltip=\"Fit view\"\n onClick={onFitView ?? (() => fitView({ duration: workflowCameraDuration(), maxZoom: 1 }))}\n >\n <Maximize />\n </Button>\n </Panel>\n );\n});\n\nZoomSlider.displayName = 'ZoomSlider';\n","import { Background, BackgroundVariant, ReactFlow, useNodesInitialized, useReactFlow, useStore } from '@xyflow/react';\nimport type { Edge, Node, ReactFlowProps } from '@xyflow/react';\nimport { useContext, useEffect, useId, useRef } from 'react';\nimport { WorkflowCanvasInsetContext, workflowFitOptions } from '../workflow-canvas-inset';\nimport { workflowCameraDuration } from './workflow-camera-duration';\nimport { WorkflowGraphGroups } from './workflow-graph-groups';\nimport type { WorkflowGraphGroup } from './workflow-graph-groups';\nimport { ZoomSlider } from './zoom-slider';\nimport { cn } from '@/utils/cn';\nimport '@xyflow/react/dist/style.css';\n\nexport type { WorkflowGraphGroup } from './workflow-graph-groups';\n\nexport interface WorkflowGraphCanvasProps<NodeType extends Node = Node, EdgeType extends Edge = Edge> extends Pick<\n ReactFlowProps<NodeType, EdgeType>,\n 'nodes' | 'edges' | 'nodeTypes' | 'edgeTypes' | 'onNodesChange' | 'onNodeClick'\n> {\n focusNodeId?: string;\n variant?: 'default' | 'nested' | 'inline';\n groups?: WorkflowGraphGroup[];\n}\n\nexport function WorkflowGraphCanvas<NodeType extends Node, EdgeType extends Edge>({\n nodes,\n edges,\n nodeTypes,\n edgeTypes,\n onNodesChange,\n onNodeClick,\n focusNodeId,\n groups,\n variant = 'default',\n}: WorkflowGraphCanvasProps<NodeType, EdgeType>) {\n const graphRef = useRef<HTMLDivElement>(null);\n const backgroundId = useId();\n const panelInset = useContext(WorkflowCanvasInsetContext);\n const leftInset = variant === 'default' ? panelInset : 0;\n const isInline = variant === 'inline';\n const { getNodes, setCenter, fitView } = useReactFlow<NodeType, EdgeType>();\n const nodesInitialized = useNodesInitialized();\n const canvasWidth = useStore(state => state.width);\n const canvasHeight = useStore(state => state.height);\n const hasCompactZoom = canvasWidth - leftInset < 560;\n const inlineNodeLayout = isInline\n ? JSON.stringify(\n nodes?.map(node => [\n node.id,\n node.position.x,\n node.position.y,\n node.measured?.width ?? node.width,\n node.measured?.height ?? node.height,\n ]),\n )\n : undefined;\n\n useEffect(() => {\n if (!canvasWidth || !canvasHeight || !nodesInitialized) return;\n if (variant === 'default') return;\n void fitView({ ...workflowFitOptions(leftInset, isInline), duration: 0 });\n }, [canvasWidth, canvasHeight, nodesInitialized, inlineNodeLayout, fitView, leftInset, isInline, variant]);\n\n useEffect(() => {\n if (!canvasWidth || !canvasHeight || !nodesInitialized || !focusNodeId) return;\n const focusNode = getNodes().find(node => node.id === focusNodeId);\n if (!focusNode) return;\n if (!graphRef.current?.contains(document.activeElement)) {\n graphRef.current?.focus({ preventScroll: true });\n }\n const width = focusNode.measured?.width ?? focusNode.width ?? 274;\n const height = focusNode.measured?.height ?? focusNode.height ?? 100;\n const duration = workflowCameraDuration();\n const exceedsVisibleWidth = canvasWidth > 0 && width > canvasWidth - leftInset - 80;\n const exceedsVisibleHeight = canvasHeight > 0 && height > canvasHeight - 104;\n if (exceedsVisibleWidth || exceedsVisibleHeight) {\n void fitView({ ...workflowFitOptions(leftInset), nodes: [{ id: focusNode.id }], duration });\n return;\n }\n void setCenter(focusNode.position.x + width / 2 - leftInset / 2, focusNode.position.y + height / 2, {\n duration,\n zoom: 1,\n });\n }, [canvasWidth, canvasHeight, nodesInitialized, focusNodeId, getNodes, setCenter, fitView, leftInset]);\n\n return (\n <div\n ref={graphRef}\n tabIndex={-1}\n data-testid=\"workflow-graph-viewport\"\n className={cn('size-full outline-none', variant === 'nested' ? 'bg-sidebar' : 'bg-background')}\n >\n <ReactFlow\n fitView={variant === 'default'}\n fitViewOptions={workflowFitOptions(leftInset)}\n nodes={nodes}\n edges={edges}\n nodeTypes={nodeTypes}\n edgeTypes={edgeTypes}\n onNodesChange={onNodesChange}\n onNodeClick={onNodeClick}\n nodesDraggable={false}\n nodesConnectable={false}\n elementsSelectable={false}\n deleteKeyCode={null}\n panOnScroll={!isInline}\n panOnDrag={!isInline}\n zoomOnPinch={!isInline}\n zoomOnDoubleClick={!isInline}\n preventScrolling={!isInline}\n proOptions={isInline ? { hideAttribution: true } : undefined}\n zoomOnScroll={false}\n minZoom={0.1}\n maxZoom={4}\n >\n {!isInline && (\n <ZoomSlider\n position=\"top-right\"\n className=\"m-2!\"\n compact={hasCompactZoom}\n onFitView={() => fitView({ ...workflowFitOptions(leftInset), duration: workflowCameraDuration() })}\n />\n )}\n {groups && <WorkflowGraphGroups nodes={nodes ?? []} groups={groups} />}\n {!isInline && <Background id={backgroundId} variant={BackgroundVariant.Dots} gap={12} size={0.5} />}\n </ReactFlow>\n </div>\n );\n}\n","import { Handle, Position } from '@xyflow/react';\nimport type { ReactNode } from 'react';\n\nexport interface WorkflowNodeFrameProps {\n withoutTopHandle?: boolean;\n withoutBottomHandle?: boolean;\n children: ReactNode;\n}\n\nexport function WorkflowNodeFrame({ withoutTopHandle, withoutBottomHandle, children }: WorkflowNodeFrameProps) {\n return (\n <>\n {!withoutTopHandle && <Handle type=\"target\" position={Position.Top} style={{ visibility: 'hidden' }} />}\n <div className=\"nodrag pointer-events-auto\">{children}</div>\n {!withoutBottomHandle && <Handle type=\"source\" position={Position.Bottom} style={{ visibility: 'hidden' }} />}\n </>\n );\n}\n","import { Loader2, Pause, PlayIcon, StepForwardIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { Badge } from '@/ds/components/Badge';\nimport { Button } from '@/ds/components/Button';\nimport { Txt } from '@/ds/components/Txt';\n\nexport interface WorkflowDebugControlsProps {\n isStreaming?: boolean;\n canRunNextStep: boolean;\n nextStepLabel?: string;\n disabled?: boolean;\n children?: ReactNode;\n onRunNextStep: () => void;\n onContinueRun: () => void;\n}\n\nexport function WorkflowDebugControls({\n isStreaming,\n canRunNextStep,\n nextStepLabel,\n disabled,\n children,\n onRunNextStep,\n onContinueRun,\n}: WorkflowDebugControlsProps) {\n const nextStepFallback = canRunNextStep ? 'Ready to advance' : 'Next step unavailable';\n const actionsDisabled = !canRunNextStep || isStreaming || disabled;\n\n return (\n <div className=\"flex min-w-0 flex-col gap-3\" data-testid=\"workflow-debug-step-controls\">\n <div className=\"rounded-xl border border-surface-rim bg-background p-3\">\n <div className=\"mb-2 flex flex-wrap items-center justify-between gap-2\">\n <Txt as=\"span\" variant=\"meta\" tone=\"muted\">\n Next step\n </Txt>\n <Badge size=\"sm\" icon={<Pause />} emphasis=\"subtle\">\n Step by step\n </Badge>\n </div>\n <div className=\"text-subheading break-words text-foreground\" aria-live=\"polite\">\n {nextStepLabel || nextStepFallback}\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <Button\n type=\"button\"\n variant=\"primary\"\n className=\"min-w-0 flex-1\"\n aria-label=\"Run next step\"\n onClick={onRunNextStep}\n disabled={actionsDisabled}\n icon={isStreaming ? <Loader2 className=\"motion-safe:animate-spin\" /> : <StepForwardIcon />}\n >\n {isStreaming ? 'Running step…' : 'Run next step'}\n </Button>\n\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-md\"\n tooltip=\"Continue full run\"\n onClick={onContinueRun}\n disabled={actionsDisabled}\n >\n <PlayIcon />\n </Button>\n {children}\n </div>\n </div>\n );\n}\n","import { AlertCircleIcon } from 'lucide-react';\nimport { Skeleton } from '@/ds/components/Skeleton';\n\nexport type WorkflowGraphPlaceholderProps = { isLoading: true } | { isLoading?: false; workflowName: string };\n\nexport function WorkflowGraphPlaceholder(props: WorkflowGraphPlaceholderProps) {\n if (props.isLoading) {\n return (\n <div className=\"p-4\">\n <Skeleton className=\"h-full\" />\n </div>\n );\n }\n\n return (\n <div className=\"grid h-full place-items-center\">\n <div className=\"flex flex-col items-center gap-2\">\n <AlertCircleIcon />\n <div>We couldn't find {props.workflowName} workflow.</div>\n </div>\n </div>\n );\n}\n","import type { WorkflowConditionCardViewProps } from '../../types';\nimport { WorkflowConditionCardView } from './workflow-condition-card-view';\n\nexport type WorkflowConditionCardProps = Omit<WorkflowConditionCardViewProps, 'type'>;\n\nexport function WorkflowConditionCard({ conditions, ...props }: WorkflowConditionCardProps) {\n return <WorkflowConditionCardView {...props} type={conditions[0]?.type} conditions={conditions} />;\n}\n","import { MoreVerticalIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { Button } from '@/ds/components/Button';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu';\n\nexport function WorkflowStepActions({ children }: { children: ReactNode }) {\n return (\n <DropdownMenu>\n <DropdownMenu.Trigger\n render={\n <Button\n size=\"icon-sm\"\n variant=\"ghost\"\n aria-label=\"Step actions\"\n title=\"Step actions\"\n className=\"nodrag nopan\"\n >\n <MoreVerticalIcon />\n </Button>\n }\n />\n <DropdownMenu.Content align=\"end\">{children}</DropdownMenu.Content>\n </DropdownMenu>\n );\n}\n","import {\n AlertCircleIcon,\n BracesIcon,\n Clock3Icon,\n PanelRightIcon,\n PlayIcon,\n RotateCcwIcon,\n ShieldAlertIcon,\n StepForwardIcon,\n} from 'lucide-react';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu';\n\nconst actions = {\n nested: { icon: PanelRightIcon, label: 'View nested graph', activeLabel: 'Hide nested graph' },\n map: { icon: BracesIcon, label: 'Map config', activeLabel: 'Hide map config' },\n timeTravel: { icon: Clock3Icon, label: 'Time travel' },\n runStep: { icon: PlayIcon, label: 'Run step' },\n continueRun: { icon: StepForwardIcon, label: 'Continue run' },\n resumeData: { icon: RotateCcwIcon, label: 'Resume data' },\n error: { icon: AlertCircleIcon, label: 'Error' },\n tripwire: { icon: ShieldAlertIcon, label: 'Tripwire' },\n};\n\nexport interface WorkflowStepActionProps {\n action: keyof typeof actions;\n isActive?: boolean;\n onSelect: () => void;\n}\n\nexport function WorkflowStepAction({ action, isActive, onSelect }: WorkflowStepActionProps) {\n const definition = actions[action];\n const ActionIcon = definition.icon;\n const label = isActive && 'activeLabel' in definition ? definition.activeLabel : definition.label;\n return (\n <DropdownMenu.Item onSelect={onSelect} className={action === 'tripwire' ? 'text-warning-foreground' : undefined}>\n <ActionIcon />\n <span>{label}</span>\n </DropdownMenu.Item>\n );\n}\n"],"mappings":"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"}
|
|
@@ -13,7 +13,7 @@ const require_components_Collapsible = require("./components/Collapsible.cjs.js"
|
|
|
13
13
|
const require_components_DisclosureChevron = require("./components/DisclosureChevron.cjs.js");
|
|
14
14
|
const require_Metadata = require("./Metadata-5GJlO4GU.cjs");
|
|
15
15
|
const require_components_Shimmer = require("./components/Shimmer.cjs.js");
|
|
16
|
-
const require_CodeEditor = require("./CodeEditor-
|
|
16
|
+
const require_CodeEditor = require("./CodeEditor-zMSUzPdX.cjs");
|
|
17
17
|
const require_Button = require("./Button-BfICfyxD.cjs");
|
|
18
18
|
const require_Dialog = require("./Dialog-Duy3M1ny.cjs");
|
|
19
19
|
const require_components_Slider = require("./components/Slider.cjs.js");
|
|
@@ -1464,4 +1464,4 @@ Object.defineProperty(exports, "workflowFitOptions", {
|
|
|
1464
1464
|
}
|
|
1465
1465
|
});
|
|
1466
1466
|
|
|
1467
|
-
//# sourceMappingURL=Workflow-
|
|
1467
|
+
//# sourceMappingURL=Workflow-CwIjxwC6.cjs.map
|