@mastra/playground-ui 63.1.0-alpha.2 → 63.1.0-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{code-Dcah35Gp.cjs → code-DJReJPSX.cjs} +3 -2
- package/dist/code-DJReJPSX.cjs.map +1 -0
- package/dist/{code-DAXWNzvf.js → code-DLuATvYu.js} +3 -2
- package/dist/code-DLuATvYu.js.map +1 -0
- package/dist/{code-block-BzUcNWrb.js → code-block-BQV4o92x.js} +2 -2
- package/dist/{code-block-BzUcNWrb.js.map → code-block-BQV4o92x.js.map} +1 -1
- package/dist/{code-block-CKLCdWtP.cjs → code-block-DZb0Tb3k.cjs} +2 -2
- package/dist/{code-block-CKLCdWtP.cjs.map → code-block-DZb0Tb3k.cjs.map} +1 -1
- package/dist/components/Code.cjs.js +1 -1
- package/dist/components/Code.es.js +1 -1
- package/dist/components/CodeBlock.cjs.js +1 -1
- package/dist/components/CodeBlock.es.js +1 -1
- package/dist/components/ContentBlocks.cjs.js +6 -2
- package/dist/components/ContentBlocks.cjs.js.map +1 -1
- package/dist/components/ContentBlocks.es.js +6 -2
- package/dist/components/ContentBlocks.es.js.map +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 +3 -3
- package/dist/components/DataList.es.js +4 -4
- package/dist/components/DataPanel.cjs.js +1 -1
- package/dist/components/DataPanel.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 -1
- package/dist/components/FilterBar.cjs.js.map +1 -1
- package/dist/components/FilterBar.es.js +4 -2
- package/dist/components/FilterBar.es.js.map +1 -1
- package/dist/components/LogsDataList.cjs.js +3 -3
- package/dist/components/LogsDataList.es.js +3 -3
- package/dist/components/MarkdownRenderer.cjs.js +1 -1
- package/dist/components/MarkdownRenderer.es.js +1 -1
- package/dist/components/SavedViews.cjs.js +1 -1
- package/dist/components/SavedViews.es.js +1 -1
- package/dist/components/Sidebar.cjs.js +33 -0
- package/dist/components/Sidebar.cjs.js.map +1 -1
- package/dist/components/Sidebar.es.js +33 -1
- package/dist/components/Sidebar.es.js.map +1 -1
- package/dist/components/Workflow.cjs.js +1 -1
- package/dist/components/Workflow.es.js +1 -1
- package/dist/components/ai/activity.cjs.js +1 -1
- package/dist/components/ai/activity.es.js +1 -1
- package/dist/components/ai/plan.cjs.js +1 -1
- package/dist/components/ai/plan.es.js +1 -1
- package/dist/components/ai/tool-approval.cjs.js +1 -1
- package/dist/components/ai/tool-approval.es.js +1 -1
- package/dist/components/ai/tool-call.cjs.js +1 -1
- package/dist/components/ai/tool-call.es.js +1 -1
- package/dist/{data-code-section-BB2RWius.cjs → data-code-section-DCuBY9Mf.cjs} +2 -2
- package/dist/{data-code-section-BB2RWius.cjs.map → data-code-section-DCuBY9Mf.cjs.map} +1 -1
- package/dist/{data-code-section-DsU-ubVW.js → data-code-section-DOSV2o6P.js} +2 -2
- package/dist/{data-code-section-DsU-ubVW.js.map → data-code-section-DOSV2o6P.js.map} +1 -1
- package/dist/{data-list-BbOYiz4B.js → data-list-B4Ho_OCZ.js} +5 -2
- package/dist/data-list-B4Ho_OCZ.js.map +1 -0
- package/dist/{data-list-2svaWtkq.cjs → data-list-CYpGCm6F.cjs} +5 -2
- package/dist/data-list-CYpGCm6F.cjs.map +1 -0
- package/dist/{data-list-skeleton-C9Zm5XMX.js → data-list-skeleton-AfVi5OHw.js} +2 -2
- package/dist/{data-list-skeleton-C9Zm5XMX.js.map → data-list-skeleton-AfVi5OHw.js.map} +1 -1
- package/dist/{data-list-skeleton-C-j6Sf0F.cjs → data-list-skeleton-CIfVTfq4.cjs} +2 -2
- package/dist/{data-list-skeleton-C-j6Sf0F.cjs.map → data-list-skeleton-CIfVTfq4.cjs.map} +1 -1
- package/dist/{data-panel-CwIdwpov.js → data-panel-C8sHDwrx.js} +2 -2
- package/dist/{data-panel-CwIdwpov.js.map → data-panel-C8sHDwrx.js.map} +1 -1
- package/dist/{data-panel-CtFwwsPs.cjs → data-panel-DIVqWg0V.cjs} +2 -2
- package/dist/{data-panel-CtFwwsPs.cjs.map → data-panel-DIVqWg0V.cjs.map} +1 -1
- package/dist/{date-time-range-picker-BT9qan60.js → date-time-range-picker-B9me2TUa.js} +21 -4
- package/dist/date-time-range-picker-B9me2TUa.js.map +1 -0
- package/dist/{date-time-range-picker-DQa5XLST.cjs → date-time-range-picker-CyoaOAsi.cjs} +21 -4
- package/dist/date-time-range-picker-CyoaOAsi.cjs.map +1 -0
- package/dist/domains/chat/messages/renderers/message-text.cjs.js +1 -1
- package/dist/domains/chat/messages/renderers/message-text.es.js +1 -1
- package/dist/domains/chat/messages/renderers/reasoning-part-renderer.cjs.js +1 -1
- package/dist/domains/chat/messages/renderers/reasoning-part-renderer.es.js +1 -1
- package/dist/domains/chat/messages/skill-message.cjs.js +1 -1
- package/dist/domains/chat/messages/skill-message.es.js +1 -1
- package/dist/domains/chat/messages/tripwire-notice.cjs.js +1 -1
- package/dist/domains/chat/messages/tripwire-notice.es.js +1 -1
- package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js +2 -2
- package/dist/domains/chat/tools/badges/code-mode-badge.es.js +2 -2
- package/dist/domains/chat/tools/badges/file-tree-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/file-tree-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/observation-marker-details.cjs.js +2 -2
- package/dist/domains/chat/tools/badges/observation-marker-details.es.js +2 -2
- package/dist/domains/chat/tools/badges/observation-renderer.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/observation-renderer.es.js +1 -1
- package/dist/domains/chat/tools/badges/tool-approval-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/tool-approval-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/submit-plan-tool.cjs.js +1 -1
- package/dist/domains/chat/tools/submit-plan-tool.es.js +1 -1
- 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-list-view.cjs.js +3 -3
- package/dist/domains/logs/components/logs-list-view.es.js +3 -3
- 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/drilldown.cjs.js +1 -1
- package/dist/domains/metrics/drilldown.es.js +1 -1
- package/dist/domains/metrics/metrics-filters.cjs.js +1 -1
- package/dist/domains/metrics/metrics-filters.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/trace-scores-tab.cjs.js +1 -1
- package/dist/domains/scores/components/trace-scores-tab.es.js +1 -1
- package/dist/domains/traces/components/span-data-panel-view.cjs.js +2 -2
- package/dist/domains/traces/components/span-data-panel-view.es.js +2 -2
- 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-error-renderer.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +2 -2
- package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +2 -2
- 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-payload/span-payload-messages.cjs.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-processor.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-processor-attributes.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-processor-attributes.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/thread-view-by-trace.cjs.js +2 -2
- package/dist/domains/traces/components/thread-view-by-trace.cjs.js.map +1 -1
- package/dist/domains/traces/components/thread-view-by-trace.es.js +2 -2
- package/dist/domains/traces/components/thread-view-by-trace.es.js.map +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-data-panel.cjs.js +1 -1
- package/dist/domains/traces/components/trace-data-panel.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/trace-time-range-chip.cjs.js +3 -3
- package/dist/domains/traces/components/trace-time-range-chip.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-time-range-chip.es.js +3 -3
- package/dist/domains/traces/components/trace-time-range-chip.es.js.map +1 -1
- package/dist/domains/traces/components/traces-error-content.cjs.js +1 -1
- package/dist/domains/traces/components/traces-error-content.es.js +1 -1
- package/dist/domains/traces/components/traces-list-view.cjs.js +3 -3
- package/dist/domains/traces/components/traces-list-view.es.js +3 -3
- package/dist/domains/traces/components/traces-page-skeleton.cjs.js +2 -2
- package/dist/domains/traces/components/traces-page-skeleton.es.js +2 -2
- package/dist/domains/traces/hooks/use-trace-filter-persistence.cjs.js +1 -1
- package/dist/domains/traces/hooks/use-trace-filter-persistence.es.js +1 -1
- package/dist/domains/traces/hooks/use-trace-url-state.cjs.js +1 -1
- package/dist/domains/traces/hooks/use-trace-url-state.es.js +1 -1
- package/dist/domains/traces/hooks/use-traces-list-source.cjs.js +15 -3
- package/dist/domains/traces/hooks/use-traces-list-source.cjs.js.map +1 -1
- package/dist/domains/traces/hooks/use-traces-list-source.es.js +13 -4
- package/dist/domains/traces/hooks/use-traces-list-source.es.js.map +1 -1
- package/dist/domains/traces/trace-filters.cjs.js +1 -1
- package/dist/domains/traces/trace-filters.es.js +1 -1
- package/dist/domains/traces/trace-query-filters.cjs.js +1 -3
- package/dist/domains/traces/trace-query-filters.cjs.js.map +1 -1
- package/dist/domains/traces/trace-query-filters.es.js +1 -1
- package/dist/domains/traces.cjs.js +1 -3
- package/dist/domains/traces.cjs.js.map +1 -1
- package/dist/domains/traces.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/components/workflows-list/workflows-list.cjs.js +2 -2
- package/dist/domains/workflows/components/workflows-list/workflows-list.es.js +2 -2
- package/dist/domains/workflows/workflow/use-workflow-graph-runtime.cjs.js +2 -2
- package/dist/domains/workflows/workflow/use-workflow-graph-runtime.es.js +2 -2
- 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-graph-boundary.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-graph-boundary.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-node.cjs.js +2 -2
- package/dist/domains/workflows/workflow/workflow-graph-node.es.js +2 -2
- package/dist/domains/workflows/workflow/workflow-nested-graph.cjs.js +2 -2
- package/dist/domains/workflows/workflow/workflow-nested-graph.es.js +2 -2
- package/dist/domains/workspace/components/workspace-active-file.cjs.js +1 -1
- package/dist/domains/workspace/components/workspace-active-file.es.js +1 -1
- package/dist/domains/workspace/components/workspace-add-skill-dialog.cjs.js +1 -1
- package/dist/domains/workspace/components/workspace-add-skill-dialog.es.js +1 -1
- package/dist/domains/workspace/components/workspace-markdown-preview.cjs.js +2 -2
- package/dist/domains/workspace/components/workspace-markdown-preview.es.js +2 -2
- package/dist/ee/signals/components/entity-index-list.cjs.js +1 -1
- package/dist/ee/signals/components/entity-index-list.es.js +1 -1
- package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +2 -2
- package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +2 -2
- package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +1 -1
- package/dist/ee/topics/components/topic-trace-summary-list.es.js +1 -1
- package/dist/{errors-BiY55qIh.cjs → errors-7WFF-9EC.cjs} +3 -2
- package/dist/errors-7WFF-9EC.cjs.map +1 -0
- package/dist/{errors-CDTokuME.js → errors-BFVXW8Dr.js} +3 -2
- package/dist/errors-BFVXW8Dr.js.map +1 -0
- package/dist/{filter-bar-chip-BBErw_aR.cjs → filter-bar-chip-CYCOeX1B.cjs} +8 -4
- package/dist/filter-bar-chip-CYCOeX1B.cjs.map +1 -0
- package/dist/{filter-bar-chip-DvRTWRwT.js → filter-bar-chip-U55TxGOw.js} +8 -4
- package/dist/filter-bar-chip-U55TxGOw.js.map +1 -0
- package/dist/hooks/use-local-storage-store.cjs.js +71 -0
- package/dist/hooks/use-local-storage-store.cjs.js.map +1 -0
- package/dist/hooks/use-local-storage-store.d.ts +2 -0
- package/dist/hooks/use-local-storage-store.es.js +66 -0
- package/dist/hooks/use-local-storage-store.es.js.map +1 -0
- package/dist/layout/tabbed-container.cjs.js +1 -1
- package/dist/layout/tabbed-container.es.js +1 -1
- package/dist/{logs-data-list-D4sVbF23.cjs → logs-data-list-Bh_wPam2.cjs} +2 -2
- package/dist/{logs-data-list-D4sVbF23.cjs.map → logs-data-list-Bh_wPam2.cjs.map} +1 -1
- package/dist/{logs-data-list-0_z4s0Sj.js → logs-data-list-CZ2TvWyb.js} +2 -2
- package/dist/{logs-data-list-0_z4s0Sj.js.map → logs-data-list-CZ2TvWyb.js.map} +1 -1
- package/dist/{markdown-renderer-WesDzhMr.js → markdown-renderer-B55LVMsv.js} +2 -2
- package/dist/{markdown-renderer-WesDzhMr.js.map → markdown-renderer-B55LVMsv.js.map} +1 -1
- package/dist/{markdown-renderer-BRu3RpQD.cjs → markdown-renderer-B8Zmudqn.cjs} +2 -2
- package/dist/{markdown-renderer-BRu3RpQD.cjs.map → markdown-renderer-B8Zmudqn.cjs.map} +1 -1
- package/dist/{plan-ColU7p3H.cjs → plan-BxKWT5Jc.cjs} +2 -2
- package/dist/{plan-ColU7p3H.cjs.map → plan-BxKWT5Jc.cjs.map} +1 -1
- package/dist/{plan-CBiLa54G.js → plan-CoeSire7.js} +2 -2
- package/dist/{plan-CBiLa54G.js.map → plan-CoeSire7.js.map} +1 -1
- package/dist/{reasoning-activity-DLrXgE9k.js → reasoning-activity-C6KlS9dD.js} +2 -2
- package/dist/{reasoning-activity-DLrXgE9k.js.map → reasoning-activity-C6KlS9dD.js.map} +1 -1
- package/dist/{reasoning-activity-B8bR8ib_.cjs → reasoning-activity-DwvH_xWp.cjs} +2 -2
- package/dist/{reasoning-activity-B8bR8ib_.cjs.map → reasoning-activity-DwvH_xWp.cjs.map} +1 -1
- package/dist/{span-payload-primitives-DBNNkmHo.js → span-payload-primitives-DPAyz0rW.js} +2 -2
- package/dist/{span-payload-primitives-DBNNkmHo.js.map → span-payload-primitives-DPAyz0rW.js.map} +1 -1
- package/dist/{span-payload-primitives-BymKsUAo.cjs → span-payload-primitives-nXrFCYgn.cjs} +2 -2
- package/dist/{span-payload-primitives-BymKsUAo.cjs.map → span-payload-primitives-nXrFCYgn.cjs.map} +1 -1
- package/dist/src/domains/traces/components/trace-time-range-chip.d.ts +1 -1
- package/dist/src/domains/traces/hooks/use-traces-list-source.d.ts +6 -0
- package/dist/src/domains/traces/trace-query-filters.d.ts +0 -11
- package/dist/src/ds/components/ContentBlocks/content-blocks.d.ts +3 -2
- package/dist/src/ds/components/DataList/shared.d.ts +4 -4
- package/dist/src/ds/components/DateTimeRangePicker/custom-range-editor.d.ts +3 -1
- package/dist/src/ds/components/DateTimeRangePicker/date-time-range-picker.d.ts +3 -1
- package/dist/src/ds/components/FilterBar/filter-bar-context.d.ts +11 -1
- package/dist/src/ds/components/FilterBar/filter-bar.d.ts +6 -1
- package/dist/src/ds/components/Sidebar/index.d.ts +1 -0
- package/dist/src/ds/components/Sidebar/nav/sidebar-nav-show-more.d.ts +9 -0
- package/dist/src/ds/components/Sidebar/sidebar.d.ts +2 -0
- package/dist/src/hooks/use-local-storage-store.d.ts +15 -0
- package/dist/style.css +20 -0
- package/dist/{tool-approval-BK2j7aj_.js → tool-approval-CYmQJ2i4.js} +2 -2
- package/dist/{tool-approval-BK2j7aj_.js.map → tool-approval-CYmQJ2i4.js.map} +1 -1
- package/dist/{tool-approval-Bza_sgxa.cjs → tool-approval-aWNKG9dK.cjs} +2 -2
- package/dist/{tool-approval-Bza_sgxa.cjs.map → tool-approval-aWNKG9dK.cjs.map} +1 -1
- package/dist/{tool-call-arguments-BLCAiFYg.js → tool-call-arguments-Bk13pV6A.js} +3 -3
- package/dist/{tool-call-arguments-BLCAiFYg.js.map → tool-call-arguments-Bk13pV6A.js.map} +1 -1
- package/dist/{tool-call-arguments-CK3kQ_FX.cjs → tool-call-arguments-DTwVq7AB.cjs} +3 -3
- package/dist/{tool-call-arguments-CK3kQ_FX.cjs.map → tool-call-arguments-DTwVq7AB.cjs.map} +1 -1
- package/dist/{trace-filters-C71gmCq4.js → trace-filters-C91h9X86.js} +2 -10
- package/dist/trace-filters-C91h9X86.js.map +1 -0
- package/dist/{trace-filters-Bh4dVNPX.cjs → trace-filters-Dz4oj8yV.cjs} +1 -11
- package/dist/trace-filters-Dz4oj8yV.cjs.map +1 -0
- package/dist/{traces-data-list-C05UwTiE.js → traces-data-list-BXotATNk.js} +2 -2
- package/dist/{traces-data-list-C05UwTiE.js.map → traces-data-list-BXotATNk.js.map} +1 -1
- package/dist/{traces-data-list-DPA5T14k.cjs → traces-data-list-D6pq_WLy.cjs} +2 -2
- package/dist/{traces-data-list-DPA5T14k.cjs.map → traces-data-list-D6pq_WLy.cjs.map} +1 -1
- package/dist/{use-workflow-graph-runtime-DX56livO.js → use-workflow-graph-runtime-S5G_ZvSM.js} +2 -2
- package/dist/{use-workflow-graph-runtime-DX56livO.js.map → use-workflow-graph-runtime-S5G_ZvSM.js.map} +1 -1
- package/dist/{use-workflow-graph-runtime-C8TkqjvM.cjs → use-workflow-graph-runtime-UxUOrRDb.cjs} +2 -2
- package/dist/{use-workflow-graph-runtime-C8TkqjvM.cjs.map → use-workflow-graph-runtime-UxUOrRDb.cjs.map} +1 -1
- package/dist/utils/errors.cjs.js +1 -1
- package/dist/utils/errors.es.js +1 -1
- package/dist/{workflow-condition-card-bn5mrwKe.cjs → workflow-condition-card-CHV32SJm.cjs} +2 -2
- package/dist/{workflow-condition-card-bn5mrwKe.cjs.map → workflow-condition-card-CHV32SJm.cjs.map} +1 -1
- package/dist/{workflow-condition-card-DMkPh5TM.js → workflow-condition-card-DNsQmIae.js} +2 -2
- package/dist/{workflow-condition-card-DMkPh5TM.js.map → workflow-condition-card-DNsQmIae.js.map} +1 -1
- package/package.json +8 -8
- package/dist/code-DAXWNzvf.js.map +0 -1
- package/dist/code-Dcah35Gp.cjs.map +0 -1
- package/dist/data-list-2svaWtkq.cjs.map +0 -1
- package/dist/data-list-BbOYiz4B.js.map +0 -1
- package/dist/date-time-range-picker-BT9qan60.js.map +0 -1
- package/dist/date-time-range-picker-DQa5XLST.cjs.map +0 -1
- package/dist/errors-BiY55qIh.cjs.map +0 -1
- package/dist/errors-CDTokuME.js.map +0 -1
- package/dist/filter-bar-chip-BBErw_aR.cjs.map +0 -1
- package/dist/filter-bar-chip-DvRTWRwT.js.map +0 -1
- package/dist/trace-filters-Bh4dVNPX.cjs.map +0 -1
- package/dist/trace-filters-C71gmCq4.js.map +0 -1
package/dist/{workflow-condition-card-DMkPh5TM.js.map → workflow-condition-card-DNsQmIae.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-condition-card-DMkPh5TM.js","sources":["../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/graph/workflow-boundary-node.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/cards/condition/workflow-condition-card.tsx"],"sourcesContent":["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\" size=\"sm\" 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 { 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 {capabilities.join(' · ')}\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 { 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","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 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"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"workflow-condition-card-DNsQmIae.js","sources":["../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/graph/workflow-boundary-node.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/cards/condition/workflow-condition-card.tsx"],"sourcesContent":["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\" size=\"sm\" 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 { 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 {capabilities.join(' · ')}\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 { 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","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 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"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mastra/playground-ui",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "63.1.0-alpha.
|
|
4
|
+
"version": "63.1.0-alpha.4",
|
|
5
5
|
"description": "Mastra Playground components",
|
|
6
6
|
"sideEffects": [
|
|
7
7
|
"**/*.css"
|
|
@@ -203,8 +203,8 @@
|
|
|
203
203
|
"react-dom": ">=19.0.0",
|
|
204
204
|
"tailwindcss": "^4.0.0",
|
|
205
205
|
"@mastra/ai-sdk": "^1.11.1",
|
|
206
|
-
"@mastra/
|
|
207
|
-
"@mastra/
|
|
206
|
+
"@mastra/client-js": "^1.54.1-alpha.4",
|
|
207
|
+
"@mastra/react": "1.10.1-alpha.4"
|
|
208
208
|
},
|
|
209
209
|
"devDependencies": {
|
|
210
210
|
"@modelcontextprotocol/sdk": "^1.32.1",
|
|
@@ -250,12 +250,12 @@
|
|
|
250
250
|
"vite-plugin-lib-inject-css": "^2.2.2",
|
|
251
251
|
"vitest": "4.1.11",
|
|
252
252
|
"@internal/lint": "0.0.143",
|
|
253
|
-
"@mastra/client-js": "^1.54.1-alpha.2",
|
|
254
253
|
"@mastra/ai-sdk": "1.11.1",
|
|
255
|
-
"@mastra/
|
|
256
|
-
"@mastra/
|
|
257
|
-
"@mastra/
|
|
258
|
-
"@mastra/react": "1.10.1-alpha.
|
|
254
|
+
"@mastra/core": "1.78.0-alpha.4",
|
|
255
|
+
"@mastra/memory": "1.38.0-alpha.0",
|
|
256
|
+
"@mastra/client-js": "^1.54.1-alpha.4",
|
|
257
|
+
"@mastra/react": "1.10.1-alpha.4",
|
|
258
|
+
"@mastra/schema-compat": "1.3.15-alpha.0"
|
|
259
259
|
},
|
|
260
260
|
"homepage": "https://mastra.ai",
|
|
261
261
|
"repository": {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"code-DAXWNzvf.js","sources":["../src/ds/components/Code/use-highlight.ts","../src/ds/components/Code/code.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport type { CSSProperties } from 'react';\nimport type { ThemedToken } from 'shiki/core';\nimport { useDebounce } from 'use-debounce';\n\nimport { highlight } from '../CodeEditor/highlight';\n\nexport interface Highlighted {\n code: string;\n lang: string;\n tokens: ThemedToken[][];\n}\n\nconst HIGHLIGHT_SAMPLE_INTERVAL_MS = 75;\n\n/** Tokens land a pass behind the code, so the value may still describe the previous code. */\nexport function useHighlight(code: string, lang: string | undefined): Highlighted | null {\n const [highlighted, setHighlighted] = useState<Highlighted | null>(null);\n // maxWait equal to the delay turns the debounce into a throttle.\n const [sampledCode] = useDebounce(code, HIGHLIGHT_SAMPLE_INTERVAL_MS, {\n leading: true,\n maxWait: HIGHLIGHT_SAMPLE_INTERVAL_MS,\n });\n\n useEffect(() => {\n if (!lang) return;\n\n let cancelled = false;\n\n void highlight(sampledCode, lang)\n .then(tokens => {\n if (!cancelled && tokens?.length) setHighlighted({ code: sampledCode, lang, tokens });\n })\n .catch(() => {});\n\n return () => {\n cancelled = true;\n };\n }, [sampledCode, lang]);\n\n return lang ? highlighted : null;\n}\n\nexport function tokenStyle(token: ThemedToken): CSSProperties | undefined {\n if (token.htmlStyle && typeof token.htmlStyle === 'object') {\n return token.htmlStyle as CSSProperties;\n }\n\n return token.color ? { color: token.color } : undefined;\n}\n","import * as React from 'react';\n\nimport { tokenStyle, useHighlight } from './use-highlight';\nimport type { Highlighted } from './use-highlight';\n\nexport interface CodeProps extends React.HTMLAttributes<HTMLPreElement> {\n code: string;\n lang?: string;\n /** Per-line class, e.g. for diff or search highlighting. When set, every line is wrapped in a `[data-line]` span. */\n lineClassName?: (lineIndex: number, lineText: string) => string | undefined;\n}\n\n/** Colors from an earlier pass still hold when the new code only appends to the old. */\nfunction usableHighlight(highlighted: Highlighted | null, code: string, lang?: string): Highlighted | null {\n if (!highlighted || highlighted.lang !== lang) return null;\n return code.startsWith(highlighted.code) ? highlighted : null;\n}\n\n/**\n * Low-level shiki token renderer shared by `CodeBlock` and `MarkdownRenderer`.\n * Dual-theme colors stay as `--shiki-light` / `--shiki-dark` CSS variables on\n * each token span; the `.shiki-token` class (index.css) picks the variant from\n * the `.dark` root class, so theme switching is pure CSS — no ThemeProvider\n * required. Renders plain text while highlighting is pending or when the\n * language is missing/unknown.\n *\n * A streaming fence re-renders on every delta while highlighting stays a sample\n * behind. Dropping the previous tokens each time would strobe the whole block\n * between colored and plain, so the settled prefix keeps its colors and only\n * the newly arrived tail waits, uncolored, for the next pass.\n */\nexport const Code = React.memo(function Code({ code, lang, lineClassName, ...props }: CodeProps) {\n const highlighted = useHighlight(code, lang);\n\n const usable = usableHighlight(highlighted, code, lang);\n if (!usable) {\n if (!lineClassName) return <pre {...props}>{code}</pre>;\n const lines = code.split('\\n');\n return (\n <pre {...props}>\n {lines.map((text, i) => (\n <React.Fragment key={i}>\n <span data-line={i} className={lineClassName(i, text)}>\n {text}\n </span>\n {i !== lines.length - 1 && '\\n'}\n </React.Fragment>\n ))}\n </pre>\n );\n }\n\n const tail = code.slice(usable.code.length);\n let codeOffset = 0;\n\n return (\n <pre {...props}>\n <code className=\"font-[inherit]\">\n {usable.tokens.map((line, lineIndex) => {\n const lineOffset = codeOffset;\n let tokenOffset = lineOffset;\n const tokenSpans = line.map(token => {\n const key = tokenOffset;\n tokenOffset += token.content.length;\n\n return (\n <span key={key} className=\"shiki-token\" style={tokenStyle(token)}>\n {token.content}\n </span>\n );\n });\n\n codeOffset = tokenOffset + 1;\n\n return (\n <React.Fragment key={lineOffset}>\n {lineClassName ? (\n <span\n data-line={lineIndex}\n className={lineClassName(lineIndex, line.map(token => token.content).join(''))}\n >\n {tokenSpans}\n </span>\n ) : (\n <span>{tokenSpans}</span>\n )}\n {lineIndex !== usable.tokens.length - 1 && '\\n'}\n </React.Fragment>\n );\n })}\n {tail}\n </code>\n </pre>\n );\n});\n"],"names":["Code"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"code-Dcah35Gp.cjs","sources":["../src/ds/components/Code/use-highlight.ts","../src/ds/components/Code/code.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport type { CSSProperties } from 'react';\nimport type { ThemedToken } from 'shiki/core';\nimport { useDebounce } from 'use-debounce';\n\nimport { highlight } from '../CodeEditor/highlight';\n\nexport interface Highlighted {\n code: string;\n lang: string;\n tokens: ThemedToken[][];\n}\n\nconst HIGHLIGHT_SAMPLE_INTERVAL_MS = 75;\n\n/** Tokens land a pass behind the code, so the value may still describe the previous code. */\nexport function useHighlight(code: string, lang: string | undefined): Highlighted | null {\n const [highlighted, setHighlighted] = useState<Highlighted | null>(null);\n // maxWait equal to the delay turns the debounce into a throttle.\n const [sampledCode] = useDebounce(code, HIGHLIGHT_SAMPLE_INTERVAL_MS, {\n leading: true,\n maxWait: HIGHLIGHT_SAMPLE_INTERVAL_MS,\n });\n\n useEffect(() => {\n if (!lang) return;\n\n let cancelled = false;\n\n void highlight(sampledCode, lang)\n .then(tokens => {\n if (!cancelled && tokens?.length) setHighlighted({ code: sampledCode, lang, tokens });\n })\n .catch(() => {});\n\n return () => {\n cancelled = true;\n };\n }, [sampledCode, lang]);\n\n return lang ? highlighted : null;\n}\n\nexport function tokenStyle(token: ThemedToken): CSSProperties | undefined {\n if (token.htmlStyle && typeof token.htmlStyle === 'object') {\n return token.htmlStyle as CSSProperties;\n }\n\n return token.color ? { color: token.color } : undefined;\n}\n","import * as React from 'react';\n\nimport { tokenStyle, useHighlight } from './use-highlight';\nimport type { Highlighted } from './use-highlight';\n\nexport interface CodeProps extends React.HTMLAttributes<HTMLPreElement> {\n code: string;\n lang?: string;\n /** Per-line class, e.g. for diff or search highlighting. When set, every line is wrapped in a `[data-line]` span. */\n lineClassName?: (lineIndex: number, lineText: string) => string | undefined;\n}\n\n/** Colors from an earlier pass still hold when the new code only appends to the old. */\nfunction usableHighlight(highlighted: Highlighted | null, code: string, lang?: string): Highlighted | null {\n if (!highlighted || highlighted.lang !== lang) return null;\n return code.startsWith(highlighted.code) ? highlighted : null;\n}\n\n/**\n * Low-level shiki token renderer shared by `CodeBlock` and `MarkdownRenderer`.\n * Dual-theme colors stay as `--shiki-light` / `--shiki-dark` CSS variables on\n * each token span; the `.shiki-token` class (index.css) picks the variant from\n * the `.dark` root class, so theme switching is pure CSS — no ThemeProvider\n * required. Renders plain text while highlighting is pending or when the\n * language is missing/unknown.\n *\n * A streaming fence re-renders on every delta while highlighting stays a sample\n * behind. Dropping the previous tokens each time would strobe the whole block\n * between colored and plain, so the settled prefix keeps its colors and only\n * the newly arrived tail waits, uncolored, for the next pass.\n */\nexport const Code = React.memo(function Code({ code, lang, lineClassName, ...props }: CodeProps) {\n const highlighted = useHighlight(code, lang);\n\n const usable = usableHighlight(highlighted, code, lang);\n if (!usable) {\n if (!lineClassName) return <pre {...props}>{code}</pre>;\n const lines = code.split('\\n');\n return (\n <pre {...props}>\n {lines.map((text, i) => (\n <React.Fragment key={i}>\n <span data-line={i} className={lineClassName(i, text)}>\n {text}\n </span>\n {i !== lines.length - 1 && '\\n'}\n </React.Fragment>\n ))}\n </pre>\n );\n }\n\n const tail = code.slice(usable.code.length);\n let codeOffset = 0;\n\n return (\n <pre {...props}>\n <code className=\"font-[inherit]\">\n {usable.tokens.map((line, lineIndex) => {\n const lineOffset = codeOffset;\n let tokenOffset = lineOffset;\n const tokenSpans = line.map(token => {\n const key = tokenOffset;\n tokenOffset += token.content.length;\n\n return (\n <span key={key} className=\"shiki-token\" style={tokenStyle(token)}>\n {token.content}\n </span>\n );\n });\n\n codeOffset = tokenOffset + 1;\n\n return (\n <React.Fragment key={lineOffset}>\n {lineClassName ? (\n <span\n data-line={lineIndex}\n className={lineClassName(lineIndex, line.map(token => token.content).join(''))}\n >\n {tokenSpans}\n </span>\n ) : (\n <span>{tokenSpans}</span>\n )}\n {lineIndex !== usable.tokens.length - 1 && '\\n'}\n </React.Fragment>\n );\n })}\n {tail}\n </code>\n </pre>\n );\n});\n"],"names":["useState","useDebounce","useEffect","highlight","React","Code","jsx","jsxs"],"mappings":"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"}
|