@mastra/playground-ui 60.0.0 → 60.1.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -6
- package/dist/{Badge-H8K5WrXg.cjs → Badge-D3EctKQo.cjs} +16 -8
- package/dist/Badge-D3EctKQo.cjs.map +1 -0
- package/dist/{Badge-Q_pCeeGW.js → Badge-DmOqFpXW.js} +16 -8
- package/dist/Badge-DmOqFpXW.js.map +1 -0
- package/dist/{Button-BnmR2HRc.cjs → Button-CXhSUBxN.cjs} +3 -3
- package/dist/Button-CXhSUBxN.cjs.map +1 -0
- package/dist/{Button-C6eUqcPI.js → Button-D43ghVKt.js} +3 -3
- package/dist/Button-D43ghVKt.js.map +1 -0
- package/dist/{EmptyState-CJ5KC4Db.cjs → EmptyState-CuoMGNP0.cjs} +2 -2
- package/dist/EmptyState-CuoMGNP0.cjs.map +1 -0
- package/dist/{EmptyState-CynkaZd1.js → EmptyState-DyyUFpzY.js} +2 -2
- package/dist/EmptyState-DyyUFpzY.js.map +1 -0
- package/dist/{ErrorBoundary-Bb2R5IMR.js → ErrorBoundary-BvwJY6s9.js} +2 -2
- package/dist/{ErrorBoundary-Bb2R5IMR.js.map → ErrorBoundary-BvwJY6s9.js.map} +1 -1
- package/dist/{ErrorBoundary-CKrwONAU.cjs → ErrorBoundary-D7eIMbMr.cjs} +2 -2
- package/dist/{ErrorBoundary-CKrwONAU.cjs.map → ErrorBoundary-D7eIMbMr.cjs.map} +1 -1
- package/dist/{Notice-Ce3r5x-7.js → Notice-B8RIClJD.js} +2 -2
- package/dist/{Notice-Ce3r5x-7.js.map → Notice-B8RIClJD.js.map} +1 -1
- package/dist/{Notice-CEBwitdf.cjs → Notice-C4Tgmtgb.cjs} +2 -2
- package/dist/{Notice-CEBwitdf.cjs.map → Notice-C4Tgmtgb.cjs.map} +1 -1
- package/dist/{activity-Duth8KP_.js → activity-BoXbE4Kz.js} +3 -3
- package/dist/activity-BoXbE4Kz.js.map +1 -0
- package/dist/{activity-8egTNbaI.cjs → activity-CbQG59Oc.cjs} +3 -3
- package/dist/activity-CbQG59Oc.cjs.map +1 -0
- package/dist/{alert-dialog-D1UYVW__.js → alert-dialog-CzRo39mH.js} +3 -3
- package/dist/{alert-dialog-D1UYVW__.js.map → alert-dialog-CzRo39mH.js.map} +1 -1
- package/dist/{alert-dialog-BcOSIOSW.cjs → alert-dialog-DC-Fapxf.cjs} +3 -3
- package/dist/{alert-dialog-BcOSIOSW.cjs.map → alert-dialog-DC-Fapxf.cjs.map} +1 -1
- package/dist/{ask-user-DJXmLJzy.cjs → ask-user-CXu4b7Jw.cjs} +4 -4
- package/dist/ask-user-CXu4b7Jw.cjs.map +1 -0
- package/dist/{ask-user-Crg1O-o6.js → ask-user-Dlz2346n.js} +4 -4
- package/dist/ask-user-Dlz2346n.js.map +1 -0
- package/dist/buttons-group-CoZP3lJt.cjs.map +1 -1
- package/dist/buttons-group-DsZgrZBZ.js.map +1 -1
- package/dist/{code-block-C7A4Hv96.cjs → code-block-BzoMjjtf.cjs} +5 -5
- package/dist/{code-block-C7A4Hv96.cjs.map → code-block-BzoMjjtf.cjs.map} +1 -1
- package/dist/{code-block-C_pvalBv.js → code-block-DY5KsTGY.js} +5 -5
- package/dist/{code-block-C_pvalBv.js.map → code-block-DY5KsTGY.js.map} +1 -1
- package/dist/{code-editor-BXchPl_F.cjs → code-editor-DzQEzQJh.cjs} +5 -5
- package/dist/code-editor-DzQEzQJh.cjs.map +1 -0
- package/dist/{code-editor-Cltwid7c.js → code-editor-IR5UX112.js} +5 -5
- package/dist/code-editor-IR5UX112.js.map +1 -0
- package/dist/{combobox-B_C0cNid.js → combobox-B15qTrWO.js} +4 -4
- package/dist/{combobox-B_C0cNid.js.map → combobox-B15qTrWO.js.map} +1 -1
- package/dist/{combobox-rKV-Lksj.cjs → combobox-DJ0c4o4S.cjs} +4 -4
- package/dist/{combobox-rKV-Lksj.cjs.map → combobox-DJ0c4o4S.cjs.map} +1 -1
- package/dist/{combobox-styles-CLxC7VLA.js → combobox-styles-C2MEEpaG.js} +3 -3
- package/dist/{combobox-styles-CLxC7VLA.js.map → combobox-styles-C2MEEpaG.js.map} +1 -1
- package/dist/{combobox-styles-C4Kq1NFV.cjs → combobox-styles-DLflBH-G.cjs} +3 -3
- package/dist/{combobox-styles-C4Kq1NFV.cjs.map → combobox-styles-DLflBH-G.cjs.map} +1 -1
- package/dist/{command-CpXMoss8.cjs → command-Bm0VcX7X.cjs} +2 -2
- package/dist/{command-CpXMoss8.cjs.map → command-Bm0VcX7X.cjs.map} +1 -1
- package/dist/{command-C6JnofUJ.js → command-DFin7kHN.js} +2 -2
- package/dist/{command-C6JnofUJ.js.map → command-DFin7kHN.js.map} +1 -1
- package/dist/components/AlertDialog.cjs.js +1 -1
- package/dist/components/AlertDialog.es.js +1 -1
- package/dist/components/Badge.cjs.js +1 -1
- package/dist/components/Badge.es.js +1 -1
- package/dist/components/Button.cjs.js +1 -1
- package/dist/components/Button.es.js +2 -2
- package/dist/components/ClampedText.cjs.js +1 -1
- package/dist/components/ClampedText.es.js +1 -1
- package/dist/components/CodeBlock.cjs.js +1 -1
- package/dist/components/CodeBlock.es.js +1 -1
- package/dist/components/CodeEditor.cjs.js +1 -1
- package/dist/components/CodeEditor.es.js +1 -1
- package/dist/components/CollapsibleBox.cjs.js +12 -0
- package/dist/components/CollapsibleBox.cjs.js.map +1 -0
- package/dist/components/CollapsibleBox.d.ts +2 -0
- package/dist/components/CollapsibleBox.es.js +2 -0
- package/dist/components/CollapsibleBox.es.js.map +1 -0
- package/dist/components/Combobox.cjs.js +2 -2
- package/dist/components/Combobox.es.js +2 -2
- package/dist/components/Command.cjs.js +1 -1
- package/dist/components/Command.es.js +1 -1
- package/dist/components/CommandPalette.cjs.js +1 -1
- package/dist/components/CommandPalette.es.js +1 -1
- package/dist/components/Comment.cjs.js +3 -3
- package/dist/components/Comment.es.js +3 -3
- package/dist/components/CopyButton.cjs.js +1 -1
- package/dist/components/CopyButton.es.js +1 -1
- package/dist/components/DataCodeSection.cjs.js +1 -1
- package/dist/components/DataCodeSection.es.js +1 -1
- package/dist/components/DataDetailsPanel.cjs.js +2 -2
- package/dist/components/DataDetailsPanel.es.js +2 -2
- package/dist/components/DataList.cjs.js +3 -3
- package/dist/components/DataList.es.js +3 -3
- package/dist/components/DataPanel.cjs.js +1 -1
- package/dist/components/DataPanel.es.js +1 -1
- package/dist/components/DateRangeTimeline.cjs.js +1 -1
- package/dist/components/DateRangeTimeline.es.js +1 -1
- package/dist/components/DateTimePicker.cjs.js +3 -3
- package/dist/components/DateTimePicker.es.js +3 -3
- package/dist/components/DateTimeRangePicker.cjs.js +1 -1
- package/dist/components/DateTimeRangePicker.es.js +1 -1
- package/dist/components/Dialog.cjs.js +2 -2
- package/dist/components/Dialog.es.js +2 -2
- package/dist/components/DisabledFeatureButton.cjs.js +1 -1
- package/dist/components/DisabledFeatureButton.es.js +1 -1
- package/dist/components/Drawer.cjs.js +1 -1
- package/dist/components/Drawer.es.js +1 -1
- package/dist/components/EmptyState.cjs.js +1 -1
- package/dist/components/EmptyState.es.js +1 -1
- package/dist/components/EnvironmentVariablesEditor.cjs.js +5 -5
- package/dist/components/EnvironmentVariablesEditor.es.js +5 -5
- package/dist/components/ErrorBoundary.cjs.js +1 -1
- package/dist/components/ErrorBoundary.es.js +1 -1
- package/dist/components/FileDropBackdrop.cjs.js +1 -1
- package/dist/components/FileDropBackdrop.es.js +1 -1
- package/dist/components/FilterBar.cjs.js +3 -3
- package/dist/components/FilterBar.es.js +4 -4
- package/dist/components/FormFieldBlocks.cjs.js +5 -5
- package/dist/components/FormFieldBlocks.es.js +5 -5
- package/dist/components/InputGroup.cjs.js +1 -1
- package/dist/components/InputGroup.es.js +1 -1
- package/dist/components/JSONSchemaForm.cjs.js +3 -3
- package/dist/components/JSONSchemaForm.es.js +3 -3
- package/dist/components/ListSearch.cjs.js +1 -1
- package/dist/components/ListSearch.es.js +1 -1
- package/dist/components/LogsDataList.cjs.js +1 -1
- package/dist/components/LogsDataList.es.js +1 -1
- package/dist/components/MainSidebar.cjs.js +1 -1
- package/dist/components/MainSidebar.es.js +2 -2
- package/dist/components/MarkdownRenderer.cjs.js +1 -1
- package/dist/components/MarkdownRenderer.es.js +1 -1
- package/dist/components/Message.cjs.js +1 -1
- package/dist/components/Message.es.js +1 -1
- package/dist/components/MetricsCard.cjs.js +1 -1
- package/dist/components/MetricsCard.es.js +1 -1
- package/dist/components/MetricsKpiCard.cjs.js +1 -1
- package/dist/components/MetricsKpiCard.es.js +1 -1
- package/dist/components/Notice.cjs.js +1 -1
- package/dist/components/Notice.es.js +1 -1
- package/dist/components/PrevNextNav.cjs.js +1 -1
- package/dist/components/PrevNextNav.es.js +1 -1
- package/dist/components/ProductBadge.cjs.js +1 -1
- package/dist/components/ProductBadge.es.js +1 -1
- package/dist/components/PropertyFilter.cjs.js +3 -3
- package/dist/components/PropertyFilter.es.js +4 -4
- package/dist/components/PullRequestIcon.cjs.js +1 -1
- package/dist/components/PullRequestIcon.cjs.js.map +1 -1
- package/dist/components/PullRequestIcon.es.js +1 -1
- package/dist/components/PullRequestIcon.es.js.map +1 -1
- package/dist/components/RelativeTimestamp.cjs.js +1 -1
- package/dist/components/RelativeTimestamp.es.js +1 -1
- package/dist/components/RuleBuilder.cjs.js +3 -3
- package/dist/components/RuleBuilder.cjs.js.map +1 -1
- package/dist/components/RuleBuilder.es.js +3 -3
- package/dist/components/RuleBuilder.es.js.map +1 -1
- package/dist/components/SankeyChart.cjs.js +1 -1
- package/dist/components/SankeyChart.es.js +1 -1
- package/dist/components/Section.cjs.js +1 -1
- package/dist/components/Section.es.js +1 -1
- package/dist/components/SegmentedControl.cjs.js +11 -0
- package/dist/components/SegmentedControl.cjs.js.map +1 -0
- package/dist/components/SegmentedControl.d.ts +2 -0
- package/dist/components/SegmentedControl.es.js +2 -0
- package/dist/components/SegmentedControl.es.js.map +1 -0
- package/dist/components/Select.cjs.js +1 -1
- package/dist/components/Select.es.js +1 -1
- package/dist/components/SideDialog.cjs.js +1 -1
- package/dist/components/SideDialog.es.js +1 -1
- package/dist/components/Steps.cjs.js +2 -2
- package/dist/components/Steps.cjs.js.map +1 -1
- package/dist/components/Steps.es.js +2 -2
- package/dist/components/Steps.es.js.map +1 -1
- package/dist/components/Tabs.cjs.js +3 -3
- package/dist/components/Tabs.es.js +3 -3
- package/dist/components/ThemeToggle.cjs.js +17 -86
- package/dist/components/ThemeToggle.cjs.js.map +1 -1
- package/dist/components/ThemeToggle.es.js +18 -87
- package/dist/components/ThemeToggle.es.js.map +1 -1
- package/dist/components/ThreadList.cjs.js +1 -1
- package/dist/components/ThreadList.es.js +1 -1
- package/dist/components/TokenBudget.cjs.js +1 -1
- package/dist/components/TokenBudget.es.js +1 -1
- package/dist/components/Truncate.cjs.js +1 -1
- package/dist/components/Truncate.es.js +1 -1
- package/dist/components/Workflow.cjs.js +6 -6
- package/dist/components/Workflow.es.js +6 -6
- package/dist/components/ai/activity.cjs.js +4 -4
- package/dist/components/ai/activity.es.js +4 -4
- package/dist/components/ai/ask-user.cjs.js +1 -1
- package/dist/components/ai/ask-user.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 +4 -4
- package/dist/components/ai/tool-call.es.js +4 -4
- package/dist/{copy-button-C6nXDjBz.cjs → copy-button-CGkFEDHF.cjs} +2 -2
- package/dist/{copy-button-C6nXDjBz.cjs.map → copy-button-CGkFEDHF.cjs.map} +1 -1
- package/dist/{copy-button-DbmsTUum.js → copy-button-DH8xtrWz.js} +2 -2
- package/dist/{copy-button-DbmsTUum.js.map → copy-button-DH8xtrWz.js.map} +1 -1
- package/dist/{data-code-section-D5b6_jcB.cjs → data-code-section-DWBfkrmO.cjs} +6 -6
- package/dist/data-code-section-DWBfkrmO.cjs.map +1 -0
- package/dist/{data-code-section-Bd2Xnckz.js → data-code-section-It6myyvZ.js} +6 -6
- package/dist/data-code-section-It6myyvZ.js.map +1 -0
- package/dist/{data-list-DL_oFE4j.js → data-list-CyeD_u-6.js} +3 -3
- package/dist/{data-list-DL_oFE4j.js.map → data-list-CyeD_u-6.js.map} +1 -1
- package/dist/{data-list-D8bACyyK.cjs → data-list-Y42KyuI1.cjs} +3 -3
- package/dist/{data-list-D8bACyyK.cjs.map → data-list-Y42KyuI1.cjs.map} +1 -1
- package/dist/{data-list-spacer-_bFe0e2u.cjs → data-list-spacer-BSg2hCx7.cjs} +2 -2
- package/dist/{data-list-spacer-_bFe0e2u.cjs.map → data-list-spacer-BSg2hCx7.cjs.map} +1 -1
- package/dist/{data-list-spacer-CE6-4ZQq.js → data-list-spacer-C8z32twc.js} +2 -2
- package/dist/{data-list-spacer-CE6-4ZQq.js.map → data-list-spacer-C8z32twc.js.map} +1 -1
- package/dist/{data-panel-CjvoI_lx.cjs → data-panel-D7Qk4iwZ.cjs} +3 -3
- package/dist/{data-panel-CjvoI_lx.cjs.map → data-panel-D7Qk4iwZ.cjs.map} +1 -1
- package/dist/{data-panel-42fdcagQ.js → data-panel-DuLf5j8S.js} +3 -3
- package/dist/{data-panel-42fdcagQ.js.map → data-panel-DuLf5j8S.js.map} +1 -1
- package/dist/{date-time-range-picker-C-pSI1u1.js → date-time-range-picker-BDylIIzt.js} +4 -4
- package/dist/{date-time-range-picker-C-pSI1u1.js.map → date-time-range-picker-BDylIIzt.js.map} +1 -1
- package/dist/{date-time-range-picker-BORAuIJM.cjs → date-time-range-picker-UheN070q.cjs} +4 -4
- package/dist/{date-time-range-picker-BORAuIJM.cjs.map → date-time-range-picker-UheN070q.cjs.map} +1 -1
- package/dist/{dialog-cKzR2TXI.js → dialog-Dt5kASkl.js} +2 -2
- package/dist/{dialog-cKzR2TXI.js.map → dialog-Dt5kASkl.js.map} +1 -1
- package/dist/{dialog-action-B3AHq7mU.cjs → dialog-action-C3Tc7ZKI.cjs} +3 -3
- package/dist/{dialog-action-B3AHq7mU.cjs.map → dialog-action-C3Tc7ZKI.cjs.map} +1 -1
- package/dist/{dialog-action-BGmDoI5T.js → dialog-action-CB3h9Z2J.js} +3 -3
- package/dist/{dialog-action-BGmDoI5T.js.map → dialog-action-CB3h9Z2J.js.map} +1 -1
- package/dist/{dialog-DYpOpj9s.cjs → dialog-d_AK1NQD.cjs} +2 -2
- package/dist/{dialog-DYpOpj9s.cjs.map → dialog-d_AK1NQD.cjs.map} +1 -1
- package/dist/domains/auth/components/permission-denied.cjs.js +1 -1
- package/dist/domains/auth/components/permission-denied.es.js +1 -1
- package/dist/domains/auth/components/session-expired.cjs.js +2 -2
- package/dist/domains/auth/components/session-expired.es.js +2 -2
- package/dist/domains/chat/attachments/attachment-preview-dialog.cjs.js +2 -2
- package/dist/domains/chat/attachments/attachment-preview-dialog.es.js +2 -2
- package/dist/domains/chat/attachments/composer-attachment.cjs.js +1 -1
- package/dist/domains/chat/attachments/composer-attachment.es.js +1 -1
- package/dist/domains/chat/components/badge-wrapper.cjs.js +1 -1
- package/dist/domains/chat/components/badge-wrapper.es.js +1 -1
- package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js +3 -3
- package/dist/domains/chat/components/network-choice-metadata-dialog.es.js +3 -3
- package/dist/domains/chat/messages/assistant-message-actions.cjs.js +2 -2
- package/dist/domains/chat/messages/assistant-message-actions.es.js +2 -2
- package/dist/domains/chat/messages/dataset-save-action.cjs.js +5 -5
- package/dist/domains/chat/messages/dataset-save-action.es.js +5 -5
- package/dist/domains/chat/messages/message-row.cjs.js +5 -5
- package/dist/domains/chat/messages/message-row.es.js +5 -5
- package/dist/domains/chat/messages/notification-signal-notice.cjs.js +1 -1
- package/dist/domains/chat/messages/notification-signal-notice.es.js +1 -1
- package/dist/domains/chat/messages/renderers/message-text.cjs.js +3 -3
- package/dist/domains/chat/messages/renderers/message-text.es.js +3 -3
- 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/renderers/status-renderers.cjs.js +1 -1
- package/dist/domains/chat/messages/renderers/status-renderers.es.js +1 -1
- package/dist/domains/chat/messages/signal-badge.cjs.js +1 -1
- package/dist/domains/chat/messages/signal-badge.es.js +1 -1
- package/dist/domains/chat/messages/skill-message.cjs.js +3 -3
- package/dist/domains/chat/messages/skill-message.es.js +3 -3
- package/dist/domains/chat/messages/system-reminder-badge.cjs.js +1 -1
- package/dist/domains/chat/messages/system-reminder-badge.es.js +1 -1
- package/dist/domains/chat/messages/tripwire-notice.cjs.js +2 -2
- package/dist/domains/chat/messages/tripwire-notice.es.js +2 -2
- package/dist/domains/chat/tools/badges/agent-badge-wrapper.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/agent-badge-wrapper.es.js +1 -1
- package/dist/domains/chat/tools/badges/agent-badge.cjs.js +4 -4
- package/dist/domains/chat/tools/badges/agent-badge.es.js +4 -4
- package/dist/domains/chat/tools/badges/ask-user-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/ask-user-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/background-task-metadata-dialog.cjs.js +3 -3
- package/dist/domains/chat/tools/badges/background-task-metadata-dialog.es.js +3 -3
- package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js +3 -3
- package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js.map +1 -1
- package/dist/domains/chat/tools/badges/code-mode-badge.es.js +3 -3
- package/dist/domains/chat/tools/badges/code-mode-badge.es.js.map +1 -1
- package/dist/domains/chat/tools/badges/file-tree-badge.cjs.js +3 -3
- package/dist/domains/chat/tools/badges/file-tree-badge.es.js +3 -3
- package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js +2 -2
- package/dist/domains/chat/tools/badges/observation-marker-badge.es.js +2 -2
- 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/sandbox-execution-badge.cjs.js +3 -3
- package/dist/domains/chat/tools/badges/sandbox-execution-badge.cjs.js.map +1 -1
- package/dist/domains/chat/tools/badges/sandbox-execution-badge.es.js +3 -3
- package/dist/domains/chat/tools/badges/sandbox-execution-badge.es.js.map +1 -1
- package/dist/domains/chat/tools/badges/tool-approval-buttons.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/tool-approval-buttons.es.js +1 -1
- package/dist/domains/chat/tools/badges/tool-badge.cjs.js +4 -4
- package/dist/domains/chat/tools/badges/tool-badge.es.js +4 -4
- package/dist/domains/chat/tools/badges/workflow-badge.cjs.js +4 -3
- package/dist/domains/chat/tools/badges/workflow-badge.cjs.js.map +1 -1
- package/dist/domains/chat/tools/badges/workflow-badge.es.js +4 -3
- package/dist/domains/chat/tools/badges/workflow-badge.es.js.map +1 -1
- package/dist/domains/chat/tools/submit-plan-tool.cjs.js +2 -2
- package/dist/domains/chat/tools/submit-plan-tool.es.js +2 -2
- package/dist/domains/chat/tools/tool-card-kind.cjs.js +5 -1
- package/dist/domains/chat/tools/tool-card-kind.cjs.js.map +1 -1
- package/dist/domains/chat/tools/tool-card-kind.es.js +5 -2
- package/dist/domains/chat/tools/tool-card-kind.es.js.map +1 -1
- package/dist/domains/chat/tools/tool-card.cjs.js +1 -1
- package/dist/domains/chat/tools/tool-card.es.js +1 -1
- package/dist/domains/datasets/components/save-as-dataset-item-dialog.cjs.js +4 -4
- package/dist/domains/datasets/components/save-as-dataset-item-dialog.es.js +4 -4
- package/dist/domains/logs/components/log-data-panel.cjs.js +3 -3
- package/dist/domains/logs/components/log-data-panel.es.js +3 -3
- package/dist/domains/logs/components/logs-error-content.cjs.js +1 -1
- package/dist/domains/logs/components/logs-error-content.es.js +1 -1
- package/dist/domains/logs/components/logs-list-view.cjs.js +1 -1
- package/dist/domains/logs/components/logs-list-view.es.js +1 -1
- package/dist/domains/logs/components/logs-toolbar.cjs.js +1 -1
- package/dist/domains/logs/components/logs-toolbar.es.js +1 -1
- package/dist/domains/logs/components/no-logs-info.cjs.js +2 -2
- package/dist/domains/logs/components/no-logs-info.es.js +2 -2
- package/dist/domains/memory/components/flame-graph.cjs.js +2 -2
- package/dist/domains/memory/components/flame-graph.cjs.js.map +1 -1
- package/dist/domains/memory/components/flame-graph.es.js +2 -2
- package/dist/domains/memory/components/flame-graph.es.js.map +1 -1
- package/dist/domains/memory/components/memory-studio-panel.cjs.js +1 -1
- package/dist/domains/memory/components/memory-studio-panel.es.js +1 -1
- package/dist/domains/memory/components/observation-detail-view.cjs.js +1 -1
- package/dist/domains/memory/components/observation-detail-view.es.js +1 -1
- package/dist/domains/memory/components/thread-context-progress.cjs.js +1 -1
- package/dist/domains/memory/components/thread-context-progress.es.js +1 -1
- package/dist/domains/metrics/components/card-action-buttons.cjs.js +1 -1
- package/dist/domains/metrics/components/card-action-buttons.es.js +1 -1
- package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
- package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
- package/dist/domains/metrics/components/kpi-card-view.cjs.js +1 -1
- package/dist/domains/metrics/components/kpi-card-view.es.js +1 -1
- package/dist/domains/metrics/components/latency-card-view.cjs.js +5 -5
- package/dist/domains/metrics/components/latency-card-view.cjs.js.map +1 -1
- package/dist/domains/metrics/components/latency-card-view.es.js +5 -5
- package/dist/domains/metrics/components/latency-card-view.es.js.map +1 -1
- package/dist/domains/metrics/components/memory-card-view.cjs.js +5 -5
- package/dist/domains/metrics/components/memory-card-view.es.js +5 -5
- package/dist/domains/metrics/components/metrics-utils.cjs.js +1 -1
- package/dist/domains/metrics/components/metrics-utils.cjs.js.map +1 -1
- package/dist/domains/metrics/components/metrics-utils.es.js +1 -1
- package/dist/domains/metrics/components/metrics-utils.es.js.map +1 -1
- package/dist/domains/metrics/components/model-usage-cost-card-view.cjs.js +2 -2
- package/dist/domains/metrics/components/model-usage-cost-card-view.es.js +2 -2
- package/dist/domains/metrics/components/scores-card-view.cjs.js +6 -6
- package/dist/domains/metrics/components/scores-card-view.cjs.js.map +1 -1
- package/dist/domains/metrics/components/scores-card-view.es.js +6 -6
- package/dist/domains/metrics/components/scores-card-view.es.js.map +1 -1
- package/dist/domains/metrics/components/token-usage-by-agent-card-view.cjs.js +4 -4
- package/dist/domains/metrics/components/token-usage-by-agent-card-view.es.js +4 -4
- package/dist/domains/metrics/components/token-usage-timeline-card-view.cjs.js +5 -5
- package/dist/domains/metrics/components/token-usage-timeline-card-view.cjs.js.map +1 -1
- package/dist/domains/metrics/components/token-usage-timeline-card-view.es.js +5 -5
- package/dist/domains/metrics/components/token-usage-timeline-card-view.es.js.map +1 -1
- package/dist/domains/metrics/components/traces-volume-card-view.cjs.js +4 -4
- package/dist/domains/metrics/components/traces-volume-card-view.es.js +4 -4
- package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.cjs.js +4 -4
- package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.es.js +4 -4
- package/dist/domains/review/components/review-status-badge.cjs.js +1 -1
- package/dist/domains/review/components/review-status-badge.es.js +1 -1
- package/dist/domains/scores/components/score-data-panel.cjs.js +2 -2
- package/dist/domains/scores/components/score-data-panel.es.js +2 -2
- package/dist/domains/scores/components/span-scoring.cjs.js +4 -4
- package/dist/domains/scores/components/span-scoring.es.js +4 -4
- package/dist/domains/scores/components/trace-scores-tab.cjs.js +4 -4
- package/dist/domains/scores/components/trace-scores-tab.es.js +4 -4
- package/dist/domains/traces/components/feedback-thread.cjs.js +3 -3
- package/dist/domains/traces/components/feedback-thread.es.js +3 -3
- package/dist/domains/traces/components/format-trace-thread-messages.cjs.js +31 -9
- package/dist/domains/traces/components/format-trace-thread-messages.cjs.js.map +1 -1
- package/dist/domains/traces/components/format-trace-thread-messages.es.js +31 -9
- package/dist/domains/traces/components/format-trace-thread-messages.es.js.map +1 -1
- package/dist/domains/traces/components/no-traces-info.cjs.js +1 -1
- package/dist/domains/traces/components/no-traces-info.es.js +1 -1
- package/dist/domains/traces/components/span-data-panel-view.cjs.js +6 -6
- package/dist/domains/traces/components/span-data-panel-view.es.js +6 -6
- 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 +2 -2
- package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +2 -2
- 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 +3 -3
- package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +3 -3
- package/dist/domains/traces/components/span-payload/span-payload-json.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-json.cjs.js.map +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-json.es.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +16 -11
- package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +16 -11
- package/dist/domains/traces/components/span-payload/span-payload-messages.es.js.map +1 -1
- 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-section.cjs.js +16 -3
- package/dist/domains/traces/components/span-payload/span-payload-section.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-section.es.js +16 -3
- package/dist/domains/traces/components/span-payload/span-payload-section.es.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +2 -2
- package/dist/domains/traces/components/span-payload/span-processor-attributes.cjs.js +2 -2
- package/dist/domains/traces/components/span-payload/span-processor-attributes.es.js +2 -2
- 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/span-type-legend.cjs.js +1 -1
- package/dist/domains/traces/components/span-type-legend.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-trace/thread-trace-messages.cjs.js +6 -6
- package/dist/domains/traces/components/thread-trace/thread-trace-messages.cjs.js.map +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-messages.es.js +6 -6
- package/dist/domains/traces/components/thread-trace/thread-trace-messages.es.js.map +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-spans.cjs.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-spans.es.js +1 -1
- package/dist/domains/traces/components/thread-view-by-trace.cjs.js +8 -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 +9 -3
- package/dist/domains/traces/components/thread-view-by-trace.es.js.map +1 -1
- package/dist/domains/traces/components/trace-columns-menu.cjs.js +5 -5
- package/dist/domains/traces/components/trace-columns-menu.es.js +5 -5
- package/dist/domains/traces/components/trace-data-panel-view.cjs.js +6 -6
- package/dist/domains/traces/components/trace-data-panel-view.es.js +6 -6
- package/dist/domains/traces/components/trace-data-panel.cjs.js +2 -2
- package/dist/domains/traces/components/trace-data-panel.es.js +2 -2
- 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-messages-panel.cjs.js +1 -1
- package/dist/domains/traces/components/trace-messages-panel.es.js +1 -1
- package/dist/domains/traces/components/trace-status-value.cjs.js +1 -1
- package/dist/domains/traces/components/trace-status-value.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-status-value.es.js +1 -1
- package/dist/domains/traces/components/trace-status-value.es.js.map +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-item-view.cjs.js +9 -2
- package/dist/domains/traces/components/trace-thread-item-view.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-thread-item-view.es.js +10 -3
- package/dist/domains/traces/components/trace-thread-item-view.es.js.map +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 +2 -2
- package/dist/domains/traces/components/trace-time-range-chip.es.js +2 -2
- 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-mode-toggle.cjs.js +1 -1
- package/dist/domains/traces/components/traces-list-mode-toggle.es.js +1 -1
- package/dist/domains/traces/components/traces-list-view.cjs.js +2 -2
- package/dist/domains/traces/components/traces-list-view.es.js +2 -2
- package/dist/domains/traces/hooks/use-trace-query.cjs.js +2 -2
- package/dist/domains/traces/hooks/use-trace-query.cjs.js.map +1 -1
- package/dist/domains/traces/hooks/use-trace-query.es.js +2 -2
- package/dist/domains/traces/hooks/use-trace-query.es.js.map +1 -1
- package/dist/domains/traces/trace-filters.cjs.js +5 -5
- package/dist/domains/traces/trace-filters.cjs.js.map +1 -1
- package/dist/domains/traces/trace-filters.es.js +5 -5
- package/dist/domains/traces/trace-filters.es.js.map +1 -1
- package/dist/domains/workflows/components/workflow-combobox.cjs.js +1 -1
- package/dist/domains/workflows/components/workflow-combobox.es.js +1 -1
- package/dist/domains/workflows/components/workflow-entity-header.cjs.js +1 -1
- package/dist/domains/workflows/components/workflow-entity-header.es.js +1 -1
- package/dist/domains/workflows/components/workflow-information.cjs.js +1 -1
- package/dist/domains/workflows/components/workflow-information.es.js +1 -1
- package/dist/domains/workflows/components/workflow-step-detail.cjs.js +3 -3
- package/dist/domains/workflows/components/workflow-step-detail.es.js +3 -3
- package/dist/domains/workflows/components/workflows-list/no-workflows-info.cjs.js +2 -2
- package/dist/domains/workflows/components/workflows-list/no-workflows-info.es.js +2 -2
- package/dist/domains/workflows/components/workflows-list/workflows-list.cjs.js +3 -3
- package/dist/domains/workflows/components/workflows-list/workflows-list.cjs.js.map +1 -1
- package/dist/domains/workflows/components/workflows-list/workflows-list.es.js +3 -3
- package/dist/domains/workflows/components/workflows-list/workflows-list.es.js.map +1 -1
- package/dist/domains/workflows/runs/workflow-run-list.cjs.js +2 -2
- package/dist/domains/workflows/runs/workflow-run-list.es.js +2 -2
- package/dist/domains/workflows/workflow/data/workflow-data-button.cjs.js +1 -1
- package/dist/domains/workflows/workflow/data/workflow-data-button.es.js +1 -1
- package/dist/domains/workflows/workflow/data/workflow-data-inspector.cjs.js +4 -4
- package/dist/domains/workflows/workflow/data/workflow-data-inspector.cjs.js.map +1 -1
- package/dist/domains/workflows/workflow/data/workflow-data-inspector.es.js +4 -4
- package/dist/domains/workflows/workflow/data/workflow-data-inspector.es.js.map +1 -1
- package/dist/domains/workflows/workflow/input/workflow-json-input.cjs.js +2 -2
- package/dist/domains/workflows/workflow/input/workflow-json-input.es.js +2 -2
- package/dist/domains/workflows/workflow/input/workflow-processor-input.cjs.js +3 -3
- package/dist/domains/workflows/workflow/input/workflow-processor-input.es.js +3 -3
- 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-cancel-button.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-cancel-button.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-data-edge.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-data-edge.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-debug-step-controls.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-debug-step-controls.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-graph-boundary.cjs.js +3 -3
- package/dist/domains/workflows/workflow/workflow-graph-boundary.es.js +3 -3
- 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-input-data.cjs.js +2 -1
- package/dist/domains/workflows/workflow/workflow-input-data.cjs.js.map +1 -1
- package/dist/domains/workflows/workflow/workflow-input-data.es.js +2 -1
- package/dist/domains/workflows/workflow/workflow-input-data.es.js.map +1 -1
- package/dist/domains/workflows/workflow/workflow-map-config-dialog.cjs.js +3 -3
- package/dist/domains/workflows/workflow/workflow-map-config-dialog.es.js +3 -3
- package/dist/domains/workflows/workflow/workflow-nested-graph.cjs.js +3 -3
- package/dist/domains/workflows/workflow/workflow-nested-graph.es.js +3 -3
- package/dist/domains/workflows/workflow/workflow-run-data.cjs.js +4 -4
- package/dist/domains/workflows/workflow/workflow-run-data.es.js +4 -4
- package/dist/domains/workflows/workflow/workflow-run-error.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-run-error.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-run-header.cjs.js +4 -4
- package/dist/domains/workflows/workflow/workflow-run-header.cjs.js.map +1 -1
- package/dist/domains/workflows/workflow/workflow-run-header.es.js +4 -4
- package/dist/domains/workflows/workflow/workflow-run-header.es.js.map +1 -1
- package/dist/domains/workflows/workflow/workflow-status.cjs.js +2 -2
- package/dist/domains/workflows/workflow/workflow-status.cjs.js.map +1 -1
- package/dist/domains/workflows/workflow/workflow-status.es.js +2 -2
- package/dist/domains/workflows/workflow/workflow-status.es.js.map +1 -1
- package/dist/domains/workflows/workflow/workflow-step-action-bar.cjs.js +3 -3
- package/dist/domains/workflows/workflow/workflow-step-action-bar.es.js +3 -3
- package/dist/domains/workflows/workflow/workflow-suspended-steps.cjs.js +2 -2
- package/dist/domains/workflows/workflow/workflow-suspended-steps.es.js +2 -2
- package/dist/domains/workflows/workflow/workflow-time-travel-form.cjs.js +3 -3
- package/dist/domains/workflows/workflow/workflow-time-travel-form.es.js +3 -3
- package/dist/domains/workflows/workflow/workflow-timeline-row.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-timeline-row.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-timeline.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-timeline.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-trigger-form.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-trigger-form.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-trigger-header.cjs.js +2 -2
- package/dist/domains/workflows/workflow/workflow-trigger-header.es.js +2 -2
- package/dist/domains/workflows/workflow-status-tone.cjs.js +2 -2
- package/dist/domains/workflows/workflow-status-tone.cjs.js.map +1 -1
- package/dist/domains/workflows/workflow-status-tone.es.js +2 -2
- package/dist/domains/workflows/workflow-status-tone.es.js.map +1 -1
- package/dist/{drawer-DXf50w71.js → drawer-BI3B_krl.js} +2 -2
- package/dist/{drawer-DXf50w71.js.map → drawer-BI3B_krl.js.map} +1 -1
- package/dist/{drawer-d81cZiSV.cjs → drawer-DnXudVbm.cjs} +2 -2
- package/dist/{drawer-d81cZiSV.cjs.map → drawer-DnXudVbm.cjs.map} +1 -1
- package/dist/ee/signals/components/entity-index-compact-grid.cjs.js +1 -1
- package/dist/ee/signals/components/entity-index-compact-grid.es.js +1 -1
- package/dist/ee/signals/components/entity-index-list.cjs.js +2 -2
- package/dist/ee/signals/components/entity-index-list.es.js +2 -2
- package/dist/ee/signals/components/signals-empty-state.cjs.js +1 -1
- package/dist/ee/signals/components/signals-empty-state.es.js +1 -1
- package/dist/ee/signals/components/trace-intelligence-entity-detail.cjs.js +1 -1
- package/dist/ee/signals/components/trace-intelligence-entity-detail.es.js +1 -1
- package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +4 -4
- package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +4 -4
- package/dist/ee/signals/examples-pager.cjs.js +1 -1
- package/dist/ee/signals/examples-pager.es.js +1 -1
- package/dist/ee/signals/flow-card.cjs.js +1 -1
- package/dist/ee/signals/flow-card.es.js +1 -1
- package/dist/ee/signals/noise-detail-panel.cjs.js +3 -3
- package/dist/ee/signals/noise-detail-panel.cjs.js.map +1 -1
- package/dist/ee/signals/noise-detail-panel.es.js +3 -3
- package/dist/ee/signals/noise-detail-panel.es.js.map +1 -1
- package/dist/ee/signals/sankey-signals.cjs.js +2 -2
- package/dist/ee/signals/sankey-signals.cjs.js.map +1 -1
- package/dist/ee/signals/sankey-signals.es.js +2 -2
- package/dist/ee/signals/sankey-signals.es.js.map +1 -1
- package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js +5 -5
- package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +5 -5
- package/dist/ee/signals/settings/trace-signal-settings.cjs.js +3 -3
- package/dist/ee/signals/settings/trace-signal-settings.es.js +3 -3
- package/dist/ee/signals/signal-colors.cjs.js +3 -3
- package/dist/ee/signals/signal-colors.cjs.js.map +1 -1
- package/dist/ee/signals/signal-colors.es.js +3 -3
- package/dist/ee/signals/signal-colors.es.js.map +1 -1
- package/dist/ee/signals/signals-error-state.cjs.js +2 -2
- package/dist/ee/signals/signals-error-state.cjs.js.map +1 -1
- package/dist/ee/signals/signals-error-state.es.js +2 -2
- package/dist/ee/signals/signals-error-state.es.js.map +1 -1
- package/dist/ee/signals/snapshot-timeline.cjs.js +1 -1
- package/dist/ee/signals/snapshot-timeline.es.js +1 -1
- package/dist/ee/signals/theme-detail-panel.cjs.js +4 -4
- package/dist/ee/signals/theme-detail-panel.cjs.js.map +1 -1
- package/dist/ee/signals/theme-detail-panel.es.js +4 -4
- package/dist/ee/signals/theme-detail-panel.es.js.map +1 -1
- package/dist/ee/signals/theme-filter-banner.cjs.js +1 -1
- package/dist/ee/signals/theme-filter-banner.es.js +1 -1
- package/dist/ee/signals/trace-insight-view.cjs.js +4 -4
- package/dist/ee/signals/trace-insight-view.cjs.js.map +1 -1
- package/dist/ee/signals/trace-insight-view.es.js +4 -4
- package/dist/ee/signals/trace-insight-view.es.js.map +1 -1
- package/dist/ee/signals/view-mode-tab.cjs.js +1 -1
- package/dist/ee/signals/view-mode-tab.es.js +1 -1
- package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +3 -3
- package/dist/ee/topics/components/topic-trace-summary-list.es.js +3 -3
- package/dist/{field-block-DpejZ6U6.js → field-block--PeppIRb.js} +10 -3
- package/dist/field-block--PeppIRb.js.map +1 -0
- package/dist/{field-block-BIDi9Bvc.cjs → field-block-DtaPqBa3.cjs} +10 -3
- package/dist/field-block-DtaPqBa3.cjs.map +1 -0
- package/dist/{field-block-error-msg-B6-wnlAz.cjs → field-block-error-msg-CkhEN6nU.cjs} +2 -2
- package/dist/{field-block-error-msg-B6-wnlAz.cjs.map → field-block-error-msg-CkhEN6nU.cjs.map} +1 -1
- package/dist/{field-block-error-msg-edlaudVx.js → field-block-error-msg-LXwhKzIq.js} +2 -2
- package/dist/{field-block-error-msg-edlaudVx.js.map → field-block-error-msg-LXwhKzIq.js.map} +1 -1
- package/dist/{filter-bar-chip-D4CSm9KP.cjs → filter-bar-chip-CBlHsz4A.cjs} +3 -3
- package/dist/{filter-bar-chip-D4CSm9KP.cjs.map → filter-bar-chip-CBlHsz4A.cjs.map} +1 -1
- package/dist/{filter-bar-chip-BNPOrSrD.js → filter-bar-chip-DFOtEvpW.js} +3 -3
- package/dist/{filter-bar-chip-BNPOrSrD.js.map → filter-bar-chip-DFOtEvpW.js.map} +1 -1
- package/dist/{input-group-B8bnoDrA.js → input-group-0G9ZX_cM.js} +2 -2
- package/dist/{input-group-B8bnoDrA.js.map → input-group-0G9ZX_cM.js.map} +1 -1
- package/dist/{input-group-I8YVM_Ps.cjs → input-group-BRhBfeHC.cjs} +2 -2
- package/dist/{input-group-I8YVM_Ps.cjs.map → input-group-BRhBfeHC.cjs.map} +1 -1
- package/dist/layout/tabbed-container.cjs.js +6 -6
- package/dist/layout/tabbed-container.es.js +6 -6
- package/dist/lib/form/components/array-element-wrapper.cjs.js +2 -2
- package/dist/lib/form/components/array-element-wrapper.cjs.js.map +1 -1
- package/dist/lib/form/components/array-element-wrapper.es.js +2 -2
- package/dist/lib/form/components/array-element-wrapper.es.js.map +1 -1
- package/dist/lib/form/components/array-wrapper.cjs.js +1 -1
- package/dist/lib/form/components/array-wrapper.es.js +1 -1
- package/dist/lib/form/components/boolean-field.cjs.js +1 -1
- package/dist/lib/form/components/boolean-field.es.js +1 -1
- package/dist/lib/form/components/date-field.cjs.js +1 -1
- package/dist/lib/form/components/date-field.es.js +1 -1
- package/dist/lib/form/components/error-message.cjs.js +1 -1
- package/dist/lib/form/components/error-message.es.js +1 -1
- package/dist/lib/form/components/field-wrapper.cjs.js +1 -1
- package/dist/lib/form/components/field-wrapper.es.js +1 -1
- package/dist/lib/form/components/form-submit-row.cjs.js +1 -1
- package/dist/lib/form/components/form-submit-row.es.js +1 -1
- package/dist/lib/form/components/object-wrapper.cjs.js +1 -1
- package/dist/lib/form/components/object-wrapper.cjs.js.map +1 -1
- package/dist/lib/form/components/object-wrapper.es.js +1 -1
- package/dist/lib/form/components/object-wrapper.es.js.map +1 -1
- package/dist/lib/form/components/record-field.cjs.js +1 -1
- package/dist/lib/form/components/record-field.es.js +1 -1
- package/dist/lib/form/components/select-field.cjs.js +1 -1
- package/dist/lib/form/components/select-field.es.js +1 -1
- package/dist/lib/form/components/submit-button.cjs.js +1 -1
- package/dist/lib/form/components/submit-button.es.js +1 -1
- package/dist/{list-search-DXb7HFX8.cjs → list-search-BzAIj0DB.cjs} +2 -2
- package/dist/{list-search-DXb7HFX8.cjs.map → list-search-BzAIj0DB.cjs.map} +1 -1
- package/dist/{list-search-9l8IEdxZ.js → list-search-DI1DH7vU.js} +2 -2
- package/dist/{list-search-9l8IEdxZ.js.map → list-search-DI1DH7vU.js.map} +1 -1
- package/dist/{logs-data-list-C77r2FOj.js → logs-data-list-ButZV-2H.js} +3 -3
- package/dist/{logs-data-list-C77r2FOj.js.map → logs-data-list-ButZV-2H.js.map} +1 -1
- package/dist/{logs-data-list-CEFyG1Xb.cjs → logs-data-list-CtHern11.cjs} +3 -3
- package/dist/{logs-data-list-CEFyG1Xb.cjs.map → logs-data-list-CtHern11.cjs.map} +1 -1
- package/dist/{main-sidebar-link-active-BNko0jHZ.cjs → main-sidebar-link-active-D8VSuJKx.cjs} +2 -2
- package/dist/{main-sidebar-link-active-BNko0jHZ.cjs.map → main-sidebar-link-active-D8VSuJKx.cjs.map} +1 -1
- package/dist/{main-sidebar-link-active-1_ktyA8Q.js → main-sidebar-link-active-buZAhlHo.js} +2 -2
- package/dist/{main-sidebar-link-active-1_ktyA8Q.js.map → main-sidebar-link-active-buZAhlHo.js.map} +1 -1
- package/dist/{markdown-renderer-CSwjfPaf.cjs → markdown-renderer-CZV6neya.cjs} +3 -3
- package/dist/{markdown-renderer-CSwjfPaf.cjs.map → markdown-renderer-CZV6neya.cjs.map} +1 -1
- package/dist/{markdown-renderer-Bl0V7FCo.js → markdown-renderer-Cy7Iwy1c.js} +3 -3
- package/dist/{markdown-renderer-Bl0V7FCo.js.map → markdown-renderer-Cy7Iwy1c.js.map} +1 -1
- package/dist/{message-copy-button-DP3U-xA-.js → message-copy-button-C_mFZ3Vg.js} +2 -2
- package/dist/{message-copy-button-DP3U-xA-.js.map → message-copy-button-C_mFZ3Vg.js.map} +1 -1
- package/dist/{message-copy-button-ClJBX9qx.cjs → message-copy-button-CqMR2T2t.cjs} +2 -2
- package/dist/{message-copy-button-ClJBX9qx.cjs.map → message-copy-button-CqMR2T2t.cjs.map} +1 -1
- package/dist/{metrics-card-CloSmyRQ.js → metrics-card-C1rTkbcn.js} +3 -3
- package/dist/metrics-card-C1rTkbcn.js.map +1 -0
- package/dist/{metrics-card-HmQJHDNa.cjs → metrics-card-D7J9JDgn.cjs} +3 -3
- package/dist/metrics-card-D7J9JDgn.cjs.map +1 -0
- package/dist/{metrics-kpi-card-CW24YjZp.cjs → metrics-kpi-card-1hbihR2T.cjs} +3 -3
- package/dist/metrics-kpi-card-1hbihR2T.cjs.map +1 -0
- package/dist/{metrics-kpi-card-DLDT28IB.js → metrics-kpi-card-CiB88L41.js} +3 -3
- package/dist/metrics-kpi-card-CiB88L41.js.map +1 -0
- package/dist/new/settings.cjs.js +1 -1
- package/dist/new/settings.es.js +1 -1
- package/dist/new/sidebar.cjs.js +3 -3
- package/dist/new/sidebar.cjs.js.map +1 -1
- package/dist/new/sidebar.es.js +4 -4
- package/dist/new/sidebar.es.js.map +1 -1
- package/dist/{notification-activity-B1_2BPe_.js → notification-activity-CFR_b8eA.js} +4 -4
- package/dist/notification-activity-CFR_b8eA.js.map +1 -0
- package/dist/{notification-activity-BAn2fhYd.cjs → notification-activity-Dk50wcE4.cjs} +4 -4
- package/dist/notification-activity-Dk50wcE4.cjs.map +1 -0
- package/dist/{plan-DJfH1c_u.js → plan-CvTAGIWv.js} +10 -55
- package/dist/plan-CvTAGIWv.js.map +1 -0
- package/dist/{plan-ZKAT5frg.cjs → plan-DsfNN3a0.cjs} +10 -55
- package/dist/plan-DsfNN3a0.cjs.map +1 -0
- package/dist/primitives/menu-item.cjs.js +2 -2
- package/dist/primitives/menu-item.cjs.js.map +1 -1
- package/dist/primitives/menu-item.es.js +2 -2
- package/dist/primitives/menu-item.es.js.map +1 -1
- package/dist/primitives/trigger-button.cjs.js +1 -1
- package/dist/primitives/trigger-button.es.js +1 -1
- package/dist/{property-filter-applied-D0F0BYMY.cjs → property-filter-applied-Bp2z4KBv.cjs} +2 -2
- package/dist/{property-filter-applied-D0F0BYMY.cjs.map → property-filter-applied-Bp2z4KBv.cjs.map} +1 -1
- package/dist/{property-filter-applied-k0TOa9hf.js → property-filter-applied-C9verwDR.js} +2 -2
- package/dist/{property-filter-applied-k0TOa9hf.js.map → property-filter-applied-C9verwDR.js.map} +1 -1
- package/dist/{reasoning-activity-CO0Ab1Za.cjs → reasoning-activity-BVviIdMe.cjs} +3 -3
- package/dist/{reasoning-activity-CO0Ab1Za.cjs.map → reasoning-activity-BVviIdMe.cjs.map} +1 -1
- package/dist/{reasoning-activity-D3oCzL58.js → reasoning-activity-OM1-hbCV.js} +3 -3
- package/dist/{reasoning-activity-D3oCzL58.js.map → reasoning-activity-OM1-hbCV.js.map} +1 -1
- package/dist/{relative-timestamp-D-IvjsVb.cjs → relative-timestamp-BlmN8Vjn.cjs} +2 -2
- package/dist/{relative-timestamp-D-IvjsVb.cjs.map → relative-timestamp-BlmN8Vjn.cjs.map} +1 -1
- package/dist/{relative-timestamp-wERh5vUE.js → relative-timestamp-Cnp4VeLp.js} +2 -2
- package/dist/{relative-timestamp-wERh5vUE.js.map → relative-timestamp-Cnp4VeLp.js.map} +1 -1
- package/dist/resize/panel-drawer.cjs.js +1 -1
- package/dist/resize/panel-drawer.es.js +1 -1
- package/dist/{sankey-chart-D-xMiO2u.js → sankey-chart-D4Idjtth.js} +2 -2
- package/dist/sankey-chart-D4Idjtth.js.map +1 -0
- package/dist/{sankey-chart-S7iF7d0E.cjs → sankey-chart-DfVMZpz5.cjs} +2 -2
- package/dist/sankey-chart-DfVMZpz5.cjs.map +1 -0
- package/dist/{search-field-block-Cj9lJsYi.js → search-field-block-BPJh5yuW.js} +3 -3
- package/dist/{search-field-block-Cj9lJsYi.js.map → search-field-block-BPJh5yuW.js.map} +1 -1
- package/dist/{search-field-block-B1eqMV8x.cjs → search-field-block-DRa-ZNQj.cjs} +3 -3
- package/dist/{search-field-block-B1eqMV8x.cjs.map → search-field-block-DRa-ZNQj.cjs.map} +1 -1
- package/dist/{section-B5g_0tUo.js → section-BfEsNViI.js} +2 -2
- package/dist/{section-B5g_0tUo.js.map → section-BfEsNViI.js.map} +1 -1
- package/dist/{section-Bbp-NIR9.cjs → section-dBeXxS69.cjs} +2 -2
- package/dist/{section-Bbp-NIR9.cjs.map → section-dBeXxS69.cjs.map} +1 -1
- package/dist/segmented-control--I3IgW21.cjs +157 -0
- package/dist/segmented-control--I3IgW21.cjs.map +1 -0
- package/dist/segmented-control-BxeiypPR.js +135 -0
- package/dist/segmented-control-BxeiypPR.js.map +1 -0
- package/dist/{select-C0ZGSJYa.cjs → select-DBY9LQFQ.cjs} +2 -2
- package/dist/{select-C0ZGSJYa.cjs.map → select-DBY9LQFQ.cjs.map} +1 -1
- package/dist/{select-ch8imm15.js → select-DZeNf-kI.js} +2 -2
- package/dist/{select-ch8imm15.js.map → select-DZeNf-kI.js.map} +1 -1
- package/dist/{select-field-block-_ZUzUs7l.js → select-field-block-C_x9wNpU.js} +3 -3
- package/dist/{select-field-block-_ZUzUs7l.js.map → select-field-block-C_x9wNpU.js.map} +1 -1
- package/dist/{select-field-block-Dy_N3tWv.cjs → select-field-block-D8AMzoQT.cjs} +3 -3
- package/dist/{select-field-block-Dy_N3tWv.cjs.map → select-field-block-D8AMzoQT.cjs.map} +1 -1
- package/dist/{settings-row-2hq9Ww8Z.js → settings-row-C1JZDdz_.js} +4 -4
- package/dist/settings-row-C1JZDdz_.js.map +1 -0
- package/dist/{settings-row-BMRADph-.cjs → settings-row-C7YKfUgY.cjs} +4 -4
- package/dist/settings-row-C7YKfUgY.cjs.map +1 -0
- package/dist/{side-dialog-D2O3Y7GB.js → side-dialog-DCzCcZs6.js} +5 -5
- package/dist/{side-dialog-D2O3Y7GB.js.map → side-dialog-DCzCcZs6.js.map} +1 -1
- package/dist/{side-dialog-7P9aEC4v.cjs → side-dialog-DFnD1498.cjs} +5 -5
- package/dist/{side-dialog-7P9aEC4v.cjs.map → side-dialog-DFnD1498.cjs.map} +1 -1
- package/dist/{signal-activity-1REUU8T_.js → signal-activity-DW2ExjIp.js} +3 -3
- package/dist/{signal-activity-1REUU8T_.js.map → signal-activity-DW2ExjIp.js.map} +1 -1
- package/dist/{signal-activity-4OJb4kp6.cjs → signal-activity-byCTRP86.cjs} +3 -3
- package/dist/{signal-activity-4OJb4kp6.cjs.map → signal-activity-byCTRP86.cjs.map} +1 -1
- package/dist/{span-payload-primitives-CbXrqcs-.cjs → span-payload-primitives-D0mhsndj.cjs} +3 -3
- package/dist/{span-payload-primitives-CbXrqcs-.cjs.map → span-payload-primitives-D0mhsndj.cjs.map} +1 -1
- package/dist/{span-payload-primitives-CEflnpwW.js → span-payload-primitives-DL1Kr0cu.js} +3 -3
- package/dist/{span-payload-primitives-CEflnpwW.js.map → span-payload-primitives-DL1Kr0cu.js.map} +1 -1
- package/dist/src/domains/chat/tools/tool-card-kind.d.ts +2 -0
- package/dist/src/domains/metrics/components/metrics-utils.d.ts +1 -1
- package/dist/src/domains/traces/components/trace-data-panel-view.stories.d.ts +2 -0
- package/dist/src/domains/traces/hooks/use-trace-query.d.ts +1 -1
- package/dist/src/ds/components/Badge/Badge.d.ts +3 -3
- package/dist/src/ds/components/ButtonsGroup/buttons-group.d.ts +1 -0
- package/dist/src/ds/components/ButtonsGroup/buttons-group.stories.d.ts +0 -6
- package/dist/src/ds/components/CollapsibleBox/collapsible-box.d.ts +10 -0
- package/dist/src/ds/components/CollapsibleBox/collapsible-box.stories.d.ts +11 -0
- package/dist/src/ds/components/CollapsibleBox/index.d.ts +2 -0
- package/dist/src/ds/components/CollapsibleBox/use-collapsible-box.d.ts +14 -0
- package/dist/src/ds/components/Combobox/combobox-styles.d.ts +1 -1
- package/dist/src/ds/components/SegmentedControl/index.d.ts +1 -0
- package/dist/src/ds/components/SegmentedControl/segmented-control.d.ts +38 -0
- package/dist/src/ds/components/SegmentedControl/segmented-control.stories.d.ts +11 -0
- package/dist/src/ds/components/ThemeToggle/theme-toggle.d.ts +12 -30
- package/dist/src/ds/components/ThemeToggle/theme-toggle.stories.d.ts +0 -1
- package/dist/src/ds/components/TokenBudget/tones.d.ts +1 -1
- package/dist/src/ds/components/Workflow/cards/workflow-card-badge-utils.d.ts +2 -2
- package/dist/src/ds/components/ai/plan/plan.d.ts +1 -1
- package/dist/src/ds/tokens/colors.d.ts +31 -28
- package/dist/src/lib/colors.d.ts +1 -1
- package/dist/style.css +517 -184
- package/dist/{tabs-content-h2qqD8t-.js → tabs-content-CwbkTutf.js} +2 -2
- package/dist/{tabs-content-h2qqD8t-.js.map → tabs-content-CwbkTutf.js.map} +1 -1
- package/dist/{tabs-content-DQNRMjup.cjs → tabs-content-DnscxcLI.cjs} +2 -2
- package/dist/{tabs-content-DQNRMjup.cjs.map → tabs-content-DnscxcLI.cjs.map} +1 -1
- package/dist/{tabs-root-BqC8X_h6.cjs → tabs-root-C-ePF1y9.cjs} +4 -4
- package/dist/tabs-root-C-ePF1y9.cjs.map +1 -0
- package/dist/{tabs-root-4vL8SHCO.js → tabs-root-lrZZ3KwH.js} +4 -4
- package/dist/tabs-root-lrZZ3KwH.js.map +1 -0
- package/dist/{tabs-tab-lm4xyjtD.cjs → tabs-tab-BmIBFifi.cjs} +2 -2
- package/dist/{tabs-tab-lm4xyjtD.cjs.map → tabs-tab-BmIBFifi.cjs.map} +1 -1
- package/dist/{tabs-tab-7e2as-AV.js → tabs-tab-DoPSW-1s.js} +2 -2
- package/dist/{tabs-tab-7e2as-AV.js.map → tabs-tab-DoPSW-1s.js.map} +1 -1
- package/dist/{text-field-block-DYOWjPgO.cjs → text-field-block-DUntfMPu.cjs} +2 -2
- package/dist/{text-field-block-DYOWjPgO.cjs.map → text-field-block-DUntfMPu.cjs.map} +1 -1
- package/dist/{text-field-block-DJsOk8dJ.js → text-field-block-DZaGiu5D.js} +2 -2
- package/dist/{text-field-block-DJsOk8dJ.js.map → text-field-block-DZaGiu5D.js.map} +1 -1
- package/dist/{textarea-field-block-DqTd31gF.js → textarea-field-block-BscOSlvI.js} +2 -2
- package/dist/{textarea-field-block-DqTd31gF.js.map → textarea-field-block-BscOSlvI.js.map} +1 -1
- package/dist/{textarea-field-block-C5fPL2Hn.cjs → textarea-field-block-CKAhmLrz.cjs} +2 -2
- package/dist/{textarea-field-block-C5fPL2Hn.cjs.map → textarea-field-block-CKAhmLrz.cjs.map} +1 -1
- package/dist/{thread-list-DGI6M6if.js → thread-list-BTpezI4f.js} +2 -2
- package/dist/{thread-list-DGI6M6if.js.map → thread-list-BTpezI4f.js.map} +1 -1
- package/dist/{thread-list-DwASH1Vl.cjs → thread-list-Drcptd4x.cjs} +2 -2
- package/dist/{thread-list-DwASH1Vl.cjs.map → thread-list-Drcptd4x.cjs.map} +1 -1
- package/dist/{time-picker-CfZbLgMm.js → time-picker-BElZALzM.js} +2 -2
- package/dist/{time-picker-CfZbLgMm.js.map → time-picker-BElZALzM.js.map} +1 -1
- package/dist/{time-picker-C0DCPWpR.cjs → time-picker-_QJdolkZ.cjs} +2 -2
- package/dist/{time-picker-C0DCPWpR.cjs.map → time-picker-_QJdolkZ.cjs.map} +1 -1
- package/dist/tokens.cjs.js +31 -28
- package/dist/tokens.cjs.js.map +1 -1
- package/dist/tokens.es.js +31 -28
- package/dist/tokens.es.js.map +1 -1
- package/dist/{tones-DVtXIMPY.js → tones-RD3VjqiN.js} +2 -2
- package/dist/tones-RD3VjqiN.js.map +1 -0
- package/dist/{tones-BRAQR5Yb.cjs → tones-koH7QNLH.cjs} +2 -2
- package/dist/tones-koH7QNLH.cjs.map +1 -0
- package/dist/{tool-approval-xZvYiuBP.js → tool-approval-BNJ6MpnV.js} +3 -3
- package/dist/tool-approval-BNJ6MpnV.js.map +1 -0
- package/dist/{tool-approval-BAER9nxR.cjs → tool-approval-DOPxugSv.cjs} +3 -3
- package/dist/tool-approval-DOPxugSv.cjs.map +1 -0
- package/dist/{tool-call-arguments-D7PMJ6vj.js → tool-call-arguments-B1MghuMZ.js} +3 -3
- package/dist/{tool-call-arguments-D7PMJ6vj.js.map → tool-call-arguments-B1MghuMZ.js.map} +1 -1
- package/dist/{tool-call-arguments-ynBfg2dY.cjs → tool-call-arguments-CQYR65FB.cjs} +3 -3
- package/dist/{tool-call-arguments-ynBfg2dY.cjs.map → tool-call-arguments-CQYR65FB.cjs.map} +1 -1
- package/dist/{tool-call-group-9Dtupqev.cjs → tool-call-group-D_ioE9hT.cjs} +3 -3
- package/dist/tool-call-group-D_ioE9hT.cjs.map +1 -0
- package/dist/{tool-call-group-DJX7eUYY.js → tool-call-group-ZuYxpyDs.js} +3 -3
- package/dist/tool-call-group-ZuYxpyDs.js.map +1 -0
- package/dist/{tool-call-mono-gKG9Ek1m.js → tool-call-mono-CC6uzvhS.js} +2 -2
- package/dist/{tool-call-mono-gKG9Ek1m.js.map → tool-call-mono-CC6uzvhS.js.map} +1 -1
- package/dist/{tool-call-mono-DFSfVZ6E.cjs → tool-call-mono-DXtb4UMm.cjs} +2 -2
- package/dist/{tool-call-mono-DFSfVZ6E.cjs.map → tool-call-mono-DXtb4UMm.cjs.map} +1 -1
- package/dist/{tool-call-output-DEoCE_Xn.js → tool-call-output-COq3kB-f.js} +3 -3
- package/dist/tool-call-output-COq3kB-f.js.map +1 -0
- package/dist/{tool-call-output-Dl4sVfCy.cjs → tool-call-output-ht3k1qLQ.cjs} +3 -3
- package/dist/tool-call-output-ht3k1qLQ.cjs.map +1 -0
- package/dist/{tool-card-DRqhTx-u.cjs → tool-card-BfMA9tub.cjs} +5 -5
- package/dist/tool-card-BfMA9tub.cjs.map +1 -0
- package/dist/{tool-card-BA1YcDoS.js → tool-card-DPrShK-9.js} +5 -5
- package/dist/tool-card-DPrShK-9.js.map +1 -0
- package/dist/{traces-data-list-CU93pUfj.cjs → traces-data-list-BsAYYJ9t.cjs} +4 -4
- package/dist/{traces-data-list-CU93pUfj.cjs.map → traces-data-list-BsAYYJ9t.cjs.map} +1 -1
- package/dist/{traces-data-list-DaedGcID.js → traces-data-list-CnNpGVRN.js} +4 -4
- package/dist/{traces-data-list-DaedGcID.js.map → traces-data-list-CnNpGVRN.js.map} +1 -1
- package/dist/use-collapsible-box-CCvsF_a9.js +54 -0
- package/dist/use-collapsible-box-CCvsF_a9.js.map +1 -0
- package/dist/use-collapsible-box-CbQOkokQ.cjs +58 -0
- package/dist/use-collapsible-box-CbQOkokQ.cjs.map +1 -0
- package/dist/{use-workflow-graph-runtime-D0ODPlNB.cjs → use-workflow-graph-runtime-CIs2HzoP.cjs} +3 -3
- package/dist/{use-workflow-graph-runtime-D0ODPlNB.cjs.map → use-workflow-graph-runtime-CIs2HzoP.cjs.map} +1 -1
- package/dist/{use-workflow-graph-runtime-XL5zreeR.js → use-workflow-graph-runtime-CexS1ECI.js} +3 -3
- package/dist/{use-workflow-graph-runtime-XL5zreeR.js.map → use-workflow-graph-runtime-CexS1ECI.js.map} +1 -1
- package/dist/utils/colors.cjs.js +2 -2
- package/dist/utils/colors.cjs.js.map +1 -1
- package/dist/utils/colors.es.js +2 -2
- package/dist/utils/colors.es.js.map +1 -1
- package/dist/{workflow-code-dialog-content-Iz2Omi1P.js → workflow-code-dialog-content-BQBHzRfZ.js} +3 -3
- package/dist/{workflow-code-dialog-content-Iz2Omi1P.js.map → workflow-code-dialog-content-BQBHzRfZ.js.map} +1 -1
- package/dist/{workflow-code-dialog-content-vLneZlMd.cjs → workflow-code-dialog-content-COlaHWtW.cjs} +3 -3
- package/dist/{workflow-code-dialog-content-vLneZlMd.cjs.map → workflow-code-dialog-content-COlaHWtW.cjs.map} +1 -1
- package/dist/{workflow-condition-card-B0Va5Amx.js → workflow-condition-card-3J-As62x.js} +10 -10
- package/dist/{workflow-condition-card-B0Va5Amx.js.map → workflow-condition-card-3J-As62x.js.map} +1 -1
- package/dist/{workflow-condition-card-CfjhZb0m.cjs → workflow-condition-card-BjEAp0t6.cjs} +10 -10
- package/dist/{workflow-condition-card-CfjhZb0m.cjs.map → workflow-condition-card-BjEAp0t6.cjs.map} +1 -1
- package/dist/{workflow-data-edge-view-o7akvbpB.js → workflow-data-edge-view-BjfKYysc.js} +2 -2
- package/dist/{workflow-data-edge-view-o7akvbpB.js.map → workflow-data-edge-view-BjfKYysc.js.map} +1 -1
- package/dist/{workflow-data-edge-view-DXeWURnc.cjs → workflow-data-edge-view-BvhW_gux.cjs} +2 -2
- package/dist/{workflow-data-edge-view-DXeWURnc.cjs.map → workflow-data-edge-view-BvhW_gux.cjs.map} +1 -1
- package/dist/{workflow-debug-controls-Bcb4vcek.cjs → workflow-debug-controls-VbxiluNZ.cjs} +3 -3
- package/dist/{workflow-debug-controls-Bcb4vcek.cjs.map → workflow-debug-controls-VbxiluNZ.cjs.map} +1 -1
- package/dist/{workflow-debug-controls-DULCFa4s.js → workflow-debug-controls-tty6gLX2.js} +3 -3
- package/dist/{workflow-debug-controls-DULCFa4s.js.map → workflow-debug-controls-tty6gLX2.js.map} +1 -1
- package/dist/{workflow-edge-data-button-CX-eSbSB.cjs → workflow-edge-data-button-BTsPGDpk.cjs} +4 -4
- package/dist/{workflow-edge-data-button-CX-eSbSB.cjs.map → workflow-edge-data-button-BTsPGDpk.cjs.map} +1 -1
- package/dist/{workflow-edge-data-button-BuZzeN2n.js → workflow-edge-data-button-CIP46GJE.js} +4 -4
- package/dist/{workflow-edge-data-button-BuZzeN2n.js.map → workflow-edge-data-button-CIP46GJE.js.map} +1 -1
- package/dist/{workflow-step-action-Cf_XmOwj.js → workflow-step-action-B3coZwPr.js} +3 -3
- package/dist/{workflow-step-action-Cf_XmOwj.js.map → workflow-step-action-B3coZwPr.js.map} +1 -1
- package/dist/{workflow-step-action-JMkWtObA.cjs → workflow-step-action-COOlMQGX.cjs} +3 -3
- package/dist/{workflow-step-action-JMkWtObA.cjs.map → workflow-step-action-COOlMQGX.cjs.map} +1 -1
- package/package.json +9 -9
- package/theme/colors.css +66 -66
- package/theme/data-viz.css +3 -3
- package/theme/status.css +89 -71
- package/theme/surfaces.css +4 -1
- package/dist/Badge-H8K5WrXg.cjs.map +0 -1
- package/dist/Badge-Q_pCeeGW.js.map +0 -1
- package/dist/Button-BnmR2HRc.cjs.map +0 -1
- package/dist/Button-C6eUqcPI.js.map +0 -1
- package/dist/EmptyState-CJ5KC4Db.cjs.map +0 -1
- package/dist/EmptyState-CynkaZd1.js.map +0 -1
- package/dist/activity-8egTNbaI.cjs.map +0 -1
- package/dist/activity-Duth8KP_.js.map +0 -1
- package/dist/ask-user-Crg1O-o6.js.map +0 -1
- package/dist/ask-user-DJXmLJzy.cjs.map +0 -1
- package/dist/code-editor-BXchPl_F.cjs.map +0 -1
- package/dist/code-editor-Cltwid7c.js.map +0 -1
- package/dist/data-code-section-Bd2Xnckz.js.map +0 -1
- package/dist/data-code-section-D5b6_jcB.cjs.map +0 -1
- package/dist/field-block-BIDi9Bvc.cjs.map +0 -1
- package/dist/field-block-DpejZ6U6.js.map +0 -1
- package/dist/metrics-card-CloSmyRQ.js.map +0 -1
- package/dist/metrics-card-HmQJHDNa.cjs.map +0 -1
- package/dist/metrics-kpi-card-CW24YjZp.cjs.map +0 -1
- package/dist/metrics-kpi-card-DLDT28IB.js.map +0 -1
- package/dist/notification-activity-B1_2BPe_.js.map +0 -1
- package/dist/notification-activity-BAn2fhYd.cjs.map +0 -1
- package/dist/plan-DJfH1c_u.js.map +0 -1
- package/dist/plan-ZKAT5frg.cjs.map +0 -1
- package/dist/sankey-chart-D-xMiO2u.js.map +0 -1
- package/dist/sankey-chart-S7iF7d0E.cjs.map +0 -1
- package/dist/settings-row-2hq9Ww8Z.js.map +0 -1
- package/dist/settings-row-BMRADph-.cjs.map +0 -1
- package/dist/tabs-root-4vL8SHCO.js.map +0 -1
- package/dist/tabs-root-BqC8X_h6.cjs.map +0 -1
- package/dist/tones-BRAQR5Yb.cjs.map +0 -1
- package/dist/tones-DVtXIMPY.js.map +0 -1
- package/dist/tool-approval-BAER9nxR.cjs.map +0 -1
- package/dist/tool-approval-xZvYiuBP.js.map +0 -1
- package/dist/tool-call-group-9Dtupqev.cjs.map +0 -1
- package/dist/tool-call-group-DJX7eUYY.js.map +0 -1
- package/dist/tool-call-output-DEoCE_Xn.js.map +0 -1
- package/dist/tool-call-output-Dl4sVfCy.cjs.map +0 -1
- package/dist/tool-card-BA1YcDoS.js.map +0 -1
- package/dist/tool-card-DRqhTx-u.cjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plan-DJfH1c_u.js","sources":["../src/ds/components/ai/plan/plan.tsx"],"sourcesContent":["import { CheckIcon, ClipboardList, CopyIcon, Maximize2, Minimize2 } from 'lucide-react';\nimport { createContext, useContext, useLayoutEffect, useRef, useState } from 'react';\nimport type { ComponentProps, ReactNode } from 'react';\n\nimport { Badge } from '@/ds/components/Badge';\nimport { Button } from '@/ds/components/Button';\nimport { MarkdownRenderer } from '@/ds/components/MarkdownRenderer';\nimport { Txt } from '@/ds/components/Txt';\nimport { Icon } from '@/ds/icons/Icon';\nimport { useCopyToClipboard } from '@/hooks/use-copy-to-clipboard';\nimport { cn } from '@/lib/utils';\n\nconst DEFAULT_COLLAPSED_HEIGHT = 220;\n\ninterface PlanContextValue {\n collapsedHeight: number;\n isExpanded: boolean;\n /** Whether the rendered content overflows the collapsed height (measured, not estimated). */\n isClipped: boolean;\n setClipped: (clipped: boolean) => void;\n toggleExpanded: () => void;\n}\n\nconst PlanContext = createContext<PlanContextValue | null>(null);\n\nconst usePlanContext = () => {\n const context = useContext(PlanContext);\n\n if (!context) {\n throw new Error('Plan compound components must be rendered inside <Plan>.');\n }\n\n return context;\n};\n\nexport interface PlanProps extends ComponentProps<'div'> {\n collapsedHeight?: number;\n}\n\nexport function Plan({ children, collapsedHeight = DEFAULT_COLLAPSED_HEIGHT, className, ...props }: PlanProps) {\n const [isExpanded, setIsExpanded] = useState(false);\n const [isClipped, setClipped] = useState(false);\n\n const toggleExpanded = () => {\n setIsExpanded(current => !current);\n };\n\n const contextValue = {\n collapsedHeight,\n isExpanded,\n isClipped,\n setClipped,\n toggleExpanded,\n };\n\n return (\n <PlanContext.Provider value={contextValue}>\n <div data-slot=\"plan\" className={cn('w-full overflow-hidden rounded-xl bg-card', className)} {...props}>\n {children}\n </div>\n </PlanContext.Provider>\n );\n}\n\nexport type PlanHeaderProps = ComponentProps<'div'>;\n\nexport function PlanHeader({ children, className, ...props }: PlanHeaderProps) {\n return (\n <div\n data-slot=\"plan-header\"\n className={cn('flex min-h-10 items-center justify-between gap-3 px-4 pt-3', className)}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nexport type PlanLabelProps = ComponentProps<'div'>;\n\nexport function PlanLabel({ children = 'Plan', className, ...props }: PlanLabelProps) {\n return (\n <div data-slot=\"plan-label\" className={cn('flex min-w-0 items-center gap-2', className)} {...props}>\n <Icon size=\"xs\" className=\"text-muted-foreground\">\n <ClipboardList />\n </Icon>\n <Txt as=\"span\" variant=\"caption\" tone=\"muted\">\n {children}\n </Txt>\n </div>\n );\n}\n\nexport type PlanHeaderActionsProps = ComponentProps<'div'>;\n\nexport function PlanHeaderActions({ children, className, ...props }: PlanHeaderActionsProps) {\n return (\n <div data-slot=\"plan-header-actions\" className={cn('flex shrink-0 items-center gap-1', className)} {...props}>\n {children}\n </div>\n );\n}\n\nexport type PlanStatusProps = Omit<ComponentProps<typeof Badge>, 'icon' | 'indicator' | 'size'>;\n\nexport function PlanStatus({ children, variant = 'neutral', ...props }: PlanStatusProps) {\n return (\n <Badge {...props} variant={variant} size=\"xs\" indicator=\"dot\">\n {children}\n </Badge>\n );\n}\n\nexport interface PlanCopyButtonProps extends Omit<\n ComponentProps<typeof Button>,\n 'aria-label' | 'children' | 'onClick' | 'size' | 'tooltip' | 'type' | 'variant'\n> {\n content: string;\n}\n\nexport function PlanCopyButton({ content, ...props }: PlanCopyButtonProps) {\n const { isCopied, handleCopy } = useCopyToClipboard({\n text: content,\n copiedDuration: 1500,\n showToast: false,\n });\n\n return (\n <Button\n {...props}\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n tooltip=\"Copy plan\"\n aria-label=\"Copy plan\"\n onClick={handleCopy}\n >\n {isCopied ? <CheckIcon /> : <CopyIcon />}\n </Button>\n );\n}\n\nexport type PlanBodyProps = ComponentProps<'div'>;\n\nexport function PlanBody({ children, className, ...props }: PlanBodyProps) {\n return (\n <div data-slot=\"plan-body\" className={cn('px-5 pt-4 pb-5', className)} {...props}>\n {children}\n </div>\n );\n}\n\nexport type PlanIntroProps = ComponentProps<'div'>;\n\nexport function PlanIntro({ children, className, ...props }: PlanIntroProps) {\n return (\n <div data-slot=\"plan-intro\" className={cn('mb-5 space-y-1', className)} {...props}>\n {children}\n </div>\n );\n}\n\nexport interface PlanTitleProps extends Omit<ComponentProps<typeof Txt>, 'as' | 'children' | 'variant'> {\n children: ReactNode;\n}\n\nexport function PlanTitle({ children, className, ...props }: PlanTitleProps) {\n return (\n <Txt {...props} as=\"h3\" variant=\"heading\" tone=\"ink\" className={className}>\n {children}\n </Txt>\n );\n}\n\nexport interface PlanPathProps extends Omit<\n ComponentProps<typeof Txt>,\n 'as' | 'children' | 'font' | 'title' | 'variant'\n> {\n children: string;\n}\n\nconst getFileName = (path: string) => {\n const segments = path.split(/[\\\\/]/).filter(Boolean);\n return segments[segments.length - 1] ?? path;\n};\n\nexport function PlanPath({ children, className, ...props }: PlanPathProps) {\n return (\n <Txt\n {...props}\n as=\"p\"\n variant=\"meta\"\n tone=\"muted\"\n font=\"mono\"\n title={children}\n className={cn('max-w-full truncate overflow-hidden', className)}\n >\n {getFileName(children)}\n </Txt>\n );\n}\n\nexport type PlanMainProps = ComponentProps<'div'>;\n\nexport function PlanMain({ children, className, ...props }: PlanMainProps) {\n return (\n <div data-slot=\"plan-main\" className={cn('relative', className)} {...props}>\n {children}\n </div>\n );\n}\n\nexport interface PlanContentProps extends Omit<ComponentProps<'div'>, 'children'> {\n children: string;\n}\n\nexport function PlanContent({ children, className, style, ...props }: PlanContentProps) {\n const { collapsedHeight, isExpanded, isClipped, setClipped } = usePlanContext();\n const contentRef = useRef<HTMLDivElement>(null);\n\n // Measure the rendered content against the collapsed height so the clip hint\n // and expand control track actual overflow — not an estimate of it.\n useLayoutEffect(() => {\n const element = contentRef.current;\n if (!element) return;\n\n const measure = () => setClipped(element.scrollHeight > collapsedHeight);\n measure();\n\n if (typeof ResizeObserver === 'undefined') return;\n const observer = new ResizeObserver(measure);\n observer.observe(element);\n return () => observer.disconnect();\n }, [children, collapsedHeight, setClipped]);\n\n const showClipHint = !isExpanded && isClipped;\n\n return (\n <div\n data-slot=\"plan-content\"\n // The clip hint masks the content itself, so it reads correctly on any card background.\n {...(showClipHint ? { 'data-clipped': '' } : {})}\n className={cn(\n 'relative',\n !isExpanded && 'overflow-hidden',\n showClipHint && 'mask-b-from-60% mask-b-to-100%',\n className,\n )}\n style={!isExpanded ? { ...style, maxHeight: collapsedHeight } : style}\n {...props}\n >\n <div\n ref={contentRef}\n className=\"[&_code]:bg-muted [&_h1]:text-title [&_h2]:text-heading [&_h3]:text-subheading [&_p]:text-body\"\n >\n <MarkdownRenderer className=\"text-foreground\">{children}</MarkdownRenderer>\n </div>\n </div>\n );\n}\n\nexport interface PlanFileProps extends Omit<ComponentProps<'div'>, 'children'> {\n children: string;\n}\n\nexport function PlanFile({ children, className, ...props }: PlanFileProps) {\n return (\n <div data-slot=\"plan-file\" className={className} {...props}>\n <Txt as=\"p\" variant=\"meta\" tone=\"muted\" className=\"mb-2\">\n Plan file\n </Txt>\n <Txt as=\"p\" variant=\"caption\" tone=\"ink\" font=\"mono\" className=\"break-all\">\n {children}\n </Txt>\n </div>\n );\n}\n\nexport type PlanControlsProps = ComponentProps<'div'>;\n\nexport function PlanControls({ children, className, ...props }: PlanControlsProps) {\n const hasActions = Boolean(children);\n\n return (\n <div\n data-slot=\"plan-controls\"\n className={cn('relative z-10 mt-4 flex justify-center empty:hidden', className)}\n {...props}\n >\n {hasActions ? (\n <div className=\"grid w-full max-w-sm grid-cols-[1fr_auto_1fr] items-center gap-2 px-10\">{children}</div>\n ) : (\n <PlanExpandButton />\n )}\n </div>\n );\n}\n\nexport type PlanActionGroupProps = ComponentProps<'div'>;\n\nexport function PlanActionGroup({ children, className, ...props }: PlanActionGroupProps) {\n return (\n <div data-slot=\"plan-action-group\" className={cn('flex justify-start gap-2 empty:hidden', className)} {...props}>\n {children}\n </div>\n );\n}\n\nexport type PlanExpandButtonProps = Omit<\n ComponentProps<typeof Button>,\n 'aria-label' | 'children' | 'onClick' | 'size' | 'type'\n>;\n\nexport function PlanExpandButton({ className, variant = 'default', ...props }: PlanExpandButtonProps) {\n const { isExpanded, isClipped, toggleExpanded } = usePlanContext();\n\n // Nothing to expand: the collapsed card already shows the whole plan.\n if (!isClipped && !isExpanded) return null;\n\n return (\n <Button\n {...props}\n className={cn('shrink-0 whitespace-nowrap', className)}\n type=\"button\"\n variant={variant}\n size=\"sm\"\n aria-label={isExpanded ? 'Collapse plan' : 'Expand plan'}\n onClick={toggleExpanded}\n icon={isExpanded ? <Minimize2 /> : <Maximize2 />}\n >\n {isExpanded ? 'Collapse plan' : 'Expand plan'}\n </Button>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plan-ZKAT5frg.cjs","sources":["../src/ds/components/ai/plan/plan.tsx"],"sourcesContent":["import { CheckIcon, ClipboardList, CopyIcon, Maximize2, Minimize2 } from 'lucide-react';\nimport { createContext, useContext, useLayoutEffect, useRef, useState } from 'react';\nimport type { ComponentProps, ReactNode } from 'react';\n\nimport { Badge } from '@/ds/components/Badge';\nimport { Button } from '@/ds/components/Button';\nimport { MarkdownRenderer } from '@/ds/components/MarkdownRenderer';\nimport { Txt } from '@/ds/components/Txt';\nimport { Icon } from '@/ds/icons/Icon';\nimport { useCopyToClipboard } from '@/hooks/use-copy-to-clipboard';\nimport { cn } from '@/lib/utils';\n\nconst DEFAULT_COLLAPSED_HEIGHT = 220;\n\ninterface PlanContextValue {\n collapsedHeight: number;\n isExpanded: boolean;\n /** Whether the rendered content overflows the collapsed height (measured, not estimated). */\n isClipped: boolean;\n setClipped: (clipped: boolean) => void;\n toggleExpanded: () => void;\n}\n\nconst PlanContext = createContext<PlanContextValue | null>(null);\n\nconst usePlanContext = () => {\n const context = useContext(PlanContext);\n\n if (!context) {\n throw new Error('Plan compound components must be rendered inside <Plan>.');\n }\n\n return context;\n};\n\nexport interface PlanProps extends ComponentProps<'div'> {\n collapsedHeight?: number;\n}\n\nexport function Plan({ children, collapsedHeight = DEFAULT_COLLAPSED_HEIGHT, className, ...props }: PlanProps) {\n const [isExpanded, setIsExpanded] = useState(false);\n const [isClipped, setClipped] = useState(false);\n\n const toggleExpanded = () => {\n setIsExpanded(current => !current);\n };\n\n const contextValue = {\n collapsedHeight,\n isExpanded,\n isClipped,\n setClipped,\n toggleExpanded,\n };\n\n return (\n <PlanContext.Provider value={contextValue}>\n <div data-slot=\"plan\" className={cn('w-full overflow-hidden rounded-xl bg-card', className)} {...props}>\n {children}\n </div>\n </PlanContext.Provider>\n );\n}\n\nexport type PlanHeaderProps = ComponentProps<'div'>;\n\nexport function PlanHeader({ children, className, ...props }: PlanHeaderProps) {\n return (\n <div\n data-slot=\"plan-header\"\n className={cn('flex min-h-10 items-center justify-between gap-3 px-4 pt-3', className)}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nexport type PlanLabelProps = ComponentProps<'div'>;\n\nexport function PlanLabel({ children = 'Plan', className, ...props }: PlanLabelProps) {\n return (\n <div data-slot=\"plan-label\" className={cn('flex min-w-0 items-center gap-2', className)} {...props}>\n <Icon size=\"xs\" className=\"text-muted-foreground\">\n <ClipboardList />\n </Icon>\n <Txt as=\"span\" variant=\"caption\" tone=\"muted\">\n {children}\n </Txt>\n </div>\n );\n}\n\nexport type PlanHeaderActionsProps = ComponentProps<'div'>;\n\nexport function PlanHeaderActions({ children, className, ...props }: PlanHeaderActionsProps) {\n return (\n <div data-slot=\"plan-header-actions\" className={cn('flex shrink-0 items-center gap-1', className)} {...props}>\n {children}\n </div>\n );\n}\n\nexport type PlanStatusProps = Omit<ComponentProps<typeof Badge>, 'icon' | 'indicator' | 'size'>;\n\nexport function PlanStatus({ children, variant = 'neutral', ...props }: PlanStatusProps) {\n return (\n <Badge {...props} variant={variant} size=\"xs\" indicator=\"dot\">\n {children}\n </Badge>\n );\n}\n\nexport interface PlanCopyButtonProps extends Omit<\n ComponentProps<typeof Button>,\n 'aria-label' | 'children' | 'onClick' | 'size' | 'tooltip' | 'type' | 'variant'\n> {\n content: string;\n}\n\nexport function PlanCopyButton({ content, ...props }: PlanCopyButtonProps) {\n const { isCopied, handleCopy } = useCopyToClipboard({\n text: content,\n copiedDuration: 1500,\n showToast: false,\n });\n\n return (\n <Button\n {...props}\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n tooltip=\"Copy plan\"\n aria-label=\"Copy plan\"\n onClick={handleCopy}\n >\n {isCopied ? <CheckIcon /> : <CopyIcon />}\n </Button>\n );\n}\n\nexport type PlanBodyProps = ComponentProps<'div'>;\n\nexport function PlanBody({ children, className, ...props }: PlanBodyProps) {\n return (\n <div data-slot=\"plan-body\" className={cn('px-5 pt-4 pb-5', className)} {...props}>\n {children}\n </div>\n );\n}\n\nexport type PlanIntroProps = ComponentProps<'div'>;\n\nexport function PlanIntro({ children, className, ...props }: PlanIntroProps) {\n return (\n <div data-slot=\"plan-intro\" className={cn('mb-5 space-y-1', className)} {...props}>\n {children}\n </div>\n );\n}\n\nexport interface PlanTitleProps extends Omit<ComponentProps<typeof Txt>, 'as' | 'children' | 'variant'> {\n children: ReactNode;\n}\n\nexport function PlanTitle({ children, className, ...props }: PlanTitleProps) {\n return (\n <Txt {...props} as=\"h3\" variant=\"heading\" tone=\"ink\" className={className}>\n {children}\n </Txt>\n );\n}\n\nexport interface PlanPathProps extends Omit<\n ComponentProps<typeof Txt>,\n 'as' | 'children' | 'font' | 'title' | 'variant'\n> {\n children: string;\n}\n\nconst getFileName = (path: string) => {\n const segments = path.split(/[\\\\/]/).filter(Boolean);\n return segments[segments.length - 1] ?? path;\n};\n\nexport function PlanPath({ children, className, ...props }: PlanPathProps) {\n return (\n <Txt\n {...props}\n as=\"p\"\n variant=\"meta\"\n tone=\"muted\"\n font=\"mono\"\n title={children}\n className={cn('max-w-full truncate overflow-hidden', className)}\n >\n {getFileName(children)}\n </Txt>\n );\n}\n\nexport type PlanMainProps = ComponentProps<'div'>;\n\nexport function PlanMain({ children, className, ...props }: PlanMainProps) {\n return (\n <div data-slot=\"plan-main\" className={cn('relative', className)} {...props}>\n {children}\n </div>\n );\n}\n\nexport interface PlanContentProps extends Omit<ComponentProps<'div'>, 'children'> {\n children: string;\n}\n\nexport function PlanContent({ children, className, style, ...props }: PlanContentProps) {\n const { collapsedHeight, isExpanded, isClipped, setClipped } = usePlanContext();\n const contentRef = useRef<HTMLDivElement>(null);\n\n // Measure the rendered content against the collapsed height so the clip hint\n // and expand control track actual overflow — not an estimate of it.\n useLayoutEffect(() => {\n const element = contentRef.current;\n if (!element) return;\n\n const measure = () => setClipped(element.scrollHeight > collapsedHeight);\n measure();\n\n if (typeof ResizeObserver === 'undefined') return;\n const observer = new ResizeObserver(measure);\n observer.observe(element);\n return () => observer.disconnect();\n }, [children, collapsedHeight, setClipped]);\n\n const showClipHint = !isExpanded && isClipped;\n\n return (\n <div\n data-slot=\"plan-content\"\n // The clip hint masks the content itself, so it reads correctly on any card background.\n {...(showClipHint ? { 'data-clipped': '' } : {})}\n className={cn(\n 'relative',\n !isExpanded && 'overflow-hidden',\n showClipHint && 'mask-b-from-60% mask-b-to-100%',\n className,\n )}\n style={!isExpanded ? { ...style, maxHeight: collapsedHeight } : style}\n {...props}\n >\n <div\n ref={contentRef}\n className=\"[&_code]:bg-muted [&_h1]:text-title [&_h2]:text-heading [&_h3]:text-subheading [&_p]:text-body\"\n >\n <MarkdownRenderer className=\"text-foreground\">{children}</MarkdownRenderer>\n </div>\n </div>\n );\n}\n\nexport interface PlanFileProps extends Omit<ComponentProps<'div'>, 'children'> {\n children: string;\n}\n\nexport function PlanFile({ children, className, ...props }: PlanFileProps) {\n return (\n <div data-slot=\"plan-file\" className={className} {...props}>\n <Txt as=\"p\" variant=\"meta\" tone=\"muted\" className=\"mb-2\">\n Plan file\n </Txt>\n <Txt as=\"p\" variant=\"caption\" tone=\"ink\" font=\"mono\" className=\"break-all\">\n {children}\n </Txt>\n </div>\n );\n}\n\nexport type PlanControlsProps = ComponentProps<'div'>;\n\nexport function PlanControls({ children, className, ...props }: PlanControlsProps) {\n const hasActions = Boolean(children);\n\n return (\n <div\n data-slot=\"plan-controls\"\n className={cn('relative z-10 mt-4 flex justify-center empty:hidden', className)}\n {...props}\n >\n {hasActions ? (\n <div className=\"grid w-full max-w-sm grid-cols-[1fr_auto_1fr] items-center gap-2 px-10\">{children}</div>\n ) : (\n <PlanExpandButton />\n )}\n </div>\n );\n}\n\nexport type PlanActionGroupProps = ComponentProps<'div'>;\n\nexport function PlanActionGroup({ children, className, ...props }: PlanActionGroupProps) {\n return (\n <div data-slot=\"plan-action-group\" className={cn('flex justify-start gap-2 empty:hidden', className)} {...props}>\n {children}\n </div>\n );\n}\n\nexport type PlanExpandButtonProps = Omit<\n ComponentProps<typeof Button>,\n 'aria-label' | 'children' | 'onClick' | 'size' | 'type'\n>;\n\nexport function PlanExpandButton({ className, variant = 'default', ...props }: PlanExpandButtonProps) {\n const { isExpanded, isClipped, toggleExpanded } = usePlanContext();\n\n // Nothing to expand: the collapsed card already shows the whole plan.\n if (!isClipped && !isExpanded) return null;\n\n return (\n <Button\n {...props}\n className={cn('shrink-0 whitespace-nowrap', className)}\n type=\"button\"\n variant={variant}\n size=\"sm\"\n aria-label={isExpanded ? 'Collapse plan' : 'Expand plan'}\n onClick={toggleExpanded}\n icon={isExpanded ? <Minimize2 /> : <Maximize2 />}\n >\n {isExpanded ? 'Collapse plan' : 'Expand plan'}\n </Button>\n );\n}\n"],"names":["createContext","useContext","useState","cn","jsx","jsxs","Icon","ClipboardList","Txt","Badge","useCopyToClipboard","Button","CheckIcon","CopyIcon","useRef","useLayoutEffect","MarkdownRenderer","Minimize2","Maximize2"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sankey-chart-D-xMiO2u.js","sources":["../src/ds/components/SankeyChart/sankey-chart-utils.ts","../src/ds/components/SankeyChart/sankeyColor.ts","../src/ds/components/SankeyChart/sankey-context.tsx","../src/ds/components/SankeyChart/use-sankey-hover-tooltip.ts","../src/ds/components/SankeyChart/sankey-portal-tooltip.tsx","../src/ds/components/SankeyChart/use-sankey-chart-measurements.ts","../src/ds/components/SankeyChart/use-sankey-geometry-transition.ts","../src/ds/components/SankeyChart/sankey-chart.tsx"],"sourcesContent":["export type SankeyChartRecord = Record<string, unknown>;\n\nexport type SankeyChartColumn = {\n id: string;\n label: string;\n};\n\nexport type SankeyChartNode = {\n id: string;\n name: string;\n label: string;\n column: SankeyChartColumn;\n value: string | number;\n displayValue?: number;\n};\n\nexport type SankeyChartLink = {\n id: string;\n source: number;\n target: number;\n value: number;\n displayValue: number;\n sourceNode: SankeyChartNode;\n targetNode: SankeyChartNode;\n records: Array<SankeyChartRecord>;\n};\n\nexport type SankeyChartGraph = {\n nodes: Array<SankeyChartNode>;\n links: Array<SankeyChartLink>;\n};\n\nexport type FixedSankeyNodeGeometry = {\n x: number;\n centerY: number;\n y: number;\n height: number;\n};\n\nexport type FixedSankeyLinkGeometry = {\n sourceX: number;\n targetX: number;\n sourceY: number;\n targetY: number;\n sourceWidth: number;\n targetWidth: number;\n};\n\nexport type FixedSankeyGeometry = {\n nodes: Map<string, FixedSankeyNodeGeometry>;\n links: Map<string, FixedSankeyLinkGeometry>;\n};\n\nexport type SankeyChartNodeSelection = {\n column: SankeyChartColumn;\n value: string | number;\n};\n\nexport type SankeyChartCurveSelection = {\n source: {\n column: SankeyChartColumn;\n value: string | number;\n };\n target: {\n column: SankeyChartColumn;\n value: string | number;\n };\n records: Array<SankeyChartRecord>;\n};\n\nconst EMPTY_GRAPH: SankeyChartGraph = { nodes: [], links: [] };\n\nexport function getSankeyChartValue(value: unknown): string | number | undefined {\n if (typeof value === 'string') {\n const trimmedValue = value.trim();\n return trimmedValue.length > 0 ? trimmedValue : undefined;\n }\n\n if (typeof value === 'number' && Number.isFinite(value)) return value;\n\n return undefined;\n}\n\nexport function reorderSankeyChartColumns(\n columns: Array<SankeyChartColumn>,\n startIndex: number,\n endIndex: number,\n): Array<SankeyChartColumn> {\n if (\n startIndex === endIndex ||\n startIndex < 0 ||\n endIndex < 0 ||\n startIndex >= columns.length ||\n endIndex >= columns.length\n ) {\n return columns;\n }\n\n const reorderedColumns = [...columns];\n const [movedColumn] = reorderedColumns.splice(startIndex, 1);\n if (!movedColumn) return columns;\n reorderedColumns.splice(endIndex, 0, movedColumn);\n return reorderedColumns;\n}\n\nexport function buildSankeyChartGraph(\n data: Array<SankeyChartRecord>,\n columns: Array<SankeyChartColumn>,\n getRecordWeight: (record: SankeyChartRecord) => number = () => 1,\n getRecordNodeId?: (record: SankeyChartRecord, column: SankeyChartColumn) => string,\n getRecordNodeLabel?: (record: SankeyChartRecord, column: SankeyChartColumn) => string,\n getRecordNodeValue?: (record: SankeyChartRecord, column: SankeyChartColumn) => number,\n getRecordLayoutWeight?: (record: SankeyChartRecord) => number,\n): SankeyChartGraph {\n if (columns.length < 2 || data.length === 0) return EMPTY_GRAPH;\n\n const nodes: Array<SankeyChartNode> = [];\n const nodeIndexes = new Map<string, number>();\n const linksById = new Map<string, SankeyChartLink>();\n\n const getNode = (\n column: SankeyChartColumn,\n value: string | number,\n label: string,\n displayValue: number | undefined,\n ): { node: SankeyChartNode; index: number } => {\n const id = createNodeId(column.id, value);\n const existingIndex = nodeIndexes.get(id);\n const existingNode = existingIndex === undefined ? undefined : nodes[existingIndex];\n if (existingIndex !== undefined && existingNode) return { node: existingNode, index: existingIndex };\n\n const node: SankeyChartNode = { id, name: String(value), label, column, value, displayValue };\n const index = nodes.length;\n nodes.push(node);\n nodeIndexes.set(id, index);\n return { node, index };\n };\n\n for (let columnIndex = 0; columnIndex < columns.length - 1; columnIndex += 1) {\n const sourceColumn = columns[columnIndex];\n const targetColumn = columns[columnIndex + 1];\n if (!sourceColumn || !targetColumn) continue;\n\n for (const record of data) {\n const displayWeight = getRecordWeight(record);\n const layoutWeight = getRecordLayoutWeight?.(record) ?? displayWeight;\n if (!Number.isFinite(displayWeight) || displayWeight < 0 || !Number.isFinite(layoutWeight) || layoutWeight < 0) {\n continue;\n }\n\n const sourceRecordValue = getSankeyChartValue(record[sourceColumn.id]);\n const targetRecordValue = getSankeyChartValue(record[targetColumn.id]);\n if (sourceRecordValue === undefined || targetRecordValue === undefined) continue;\n\n const sourceValue = getRecordNodeId\n ? getSankeyChartValue(getRecordNodeId(record, sourceColumn))\n : sourceRecordValue;\n const targetValue = getRecordNodeId\n ? getSankeyChartValue(getRecordNodeId(record, targetColumn))\n : targetRecordValue;\n if (sourceValue === undefined || targetValue === undefined) continue;\n\n const sourceLabel = getRecordNodeLabel?.(record, sourceColumn) ?? String(sourceRecordValue);\n const targetLabel = getRecordNodeLabel?.(record, targetColumn) ?? String(targetRecordValue);\n const sourceDisplayValue = getRecordNodeValue?.(record, sourceColumn);\n const targetDisplayValue = getRecordNodeValue?.(record, targetColumn);\n const source = getNode(\n sourceColumn,\n sourceValue,\n sourceLabel,\n sourceDisplayValue !== undefined && Number.isFinite(sourceDisplayValue) && sourceDisplayValue >= 0\n ? sourceDisplayValue\n : undefined,\n );\n const target = getNode(\n targetColumn,\n targetValue,\n targetLabel,\n targetDisplayValue !== undefined && Number.isFinite(targetDisplayValue) && targetDisplayValue >= 0\n ? targetDisplayValue\n : undefined,\n );\n const id = `${source.node.id}->${target.node.id}`;\n const existingLink = linksById.get(id);\n\n if (existingLink) {\n existingLink.value += layoutWeight;\n existingLink.displayValue += displayWeight;\n existingLink.records.push(record);\n } else {\n linksById.set(id, {\n id,\n source: source.index,\n target: target.index,\n value: layoutWeight,\n displayValue: displayWeight,\n sourceNode: source.node,\n targetNode: target.node,\n records: [record],\n });\n }\n }\n }\n\n return { nodes, links: [...linksById.values()] };\n}\n\nexport const SANKEY_NODE_WIDTH = 7;\n\n// mono faces we ship advance at ~0.6em — 0.62 biases toward truncating early\nconst LABEL_CHARACTER_WIDTH_RATIO = 0.62;\nconst LABEL_GUTTER = 16;\nconst LABEL_ELLIPSIS = '…';\n\nexport type SankeyLabelWidths = {\n centered: number;\n edge: number;\n};\n\nexport function getSankeyLabelWidths({\n chartWidth,\n columnCount,\n marginLeft,\n marginRight,\n}: {\n chartWidth: number;\n columnCount: number;\n marginLeft: number;\n marginRight: number;\n}): SankeyLabelWidths {\n if (chartWidth <= 0 || columnCount < 2) {\n return { centered: Number.POSITIVE_INFINITY, edge: Number.POSITIVE_INFINITY };\n }\n\n const columnPitch = (chartWidth - marginLeft - marginRight - SANKEY_NODE_WIDTH) / (columnCount - 1);\n const centered = Math.max(0, columnPitch - LABEL_GUTTER);\n // edge columns anchor at start/end, so their label spreads toward one neighbour instead of two\n const edge = Math.max(0, columnPitch + SANKEY_NODE_WIDTH / 2 - LABEL_GUTTER - centered / 2);\n\n return { centered, edge };\n}\n\nexport function truncateSankeyLabel(\n label: string,\n {\n fontSize,\n maxWidth,\n maxCharacters = Number.POSITIVE_INFINITY,\n }: { fontSize: number; maxWidth: number; maxCharacters?: number },\n): string {\n const widthLimit = Number.isFinite(maxWidth)\n ? Math.floor(maxWidth / (fontSize * LABEL_CHARACTER_WIDTH_RATIO))\n : Number.POSITIVE_INFINITY;\n const limit = Math.min(widthLimit, maxCharacters);\n\n if (label.length <= limit) return label;\n if (limit <= 1) return LABEL_ELLIPSIS;\n\n return `${label.slice(0, limit - 1).trimEnd()}${LABEL_ELLIPSIS}`;\n}\n\nexport function buildFixedSankeyGeometry(\n graph: SankeyChartGraph,\n {\n top,\n bottom,\n left,\n right,\n nodePadding,\n }: { top: number; bottom: number; left: number; right: number; nodePadding: number },\n): FixedSankeyGeometry {\n const nodes = new Map<string, FixedSankeyNodeGeometry>();\n const nodesByColumn = new Map<string, SankeyChartNode[]>();\n const currentNodeWeights = getSankeyChartCurrentNodeWeights(graph);\n\n for (const node of graph.nodes) {\n const columnNodes = nodesByColumn.get(node.column.id) ?? [];\n columnNodes.push(node);\n nodesByColumn.set(node.column.id, columnNodes);\n }\n\n const columns = [...nodesByColumn.values()];\n const slotHeights = columns.map(columnNodes =>\n Math.max(0, (bottom - top - nodePadding * Math.max(0, columnNodes.length - 1)) / columnNodes.length),\n );\n const maximumNodeHeight = Math.min(...slotHeights) * 0.6;\n\n columns.forEach((columnNodes, columnIndex) => {\n const slotHeight = slotHeights[columnIndex] ?? 0;\n const columnTotal = columnNodes.reduce(\n (total, node) => total + (node.displayValue ?? currentNodeWeights.get(node.id) ?? 0),\n 0,\n );\n const x = columns.length > 1 ? left + ((right - left) * columnIndex) / (columns.length - 1) : left;\n\n columnNodes.forEach((node, index) => {\n const value = node.displayValue ?? currentNodeWeights.get(node.id) ?? 0;\n const centerY = top + index * (slotHeight + nodePadding) + slotHeight / 2;\n const height = columnTotal > 0 ? maximumNodeHeight * (value / columnTotal) : 0;\n nodes.set(node.id, { x, centerY, y: centerY - height / 2, height });\n });\n });\n\n const links = new Map<string, FixedSankeyLinkGeometry>();\n const outgoingTotals = new Map<string, number>();\n const incomingTotals = new Map<string, number>();\n for (const link of graph.links) {\n outgoingTotals.set(link.sourceNode.id, (outgoingTotals.get(link.sourceNode.id) ?? 0) + link.displayValue);\n incomingTotals.set(link.targetNode.id, (incomingTotals.get(link.targetNode.id) ?? 0) + link.displayValue);\n }\n const sourceOffsets = new Map([...nodes].map(([id, geometry]) => [id, geometry.y]));\n const targetOffsets = new Map([...nodes].map(([id, geometry]) => [id, geometry.y]));\n\n for (const link of graph.links) {\n const sourceGeometry = nodes.get(link.sourceNode.id);\n const targetGeometry = nodes.get(link.targetNode.id);\n if (!sourceGeometry || !targetGeometry) continue;\n const sourceTotal = outgoingTotals.get(link.sourceNode.id) ?? 0;\n const targetTotal = incomingTotals.get(link.targetNode.id) ?? 0;\n const sourceWidth = sourceTotal > 0 ? sourceGeometry.height * (link.displayValue / sourceTotal) : 0;\n const targetWidth = targetTotal > 0 ? targetGeometry.height * (link.displayValue / targetTotal) : 0;\n const sourceOffset = sourceOffsets.get(link.sourceNode.id) ?? sourceGeometry.y;\n const targetOffset = targetOffsets.get(link.targetNode.id) ?? targetGeometry.y;\n links.set(link.id, {\n // ribbons anchor to their own nodes' columns: depth-based layouts (like\n // the underlying recharts sankey) would otherwise stretch links of a\n // disconnected graph across the full chart width\n sourceX: sourceGeometry.x + SANKEY_NODE_WIDTH,\n targetX: targetGeometry.x,\n sourceY: sourceOffset + sourceWidth / 2,\n targetY: targetOffset + targetWidth / 2,\n sourceWidth,\n targetWidth,\n });\n sourceOffsets.set(link.sourceNode.id, sourceOffset + sourceWidth);\n targetOffsets.set(link.targetNode.id, targetOffset + targetWidth);\n }\n\n return { nodes, links };\n}\n\nexport function getSankeyChartNodeWeights(graph: SankeyChartGraph): Map<string, number> {\n const incomingWeights = new Map<string, number>();\n const outgoingWeights = new Map<string, number>();\n\n for (const link of graph.links) {\n outgoingWeights.set(link.sourceNode.id, (outgoingWeights.get(link.sourceNode.id) ?? 0) + link.value);\n incomingWeights.set(link.targetNode.id, (incomingWeights.get(link.targetNode.id) ?? 0) + link.value);\n }\n\n return new Map(\n graph.nodes.map(node => [node.id, Math.max(incomingWeights.get(node.id) ?? 0, outgoingWeights.get(node.id) ?? 0)]),\n );\n}\n\nfunction getSankeyChartCurrentNodeWeights(graph: SankeyChartGraph): Map<string, number> {\n const incomingWeights = new Map<string, number>();\n const outgoingWeights = new Map<string, number>();\n\n for (const link of graph.links) {\n outgoingWeights.set(link.sourceNode.id, (outgoingWeights.get(link.sourceNode.id) ?? 0) + link.displayValue);\n incomingWeights.set(link.targetNode.id, (incomingWeights.get(link.targetNode.id) ?? 0) + link.displayValue);\n }\n\n return new Map(\n graph.nodes.map(node => [node.id, Math.max(incomingWeights.get(node.id) ?? 0, outgoingWeights.get(node.id) ?? 0)]),\n );\n}\n\nexport function getSankeyChartCurveSelection(link: SankeyChartLink): SankeyChartCurveSelection {\n return {\n source: { column: link.sourceNode.column, value: link.sourceNode.value },\n target: { column: link.targetNode.column, value: link.targetNode.value },\n records: link.records,\n };\n}\n\nexport function getSankeyChartNodeSelection(node: SankeyChartNode): SankeyChartNodeSelection {\n return { column: node.column, value: node.value };\n}\n\nfunction createNodeId(columnId: string, value: string | number) {\n return JSON.stringify([columnId, typeof value, value]);\n}\n","import { hashLabel } from '@/lib/colors';\n\nexport const sankeySeriesColors: readonly string[] = [\n 'var(--chart-blue)',\n 'var(--chart-orange)',\n 'var(--chart-green)',\n 'var(--chart-purple)',\n 'var(--chart-pink)',\n 'var(--chart-red)',\n 'var(--chart-yellow)',\n 'var(--chart-blue-deep)',\n];\n\nexport function buildSankeyColorMap(names: string[]) {\n const colors: Record<string, string> = {};\n for (const name of names) {\n colors[name] = sankeySeriesColors[hashLabel(name) % sankeySeriesColors.length] ?? 'var(--chart-blue)';\n }\n return colors;\n}\n","import { createContext, useContext, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { buildSankeyChartGraph, reorderSankeyChartColumns } from './sankey-chart-utils';\nimport type { SankeyChartColumn, SankeyChartGraph, SankeyChartRecord } from './sankey-chart-utils';\nimport { buildSankeyColorMap } from './sankeyColor';\n\nexport type SankeyProps = {\n data: Array<SankeyChartRecord>;\n columns: Array<SankeyChartColumn>;\n children: ReactNode;\n columnOrder?: Array<string>;\n onColumnOrderChange?: (columnOrder: Array<string>) => void;\n visibleColumnIds?: Array<string>;\n onVisibleColumnIdsChange?: (columnIds: Array<string>) => void;\n getRecordWeight?: (record: SankeyChartRecord) => number;\n getRecordLayoutWeight?: (record: SankeyChartRecord) => number;\n getRecordNodeId?: (record: SankeyChartRecord, column: SankeyChartColumn) => string;\n getRecordNodeLabel?: (record: SankeyChartRecord, column: SankeyChartColumn) => string;\n getRecordNodeValue?: (record: SankeyChartRecord, column: SankeyChartColumn) => number;\n getColumnColor?: (column: SankeyChartColumn) => string;\n};\n\nexport type SankeyControlColumn = SankeyChartColumn & {\n visible: boolean;\n};\n\nexport type SankeyControls = {\n columns: Array<SankeyControlColumn>;\n toggleColumn: (columnId: string) => void;\n reorderColumns: (sourceIndex: number, destinationIndex: number) => void;\n};\n\ntype SankeyRenderContext = {\n graph: SankeyChartGraph;\n enabledColumns: Array<SankeyChartColumn>;\n colorMap: Record<string, string>;\n usesFixedGeometry: boolean;\n};\n\nconst SankeyControlsContext = createContext<SankeyControls | undefined>(undefined);\nconst SankeyRenderContext = createContext<SankeyRenderContext | undefined>(undefined);\n\nexport function Sankey({\n data,\n columns,\n children,\n columnOrder,\n onColumnOrderChange,\n visibleColumnIds,\n onVisibleColumnIdsChange,\n getRecordWeight,\n getRecordLayoutWeight,\n getRecordNodeId,\n getRecordNodeLabel,\n getRecordNodeValue,\n getColumnColor,\n}: SankeyProps) {\n const columnIds = columns.map(column => column.id);\n const [internalOrder, setInternalOrder] = useState(columnIds);\n const [internalVisibleIds, setInternalVisibleIds] = useState(columnIds);\n const orderedColumns = orderColumns(columns, columnOrder ?? internalOrder);\n const visibleIds = new Set(visibleColumnIds ?? internalVisibleIds);\n const enabledColumns = orderedColumns.filter(column => visibleIds.has(column.id));\n const graph = buildSankeyChartGraph(\n data,\n enabledColumns,\n getRecordWeight,\n getRecordNodeId,\n getRecordNodeLabel,\n getRecordNodeValue,\n getRecordLayoutWeight,\n );\n const defaultColorMap = buildSankeyColorMap(graph.nodes.map(node => String(node.value)));\n const colorMap = Object.fromEntries(\n graph.nodes.map(node => [\n String(node.value),\n getColumnColor?.(node.column) ?? defaultColorMap[String(node.value)] ?? 'var(--chart-blue)',\n ]),\n );\n\n const setVisibleColumns = (nextIds: Array<string>) => {\n if (visibleColumnIds === undefined) setInternalVisibleIds(nextIds);\n onVisibleColumnIdsChange?.(nextIds);\n };\n\n const setColumnOrder = (nextOrder: Array<string>) => {\n if (columnOrder === undefined) setInternalOrder(nextOrder);\n onColumnOrderChange?.(nextOrder);\n };\n\n const toggleColumn = (columnId: string) => {\n const nextIds = visibleIds.has(columnId)\n ? orderedColumns.filter(column => visibleIds.has(column.id) && column.id !== columnId).map(column => column.id)\n : orderedColumns.filter(column => visibleIds.has(column.id) || column.id === columnId).map(column => column.id);\n setVisibleColumns(nextIds);\n };\n\n const reorderColumns = (sourceIndex: number, destinationIndex: number) => {\n const reorderedEnabled = reorderSankeyChartColumns(enabledColumns, sourceIndex, destinationIndex);\n const enabledIterator = reorderedEnabled[Symbol.iterator]();\n const nextColumns = orderedColumns.map(column =>\n visibleIds.has(column.id) ? (enabledIterator.next().value ?? column) : column,\n );\n setColumnOrder(nextColumns.map(column => column.id));\n };\n\n const controlColumns = orderedColumns.map(column => ({ ...column, visible: visibleIds.has(column.id) }));\n\n return (\n <SankeyControlsContext.Provider value={{ columns: controlColumns, toggleColumn, reorderColumns }}>\n <SankeyRenderContext.Provider\n value={{ graph, enabledColumns, colorMap, usesFixedGeometry: getRecordLayoutWeight !== undefined }}\n >\n {children}\n </SankeyRenderContext.Provider>\n </SankeyControlsContext.Provider>\n );\n}\n\n// Context providers and their hooks intentionally share this module.\n// eslint-disable-next-line react-refresh/only-export-components\nexport function useSankey() {\n const context = useContext(SankeyControlsContext);\n if (!context) throw new Error('useSankey must be used within Sankey');\n return context;\n}\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport function useSankeyRenderContext() {\n const context = useContext(SankeyRenderContext);\n if (!context) throw new Error('SankeyChart must be used within Sankey');\n return context;\n}\n\nfunction orderColumns(columns: Array<SankeyChartColumn>, order: Array<string>) {\n const positions = new Map(order.map((id, index) => [id, index]));\n return [...columns].sort(\n (left, right) => (positions.get(left.id) ?? columns.length) - (positions.get(right.id) ?? columns.length),\n );\n}\n","import { useId, useState } from 'react';\n\nexport type SankeyTooltipPosition = {\n left: number;\n top: number;\n placement: 'above' | 'below';\n};\n\nexport const SANKEY_TOOLTIP_MAX_WIDTH_PX = 320;\n\nconst TOOLTIP_TOP_FLIP_THRESHOLD = 120;\nconst TOOLTIP_EDGE_INSET = 16;\nconst TOOLTIP_RIGHT_INSET = SANKEY_TOOLTIP_MAX_WIDTH_PX + TOOLTIP_EDGE_INSET;\n\nexport function useSankeyHoverTooltip(enabled: boolean) {\n const id = useId();\n const [isHovered, setIsHovered] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n const [position, setPosition] = useState<SankeyTooltipPosition>();\n\n function showAt(target: Element) {\n if (!enabled) return;\n const rect = target.getBoundingClientRect();\n const placement = rect.top < TOOLTIP_TOP_FLIP_THRESHOLD ? 'below' : 'above';\n setPosition({\n left: Math.min(\n Math.max(rect.left, TOOLTIP_EDGE_INSET),\n Math.max(window.innerWidth - TOOLTIP_RIGHT_INSET, TOOLTIP_EDGE_INSET),\n ),\n top: placement === 'above' ? rect.top - 8 : rect.bottom + 8,\n placement,\n });\n }\n\n return {\n id,\n position,\n isVisible: Boolean(enabled && position && (isHovered || isFocused)),\n showOnHover(target: Element) {\n setIsHovered(true);\n showAt(target);\n },\n hideOnLeave() {\n setIsHovered(false);\n },\n showOnFocus(target: Element) {\n setIsFocused(true);\n showAt(target);\n },\n hideOnBlur() {\n setIsFocused(false);\n },\n };\n}\n","import { createPortal } from 'react-dom';\n\nimport { SANKEY_TOOLTIP_MAX_WIDTH_PX } from './use-sankey-hover-tooltip';\nimport type { SankeyTooltipPosition } from './use-sankey-hover-tooltip';\nimport { ChartTooltip } from '@/ds/components/ChartTooltip';\n\nexport function SankeyPortalTooltip({\n id,\n title,\n description,\n position,\n visible,\n}: {\n id: string;\n title: string;\n description: string;\n position: SankeyTooltipPosition | undefined;\n visible: boolean;\n}) {\n if (!visible || !position) return null;\n\n return createPortal(\n <ChartTooltip\n aria-label={`${title}: ${description}`}\n className=\"pointer-events-none fixed z-50 p-2\"\n id={id}\n role=\"tooltip\"\n style={{\n left: position.left,\n maxWidth: `min(${SANKEY_TOOLTIP_MAX_WIDTH_PX}px, calc(100vw - 2rem))`,\n top: position.top,\n transform: position.placement === 'above' ? 'translateY(-100%)' : undefined,\n width: 'max-content',\n }}\n >\n <div className=\"text-column\">{title}</div>\n <div className=\"whitespace-pre-wrap text-muted-foreground\">{description}</div>\n </ChartTooltip>,\n document.body,\n );\n}\n","import { useEffect, useMemo, useRef, useState } from 'react';\nimport type { ComponentProps, CSSProperties } from 'react';\nimport type { Sankey as RechartsSankey } from 'recharts';\n\nimport { buildFixedSankeyGeometry, getSankeyLabelWidths, SANKEY_NODE_WIDTH } from './sankey-chart-utils';\nimport type { SankeyChartGraph } from './sankey-chart-utils';\n\ntype SankeyChartMeasurementsOptions = {\n graph: SankeyChartGraph;\n height: CSSProperties['height'];\n margin: ComponentProps<typeof RechartsSankey>['margin'];\n usesFixedGeometry: boolean;\n};\n\nexport function useSankeyChartMeasurements({\n graph,\n height,\n margin,\n usesFixedGeometry,\n}: SankeyChartMeasurementsOptions) {\n const chartContainerRef = useRef<HTMLDivElement>(null);\n const [measuredHeight, setMeasuredHeight] = useState(typeof height === 'number' ? height : 320);\n const [measuredWidth, setMeasuredWidth] = useState(800);\n\n useEffect(() => {\n const element = chartContainerRef.current;\n if (!element) return;\n\n const updateDimensions = () => {\n if (element.offsetHeight > 0) setMeasuredHeight(element.offsetHeight);\n if (element.offsetWidth > 0) setMeasuredWidth(element.offsetWidth);\n };\n\n updateDimensions();\n if (typeof ResizeObserver === 'undefined') return;\n\n const observer = new ResizeObserver(updateDimensions);\n observer.observe(element);\n return () => observer.disconnect();\n }, [height]);\n\n const fixedGeometry = useMemo(\n () =>\n usesFixedGeometry\n ? buildFixedSankeyGeometry(graph, {\n top: Number(margin?.top ?? 64),\n bottom: measuredHeight - Number(margin?.bottom ?? 12),\n left: Number(margin?.left ?? 160),\n right: measuredWidth - Number(margin?.right ?? 160) - SANKEY_NODE_WIDTH,\n nodePadding: 8,\n })\n : undefined,\n [graph, margin?.bottom, margin?.left, margin?.right, margin?.top, measuredHeight, measuredWidth, usesFixedGeometry],\n );\n\n // recharts spaces columns by link depth, so the graph — not the enabled column list — sets the pitch\n const labelWidths = getSankeyLabelWidths({\n chartWidth: measuredWidth,\n columnCount: new Set(graph.nodes.map(node => node.column.id)).size,\n marginLeft: Number(margin?.left ?? 160),\n marginRight: Number(margin?.right ?? 160),\n });\n\n return { chartContainerRef, fixedGeometry, labelWidths };\n}\n","import { useEffect, useState, useSyncExternalStore } from 'react';\n\nimport type { FixedSankeyGeometry, FixedSankeyLinkGeometry, FixedSankeyNodeGeometry } from './sankey-chart-utils';\n\nconst TRANSITION_DURATION_MS = 850;\n\ntype GeometryTransition = {\n from: FixedSankeyGeometry;\n to: FixedSankeyGeometry;\n startedAt: number;\n};\n\nfunction mix(from: number, to: number, progress: number) {\n return from + (to - from) * progress;\n}\n\nfunction interpolateNode(\n from: FixedSankeyNodeGeometry,\n to: FixedSankeyNodeGeometry,\n progress: number,\n): FixedSankeyNodeGeometry {\n return {\n x: mix(from.x, to.x, progress),\n y: mix(from.y, to.y, progress),\n centerY: mix(from.centerY, to.centerY, progress),\n height: mix(from.height, to.height, progress),\n };\n}\n\nfunction interpolateLink(\n from: FixedSankeyLinkGeometry,\n to: FixedSankeyLinkGeometry,\n progress: number,\n): FixedSankeyLinkGeometry {\n return {\n sourceX: mix(from.sourceX, to.sourceX, progress),\n targetX: mix(from.targetX, to.targetX, progress),\n sourceY: mix(from.sourceY, to.sourceY, progress),\n targetY: mix(from.targetY, to.targetY, progress),\n sourceWidth: mix(from.sourceWidth, to.sourceWidth, progress),\n targetWidth: mix(from.targetWidth, to.targetWidth, progress),\n };\n}\n\n/**\n * Preserves node identity while pairing replaced links by render order. That\n * synthetic pairing keeps every ribbon moving continuously through a reorder,\n * even though changing adjacency means the old and new links have different IDs.\n */\nexport function interpolateSankeyGeometry(\n from: FixedSankeyGeometry,\n to: FixedSankeyGeometry,\n progress: number,\n): FixedSankeyGeometry {\n const replacedPreviousLinks = [...from.links].filter(([id]) => !to.links.has(id)).map(([, link]) => link);\n const nodes = new Map<string, FixedSankeyNodeGeometry>();\n const links = new Map<string, FixedSankeyLinkGeometry>();\n\n for (const [id, target] of to.nodes) {\n nodes.set(id, interpolateNode(from.nodes.get(id) ?? target, target, progress));\n }\n\n let replacedLinkIndex = 0;\n for (const [id, target] of to.links) {\n const matchingSource = from.links.get(id);\n const syntheticSource = matchingSource ? undefined : replacedPreviousLinks[replacedLinkIndex++];\n links.set(id, interpolateLink(matchingSource ?? syntheticSource ?? target, target, progress));\n }\n\n return { nodes, links };\n}\n\nfunction prefersReducedMotion() {\n return (\n typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(prefers-reduced-motion: reduce)').matches\n );\n}\n\nclass SankeyGeometryMotionStore {\n private animationFrame = 0;\n private key?: string;\n private listeners = new Set<() => void>();\n private snapshot?: FixedSankeyGeometry;\n private target?: FixedSankeyGeometry;\n private transition?: GeometryTransition;\n\n constructor(key?: string, geometry?: FixedSankeyGeometry) {\n this.key = key;\n this.snapshot = geometry;\n this.target = geometry;\n }\n\n getSnapshot = () => this.snapshot;\n\n subscribe = (listener: () => void) => {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n };\n\n transitionTo(key: string | undefined, geometry: FixedSankeyGeometry | undefined) {\n if (key === this.key && geometry === this.target) return;\n\n const keyChanged = key !== this.key;\n this.key = key;\n this.target = geometry;\n\n if (!keyChanged && geometry && this.transition) {\n this.transition = { ...this.transition, to: geometry };\n return;\n }\n\n cancelAnimationFrame(this.animationFrame);\n this.animationFrame = 0;\n\n if (!keyChanged || !geometry || !this.snapshot || prefersReducedMotion()) {\n this.transition = undefined;\n this.publish(geometry);\n return;\n }\n\n this.transition = { from: this.snapshot, to: geometry, startedAt: performance.now() };\n this.animationFrame = requestAnimationFrame(this.animate);\n }\n\n dispose() {\n cancelAnimationFrame(this.animationFrame);\n this.listeners.clear();\n }\n\n private animate = (now: number) => {\n const transition = this.transition;\n if (!transition) return;\n\n const elapsed = Math.min((now - transition.startedAt) / TRANSITION_DURATION_MS, 1);\n const progress = 1 - (1 - elapsed) ** 3;\n this.publish(interpolateSankeyGeometry(transition.from, transition.to, progress));\n\n if (elapsed < 1) {\n this.animationFrame = requestAnimationFrame(this.animate);\n return;\n }\n\n this.transition = undefined;\n this.animationFrame = 0;\n };\n\n private publish(geometry: FixedSankeyGeometry | undefined) {\n this.snapshot = geometry;\n for (const listener of this.listeners) listener();\n }\n}\n\nexport function useSankeyGeometryTransition({\n geometry,\n transitionKey,\n}: {\n geometry?: FixedSankeyGeometry;\n transitionKey?: string;\n}) {\n const [store] = useState(() => new SankeyGeometryMotionStore(transitionKey, geometry));\n const animatedGeometry = useSyncExternalStore(store.subscribe, store.getSnapshot, store.getSnapshot);\n\n useEffect(() => {\n store.transitionTo(transitionKey, geometry);\n }, [geometry, store, transitionKey]);\n\n useEffect(() => () => store.dispose(), [store]);\n\n return animatedGeometry;\n}\n","import { useState } from 'react';\nimport type { ComponentProps, CSSProperties, KeyboardEvent } from 'react';\nimport { ResponsiveContainer, Sankey as RechartsSankey } from 'recharts';\nimport {\n getSankeyChartCurveSelection,\n getSankeyChartNodeSelection,\n getSankeyChartNodeWeights,\n SANKEY_NODE_WIDTH,\n truncateSankeyLabel,\n} from './sankey-chart-utils';\nimport type {\n SankeyChartColumn,\n SankeyChartCurveSelection,\n SankeyChartNodeSelection,\n SankeyLabelWidths,\n} from './sankey-chart-utils';\nimport { useSankeyRenderContext } from './sankey-context';\nimport { SankeyPortalTooltip } from './sankey-portal-tooltip';\nimport { useSankeyChartMeasurements } from './use-sankey-chart-measurements';\nimport { useSankeyGeometryTransition } from './use-sankey-geometry-transition';\nimport { useSankeyHoverTooltip } from './use-sankey-hover-tooltip';\nimport { CHART_LABEL_FONT_SIZE, CHART_TICK_FONT_SIZE, Colors } from '@/ds/tokens';\nimport { cn } from '@/lib/utils';\n\nconst NODE_LABEL_FONT_SIZE = CHART_TICK_FONT_SIZE;\nconst COLUMN_LABEL_FONT_SIZE = CHART_LABEL_FONT_SIZE;\n// pre-measurement cap, kept so wide charts read unchanged\nconst NODE_LABEL_MAX_CHARACTERS = 23;\n\nexport type SankeyChartProps = {\n height?: CSSProperties['height'];\n getNodeColor?: (selection: SankeyChartNodeSelection) => string;\n getLinkColor?: (selection: SankeyChartCurveSelection) => string;\n className?: string;\n margin?: ComponentProps<typeof RechartsSankey>['margin'];\n onCurveClick?: (selection: SankeyChartCurveSelection) => void;\n onNodeClick?: (selection: SankeyChartNodeSelection) => void;\n isNodeClickable?: (selection: SankeyChartNodeSelection) => boolean;\n getColumnDescription?: (column: SankeyChartColumn) => string | undefined;\n /** Suppress the built-in SVG column headers when the caller renders its own header row. */\n hideColumnLabels?: boolean;\n /** Animate fixed node and ribbon geometry when this perspective key changes. */\n geometryTransitionKey?: string;\n};\n\nexport function SankeyChart({\n height = 320,\n className,\n margin = { top: 64, right: 160, bottom: 12, left: 160 },\n onCurveClick,\n onNodeClick,\n isNodeClickable,\n getColumnDescription,\n hideColumnLabels = false,\n geometryTransitionKey,\n getNodeColor,\n getLinkColor,\n}: SankeyChartProps) {\n const { graph, enabledColumns, colorMap, usesFixedGeometry } = useSankeyRenderContext();\n const { chartContainerRef, fixedGeometry, labelWidths } = useSankeyChartMeasurements({\n graph,\n height,\n margin,\n usesFixedGeometry,\n });\n const animatedGeometry = useSankeyGeometryTransition({\n geometry: fixedGeometry,\n transitionKey: geometryTransitionKey,\n });\n const [hoveredSourceName, setHoveredSourceName] = useState<string>();\n const [focusedSourceName, setFocusedSourceName] = useState<string>();\n const activeSourceName = hoveredSourceName ?? focusedSourceName;\n const firstColumnId = enabledColumns[0]?.id;\n const lastColumnId = enabledColumns.at(-1)?.id;\n const nodeWeights = getSankeyChartNodeWeights(graph);\n // Each node's percentage is its share of its own column, so later columns\n // with more counted traces than the first column never exceed 100%.\n const columnTotals = new Map<string, number>();\n for (const node of graph.nodes) {\n const nodeValue = node.displayValue ?? nodeWeights.get(node.id) ?? 0;\n columnTotals.set(node.column.id, (columnTotals.get(node.column.id) ?? 0) + nodeValue);\n }\n\n return (\n <div className={cn('min-w-0', className)}>\n {graph.links.length === 0 ? (\n <div\n className=\"flex items-center justify-center rounded-md border border-border text-caption text-muted-foreground\"\n style={{ height }}\n >\n Select at least two columns with data to display a flow\n </div>\n ) : (\n <div ref={chartContainerRef} style={{ height }}>\n <ResponsiveContainer\n width=\"100%\"\n height=\"100%\"\n initialDimension={{ width: 800, height: typeof height === 'number' ? height : 320 }}\n >\n <RechartsSankey\n data={graph}\n nodeWidth={SANKEY_NODE_WIDTH}\n nodePadding={56}\n margin={margin}\n node={(props: SankeyNodeRendererProps) => {\n const node = graph.nodes[props.index];\n const showColumnLabel =\n !hideColumnLabels && node\n ? graph.nodes.findIndex(candidate => candidate.column.id === node.column.id) === props.index\n : false;\n const nodeGeometry = node ? animatedGeometry?.nodes.get(node.id) : undefined;\n const selection = node ? getSankeyChartNodeSelection(node) : undefined;\n const clickable = Boolean(\n onNodeClick && selection && (isNodeClickable === undefined || isNodeClickable(selection)),\n );\n return (\n <SankeyNode\n {...props}\n x={nodeGeometry?.x ?? props.x}\n y={nodeGeometry?.y ?? props.y}\n height={nodeGeometry?.height ?? props.height}\n colorMap={colorMap}\n color={selection ? getNodeColor?.(selection) : undefined}\n columnLabel={node?.column.label}\n columnDescription={node ? getColumnDescription?.(node.column) : undefined}\n label={node?.label}\n nodeValue={node?.displayValue}\n layoutValue={nodeGeometry ? undefined : node ? nodeWeights.get(node.id) : undefined}\n columnTotal={node ? (columnTotals.get(node.column.id) ?? 0) : 0}\n showColumnLabel={showColumnLabel}\n isFirstColumn={node?.column.id === firstColumnId}\n isLastColumn={node?.column.id === lastColumnId}\n labelWidths={labelWidths}\n onFocusChange={setFocusedSourceName}\n onHoverChange={setHoveredSourceName}\n clickable={clickable}\n onSelect={() => {\n if (selection && clickable) onNodeClick?.(selection);\n }}\n />\n );\n }}\n link={(props: SankeyLinkRendererProps) => {\n const link = graph.links[props.index];\n const selection = link ? getSankeyChartCurveSelection(link) : undefined;\n const linkGeometry = link ? animatedGeometry?.links.get(link.id) : undefined;\n const sourceX = linkGeometry?.sourceX ?? props.sourceX;\n const targetX = linkGeometry?.targetX ?? props.targetX;\n const fixedControlX = linkGeometry ? (sourceX + targetX) / 2 : undefined;\n return (\n <SankeyLink\n {...props}\n sourceX={sourceX}\n targetX={targetX}\n sourceControlX={fixedControlX ?? props.sourceControlX}\n targetControlX={fixedControlX ?? props.targetControlX}\n sourceY={linkGeometry?.sourceY ?? props.sourceY}\n targetY={linkGeometry?.targetY ?? props.targetY}\n sourceWidth={linkGeometry?.sourceWidth}\n targetWidth={linkGeometry?.targetWidth}\n colorMap={colorMap}\n highlighted={String(props.payload.source.name ?? '') === activeSourceName}\n color={selection ? getLinkColor?.(selection) : undefined}\n sourceColor={selection ? getNodeColor?.(selection.source) : undefined}\n targetColor={selection ? getNodeColor?.(selection.target) : undefined}\n displayValue={link?.displayValue}\n layoutValue={link?.value}\n onHoverChange={setHoveredSourceName}\n clickable={onCurveClick !== undefined}\n onSelect={() => {\n if (link) onCurveClick?.(getSankeyChartCurveSelection(link));\n }}\n />\n );\n }}\n />\n </ResponsiveContainer>\n </div>\n )}\n </div>\n );\n}\n\ntype SankeyNodeRendererProps = {\n x: number;\n y: number;\n width: number;\n height: number;\n index: number;\n payload: { name?: string | number; value?: string | number };\n};\n\ntype SankeyLinkRendererProps = {\n sourceX: number;\n targetX: number;\n sourceY: number;\n targetY: number;\n sourceControlX: number;\n targetControlX: number;\n linkWidth: number;\n index: number;\n payload: { source: { name?: string | number }; target: { name?: string | number } };\n};\n\ntype SankeyNodeProps = SankeyNodeRendererProps & {\n colorMap: Record<string, string>;\n color?: string;\n columnLabel?: string;\n columnDescription?: string;\n label?: string;\n nodeValue?: number;\n layoutValue?: number;\n columnTotal: number;\n showColumnLabel: boolean;\n isFirstColumn: boolean;\n isLastColumn: boolean;\n labelWidths: SankeyLabelWidths;\n clickable: boolean;\n onFocusChange: (sourceName: string | undefined) => void;\n onHoverChange: (sourceName: string | undefined) => void;\n onSelect: () => void;\n};\n\nfunction SankeyNode({\n x,\n y,\n width,\n height,\n payload,\n colorMap,\n color,\n columnLabel,\n columnDescription,\n label,\n nodeValue,\n layoutValue,\n columnTotal,\n showColumnLabel,\n isFirstColumn,\n isLastColumn,\n labelWidths,\n clickable,\n onFocusChange,\n onHoverChange,\n onSelect,\n}: SankeyNodeProps) {\n const name = typeof payload.name === 'string' || typeof payload.name === 'number' ? String(payload.name) : '';\n const displayLabel = label ?? name;\n const descriptionIndex = displayLabel.indexOf('\\n');\n const visibleDisplayLabel = descriptionIndex >= 0 ? displayLabel.slice(0, descriptionIndex) : displayLabel;\n const description = descriptionIndex >= 0 ? displayLabel.slice(descriptionIndex + 1) : undefined;\n const accessibleLabel = displayLabel.replaceAll('\\n', '. ');\n const nodeLabelWidth = isFirstColumn || isLastColumn ? labelWidths.edge : labelWidths.centered;\n const visibleLabel = truncateSankeyLabel(visibleDisplayLabel, {\n fontSize: NODE_LABEL_FONT_SIZE,\n maxWidth: nodeLabelWidth,\n maxCharacters: NODE_LABEL_MAX_CHARACTERS,\n });\n const visibleColumnLabel = columnLabel\n ? truncateSankeyLabel(columnLabel, { fontSize: COLUMN_LABEL_FONT_SIZE, maxWidth: nodeLabelWidth })\n : undefined;\n const tooltip = useSankeyHoverTooltip(description !== undefined);\n const numericValue = nodeValue ?? (typeof payload.value === 'number' ? payload.value : Number(payload.value));\n const value = Number.isFinite(numericValue) ? String(numericValue) : '';\n const percentage =\n columnTotal > 0 && Number.isFinite(numericValue) ? Math.round((numericValue / columnTotal) * 100) : 0;\n const visibleHeight = scaleSankeyDimension(height, numericValue, layoutValue);\n const visibleY = y + (height - visibleHeight) / 2;\n const textAnchor = isFirstColumn ? 'start' : isLastColumn ? 'end' : 'middle';\n const labelX = isFirstColumn ? x : isLastColumn ? x + width : x + width / 2;\n const nodeFill = colorMap[name] ?? 'var(--chart-blue)';\n const handleKeyDown = (event: KeyboardEvent<SVGGElement>) => {\n if (event.key !== 'Enter' && event.key !== ' ') return;\n event.preventDefault();\n onSelect();\n };\n\n return (\n <>\n {/* Rendered outside the interactive group so hovering the header never opens a theme tooltip. */}\n {showColumnLabel && visibleColumnLabel && columnLabel ? (\n <SankeyColumnHeader\n x={labelX}\n textAnchor={textAnchor}\n fill={color ? Colors.foreground : nodeFill}\n label={visibleColumnLabel}\n fullLabel={columnLabel}\n description={columnDescription}\n />\n ) : null}\n <g\n aria-describedby={description ? tooltip.id : undefined}\n aria-label={`${accessibleLabel}: ${value} ${numericValue === 1 ? 'trace' : 'traces'} (${percentage}%)`}\n className=\"outline-hidden focus-visible:[&>rect]:stroke-foreground focus-visible:[&>rect]:stroke-2\"\n onClick={clickable ? onSelect : undefined}\n onKeyDown={clickable ? handleKeyDown : undefined}\n role={clickable ? 'button' : undefined}\n onFocus={event => {\n onFocusChange(name);\n tooltip.showOnFocus(event.currentTarget);\n }}\n onBlur={() => {\n onFocusChange(undefined);\n tooltip.hideOnBlur();\n }}\n onMouseEnter={event => {\n onHoverChange(name);\n tooltip.showOnHover(event.currentTarget);\n }}\n onMouseLeave={() => {\n onHoverChange(undefined);\n tooltip.hideOnLeave();\n }}\n style={{ cursor: clickable ? 'pointer' : undefined }}\n tabIndex={0}\n >\n {/* The custom tooltip covers described nodes; a native title there would stack a second popup. */}\n {description ? null : <title>{displayLabel}</title>}\n <rect x={x} y={visibleY} width={width} height={visibleHeight} rx={3} fill={color ?? nodeFill} />\n <text\n x={labelX}\n y={y - 24}\n textAnchor={textAnchor}\n fill={Colors.foreground}\n fontSize={NODE_LABEL_FONT_SIZE}\n fontFamily=\"var(--font-mono)\"\n >\n {visibleLabel}\n </text>\n <text x={labelX} y={y - 8} textAnchor={textAnchor} fill={Colors['muted-foreground']} fontSize={9.5}>\n {value} ({percentage}%)\n </text>\n </g>\n {description ? (\n <SankeyPortalTooltip\n id={tooltip.id}\n title={visibleDisplayLabel}\n description={description}\n position={tooltip.position}\n visible={tooltip.isVisible}\n />\n ) : null}\n </>\n );\n}\n\n/**\n * Column header text. Inert for node tooltips, but when the caller supplies a\n * column description it opens its own portal tooltip on hover or focus.\n */\nfunction SankeyColumnHeader({\n x,\n textAnchor,\n fill,\n label,\n fullLabel,\n description,\n}: {\n x: number;\n textAnchor: 'start' | 'middle' | 'end';\n fill: string;\n label: string;\n fullLabel: string;\n description?: string;\n}) {\n const tooltip = useSankeyHoverTooltip(description !== undefined);\n\n return (\n <>\n <text\n aria-describedby={description ? tooltip.id : undefined}\n aria-label={description ? fullLabel : undefined}\n role={description ? 'img' : undefined}\n x={x}\n y={18}\n textAnchor={textAnchor}\n fill={fill}\n fontSize={COLUMN_LABEL_FONT_SIZE}\n fontWeight={600}\n tabIndex={description ? 0 : undefined}\n onMouseEnter={description ? event => tooltip.showOnHover(event.currentTarget) : undefined}\n onMouseLeave={description ? tooltip.hideOnLeave : undefined}\n onFocus={description ? event => tooltip.showOnFocus(event.currentTarget) : undefined}\n onBlur={description ? tooltip.hideOnBlur : undefined}\n >\n {/* The custom tooltip already names the column; a native title would stack a second popup. */}\n {label === fullLabel || description ? null : <title>{fullLabel}</title>}\n {label}\n </text>\n {description ? (\n <SankeyPortalTooltip\n id={tooltip.id}\n title={fullLabel}\n description={description}\n position={tooltip.position}\n visible={tooltip.isVisible}\n />\n ) : null}\n </>\n );\n}\n\nfunction scaleSankeyDimension(size: number, displayValue: number | undefined, layoutValue: number | undefined) {\n if (displayValue === undefined || layoutValue === undefined || layoutValue <= 0) return size;\n return size * Math.min(Math.max(displayValue / layoutValue, 0), 1);\n}\n\ntype SankeyLinkProps = SankeyLinkRendererProps & {\n colorMap: Record<string, string>;\n color?: string;\n sourceColor?: string;\n targetColor?: string;\n highlighted: boolean;\n displayValue?: number;\n layoutValue?: number;\n sourceWidth?: number;\n targetWidth?: number;\n clickable: boolean;\n onHoverChange: (sourceName: string | undefined) => void;\n onSelect: () => void;\n};\n\nfunction SankeyLink({\n sourceX,\n targetX,\n sourceY,\n targetY,\n sourceControlX,\n targetControlX,\n linkWidth,\n index,\n payload,\n colorMap,\n color,\n sourceColor,\n targetColor,\n highlighted,\n displayValue,\n layoutValue,\n sourceWidth,\n targetWidth,\n clickable,\n onHoverChange,\n onSelect,\n}: SankeyLinkProps) {\n const visibleWidth = scaleSankeyDimension(linkWidth, displayValue, layoutValue);\n const sourceHalfWidth = Math.max(0, sourceWidth ?? visibleWidth) / 2;\n const targetHalfWidth = Math.max(0, targetWidth ?? visibleWidth) / 2;\n const path = [\n `M${sourceX},${sourceY - sourceHalfWidth}`,\n `C${sourceControlX},${sourceY - sourceHalfWidth} ${targetControlX},${targetY - targetHalfWidth} ${targetX},${targetY - targetHalfWidth}`,\n `L${targetX},${targetY + targetHalfWidth}`,\n `C${targetControlX},${targetY + targetHalfWidth} ${sourceControlX},${sourceY + sourceHalfWidth} ${sourceX},${sourceY + sourceHalfWidth}`,\n 'Z',\n ].join(' ');\n const sourceName = String(payload.source.name ?? '');\n const targetName = String(payload.target.name ?? '');\n const gradientId = `sankey-grad-${index}`;\n const handleKeyDown = (event: KeyboardEvent<SVGPathElement>) => {\n if (event.key !== 'Enter' && event.key !== ' ') return;\n event.preventDefault();\n onSelect();\n };\n\n return (\n <g>\n <defs>\n <linearGradient id={gradientId} gradientUnits=\"userSpaceOnUse\" x1={sourceX} x2={targetX}>\n <stop offset=\"0%\" stopColor={sourceColor ?? colorMap[sourceName] ?? 'var(--chart-blue)'} />\n <stop offset=\"100%\" stopColor={targetColor ?? colorMap[targetName] ?? 'var(--chart-blue)'} />\n </linearGradient>\n </defs>\n <path\n d={path}\n fill={color ?? `url(#${gradientId})`}\n fillOpacity={highlighted ? 0.75 : 0.32}\n stroke=\"none\"\n role={clickable ? 'button' : undefined}\n tabIndex={clickable ? 0 : undefined}\n aria-label={clickable ? 'Select Sankey curve' : undefined}\n onClick={clickable ? onSelect : undefined}\n onKeyDown={clickable ? handleKeyDown : undefined}\n onMouseEnter={() => onHoverChange(sourceName)}\n onMouseLeave={() => onHoverChange(undefined)}\n style={{ cursor: clickable ? 'pointer' : undefined, transition: 'fill-opacity 0.18s ease' }}\n />\n </g>\n );\n}\n"],"names":["RechartsSankey"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sankey-chart-S7iF7d0E.cjs","sources":["../src/ds/components/SankeyChart/sankey-chart-utils.ts","../src/ds/components/SankeyChart/sankeyColor.ts","../src/ds/components/SankeyChart/sankey-context.tsx","../src/ds/components/SankeyChart/use-sankey-hover-tooltip.ts","../src/ds/components/SankeyChart/sankey-portal-tooltip.tsx","../src/ds/components/SankeyChart/use-sankey-chart-measurements.ts","../src/ds/components/SankeyChart/use-sankey-geometry-transition.ts","../src/ds/components/SankeyChart/sankey-chart.tsx"],"sourcesContent":["export type SankeyChartRecord = Record<string, unknown>;\n\nexport type SankeyChartColumn = {\n id: string;\n label: string;\n};\n\nexport type SankeyChartNode = {\n id: string;\n name: string;\n label: string;\n column: SankeyChartColumn;\n value: string | number;\n displayValue?: number;\n};\n\nexport type SankeyChartLink = {\n id: string;\n source: number;\n target: number;\n value: number;\n displayValue: number;\n sourceNode: SankeyChartNode;\n targetNode: SankeyChartNode;\n records: Array<SankeyChartRecord>;\n};\n\nexport type SankeyChartGraph = {\n nodes: Array<SankeyChartNode>;\n links: Array<SankeyChartLink>;\n};\n\nexport type FixedSankeyNodeGeometry = {\n x: number;\n centerY: number;\n y: number;\n height: number;\n};\n\nexport type FixedSankeyLinkGeometry = {\n sourceX: number;\n targetX: number;\n sourceY: number;\n targetY: number;\n sourceWidth: number;\n targetWidth: number;\n};\n\nexport type FixedSankeyGeometry = {\n nodes: Map<string, FixedSankeyNodeGeometry>;\n links: Map<string, FixedSankeyLinkGeometry>;\n};\n\nexport type SankeyChartNodeSelection = {\n column: SankeyChartColumn;\n value: string | number;\n};\n\nexport type SankeyChartCurveSelection = {\n source: {\n column: SankeyChartColumn;\n value: string | number;\n };\n target: {\n column: SankeyChartColumn;\n value: string | number;\n };\n records: Array<SankeyChartRecord>;\n};\n\nconst EMPTY_GRAPH: SankeyChartGraph = { nodes: [], links: [] };\n\nexport function getSankeyChartValue(value: unknown): string | number | undefined {\n if (typeof value === 'string') {\n const trimmedValue = value.trim();\n return trimmedValue.length > 0 ? trimmedValue : undefined;\n }\n\n if (typeof value === 'number' && Number.isFinite(value)) return value;\n\n return undefined;\n}\n\nexport function reorderSankeyChartColumns(\n columns: Array<SankeyChartColumn>,\n startIndex: number,\n endIndex: number,\n): Array<SankeyChartColumn> {\n if (\n startIndex === endIndex ||\n startIndex < 0 ||\n endIndex < 0 ||\n startIndex >= columns.length ||\n endIndex >= columns.length\n ) {\n return columns;\n }\n\n const reorderedColumns = [...columns];\n const [movedColumn] = reorderedColumns.splice(startIndex, 1);\n if (!movedColumn) return columns;\n reorderedColumns.splice(endIndex, 0, movedColumn);\n return reorderedColumns;\n}\n\nexport function buildSankeyChartGraph(\n data: Array<SankeyChartRecord>,\n columns: Array<SankeyChartColumn>,\n getRecordWeight: (record: SankeyChartRecord) => number = () => 1,\n getRecordNodeId?: (record: SankeyChartRecord, column: SankeyChartColumn) => string,\n getRecordNodeLabel?: (record: SankeyChartRecord, column: SankeyChartColumn) => string,\n getRecordNodeValue?: (record: SankeyChartRecord, column: SankeyChartColumn) => number,\n getRecordLayoutWeight?: (record: SankeyChartRecord) => number,\n): SankeyChartGraph {\n if (columns.length < 2 || data.length === 0) return EMPTY_GRAPH;\n\n const nodes: Array<SankeyChartNode> = [];\n const nodeIndexes = new Map<string, number>();\n const linksById = new Map<string, SankeyChartLink>();\n\n const getNode = (\n column: SankeyChartColumn,\n value: string | number,\n label: string,\n displayValue: number | undefined,\n ): { node: SankeyChartNode; index: number } => {\n const id = createNodeId(column.id, value);\n const existingIndex = nodeIndexes.get(id);\n const existingNode = existingIndex === undefined ? undefined : nodes[existingIndex];\n if (existingIndex !== undefined && existingNode) return { node: existingNode, index: existingIndex };\n\n const node: SankeyChartNode = { id, name: String(value), label, column, value, displayValue };\n const index = nodes.length;\n nodes.push(node);\n nodeIndexes.set(id, index);\n return { node, index };\n };\n\n for (let columnIndex = 0; columnIndex < columns.length - 1; columnIndex += 1) {\n const sourceColumn = columns[columnIndex];\n const targetColumn = columns[columnIndex + 1];\n if (!sourceColumn || !targetColumn) continue;\n\n for (const record of data) {\n const displayWeight = getRecordWeight(record);\n const layoutWeight = getRecordLayoutWeight?.(record) ?? displayWeight;\n if (!Number.isFinite(displayWeight) || displayWeight < 0 || !Number.isFinite(layoutWeight) || layoutWeight < 0) {\n continue;\n }\n\n const sourceRecordValue = getSankeyChartValue(record[sourceColumn.id]);\n const targetRecordValue = getSankeyChartValue(record[targetColumn.id]);\n if (sourceRecordValue === undefined || targetRecordValue === undefined) continue;\n\n const sourceValue = getRecordNodeId\n ? getSankeyChartValue(getRecordNodeId(record, sourceColumn))\n : sourceRecordValue;\n const targetValue = getRecordNodeId\n ? getSankeyChartValue(getRecordNodeId(record, targetColumn))\n : targetRecordValue;\n if (sourceValue === undefined || targetValue === undefined) continue;\n\n const sourceLabel = getRecordNodeLabel?.(record, sourceColumn) ?? String(sourceRecordValue);\n const targetLabel = getRecordNodeLabel?.(record, targetColumn) ?? String(targetRecordValue);\n const sourceDisplayValue = getRecordNodeValue?.(record, sourceColumn);\n const targetDisplayValue = getRecordNodeValue?.(record, targetColumn);\n const source = getNode(\n sourceColumn,\n sourceValue,\n sourceLabel,\n sourceDisplayValue !== undefined && Number.isFinite(sourceDisplayValue) && sourceDisplayValue >= 0\n ? sourceDisplayValue\n : undefined,\n );\n const target = getNode(\n targetColumn,\n targetValue,\n targetLabel,\n targetDisplayValue !== undefined && Number.isFinite(targetDisplayValue) && targetDisplayValue >= 0\n ? targetDisplayValue\n : undefined,\n );\n const id = `${source.node.id}->${target.node.id}`;\n const existingLink = linksById.get(id);\n\n if (existingLink) {\n existingLink.value += layoutWeight;\n existingLink.displayValue += displayWeight;\n existingLink.records.push(record);\n } else {\n linksById.set(id, {\n id,\n source: source.index,\n target: target.index,\n value: layoutWeight,\n displayValue: displayWeight,\n sourceNode: source.node,\n targetNode: target.node,\n records: [record],\n });\n }\n }\n }\n\n return { nodes, links: [...linksById.values()] };\n}\n\nexport const SANKEY_NODE_WIDTH = 7;\n\n// mono faces we ship advance at ~0.6em — 0.62 biases toward truncating early\nconst LABEL_CHARACTER_WIDTH_RATIO = 0.62;\nconst LABEL_GUTTER = 16;\nconst LABEL_ELLIPSIS = '…';\n\nexport type SankeyLabelWidths = {\n centered: number;\n edge: number;\n};\n\nexport function getSankeyLabelWidths({\n chartWidth,\n columnCount,\n marginLeft,\n marginRight,\n}: {\n chartWidth: number;\n columnCount: number;\n marginLeft: number;\n marginRight: number;\n}): SankeyLabelWidths {\n if (chartWidth <= 0 || columnCount < 2) {\n return { centered: Number.POSITIVE_INFINITY, edge: Number.POSITIVE_INFINITY };\n }\n\n const columnPitch = (chartWidth - marginLeft - marginRight - SANKEY_NODE_WIDTH) / (columnCount - 1);\n const centered = Math.max(0, columnPitch - LABEL_GUTTER);\n // edge columns anchor at start/end, so their label spreads toward one neighbour instead of two\n const edge = Math.max(0, columnPitch + SANKEY_NODE_WIDTH / 2 - LABEL_GUTTER - centered / 2);\n\n return { centered, edge };\n}\n\nexport function truncateSankeyLabel(\n label: string,\n {\n fontSize,\n maxWidth,\n maxCharacters = Number.POSITIVE_INFINITY,\n }: { fontSize: number; maxWidth: number; maxCharacters?: number },\n): string {\n const widthLimit = Number.isFinite(maxWidth)\n ? Math.floor(maxWidth / (fontSize * LABEL_CHARACTER_WIDTH_RATIO))\n : Number.POSITIVE_INFINITY;\n const limit = Math.min(widthLimit, maxCharacters);\n\n if (label.length <= limit) return label;\n if (limit <= 1) return LABEL_ELLIPSIS;\n\n return `${label.slice(0, limit - 1).trimEnd()}${LABEL_ELLIPSIS}`;\n}\n\nexport function buildFixedSankeyGeometry(\n graph: SankeyChartGraph,\n {\n top,\n bottom,\n left,\n right,\n nodePadding,\n }: { top: number; bottom: number; left: number; right: number; nodePadding: number },\n): FixedSankeyGeometry {\n const nodes = new Map<string, FixedSankeyNodeGeometry>();\n const nodesByColumn = new Map<string, SankeyChartNode[]>();\n const currentNodeWeights = getSankeyChartCurrentNodeWeights(graph);\n\n for (const node of graph.nodes) {\n const columnNodes = nodesByColumn.get(node.column.id) ?? [];\n columnNodes.push(node);\n nodesByColumn.set(node.column.id, columnNodes);\n }\n\n const columns = [...nodesByColumn.values()];\n const slotHeights = columns.map(columnNodes =>\n Math.max(0, (bottom - top - nodePadding * Math.max(0, columnNodes.length - 1)) / columnNodes.length),\n );\n const maximumNodeHeight = Math.min(...slotHeights) * 0.6;\n\n columns.forEach((columnNodes, columnIndex) => {\n const slotHeight = slotHeights[columnIndex] ?? 0;\n const columnTotal = columnNodes.reduce(\n (total, node) => total + (node.displayValue ?? currentNodeWeights.get(node.id) ?? 0),\n 0,\n );\n const x = columns.length > 1 ? left + ((right - left) * columnIndex) / (columns.length - 1) : left;\n\n columnNodes.forEach((node, index) => {\n const value = node.displayValue ?? currentNodeWeights.get(node.id) ?? 0;\n const centerY = top + index * (slotHeight + nodePadding) + slotHeight / 2;\n const height = columnTotal > 0 ? maximumNodeHeight * (value / columnTotal) : 0;\n nodes.set(node.id, { x, centerY, y: centerY - height / 2, height });\n });\n });\n\n const links = new Map<string, FixedSankeyLinkGeometry>();\n const outgoingTotals = new Map<string, number>();\n const incomingTotals = new Map<string, number>();\n for (const link of graph.links) {\n outgoingTotals.set(link.sourceNode.id, (outgoingTotals.get(link.sourceNode.id) ?? 0) + link.displayValue);\n incomingTotals.set(link.targetNode.id, (incomingTotals.get(link.targetNode.id) ?? 0) + link.displayValue);\n }\n const sourceOffsets = new Map([...nodes].map(([id, geometry]) => [id, geometry.y]));\n const targetOffsets = new Map([...nodes].map(([id, geometry]) => [id, geometry.y]));\n\n for (const link of graph.links) {\n const sourceGeometry = nodes.get(link.sourceNode.id);\n const targetGeometry = nodes.get(link.targetNode.id);\n if (!sourceGeometry || !targetGeometry) continue;\n const sourceTotal = outgoingTotals.get(link.sourceNode.id) ?? 0;\n const targetTotal = incomingTotals.get(link.targetNode.id) ?? 0;\n const sourceWidth = sourceTotal > 0 ? sourceGeometry.height * (link.displayValue / sourceTotal) : 0;\n const targetWidth = targetTotal > 0 ? targetGeometry.height * (link.displayValue / targetTotal) : 0;\n const sourceOffset = sourceOffsets.get(link.sourceNode.id) ?? sourceGeometry.y;\n const targetOffset = targetOffsets.get(link.targetNode.id) ?? targetGeometry.y;\n links.set(link.id, {\n // ribbons anchor to their own nodes' columns: depth-based layouts (like\n // the underlying recharts sankey) would otherwise stretch links of a\n // disconnected graph across the full chart width\n sourceX: sourceGeometry.x + SANKEY_NODE_WIDTH,\n targetX: targetGeometry.x,\n sourceY: sourceOffset + sourceWidth / 2,\n targetY: targetOffset + targetWidth / 2,\n sourceWidth,\n targetWidth,\n });\n sourceOffsets.set(link.sourceNode.id, sourceOffset + sourceWidth);\n targetOffsets.set(link.targetNode.id, targetOffset + targetWidth);\n }\n\n return { nodes, links };\n}\n\nexport function getSankeyChartNodeWeights(graph: SankeyChartGraph): Map<string, number> {\n const incomingWeights = new Map<string, number>();\n const outgoingWeights = new Map<string, number>();\n\n for (const link of graph.links) {\n outgoingWeights.set(link.sourceNode.id, (outgoingWeights.get(link.sourceNode.id) ?? 0) + link.value);\n incomingWeights.set(link.targetNode.id, (incomingWeights.get(link.targetNode.id) ?? 0) + link.value);\n }\n\n return new Map(\n graph.nodes.map(node => [node.id, Math.max(incomingWeights.get(node.id) ?? 0, outgoingWeights.get(node.id) ?? 0)]),\n );\n}\n\nfunction getSankeyChartCurrentNodeWeights(graph: SankeyChartGraph): Map<string, number> {\n const incomingWeights = new Map<string, number>();\n const outgoingWeights = new Map<string, number>();\n\n for (const link of graph.links) {\n outgoingWeights.set(link.sourceNode.id, (outgoingWeights.get(link.sourceNode.id) ?? 0) + link.displayValue);\n incomingWeights.set(link.targetNode.id, (incomingWeights.get(link.targetNode.id) ?? 0) + link.displayValue);\n }\n\n return new Map(\n graph.nodes.map(node => [node.id, Math.max(incomingWeights.get(node.id) ?? 0, outgoingWeights.get(node.id) ?? 0)]),\n );\n}\n\nexport function getSankeyChartCurveSelection(link: SankeyChartLink): SankeyChartCurveSelection {\n return {\n source: { column: link.sourceNode.column, value: link.sourceNode.value },\n target: { column: link.targetNode.column, value: link.targetNode.value },\n records: link.records,\n };\n}\n\nexport function getSankeyChartNodeSelection(node: SankeyChartNode): SankeyChartNodeSelection {\n return { column: node.column, value: node.value };\n}\n\nfunction createNodeId(columnId: string, value: string | number) {\n return JSON.stringify([columnId, typeof value, value]);\n}\n","import { hashLabel } from '@/lib/colors';\n\nexport const sankeySeriesColors: readonly string[] = [\n 'var(--chart-blue)',\n 'var(--chart-orange)',\n 'var(--chart-green)',\n 'var(--chart-purple)',\n 'var(--chart-pink)',\n 'var(--chart-red)',\n 'var(--chart-yellow)',\n 'var(--chart-blue-deep)',\n];\n\nexport function buildSankeyColorMap(names: string[]) {\n const colors: Record<string, string> = {};\n for (const name of names) {\n colors[name] = sankeySeriesColors[hashLabel(name) % sankeySeriesColors.length] ?? 'var(--chart-blue)';\n }\n return colors;\n}\n","import { createContext, useContext, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { buildSankeyChartGraph, reorderSankeyChartColumns } from './sankey-chart-utils';\nimport type { SankeyChartColumn, SankeyChartGraph, SankeyChartRecord } from './sankey-chart-utils';\nimport { buildSankeyColorMap } from './sankeyColor';\n\nexport type SankeyProps = {\n data: Array<SankeyChartRecord>;\n columns: Array<SankeyChartColumn>;\n children: ReactNode;\n columnOrder?: Array<string>;\n onColumnOrderChange?: (columnOrder: Array<string>) => void;\n visibleColumnIds?: Array<string>;\n onVisibleColumnIdsChange?: (columnIds: Array<string>) => void;\n getRecordWeight?: (record: SankeyChartRecord) => number;\n getRecordLayoutWeight?: (record: SankeyChartRecord) => number;\n getRecordNodeId?: (record: SankeyChartRecord, column: SankeyChartColumn) => string;\n getRecordNodeLabel?: (record: SankeyChartRecord, column: SankeyChartColumn) => string;\n getRecordNodeValue?: (record: SankeyChartRecord, column: SankeyChartColumn) => number;\n getColumnColor?: (column: SankeyChartColumn) => string;\n};\n\nexport type SankeyControlColumn = SankeyChartColumn & {\n visible: boolean;\n};\n\nexport type SankeyControls = {\n columns: Array<SankeyControlColumn>;\n toggleColumn: (columnId: string) => void;\n reorderColumns: (sourceIndex: number, destinationIndex: number) => void;\n};\n\ntype SankeyRenderContext = {\n graph: SankeyChartGraph;\n enabledColumns: Array<SankeyChartColumn>;\n colorMap: Record<string, string>;\n usesFixedGeometry: boolean;\n};\n\nconst SankeyControlsContext = createContext<SankeyControls | undefined>(undefined);\nconst SankeyRenderContext = createContext<SankeyRenderContext | undefined>(undefined);\n\nexport function Sankey({\n data,\n columns,\n children,\n columnOrder,\n onColumnOrderChange,\n visibleColumnIds,\n onVisibleColumnIdsChange,\n getRecordWeight,\n getRecordLayoutWeight,\n getRecordNodeId,\n getRecordNodeLabel,\n getRecordNodeValue,\n getColumnColor,\n}: SankeyProps) {\n const columnIds = columns.map(column => column.id);\n const [internalOrder, setInternalOrder] = useState(columnIds);\n const [internalVisibleIds, setInternalVisibleIds] = useState(columnIds);\n const orderedColumns = orderColumns(columns, columnOrder ?? internalOrder);\n const visibleIds = new Set(visibleColumnIds ?? internalVisibleIds);\n const enabledColumns = orderedColumns.filter(column => visibleIds.has(column.id));\n const graph = buildSankeyChartGraph(\n data,\n enabledColumns,\n getRecordWeight,\n getRecordNodeId,\n getRecordNodeLabel,\n getRecordNodeValue,\n getRecordLayoutWeight,\n );\n const defaultColorMap = buildSankeyColorMap(graph.nodes.map(node => String(node.value)));\n const colorMap = Object.fromEntries(\n graph.nodes.map(node => [\n String(node.value),\n getColumnColor?.(node.column) ?? defaultColorMap[String(node.value)] ?? 'var(--chart-blue)',\n ]),\n );\n\n const setVisibleColumns = (nextIds: Array<string>) => {\n if (visibleColumnIds === undefined) setInternalVisibleIds(nextIds);\n onVisibleColumnIdsChange?.(nextIds);\n };\n\n const setColumnOrder = (nextOrder: Array<string>) => {\n if (columnOrder === undefined) setInternalOrder(nextOrder);\n onColumnOrderChange?.(nextOrder);\n };\n\n const toggleColumn = (columnId: string) => {\n const nextIds = visibleIds.has(columnId)\n ? orderedColumns.filter(column => visibleIds.has(column.id) && column.id !== columnId).map(column => column.id)\n : orderedColumns.filter(column => visibleIds.has(column.id) || column.id === columnId).map(column => column.id);\n setVisibleColumns(nextIds);\n };\n\n const reorderColumns = (sourceIndex: number, destinationIndex: number) => {\n const reorderedEnabled = reorderSankeyChartColumns(enabledColumns, sourceIndex, destinationIndex);\n const enabledIterator = reorderedEnabled[Symbol.iterator]();\n const nextColumns = orderedColumns.map(column =>\n visibleIds.has(column.id) ? (enabledIterator.next().value ?? column) : column,\n );\n setColumnOrder(nextColumns.map(column => column.id));\n };\n\n const controlColumns = orderedColumns.map(column => ({ ...column, visible: visibleIds.has(column.id) }));\n\n return (\n <SankeyControlsContext.Provider value={{ columns: controlColumns, toggleColumn, reorderColumns }}>\n <SankeyRenderContext.Provider\n value={{ graph, enabledColumns, colorMap, usesFixedGeometry: getRecordLayoutWeight !== undefined }}\n >\n {children}\n </SankeyRenderContext.Provider>\n </SankeyControlsContext.Provider>\n );\n}\n\n// Context providers and their hooks intentionally share this module.\n// eslint-disable-next-line react-refresh/only-export-components\nexport function useSankey() {\n const context = useContext(SankeyControlsContext);\n if (!context) throw new Error('useSankey must be used within Sankey');\n return context;\n}\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport function useSankeyRenderContext() {\n const context = useContext(SankeyRenderContext);\n if (!context) throw new Error('SankeyChart must be used within Sankey');\n return context;\n}\n\nfunction orderColumns(columns: Array<SankeyChartColumn>, order: Array<string>) {\n const positions = new Map(order.map((id, index) => [id, index]));\n return [...columns].sort(\n (left, right) => (positions.get(left.id) ?? columns.length) - (positions.get(right.id) ?? columns.length),\n );\n}\n","import { useId, useState } from 'react';\n\nexport type SankeyTooltipPosition = {\n left: number;\n top: number;\n placement: 'above' | 'below';\n};\n\nexport const SANKEY_TOOLTIP_MAX_WIDTH_PX = 320;\n\nconst TOOLTIP_TOP_FLIP_THRESHOLD = 120;\nconst TOOLTIP_EDGE_INSET = 16;\nconst TOOLTIP_RIGHT_INSET = SANKEY_TOOLTIP_MAX_WIDTH_PX + TOOLTIP_EDGE_INSET;\n\nexport function useSankeyHoverTooltip(enabled: boolean) {\n const id = useId();\n const [isHovered, setIsHovered] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n const [position, setPosition] = useState<SankeyTooltipPosition>();\n\n function showAt(target: Element) {\n if (!enabled) return;\n const rect = target.getBoundingClientRect();\n const placement = rect.top < TOOLTIP_TOP_FLIP_THRESHOLD ? 'below' : 'above';\n setPosition({\n left: Math.min(\n Math.max(rect.left, TOOLTIP_EDGE_INSET),\n Math.max(window.innerWidth - TOOLTIP_RIGHT_INSET, TOOLTIP_EDGE_INSET),\n ),\n top: placement === 'above' ? rect.top - 8 : rect.bottom + 8,\n placement,\n });\n }\n\n return {\n id,\n position,\n isVisible: Boolean(enabled && position && (isHovered || isFocused)),\n showOnHover(target: Element) {\n setIsHovered(true);\n showAt(target);\n },\n hideOnLeave() {\n setIsHovered(false);\n },\n showOnFocus(target: Element) {\n setIsFocused(true);\n showAt(target);\n },\n hideOnBlur() {\n setIsFocused(false);\n },\n };\n}\n","import { createPortal } from 'react-dom';\n\nimport { SANKEY_TOOLTIP_MAX_WIDTH_PX } from './use-sankey-hover-tooltip';\nimport type { SankeyTooltipPosition } from './use-sankey-hover-tooltip';\nimport { ChartTooltip } from '@/ds/components/ChartTooltip';\n\nexport function SankeyPortalTooltip({\n id,\n title,\n description,\n position,\n visible,\n}: {\n id: string;\n title: string;\n description: string;\n position: SankeyTooltipPosition | undefined;\n visible: boolean;\n}) {\n if (!visible || !position) return null;\n\n return createPortal(\n <ChartTooltip\n aria-label={`${title}: ${description}`}\n className=\"pointer-events-none fixed z-50 p-2\"\n id={id}\n role=\"tooltip\"\n style={{\n left: position.left,\n maxWidth: `min(${SANKEY_TOOLTIP_MAX_WIDTH_PX}px, calc(100vw - 2rem))`,\n top: position.top,\n transform: position.placement === 'above' ? 'translateY(-100%)' : undefined,\n width: 'max-content',\n }}\n >\n <div className=\"text-column\">{title}</div>\n <div className=\"whitespace-pre-wrap text-muted-foreground\">{description}</div>\n </ChartTooltip>,\n document.body,\n );\n}\n","import { useEffect, useMemo, useRef, useState } from 'react';\nimport type { ComponentProps, CSSProperties } from 'react';\nimport type { Sankey as RechartsSankey } from 'recharts';\n\nimport { buildFixedSankeyGeometry, getSankeyLabelWidths, SANKEY_NODE_WIDTH } from './sankey-chart-utils';\nimport type { SankeyChartGraph } from './sankey-chart-utils';\n\ntype SankeyChartMeasurementsOptions = {\n graph: SankeyChartGraph;\n height: CSSProperties['height'];\n margin: ComponentProps<typeof RechartsSankey>['margin'];\n usesFixedGeometry: boolean;\n};\n\nexport function useSankeyChartMeasurements({\n graph,\n height,\n margin,\n usesFixedGeometry,\n}: SankeyChartMeasurementsOptions) {\n const chartContainerRef = useRef<HTMLDivElement>(null);\n const [measuredHeight, setMeasuredHeight] = useState(typeof height === 'number' ? height : 320);\n const [measuredWidth, setMeasuredWidth] = useState(800);\n\n useEffect(() => {\n const element = chartContainerRef.current;\n if (!element) return;\n\n const updateDimensions = () => {\n if (element.offsetHeight > 0) setMeasuredHeight(element.offsetHeight);\n if (element.offsetWidth > 0) setMeasuredWidth(element.offsetWidth);\n };\n\n updateDimensions();\n if (typeof ResizeObserver === 'undefined') return;\n\n const observer = new ResizeObserver(updateDimensions);\n observer.observe(element);\n return () => observer.disconnect();\n }, [height]);\n\n const fixedGeometry = useMemo(\n () =>\n usesFixedGeometry\n ? buildFixedSankeyGeometry(graph, {\n top: Number(margin?.top ?? 64),\n bottom: measuredHeight - Number(margin?.bottom ?? 12),\n left: Number(margin?.left ?? 160),\n right: measuredWidth - Number(margin?.right ?? 160) - SANKEY_NODE_WIDTH,\n nodePadding: 8,\n })\n : undefined,\n [graph, margin?.bottom, margin?.left, margin?.right, margin?.top, measuredHeight, measuredWidth, usesFixedGeometry],\n );\n\n // recharts spaces columns by link depth, so the graph — not the enabled column list — sets the pitch\n const labelWidths = getSankeyLabelWidths({\n chartWidth: measuredWidth,\n columnCount: new Set(graph.nodes.map(node => node.column.id)).size,\n marginLeft: Number(margin?.left ?? 160),\n marginRight: Number(margin?.right ?? 160),\n });\n\n return { chartContainerRef, fixedGeometry, labelWidths };\n}\n","import { useEffect, useState, useSyncExternalStore } from 'react';\n\nimport type { FixedSankeyGeometry, FixedSankeyLinkGeometry, FixedSankeyNodeGeometry } from './sankey-chart-utils';\n\nconst TRANSITION_DURATION_MS = 850;\n\ntype GeometryTransition = {\n from: FixedSankeyGeometry;\n to: FixedSankeyGeometry;\n startedAt: number;\n};\n\nfunction mix(from: number, to: number, progress: number) {\n return from + (to - from) * progress;\n}\n\nfunction interpolateNode(\n from: FixedSankeyNodeGeometry,\n to: FixedSankeyNodeGeometry,\n progress: number,\n): FixedSankeyNodeGeometry {\n return {\n x: mix(from.x, to.x, progress),\n y: mix(from.y, to.y, progress),\n centerY: mix(from.centerY, to.centerY, progress),\n height: mix(from.height, to.height, progress),\n };\n}\n\nfunction interpolateLink(\n from: FixedSankeyLinkGeometry,\n to: FixedSankeyLinkGeometry,\n progress: number,\n): FixedSankeyLinkGeometry {\n return {\n sourceX: mix(from.sourceX, to.sourceX, progress),\n targetX: mix(from.targetX, to.targetX, progress),\n sourceY: mix(from.sourceY, to.sourceY, progress),\n targetY: mix(from.targetY, to.targetY, progress),\n sourceWidth: mix(from.sourceWidth, to.sourceWidth, progress),\n targetWidth: mix(from.targetWidth, to.targetWidth, progress),\n };\n}\n\n/**\n * Preserves node identity while pairing replaced links by render order. That\n * synthetic pairing keeps every ribbon moving continuously through a reorder,\n * even though changing adjacency means the old and new links have different IDs.\n */\nexport function interpolateSankeyGeometry(\n from: FixedSankeyGeometry,\n to: FixedSankeyGeometry,\n progress: number,\n): FixedSankeyGeometry {\n const replacedPreviousLinks = [...from.links].filter(([id]) => !to.links.has(id)).map(([, link]) => link);\n const nodes = new Map<string, FixedSankeyNodeGeometry>();\n const links = new Map<string, FixedSankeyLinkGeometry>();\n\n for (const [id, target] of to.nodes) {\n nodes.set(id, interpolateNode(from.nodes.get(id) ?? target, target, progress));\n }\n\n let replacedLinkIndex = 0;\n for (const [id, target] of to.links) {\n const matchingSource = from.links.get(id);\n const syntheticSource = matchingSource ? undefined : replacedPreviousLinks[replacedLinkIndex++];\n links.set(id, interpolateLink(matchingSource ?? syntheticSource ?? target, target, progress));\n }\n\n return { nodes, links };\n}\n\nfunction prefersReducedMotion() {\n return (\n typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(prefers-reduced-motion: reduce)').matches\n );\n}\n\nclass SankeyGeometryMotionStore {\n private animationFrame = 0;\n private key?: string;\n private listeners = new Set<() => void>();\n private snapshot?: FixedSankeyGeometry;\n private target?: FixedSankeyGeometry;\n private transition?: GeometryTransition;\n\n constructor(key?: string, geometry?: FixedSankeyGeometry) {\n this.key = key;\n this.snapshot = geometry;\n this.target = geometry;\n }\n\n getSnapshot = () => this.snapshot;\n\n subscribe = (listener: () => void) => {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n };\n\n transitionTo(key: string | undefined, geometry: FixedSankeyGeometry | undefined) {\n if (key === this.key && geometry === this.target) return;\n\n const keyChanged = key !== this.key;\n this.key = key;\n this.target = geometry;\n\n if (!keyChanged && geometry && this.transition) {\n this.transition = { ...this.transition, to: geometry };\n return;\n }\n\n cancelAnimationFrame(this.animationFrame);\n this.animationFrame = 0;\n\n if (!keyChanged || !geometry || !this.snapshot || prefersReducedMotion()) {\n this.transition = undefined;\n this.publish(geometry);\n return;\n }\n\n this.transition = { from: this.snapshot, to: geometry, startedAt: performance.now() };\n this.animationFrame = requestAnimationFrame(this.animate);\n }\n\n dispose() {\n cancelAnimationFrame(this.animationFrame);\n this.listeners.clear();\n }\n\n private animate = (now: number) => {\n const transition = this.transition;\n if (!transition) return;\n\n const elapsed = Math.min((now - transition.startedAt) / TRANSITION_DURATION_MS, 1);\n const progress = 1 - (1 - elapsed) ** 3;\n this.publish(interpolateSankeyGeometry(transition.from, transition.to, progress));\n\n if (elapsed < 1) {\n this.animationFrame = requestAnimationFrame(this.animate);\n return;\n }\n\n this.transition = undefined;\n this.animationFrame = 0;\n };\n\n private publish(geometry: FixedSankeyGeometry | undefined) {\n this.snapshot = geometry;\n for (const listener of this.listeners) listener();\n }\n}\n\nexport function useSankeyGeometryTransition({\n geometry,\n transitionKey,\n}: {\n geometry?: FixedSankeyGeometry;\n transitionKey?: string;\n}) {\n const [store] = useState(() => new SankeyGeometryMotionStore(transitionKey, geometry));\n const animatedGeometry = useSyncExternalStore(store.subscribe, store.getSnapshot, store.getSnapshot);\n\n useEffect(() => {\n store.transitionTo(transitionKey, geometry);\n }, [geometry, store, transitionKey]);\n\n useEffect(() => () => store.dispose(), [store]);\n\n return animatedGeometry;\n}\n","import { useState } from 'react';\nimport type { ComponentProps, CSSProperties, KeyboardEvent } from 'react';\nimport { ResponsiveContainer, Sankey as RechartsSankey } from 'recharts';\nimport {\n getSankeyChartCurveSelection,\n getSankeyChartNodeSelection,\n getSankeyChartNodeWeights,\n SANKEY_NODE_WIDTH,\n truncateSankeyLabel,\n} from './sankey-chart-utils';\nimport type {\n SankeyChartColumn,\n SankeyChartCurveSelection,\n SankeyChartNodeSelection,\n SankeyLabelWidths,\n} from './sankey-chart-utils';\nimport { useSankeyRenderContext } from './sankey-context';\nimport { SankeyPortalTooltip } from './sankey-portal-tooltip';\nimport { useSankeyChartMeasurements } from './use-sankey-chart-measurements';\nimport { useSankeyGeometryTransition } from './use-sankey-geometry-transition';\nimport { useSankeyHoverTooltip } from './use-sankey-hover-tooltip';\nimport { CHART_LABEL_FONT_SIZE, CHART_TICK_FONT_SIZE, Colors } from '@/ds/tokens';\nimport { cn } from '@/lib/utils';\n\nconst NODE_LABEL_FONT_SIZE = CHART_TICK_FONT_SIZE;\nconst COLUMN_LABEL_FONT_SIZE = CHART_LABEL_FONT_SIZE;\n// pre-measurement cap, kept so wide charts read unchanged\nconst NODE_LABEL_MAX_CHARACTERS = 23;\n\nexport type SankeyChartProps = {\n height?: CSSProperties['height'];\n getNodeColor?: (selection: SankeyChartNodeSelection) => string;\n getLinkColor?: (selection: SankeyChartCurveSelection) => string;\n className?: string;\n margin?: ComponentProps<typeof RechartsSankey>['margin'];\n onCurveClick?: (selection: SankeyChartCurveSelection) => void;\n onNodeClick?: (selection: SankeyChartNodeSelection) => void;\n isNodeClickable?: (selection: SankeyChartNodeSelection) => boolean;\n getColumnDescription?: (column: SankeyChartColumn) => string | undefined;\n /** Suppress the built-in SVG column headers when the caller renders its own header row. */\n hideColumnLabels?: boolean;\n /** Animate fixed node and ribbon geometry when this perspective key changes. */\n geometryTransitionKey?: string;\n};\n\nexport function SankeyChart({\n height = 320,\n className,\n margin = { top: 64, right: 160, bottom: 12, left: 160 },\n onCurveClick,\n onNodeClick,\n isNodeClickable,\n getColumnDescription,\n hideColumnLabels = false,\n geometryTransitionKey,\n getNodeColor,\n getLinkColor,\n}: SankeyChartProps) {\n const { graph, enabledColumns, colorMap, usesFixedGeometry } = useSankeyRenderContext();\n const { chartContainerRef, fixedGeometry, labelWidths } = useSankeyChartMeasurements({\n graph,\n height,\n margin,\n usesFixedGeometry,\n });\n const animatedGeometry = useSankeyGeometryTransition({\n geometry: fixedGeometry,\n transitionKey: geometryTransitionKey,\n });\n const [hoveredSourceName, setHoveredSourceName] = useState<string>();\n const [focusedSourceName, setFocusedSourceName] = useState<string>();\n const activeSourceName = hoveredSourceName ?? focusedSourceName;\n const firstColumnId = enabledColumns[0]?.id;\n const lastColumnId = enabledColumns.at(-1)?.id;\n const nodeWeights = getSankeyChartNodeWeights(graph);\n // Each node's percentage is its share of its own column, so later columns\n // with more counted traces than the first column never exceed 100%.\n const columnTotals = new Map<string, number>();\n for (const node of graph.nodes) {\n const nodeValue = node.displayValue ?? nodeWeights.get(node.id) ?? 0;\n columnTotals.set(node.column.id, (columnTotals.get(node.column.id) ?? 0) + nodeValue);\n }\n\n return (\n <div className={cn('min-w-0', className)}>\n {graph.links.length === 0 ? (\n <div\n className=\"flex items-center justify-center rounded-md border border-border text-caption text-muted-foreground\"\n style={{ height }}\n >\n Select at least two columns with data to display a flow\n </div>\n ) : (\n <div ref={chartContainerRef} style={{ height }}>\n <ResponsiveContainer\n width=\"100%\"\n height=\"100%\"\n initialDimension={{ width: 800, height: typeof height === 'number' ? height : 320 }}\n >\n <RechartsSankey\n data={graph}\n nodeWidth={SANKEY_NODE_WIDTH}\n nodePadding={56}\n margin={margin}\n node={(props: SankeyNodeRendererProps) => {\n const node = graph.nodes[props.index];\n const showColumnLabel =\n !hideColumnLabels && node\n ? graph.nodes.findIndex(candidate => candidate.column.id === node.column.id) === props.index\n : false;\n const nodeGeometry = node ? animatedGeometry?.nodes.get(node.id) : undefined;\n const selection = node ? getSankeyChartNodeSelection(node) : undefined;\n const clickable = Boolean(\n onNodeClick && selection && (isNodeClickable === undefined || isNodeClickable(selection)),\n );\n return (\n <SankeyNode\n {...props}\n x={nodeGeometry?.x ?? props.x}\n y={nodeGeometry?.y ?? props.y}\n height={nodeGeometry?.height ?? props.height}\n colorMap={colorMap}\n color={selection ? getNodeColor?.(selection) : undefined}\n columnLabel={node?.column.label}\n columnDescription={node ? getColumnDescription?.(node.column) : undefined}\n label={node?.label}\n nodeValue={node?.displayValue}\n layoutValue={nodeGeometry ? undefined : node ? nodeWeights.get(node.id) : undefined}\n columnTotal={node ? (columnTotals.get(node.column.id) ?? 0) : 0}\n showColumnLabel={showColumnLabel}\n isFirstColumn={node?.column.id === firstColumnId}\n isLastColumn={node?.column.id === lastColumnId}\n labelWidths={labelWidths}\n onFocusChange={setFocusedSourceName}\n onHoverChange={setHoveredSourceName}\n clickable={clickable}\n onSelect={() => {\n if (selection && clickable) onNodeClick?.(selection);\n }}\n />\n );\n }}\n link={(props: SankeyLinkRendererProps) => {\n const link = graph.links[props.index];\n const selection = link ? getSankeyChartCurveSelection(link) : undefined;\n const linkGeometry = link ? animatedGeometry?.links.get(link.id) : undefined;\n const sourceX = linkGeometry?.sourceX ?? props.sourceX;\n const targetX = linkGeometry?.targetX ?? props.targetX;\n const fixedControlX = linkGeometry ? (sourceX + targetX) / 2 : undefined;\n return (\n <SankeyLink\n {...props}\n sourceX={sourceX}\n targetX={targetX}\n sourceControlX={fixedControlX ?? props.sourceControlX}\n targetControlX={fixedControlX ?? props.targetControlX}\n sourceY={linkGeometry?.sourceY ?? props.sourceY}\n targetY={linkGeometry?.targetY ?? props.targetY}\n sourceWidth={linkGeometry?.sourceWidth}\n targetWidth={linkGeometry?.targetWidth}\n colorMap={colorMap}\n highlighted={String(props.payload.source.name ?? '') === activeSourceName}\n color={selection ? getLinkColor?.(selection) : undefined}\n sourceColor={selection ? getNodeColor?.(selection.source) : undefined}\n targetColor={selection ? getNodeColor?.(selection.target) : undefined}\n displayValue={link?.displayValue}\n layoutValue={link?.value}\n onHoverChange={setHoveredSourceName}\n clickable={onCurveClick !== undefined}\n onSelect={() => {\n if (link) onCurveClick?.(getSankeyChartCurveSelection(link));\n }}\n />\n );\n }}\n />\n </ResponsiveContainer>\n </div>\n )}\n </div>\n );\n}\n\ntype SankeyNodeRendererProps = {\n x: number;\n y: number;\n width: number;\n height: number;\n index: number;\n payload: { name?: string | number; value?: string | number };\n};\n\ntype SankeyLinkRendererProps = {\n sourceX: number;\n targetX: number;\n sourceY: number;\n targetY: number;\n sourceControlX: number;\n targetControlX: number;\n linkWidth: number;\n index: number;\n payload: { source: { name?: string | number }; target: { name?: string | number } };\n};\n\ntype SankeyNodeProps = SankeyNodeRendererProps & {\n colorMap: Record<string, string>;\n color?: string;\n columnLabel?: string;\n columnDescription?: string;\n label?: string;\n nodeValue?: number;\n layoutValue?: number;\n columnTotal: number;\n showColumnLabel: boolean;\n isFirstColumn: boolean;\n isLastColumn: boolean;\n labelWidths: SankeyLabelWidths;\n clickable: boolean;\n onFocusChange: (sourceName: string | undefined) => void;\n onHoverChange: (sourceName: string | undefined) => void;\n onSelect: () => void;\n};\n\nfunction SankeyNode({\n x,\n y,\n width,\n height,\n payload,\n colorMap,\n color,\n columnLabel,\n columnDescription,\n label,\n nodeValue,\n layoutValue,\n columnTotal,\n showColumnLabel,\n isFirstColumn,\n isLastColumn,\n labelWidths,\n clickable,\n onFocusChange,\n onHoverChange,\n onSelect,\n}: SankeyNodeProps) {\n const name = typeof payload.name === 'string' || typeof payload.name === 'number' ? String(payload.name) : '';\n const displayLabel = label ?? name;\n const descriptionIndex = displayLabel.indexOf('\\n');\n const visibleDisplayLabel = descriptionIndex >= 0 ? displayLabel.slice(0, descriptionIndex) : displayLabel;\n const description = descriptionIndex >= 0 ? displayLabel.slice(descriptionIndex + 1) : undefined;\n const accessibleLabel = displayLabel.replaceAll('\\n', '. ');\n const nodeLabelWidth = isFirstColumn || isLastColumn ? labelWidths.edge : labelWidths.centered;\n const visibleLabel = truncateSankeyLabel(visibleDisplayLabel, {\n fontSize: NODE_LABEL_FONT_SIZE,\n maxWidth: nodeLabelWidth,\n maxCharacters: NODE_LABEL_MAX_CHARACTERS,\n });\n const visibleColumnLabel = columnLabel\n ? truncateSankeyLabel(columnLabel, { fontSize: COLUMN_LABEL_FONT_SIZE, maxWidth: nodeLabelWidth })\n : undefined;\n const tooltip = useSankeyHoverTooltip(description !== undefined);\n const numericValue = nodeValue ?? (typeof payload.value === 'number' ? payload.value : Number(payload.value));\n const value = Number.isFinite(numericValue) ? String(numericValue) : '';\n const percentage =\n columnTotal > 0 && Number.isFinite(numericValue) ? Math.round((numericValue / columnTotal) * 100) : 0;\n const visibleHeight = scaleSankeyDimension(height, numericValue, layoutValue);\n const visibleY = y + (height - visibleHeight) / 2;\n const textAnchor = isFirstColumn ? 'start' : isLastColumn ? 'end' : 'middle';\n const labelX = isFirstColumn ? x : isLastColumn ? x + width : x + width / 2;\n const nodeFill = colorMap[name] ?? 'var(--chart-blue)';\n const handleKeyDown = (event: KeyboardEvent<SVGGElement>) => {\n if (event.key !== 'Enter' && event.key !== ' ') return;\n event.preventDefault();\n onSelect();\n };\n\n return (\n <>\n {/* Rendered outside the interactive group so hovering the header never opens a theme tooltip. */}\n {showColumnLabel && visibleColumnLabel && columnLabel ? (\n <SankeyColumnHeader\n x={labelX}\n textAnchor={textAnchor}\n fill={color ? Colors.foreground : nodeFill}\n label={visibleColumnLabel}\n fullLabel={columnLabel}\n description={columnDescription}\n />\n ) : null}\n <g\n aria-describedby={description ? tooltip.id : undefined}\n aria-label={`${accessibleLabel}: ${value} ${numericValue === 1 ? 'trace' : 'traces'} (${percentage}%)`}\n className=\"outline-hidden focus-visible:[&>rect]:stroke-foreground focus-visible:[&>rect]:stroke-2\"\n onClick={clickable ? onSelect : undefined}\n onKeyDown={clickable ? handleKeyDown : undefined}\n role={clickable ? 'button' : undefined}\n onFocus={event => {\n onFocusChange(name);\n tooltip.showOnFocus(event.currentTarget);\n }}\n onBlur={() => {\n onFocusChange(undefined);\n tooltip.hideOnBlur();\n }}\n onMouseEnter={event => {\n onHoverChange(name);\n tooltip.showOnHover(event.currentTarget);\n }}\n onMouseLeave={() => {\n onHoverChange(undefined);\n tooltip.hideOnLeave();\n }}\n style={{ cursor: clickable ? 'pointer' : undefined }}\n tabIndex={0}\n >\n {/* The custom tooltip covers described nodes; a native title there would stack a second popup. */}\n {description ? null : <title>{displayLabel}</title>}\n <rect x={x} y={visibleY} width={width} height={visibleHeight} rx={3} fill={color ?? nodeFill} />\n <text\n x={labelX}\n y={y - 24}\n textAnchor={textAnchor}\n fill={Colors.foreground}\n fontSize={NODE_LABEL_FONT_SIZE}\n fontFamily=\"var(--font-mono)\"\n >\n {visibleLabel}\n </text>\n <text x={labelX} y={y - 8} textAnchor={textAnchor} fill={Colors['muted-foreground']} fontSize={9.5}>\n {value} ({percentage}%)\n </text>\n </g>\n {description ? (\n <SankeyPortalTooltip\n id={tooltip.id}\n title={visibleDisplayLabel}\n description={description}\n position={tooltip.position}\n visible={tooltip.isVisible}\n />\n ) : null}\n </>\n );\n}\n\n/**\n * Column header text. Inert for node tooltips, but when the caller supplies a\n * column description it opens its own portal tooltip on hover or focus.\n */\nfunction SankeyColumnHeader({\n x,\n textAnchor,\n fill,\n label,\n fullLabel,\n description,\n}: {\n x: number;\n textAnchor: 'start' | 'middle' | 'end';\n fill: string;\n label: string;\n fullLabel: string;\n description?: string;\n}) {\n const tooltip = useSankeyHoverTooltip(description !== undefined);\n\n return (\n <>\n <text\n aria-describedby={description ? tooltip.id : undefined}\n aria-label={description ? fullLabel : undefined}\n role={description ? 'img' : undefined}\n x={x}\n y={18}\n textAnchor={textAnchor}\n fill={fill}\n fontSize={COLUMN_LABEL_FONT_SIZE}\n fontWeight={600}\n tabIndex={description ? 0 : undefined}\n onMouseEnter={description ? event => tooltip.showOnHover(event.currentTarget) : undefined}\n onMouseLeave={description ? tooltip.hideOnLeave : undefined}\n onFocus={description ? event => tooltip.showOnFocus(event.currentTarget) : undefined}\n onBlur={description ? tooltip.hideOnBlur : undefined}\n >\n {/* The custom tooltip already names the column; a native title would stack a second popup. */}\n {label === fullLabel || description ? null : <title>{fullLabel}</title>}\n {label}\n </text>\n {description ? (\n <SankeyPortalTooltip\n id={tooltip.id}\n title={fullLabel}\n description={description}\n position={tooltip.position}\n visible={tooltip.isVisible}\n />\n ) : null}\n </>\n );\n}\n\nfunction scaleSankeyDimension(size: number, displayValue: number | undefined, layoutValue: number | undefined) {\n if (displayValue === undefined || layoutValue === undefined || layoutValue <= 0) return size;\n return size * Math.min(Math.max(displayValue / layoutValue, 0), 1);\n}\n\ntype SankeyLinkProps = SankeyLinkRendererProps & {\n colorMap: Record<string, string>;\n color?: string;\n sourceColor?: string;\n targetColor?: string;\n highlighted: boolean;\n displayValue?: number;\n layoutValue?: number;\n sourceWidth?: number;\n targetWidth?: number;\n clickable: boolean;\n onHoverChange: (sourceName: string | undefined) => void;\n onSelect: () => void;\n};\n\nfunction SankeyLink({\n sourceX,\n targetX,\n sourceY,\n targetY,\n sourceControlX,\n targetControlX,\n linkWidth,\n index,\n payload,\n colorMap,\n color,\n sourceColor,\n targetColor,\n highlighted,\n displayValue,\n layoutValue,\n sourceWidth,\n targetWidth,\n clickable,\n onHoverChange,\n onSelect,\n}: SankeyLinkProps) {\n const visibleWidth = scaleSankeyDimension(linkWidth, displayValue, layoutValue);\n const sourceHalfWidth = Math.max(0, sourceWidth ?? visibleWidth) / 2;\n const targetHalfWidth = Math.max(0, targetWidth ?? visibleWidth) / 2;\n const path = [\n `M${sourceX},${sourceY - sourceHalfWidth}`,\n `C${sourceControlX},${sourceY - sourceHalfWidth} ${targetControlX},${targetY - targetHalfWidth} ${targetX},${targetY - targetHalfWidth}`,\n `L${targetX},${targetY + targetHalfWidth}`,\n `C${targetControlX},${targetY + targetHalfWidth} ${sourceControlX},${sourceY + sourceHalfWidth} ${sourceX},${sourceY + sourceHalfWidth}`,\n 'Z',\n ].join(' ');\n const sourceName = String(payload.source.name ?? '');\n const targetName = String(payload.target.name ?? '');\n const gradientId = `sankey-grad-${index}`;\n const handleKeyDown = (event: KeyboardEvent<SVGPathElement>) => {\n if (event.key !== 'Enter' && event.key !== ' ') return;\n event.preventDefault();\n onSelect();\n };\n\n return (\n <g>\n <defs>\n <linearGradient id={gradientId} gradientUnits=\"userSpaceOnUse\" x1={sourceX} x2={targetX}>\n <stop offset=\"0%\" stopColor={sourceColor ?? colorMap[sourceName] ?? 'var(--chart-blue)'} />\n <stop offset=\"100%\" stopColor={targetColor ?? colorMap[targetName] ?? 'var(--chart-blue)'} />\n </linearGradient>\n </defs>\n <path\n d={path}\n fill={color ?? `url(#${gradientId})`}\n fillOpacity={highlighted ? 0.75 : 0.32}\n stroke=\"none\"\n role={clickable ? 'button' : undefined}\n tabIndex={clickable ? 0 : undefined}\n aria-label={clickable ? 'Select Sankey curve' : undefined}\n onClick={clickable ? onSelect : undefined}\n onKeyDown={clickable ? handleKeyDown : undefined}\n onMouseEnter={() => onHoverChange(sourceName)}\n onMouseLeave={() => onHoverChange(undefined)}\n style={{ cursor: clickable ? 'pointer' : undefined, transition: 'fill-opacity 0.18s ease' }}\n />\n </g>\n );\n}\n"],"names":["hashLabel","createContext","useState","jsx","useContext","useId","createPortal","jsxs","ChartTooltip","useRef","useEffect","useMemo","useSyncExternalStore","CHART_TICK_FONT_SIZE","CHART_LABEL_FONT_SIZE","cn","ResponsiveContainer","RechartsSankey","Fragment","Colors"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"settings-row-2hq9Ww8Z.js","sources":["../src/ds/new/settings/settings-container.tsx","../src/ds/new/settings/settings-row.tsx"],"sourcesContent":["import type { ComponentProps } from 'react';\nimport { raisedSurfaceStyle } from '@/ds/primitives/raised-surface';\nimport { cn } from '@/lib/utils';\n\nexport function SettingsContainerLayout({\n layout,\n className,\n ...props\n}: ComponentProps<'div'> & { layout: 'factory' | 'section' }) {\n return (\n <div\n data-slot={layout === 'section' ? 'section-content' : 'settings-container'}\n className={cn(\n layout === 'factory'\n ? cn(raisedSurfaceStyle, 'divide-y divide-border rounded-xl')\n : cn(\n 'group-data-[variant=factory]/section:overflow-hidden group-data-[variant=factory]/section:rounded-xl',\n 'group-data-[variant=factory]/section:bg-card group-data-[variant=factory]/section:shadow-raised',\n ),\n className,\n )}\n {...props}\n />\n );\n}\n\nexport function SettingsContainer(props: ComponentProps<'div'>) {\n return <SettingsContainerLayout {...props} layout=\"factory\" />;\n}\n","import { LockKeyholeIcon } from 'lucide-react';\nimport type { ComponentProps, ReactNode } from 'react';\nimport { FieldBlockErrorMsg } from '@/ds/components/FormFieldBlocks/block/field-block-error-msg';\nimport { Label } from '@/ds/components/Label/label';\nimport { cn } from '@/lib/utils';\n\nexport type SettingsRowProps = Omit<ComponentProps<'div'>, 'children'> & {\n label: ReactNode;\n description?: ReactNode;\n htmlFor?: string;\n children?: ReactNode;\n tone?: 'default' | 'destructive';\n viewOnly?: boolean;\n required?: boolean;\n errorMsg?: ReactNode;\n};\n\ntype SettingsRowLayoutProps = SettingsRowProps & {\n layout: 'factory' | 'section';\n};\n\nexport function SettingsRowLayout({\n label,\n description,\n htmlFor,\n children,\n className,\n layout,\n tone = 'default',\n viewOnly = false,\n required = false,\n errorMsg,\n ...props\n}: SettingsRowLayoutProps) {\n const isSectionLayout = layout === 'section';\n const TextElement = isSectionLayout ? 'p' : 'span';\n const LabelElement = htmlFor ? Label : TextElement;\n const DescriptionElement = isSectionLayout ? 'p' : 'div';\n const control = viewOnly ? (\n <>\n <LockKeyholeIcon className=\"size-4 shrink-0\" aria-hidden />\n <span className=\"sr-only\">View only: </span>\n {children}\n </>\n ) : (\n children\n );\n\n return (\n <div\n data-slot={isSectionLayout ? 'section-row' : 'settings-row'}\n className={cn(\n isSectionLayout\n ? 'grid min-w-0 gap-3 group-data-[variant=factory]/section:px-3 group-data-[variant=factory]/section:py-2 group-data-[variant=flat]/section:p-3 sm:grid-cols-[minmax(0,1fr)_auto] sm:items-center sm:group-data-[variant=default]/section:gap-4 sm:group-data-[variant=factory]/section:gap-4 sm:group-data-[variant=flat]/section:gap-6'\n : 'flex min-w-0 flex-col',\n layout === 'factory' && 'gap-2 px-4 py-3 sm:flex-row sm:items-center sm:justify-between sm:gap-4',\n className,\n )}\n {...props}\n >\n <div className={cn('min-w-0', !isSectionLayout && 'flex flex-col', layout === 'factory' && 'gap-0.5')}>\n <LabelElement\n htmlFor={htmlFor}\n className={cn(\n 'text-label text-foreground',\n viewOnly && 'text-muted-foreground',\n tone === 'destructive' && 'text-destructive-indicator',\n )}\n >\n {label}\n {required ? (\n <>\n <span\n aria-hidden\n className={cn('ml-0.5', viewOnly ? 'text-muted-foreground' : 'text-destructive-indicator')}\n >\n *\n </span>\n <span className=\"sr-only\"> (required)</span>\n </>\n ) : null}\n </LabelElement>\n {description != null && (\n <DescriptionElement\n className={cn(\n 'text-caption text-muted-foreground',\n isSectionLayout ? 'mt-1 max-w-[62ch] text-pretty' : 'flex flex-col gap-0.5',\n )}\n >\n {description}\n </DescriptionElement>\n )}\n {errorMsg ? (\n <FieldBlockErrorMsg name={htmlFor} className={cn(isSectionLayout && 'mt-1')}>\n {errorMsg}\n </FieldBlockErrorMsg>\n ) : null}\n </div>\n {children != null &&\n (isSectionLayout || viewOnly ? (\n <div\n data-slot={isSectionLayout ? 'section-control' : undefined}\n className={cn(\n 'min-w-0',\n isSectionLayout && 'sm:justify-self-end',\n viewOnly && 'flex items-center gap-2 text-body-sm text-muted-foreground',\n )}\n >\n {control}\n </div>\n ) : (\n control\n ))}\n </div>\n );\n}\n\nexport function SettingsRow(props: SettingsRowProps) {\n return <SettingsRowLayout {...props} layout=\"factory\" />;\n}\n"],"names":[],"mappings":";;;;;;;AAIO,SAAS,uBAAA,CAAwB;AAAA,EACtC,MAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA8D;AAC5D,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAW,MAAA,KAAW,SAAA,GAAY,iBAAA,GAAoB,oBAAA;AAAA,MACtD,SAAA,EAAW,EAAA;AAAA,QACT,MAAA,KAAW,SAAA,GACP,EAAA,CAAG,kBAAA,EAAoB,mCAAmC,CAAA,GAC1D,EAAA;AAAA,UACE,sGAAA;AAAA,UACA;AAAA,SACF;AAAA,QACJ;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEO,SAAS,kBAAkB,KAAA,EAA8B;AAC9D,EAAA,uBAAO,GAAA,CAAC,uBAAA,EAAA,EAAyB,GAAG,KAAA,EAAO,QAAO,SAAA,EAAU,CAAA;AAC9D;;ACPO,SAAS,iBAAA,CAAkB;AAAA,EAChC,KAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA,GAAO,SAAA;AAAA,EACP,QAAA,GAAW,KAAA;AAAA,EACX,QAAA,GAAW,KAAA;AAAA,EACX,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA2B;AACzB,EAAA,MAAM,kBAAkB,MAAA,KAAW,SAAA;AACnC,EAAA,MAAM,WAAA,GAAc,kBAAkB,GAAA,GAAM,MAAA;AAC5C,EAAA,MAAM,YAAA,GAAe,UAAU,KAAA,GAAQ,WAAA;AACvC,EAAA,MAAM,kBAAA,GAAqB,kBAAkB,GAAA,GAAM,KAAA;AACnD,EAAA,MAAM,OAAA,GAAU,2BACd,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EAAU,iBAAA,EAAkB,aAAA,EAAW,IAAA,EAAC,CAAA;AAAA,oBACzD,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,aAAA,EAAW,CAAA;AAAA,IACpC;AAAA,GAAA,EACH,CAAA,GAEA,QAAA;AAGF,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAW,kBAAkB,aAAA,GAAgB,cAAA;AAAA,MAC7C,SAAA,EAAW,EAAA;AAAA,QACT,kBACI,uUAAA,GACA,uBAAA;AAAA,QACJ,WAAW,SAAA,IAAa,yEAAA;AAAA,QACxB;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,SAAA,EAAW,CAAC,mBAAmB,eAAA,EAAiB,MAAA,KAAW,SAAA,IAAa,SAAS,CAAA,EAClG,QAAA,EAAA;AAAA,0BAAA,IAAA;AAAA,YAAC,YAAA;AAAA,YAAA;AAAA,cACC,OAAA;AAAA,cACA,SAAA,EAAW,EAAA;AAAA,gBACT,4BAAA;AAAA,gBACA,QAAA,IAAY,uBAAA;AAAA,gBACZ,SAAS,aAAA,IAAiB;AAAA,eAC5B;AAAA,cAEC,QAAA,EAAA;AAAA,gBAAA,KAAA;AAAA,gBACA,2BACC,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,kCAAA,GAAA;AAAA,oBAAC,MAAA;AAAA,oBAAA;AAAA,sBACC,aAAA,EAAW,IAAA;AAAA,sBACX,SAAA,EAAW,EAAA,CAAG,QAAA,EAAU,QAAA,GAAW,0BAA0B,4BAA4B,CAAA;AAAA,sBAC1F,QAAA,EAAA;AAAA;AAAA,mBAED;AAAA,kCACA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,aAAA,EAAW;AAAA,iBAAA,EACvC,CAAA,GACE;AAAA;AAAA;AAAA,WACN;AAAA,UACC,eAAe,IAAA,oBACd,GAAA;AAAA,YAAC,kBAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,oCAAA;AAAA,gBACA,kBAAkB,+BAAA,GAAkC;AAAA,eACtD;AAAA,cAEC,QAAA,EAAA;AAAA;AAAA,WACH;AAAA,UAED,QAAA,mBACC,GAAA,CAAC,kBAAA,EAAA,EAAmB,IAAA,EAAM,OAAA,EAAS,SAAA,EAAW,EAAA,CAAG,eAAA,IAAmB,MAAM,CAAA,EACvE,QAAA,EAAA,QAAA,EACH,CAAA,GACE;AAAA,SAAA,EACN,CAAA;AAAA,QACC,QAAA,IAAY,IAAA,KACV,eAAA,IAAmB,QAAA,mBAClB,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,WAAA,EAAW,kBAAkB,iBAAA,GAAoB,MAAA;AAAA,YACjD,SAAA,EAAW,EAAA;AAAA,cACT,SAAA;AAAA,cACA,eAAA,IAAmB,qBAAA;AAAA,cACnB,QAAA,IAAY;AAAA,aACd;AAAA,YAEC,QAAA,EAAA;AAAA;AAAA,SACH,GAEA,OAAA;AAAA;AAAA;AAAA,GAEN;AAEJ;AAEO,SAAS,YAAY,KAAA,EAAyB;AACnD,EAAA,uBAAO,GAAA,CAAC,iBAAA,EAAA,EAAmB,GAAG,KAAA,EAAO,QAAO,SAAA,EAAU,CAAA;AACxD;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"settings-row-BMRADph-.cjs","sources":["../src/ds/new/settings/settings-container.tsx","../src/ds/new/settings/settings-row.tsx"],"sourcesContent":["import type { ComponentProps } from 'react';\nimport { raisedSurfaceStyle } from '@/ds/primitives/raised-surface';\nimport { cn } from '@/lib/utils';\n\nexport function SettingsContainerLayout({\n layout,\n className,\n ...props\n}: ComponentProps<'div'> & { layout: 'factory' | 'section' }) {\n return (\n <div\n data-slot={layout === 'section' ? 'section-content' : 'settings-container'}\n className={cn(\n layout === 'factory'\n ? cn(raisedSurfaceStyle, 'divide-y divide-border rounded-xl')\n : cn(\n 'group-data-[variant=factory]/section:overflow-hidden group-data-[variant=factory]/section:rounded-xl',\n 'group-data-[variant=factory]/section:bg-card group-data-[variant=factory]/section:shadow-raised',\n ),\n className,\n )}\n {...props}\n />\n );\n}\n\nexport function SettingsContainer(props: ComponentProps<'div'>) {\n return <SettingsContainerLayout {...props} layout=\"factory\" />;\n}\n","import { LockKeyholeIcon } from 'lucide-react';\nimport type { ComponentProps, ReactNode } from 'react';\nimport { FieldBlockErrorMsg } from '@/ds/components/FormFieldBlocks/block/field-block-error-msg';\nimport { Label } from '@/ds/components/Label/label';\nimport { cn } from '@/lib/utils';\n\nexport type SettingsRowProps = Omit<ComponentProps<'div'>, 'children'> & {\n label: ReactNode;\n description?: ReactNode;\n htmlFor?: string;\n children?: ReactNode;\n tone?: 'default' | 'destructive';\n viewOnly?: boolean;\n required?: boolean;\n errorMsg?: ReactNode;\n};\n\ntype SettingsRowLayoutProps = SettingsRowProps & {\n layout: 'factory' | 'section';\n};\n\nexport function SettingsRowLayout({\n label,\n description,\n htmlFor,\n children,\n className,\n layout,\n tone = 'default',\n viewOnly = false,\n required = false,\n errorMsg,\n ...props\n}: SettingsRowLayoutProps) {\n const isSectionLayout = layout === 'section';\n const TextElement = isSectionLayout ? 'p' : 'span';\n const LabelElement = htmlFor ? Label : TextElement;\n const DescriptionElement = isSectionLayout ? 'p' : 'div';\n const control = viewOnly ? (\n <>\n <LockKeyholeIcon className=\"size-4 shrink-0\" aria-hidden />\n <span className=\"sr-only\">View only: </span>\n {children}\n </>\n ) : (\n children\n );\n\n return (\n <div\n data-slot={isSectionLayout ? 'section-row' : 'settings-row'}\n className={cn(\n isSectionLayout\n ? 'grid min-w-0 gap-3 group-data-[variant=factory]/section:px-3 group-data-[variant=factory]/section:py-2 group-data-[variant=flat]/section:p-3 sm:grid-cols-[minmax(0,1fr)_auto] sm:items-center sm:group-data-[variant=default]/section:gap-4 sm:group-data-[variant=factory]/section:gap-4 sm:group-data-[variant=flat]/section:gap-6'\n : 'flex min-w-0 flex-col',\n layout === 'factory' && 'gap-2 px-4 py-3 sm:flex-row sm:items-center sm:justify-between sm:gap-4',\n className,\n )}\n {...props}\n >\n <div className={cn('min-w-0', !isSectionLayout && 'flex flex-col', layout === 'factory' && 'gap-0.5')}>\n <LabelElement\n htmlFor={htmlFor}\n className={cn(\n 'text-label text-foreground',\n viewOnly && 'text-muted-foreground',\n tone === 'destructive' && 'text-destructive-indicator',\n )}\n >\n {label}\n {required ? (\n <>\n <span\n aria-hidden\n className={cn('ml-0.5', viewOnly ? 'text-muted-foreground' : 'text-destructive-indicator')}\n >\n *\n </span>\n <span className=\"sr-only\"> (required)</span>\n </>\n ) : null}\n </LabelElement>\n {description != null && (\n <DescriptionElement\n className={cn(\n 'text-caption text-muted-foreground',\n isSectionLayout ? 'mt-1 max-w-[62ch] text-pretty' : 'flex flex-col gap-0.5',\n )}\n >\n {description}\n </DescriptionElement>\n )}\n {errorMsg ? (\n <FieldBlockErrorMsg name={htmlFor} className={cn(isSectionLayout && 'mt-1')}>\n {errorMsg}\n </FieldBlockErrorMsg>\n ) : null}\n </div>\n {children != null &&\n (isSectionLayout || viewOnly ? (\n <div\n data-slot={isSectionLayout ? 'section-control' : undefined}\n className={cn(\n 'min-w-0',\n isSectionLayout && 'sm:justify-self-end',\n viewOnly && 'flex items-center gap-2 text-body-sm text-muted-foreground',\n )}\n >\n {control}\n </div>\n ) : (\n control\n ))}\n </div>\n );\n}\n\nexport function SettingsRow(props: SettingsRowProps) {\n return <SettingsRowLayout {...props} layout=\"factory\" />;\n}\n"],"names":["jsx","cn","raisedSurfaceStyle","label","Label","jsxs","Fragment","LockKeyholeIcon","FieldBlockErrorMsg"],"mappings":"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"}
|