@mastra/playground-ui 60.0.0-alpha.9 → 60.0.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 +21 -15
- package/dist/{Button-DbJn0bJX.cjs → Button-BnmR2HRc.cjs} +5 -1
- package/dist/Button-BnmR2HRc.cjs.map +1 -0
- package/dist/{Button-CHTvSq4d.js → Button-C6eUqcPI.js} +6 -2
- package/dist/Button-C6eUqcPI.js.map +1 -0
- package/dist/{Card-BbwF20OW.cjs → Card-BQsKHkyB.cjs} +5 -5
- package/dist/Card-BQsKHkyB.cjs.map +1 -0
- package/dist/{Card-DmT57Pve.js → Card-DVy0QS4m.js} +5 -5
- package/dist/Card-DVy0QS4m.js.map +1 -0
- package/dist/{ErrorBoundary-DDi5RBQv.js → ErrorBoundary-Bb2R5IMR.js} +2 -2
- package/dist/{ErrorBoundary-DDi5RBQv.js.map → ErrorBoundary-Bb2R5IMR.js.map} +1 -1
- package/dist/{ErrorBoundary-BRQxBc51.cjs → ErrorBoundary-CKrwONAU.cjs} +2 -2
- package/dist/{ErrorBoundary-BRQxBc51.cjs.map → ErrorBoundary-CKrwONAU.cjs.map} +1 -1
- package/dist/{Notice-JX9yuy6r.cjs → Notice-CEBwitdf.cjs} +2 -2
- package/dist/{Notice-JX9yuy6r.cjs.map → Notice-CEBwitdf.cjs.map} +1 -1
- package/dist/{Notice-b3XjkEVP.js → Notice-Ce3r5x-7.js} +2 -2
- package/dist/{Notice-b3XjkEVP.js.map → Notice-Ce3r5x-7.js.map} +1 -1
- package/dist/{activity-BYD9ugQK.cjs → activity-8egTNbaI.cjs} +2 -2
- package/dist/{activity-BYD9ugQK.cjs.map → activity-8egTNbaI.cjs.map} +1 -1
- package/dist/{activity-BnyR9d_6.js → activity-Duth8KP_.js} +2 -2
- package/dist/{activity-BnyR9d_6.js.map → activity-Duth8KP_.js.map} +1 -1
- package/dist/activity.css +3 -3
- package/dist/{alert-dialog-JQyJ-qjE.cjs → alert-dialog-BcOSIOSW.cjs} +3 -3
- package/dist/{alert-dialog-JQyJ-qjE.cjs.map → alert-dialog-BcOSIOSW.cjs.map} +1 -1
- package/dist/{alert-dialog-CAGfWxfv.js → alert-dialog-D1UYVW__.js} +3 -3
- package/dist/{alert-dialog-CAGfWxfv.js.map → alert-dialog-D1UYVW__.js.map} +1 -1
- package/dist/{ask-user-BSitQ3cU.js → ask-user-Crg1O-o6.js} +2 -2
- package/dist/{ask-user-BSitQ3cU.js.map → ask-user-Crg1O-o6.js.map} +1 -1
- package/dist/{ask-user-C8PIlzDe.cjs → ask-user-DJXmLJzy.cjs} +2 -2
- package/dist/{ask-user-C8PIlzDe.cjs.map → ask-user-DJXmLJzy.cjs.map} +1 -1
- package/dist/buttons-group.css +4 -14
- package/dist/{code-block-FI2Y_vRg.cjs → code-block-C7A4Hv96.cjs} +5 -5
- package/dist/{code-block-FI2Y_vRg.cjs.map → code-block-C7A4Hv96.cjs.map} +1 -1
- package/dist/{code-block-D1_YjIGG.js → code-block-C_pvalBv.js} +5 -5
- package/dist/{code-block-D1_YjIGG.js.map → code-block-C_pvalBv.js.map} +1 -1
- package/dist/{code-editor-8l_YoqYu.cjs → code-editor-BXchPl_F.cjs} +3 -3
- package/dist/code-editor-BXchPl_F.cjs.map +1 -0
- package/dist/{code-editor-m5ktiTwB.js → code-editor-Cltwid7c.js} +3 -3
- package/dist/code-editor-Cltwid7c.js.map +1 -0
- package/dist/{collapsible-DhhP5p1j.js → collapsible-BNUn4644.js} +2 -2
- package/dist/collapsible-BNUn4644.js.map +1 -0
- package/dist/{collapsible-BFSJouuI.cjs → collapsible-jfzzU7Gp.cjs} +2 -2
- package/dist/collapsible-jfzzU7Gp.cjs.map +1 -0
- package/dist/{combobox-DDvFeXkN.js → combobox-B_C0cNid.js} +4 -4
- package/dist/{combobox-DDvFeXkN.js.map → combobox-B_C0cNid.js.map} +1 -1
- package/dist/{combobox-Dm1hKirJ.cjs → combobox-rKV-Lksj.cjs} +4 -4
- package/dist/{combobox-Dm1hKirJ.cjs.map → combobox-rKV-Lksj.cjs.map} +1 -1
- package/dist/{combobox-styles-B0qifmU6.cjs → combobox-styles-C4Kq1NFV.cjs} +2 -2
- package/dist/{combobox-styles-B0qifmU6.cjs.map → combobox-styles-C4Kq1NFV.cjs.map} +1 -1
- package/dist/{combobox-styles-VF_qaHQZ.js → combobox-styles-CLxC7VLA.js} +2 -2
- package/dist/{combobox-styles-VF_qaHQZ.js.map → combobox-styles-CLxC7VLA.js.map} +1 -1
- package/dist/{command-DxGz6-Jx.js → command-C6JnofUJ.js} +3 -3
- package/dist/{command-DxGz6-Jx.js.map → command-C6JnofUJ.js.map} +1 -1
- package/dist/{command-B4ue1PCR.cjs → command-CpXMoss8.cjs} +3 -3
- package/dist/{command-B4ue1PCR.cjs.map → command-CpXMoss8.cjs.map} +1 -1
- package/dist/components/AlertDialog.cjs.js +1 -1
- package/dist/components/AlertDialog.es.js +1 -1
- package/dist/components/Button.cjs.js +1 -1
- package/dist/components/Button.es.js +2 -2
- package/dist/components/Card.cjs.js +1 -1
- package/dist/components/Card.es.js +1 -1
- 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/Collapsible.cjs.js +1 -1
- package/dist/components/Collapsible.es.js +1 -1
- package/dist/components/Combobox.cjs.js +2 -2
- package/dist/components/Combobox.es.js +2 -2
- package/dist/components/Command.cjs.js +1 -1
- package/dist/components/Command.es.js +1 -1
- package/dist/components/CommandPalette.cjs.js +2 -2
- package/dist/components/CommandPalette.es.js +2 -2
- package/dist/components/Comment.cjs.js +2 -2
- package/dist/components/Comment.es.js +2 -2
- package/dist/components/Composer.cjs.js +2 -2
- package/dist/components/Composer.es.js +2 -2
- 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 +5 -5
- package/dist/components/DataList.es.js +5 -5
- package/dist/components/DataPanel.cjs.js +1 -1
- package/dist/components/DataPanel.es.js +1 -1
- package/dist/components/DateRangeTimeline.cjs.js +5 -3
- package/dist/components/DateRangeTimeline.cjs.js.map +1 -1
- package/dist/components/DateRangeTimeline.es.js +5 -3
- package/dist/components/DateRangeTimeline.es.js.map +1 -1
- package/dist/components/DateTimePicker.cjs.js +2 -2
- package/dist/components/DateTimePicker.es.js +2 -2
- 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/EnvironmentVariablesEditor.cjs.js +4 -4
- package/dist/components/EnvironmentVariablesEditor.es.js +4 -4
- package/dist/components/ErrorBoundary.cjs.js +1 -1
- package/dist/components/ErrorBoundary.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 +2 -2
- package/dist/components/FormFieldBlocks.es.js +2 -2
- package/dist/components/HorizontalBars.cjs.js +1 -1
- package/dist/components/HorizontalBars.es.js +1 -1
- package/dist/components/InputGroup.cjs.js +1 -1
- package/dist/components/InputGroup.es.js +1 -1
- package/dist/components/JSONSchemaForm.cjs.js +2 -2
- package/dist/components/JSONSchemaForm.es.js +2 -2
- package/dist/components/ListSearch.cjs.js +1 -1
- package/dist/components/ListSearch.es.js +1 -1
- package/dist/components/LogsDataList.cjs.js +2 -4
- package/dist/components/LogsDataList.cjs.js.map +1 -1
- package/dist/components/LogsDataList.es.js +2 -4
- package/dist/components/LogsDataList.es.js.map +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/PropertyFilter.cjs.js +3 -3
- package/dist/components/PropertyFilter.es.js +4 -4
- package/dist/components/RelativeTimestamp.cjs.js +1 -1
- package/dist/components/RelativeTimestamp.es.js +1 -1
- package/dist/components/RuleBuilder.cjs.js +2 -2
- package/dist/components/RuleBuilder.es.js +2 -2
- package/dist/components/ScrollArea.cjs.js +1 -1
- package/dist/components/ScrollArea.es.js +1 -1
- package/dist/components/SectionCard.cjs.js +1 -12
- package/dist/components/SectionCard.cjs.js.map +1 -1
- package/dist/components/SectionCard.es.js +1 -12
- package/dist/components/SectionCard.es.js.map +1 -1
- 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/Slider.cjs.js +1 -1
- package/dist/components/Slider.es.js +1 -1
- package/dist/components/StatusIndicators.cjs.js +6 -18
- package/dist/components/StatusIndicators.cjs.js.map +1 -1
- package/dist/components/StatusIndicators.es.js +6 -18
- package/dist/components/StatusIndicators.es.js.map +1 -1
- package/dist/components/Switch.cjs.js +1 -1
- package/dist/components/Switch.es.js +1 -1
- package/dist/components/Table.cjs.js +3 -2
- package/dist/components/Table.cjs.js.map +1 -1
- package/dist/components/Table.es.js +3 -2
- package/dist/components/Table.es.js.map +1 -1
- package/dist/components/Tabs.cjs.js +3 -3
- package/dist/components/Tabs.es.js +3 -3
- package/dist/components/ThreadList.cjs.js +1 -1
- package/dist/components/ThreadList.es.js +1 -1
- package/dist/components/ThreadRail.cjs.js +3 -2
- package/dist/components/ThreadRail.cjs.js.map +1 -1
- package/dist/components/ThreadRail.es.js +3 -2
- package/dist/components/ThreadRail.es.js.map +1 -1
- package/dist/components/Tree.cjs.js +2 -2
- package/dist/components/Tree.cjs.js.map +1 -1
- package/dist/components/Tree.es.js +2 -2
- package/dist/components/Tree.es.js.map +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/task-list.cjs.js +2 -2
- package/dist/components/ai/task-list.cjs.js.map +1 -1
- package/dist/components/ai/task-list.es.js +2 -2
- package/dist/components/ai/task-list.es.js.map +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/{composer-D7ZOLVUX.cjs → composer-DyoM0j2m.cjs} +2 -2
- package/dist/{composer-D7ZOLVUX.cjs.map → composer-DyoM0j2m.cjs.map} +1 -1
- package/dist/{composer-a6qwEQIs.js → composer-eMyX1lBH.js} +2 -2
- package/dist/{composer-a6qwEQIs.js.map → composer-eMyX1lBH.js.map} +1 -1
- package/dist/composer.css +2 -2
- package/dist/{copy-button-89AmY5FU.cjs → copy-button-C6nXDjBz.cjs} +2 -2
- package/dist/{copy-button-89AmY5FU.cjs.map → copy-button-C6nXDjBz.cjs.map} +1 -1
- package/dist/{copy-button-rs9SJnvF.js → copy-button-DbmsTUum.js} +2 -2
- package/dist/{copy-button-rs9SJnvF.js.map → copy-button-DbmsTUum.js.map} +1 -1
- package/dist/{data-code-section-D01ggJy6.js → data-code-section-Bd2Xnckz.js} +6 -6
- package/dist/data-code-section-Bd2Xnckz.js.map +1 -0
- package/dist/{data-code-section-W_dIahDO.cjs → data-code-section-D5b6_jcB.cjs} +6 -6
- package/dist/data-code-section-D5b6_jcB.cjs.map +1 -0
- package/dist/{data-list-jJGA9T9_.cjs → data-list-D8bACyyK.cjs} +4 -4
- package/dist/{data-list-jJGA9T9_.cjs.map → data-list-D8bACyyK.cjs.map} +1 -1
- package/dist/{data-list-cF2lpf-v.js → data-list-DL_oFE4j.js} +4 -4
- package/dist/{data-list-cF2lpf-v.js.map → data-list-DL_oFE4j.js.map} +1 -1
- package/dist/{data-list-skeleton-DtU1wRbx.cjs → data-list-skeleton-BXPfL0s7.cjs} +2 -2
- package/dist/{data-list-skeleton-DtU1wRbx.cjs.map → data-list-skeleton-BXPfL0s7.cjs.map} +1 -1
- package/dist/{data-list-skeleton-BiWUa3JR.js → data-list-skeleton-Bk9LI0J0.js} +2 -2
- package/dist/{data-list-skeleton-BiWUa3JR.js.map → data-list-skeleton-Bk9LI0J0.js.map} +1 -1
- package/dist/{data-list-spacer-Cukij8de.js → data-list-spacer-CE6-4ZQq.js} +5 -4
- package/dist/data-list-spacer-CE6-4ZQq.js.map +1 -0
- package/dist/{data-list-spacer-D8zpJS7Z.cjs → data-list-spacer-_bFe0e2u.cjs} +5 -4
- package/dist/data-list-spacer-_bFe0e2u.cjs.map +1 -0
- package/dist/{data-list-top-KKXNLoP6.cjs → data-list-top-C-pLBax7.cjs} +4 -3
- package/dist/data-list-top-C-pLBax7.cjs.map +1 -0
- package/dist/{data-list-top-G11bdV77.js → data-list-top-DheFgb0M.js} +4 -3
- package/dist/data-list-top-DheFgb0M.js.map +1 -0
- package/dist/{data-panel-9GDF8Wx1.js → data-panel-42fdcagQ.js} +3 -3
- package/dist/{data-panel-9GDF8Wx1.js.map → data-panel-42fdcagQ.js.map} +1 -1
- package/dist/{data-panel-C4JszAuX.cjs → data-panel-CjvoI_lx.cjs} +3 -3
- package/dist/{data-panel-C4JszAuX.cjs.map → data-panel-CjvoI_lx.cjs.map} +1 -1
- package/dist/{date-time-range-picker-CmqD5SE4.cjs → date-time-range-picker-BORAuIJM.cjs} +3 -3
- package/dist/{date-time-range-picker-CmqD5SE4.cjs.map → date-time-range-picker-BORAuIJM.cjs.map} +1 -1
- package/dist/{date-time-range-picker-DZ-jZE2-.js → date-time-range-picker-C-pSI1u1.js} +3 -3
- package/dist/{date-time-range-picker-DZ-jZE2-.js.map → date-time-range-picker-C-pSI1u1.js.map} +1 -1
- package/dist/{dialog-4KIPO71S.cjs → dialog-DYpOpj9s.cjs} +3 -3
- package/dist/{dialog-4KIPO71S.cjs.map → dialog-DYpOpj9s.cjs.map} +1 -1
- package/dist/{dialog-action-C6yPBO21.cjs → dialog-action-B3AHq7mU.cjs} +3 -3
- package/dist/{dialog-action-C6yPBO21.cjs.map → dialog-action-B3AHq7mU.cjs.map} +1 -1
- package/dist/{dialog-action-DzTAl6AJ.js → dialog-action-BGmDoI5T.js} +3 -3
- package/dist/{dialog-action-DzTAl6AJ.js.map → dialog-action-BGmDoI5T.js.map} +1 -1
- package/dist/{dialog-DjXC42Zn.js → dialog-cKzR2TXI.js} +3 -3
- package/dist/{dialog-DjXC42Zn.js.map → dialog-cKzR2TXI.js.map} +1 -1
- package/dist/domains/auth/components/session-expired.cjs.js +1 -1
- package/dist/domains/auth/components/session-expired.es.js +1 -1
- 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-list.cjs.js +1 -1
- package/dist/domains/chat/attachments/composer-attachment-list.es.js +1 -1
- 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 +22 -5
- package/dist/domains/chat/messages/message-row.cjs.js.map +1 -1
- package/dist/domains/chat/messages/message-row.es.js +22 -5
- package/dist/domains/chat/messages/message-row.es.js.map +1 -1
- 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 +2 -2
- package/dist/domains/chat/messages/renderers/message-text.es.js +2 -2
- 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/renderers/user-text-part-renderer.cjs.js +6 -0
- package/dist/domains/chat/messages/renderers/user-text-part-renderer.cjs.js.map +1 -1
- package/dist/domains/chat/messages/renderers/user-text-part-renderer.es.js +6 -0
- package/dist/domains/chat/messages/renderers/user-text-part-renderer.es.js.map +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-activation.cjs.js +29 -0
- package/dist/domains/chat/messages/skill-activation.cjs.js.map +1 -0
- package/dist/domains/chat/messages/skill-activation.d.ts +2 -0
- package/dist/domains/chat/messages/skill-activation.es.js +25 -0
- package/dist/domains/chat/messages/skill-activation.es.js.map +1 -0
- package/dist/domains/chat/messages/skill-message.cjs.js +33 -0
- package/dist/domains/chat/messages/skill-message.cjs.js.map +1 -0
- package/dist/domains/chat/messages/skill-message.d.ts +2 -0
- package/dist/domains/chat/messages/skill-message.es.js +29 -0
- package/dist/domains/chat/messages/skill-message.es.js.map +1 -0
- 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 +1 -1
- package/dist/domains/chat/messages/tripwire-notice.es.js +1 -1
- package/dist/domains/chat/tools/badges/agent-badge-wrapper.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/agent-badge-wrapper.es.js +1 -1
- package/dist/domains/chat/tools/badges/agent-badge.cjs.js +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 +2 -2
- package/dist/domains/chat/tools/badges/code-mode-badge.es.js +2 -2
- package/dist/domains/chat/tools/badges/file-tree-badge.cjs.js +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 +2 -2
- package/dist/domains/chat/tools/badges/sandbox-execution-badge.es.js +2 -2
- 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 +3 -4
- package/dist/domains/chat/tools/badges/workflow-badge.cjs.js.map +1 -1
- package/dist/domains/chat/tools/badges/workflow-badge.es.js +3 -4
- 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.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-list-view.cjs.js +2 -2
- package/dist/domains/logs/components/logs-list-view.es.js +2 -2
- 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 +1 -1
- package/dist/domains/logs/components/no-logs-info.es.js +1 -1
- package/dist/domains/memory/components/flame-graph.cjs.js +1 -1
- package/dist/domains/memory/components/flame-graph.es.js +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.cjs.js.map +1 -1
- package/dist/domains/memory/components/observation-detail-view.es.js +1 -1
- package/dist/domains/memory/components/observation-detail-view.es.js.map +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 +4 -4
- package/dist/domains/metrics/components/latency-card-view.es.js +4 -4
- 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/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 +5 -5
- package/dist/domains/metrics/components/scores-card-view.es.js +5 -5
- package/dist/domains/metrics/components/token-usage-by-agent-card-view.cjs.js +5 -5
- package/dist/domains/metrics/components/token-usage-by-agent-card-view.es.js +5 -5
- package/dist/domains/metrics/components/token-usage-timeline-card-view.cjs.js +4 -4
- package/dist/domains/metrics/components/token-usage-timeline-card-view.es.js +4 -4
- package/dist/domains/metrics/components/traces-volume-card-view.cjs.js +5 -5
- package/dist/domains/metrics/components/traces-volume-card-view.es.js +5 -5
- 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/request-context/components/request-context-label.cjs.js +1 -5
- package/dist/domains/request-context/components/request-context-label.cjs.js.map +1 -1
- package/dist/domains/request-context/components/request-context-label.es.js +2 -6
- package/dist/domains/request-context/components/request-context-label.es.js.map +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 +3 -4
- package/dist/domains/scores/components/trace-scores-tab.cjs.js.map +1 -1
- package/dist/domains/scores/components/trace-scores-tab.es.js +3 -4
- package/dist/domains/scores/components/trace-scores-tab.es.js.map +1 -1
- 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/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 +2 -2
- package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +2 -2
- package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +4 -4
- package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +4 -4
- package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +3 -3
- package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +3 -3
- 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 +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-section.es.js +2 -2
- 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 +3 -3
- package/dist/domains/traces/components/span-payload/span-processor-attributes.es.js +3 -3
- 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-timeline-row.cjs.js +3 -2
- package/dist/domains/traces/components/span-timeline-row.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-timeline-row.es.js +3 -2
- package/dist/domains/traces/components/span-timeline-row.es.js.map +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 +4 -4
- package/dist/domains/traces/components/thread-trace/thread-trace-messages.es.js +4 -4
- 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 +1 -1
- package/dist/domains/traces/components/thread-view-by-trace.es.js +1 -1
- package/dist/domains/traces/components/timeline-name-col.cjs.js +3 -2
- package/dist/domains/traces/components/timeline-name-col.cjs.js.map +1 -1
- package/dist/domains/traces/components/timeline-name-col.es.js +3 -2
- package/dist/domains/traces/components/timeline-name-col.es.js.map +1 -1
- package/dist/domains/traces/components/trace-columns-menu.cjs.js +4 -4
- package/dist/domains/traces/components/trace-columns-menu.es.js +4 -4
- 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 -3
- package/dist/domains/traces/components/trace-data-panel.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-data-panel.es.js +2 -3
- package/dist/domains/traces/components/trace-data-panel.es.js.map +1 -1
- package/dist/domains/traces/components/trace-id-button.cjs.js +1 -1
- package/dist/domains/traces/components/trace-id-button.es.js +1 -1
- package/dist/domains/traces/components/trace-messages-panel.cjs.js +1 -1
- package/dist/domains/traces/components/trace-messages-panel.es.js +1 -1
- package/dist/domains/traces/components/trace-summary-description.cjs.js +1 -1
- package/dist/domains/traces/components/trace-summary-description.es.js +1 -1
- package/dist/domains/traces/components/trace-thread-item-view.cjs.js +1 -1
- package/dist/domains/traces/components/trace-thread-item-view.es.js +1 -1
- package/dist/domains/traces/components/trace-thread-panel.cjs.js +1 -1
- package/dist/domains/traces/components/trace-thread-panel.es.js +1 -1
- package/dist/domains/traces/components/trace-time-range-chip.cjs.js +2 -2
- package/dist/domains/traces/components/trace-time-range-chip.es.js +2 -2
- 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 +5 -4
- package/dist/domains/traces/components/traces-list-view.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-list-view.es.js +5 -4
- package/dist/domains/traces/components/traces-list-view.es.js.map +1 -1
- package/dist/domains/traces/components/traces-page-skeleton.cjs.js +1 -3
- package/dist/domains/traces/components/traces-page-skeleton.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-page-skeleton.es.js +1 -3
- package/dist/domains/traces/components/traces-page-skeleton.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 +3 -1
- package/dist/domains/workflows/components/workflow-entity-header.cjs.js.map +1 -1
- package/dist/domains/workflows/components/workflow-entity-header.es.js +3 -1
- package/dist/domains/workflows/components/workflow-entity-header.es.js.map +1 -1
- package/dist/domains/workflows/components/workflow-information.cjs.js +3 -3
- package/dist/domains/workflows/components/workflow-information.es.js +3 -3
- 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 +1 -1
- package/dist/domains/workflows/components/workflows-list/no-workflows-info.es.js +1 -1
- package/dist/domains/workflows/components/workflows-list/workflows-list.cjs.js +4 -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 +4 -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 +4 -4
- package/dist/domains/workflows/runs/workflow-run-list.es.js +4 -4
- 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 +2 -2
- package/dist/domains/workflows/workflow/data/workflow-data-inspector.es.js +2 -2
- package/dist/domains/workflows/workflow/input/workflow-json-input.cjs.js +1 -1
- package/dist/domains/workflows/workflow/input/workflow-json-input.es.js +1 -1
- package/dist/domains/workflows/workflow/input/workflow-processor-input.cjs.js +1 -1
- package/dist/domains/workflows/workflow/input/workflow-processor-input.es.js +1 -1
- 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-mode-switch.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-debug-mode-switch.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 -2
- package/dist/domains/workflows/workflow/workflow-input-data.es.js +2 -2
- package/dist/domains/workflows/workflow/workflow-input-type-toggle.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-input-type-toggle.cjs.js.map +1 -1
- package/dist/domains/workflows/workflow/workflow-input-type-toggle.es.js +2 -2
- package/dist/domains/workflows/workflow/workflow-input-type-toggle.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 +5 -5
- package/dist/domains/workflows/workflow/workflow-run-data.es.js +5 -5
- 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 +2 -2
- package/dist/domains/workflows/workflow/workflow-run-header.es.js +2 -2
- package/dist/domains/workflows/workflow/workflow-status.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-status.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-step-action-bar.cjs.js +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 +6 -2
- package/dist/domains/workflows/workflow/workflow-timeline-row.cjs.js.map +1 -1
- package/dist/domains/workflows/workflow/workflow-timeline-row.es.js +6 -2
- package/dist/domains/workflows/workflow/workflow-timeline-row.es.js.map +1 -1
- package/dist/domains/workflows/workflow/workflow-timeline.cjs.js +2 -2
- package/dist/domains/workflows/workflow/workflow-timeline.es.js +2 -2
- 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 +1 -1
- package/dist/domains/workflows/workflow/workflow-trigger-header.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-trigger.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-trigger.es.js +1 -1
- package/dist/{drawer-6MeSDSfP.js → drawer-DXf50w71.js} +2 -2
- package/dist/{drawer-6MeSDSfP.js.map → drawer-DXf50w71.js.map} +1 -1
- package/dist/{drawer-KHIkRUe4.cjs → drawer-d81cZiSV.cjs} +2 -2
- package/dist/{drawer-KHIkRUe4.cjs.map → drawer-d81cZiSV.cjs.map} +1 -1
- package/dist/ee/signals/components/entity-index-compact-grid.cjs.js +2 -2
- package/dist/ee/signals/components/entity-index-compact-grid.es.js +2 -2
- package/dist/ee/signals/components/entity-index-list.cjs.js +1 -3
- package/dist/ee/signals/components/entity-index-list.cjs.js.map +1 -1
- package/dist/ee/signals/components/entity-index-list.es.js +1 -3
- package/dist/ee/signals/components/entity-index-list.es.js.map +1 -1
- package/dist/ee/signals/components/signals-empty-state.cjs.js +16 -20
- package/dist/ee/signals/components/signals-empty-state.cjs.js.map +1 -1
- package/dist/ee/signals/components/signals-empty-state.es.js +16 -20
- package/dist/ee/signals/components/signals-empty-state.es.js.map +1 -1
- package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +4 -5
- package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js.map +1 -1
- package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +4 -5
- package/dist/ee/signals/components/trace-intelligence-entity-index.es.js.map +1 -1
- 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/lifeline-point.cjs.js +7 -2
- package/dist/ee/signals/lifeline-point.cjs.js.map +1 -1
- package/dist/ee/signals/lifeline-point.es.js +7 -2
- package/dist/ee/signals/lifeline-point.es.js.map +1 -1
- package/dist/ee/signals/noise-detail-panel.cjs.js +1 -1
- package/dist/ee/signals/noise-detail-panel.es.js +1 -1
- package/dist/ee/signals/sankey-signals.cjs.js +1 -1
- package/dist/ee/signals/sankey-signals.es.js +1 -1
- package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js +3 -3
- package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +3 -3
- 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 +6 -6
- package/dist/ee/signals/signal-colors.cjs.js.map +1 -1
- package/dist/ee/signals/signal-colors.es.js +6 -6
- package/dist/ee/signals/signal-colors.es.js.map +1 -1
- package/dist/ee/signals/signals-error-state.cjs.js +1 -1
- package/dist/ee/signals/signals-error-state.es.js +1 -1
- package/dist/ee/signals/snapshot-timeline.cjs.js +2 -2
- package/dist/ee/signals/snapshot-timeline.cjs.js.map +1 -1
- package/dist/ee/signals/snapshot-timeline.es.js +2 -2
- package/dist/ee/signals/snapshot-timeline.es.js.map +1 -1
- package/dist/ee/signals/theme-detail-panel.cjs.js +1 -1
- package/dist/ee/signals/theme-detail-panel.es.js +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 +2 -2
- package/dist/ee/signals/trace-insight-view.cjs.js.map +1 -1
- package/dist/ee/signals/trace-insight-view.es.js +2 -2
- 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/{filter-bar-chip-u48DmCu5.js → filter-bar-chip-BNPOrSrD.js} +3 -3
- package/dist/{filter-bar-chip-u48DmCu5.js.map → filter-bar-chip-BNPOrSrD.js.map} +1 -1
- package/dist/{filter-bar-chip-CYKfWUTj.cjs → filter-bar-chip-D4CSm9KP.cjs} +3 -3
- package/dist/{filter-bar-chip-CYKfWUTj.cjs.map → filter-bar-chip-D4CSm9KP.cjs.map} +1 -1
- package/dist/{horizontal-bars-BYNeqSSF.js → horizontal-bars-BSRESJsp.js} +2 -2
- package/dist/{horizontal-bars-BYNeqSSF.js.map → horizontal-bars-BSRESJsp.js.map} +1 -1
- package/dist/{horizontal-bars-BK8snozs.cjs → horizontal-bars-DRD7JkHL.cjs} +2 -2
- package/dist/{horizontal-bars-BK8snozs.cjs.map → horizontal-bars-DRD7JkHL.cjs.map} +1 -1
- package/dist/{input-group-C0xpNsn1.js → input-group-B8bnoDrA.js} +2 -2
- package/dist/{input-group-C0xpNsn1.js.map → input-group-B8bnoDrA.js.map} +1 -1
- package/dist/{input-group-C1NamUEz.cjs → input-group-I8YVM_Ps.cjs} +2 -2
- package/dist/{input-group-C1NamUEz.cjs.map → input-group-I8YVM_Ps.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 +3 -3
- package/dist/lib/form/components/array-element-wrapper.cjs.js.map +1 -1
- package/dist/lib/form/components/array-element-wrapper.es.js +3 -3
- 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/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/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.es.js +1 -1
- package/dist/lib/form/components/record-field.cjs.js +1 -1
- package/dist/lib/form/components/record-field.es.js +1 -1
- package/dist/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-BgO_ksCX.js → list-search-9l8IEdxZ.js} +2 -2
- package/dist/{list-search-BgO_ksCX.js.map → list-search-9l8IEdxZ.js.map} +1 -1
- package/dist/{list-search-bEL_wzsG.cjs → list-search-DXb7HFX8.cjs} +2 -2
- package/dist/{list-search-bEL_wzsG.cjs.map → list-search-DXb7HFX8.cjs.map} +1 -1
- package/dist/{logs-data-list-D82JmBPJ.js → logs-data-list-C77r2FOj.js} +3 -3
- package/dist/{logs-data-list-D82JmBPJ.js.map → logs-data-list-C77r2FOj.js.map} +1 -1
- package/dist/{logs-data-list-DAh8by9h.cjs → logs-data-list-CEFyG1Xb.cjs} +3 -3
- package/dist/{logs-data-list-DAh8by9h.cjs.map → logs-data-list-CEFyG1Xb.cjs.map} +1 -1
- package/dist/{main-sidebar-link-active-DAiTpL8z.js → main-sidebar-link-active-1_ktyA8Q.js} +7 -7
- package/dist/main-sidebar-link-active-1_ktyA8Q.js.map +1 -0
- package/dist/{main-sidebar-link-active-DIMZKeHX.cjs → main-sidebar-link-active-BNko0jHZ.cjs} +7 -7
- package/dist/main-sidebar-link-active-BNko0jHZ.cjs.map +1 -0
- package/dist/{markdown-renderer-CY-jQjAm.js → markdown-renderer-Bl0V7FCo.js} +3 -3
- package/dist/{markdown-renderer-CY-jQjAm.js.map → markdown-renderer-Bl0V7FCo.js.map} +1 -1
- package/dist/{markdown-renderer-DtcId3Ul.cjs → markdown-renderer-CSwjfPaf.cjs} +3 -3
- package/dist/{markdown-renderer-DtcId3Ul.cjs.map → markdown-renderer-CSwjfPaf.cjs.map} +1 -1
- package/dist/{message-copy-button-D49yf_Fk.cjs → message-copy-button-ClJBX9qx.cjs} +2 -2
- package/dist/{message-copy-button-D49yf_Fk.cjs.map → message-copy-button-ClJBX9qx.cjs.map} +1 -1
- package/dist/{message-copy-button-iMfO-J5M.js → message-copy-button-DP3U-xA-.js} +2 -2
- package/dist/{message-copy-button-iMfO-J5M.js.map → message-copy-button-DP3U-xA-.js.map} +1 -1
- package/dist/{metrics-card-Cr6vbt9I.js → metrics-card-CloSmyRQ.js} +3 -3
- package/dist/{metrics-card-Cr6vbt9I.js.map → metrics-card-CloSmyRQ.js.map} +1 -1
- package/dist/{metrics-card-B29tubiE.cjs → metrics-card-HmQJHDNa.cjs} +3 -3
- package/dist/{metrics-card-B29tubiE.cjs.map → metrics-card-HmQJHDNa.cjs.map} +1 -1
- package/dist/{metrics-kpi-card-CHdaoCE8.cjs → metrics-kpi-card-CW24YjZp.cjs} +2 -2
- package/dist/{metrics-kpi-card-CHdaoCE8.cjs.map → metrics-kpi-card-CW24YjZp.cjs.map} +1 -1
- package/dist/{metrics-kpi-card-DaOkTfEn.js → metrics-kpi-card-DLDT28IB.js} +2 -2
- package/dist/{metrics-kpi-card-DaOkTfEn.js.map → metrics-kpi-card-DLDT28IB.js.map} +1 -1
- package/dist/new/sidebar.cjs.js +2 -2
- package/dist/new/sidebar.cjs.js.map +1 -1
- package/dist/new/sidebar.es.js +3 -3
- package/dist/new/sidebar.es.js.map +1 -1
- package/dist/{notification-activity-HAcSSfXh.js → notification-activity-B1_2BPe_.js} +2 -2
- package/dist/{notification-activity-HAcSSfXh.js.map → notification-activity-B1_2BPe_.js.map} +1 -1
- package/dist/{notification-activity-CzWIom28.cjs → notification-activity-BAn2fhYd.cjs} +2 -2
- package/dist/{notification-activity-CzWIom28.cjs.map → notification-activity-BAn2fhYd.cjs.map} +1 -1
- package/dist/{plan-XcVpRToL.js → plan-DJfH1c_u.js} +3 -3
- package/dist/{plan-XcVpRToL.js.map → plan-DJfH1c_u.js.map} +1 -1
- package/dist/{plan-rKBR_aWJ.cjs → plan-ZKAT5frg.cjs} +3 -3
- package/dist/{plan-rKBR_aWJ.cjs.map → plan-ZKAT5frg.cjs.map} +1 -1
- package/dist/primitives/form-element.cjs.js +3 -2
- package/dist/primitives/form-element.cjs.js.map +1 -1
- package/dist/primitives/form-element.es.js +3 -3
- package/dist/primitives/form-element.es.js.map +1 -1
- package/dist/primitives/menu-item.cjs.js +1 -1
- package/dist/primitives/menu-item.es.js +1 -1
- package/dist/primitives/raised-surface.cjs.js +3 -3
- package/dist/primitives/raised-surface.cjs.js.map +1 -1
- package/dist/primitives/raised-surface.es.js +3 -3
- package/dist/primitives/raised-surface.es.js.map +1 -1
- package/dist/primitives/selection-control.cjs.js +2 -2
- package/dist/primitives/selection-control.cjs.js.map +1 -1
- package/dist/primitives/selection-control.es.js +3 -3
- package/dist/primitives/selection-control.es.js.map +1 -1
- package/dist/primitives/transitions.cjs.js +6 -8
- package/dist/primitives/transitions.cjs.js.map +1 -1
- package/dist/primitives/transitions.es.js +5 -9
- package/dist/primitives/transitions.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-gYYOGNLL.cjs → property-filter-applied-D0F0BYMY.cjs} +2 -2
- package/dist/{property-filter-applied-gYYOGNLL.cjs.map → property-filter-applied-D0F0BYMY.cjs.map} +1 -1
- package/dist/{property-filter-applied-lIef4AFt.js → property-filter-applied-k0TOa9hf.js} +2 -2
- package/dist/{property-filter-applied-lIef4AFt.js.map → property-filter-applied-k0TOa9hf.js.map} +1 -1
- package/dist/{reasoning-activity-LdbnHPbR.cjs → reasoning-activity-CO0Ab1Za.cjs} +3 -3
- package/dist/{reasoning-activity-LdbnHPbR.cjs.map → reasoning-activity-CO0Ab1Za.cjs.map} +1 -1
- package/dist/{reasoning-activity-j1bIOIX8.js → reasoning-activity-D3oCzL58.js} +3 -3
- package/dist/{reasoning-activity-j1bIOIX8.js.map → reasoning-activity-D3oCzL58.js.map} +1 -1
- package/dist/{relative-timestamp-BzfR9tDU.cjs → relative-timestamp-D-IvjsVb.cjs} +2 -2
- package/dist/relative-timestamp-D-IvjsVb.cjs.map +1 -0
- package/dist/{relative-timestamp-SPgcvfH6.js → relative-timestamp-wERh5vUE.js} +2 -2
- package/dist/relative-timestamp-wERh5vUE.js.map +1 -0
- package/dist/resize/panel-drawer.cjs.js +1 -1
- package/dist/resize/panel-drawer.es.js +1 -1
- package/dist/{scroll-area-BE7FJqVA.cjs → scroll-area-CEuf7Omb.cjs} +2 -2
- package/dist/scroll-area-CEuf7Omb.cjs.map +1 -0
- package/dist/{scroll-area-PxtGm4w9.js → scroll-area-Ds-fJn5M.js} +3 -3
- package/dist/scroll-area-Ds-fJn5M.js.map +1 -0
- package/dist/{search-field-block-DHrgu8J5.cjs → search-field-block-B1eqMV8x.cjs} +2 -2
- package/dist/{search-field-block-DHrgu8J5.cjs.map → search-field-block-B1eqMV8x.cjs.map} +1 -1
- package/dist/{search-field-block-D9yr3kXG.js → search-field-block-Cj9lJsYi.js} +2 -2
- package/dist/{search-field-block-D9yr3kXG.js.map → search-field-block-Cj9lJsYi.js.map} +1 -1
- package/dist/{select-Y2dIzSBN.cjs → select-C0ZGSJYa.cjs} +2 -2
- package/dist/{select-Y2dIzSBN.cjs.map → select-C0ZGSJYa.cjs.map} +1 -1
- package/dist/{select-BH7BD11Z.js → select-ch8imm15.js} +2 -2
- package/dist/{select-BH7BD11Z.js.map → select-ch8imm15.js.map} +1 -1
- package/dist/{select-field-block-DwFt2fgr.cjs → select-field-block-Dy_N3tWv.cjs} +2 -2
- package/dist/{select-field-block-DwFt2fgr.cjs.map → select-field-block-Dy_N3tWv.cjs.map} +1 -1
- package/dist/{select-field-block-CNLNE9ps.js → select-field-block-_ZUzUs7l.js} +2 -2
- package/dist/{select-field-block-CNLNE9ps.js.map → select-field-block-_ZUzUs7l.js.map} +1 -1
- package/dist/{side-dialog-DQ3SzDXH.cjs → side-dialog-7P9aEC4v.cjs} +4 -4
- package/dist/{side-dialog-DQ3SzDXH.cjs.map → side-dialog-7P9aEC4v.cjs.map} +1 -1
- package/dist/{side-dialog-BgmY4v7P.js → side-dialog-D2O3Y7GB.js} +4 -4
- package/dist/{side-dialog-BgmY4v7P.js.map → side-dialog-D2O3Y7GB.js.map} +1 -1
- package/dist/{signal-activity-B5LFDj6X.js → signal-activity-1REUU8T_.js} +2 -2
- package/dist/{signal-activity-B5LFDj6X.js.map → signal-activity-1REUU8T_.js.map} +1 -1
- package/dist/{signal-activity-DXZ9j7xV.cjs → signal-activity-4OJb4kp6.cjs} +2 -2
- package/dist/{signal-activity-DXZ9j7xV.cjs.map → signal-activity-4OJb4kp6.cjs.map} +1 -1
- package/dist/{slider-MM3K0Pyv.js → slider-D9dd_fVN.js} +3 -3
- package/dist/{slider-MM3K0Pyv.js.map → slider-D9dd_fVN.js.map} +1 -1
- package/dist/{slider-C-Fda4HC.cjs → slider-T_BIZUV0.cjs} +3 -3
- package/dist/{slider-C-Fda4HC.cjs.map → slider-T_BIZUV0.cjs.map} +1 -1
- package/dist/{span-payload-primitives-0ha5dnaq.js → span-payload-primitives-CEflnpwW.js} +4 -4
- package/dist/{span-payload-primitives-0ha5dnaq.js.map → span-payload-primitives-CEflnpwW.js.map} +1 -1
- package/dist/{span-payload-primitives-fZJeJrtj.cjs → span-payload-primitives-CbXrqcs-.cjs} +4 -4
- package/dist/{span-payload-primitives-fZJeJrtj.cjs.map → span-payload-primitives-CbXrqcs-.cjs.map} +1 -1
- package/dist/src/domains/chat/messages/skill-activation.d.ts +8 -0
- package/dist/src/domains/chat/messages/skill-message.d.ts +4 -0
- package/dist/src/domains/workflows/components/workflow-layout.d.ts +1 -1
- package/dist/src/ds/components/DataList/shared.d.ts +2 -2
- package/dist/src/ds/components/Entity/entity.stories.d.ts +0 -1
- package/dist/src/ds/primitives/form-element.d.ts +1 -0
- package/dist/src/ds/primitives/transitions.d.ts +3 -6
- package/dist/src/ds/tokens/color-foundations.stories.d.ts +5 -4
- package/dist/src/ds/tokens/colors.d.ts +62 -1
- package/dist/src/ds/tokens/foundations-layout.d.ts +0 -1
- package/dist/src/ds/tokens/shadows.d.ts +0 -1
- package/dist/style.css +255 -180
- package/dist/{switch-CE9jTpUG.js → switch-88fWFfVz.js} +4 -3
- package/dist/switch-88fWFfVz.js.map +1 -0
- package/dist/{switch-6125Oajw.cjs → switch-Swt75_Sb.cjs} +4 -3
- package/dist/switch-Swt75_Sb.cjs.map +1 -0
- package/dist/{tabs-content-CcZEEfTc.cjs → tabs-content-DQNRMjup.cjs} +3 -3
- package/dist/tabs-content-DQNRMjup.cjs.map +1 -0
- package/dist/{tabs-content-gq5tjHFE.js → tabs-content-h2qqD8t-.js} +3 -3
- package/dist/{tabs-content-gq5tjHFE.js.map → tabs-content-h2qqD8t-.js.map} +1 -1
- package/dist/{tabs-root-DnL_e3X4.js → tabs-root-4vL8SHCO.js} +2 -2
- package/dist/{tabs-root-DnL_e3X4.js.map → tabs-root-4vL8SHCO.js.map} +1 -1
- package/dist/{tabs-root-CSTdrTYo.cjs → tabs-root-BqC8X_h6.cjs} +2 -2
- package/dist/{tabs-root-CSTdrTYo.cjs.map → tabs-root-BqC8X_h6.cjs.map} +1 -1
- package/dist/{tabs-tab-Deu7thdb.js → tabs-tab-7e2as-AV.js} +3 -3
- package/dist/tabs-tab-7e2as-AV.js.map +1 -0
- package/dist/{tabs-tab-DjDhpEEE.cjs → tabs-tab-lm4xyjtD.cjs} +3 -3
- package/dist/tabs-tab-lm4xyjtD.cjs.map +1 -0
- package/dist/{thread-list-BNO_C73l.js → thread-list-DGI6M6if.js} +2 -2
- package/dist/{thread-list-BNO_C73l.js.map → thread-list-DGI6M6if.js.map} +1 -1
- package/dist/{thread-list-CSNdqkMI.cjs → thread-list-DwASH1Vl.cjs} +2 -2
- package/dist/{thread-list-CSNdqkMI.cjs.map → thread-list-DwASH1Vl.cjs.map} +1 -1
- package/dist/{time-picker-078hPxCJ.cjs → time-picker-C0DCPWpR.cjs} +2 -2
- package/dist/{time-picker-078hPxCJ.cjs.map → time-picker-C0DCPWpR.cjs.map} +1 -1
- package/dist/{time-picker-7gF4eQAt.js → time-picker-CfZbLgMm.js} +2 -2
- package/dist/{time-picker-7gF4eQAt.js.map → time-picker-CfZbLgMm.js.map} +1 -1
- package/dist/tokens.cjs.js +63 -3
- package/dist/tokens.cjs.js.map +1 -1
- package/dist/tokens.es.js +63 -3
- package/dist/tokens.es.js.map +1 -1
- package/dist/{tool-approval-CfRaygjH.cjs → tool-approval-BAER9nxR.cjs} +2 -2
- package/dist/{tool-approval-CfRaygjH.cjs.map → tool-approval-BAER9nxR.cjs.map} +1 -1
- package/dist/{tool-approval-BViVo54e.js → tool-approval-xZvYiuBP.js} +2 -2
- package/dist/{tool-approval-BViVo54e.js.map → tool-approval-xZvYiuBP.js.map} +1 -1
- package/dist/{tool-call-arguments-9A5bjnZf.js → tool-call-arguments-D7PMJ6vj.js} +3 -3
- package/dist/{tool-call-arguments-9A5bjnZf.js.map → tool-call-arguments-D7PMJ6vj.js.map} +1 -1
- package/dist/{tool-call-arguments-pnni11q2.cjs → tool-call-arguments-ynBfg2dY.cjs} +3 -3
- package/dist/{tool-call-arguments-pnni11q2.cjs.map → tool-call-arguments-ynBfg2dY.cjs.map} +1 -1
- package/dist/{tool-call-group-DABeZh1M.cjs → tool-call-group-9Dtupqev.cjs} +3 -3
- package/dist/{tool-call-group-DABeZh1M.cjs.map → tool-call-group-9Dtupqev.cjs.map} +1 -1
- package/dist/{tool-call-group-BWKy3t21.js → tool-call-group-DJX7eUYY.js} +3 -3
- package/dist/{tool-call-group-BWKy3t21.js.map → tool-call-group-DJX7eUYY.js.map} +1 -1
- package/dist/{tool-call-mono-B1cNPKRM.cjs → tool-call-mono-DFSfVZ6E.cjs} +2 -2
- package/dist/{tool-call-mono-B1cNPKRM.cjs.map → tool-call-mono-DFSfVZ6E.cjs.map} +1 -1
- package/dist/{tool-call-mono-BKfoVlPN.js → tool-call-mono-gKG9Ek1m.js} +2 -2
- package/dist/{tool-call-mono-BKfoVlPN.js.map → tool-call-mono-gKG9Ek1m.js.map} +1 -1
- package/dist/{tool-call-output-3Ro33hUN.js → tool-call-output-DEoCE_Xn.js} +2 -2
- package/dist/{tool-call-output-3Ro33hUN.js.map → tool-call-output-DEoCE_Xn.js.map} +1 -1
- package/dist/{tool-call-output-BR0HdX36.cjs → tool-call-output-Dl4sVfCy.cjs} +2 -2
- package/dist/{tool-call-output-BR0HdX36.cjs.map → tool-call-output-Dl4sVfCy.cjs.map} +1 -1
- package/dist/{tool-card-j5PjYYXG.js → tool-card-BA1YcDoS.js} +4 -4
- package/dist/{tool-card-j5PjYYXG.js.map → tool-card-BA1YcDoS.js.map} +1 -1
- package/dist/{tool-card-CeRXZ67P.cjs → tool-card-DRqhTx-u.cjs} +4 -4
- package/dist/{tool-card-CeRXZ67P.cjs.map → tool-card-DRqhTx-u.cjs.map} +1 -1
- package/dist/{traces-data-list-Cj8_iaST.cjs → traces-data-list-CU93pUfj.cjs} +4 -4
- package/dist/{traces-data-list-Cj8_iaST.cjs.map → traces-data-list-CU93pUfj.cjs.map} +1 -1
- package/dist/{traces-data-list-DcHBQtgZ.js → traces-data-list-DaedGcID.js} +4 -4
- package/dist/{traces-data-list-DcHBQtgZ.js.map → traces-data-list-DaedGcID.js.map} +1 -1
- package/dist/{use-workflow-graph-runtime-XFvrHY2_.cjs → use-workflow-graph-runtime-D0ODPlNB.cjs} +3 -3
- package/dist/{use-workflow-graph-runtime-XFvrHY2_.cjs.map → use-workflow-graph-runtime-D0ODPlNB.cjs.map} +1 -1
- package/dist/{use-workflow-graph-runtime-BImilvH3.js → use-workflow-graph-runtime-XL5zreeR.js} +3 -3
- package/dist/{use-workflow-graph-runtime-BImilvH3.js.map → use-workflow-graph-runtime-XL5zreeR.js.map} +1 -1
- package/dist/{workflow-code-dialog-content-BaUrjNPW.js → workflow-code-dialog-content-Iz2Omi1P.js} +3 -3
- package/dist/{workflow-code-dialog-content-BaUrjNPW.js.map → workflow-code-dialog-content-Iz2Omi1P.js.map} +1 -1
- package/dist/{workflow-code-dialog-content-BZMdjs9s.cjs → workflow-code-dialog-content-vLneZlMd.cjs} +3 -3
- package/dist/{workflow-code-dialog-content-BZMdjs9s.cjs.map → workflow-code-dialog-content-vLneZlMd.cjs.map} +1 -1
- package/dist/{workflow-condition-card-BOeOKZa6.js → workflow-condition-card-B0Va5Amx.js} +9 -9
- package/dist/workflow-condition-card-B0Va5Amx.js.map +1 -0
- package/dist/{workflow-condition-card-CWzCPzQe.cjs → workflow-condition-card-CfjhZb0m.cjs} +9 -9
- package/dist/workflow-condition-card-CfjhZb0m.cjs.map +1 -0
- package/dist/{workflow-data-edge-view-DoD6VDID.cjs → workflow-data-edge-view-DXeWURnc.cjs} +2 -2
- package/dist/{workflow-data-edge-view-DoD6VDID.cjs.map → workflow-data-edge-view-DXeWURnc.cjs.map} +1 -1
- package/dist/{workflow-data-edge-view-fX21CQmu.js → workflow-data-edge-view-o7akvbpB.js} +2 -2
- package/dist/{workflow-data-edge-view-fX21CQmu.js.map → workflow-data-edge-view-o7akvbpB.js.map} +1 -1
- package/dist/{workflow-debug-controls-CIplFeXE.cjs → workflow-debug-controls-Bcb4vcek.cjs} +2 -2
- package/dist/{workflow-debug-controls-CIplFeXE.cjs.map → workflow-debug-controls-Bcb4vcek.cjs.map} +1 -1
- package/dist/{workflow-debug-controls-7EfBAsMX.js → workflow-debug-controls-DULCFa4s.js} +2 -2
- package/dist/{workflow-debug-controls-7EfBAsMX.js.map → workflow-debug-controls-DULCFa4s.js.map} +1 -1
- package/dist/{workflow-edge-data-button-Cy3liOpU.js → workflow-edge-data-button-BuZzeN2n.js} +4 -4
- package/dist/{workflow-edge-data-button-Cy3liOpU.js.map → workflow-edge-data-button-BuZzeN2n.js.map} +1 -1
- package/dist/{workflow-edge-data-button-DU3WYDe9.cjs → workflow-edge-data-button-CX-eSbSB.cjs} +4 -4
- package/dist/{workflow-edge-data-button-DU3WYDe9.cjs.map → workflow-edge-data-button-CX-eSbSB.cjs.map} +1 -1
- package/dist/{workflow-step-action-BnDqOyJd.js → workflow-step-action-Cf_XmOwj.js} +2 -2
- package/dist/{workflow-step-action-BnDqOyJd.js.map → workflow-step-action-Cf_XmOwj.js.map} +1 -1
- package/dist/{workflow-step-action-CDt3pxg-.cjs → workflow-step-action-JMkWtObA.cjs} +2 -2
- package/dist/{workflow-step-action-CDt3pxg-.cjs.map → workflow-step-action-JMkWtObA.cjs.map} +1 -1
- package/package.json +9 -9
- package/theme/colors.css +112 -0
- package/theme/data-viz.css +7 -5
- package/theme/status.css +23 -2
- package/theme/surfaces.css +1 -11
- package/theme.css +1 -1
- package/dist/Button-CHTvSq4d.js.map +0 -1
- package/dist/Button-DbJn0bJX.cjs.map +0 -1
- package/dist/Card-BbwF20OW.cjs.map +0 -1
- package/dist/Card-DmT57Pve.js.map +0 -1
- package/dist/code-editor-8l_YoqYu.cjs.map +0 -1
- package/dist/code-editor-m5ktiTwB.js.map +0 -1
- package/dist/collapsible-BFSJouuI.cjs.map +0 -1
- package/dist/collapsible-DhhP5p1j.js.map +0 -1
- package/dist/data-code-section-D01ggJy6.js.map +0 -1
- package/dist/data-code-section-W_dIahDO.cjs.map +0 -1
- package/dist/data-list-spacer-Cukij8de.js.map +0 -1
- package/dist/data-list-spacer-D8zpJS7Z.cjs.map +0 -1
- package/dist/data-list-top-G11bdV77.js.map +0 -1
- package/dist/data-list-top-KKXNLoP6.cjs.map +0 -1
- package/dist/main-sidebar-link-active-DAiTpL8z.js.map +0 -1
- package/dist/main-sidebar-link-active-DIMZKeHX.cjs.map +0 -1
- package/dist/relative-timestamp-BzfR9tDU.cjs.map +0 -1
- package/dist/relative-timestamp-SPgcvfH6.js.map +0 -1
- package/dist/scroll-area-BE7FJqVA.cjs.map +0 -1
- package/dist/scroll-area-PxtGm4w9.js.map +0 -1
- package/dist/signals-empty-state.css +0 -54
- package/dist/switch-6125Oajw.cjs.map +0 -1
- package/dist/switch-CE9jTpUG.js.map +0 -1
- package/dist/tabs-content-CcZEEfTc.cjs.map +0 -1
- package/dist/tabs-tab-Deu7thdb.js.map +0 -1
- package/dist/tabs-tab-DjDhpEEE.cjs.map +0 -1
- package/dist/workflow-condition-card-BOeOKZa6.js.map +0 -1
- package/dist/workflow-condition-card-CWzCPzQe.cjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThreadRail.cjs.js","sources":["../../src/ds/components/ThreadRail/thread-rail.tsx","../../src/ds/components/ThreadRail/thread-rail-turns.ts","../../src/ds/components/ThreadRail/turn-groups.ts"],"sourcesContent":["import { FileText } from 'lucide-react';\nimport * as React from 'react';\n\nimport type { ThreadRailTurn } from './thread-rail-turns';\n\nimport { useOptionalMessageScroller, useOptionalMessageScrollerVisibility } from '@/ds/components/MessageScroller';\nimport { ScrollArea, ScrollAreaViewport } from '@/ds/components/ScrollArea';\nimport { Txt } from '@/ds/components/Txt';\nimport { overlaySurfaceStyle } from '@/ds/primitives/raised-surface';\nimport { useMeasuredAutoHeight } from '@/hooks/use-measured-auto-height';\nimport { cn } from '@/lib/utils';\n\ntype ThreadRailPreviewPhase = 'hidden' | 'entering' | 'visible' | 'exiting';\n\ntype ThreadRailPreviewState = {\n currentTurn: ThreadRailTurn | undefined;\n previousTurn: ThreadRailTurn | undefined;\n index: number | null;\n phase: ThreadRailPreviewPhase;\n top: number;\n transitionKey: number;\n};\n\nconst PREVIEW_TRANSITION_DURATION_MS = 360;\nconst PREVIEW_CLEANUP_DELAY_MS = PREVIEW_TRANSITION_DURATION_MS + 80;\n\nconst DEFAULT_PREVIEW_STATE: ThreadRailPreviewState = {\n currentTurn: undefined,\n previousTurn: undefined,\n index: null,\n phase: 'hidden',\n top: 0,\n transitionKey: 0,\n};\n\nexport interface ThreadRailProps {\n turns: ThreadRailTurn[];\n currentAnchorId?: string;\n visibleMessageIds?: string[];\n label?: string;\n className?: string;\n maxHeight?: string;\n scrollAreaClassName?: string;\n onSelect?: (turn: ThreadRailTurn) => void;\n}\n\nexport function ThreadRail({\n turns,\n currentAnchorId,\n visibleMessageIds,\n label = 'Conversation timeline',\n className,\n maxHeight = 'calc(100dvh - 12rem)',\n scrollAreaClassName,\n onSelect,\n}: ThreadRailProps) {\n const railRef = React.useRef<HTMLElement>(null);\n const previewId = React.useId();\n const [previewState, setPreviewState] = React.useState<ThreadRailPreviewState>(DEFAULT_PREVIEW_STATE);\n const messageScroller = useOptionalMessageScroller();\n const scrollerVisibility = useOptionalMessageScrollerVisibility();\n\n const fallbackMessageId = turns.at(-1)?.messageId;\n const activeMessageId = currentAnchorId ?? scrollerVisibility?.currentAnchorId ?? fallbackMessageId;\n const resolvedVisibleMessageIds =\n visibleMessageIds ?? scrollerVisibility?.visibleMessageIds ?? (activeMessageId ? [activeMessageId] : []);\n const visibleMessageIdSet = new Set(resolvedVisibleMessageIds);\n const previewHoverActive = previewState.phase === 'entering' || previewState.phase === 'visible';\n const hoveredIndex = previewHoverActive ? previewState.index : null;\n const selectTurn = React.useCallback(\n (turn: ThreadRailTurn) => {\n if (onSelect) {\n onSelect(turn);\n return;\n }\n\n messageScroller?.scrollToMessage(turn.messageId, { behavior: 'smooth', align: 'start' });\n },\n [messageScroller, onSelect],\n );\n\n const showPreview = (index: number, element: HTMLElement) => {\n const railTop = railRef.current?.getBoundingClientRect().top ?? 0;\n const itemRect = element.getBoundingClientRect();\n const nextTurn = turns[index];\n if (!nextTurn) return;\n\n setPreviewState(current => {\n const nextTop = itemRect.top + itemRect.height / 2 - railTop;\n if (current.index === index && current.phase !== 'hidden' && current.phase !== 'exiting') {\n return { ...current, top: nextTop };\n }\n\n const previousTurn =\n current.currentTurn && current.currentTurn.key !== nextTurn.key && current.phase !== 'hidden'\n ? current.currentTurn\n : undefined;\n\n return {\n currentTurn: nextTurn,\n previousTurn,\n index,\n phase: 'entering',\n top: nextTop,\n transitionKey: current.transitionKey + 1,\n };\n });\n };\n\n const hidePreview = () => {\n setPreviewState(current => {\n if (!current.currentTurn || current.phase === 'hidden' || current.phase === 'exiting') {\n return { ...current, index: null };\n }\n\n return {\n ...current,\n index: null,\n previousTurn: undefined,\n phase: 'exiting',\n transitionKey: current.transitionKey + 1,\n };\n });\n };\n\n React.useEffect(() => {\n if (previewState.phase !== 'entering') return;\n\n const requestFrame = window.requestAnimationFrame ?? window.setTimeout;\n const cancelFrame = window.cancelAnimationFrame ?? window.clearTimeout;\n let settleFrame: number | undefined;\n const startFrame = requestFrame(() => {\n settleFrame = requestFrame(() => {\n setPreviewState(current =>\n current.transitionKey === previewState.transitionKey && current.phase === 'entering'\n ? { ...current, phase: 'visible' }\n : current,\n );\n });\n });\n\n return () => {\n cancelFrame(startFrame);\n if (settleFrame !== undefined) cancelFrame(settleFrame);\n };\n }, [previewState.phase, previewState.transitionKey]);\n\n React.useEffect(() => {\n if (previewState.phase !== 'visible' || !previewState.previousTurn) return;\n\n const timeout = window.setTimeout(() => {\n setPreviewState(current =>\n current.transitionKey === previewState.transitionKey ? { ...current, previousTurn: undefined } : current,\n );\n }, PREVIEW_CLEANUP_DELAY_MS);\n\n return () => window.clearTimeout(timeout);\n }, [previewState.phase, previewState.previousTurn, previewState.transitionKey]);\n\n React.useEffect(() => {\n if (previewState.phase !== 'exiting') return;\n\n const timeout = window.setTimeout(() => {\n setPreviewState(current =>\n current.transitionKey === previewState.transitionKey ? DEFAULT_PREVIEW_STATE : current,\n );\n }, PREVIEW_CLEANUP_DELAY_MS);\n\n return () => window.clearTimeout(timeout);\n }, [previewState.phase, previewState.transitionKey]);\n\n if (turns.length === 0) return null;\n\n return (\n <nav\n ref={railRef}\n aria-label={label}\n data-testid=\"thread-rail\"\n className={cn('relative w-8 py-2', className)}\n onMouseLeave={hidePreview}\n onBlur={event => {\n const nextFocus = event.relatedTarget;\n if (!(nextFocus instanceof Node) || !event.currentTarget.contains(nextFocus)) hidePreview();\n }}\n >\n <ScrollArea\n data-testid=\"thread-rail-scroll-area\"\n maxHeight={maxHeight}\n className={cn('w-8', scrollAreaClassName)}\n >\n <ScrollAreaViewport className=\"pr-3\">\n <div className=\"flex w-4 flex-col items-start gap-2 py-2\">\n {turns.map((turn, index) => {\n const distance = hoveredIndex === null ? null : Math.abs(index - hoveredIndex);\n const active = turn.messageId === activeMessageId;\n const inView = visibleMessageIdSet.has(turn.messageId);\n const previewActive = hoveredIndex === index;\n\n return (\n <ThreadRailItem\n key={turn.key}\n turn={turn}\n index={index}\n distance={distance}\n active={active}\n inView={inView}\n previewId={previewActive ? previewId : undefined}\n onHoverChange={showPreview}\n onSelect={selectTurn}\n />\n );\n })}\n </div>\n </ScrollAreaViewport>\n </ScrollArea>\n\n {previewState.currentTurn && (\n <ThreadRailPreview\n id={previewId}\n currentTurn={previewState.currentTurn}\n previousTurn={previewState.previousTurn}\n phase={previewState.phase}\n top={previewState.top}\n />\n )}\n </nav>\n );\n}\n\ninterface ThreadRailItemProps {\n turn: ThreadRailTurn;\n index: number;\n distance: number | null;\n active: boolean;\n inView: boolean;\n previewId?: string;\n onHoverChange: (index: number, element: HTMLElement) => void;\n onSelect: (turn: ThreadRailTurn) => void;\n}\n\n/** Width of a rail tick: widest at the hovered item, tapering to neighbours. */\nconst getRailItemWidth = (distance: number | null): string => {\n if (distance === 0) return 'w-4';\n if (distance === 1) return 'w-3';\n return 'w-2';\n};\n\n/** Background tone of a rail tick, prioritising hovered/active, then in-view, then proximity. */\nconst getRailItemTone = ({\n distance,\n active,\n inView,\n}: Pick<ThreadRailItemProps, 'distance' | 'active' | 'inView'>): string => {\n if (distance === 0 || active) return 'bg-foreground';\n if (inView) return 'bg-foreground/85';\n if (distance === 1) return 'bg-foreground/70';\n return 'bg-foreground/40';\n};\n\nfunction ThreadRailItem({\n turn,\n index,\n distance,\n active,\n inView,\n previewId,\n onHoverChange,\n onSelect,\n}: ThreadRailItemProps) {\n const size = getRailItemWidth(distance);\n const tone = getRailItemTone({ distance, active, inView });\n\n return (\n <div\n data-in-view={inView ? 'true' : undefined}\n data-active={active ? 'true' : undefined}\n className=\"group/thread-rail-item relative flex items-center\"\n >\n <button\n type=\"button\"\n aria-label={`Jump to ${turn.prompt}`}\n aria-current={active ? 'location' : undefined}\n aria-describedby={previewId}\n data-in-view={inView ? 'true' : undefined}\n data-active={active ? 'true' : undefined}\n onClick={() => onSelect(turn)}\n onMouseEnter={event => onHoverChange(index, event.currentTarget)}\n onFocus={event => onHoverChange(index, event.currentTarget)}\n className={cn(\n 'relative block h-px cursor-pointer rounded-full transition-[width,background-color] duration-normal ease-out',\n \"before:absolute before:inset-x-0 before:-inset-y-1 before:content-['']\",\n 'focus-visible:ring-2 focus-visible:ring-border-focus focus-visible:outline-hidden',\n size,\n tone,\n )}\n />\n </div>\n );\n}\n\nfunction ThreadRailPreview({\n id,\n currentTurn,\n previousTurn,\n phase,\n top,\n}: {\n id: string;\n currentTurn: ThreadRailTurn;\n previousTurn: ThreadRailTurn | undefined;\n phase: ThreadRailPreviewPhase;\n top: number;\n}) {\n const {\n ref: previewSizerRef,\n heightStyle: previewHeightStyle,\n measure: measurePreviewHeight,\n } = useMeasuredAutoHeight<HTMLDivElement>();\n const containerVisible = phase === 'visible' || (phase === 'entering' && Boolean(previousTurn));\n // Entering and exiting share the same off-screen resting style.\n const hiddenLayerClassName = 'scale-95 opacity-0 blur-xs';\n const visibleLayerClassName = 'scale-100 opacity-100 blur-none';\n const layerClassName =\n 'absolute inset-x-0 top-0 h-full origin-left transition-[opacity,filter,scale] duration-150 ease-in-out will-change-[opacity,filter,scale] motion-reduce:scale-100 motion-reduce:blur-none motion-reduce:transition-none';\n\n React.useLayoutEffect(() => {\n measurePreviewHeight();\n }, [currentTurn.key, phase, measurePreviewHeight]);\n\n return (\n <div\n id={id}\n data-testid=\"thread-rail-preview\"\n data-visible={containerVisible ? 'true' : undefined}\n className={cn(\n 'pointer-events-none absolute top-0 left-full z-30 ml-3 w-72 overflow-hidden rounded-xl text-left transition-[height,translate,opacity] duration-360 ease-out-custom will-change-[height,translate,opacity] motion-reduce:transition-none',\n overlaySurfaceStyle,\n containerVisible ? 'opacity-100' : 'opacity-0',\n )}\n style={{ ...previewHeightStyle, translate: `0 calc(${top}px - 50%)` }}\n >\n <div ref={previewSizerRef} data-testid=\"thread-rail-preview-sizer\" aria-hidden className=\"invisible\">\n <ThreadRailPreviewContent turn={currentTurn} className=\"p-3.5\" />\n </div>\n <div data-testid=\"thread-rail-preview-viewport\" className=\"absolute inset-0\">\n <div className=\"relative h-full\">\n {previousTurn && (\n <div\n key={previousTurn.key}\n data-testid=\"thread-rail-preview-previous\"\n aria-hidden\n className={cn(layerClassName, phase === 'entering' ? visibleLayerClassName : hiddenLayerClassName)}\n >\n <ThreadRailPreviewContent turn={previousTurn} className=\"p-3.5\" />\n </div>\n )}\n <div\n key={currentTurn.key}\n data-testid=\"thread-rail-preview-current\"\n className={cn(layerClassName, phase === 'visible' ? visibleLayerClassName : hiddenLayerClassName)}\n >\n <ThreadRailPreviewContent turn={currentTurn} className=\"p-3.5\" />\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction ThreadRailPreviewContent({\n turn,\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement> & { turn: ThreadRailTurn }) {\n return (\n <div className={className} {...props}>\n <div className=\"truncate text-subheading text-foreground\">{turn.prompt}</div>\n {turn.reply && (\n <Txt variant=\"caption\" tone=\"muted\" className=\"mt-1.5 line-clamp-3\">\n {turn.reply}\n </Txt>\n )}\n {(turn.files.length > 0 || turn.hiddenFileCount > 0) && (\n <div className=\"mt-3 flex flex-wrap items-center gap-2 border-t border-border/60 pt-2.5\">\n {turn.files.map(file => (\n <Txt\n as=\"span\"\n variant=\"caption\"\n tone=\"muted\"\n key={file}\n className=\"inline-flex max-w-44 items-center gap-1.5 truncate\"\n >\n <FileText className=\"size-3.5 shrink-0 opacity-70\" aria-hidden />\n {file}\n </Txt>\n ))}\n {turn.hiddenFileCount > 0 && (\n <Txt as=\"span\" variant=\"column\" tone=\"muted\">\n +{turn.hiddenFileCount}\n </Txt>\n )}\n </div>\n )}\n </div>\n );\n}\n","import type { MastraDBMessage } from '@mastra/core/agent/message-list';\nimport type { MastraDBMessageMetadata } from '@mastra/react';\n\nconst SUMMARY_MAX_LENGTH = 120;\nconst FILE_PREVIEW_LIMIT = 2;\n// Inlined, not imported: the value export sits behind a barrel this browser bundle must not pull.\nconst CLIENT_MESSAGE_ID_KEY = 'clientMessageId' satisfies keyof MastraDBMessageMetadata;\n\nexport interface ThreadRailTurn {\n key: string;\n messageId: string;\n prompt: string;\n reply?: string;\n files: string[];\n hiddenFileCount: number;\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nexport const getClientMessageKey = (message: MastraDBMessage): string => {\n const metadata = message.content.metadata;\n const clientMessageId = isRecord(metadata) ? metadata[CLIENT_MESSAGE_ID_KEY] : undefined;\n return typeof clientMessageId === 'string' && clientMessageId.length > 0 ? clientMessageId : message.id;\n};\n\nconst normalizeSummary = (value: string, fallback: string): string => {\n const normalized = value.replace(/\\s+/g, ' ').trim();\n if (normalized.length === 0) return fallback;\n if (normalized.length <= SUMMARY_MAX_LENGTH) return normalized;\n return `${normalized.slice(0, SUMMARY_MAX_LENGTH - 3).trimEnd()}...`;\n};\n\nconst getTextFromParts = (message: MastraDBMessage): string =>\n message.content.parts\n .flatMap(part => {\n if (!isRecord(part) || part.type !== 'text' || typeof part.text !== 'string') return [];\n return [part.text];\n })\n .join('\\n');\n\nconst getStringField = (part: Record<string, unknown>, keys: string[]): string | undefined => {\n for (const key of keys) {\n const value = part[key];\n if (typeof value === 'string' && value.trim().length > 0) return value;\n }\n return undefined;\n};\n\nconst getPathLabel = (value: string): string | undefined => {\n if (value.startsWith('data:')) return undefined;\n\n try {\n const url = new URL(value);\n const candidate = url.pathname.split('/').filter(Boolean).pop();\n return candidate || url.hostname || undefined;\n } catch {\n const candidate = value.split(/[?#]/)[0]?.split('/').filter(Boolean).pop();\n return candidate && !candidate.startsWith('data:') ? candidate : undefined;\n }\n};\n\nconst getFallbackFileLabel = (part: Record<string, unknown>): string => {\n const mediaType = getStringField(part, ['mimeType', 'mediaType']) ?? '';\n if (part.type === 'image' || mediaType.startsWith('image/')) return 'Image';\n if (mediaType === 'application/pdf') return 'PDF';\n if (mediaType.startsWith('video/')) return 'Video';\n if (mediaType.startsWith('audio/')) return 'Audio';\n return 'File';\n};\n\nconst getFileLabelFromPart = (part: MastraDBMessage['content']['parts'][number]): string | undefined => {\n if (!isRecord(part)) return undefined;\n\n const type = getStringField(part, ['type']);\n if (type !== 'file' && type !== 'image') return undefined;\n\n const explicitLabel = getStringField(part, ['filename', 'name']);\n if (explicitLabel) return explicitLabel;\n\n const source = getStringField(part, ['url', 'image', 'data']);\n const pathLabel = source ? getPathLabel(source) : undefined;\n return pathLabel ?? getFallbackFileLabel(part);\n};\n\nconst getFileLabels = (message: MastraDBMessage): string[] =>\n message.content.parts.map(getFileLabelFromPart).filter((label): label is string => Boolean(label));\n\nconst getSignalType = (message: MastraDBMessage): string | undefined => {\n const signal = message.content.metadata?.signal;\n const metadataType = isRecord(signal) ? signal.type : undefined;\n return typeof metadataType === 'string' ? metadataType : message.type;\n};\n\n/** What opens a turn: a rail stop, and the row the scroller parks at the top. */\nexport const startsUserTurn = (message: MastraDBMessage): boolean => {\n if (message.role === 'user') return true;\n if (message.role !== 'signal') return false;\n\n const signalType = getSignalType(message);\n return signalType === 'user' || signalType === 'user-message';\n};\n\nconst getNextAssistantReply = (messages: MastraDBMessage[], startIndex: number): string | undefined => {\n for (let index = startIndex + 1; index < messages.length; index += 1) {\n const message = messages[index];\n if (!message) continue;\n if (startsUserTurn(message)) return undefined;\n if (message.role !== 'assistant') continue;\n\n const reply = normalizeSummary(getTextFromParts(message), '');\n if (reply) return reply;\n }\n\n return undefined;\n};\n\nexport const buildThreadRailTurns = (messages: MastraDBMessage[]): ThreadRailTurn[] =>\n messages.flatMap((message, index) => {\n if (!startsUserTurn(message)) return [];\n\n const files = getFileLabels(message);\n const visibleFiles = files.slice(0, FILE_PREVIEW_LIMIT);\n\n return [\n {\n key: getClientMessageKey(message),\n messageId: message.id,\n prompt: normalizeSummary(getTextFromParts(message), files.length > 0 ? 'Attached file' : 'User message'),\n reply: getNextAssistantReply(messages, index),\n files: visibleFiles,\n hiddenFileCount: files.length - visibleFiles.length,\n },\n ];\n });\n","/** A user's turn and everything the run produced under it. */\nexport interface TurnGroup<T> {\n key: string;\n entries: T[];\n /** Opened by a user message, so it reserves room and anchors the scroll. */\n opensTurn: boolean;\n}\n\nexport interface TurnRules<T> {\n key: (entry: T) => string;\n opensTurn: (entry: T) => boolean;\n /** A marker that belongs above the turn it introduces but arrives after the previous one, so it moves down. */\n introduces?: (entry: T) => boolean;\n}\n\nconst introducesNothing = () => false;\n\n/**\n * Cuts a timeline where the reader's attention moves: a user message starts a turn,\n * and everything the run answers with belongs to it. Entries before the first opener\n * form a turn of their own that opens nothing.\n */\nexport function groupTurns<T>(entries: T[], { key, opensTurn, introduces = introducesNothing }: TurnRules<T>) {\n const groups: TurnGroup<T>[] = [];\n\n for (const entry of entries) {\n const opens = opensTurn(entry);\n const previous = groups.at(-1);\n if (!opens && previous) {\n previous.entries.push(entry);\n continue;\n }\n const last = previous?.entries.at(-1);\n const introduction = previous && last !== undefined && introduces(last) ? previous.entries.splice(-1) : [];\n if (previous?.entries.length === 0) groups.pop();\n groups.push({ key: key(entry), entries: [...introduction, entry], opensTurn: opens });\n }\n\n return groups;\n}\n"],"names":["React","useOptionalMessageScroller","useOptionalMessageScrollerVisibility","jsxs","cn","jsx","ScrollArea","ScrollAreaViewport","useMeasuredAutoHeight","overlaySurfaceStyle","Txt","FileText"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ThreadRail.cjs.js","sources":["../../src/ds/components/ThreadRail/thread-rail.tsx","../../src/ds/components/ThreadRail/thread-rail-turns.ts","../../src/ds/components/ThreadRail/turn-groups.ts"],"sourcesContent":["import { FileText } from 'lucide-react';\nimport * as React from 'react';\n\nimport type { ThreadRailTurn } from './thread-rail-turns';\n\nimport { useOptionalMessageScroller, useOptionalMessageScrollerVisibility } from '@/ds/components/MessageScroller';\nimport { ScrollArea, ScrollAreaViewport } from '@/ds/components/ScrollArea';\nimport { Txt } from '@/ds/components/Txt';\nimport { overlaySurfaceStyle } from '@/ds/primitives/raised-surface';\nimport { focusRing } from '@/ds/primitives/transitions';\nimport { useMeasuredAutoHeight } from '@/hooks/use-measured-auto-height';\nimport { cn } from '@/lib/utils';\n\ntype ThreadRailPreviewPhase = 'hidden' | 'entering' | 'visible' | 'exiting';\n\ntype ThreadRailPreviewState = {\n currentTurn: ThreadRailTurn | undefined;\n previousTurn: ThreadRailTurn | undefined;\n index: number | null;\n phase: ThreadRailPreviewPhase;\n top: number;\n transitionKey: number;\n};\n\nconst PREVIEW_TRANSITION_DURATION_MS = 360;\nconst PREVIEW_CLEANUP_DELAY_MS = PREVIEW_TRANSITION_DURATION_MS + 80;\n\nconst DEFAULT_PREVIEW_STATE: ThreadRailPreviewState = {\n currentTurn: undefined,\n previousTurn: undefined,\n index: null,\n phase: 'hidden',\n top: 0,\n transitionKey: 0,\n};\n\nexport interface ThreadRailProps {\n turns: ThreadRailTurn[];\n currentAnchorId?: string;\n visibleMessageIds?: string[];\n label?: string;\n className?: string;\n maxHeight?: string;\n scrollAreaClassName?: string;\n onSelect?: (turn: ThreadRailTurn) => void;\n}\n\nexport function ThreadRail({\n turns,\n currentAnchorId,\n visibleMessageIds,\n label = 'Conversation timeline',\n className,\n maxHeight = 'calc(100dvh - 12rem)',\n scrollAreaClassName,\n onSelect,\n}: ThreadRailProps) {\n const railRef = React.useRef<HTMLElement>(null);\n const previewId = React.useId();\n const [previewState, setPreviewState] = React.useState<ThreadRailPreviewState>(DEFAULT_PREVIEW_STATE);\n const messageScroller = useOptionalMessageScroller();\n const scrollerVisibility = useOptionalMessageScrollerVisibility();\n\n const fallbackMessageId = turns.at(-1)?.messageId;\n const activeMessageId = currentAnchorId ?? scrollerVisibility?.currentAnchorId ?? fallbackMessageId;\n const resolvedVisibleMessageIds =\n visibleMessageIds ?? scrollerVisibility?.visibleMessageIds ?? (activeMessageId ? [activeMessageId] : []);\n const visibleMessageIdSet = new Set(resolvedVisibleMessageIds);\n const previewHoverActive = previewState.phase === 'entering' || previewState.phase === 'visible';\n const hoveredIndex = previewHoverActive ? previewState.index : null;\n const selectTurn = React.useCallback(\n (turn: ThreadRailTurn) => {\n if (onSelect) {\n onSelect(turn);\n return;\n }\n\n messageScroller?.scrollToMessage(turn.messageId, { behavior: 'smooth', align: 'start' });\n },\n [messageScroller, onSelect],\n );\n\n const showPreview = (index: number, element: HTMLElement) => {\n const railTop = railRef.current?.getBoundingClientRect().top ?? 0;\n const itemRect = element.getBoundingClientRect();\n const nextTurn = turns[index];\n if (!nextTurn) return;\n\n setPreviewState(current => {\n const nextTop = itemRect.top + itemRect.height / 2 - railTop;\n if (current.index === index && current.phase !== 'hidden' && current.phase !== 'exiting') {\n return { ...current, top: nextTop };\n }\n\n const previousTurn =\n current.currentTurn && current.currentTurn.key !== nextTurn.key && current.phase !== 'hidden'\n ? current.currentTurn\n : undefined;\n\n return {\n currentTurn: nextTurn,\n previousTurn,\n index,\n phase: 'entering',\n top: nextTop,\n transitionKey: current.transitionKey + 1,\n };\n });\n };\n\n const hidePreview = () => {\n setPreviewState(current => {\n if (!current.currentTurn || current.phase === 'hidden' || current.phase === 'exiting') {\n return { ...current, index: null };\n }\n\n return {\n ...current,\n index: null,\n previousTurn: undefined,\n phase: 'exiting',\n transitionKey: current.transitionKey + 1,\n };\n });\n };\n\n React.useEffect(() => {\n if (previewState.phase !== 'entering') return;\n\n const requestFrame = window.requestAnimationFrame ?? window.setTimeout;\n const cancelFrame = window.cancelAnimationFrame ?? window.clearTimeout;\n let settleFrame: number | undefined;\n const startFrame = requestFrame(() => {\n settleFrame = requestFrame(() => {\n setPreviewState(current =>\n current.transitionKey === previewState.transitionKey && current.phase === 'entering'\n ? { ...current, phase: 'visible' }\n : current,\n );\n });\n });\n\n return () => {\n cancelFrame(startFrame);\n if (settleFrame !== undefined) cancelFrame(settleFrame);\n };\n }, [previewState.phase, previewState.transitionKey]);\n\n React.useEffect(() => {\n if (previewState.phase !== 'visible' || !previewState.previousTurn) return;\n\n const timeout = window.setTimeout(() => {\n setPreviewState(current =>\n current.transitionKey === previewState.transitionKey ? { ...current, previousTurn: undefined } : current,\n );\n }, PREVIEW_CLEANUP_DELAY_MS);\n\n return () => window.clearTimeout(timeout);\n }, [previewState.phase, previewState.previousTurn, previewState.transitionKey]);\n\n React.useEffect(() => {\n if (previewState.phase !== 'exiting') return;\n\n const timeout = window.setTimeout(() => {\n setPreviewState(current =>\n current.transitionKey === previewState.transitionKey ? DEFAULT_PREVIEW_STATE : current,\n );\n }, PREVIEW_CLEANUP_DELAY_MS);\n\n return () => window.clearTimeout(timeout);\n }, [previewState.phase, previewState.transitionKey]);\n\n if (turns.length === 0) return null;\n\n return (\n <nav\n ref={railRef}\n aria-label={label}\n data-testid=\"thread-rail\"\n className={cn('relative w-8 py-2', className)}\n onMouseLeave={hidePreview}\n onBlur={event => {\n const nextFocus = event.relatedTarget;\n if (!(nextFocus instanceof Node) || !event.currentTarget.contains(nextFocus)) hidePreview();\n }}\n >\n <ScrollArea\n data-testid=\"thread-rail-scroll-area\"\n maxHeight={maxHeight}\n className={cn('w-8', scrollAreaClassName)}\n >\n <ScrollAreaViewport className=\"pr-3\">\n <div className=\"flex w-4 flex-col items-start gap-2 py-2\">\n {turns.map((turn, index) => {\n const distance = hoveredIndex === null ? null : Math.abs(index - hoveredIndex);\n const active = turn.messageId === activeMessageId;\n const inView = visibleMessageIdSet.has(turn.messageId);\n const previewActive = hoveredIndex === index;\n\n return (\n <ThreadRailItem\n key={turn.key}\n turn={turn}\n index={index}\n distance={distance}\n active={active}\n inView={inView}\n previewId={previewActive ? previewId : undefined}\n onHoverChange={showPreview}\n onSelect={selectTurn}\n />\n );\n })}\n </div>\n </ScrollAreaViewport>\n </ScrollArea>\n\n {previewState.currentTurn && (\n <ThreadRailPreview\n id={previewId}\n currentTurn={previewState.currentTurn}\n previousTurn={previewState.previousTurn}\n phase={previewState.phase}\n top={previewState.top}\n />\n )}\n </nav>\n );\n}\n\ninterface ThreadRailItemProps {\n turn: ThreadRailTurn;\n index: number;\n distance: number | null;\n active: boolean;\n inView: boolean;\n previewId?: string;\n onHoverChange: (index: number, element: HTMLElement) => void;\n onSelect: (turn: ThreadRailTurn) => void;\n}\n\n/** Width of a rail tick: widest at the hovered item, tapering to neighbours. */\nconst getRailItemWidth = (distance: number | null): string => {\n if (distance === 0) return 'w-4';\n if (distance === 1) return 'w-3';\n return 'w-2';\n};\n\n/** Background tone of a rail tick, prioritising hovered/active, then in-view, then proximity. */\nconst getRailItemTone = ({\n distance,\n active,\n inView,\n}: Pick<ThreadRailItemProps, 'distance' | 'active' | 'inView'>): string => {\n if (distance === 0 || active) return 'bg-foreground';\n if (inView) return 'bg-foreground/85';\n if (distance === 1) return 'bg-foreground/70';\n return 'bg-foreground/40';\n};\n\nfunction ThreadRailItem({\n turn,\n index,\n distance,\n active,\n inView,\n previewId,\n onHoverChange,\n onSelect,\n}: ThreadRailItemProps) {\n const size = getRailItemWidth(distance);\n const tone = getRailItemTone({ distance, active, inView });\n\n return (\n <div\n data-in-view={inView ? 'true' : undefined}\n data-active={active ? 'true' : undefined}\n className=\"group/thread-rail-item relative flex items-center\"\n >\n <button\n type=\"button\"\n aria-label={`Jump to ${turn.prompt}`}\n aria-current={active ? 'location' : undefined}\n aria-describedby={previewId}\n data-in-view={inView ? 'true' : undefined}\n data-active={active ? 'true' : undefined}\n onClick={() => onSelect(turn)}\n onMouseEnter={event => onHoverChange(index, event.currentTarget)}\n onFocus={event => onHoverChange(index, event.currentTarget)}\n className={cn(\n 'relative block h-px cursor-pointer rounded-full transition-[width,background-color] duration-normal ease-out',\n \"before:absolute before:inset-x-0 before:-inset-y-1 before:content-['']\",\n focusRing,\n size,\n tone,\n )}\n />\n </div>\n );\n}\n\nfunction ThreadRailPreview({\n id,\n currentTurn,\n previousTurn,\n phase,\n top,\n}: {\n id: string;\n currentTurn: ThreadRailTurn;\n previousTurn: ThreadRailTurn | undefined;\n phase: ThreadRailPreviewPhase;\n top: number;\n}) {\n const {\n ref: previewSizerRef,\n heightStyle: previewHeightStyle,\n measure: measurePreviewHeight,\n } = useMeasuredAutoHeight<HTMLDivElement>();\n const containerVisible = phase === 'visible' || (phase === 'entering' && Boolean(previousTurn));\n // Entering and exiting share the same off-screen resting style.\n const hiddenLayerClassName = 'scale-95 opacity-0 blur-xs';\n const visibleLayerClassName = 'scale-100 opacity-100 blur-none';\n const layerClassName =\n 'absolute inset-x-0 top-0 h-full origin-left transition-[opacity,filter,scale] duration-150 ease-in-out will-change-[opacity,filter,scale] motion-reduce:scale-100 motion-reduce:blur-none motion-reduce:transition-none';\n\n React.useLayoutEffect(() => {\n measurePreviewHeight();\n }, [currentTurn.key, phase, measurePreviewHeight]);\n\n return (\n <div\n id={id}\n data-testid=\"thread-rail-preview\"\n data-visible={containerVisible ? 'true' : undefined}\n className={cn(\n 'pointer-events-none absolute top-0 left-full z-30 ml-3 w-72 overflow-hidden rounded-xl text-left transition-[height,translate,opacity] duration-360 ease-out-custom will-change-[height,translate,opacity] motion-reduce:transition-none',\n overlaySurfaceStyle,\n containerVisible ? 'opacity-100' : 'opacity-0',\n )}\n style={{ ...previewHeightStyle, translate: `0 calc(${top}px - 50%)` }}\n >\n <div ref={previewSizerRef} data-testid=\"thread-rail-preview-sizer\" aria-hidden className=\"invisible\">\n <ThreadRailPreviewContent turn={currentTurn} className=\"p-3.5\" />\n </div>\n <div data-testid=\"thread-rail-preview-viewport\" className=\"absolute inset-0\">\n <div className=\"relative h-full\">\n {previousTurn && (\n <div\n key={previousTurn.key}\n data-testid=\"thread-rail-preview-previous\"\n aria-hidden\n className={cn(layerClassName, phase === 'entering' ? visibleLayerClassName : hiddenLayerClassName)}\n >\n <ThreadRailPreviewContent turn={previousTurn} className=\"p-3.5\" />\n </div>\n )}\n <div\n key={currentTurn.key}\n data-testid=\"thread-rail-preview-current\"\n className={cn(layerClassName, phase === 'visible' ? visibleLayerClassName : hiddenLayerClassName)}\n >\n <ThreadRailPreviewContent turn={currentTurn} className=\"p-3.5\" />\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction ThreadRailPreviewContent({\n turn,\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement> & { turn: ThreadRailTurn }) {\n return (\n <div className={className} {...props}>\n <div className=\"truncate text-subheading text-foreground\">{turn.prompt}</div>\n {turn.reply && (\n <Txt variant=\"caption\" tone=\"muted\" className=\"mt-1.5 line-clamp-3\">\n {turn.reply}\n </Txt>\n )}\n {(turn.files.length > 0 || turn.hiddenFileCount > 0) && (\n <div className=\"mt-3 flex flex-wrap items-center gap-2 border-t border-border/60 pt-2.5\">\n {turn.files.map(file => (\n <Txt\n as=\"span\"\n variant=\"caption\"\n tone=\"muted\"\n key={file}\n className=\"inline-flex max-w-44 items-center gap-1.5 truncate\"\n >\n <FileText className=\"size-3.5 shrink-0 opacity-70\" aria-hidden />\n {file}\n </Txt>\n ))}\n {turn.hiddenFileCount > 0 && (\n <Txt as=\"span\" variant=\"column\" tone=\"muted\">\n +{turn.hiddenFileCount}\n </Txt>\n )}\n </div>\n )}\n </div>\n );\n}\n","import type { MastraDBMessage } from '@mastra/core/agent/message-list';\nimport type { MastraDBMessageMetadata } from '@mastra/react';\n\nconst SUMMARY_MAX_LENGTH = 120;\nconst FILE_PREVIEW_LIMIT = 2;\n// Inlined, not imported: the value export sits behind a barrel this browser bundle must not pull.\nconst CLIENT_MESSAGE_ID_KEY = 'clientMessageId' satisfies keyof MastraDBMessageMetadata;\n\nexport interface ThreadRailTurn {\n key: string;\n messageId: string;\n prompt: string;\n reply?: string;\n files: string[];\n hiddenFileCount: number;\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nexport const getClientMessageKey = (message: MastraDBMessage): string => {\n const metadata = message.content.metadata;\n const clientMessageId = isRecord(metadata) ? metadata[CLIENT_MESSAGE_ID_KEY] : undefined;\n return typeof clientMessageId === 'string' && clientMessageId.length > 0 ? clientMessageId : message.id;\n};\n\nconst normalizeSummary = (value: string, fallback: string): string => {\n const normalized = value.replace(/\\s+/g, ' ').trim();\n if (normalized.length === 0) return fallback;\n if (normalized.length <= SUMMARY_MAX_LENGTH) return normalized;\n return `${normalized.slice(0, SUMMARY_MAX_LENGTH - 3).trimEnd()}...`;\n};\n\nconst getTextFromParts = (message: MastraDBMessage): string =>\n message.content.parts\n .flatMap(part => {\n if (!isRecord(part) || part.type !== 'text' || typeof part.text !== 'string') return [];\n return [part.text];\n })\n .join('\\n');\n\nconst getStringField = (part: Record<string, unknown>, keys: string[]): string | undefined => {\n for (const key of keys) {\n const value = part[key];\n if (typeof value === 'string' && value.trim().length > 0) return value;\n }\n return undefined;\n};\n\nconst getPathLabel = (value: string): string | undefined => {\n if (value.startsWith('data:')) return undefined;\n\n try {\n const url = new URL(value);\n const candidate = url.pathname.split('/').filter(Boolean).pop();\n return candidate || url.hostname || undefined;\n } catch {\n const candidate = value.split(/[?#]/)[0]?.split('/').filter(Boolean).pop();\n return candidate && !candidate.startsWith('data:') ? candidate : undefined;\n }\n};\n\nconst getFallbackFileLabel = (part: Record<string, unknown>): string => {\n const mediaType = getStringField(part, ['mimeType', 'mediaType']) ?? '';\n if (part.type === 'image' || mediaType.startsWith('image/')) return 'Image';\n if (mediaType === 'application/pdf') return 'PDF';\n if (mediaType.startsWith('video/')) return 'Video';\n if (mediaType.startsWith('audio/')) return 'Audio';\n return 'File';\n};\n\nconst getFileLabelFromPart = (part: MastraDBMessage['content']['parts'][number]): string | undefined => {\n if (!isRecord(part)) return undefined;\n\n const type = getStringField(part, ['type']);\n if (type !== 'file' && type !== 'image') return undefined;\n\n const explicitLabel = getStringField(part, ['filename', 'name']);\n if (explicitLabel) return explicitLabel;\n\n const source = getStringField(part, ['url', 'image', 'data']);\n const pathLabel = source ? getPathLabel(source) : undefined;\n return pathLabel ?? getFallbackFileLabel(part);\n};\n\nconst getFileLabels = (message: MastraDBMessage): string[] =>\n message.content.parts.map(getFileLabelFromPart).filter((label): label is string => Boolean(label));\n\nconst getSignalType = (message: MastraDBMessage): string | undefined => {\n const signal = message.content.metadata?.signal;\n const metadataType = isRecord(signal) ? signal.type : undefined;\n return typeof metadataType === 'string' ? metadataType : message.type;\n};\n\n/** What opens a turn: a rail stop, and the row the scroller parks at the top. */\nexport const startsUserTurn = (message: MastraDBMessage): boolean => {\n if (message.role === 'user') return true;\n if (message.role !== 'signal') return false;\n\n const signalType = getSignalType(message);\n return signalType === 'user' || signalType === 'user-message';\n};\n\nconst getNextAssistantReply = (messages: MastraDBMessage[], startIndex: number): string | undefined => {\n for (let index = startIndex + 1; index < messages.length; index += 1) {\n const message = messages[index];\n if (!message) continue;\n if (startsUserTurn(message)) return undefined;\n if (message.role !== 'assistant') continue;\n\n const reply = normalizeSummary(getTextFromParts(message), '');\n if (reply) return reply;\n }\n\n return undefined;\n};\n\nexport const buildThreadRailTurns = (messages: MastraDBMessage[]): ThreadRailTurn[] =>\n messages.flatMap((message, index) => {\n if (!startsUserTurn(message)) return [];\n\n const files = getFileLabels(message);\n const visibleFiles = files.slice(0, FILE_PREVIEW_LIMIT);\n\n return [\n {\n key: getClientMessageKey(message),\n messageId: message.id,\n prompt: normalizeSummary(getTextFromParts(message), files.length > 0 ? 'Attached file' : 'User message'),\n reply: getNextAssistantReply(messages, index),\n files: visibleFiles,\n hiddenFileCount: files.length - visibleFiles.length,\n },\n ];\n });\n","/** A user's turn and everything the run produced under it. */\nexport interface TurnGroup<T> {\n key: string;\n entries: T[];\n /** Opened by a user message, so it reserves room and anchors the scroll. */\n opensTurn: boolean;\n}\n\nexport interface TurnRules<T> {\n key: (entry: T) => string;\n opensTurn: (entry: T) => boolean;\n /** A marker that belongs above the turn it introduces but arrives after the previous one, so it moves down. */\n introduces?: (entry: T) => boolean;\n}\n\nconst introducesNothing = () => false;\n\n/**\n * Cuts a timeline where the reader's attention moves: a user message starts a turn,\n * and everything the run answers with belongs to it. Entries before the first opener\n * form a turn of their own that opens nothing.\n */\nexport function groupTurns<T>(entries: T[], { key, opensTurn, introduces = introducesNothing }: TurnRules<T>) {\n const groups: TurnGroup<T>[] = [];\n\n for (const entry of entries) {\n const opens = opensTurn(entry);\n const previous = groups.at(-1);\n if (!opens && previous) {\n previous.entries.push(entry);\n continue;\n }\n const last = previous?.entries.at(-1);\n const introduction = previous && last !== undefined && introduces(last) ? previous.entries.splice(-1) : [];\n if (previous?.entries.length === 0) groups.pop();\n groups.push({ key: key(entry), entries: [...introduction, entry], opensTurn: opens });\n }\n\n return groups;\n}\n"],"names":["React","useOptionalMessageScroller","useOptionalMessageScrollerVisibility","jsxs","cn","jsx","ScrollArea","ScrollAreaViewport","focusRing","useMeasuredAutoHeight","overlaySurfaceStyle","Txt","FileText"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBA,MAAM,8BAAA,GAAiC,GAAA;AACvC,MAAM,2BAA2B,8BAAA,GAAiC,EAAA;AAElE,MAAM,qBAAA,GAAgD;AAAA,EACpD,WAAA,EAAa,MAAA;AAAA,EACb,YAAA,EAAc,MAAA;AAAA,EACd,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,QAAA;AAAA,EACP,GAAA,EAAK,CAAA;AAAA,EACL,aAAA,EAAe;AACjB,CAAA;AAaO,SAAS,UAAA,CAAW;AAAA,EACzB,KAAA;AAAA,EACA,eAAA;AAAA,EACA,iBAAA;AAAA,EACA,KAAA,GAAQ,uBAAA;AAAA,EACR,SAAA;AAAA,EACA,SAAA,GAAY,sBAAA;AAAA,EACZ,mBAAA;AAAA,EACA;AACF,CAAA,EAAoB;AAClB,EAAA,MAAM,OAAA,GAAUA,gBAAA,CAAM,MAAA,CAAoB,IAAI,CAAA;AAC9C,EAAA,MAAM,SAAA,GAAYA,iBAAM,KAAA,EAAM;AAC9B,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,gBAAA,CAAM,SAAiC,qBAAqB,CAAA;AACpG,EAAA,MAAM,kBAAkBC,+CAAA,EAA2B;AACnD,EAAA,MAAM,qBAAqBC,yDAAA,EAAqC;AAEhE,EAAA,MAAM,iBAAA,GAAoB,KAAA,CAAM,EAAA,CAAG,EAAE,CAAA,EAAG,SAAA;AACxC,EAAA,MAAM,eAAA,GAAkB,eAAA,IAAmB,kBAAA,EAAoB,eAAA,IAAmB,iBAAA;AAClF,EAAA,MAAM,yBAAA,GACJ,qBAAqB,kBAAA,EAAoB,iBAAA,KAAsB,kBAAkB,CAAC,eAAe,IAAI,EAAC,CAAA;AACxG,EAAA,MAAM,mBAAA,GAAsB,IAAI,GAAA,CAAI,yBAAyB,CAAA;AAC7D,EAAA,MAAM,kBAAA,GAAqB,YAAA,CAAa,KAAA,KAAU,UAAA,IAAc,aAAa,KAAA,KAAU,SAAA;AACvF,EAAA,MAAM,YAAA,GAAe,kBAAA,GAAqB,YAAA,CAAa,KAAA,GAAQ,IAAA;AAC/D,EAAA,MAAM,aAAaF,gBAAA,CAAM,WAAA;AAAA,IACvB,CAAC,IAAA,KAAyB;AACxB,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,QAAA,CAAS,IAAI,CAAA;AACb,QAAA;AAAA,MACF;AAEA,MAAA,eAAA,EAAiB,eAAA,CAAgB,KAAK,SAAA,EAAW,EAAE,UAAU,QAAA,EAAU,KAAA,EAAO,SAAS,CAAA;AAAA,IACzF,CAAA;AAAA,IACA,CAAC,iBAAiB,QAAQ;AAAA,GAC5B;AAEA,EAAA,MAAM,WAAA,GAAc,CAAC,KAAA,EAAe,OAAA,KAAyB;AAC3D,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,OAAA,EAAS,qBAAA,GAAwB,GAAA,IAAO,CAAA;AAChE,IAAA,MAAM,QAAA,GAAW,QAAQ,qBAAA,EAAsB;AAC/C,IAAA,MAAM,QAAA,GAAW,MAAM,KAAK,CAAA;AAC5B,IAAA,IAAI,CAAC,QAAA,EAAU;AAEf,IAAA,eAAA,CAAgB,CAAA,OAAA,KAAW;AACzB,MAAA,MAAM,OAAA,GAAU,QAAA,CAAS,GAAA,GAAM,QAAA,CAAS,SAAS,CAAA,GAAI,OAAA;AACrD,MAAA,IAAI,OAAA,CAAQ,UAAU,KAAA,IAAS,OAAA,CAAQ,UAAU,QAAA,IAAY,OAAA,CAAQ,UAAU,SAAA,EAAW;AACxF,QAAA,OAAO,EAAE,GAAG,OAAA,EAAS,GAAA,EAAK,OAAA,EAAQ;AAAA,MACpC;AAEA,MAAA,MAAM,YAAA,GACJ,OAAA,CAAQ,WAAA,IAAe,OAAA,CAAQ,WAAA,CAAY,GAAA,KAAQ,QAAA,CAAS,GAAA,IAAO,OAAA,CAAQ,KAAA,KAAU,QAAA,GACjF,OAAA,CAAQ,WAAA,GACR,MAAA;AAEN,MAAA,OAAO;AAAA,QACL,WAAA,EAAa,QAAA;AAAA,QACb,YAAA;AAAA,QACA,KAAA;AAAA,QACA,KAAA,EAAO,UAAA;AAAA,QACP,GAAA,EAAK,OAAA;AAAA,QACL,aAAA,EAAe,QAAQ,aAAA,GAAgB;AAAA,OACzC;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,eAAA,CAAgB,CAAA,OAAA,KAAW;AACzB,MAAA,IAAI,CAAC,QAAQ,WAAA,IAAe,OAAA,CAAQ,UAAU,QAAA,IAAY,OAAA,CAAQ,UAAU,SAAA,EAAW;AACrF,QAAA,OAAO,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,IAAA,EAAK;AAAA,MACnC;AAEA,MAAA,OAAO;AAAA,QACL,GAAG,OAAA;AAAA,QACH,KAAA,EAAO,IAAA;AAAA,QACP,YAAA,EAAc,MAAA;AAAA,QACd,KAAA,EAAO,SAAA;AAAA,QACP,aAAA,EAAe,QAAQ,aAAA,GAAgB;AAAA,OACzC;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA;AAEA,EAAAA,gBAAA,CAAM,UAAU,MAAM;AACpB,IAAA,IAAI,YAAA,CAAa,UAAU,UAAA,EAAY;AAEvC,IAAA,MAAM,YAAA,GAAe,MAAA,CAAO,qBAAA,IAAyB,MAAA,CAAO,UAAA;AAC5D,IAAA,MAAM,WAAA,GAAc,MAAA,CAAO,oBAAA,IAAwB,MAAA,CAAO,YAAA;AAC1D,IAAA,IAAI,WAAA;AACJ,IAAA,MAAM,UAAA,GAAa,aAAa,MAAM;AACpC,MAAA,WAAA,GAAc,aAAa,MAAM;AAC/B,QAAA,eAAA;AAAA,UAAgB,CAAA,OAAA,KACd,OAAA,CAAQ,aAAA,KAAkB,YAAA,CAAa,aAAA,IAAiB,OAAA,CAAQ,KAAA,KAAU,UAAA,GACtE,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,WAAU,GAC/B;AAAA,SACN;AAAA,MACF,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AAED,IAAA,OAAO,MAAM;AACX,MAAA,WAAA,CAAY,UAAU,CAAA;AACtB,MAAA,IAAI,WAAA,KAAgB,MAAA,EAAW,WAAA,CAAY,WAAW,CAAA;AAAA,IACxD,CAAA;AAAA,EACF,GAAG,CAAC,YAAA,CAAa,KAAA,EAAO,YAAA,CAAa,aAAa,CAAC,CAAA;AAEnD,EAAAA,gBAAA,CAAM,UAAU,MAAM;AACpB,IAAA,IAAI,YAAA,CAAa,KAAA,KAAU,SAAA,IAAa,CAAC,aAAa,YAAA,EAAc;AAEpE,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,UAAA,CAAW,MAAM;AACtC,MAAA,eAAA;AAAA,QAAgB,CAAA,OAAA,KACd,OAAA,CAAQ,aAAA,KAAkB,YAAA,CAAa,aAAA,GAAgB,EAAE,GAAG,OAAA,EAAS,YAAA,EAAc,MAAA,EAAU,GAAI;AAAA,OACnG;AAAA,IACF,GAAG,wBAAwB,CAAA;AAE3B,IAAA,OAAO,MAAM,MAAA,CAAO,YAAA,CAAa,OAAO,CAAA;AAAA,EAC1C,CAAA,EAAG,CAAC,YAAA,CAAa,KAAA,EAAO,aAAa,YAAA,EAAc,YAAA,CAAa,aAAa,CAAC,CAAA;AAE9E,EAAAA,gBAAA,CAAM,UAAU,MAAM;AACpB,IAAA,IAAI,YAAA,CAAa,UAAU,SAAA,EAAW;AAEtC,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,UAAA,CAAW,MAAM;AACtC,MAAA,eAAA;AAAA,QAAgB,CAAA,OAAA,KACd,OAAA,CAAQ,aAAA,KAAkB,YAAA,CAAa,gBAAgB,qBAAA,GAAwB;AAAA,OACjF;AAAA,IACF,GAAG,wBAAwB,CAAA;AAE3B,IAAA,OAAO,MAAM,MAAA,CAAO,YAAA,CAAa,OAAO,CAAA;AAAA,EAC1C,GAAG,CAAC,YAAA,CAAa,KAAA,EAAO,YAAA,CAAa,aAAa,CAAC,CAAA;AAEnD,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAE/B,EAAA,uBACEG,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,OAAA;AAAA,MACL,YAAA,EAAY,KAAA;AAAA,MACZ,aAAA,EAAY,aAAA;AAAA,MACZ,SAAA,EAAWC,WAAA,CAAG,mBAAA,EAAqB,SAAS,CAAA;AAAA,MAC5C,YAAA,EAAc,WAAA;AAAA,MACd,QAAQ,CAAA,KAAA,KAAS;AACf,QAAA,MAAM,YAAY,KAAA,CAAM,aAAA;AACxB,QAAA,IAAI,EAAE,qBAAqB,IAAA,CAAA,IAAS,CAAC,MAAM,aAAA,CAAc,QAAA,CAAS,SAAS,CAAA,EAAG,WAAA,EAAY;AAAA,MAC5F,CAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAC,cAAA;AAAA,UAACC,qBAAA;AAAA,UAAA;AAAA,YACC,aAAA,EAAY,yBAAA;AAAA,YACZ,SAAA;AAAA,YACA,SAAA,EAAWF,WAAA,CAAG,KAAA,EAAO,mBAAmB,CAAA;AAAA,YAExC,QAAA,kBAAAC,cAAA,CAACE,6BAAA,EAAA,EAAmB,SAAA,EAAU,MAAA,EAC5B,QAAA,kBAAAF,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0CAAA,EACZ,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,KAAU;AAC1B,cAAA,MAAM,WAAW,YAAA,KAAiB,IAAA,GAAO,OAAO,IAAA,CAAK,GAAA,CAAI,QAAQ,YAAY,CAAA;AAC7E,cAAA,MAAM,MAAA,GAAS,KAAK,SAAA,KAAc,eAAA;AAClC,cAAA,MAAM,MAAA,GAAS,mBAAA,CAAoB,GAAA,CAAI,IAAA,CAAK,SAAS,CAAA;AACrD,cAAA,MAAM,gBAAgB,YAAA,KAAiB,KAAA;AAEvC,cAAA,uBACEA,cAAA;AAAA,gBAAC,cAAA;AAAA,gBAAA;AAAA,kBAEC,IAAA;AAAA,kBACA,KAAA;AAAA,kBACA,QAAA;AAAA,kBACA,MAAA;AAAA,kBACA,MAAA;AAAA,kBACA,SAAA,EAAW,gBAAgB,SAAA,GAAY,MAAA;AAAA,kBACvC,aAAA,EAAe,WAAA;AAAA,kBACf,QAAA,EAAU;AAAA,iBAAA;AAAA,gBARL,IAAA,CAAK;AAAA,eASZ;AAAA,YAEJ,CAAC,GACH,CAAA,EACF;AAAA;AAAA,SACF;AAAA,QAEC,aAAa,WAAA,oBACZA,cAAA;AAAA,UAAC,iBAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAI,SAAA;AAAA,YACJ,aAAa,YAAA,CAAa,WAAA;AAAA,YAC1B,cAAc,YAAA,CAAa,YAAA;AAAA,YAC3B,OAAO,YAAA,CAAa,KAAA;AAAA,YACpB,KAAK,YAAA,CAAa;AAAA;AAAA;AACpB;AAAA;AAAA,GAEJ;AAEJ;AAcA,MAAM,gBAAA,GAAmB,CAAC,QAAA,KAAoC;AAC5D,EAAA,IAAI,QAAA,KAAa,GAAG,OAAO,KAAA;AAC3B,EAAA,IAAI,QAAA,KAAa,GAAG,OAAO,KAAA;AAC3B,EAAA,OAAO,KAAA;AACT,CAAA;AAGA,MAAM,kBAAkB,CAAC;AAAA,EACvB,QAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,KAA2E;AACzE,EAAA,IAAI,QAAA,KAAa,CAAA,IAAK,MAAA,EAAQ,OAAO,eAAA;AACrC,EAAA,IAAI,QAAQ,OAAO,kBAAA;AACnB,EAAA,IAAI,QAAA,KAAa,GAAG,OAAO,kBAAA;AAC3B,EAAA,OAAO,kBAAA;AACT,CAAA;AAEA,SAAS,cAAA,CAAe;AAAA,EACtB,IAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA,EAAwB;AACtB,EAAA,MAAM,IAAA,GAAO,iBAAiB,QAAQ,CAAA;AACtC,EAAA,MAAM,OAAO,eAAA,CAAgB,EAAE,QAAA,EAAU,MAAA,EAAQ,QAAQ,CAAA;AAEzD,EAAA,uBACEA,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,cAAA,EAAc,SAAS,MAAA,GAAS,MAAA;AAAA,MAChC,aAAA,EAAa,SAAS,MAAA,GAAS,MAAA;AAAA,MAC/B,SAAA,EAAU,mDAAA;AAAA,MAEV,QAAA,kBAAAA,cAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,YAAA,EAAY,CAAA,QAAA,EAAW,IAAA,CAAK,MAAM,CAAA,CAAA;AAAA,UAClC,cAAA,EAAc,SAAS,UAAA,GAAa,MAAA;AAAA,UACpC,kBAAA,EAAkB,SAAA;AAAA,UAClB,cAAA,EAAc,SAAS,MAAA,GAAS,MAAA;AAAA,UAChC,aAAA,EAAa,SAAS,MAAA,GAAS,MAAA;AAAA,UAC/B,OAAA,EAAS,MAAM,QAAA,CAAS,IAAI,CAAA;AAAA,UAC5B,YAAA,EAAc,CAAA,KAAA,KAAS,aAAA,CAAc,KAAA,EAAO,MAAM,aAAa,CAAA;AAAA,UAC/D,OAAA,EAAS,CAAA,KAAA,KAAS,aAAA,CAAc,KAAA,EAAO,MAAM,aAAa,CAAA;AAAA,UAC1D,SAAA,EAAWD,WAAA;AAAA,YACT,8GAAA;AAAA,YACA,wEAAA;AAAA,YACAI,gCAAA;AAAA,YACA,IAAA;AAAA,YACA;AAAA;AACF;AAAA;AACF;AAAA,GACF;AAEJ;AAEA,SAAS,iBAAA,CAAkB;AAAA,EACzB,EAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAMG;AACD,EAAA,MAAM;AAAA,IACJ,GAAA,EAAK,eAAA;AAAA,IACL,WAAA,EAAa,kBAAA;AAAA,IACb,OAAA,EAAS;AAAA,MACPC,iDAAA,EAAsC;AAC1C,EAAA,MAAM,mBAAmB,KAAA,KAAU,SAAA,IAAc,KAAA,KAAU,UAAA,IAAc,QAAQ,YAAY,CAAA;AAE7F,EAAA,MAAM,oBAAA,GAAuB,4BAAA;AAC7B,EAAA,MAAM,qBAAA,GAAwB,iCAAA;AAC9B,EAAA,MAAM,cAAA,GACJ,yNAAA;AAEF,EAAAT,gBAAA,CAAM,gBAAgB,MAAM;AAC1B,IAAA,oBAAA,EAAqB;AAAA,EACvB,GAAG,CAAC,WAAA,CAAY,GAAA,EAAK,KAAA,EAAO,oBAAoB,CAAC,CAAA;AAEjD,EAAA,uBACEG,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,EAAA;AAAA,MACA,aAAA,EAAY,qBAAA;AAAA,MACZ,cAAA,EAAc,mBAAmB,MAAA,GAAS,MAAA;AAAA,MAC1C,SAAA,EAAWC,WAAA;AAAA,QACT,0OAAA;AAAA,QACAM,4CAAA;AAAA,QACA,mBAAmB,aAAA,GAAgB;AAAA,OACrC;AAAA,MACA,OAAO,EAAE,GAAG,oBAAoB,SAAA,EAAW,CAAA,OAAA,EAAU,GAAG,CAAA,SAAA,CAAA,EAAY;AAAA,MAEpE,QAAA,EAAA;AAAA,wBAAAL,cAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,eAAA,EAAiB,aAAA,EAAY,6BAA4B,aAAA,EAAW,IAAA,EAAC,SAAA,EAAU,WAAA,EACvF,yCAAC,wBAAA,EAAA,EAAyB,IAAA,EAAM,WAAA,EAAa,SAAA,EAAU,SAAQ,CAAA,EACjE,CAAA;AAAA,wBACAA,cAAA,CAAC,SAAI,aAAA,EAAY,8BAAA,EAA+B,WAAU,kBAAA,EACxD,QAAA,kBAAAF,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EACZ,QAAA,EAAA;AAAA,UAAA,YAAA,oBACCE,cAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cAEC,aAAA,EAAY,8BAAA;AAAA,cACZ,aAAA,EAAW,IAAA;AAAA,cACX,WAAWD,WAAA,CAAG,cAAA,EAAgB,KAAA,KAAU,UAAA,GAAa,wBAAwB,oBAAoB,CAAA;AAAA,cAEjG,QAAA,kBAAAC,cAAA,CAAC,wBAAA,EAAA,EAAyB,IAAA,EAAM,YAAA,EAAc,WAAU,OAAA,EAAQ;AAAA,aAAA;AAAA,YAL3D,YAAA,CAAa;AAAA,WAMpB;AAAA,0BAEFA,cAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cAEC,aAAA,EAAY,6BAAA;AAAA,cACZ,WAAWD,WAAA,CAAG,cAAA,EAAgB,KAAA,KAAU,SAAA,GAAY,wBAAwB,oBAAoB,CAAA;AAAA,cAEhG,QAAA,kBAAAC,cAAA,CAAC,wBAAA,EAAA,EAAyB,IAAA,EAAM,WAAA,EAAa,WAAU,OAAA,EAAQ;AAAA,aAAA;AAAA,YAJ1D,WAAA,CAAY;AAAA;AAKnB,SAAA,EACF,CAAA,EACF;AAAA;AAAA;AAAA,GACF;AAEJ;AAEA,SAAS,wBAAA,CAAyB;AAAA,EAChC,IAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAoE;AAClE,EAAA,uBACEF,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAuB,GAAG,KAAA,EAC7B,QAAA,EAAA;AAAA,oBAAAE,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0CAAA,EAA4C,QAAA,EAAA,IAAA,CAAK,MAAA,EAAO,CAAA;AAAA,IACtE,IAAA,CAAK,KAAA,oBACJA,cAAA,CAACM,OAAA,EAAA,EAAI,OAAA,EAAQ,SAAA,EAAU,IAAA,EAAK,OAAA,EAAQ,SAAA,EAAU,qBAAA,EAC3C,QAAA,EAAA,IAAA,CAAK,KAAA,EACR,CAAA;AAAA,IAAA,CAEA,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,CAAA,IAAK,IAAA,CAAK,kBAAkB,CAAA,qBAChDR,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yEAAA,EACZ,QAAA,EAAA;AAAA,MAAA,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,IAAA,qBACdA,eAAA;AAAA,QAACQ,OAAA;AAAA,QAAA;AAAA,UACC,EAAA,EAAG,MAAA;AAAA,UACH,OAAA,EAAQ,SAAA;AAAA,UACR,IAAA,EAAK,OAAA;AAAA,UAEL,SAAA,EAAU,oDAAA;AAAA,UAEV,QAAA,EAAA;AAAA,4BAAAN,cAAA,CAACO,oBAAA,EAAA,EAAS,SAAA,EAAU,8BAAA,EAA+B,aAAA,EAAW,IAAA,EAAC,CAAA;AAAA,YAC9D;AAAA;AAAA,SAAA;AAAA,QAJI;AAAA,OAMR,CAAA;AAAA,MACA,IAAA,CAAK,eAAA,GAAkB,CAAA,oBACtBT,eAAA,CAACQ,OAAA,EAAA,EAAI,IAAG,MAAA,EAAO,OAAA,EAAQ,QAAA,EAAS,IAAA,EAAK,OAAA,EAAQ,QAAA,EAAA;AAAA,QAAA,GAAA;AAAA,QACzC,IAAA,CAAK;AAAA,OAAA,EACT;AAAA,KAAA,EAEJ;AAAA,GAAA,EAEJ,CAAA;AAEJ;;ACnZA,MAAM,kBAAA,GAAqB,GAAA;AAC3B,MAAM,kBAAA,GAAqB,CAAA;AAE3B,MAAM,qBAAA,GAAwB,iBAAA;AAW9B,MAAM,QAAA,GAAW,CAAC,KAAA,KAChB,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,IAAQ,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA;AAE9D,MAAM,mBAAA,GAAsB,CAAC,OAAA,KAAqC;AACvE,EAAA,MAAM,QAAA,GAAW,QAAQ,OAAA,CAAQ,QAAA;AACjC,EAAA,MAAM,kBAAkB,QAAA,CAAS,QAAQ,CAAA,GAAI,QAAA,CAAS,qBAAqB,CAAA,GAAI,MAAA;AAC/E,EAAA,OAAO,OAAO,eAAA,KAAoB,QAAA,IAAY,gBAAgB,MAAA,GAAS,CAAA,GAAI,kBAAkB,OAAA,CAAQ,EAAA;AACvG;AAEA,MAAM,gBAAA,GAAmB,CAAC,KAAA,EAAe,QAAA,KAA6B;AACpE,EAAA,MAAM,aAAa,KAAA,CAAM,OAAA,CAAQ,MAAA,EAAQ,GAAG,EAAE,IAAA,EAAK;AACnD,EAAA,IAAI,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG,OAAO,QAAA;AACpC,EAAA,IAAI,UAAA,CAAW,MAAA,IAAU,kBAAA,EAAoB,OAAO,UAAA;AACpD,EAAA,OAAO,CAAA,EAAG,WAAW,KAAA,CAAM,CAAA,EAAG,qBAAqB,CAAC,CAAA,CAAE,SAAS,CAAA,GAAA,CAAA;AACjE,CAAA;AAEA,MAAM,mBAAmB,CAAC,OAAA,KACxB,QAAQ,OAAA,CAAQ,KAAA,CACb,QAAQ,CAAA,IAAA,KAAQ;AACf,EAAA,IAAI,CAAC,QAAA,CAAS,IAAI,CAAA,IAAK,IAAA,CAAK,IAAA,KAAS,MAAA,IAAU,OAAO,IAAA,CAAK,IAAA,KAAS,QAAA,EAAU,OAAO,EAAC;AACtF,EAAA,OAAO,CAAC,KAAK,IAAI,CAAA;AACnB,CAAC,CAAA,CACA,KAAK,IAAI,CAAA;AAEd,MAAM,cAAA,GAAiB,CAAC,IAAA,EAA+B,IAAA,KAAuC;AAC5F,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,MAAM,KAAA,GAAQ,KAAK,GAAG,CAAA;AACtB,IAAA,IAAI,OAAO,UAAU,QAAA,IAAY,KAAA,CAAM,MAAK,CAAE,MAAA,GAAS,GAAG,OAAO,KAAA;AAAA,EACnE;AACA,EAAA,OAAO,MAAA;AACT,CAAA;AAEA,MAAM,YAAA,GAAe,CAAC,KAAA,KAAsC;AAC1D,EAAA,IAAI,KAAA,CAAM,UAAA,CAAW,OAAO,CAAA,EAAG,OAAO,MAAA;AAEtC,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,KAAK,CAAA;AACzB,IAAA,MAAM,SAAA,GAAY,IAAI,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,GAAA,EAAI;AAC9D,IAAA,OAAO,SAAA,IAAa,IAAI,QAAA,IAAY,KAAA,CAAA;AAAA,EACtC,CAAA,CAAA,MAAQ;AACN,IAAA,MAAM,SAAA,GAAY,KAAA,CAAM,KAAA,CAAM,MAAM,CAAA,CAAE,CAAC,CAAA,EAAG,KAAA,CAAM,GAAG,CAAA,CAAE,MAAA,CAAO,OAAO,EAAE,GAAA,EAAI;AACzE,IAAA,OAAO,aAAa,CAAC,SAAA,CAAU,UAAA,CAAW,OAAO,IAAI,SAAA,GAAY,MAAA;AAAA,EACnE;AACF,CAAA;AAEA,MAAM,oBAAA,GAAuB,CAAC,IAAA,KAA0C;AACtE,EAAA,MAAM,YAAY,cAAA,CAAe,IAAA,EAAM,CAAC,UAAA,EAAY,WAAW,CAAC,CAAA,IAAK,EAAA;AACrE,EAAA,IAAI,KAAK,IAAA,KAAS,OAAA,IAAW,UAAU,UAAA,CAAW,QAAQ,GAAG,OAAO,OAAA;AACpE,EAAA,IAAI,SAAA,KAAc,mBAAmB,OAAO,KAAA;AAC5C,EAAA,IAAI,SAAA,CAAU,UAAA,CAAW,QAAQ,CAAA,EAAG,OAAO,OAAA;AAC3C,EAAA,IAAI,SAAA,CAAU,UAAA,CAAW,QAAQ,CAAA,EAAG,OAAO,OAAA;AAC3C,EAAA,OAAO,MAAA;AACT,CAAA;AAEA,MAAM,oBAAA,GAAuB,CAAC,IAAA,KAA0E;AACtG,EAAA,IAAI,CAAC,QAAA,CAAS,IAAI,CAAA,EAAG,OAAO,MAAA;AAE5B,EAAA,MAAM,IAAA,GAAO,cAAA,CAAe,IAAA,EAAM,CAAC,MAAM,CAAC,CAAA;AAC1C,EAAA,IAAI,IAAA,KAAS,MAAA,IAAU,IAAA,KAAS,OAAA,EAAS,OAAO,MAAA;AAEhD,EAAA,MAAM,gBAAgB,cAAA,CAAe,IAAA,EAAM,CAAC,UAAA,EAAY,MAAM,CAAC,CAAA;AAC/D,EAAA,IAAI,eAAe,OAAO,aAAA;AAE1B,EAAA,MAAM,SAAS,cAAA,CAAe,IAAA,EAAM,CAAC,KAAA,EAAO,OAAA,EAAS,MAAM,CAAC,CAAA;AAC5D,EAAA,MAAM,SAAA,GAAY,MAAA,GAAS,YAAA,CAAa,MAAM,CAAA,GAAI,MAAA;AAClD,EAAA,OAAO,SAAA,IAAa,qBAAqB,IAAI,CAAA;AAC/C,CAAA;AAEA,MAAM,aAAA,GAAgB,CAAC,OAAA,KACrB,OAAA,CAAQ,QAAQ,KAAA,CAAM,GAAA,CAAI,oBAAoB,CAAA,CAAE,MAAA,CAAO,CAAC,KAAA,KAA2B,OAAA,CAAQ,KAAK,CAAC,CAAA;AAEnG,MAAM,aAAA,GAAgB,CAAC,OAAA,KAAiD;AACtE,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,OAAA,CAAQ,QAAA,EAAU,MAAA;AACzC,EAAA,MAAM,YAAA,GAAe,QAAA,CAAS,MAAM,CAAA,GAAI,OAAO,IAAA,GAAO,MAAA;AACtD,EAAA,OAAO,OAAO,YAAA,KAAiB,QAAA,GAAW,YAAA,GAAe,OAAA,CAAQ,IAAA;AACnE,CAAA;AAGO,MAAM,cAAA,GAAiB,CAAC,OAAA,KAAsC;AACnE,EAAA,IAAI,OAAA,CAAQ,IAAA,KAAS,MAAA,EAAQ,OAAO,IAAA;AACpC,EAAA,IAAI,OAAA,CAAQ,IAAA,KAAS,QAAA,EAAU,OAAO,KAAA;AAEtC,EAAA,MAAM,UAAA,GAAa,cAAc,OAAO,CAAA;AACxC,EAAA,OAAO,UAAA,KAAe,UAAU,UAAA,KAAe,cAAA;AACjD;AAEA,MAAM,qBAAA,GAAwB,CAAC,QAAA,EAA6B,UAAA,KAA2C;AACrG,EAAA,KAAA,IAAS,QAAQ,UAAA,GAAa,CAAA,EAAG,QAAQ,QAAA,CAAS,MAAA,EAAQ,SAAS,CAAA,EAAG;AACpE,IAAA,MAAM,OAAA,GAAU,SAAS,KAAK,CAAA;AAC9B,IAAA,IAAI,CAAC,OAAA,EAAS;AACd,IAAA,IAAI,cAAA,CAAe,OAAO,CAAA,EAAG,OAAO,MAAA;AACpC,IAAA,IAAI,OAAA,CAAQ,SAAS,WAAA,EAAa;AAElC,IAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,gBAAA,CAAiB,OAAO,GAAG,EAAE,CAAA;AAC5D,IAAA,IAAI,OAAO,OAAO,KAAA;AAAA,EACpB;AAEA,EAAA,OAAO,MAAA;AACT,CAAA;AAEO,MAAM,uBAAuB,CAAC,QAAA,KACnC,SAAS,OAAA,CAAQ,CAAC,SAAS,KAAA,KAAU;AACnC,EAAA,IAAI,CAAC,cAAA,CAAe,OAAO,CAAA,SAAU,EAAC;AAEtC,EAAA,MAAM,KAAA,GAAQ,cAAc,OAAO,CAAA;AACnC,EAAA,MAAM,YAAA,GAAe,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,kBAAkB,CAAA;AAEtD,EAAA,OAAO;AAAA,IACL;AAAA,MACE,GAAA,EAAK,oBAAoB,OAAO,CAAA;AAAA,MAChC,WAAW,OAAA,CAAQ,EAAA;AAAA,MACnB,MAAA,EAAQ,iBAAiB,gBAAA,CAAiB,OAAO,GAAG,KAAA,CAAM,MAAA,GAAS,CAAA,GAAI,eAAA,GAAkB,cAAc,CAAA;AAAA,MACvG,KAAA,EAAO,qBAAA,CAAsB,QAAA,EAAU,KAAK,CAAA;AAAA,MAC5C,KAAA,EAAO,YAAA;AAAA,MACP,eAAA,EAAiB,KAAA,CAAM,MAAA,GAAS,YAAA,CAAa;AAAA;AAC/C,GACF;AACF,CAAC;;ACvHH,MAAM,oBAAoB,MAAM,KAAA;AAOzB,SAAS,WAAc,OAAA,EAAc,EAAE,KAAK,SAAA,EAAW,UAAA,GAAa,mBAAkB,EAAiB;AAC5G,EAAA,MAAM,SAAyB,EAAC;AAEhC,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,MAAM,KAAA,GAAQ,UAAU,KAAK,CAAA;AAC7B,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,EAAA,CAAG,EAAE,CAAA;AAC7B,IAAA,IAAI,CAAC,SAAS,QAAA,EAAU;AACtB,MAAA,QAAA,CAAS,OAAA,CAAQ,KAAK,KAAK,CAAA;AAC3B,MAAA;AAAA,IACF;AACA,IAAA,MAAM,IAAA,GAAO,QAAA,EAAU,OAAA,CAAQ,EAAA,CAAG,EAAE,CAAA;AACpC,IAAA,MAAM,YAAA,GAAe,QAAA,IAAY,IAAA,KAAS,MAAA,IAAa,UAAA,CAAW,IAAI,CAAA,GAAI,QAAA,CAAS,OAAA,CAAQ,MAAA,CAAO,EAAE,CAAA,GAAI,EAAC;AACzG,IAAA,IAAI,QAAA,EAAU,OAAA,CAAQ,MAAA,KAAW,CAAA,SAAU,GAAA,EAAI;AAC/C,IAAA,MAAA,CAAO,IAAA,CAAK,EAAE,GAAA,EAAK,GAAA,CAAI,KAAK,CAAA,EAAG,OAAA,EAAS,CAAC,GAAG,YAAA,EAAc,KAAK,CAAA,EAAG,SAAA,EAAW,OAAO,CAAA;AAAA,EACtF;AAEA,EAAA,OAAO,MAAA;AACT;;;;;;;;"}
|
|
@@ -2,9 +2,10 @@ import { jsxs, jsx } from 'react/jsx-runtime';
|
|
|
2
2
|
import { FileText } from 'lucide-react';
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import { c as useOptionalMessageScroller, e as useOptionalMessageScrollerVisibility } from '../message-scroller-hooks-BEeE1WE6.js';
|
|
5
|
-
import { S as ScrollArea, a as ScrollAreaViewport } from '../scroll-area-
|
|
5
|
+
import { S as ScrollArea, a as ScrollAreaViewport } from '../scroll-area-Ds-fJn5M.js';
|
|
6
6
|
import { T as Txt } from '../Txt-BP1SRHmL.js';
|
|
7
7
|
import { overlaySurfaceStyle } from '../primitives/raised-surface.es.js';
|
|
8
|
+
import { focusRing } from '../primitives/transitions.es.js';
|
|
8
9
|
import { useMeasuredAutoHeight } from '../hooks/use-measured-auto-height.es.js';
|
|
9
10
|
import { c as cn } from '../cn-65Adrsfj.js';
|
|
10
11
|
|
|
@@ -223,7 +224,7 @@ function ThreadRailItem({
|
|
|
223
224
|
className: cn(
|
|
224
225
|
"relative block h-px cursor-pointer rounded-full transition-[width,background-color] duration-normal ease-out",
|
|
225
226
|
"before:absolute before:inset-x-0 before:-inset-y-1 before:content-['']",
|
|
226
|
-
|
|
227
|
+
focusRing,
|
|
227
228
|
size,
|
|
228
229
|
tone
|
|
229
230
|
)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThreadRail.es.js","sources":["../../src/ds/components/ThreadRail/thread-rail.tsx","../../src/ds/components/ThreadRail/thread-rail-turns.ts","../../src/ds/components/ThreadRail/turn-groups.ts"],"sourcesContent":["import { FileText } from 'lucide-react';\nimport * as React from 'react';\n\nimport type { ThreadRailTurn } from './thread-rail-turns';\n\nimport { useOptionalMessageScroller, useOptionalMessageScrollerVisibility } from '@/ds/components/MessageScroller';\nimport { ScrollArea, ScrollAreaViewport } from '@/ds/components/ScrollArea';\nimport { Txt } from '@/ds/components/Txt';\nimport { overlaySurfaceStyle } from '@/ds/primitives/raised-surface';\nimport { useMeasuredAutoHeight } from '@/hooks/use-measured-auto-height';\nimport { cn } from '@/lib/utils';\n\ntype ThreadRailPreviewPhase = 'hidden' | 'entering' | 'visible' | 'exiting';\n\ntype ThreadRailPreviewState = {\n currentTurn: ThreadRailTurn | undefined;\n previousTurn: ThreadRailTurn | undefined;\n index: number | null;\n phase: ThreadRailPreviewPhase;\n top: number;\n transitionKey: number;\n};\n\nconst PREVIEW_TRANSITION_DURATION_MS = 360;\nconst PREVIEW_CLEANUP_DELAY_MS = PREVIEW_TRANSITION_DURATION_MS + 80;\n\nconst DEFAULT_PREVIEW_STATE: ThreadRailPreviewState = {\n currentTurn: undefined,\n previousTurn: undefined,\n index: null,\n phase: 'hidden',\n top: 0,\n transitionKey: 0,\n};\n\nexport interface ThreadRailProps {\n turns: ThreadRailTurn[];\n currentAnchorId?: string;\n visibleMessageIds?: string[];\n label?: string;\n className?: string;\n maxHeight?: string;\n scrollAreaClassName?: string;\n onSelect?: (turn: ThreadRailTurn) => void;\n}\n\nexport function ThreadRail({\n turns,\n currentAnchorId,\n visibleMessageIds,\n label = 'Conversation timeline',\n className,\n maxHeight = 'calc(100dvh - 12rem)',\n scrollAreaClassName,\n onSelect,\n}: ThreadRailProps) {\n const railRef = React.useRef<HTMLElement>(null);\n const previewId = React.useId();\n const [previewState, setPreviewState] = React.useState<ThreadRailPreviewState>(DEFAULT_PREVIEW_STATE);\n const messageScroller = useOptionalMessageScroller();\n const scrollerVisibility = useOptionalMessageScrollerVisibility();\n\n const fallbackMessageId = turns.at(-1)?.messageId;\n const activeMessageId = currentAnchorId ?? scrollerVisibility?.currentAnchorId ?? fallbackMessageId;\n const resolvedVisibleMessageIds =\n visibleMessageIds ?? scrollerVisibility?.visibleMessageIds ?? (activeMessageId ? [activeMessageId] : []);\n const visibleMessageIdSet = new Set(resolvedVisibleMessageIds);\n const previewHoverActive = previewState.phase === 'entering' || previewState.phase === 'visible';\n const hoveredIndex = previewHoverActive ? previewState.index : null;\n const selectTurn = React.useCallback(\n (turn: ThreadRailTurn) => {\n if (onSelect) {\n onSelect(turn);\n return;\n }\n\n messageScroller?.scrollToMessage(turn.messageId, { behavior: 'smooth', align: 'start' });\n },\n [messageScroller, onSelect],\n );\n\n const showPreview = (index: number, element: HTMLElement) => {\n const railTop = railRef.current?.getBoundingClientRect().top ?? 0;\n const itemRect = element.getBoundingClientRect();\n const nextTurn = turns[index];\n if (!nextTurn) return;\n\n setPreviewState(current => {\n const nextTop = itemRect.top + itemRect.height / 2 - railTop;\n if (current.index === index && current.phase !== 'hidden' && current.phase !== 'exiting') {\n return { ...current, top: nextTop };\n }\n\n const previousTurn =\n current.currentTurn && current.currentTurn.key !== nextTurn.key && current.phase !== 'hidden'\n ? current.currentTurn\n : undefined;\n\n return {\n currentTurn: nextTurn,\n previousTurn,\n index,\n phase: 'entering',\n top: nextTop,\n transitionKey: current.transitionKey + 1,\n };\n });\n };\n\n const hidePreview = () => {\n setPreviewState(current => {\n if (!current.currentTurn || current.phase === 'hidden' || current.phase === 'exiting') {\n return { ...current, index: null };\n }\n\n return {\n ...current,\n index: null,\n previousTurn: undefined,\n phase: 'exiting',\n transitionKey: current.transitionKey + 1,\n };\n });\n };\n\n React.useEffect(() => {\n if (previewState.phase !== 'entering') return;\n\n const requestFrame = window.requestAnimationFrame ?? window.setTimeout;\n const cancelFrame = window.cancelAnimationFrame ?? window.clearTimeout;\n let settleFrame: number | undefined;\n const startFrame = requestFrame(() => {\n settleFrame = requestFrame(() => {\n setPreviewState(current =>\n current.transitionKey === previewState.transitionKey && current.phase === 'entering'\n ? { ...current, phase: 'visible' }\n : current,\n );\n });\n });\n\n return () => {\n cancelFrame(startFrame);\n if (settleFrame !== undefined) cancelFrame(settleFrame);\n };\n }, [previewState.phase, previewState.transitionKey]);\n\n React.useEffect(() => {\n if (previewState.phase !== 'visible' || !previewState.previousTurn) return;\n\n const timeout = window.setTimeout(() => {\n setPreviewState(current =>\n current.transitionKey === previewState.transitionKey ? { ...current, previousTurn: undefined } : current,\n );\n }, PREVIEW_CLEANUP_DELAY_MS);\n\n return () => window.clearTimeout(timeout);\n }, [previewState.phase, previewState.previousTurn, previewState.transitionKey]);\n\n React.useEffect(() => {\n if (previewState.phase !== 'exiting') return;\n\n const timeout = window.setTimeout(() => {\n setPreviewState(current =>\n current.transitionKey === previewState.transitionKey ? DEFAULT_PREVIEW_STATE : current,\n );\n }, PREVIEW_CLEANUP_DELAY_MS);\n\n return () => window.clearTimeout(timeout);\n }, [previewState.phase, previewState.transitionKey]);\n\n if (turns.length === 0) return null;\n\n return (\n <nav\n ref={railRef}\n aria-label={label}\n data-testid=\"thread-rail\"\n className={cn('relative w-8 py-2', className)}\n onMouseLeave={hidePreview}\n onBlur={event => {\n const nextFocus = event.relatedTarget;\n if (!(nextFocus instanceof Node) || !event.currentTarget.contains(nextFocus)) hidePreview();\n }}\n >\n <ScrollArea\n data-testid=\"thread-rail-scroll-area\"\n maxHeight={maxHeight}\n className={cn('w-8', scrollAreaClassName)}\n >\n <ScrollAreaViewport className=\"pr-3\">\n <div className=\"flex w-4 flex-col items-start gap-2 py-2\">\n {turns.map((turn, index) => {\n const distance = hoveredIndex === null ? null : Math.abs(index - hoveredIndex);\n const active = turn.messageId === activeMessageId;\n const inView = visibleMessageIdSet.has(turn.messageId);\n const previewActive = hoveredIndex === index;\n\n return (\n <ThreadRailItem\n key={turn.key}\n turn={turn}\n index={index}\n distance={distance}\n active={active}\n inView={inView}\n previewId={previewActive ? previewId : undefined}\n onHoverChange={showPreview}\n onSelect={selectTurn}\n />\n );\n })}\n </div>\n </ScrollAreaViewport>\n </ScrollArea>\n\n {previewState.currentTurn && (\n <ThreadRailPreview\n id={previewId}\n currentTurn={previewState.currentTurn}\n previousTurn={previewState.previousTurn}\n phase={previewState.phase}\n top={previewState.top}\n />\n )}\n </nav>\n );\n}\n\ninterface ThreadRailItemProps {\n turn: ThreadRailTurn;\n index: number;\n distance: number | null;\n active: boolean;\n inView: boolean;\n previewId?: string;\n onHoverChange: (index: number, element: HTMLElement) => void;\n onSelect: (turn: ThreadRailTurn) => void;\n}\n\n/** Width of a rail tick: widest at the hovered item, tapering to neighbours. */\nconst getRailItemWidth = (distance: number | null): string => {\n if (distance === 0) return 'w-4';\n if (distance === 1) return 'w-3';\n return 'w-2';\n};\n\n/** Background tone of a rail tick, prioritising hovered/active, then in-view, then proximity. */\nconst getRailItemTone = ({\n distance,\n active,\n inView,\n}: Pick<ThreadRailItemProps, 'distance' | 'active' | 'inView'>): string => {\n if (distance === 0 || active) return 'bg-foreground';\n if (inView) return 'bg-foreground/85';\n if (distance === 1) return 'bg-foreground/70';\n return 'bg-foreground/40';\n};\n\nfunction ThreadRailItem({\n turn,\n index,\n distance,\n active,\n inView,\n previewId,\n onHoverChange,\n onSelect,\n}: ThreadRailItemProps) {\n const size = getRailItemWidth(distance);\n const tone = getRailItemTone({ distance, active, inView });\n\n return (\n <div\n data-in-view={inView ? 'true' : undefined}\n data-active={active ? 'true' : undefined}\n className=\"group/thread-rail-item relative flex items-center\"\n >\n <button\n type=\"button\"\n aria-label={`Jump to ${turn.prompt}`}\n aria-current={active ? 'location' : undefined}\n aria-describedby={previewId}\n data-in-view={inView ? 'true' : undefined}\n data-active={active ? 'true' : undefined}\n onClick={() => onSelect(turn)}\n onMouseEnter={event => onHoverChange(index, event.currentTarget)}\n onFocus={event => onHoverChange(index, event.currentTarget)}\n className={cn(\n 'relative block h-px cursor-pointer rounded-full transition-[width,background-color] duration-normal ease-out',\n \"before:absolute before:inset-x-0 before:-inset-y-1 before:content-['']\",\n 'focus-visible:ring-2 focus-visible:ring-border-focus focus-visible:outline-hidden',\n size,\n tone,\n )}\n />\n </div>\n );\n}\n\nfunction ThreadRailPreview({\n id,\n currentTurn,\n previousTurn,\n phase,\n top,\n}: {\n id: string;\n currentTurn: ThreadRailTurn;\n previousTurn: ThreadRailTurn | undefined;\n phase: ThreadRailPreviewPhase;\n top: number;\n}) {\n const {\n ref: previewSizerRef,\n heightStyle: previewHeightStyle,\n measure: measurePreviewHeight,\n } = useMeasuredAutoHeight<HTMLDivElement>();\n const containerVisible = phase === 'visible' || (phase === 'entering' && Boolean(previousTurn));\n // Entering and exiting share the same off-screen resting style.\n const hiddenLayerClassName = 'scale-95 opacity-0 blur-xs';\n const visibleLayerClassName = 'scale-100 opacity-100 blur-none';\n const layerClassName =\n 'absolute inset-x-0 top-0 h-full origin-left transition-[opacity,filter,scale] duration-150 ease-in-out will-change-[opacity,filter,scale] motion-reduce:scale-100 motion-reduce:blur-none motion-reduce:transition-none';\n\n React.useLayoutEffect(() => {\n measurePreviewHeight();\n }, [currentTurn.key, phase, measurePreviewHeight]);\n\n return (\n <div\n id={id}\n data-testid=\"thread-rail-preview\"\n data-visible={containerVisible ? 'true' : undefined}\n className={cn(\n 'pointer-events-none absolute top-0 left-full z-30 ml-3 w-72 overflow-hidden rounded-xl text-left transition-[height,translate,opacity] duration-360 ease-out-custom will-change-[height,translate,opacity] motion-reduce:transition-none',\n overlaySurfaceStyle,\n containerVisible ? 'opacity-100' : 'opacity-0',\n )}\n style={{ ...previewHeightStyle, translate: `0 calc(${top}px - 50%)` }}\n >\n <div ref={previewSizerRef} data-testid=\"thread-rail-preview-sizer\" aria-hidden className=\"invisible\">\n <ThreadRailPreviewContent turn={currentTurn} className=\"p-3.5\" />\n </div>\n <div data-testid=\"thread-rail-preview-viewport\" className=\"absolute inset-0\">\n <div className=\"relative h-full\">\n {previousTurn && (\n <div\n key={previousTurn.key}\n data-testid=\"thread-rail-preview-previous\"\n aria-hidden\n className={cn(layerClassName, phase === 'entering' ? visibleLayerClassName : hiddenLayerClassName)}\n >\n <ThreadRailPreviewContent turn={previousTurn} className=\"p-3.5\" />\n </div>\n )}\n <div\n key={currentTurn.key}\n data-testid=\"thread-rail-preview-current\"\n className={cn(layerClassName, phase === 'visible' ? visibleLayerClassName : hiddenLayerClassName)}\n >\n <ThreadRailPreviewContent turn={currentTurn} className=\"p-3.5\" />\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction ThreadRailPreviewContent({\n turn,\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement> & { turn: ThreadRailTurn }) {\n return (\n <div className={className} {...props}>\n <div className=\"truncate text-subheading text-foreground\">{turn.prompt}</div>\n {turn.reply && (\n <Txt variant=\"caption\" tone=\"muted\" className=\"mt-1.5 line-clamp-3\">\n {turn.reply}\n </Txt>\n )}\n {(turn.files.length > 0 || turn.hiddenFileCount > 0) && (\n <div className=\"mt-3 flex flex-wrap items-center gap-2 border-t border-border/60 pt-2.5\">\n {turn.files.map(file => (\n <Txt\n as=\"span\"\n variant=\"caption\"\n tone=\"muted\"\n key={file}\n className=\"inline-flex max-w-44 items-center gap-1.5 truncate\"\n >\n <FileText className=\"size-3.5 shrink-0 opacity-70\" aria-hidden />\n {file}\n </Txt>\n ))}\n {turn.hiddenFileCount > 0 && (\n <Txt as=\"span\" variant=\"column\" tone=\"muted\">\n +{turn.hiddenFileCount}\n </Txt>\n )}\n </div>\n )}\n </div>\n );\n}\n","import type { MastraDBMessage } from '@mastra/core/agent/message-list';\nimport type { MastraDBMessageMetadata } from '@mastra/react';\n\nconst SUMMARY_MAX_LENGTH = 120;\nconst FILE_PREVIEW_LIMIT = 2;\n// Inlined, not imported: the value export sits behind a barrel this browser bundle must not pull.\nconst CLIENT_MESSAGE_ID_KEY = 'clientMessageId' satisfies keyof MastraDBMessageMetadata;\n\nexport interface ThreadRailTurn {\n key: string;\n messageId: string;\n prompt: string;\n reply?: string;\n files: string[];\n hiddenFileCount: number;\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nexport const getClientMessageKey = (message: MastraDBMessage): string => {\n const metadata = message.content.metadata;\n const clientMessageId = isRecord(metadata) ? metadata[CLIENT_MESSAGE_ID_KEY] : undefined;\n return typeof clientMessageId === 'string' && clientMessageId.length > 0 ? clientMessageId : message.id;\n};\n\nconst normalizeSummary = (value: string, fallback: string): string => {\n const normalized = value.replace(/\\s+/g, ' ').trim();\n if (normalized.length === 0) return fallback;\n if (normalized.length <= SUMMARY_MAX_LENGTH) return normalized;\n return `${normalized.slice(0, SUMMARY_MAX_LENGTH - 3).trimEnd()}...`;\n};\n\nconst getTextFromParts = (message: MastraDBMessage): string =>\n message.content.parts\n .flatMap(part => {\n if (!isRecord(part) || part.type !== 'text' || typeof part.text !== 'string') return [];\n return [part.text];\n })\n .join('\\n');\n\nconst getStringField = (part: Record<string, unknown>, keys: string[]): string | undefined => {\n for (const key of keys) {\n const value = part[key];\n if (typeof value === 'string' && value.trim().length > 0) return value;\n }\n return undefined;\n};\n\nconst getPathLabel = (value: string): string | undefined => {\n if (value.startsWith('data:')) return undefined;\n\n try {\n const url = new URL(value);\n const candidate = url.pathname.split('/').filter(Boolean).pop();\n return candidate || url.hostname || undefined;\n } catch {\n const candidate = value.split(/[?#]/)[0]?.split('/').filter(Boolean).pop();\n return candidate && !candidate.startsWith('data:') ? candidate : undefined;\n }\n};\n\nconst getFallbackFileLabel = (part: Record<string, unknown>): string => {\n const mediaType = getStringField(part, ['mimeType', 'mediaType']) ?? '';\n if (part.type === 'image' || mediaType.startsWith('image/')) return 'Image';\n if (mediaType === 'application/pdf') return 'PDF';\n if (mediaType.startsWith('video/')) return 'Video';\n if (mediaType.startsWith('audio/')) return 'Audio';\n return 'File';\n};\n\nconst getFileLabelFromPart = (part: MastraDBMessage['content']['parts'][number]): string | undefined => {\n if (!isRecord(part)) return undefined;\n\n const type = getStringField(part, ['type']);\n if (type !== 'file' && type !== 'image') return undefined;\n\n const explicitLabel = getStringField(part, ['filename', 'name']);\n if (explicitLabel) return explicitLabel;\n\n const source = getStringField(part, ['url', 'image', 'data']);\n const pathLabel = source ? getPathLabel(source) : undefined;\n return pathLabel ?? getFallbackFileLabel(part);\n};\n\nconst getFileLabels = (message: MastraDBMessage): string[] =>\n message.content.parts.map(getFileLabelFromPart).filter((label): label is string => Boolean(label));\n\nconst getSignalType = (message: MastraDBMessage): string | undefined => {\n const signal = message.content.metadata?.signal;\n const metadataType = isRecord(signal) ? signal.type : undefined;\n return typeof metadataType === 'string' ? metadataType : message.type;\n};\n\n/** What opens a turn: a rail stop, and the row the scroller parks at the top. */\nexport const startsUserTurn = (message: MastraDBMessage): boolean => {\n if (message.role === 'user') return true;\n if (message.role !== 'signal') return false;\n\n const signalType = getSignalType(message);\n return signalType === 'user' || signalType === 'user-message';\n};\n\nconst getNextAssistantReply = (messages: MastraDBMessage[], startIndex: number): string | undefined => {\n for (let index = startIndex + 1; index < messages.length; index += 1) {\n const message = messages[index];\n if (!message) continue;\n if (startsUserTurn(message)) return undefined;\n if (message.role !== 'assistant') continue;\n\n const reply = normalizeSummary(getTextFromParts(message), '');\n if (reply) return reply;\n }\n\n return undefined;\n};\n\nexport const buildThreadRailTurns = (messages: MastraDBMessage[]): ThreadRailTurn[] =>\n messages.flatMap((message, index) => {\n if (!startsUserTurn(message)) return [];\n\n const files = getFileLabels(message);\n const visibleFiles = files.slice(0, FILE_PREVIEW_LIMIT);\n\n return [\n {\n key: getClientMessageKey(message),\n messageId: message.id,\n prompt: normalizeSummary(getTextFromParts(message), files.length > 0 ? 'Attached file' : 'User message'),\n reply: getNextAssistantReply(messages, index),\n files: visibleFiles,\n hiddenFileCount: files.length - visibleFiles.length,\n },\n ];\n });\n","/** A user's turn and everything the run produced under it. */\nexport interface TurnGroup<T> {\n key: string;\n entries: T[];\n /** Opened by a user message, so it reserves room and anchors the scroll. */\n opensTurn: boolean;\n}\n\nexport interface TurnRules<T> {\n key: (entry: T) => string;\n opensTurn: (entry: T) => boolean;\n /** A marker that belongs above the turn it introduces but arrives after the previous one, so it moves down. */\n introduces?: (entry: T) => boolean;\n}\n\nconst introducesNothing = () => false;\n\n/**\n * Cuts a timeline where the reader's attention moves: a user message starts a turn,\n * and everything the run answers with belongs to it. Entries before the first opener\n * form a turn of their own that opens nothing.\n */\nexport function groupTurns<T>(entries: T[], { key, opensTurn, introduces = introducesNothing }: TurnRules<T>) {\n const groups: TurnGroup<T>[] = [];\n\n for (const entry of entries) {\n const opens = opensTurn(entry);\n const previous = groups.at(-1);\n if (!opens && previous) {\n previous.entries.push(entry);\n continue;\n }\n const last = previous?.entries.at(-1);\n const introduction = previous && last !== undefined && introduces(last) ? previous.entries.splice(-1) : [];\n if (previous?.entries.length === 0) groups.pop();\n groups.push({ key: key(entry), entries: [...introduction, entry], opensTurn: opens });\n }\n\n return groups;\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ThreadRail.es.js","sources":["../../src/ds/components/ThreadRail/thread-rail.tsx","../../src/ds/components/ThreadRail/thread-rail-turns.ts","../../src/ds/components/ThreadRail/turn-groups.ts"],"sourcesContent":["import { FileText } from 'lucide-react';\nimport * as React from 'react';\n\nimport type { ThreadRailTurn } from './thread-rail-turns';\n\nimport { useOptionalMessageScroller, useOptionalMessageScrollerVisibility } from '@/ds/components/MessageScroller';\nimport { ScrollArea, ScrollAreaViewport } from '@/ds/components/ScrollArea';\nimport { Txt } from '@/ds/components/Txt';\nimport { overlaySurfaceStyle } from '@/ds/primitives/raised-surface';\nimport { focusRing } from '@/ds/primitives/transitions';\nimport { useMeasuredAutoHeight } from '@/hooks/use-measured-auto-height';\nimport { cn } from '@/lib/utils';\n\ntype ThreadRailPreviewPhase = 'hidden' | 'entering' | 'visible' | 'exiting';\n\ntype ThreadRailPreviewState = {\n currentTurn: ThreadRailTurn | undefined;\n previousTurn: ThreadRailTurn | undefined;\n index: number | null;\n phase: ThreadRailPreviewPhase;\n top: number;\n transitionKey: number;\n};\n\nconst PREVIEW_TRANSITION_DURATION_MS = 360;\nconst PREVIEW_CLEANUP_DELAY_MS = PREVIEW_TRANSITION_DURATION_MS + 80;\n\nconst DEFAULT_PREVIEW_STATE: ThreadRailPreviewState = {\n currentTurn: undefined,\n previousTurn: undefined,\n index: null,\n phase: 'hidden',\n top: 0,\n transitionKey: 0,\n};\n\nexport interface ThreadRailProps {\n turns: ThreadRailTurn[];\n currentAnchorId?: string;\n visibleMessageIds?: string[];\n label?: string;\n className?: string;\n maxHeight?: string;\n scrollAreaClassName?: string;\n onSelect?: (turn: ThreadRailTurn) => void;\n}\n\nexport function ThreadRail({\n turns,\n currentAnchorId,\n visibleMessageIds,\n label = 'Conversation timeline',\n className,\n maxHeight = 'calc(100dvh - 12rem)',\n scrollAreaClassName,\n onSelect,\n}: ThreadRailProps) {\n const railRef = React.useRef<HTMLElement>(null);\n const previewId = React.useId();\n const [previewState, setPreviewState] = React.useState<ThreadRailPreviewState>(DEFAULT_PREVIEW_STATE);\n const messageScroller = useOptionalMessageScroller();\n const scrollerVisibility = useOptionalMessageScrollerVisibility();\n\n const fallbackMessageId = turns.at(-1)?.messageId;\n const activeMessageId = currentAnchorId ?? scrollerVisibility?.currentAnchorId ?? fallbackMessageId;\n const resolvedVisibleMessageIds =\n visibleMessageIds ?? scrollerVisibility?.visibleMessageIds ?? (activeMessageId ? [activeMessageId] : []);\n const visibleMessageIdSet = new Set(resolvedVisibleMessageIds);\n const previewHoverActive = previewState.phase === 'entering' || previewState.phase === 'visible';\n const hoveredIndex = previewHoverActive ? previewState.index : null;\n const selectTurn = React.useCallback(\n (turn: ThreadRailTurn) => {\n if (onSelect) {\n onSelect(turn);\n return;\n }\n\n messageScroller?.scrollToMessage(turn.messageId, { behavior: 'smooth', align: 'start' });\n },\n [messageScroller, onSelect],\n );\n\n const showPreview = (index: number, element: HTMLElement) => {\n const railTop = railRef.current?.getBoundingClientRect().top ?? 0;\n const itemRect = element.getBoundingClientRect();\n const nextTurn = turns[index];\n if (!nextTurn) return;\n\n setPreviewState(current => {\n const nextTop = itemRect.top + itemRect.height / 2 - railTop;\n if (current.index === index && current.phase !== 'hidden' && current.phase !== 'exiting') {\n return { ...current, top: nextTop };\n }\n\n const previousTurn =\n current.currentTurn && current.currentTurn.key !== nextTurn.key && current.phase !== 'hidden'\n ? current.currentTurn\n : undefined;\n\n return {\n currentTurn: nextTurn,\n previousTurn,\n index,\n phase: 'entering',\n top: nextTop,\n transitionKey: current.transitionKey + 1,\n };\n });\n };\n\n const hidePreview = () => {\n setPreviewState(current => {\n if (!current.currentTurn || current.phase === 'hidden' || current.phase === 'exiting') {\n return { ...current, index: null };\n }\n\n return {\n ...current,\n index: null,\n previousTurn: undefined,\n phase: 'exiting',\n transitionKey: current.transitionKey + 1,\n };\n });\n };\n\n React.useEffect(() => {\n if (previewState.phase !== 'entering') return;\n\n const requestFrame = window.requestAnimationFrame ?? window.setTimeout;\n const cancelFrame = window.cancelAnimationFrame ?? window.clearTimeout;\n let settleFrame: number | undefined;\n const startFrame = requestFrame(() => {\n settleFrame = requestFrame(() => {\n setPreviewState(current =>\n current.transitionKey === previewState.transitionKey && current.phase === 'entering'\n ? { ...current, phase: 'visible' }\n : current,\n );\n });\n });\n\n return () => {\n cancelFrame(startFrame);\n if (settleFrame !== undefined) cancelFrame(settleFrame);\n };\n }, [previewState.phase, previewState.transitionKey]);\n\n React.useEffect(() => {\n if (previewState.phase !== 'visible' || !previewState.previousTurn) return;\n\n const timeout = window.setTimeout(() => {\n setPreviewState(current =>\n current.transitionKey === previewState.transitionKey ? { ...current, previousTurn: undefined } : current,\n );\n }, PREVIEW_CLEANUP_DELAY_MS);\n\n return () => window.clearTimeout(timeout);\n }, [previewState.phase, previewState.previousTurn, previewState.transitionKey]);\n\n React.useEffect(() => {\n if (previewState.phase !== 'exiting') return;\n\n const timeout = window.setTimeout(() => {\n setPreviewState(current =>\n current.transitionKey === previewState.transitionKey ? DEFAULT_PREVIEW_STATE : current,\n );\n }, PREVIEW_CLEANUP_DELAY_MS);\n\n return () => window.clearTimeout(timeout);\n }, [previewState.phase, previewState.transitionKey]);\n\n if (turns.length === 0) return null;\n\n return (\n <nav\n ref={railRef}\n aria-label={label}\n data-testid=\"thread-rail\"\n className={cn('relative w-8 py-2', className)}\n onMouseLeave={hidePreview}\n onBlur={event => {\n const nextFocus = event.relatedTarget;\n if (!(nextFocus instanceof Node) || !event.currentTarget.contains(nextFocus)) hidePreview();\n }}\n >\n <ScrollArea\n data-testid=\"thread-rail-scroll-area\"\n maxHeight={maxHeight}\n className={cn('w-8', scrollAreaClassName)}\n >\n <ScrollAreaViewport className=\"pr-3\">\n <div className=\"flex w-4 flex-col items-start gap-2 py-2\">\n {turns.map((turn, index) => {\n const distance = hoveredIndex === null ? null : Math.abs(index - hoveredIndex);\n const active = turn.messageId === activeMessageId;\n const inView = visibleMessageIdSet.has(turn.messageId);\n const previewActive = hoveredIndex === index;\n\n return (\n <ThreadRailItem\n key={turn.key}\n turn={turn}\n index={index}\n distance={distance}\n active={active}\n inView={inView}\n previewId={previewActive ? previewId : undefined}\n onHoverChange={showPreview}\n onSelect={selectTurn}\n />\n );\n })}\n </div>\n </ScrollAreaViewport>\n </ScrollArea>\n\n {previewState.currentTurn && (\n <ThreadRailPreview\n id={previewId}\n currentTurn={previewState.currentTurn}\n previousTurn={previewState.previousTurn}\n phase={previewState.phase}\n top={previewState.top}\n />\n )}\n </nav>\n );\n}\n\ninterface ThreadRailItemProps {\n turn: ThreadRailTurn;\n index: number;\n distance: number | null;\n active: boolean;\n inView: boolean;\n previewId?: string;\n onHoverChange: (index: number, element: HTMLElement) => void;\n onSelect: (turn: ThreadRailTurn) => void;\n}\n\n/** Width of a rail tick: widest at the hovered item, tapering to neighbours. */\nconst getRailItemWidth = (distance: number | null): string => {\n if (distance === 0) return 'w-4';\n if (distance === 1) return 'w-3';\n return 'w-2';\n};\n\n/** Background tone of a rail tick, prioritising hovered/active, then in-view, then proximity. */\nconst getRailItemTone = ({\n distance,\n active,\n inView,\n}: Pick<ThreadRailItemProps, 'distance' | 'active' | 'inView'>): string => {\n if (distance === 0 || active) return 'bg-foreground';\n if (inView) return 'bg-foreground/85';\n if (distance === 1) return 'bg-foreground/70';\n return 'bg-foreground/40';\n};\n\nfunction ThreadRailItem({\n turn,\n index,\n distance,\n active,\n inView,\n previewId,\n onHoverChange,\n onSelect,\n}: ThreadRailItemProps) {\n const size = getRailItemWidth(distance);\n const tone = getRailItemTone({ distance, active, inView });\n\n return (\n <div\n data-in-view={inView ? 'true' : undefined}\n data-active={active ? 'true' : undefined}\n className=\"group/thread-rail-item relative flex items-center\"\n >\n <button\n type=\"button\"\n aria-label={`Jump to ${turn.prompt}`}\n aria-current={active ? 'location' : undefined}\n aria-describedby={previewId}\n data-in-view={inView ? 'true' : undefined}\n data-active={active ? 'true' : undefined}\n onClick={() => onSelect(turn)}\n onMouseEnter={event => onHoverChange(index, event.currentTarget)}\n onFocus={event => onHoverChange(index, event.currentTarget)}\n className={cn(\n 'relative block h-px cursor-pointer rounded-full transition-[width,background-color] duration-normal ease-out',\n \"before:absolute before:inset-x-0 before:-inset-y-1 before:content-['']\",\n focusRing,\n size,\n tone,\n )}\n />\n </div>\n );\n}\n\nfunction ThreadRailPreview({\n id,\n currentTurn,\n previousTurn,\n phase,\n top,\n}: {\n id: string;\n currentTurn: ThreadRailTurn;\n previousTurn: ThreadRailTurn | undefined;\n phase: ThreadRailPreviewPhase;\n top: number;\n}) {\n const {\n ref: previewSizerRef,\n heightStyle: previewHeightStyle,\n measure: measurePreviewHeight,\n } = useMeasuredAutoHeight<HTMLDivElement>();\n const containerVisible = phase === 'visible' || (phase === 'entering' && Boolean(previousTurn));\n // Entering and exiting share the same off-screen resting style.\n const hiddenLayerClassName = 'scale-95 opacity-0 blur-xs';\n const visibleLayerClassName = 'scale-100 opacity-100 blur-none';\n const layerClassName =\n 'absolute inset-x-0 top-0 h-full origin-left transition-[opacity,filter,scale] duration-150 ease-in-out will-change-[opacity,filter,scale] motion-reduce:scale-100 motion-reduce:blur-none motion-reduce:transition-none';\n\n React.useLayoutEffect(() => {\n measurePreviewHeight();\n }, [currentTurn.key, phase, measurePreviewHeight]);\n\n return (\n <div\n id={id}\n data-testid=\"thread-rail-preview\"\n data-visible={containerVisible ? 'true' : undefined}\n className={cn(\n 'pointer-events-none absolute top-0 left-full z-30 ml-3 w-72 overflow-hidden rounded-xl text-left transition-[height,translate,opacity] duration-360 ease-out-custom will-change-[height,translate,opacity] motion-reduce:transition-none',\n overlaySurfaceStyle,\n containerVisible ? 'opacity-100' : 'opacity-0',\n )}\n style={{ ...previewHeightStyle, translate: `0 calc(${top}px - 50%)` }}\n >\n <div ref={previewSizerRef} data-testid=\"thread-rail-preview-sizer\" aria-hidden className=\"invisible\">\n <ThreadRailPreviewContent turn={currentTurn} className=\"p-3.5\" />\n </div>\n <div data-testid=\"thread-rail-preview-viewport\" className=\"absolute inset-0\">\n <div className=\"relative h-full\">\n {previousTurn && (\n <div\n key={previousTurn.key}\n data-testid=\"thread-rail-preview-previous\"\n aria-hidden\n className={cn(layerClassName, phase === 'entering' ? visibleLayerClassName : hiddenLayerClassName)}\n >\n <ThreadRailPreviewContent turn={previousTurn} className=\"p-3.5\" />\n </div>\n )}\n <div\n key={currentTurn.key}\n data-testid=\"thread-rail-preview-current\"\n className={cn(layerClassName, phase === 'visible' ? visibleLayerClassName : hiddenLayerClassName)}\n >\n <ThreadRailPreviewContent turn={currentTurn} className=\"p-3.5\" />\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction ThreadRailPreviewContent({\n turn,\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement> & { turn: ThreadRailTurn }) {\n return (\n <div className={className} {...props}>\n <div className=\"truncate text-subheading text-foreground\">{turn.prompt}</div>\n {turn.reply && (\n <Txt variant=\"caption\" tone=\"muted\" className=\"mt-1.5 line-clamp-3\">\n {turn.reply}\n </Txt>\n )}\n {(turn.files.length > 0 || turn.hiddenFileCount > 0) && (\n <div className=\"mt-3 flex flex-wrap items-center gap-2 border-t border-border/60 pt-2.5\">\n {turn.files.map(file => (\n <Txt\n as=\"span\"\n variant=\"caption\"\n tone=\"muted\"\n key={file}\n className=\"inline-flex max-w-44 items-center gap-1.5 truncate\"\n >\n <FileText className=\"size-3.5 shrink-0 opacity-70\" aria-hidden />\n {file}\n </Txt>\n ))}\n {turn.hiddenFileCount > 0 && (\n <Txt as=\"span\" variant=\"column\" tone=\"muted\">\n +{turn.hiddenFileCount}\n </Txt>\n )}\n </div>\n )}\n </div>\n );\n}\n","import type { MastraDBMessage } from '@mastra/core/agent/message-list';\nimport type { MastraDBMessageMetadata } from '@mastra/react';\n\nconst SUMMARY_MAX_LENGTH = 120;\nconst FILE_PREVIEW_LIMIT = 2;\n// Inlined, not imported: the value export sits behind a barrel this browser bundle must not pull.\nconst CLIENT_MESSAGE_ID_KEY = 'clientMessageId' satisfies keyof MastraDBMessageMetadata;\n\nexport interface ThreadRailTurn {\n key: string;\n messageId: string;\n prompt: string;\n reply?: string;\n files: string[];\n hiddenFileCount: number;\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nexport const getClientMessageKey = (message: MastraDBMessage): string => {\n const metadata = message.content.metadata;\n const clientMessageId = isRecord(metadata) ? metadata[CLIENT_MESSAGE_ID_KEY] : undefined;\n return typeof clientMessageId === 'string' && clientMessageId.length > 0 ? clientMessageId : message.id;\n};\n\nconst normalizeSummary = (value: string, fallback: string): string => {\n const normalized = value.replace(/\\s+/g, ' ').trim();\n if (normalized.length === 0) return fallback;\n if (normalized.length <= SUMMARY_MAX_LENGTH) return normalized;\n return `${normalized.slice(0, SUMMARY_MAX_LENGTH - 3).trimEnd()}...`;\n};\n\nconst getTextFromParts = (message: MastraDBMessage): string =>\n message.content.parts\n .flatMap(part => {\n if (!isRecord(part) || part.type !== 'text' || typeof part.text !== 'string') return [];\n return [part.text];\n })\n .join('\\n');\n\nconst getStringField = (part: Record<string, unknown>, keys: string[]): string | undefined => {\n for (const key of keys) {\n const value = part[key];\n if (typeof value === 'string' && value.trim().length > 0) return value;\n }\n return undefined;\n};\n\nconst getPathLabel = (value: string): string | undefined => {\n if (value.startsWith('data:')) return undefined;\n\n try {\n const url = new URL(value);\n const candidate = url.pathname.split('/').filter(Boolean).pop();\n return candidate || url.hostname || undefined;\n } catch {\n const candidate = value.split(/[?#]/)[0]?.split('/').filter(Boolean).pop();\n return candidate && !candidate.startsWith('data:') ? candidate : undefined;\n }\n};\n\nconst getFallbackFileLabel = (part: Record<string, unknown>): string => {\n const mediaType = getStringField(part, ['mimeType', 'mediaType']) ?? '';\n if (part.type === 'image' || mediaType.startsWith('image/')) return 'Image';\n if (mediaType === 'application/pdf') return 'PDF';\n if (mediaType.startsWith('video/')) return 'Video';\n if (mediaType.startsWith('audio/')) return 'Audio';\n return 'File';\n};\n\nconst getFileLabelFromPart = (part: MastraDBMessage['content']['parts'][number]): string | undefined => {\n if (!isRecord(part)) return undefined;\n\n const type = getStringField(part, ['type']);\n if (type !== 'file' && type !== 'image') return undefined;\n\n const explicitLabel = getStringField(part, ['filename', 'name']);\n if (explicitLabel) return explicitLabel;\n\n const source = getStringField(part, ['url', 'image', 'data']);\n const pathLabel = source ? getPathLabel(source) : undefined;\n return pathLabel ?? getFallbackFileLabel(part);\n};\n\nconst getFileLabels = (message: MastraDBMessage): string[] =>\n message.content.parts.map(getFileLabelFromPart).filter((label): label is string => Boolean(label));\n\nconst getSignalType = (message: MastraDBMessage): string | undefined => {\n const signal = message.content.metadata?.signal;\n const metadataType = isRecord(signal) ? signal.type : undefined;\n return typeof metadataType === 'string' ? metadataType : message.type;\n};\n\n/** What opens a turn: a rail stop, and the row the scroller parks at the top. */\nexport const startsUserTurn = (message: MastraDBMessage): boolean => {\n if (message.role === 'user') return true;\n if (message.role !== 'signal') return false;\n\n const signalType = getSignalType(message);\n return signalType === 'user' || signalType === 'user-message';\n};\n\nconst getNextAssistantReply = (messages: MastraDBMessage[], startIndex: number): string | undefined => {\n for (let index = startIndex + 1; index < messages.length; index += 1) {\n const message = messages[index];\n if (!message) continue;\n if (startsUserTurn(message)) return undefined;\n if (message.role !== 'assistant') continue;\n\n const reply = normalizeSummary(getTextFromParts(message), '');\n if (reply) return reply;\n }\n\n return undefined;\n};\n\nexport const buildThreadRailTurns = (messages: MastraDBMessage[]): ThreadRailTurn[] =>\n messages.flatMap((message, index) => {\n if (!startsUserTurn(message)) return [];\n\n const files = getFileLabels(message);\n const visibleFiles = files.slice(0, FILE_PREVIEW_LIMIT);\n\n return [\n {\n key: getClientMessageKey(message),\n messageId: message.id,\n prompt: normalizeSummary(getTextFromParts(message), files.length > 0 ? 'Attached file' : 'User message'),\n reply: getNextAssistantReply(messages, index),\n files: visibleFiles,\n hiddenFileCount: files.length - visibleFiles.length,\n },\n ];\n });\n","/** A user's turn and everything the run produced under it. */\nexport interface TurnGroup<T> {\n key: string;\n entries: T[];\n /** Opened by a user message, so it reserves room and anchors the scroll. */\n opensTurn: boolean;\n}\n\nexport interface TurnRules<T> {\n key: (entry: T) => string;\n opensTurn: (entry: T) => boolean;\n /** A marker that belongs above the turn it introduces but arrives after the previous one, so it moves down. */\n introduces?: (entry: T) => boolean;\n}\n\nconst introducesNothing = () => false;\n\n/**\n * Cuts a timeline where the reader's attention moves: a user message starts a turn,\n * and everything the run answers with belongs to it. Entries before the first opener\n * form a turn of their own that opens nothing.\n */\nexport function groupTurns<T>(entries: T[], { key, opensTurn, introduces = introducesNothing }: TurnRules<T>) {\n const groups: TurnGroup<T>[] = [];\n\n for (const entry of entries) {\n const opens = opensTurn(entry);\n const previous = groups.at(-1);\n if (!opens && previous) {\n previous.entries.push(entry);\n continue;\n }\n const last = previous?.entries.at(-1);\n const introduction = previous && last !== undefined && introduces(last) ? previous.entries.splice(-1) : [];\n if (previous?.entries.length === 0) groups.pop();\n groups.push({ key: key(entry), entries: [...introduction, entry], opensTurn: opens });\n }\n\n return groups;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ const jsxRuntime = require('react/jsx-runtime');
|
|
|
6
6
|
const React = require('react');
|
|
7
7
|
const primitives_transitions = require('../primitives/transitions.cjs.js');
|
|
8
8
|
const utils_cn = require('../cn-DG0X1KEP.cjs');
|
|
9
|
-
const collapsible = require('../collapsible-
|
|
9
|
+
const collapsible = require('../collapsible-jfzzU7Gp.cjs');
|
|
10
10
|
const lucideReact = require('lucide-react');
|
|
11
11
|
const hooks_useIsomorphicLayoutEffect = require('../hooks/use-isomorphic-layout-effect.cjs.js');
|
|
12
12
|
|
|
@@ -185,7 +185,7 @@ const TreeFolderTrigger = React__namespace.forwardRef(
|
|
|
185
185
|
{
|
|
186
186
|
"data-tree-folder-trigger": "true",
|
|
187
187
|
tabIndex: -1,
|
|
188
|
-
className: "flex h-7 min-w-0 flex-1 cursor-pointer items-center gap-1.5 rounded-sm px-1 outline-hidden focus-visible:
|
|
188
|
+
className: "flex h-7 min-w-0 flex-1 cursor-pointer items-center gap-1.5 rounded-sm px-1 outline-hidden focus-visible:outline-hidden",
|
|
189
189
|
style: { paddingLeft: depth * 12 },
|
|
190
190
|
onMouseDown: (e) => {
|
|
191
191
|
e.preventDefault();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tree.cjs.js","sources":["../../src/ds/components/Tree/tree-context.tsx","../../src/ds/components/Tree/tree-file.tsx","../../src/ds/components/Tree/tree-folder.tsx","../../src/ds/components/Tree/tree-folder-content.tsx","../../src/ds/components/Tree/tree-folder-trigger.tsx","../../src/ds/components/Tree/tree-icon.tsx","../../src/ds/components/Tree/tree-input.tsx","../../src/ds/components/Tree/tree-label.tsx","../../src/ds/components/Tree/tree-root.tsx","../../src/ds/components/Tree/tree.tsx"],"sourcesContent":["import * as React from 'react';\n\nexport interface TreeContextValue {\n selectedId?: string;\n onSelect?: (id: string) => void;\n focusItem?: (item: HTMLElement, options?: { focus?: boolean }) => void;\n}\n\nconst TreeContext = React.createContext<TreeContextValue | null>(null);\n\nexport function TreeProvider({ children, value }: { children: React.ReactNode; value: TreeContextValue }) {\n return <TreeContext.Provider value={value}>{children}</TreeContext.Provider>;\n}\n\nexport function useTreeContext(): TreeContextValue | null {\n return React.useContext(TreeContext);\n}\n\nexport interface TreeFolderContextValue {\n isFocused: boolean;\n}\n\nconst TreeFolderContext = React.createContext<TreeFolderContextValue | null>(null);\n\nexport function TreeFolderProvider({ children, value }: { children: React.ReactNode; value: TreeFolderContextValue }) {\n return <TreeFolderContext.Provider value={value}>{children}</TreeFolderContext.Provider>;\n}\n\nexport function useTreeFolderContext(): TreeFolderContextValue | null {\n return React.useContext(TreeFolderContext);\n}\n\nconst TreeDepthContext = React.createContext<number>(0);\n\nexport function TreeDepthProvider({ children, depth }: { children: React.ReactNode; depth: number }) {\n return <TreeDepthContext.Provider value={depth}>{children}</TreeDepthContext.Provider>;\n}\n\nexport function useTreeDepth(): number {\n return React.useContext(TreeDepthContext);\n}\n","import * as React from 'react';\nimport { useTreeContext, useTreeDepth } from './tree-context';\nimport { transitions } from '@/ds/primitives/transitions';\nimport { cn } from '@/lib/utils';\n\nexport interface TreeFileProps {\n id?: string;\n className?: string;\n children: React.ReactNode;\n}\n\nexport const TreeFile = React.forwardRef<HTMLLIElement, TreeFileProps>(({ id, className, children }, ref) => {\n const treeCtx = useTreeContext();\n const depth = useTreeDepth();\n const isSelected = id != null && treeCtx?.selectedId === id;\n\n const handleClick = (e: React.MouseEvent<HTMLLIElement>) => {\n treeCtx?.focusItem?.(e.currentTarget);\n if (id != null && treeCtx?.onSelect) {\n treeCtx.onSelect(id);\n }\n };\n\n const handleFocus = (e: React.FocusEvent<HTMLLIElement>) => {\n treeCtx?.focusItem?.(e.currentTarget, { focus: false });\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if ((e.key === 'Enter' || e.key === ' ') && id != null && treeCtx?.onSelect) {\n e.preventDefault();\n treeCtx.onSelect(id);\n }\n };\n\n return (\n <li\n ref={ref}\n role=\"treeitem\"\n aria-level={depth + 1}\n aria-selected={isSelected || undefined}\n data-tree-item-kind=\"file\"\n data-tree-item-id={id}\n tabIndex={-1}\n className={cn(\n 'group flex h-7 min-w-0 cursor-pointer items-center gap-1.5 rounded-sm px-1',\n transitions.colors,\n 'outline-hidden hover:bg-fill-subtle focus-visible:bg-fill-subtle focus-visible:text-foreground focus-visible:outline-hidden',\n isSelected && 'bg-fill-hover text-foreground',\n className,\n )}\n // +18 offsets past the chevron (size-3 = 12px) + flex gap (gap-1.5 = 6px) that folders have\n style={{ paddingLeft: depth * 12 + 18 }}\n onClick={handleClick}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n >\n {children}\n </li>\n );\n});\nTreeFile.displayName = 'Tree.File';\n","import * as React from 'react';\nimport { TreeFolderProvider, useTreeContext, useTreeDepth } from './tree-context';\nimport { Collapsible } from '@/ds/components/Collapsible';\nimport { cn } from '@/lib/utils';\n\nexport interface TreeFolderProps {\n id?: string;\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n className?: string;\n children: React.ReactNode;\n}\n\nexport const TreeFolder = React.forwardRef<HTMLLIElement, TreeFolderProps>(\n ({ id, defaultOpen, open, onOpenChange, className, children }, ref) => {\n const treeCtx = useTreeContext();\n const depth = useTreeDepth();\n const [internalOpen, setInternalOpen] = React.useState(defaultOpen ?? false);\n const [isFocused, setIsFocused] = React.useState(false);\n const isOpen = open ?? internalOpen;\n\n const handleOpenChange = React.useCallback(\n (nextOpen: boolean) => {\n setInternalOpen(nextOpen);\n onOpenChange?.(nextOpen);\n },\n [onOpenChange],\n );\n\n const handleFocus = React.useCallback(\n (e: React.FocusEvent<HTMLLIElement>) => {\n if (e.target !== e.currentTarget) {\n setIsFocused(false);\n return;\n }\n\n setIsFocused(true);\n treeCtx?.focusItem?.(e.currentTarget, { focus: false });\n },\n [treeCtx],\n );\n\n const handleBlur = React.useCallback(() => {\n setIsFocused(false);\n }, []);\n\n const folderContextValue = React.useMemo(() => ({ isFocused }), [isFocused]);\n\n return (\n <li\n ref={ref}\n role=\"treeitem\"\n aria-expanded={isOpen}\n aria-level={depth + 1}\n data-tree-item-kind=\"folder\"\n data-tree-item-id={id}\n tabIndex={-1}\n className={cn('flex flex-col outline-hidden', className)}\n onFocus={handleFocus}\n onBlur={handleBlur}\n >\n <TreeFolderProvider value={folderContextValue}>\n <Collapsible open={isOpen} onOpenChange={handleOpenChange}>\n {children}\n </Collapsible>\n </TreeFolderProvider>\n </li>\n );\n },\n);\nTreeFolder.displayName = 'Tree.Folder';\n","import * as React from 'react';\nimport { useTreeDepth, TreeDepthProvider } from './tree-context';\nimport { CollapsibleContent } from '@/ds/components/Collapsible';\nimport { cn } from '@/lib/utils';\n\nexport interface TreeFolderContentProps {\n className?: string;\n children: React.ReactNode;\n}\n\nexport const TreeFolderContent = React.forwardRef<HTMLDivElement, TreeFolderContentProps>(\n ({ className, children }, ref) => {\n const depth = useTreeDepth();\n\n return (\n <CollapsibleContent ref={ref} className={cn(className)}>\n <TreeDepthProvider depth={depth + 1}>\n <ul role=\"group\" className=\"flex flex-col\">\n {children}\n </ul>\n </TreeDepthProvider>\n </CollapsibleContent>\n );\n },\n);\nTreeFolderContent.displayName = 'Tree.FolderContent';\n","import { ChevronRight } from 'lucide-react';\nimport * as React from 'react';\nimport { useTreeContext, useTreeDepth, useTreeFolderContext } from './tree-context';\nimport { CollapsibleTrigger } from '@/ds/components/Collapsible';\nimport { transitions } from '@/ds/primitives/transitions';\nimport { cn } from '@/lib/utils';\n\nexport interface TreeFolderTriggerProps {\n className?: string;\n children: React.ReactNode;\n actions?: React.ReactNode;\n}\n\nexport const TreeFolderTrigger = React.forwardRef<HTMLDivElement, TreeFolderTriggerProps>(\n ({ className, children, actions }, ref) => {\n const treeCtx = useTreeContext();\n const folderCtx = useTreeFolderContext();\n const depth = useTreeDepth();\n\n const focusFolderItem = React.useCallback(\n (target: HTMLElement, options?: { focus?: boolean }) => {\n const item = target.closest<HTMLElement>('[data-tree-item-kind=\"folder\"]');\n if (item) {\n treeCtx?.focusItem?.(item, options);\n }\n },\n [treeCtx],\n );\n\n return (\n <div\n ref={ref}\n data-tree-folder-row=\"true\"\n className={cn(\n 'group flex h-7 w-full min-w-0 items-center rounded-sm hover:bg-fill-subtle',\n transitions.colors,\n folderCtx?.isFocused && 'bg-fill-hover text-foreground',\n className,\n )}\n >\n <CollapsibleTrigger\n data-tree-folder-trigger=\"true\"\n tabIndex={-1}\n className=\"flex h-7 min-w-0 flex-1 cursor-pointer items-center gap-1.5 rounded-sm px-1 outline-hidden focus-visible:ring-0 focus-visible:outline-hidden\"\n style={{ paddingLeft: depth * 12 }}\n onMouseDown={e => {\n e.preventDefault();\n focusFolderItem(e.currentTarget);\n }}\n onFocus={e => {\n focusFolderItem(e.currentTarget, { focus: false });\n }}\n >\n <ChevronRight aria-hidden=\"true\" className=\"size-3 shrink-0 text-muted-foreground\" />\n {children}\n </CollapsibleTrigger>\n {actions && (\n <span className=\"shrink-0 pr-1\" onClick={e => e.stopPropagation()}>\n {actions}\n </span>\n )}\n </div>\n );\n },\n);\nTreeFolderTrigger.displayName = 'Tree.FolderTrigger';\n","import * as React from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface TreeIconProps {\n className?: string;\n children: React.ReactNode;\n}\n\nexport const TreeIcon = React.forwardRef<HTMLSpanElement, TreeIconProps>(({ className, children }, ref) => (\n <span ref={ref} className={cn('flex shrink-0 items-center [&>svg]:size-3.5', className)}>\n {children}\n </span>\n));\nTreeIcon.displayName = 'Tree.Icon';\n","import { File, Folder } from 'lucide-react';\nimport * as React from 'react';\nimport { useTreeDepth } from './tree-context';\nimport { transitions } from '@/ds/primitives/transitions';\nimport { cn } from '@/lib/utils';\n\nexport interface TreeInputProps {\n type: 'file' | 'folder';\n onSubmit: (name: string) => void;\n onCancel?: () => void;\n defaultValue?: string;\n placeholder?: string;\n autoFocus?: boolean;\n className?: string;\n}\n\nexport const TreeInput = React.forwardRef<HTMLLIElement, TreeInputProps>(\n ({ type, onSubmit, onCancel, defaultValue = '', placeholder, autoFocus = true, className }, ref) => {\n const depth = useTreeDepth();\n const inputRef = React.useRef<HTMLInputElement>(null);\n const submittedRef = React.useRef(false);\n\n const handleSubmit = React.useCallback(\n (value: string) => {\n if (submittedRef.current) return;\n const trimmed = value.trim();\n if (trimmed) {\n submittedRef.current = true;\n onSubmit(trimmed);\n } else {\n onCancel?.();\n }\n },\n [onSubmit, onCancel],\n );\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n handleSubmit(e.currentTarget.value);\n } else if (e.key === 'Escape') {\n e.preventDefault();\n onCancel?.();\n }\n },\n [handleSubmit, onCancel],\n );\n\n const handleBlur = React.useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n handleSubmit(e.currentTarget.value);\n },\n [handleSubmit],\n );\n\n const handleFocus = React.useCallback((e: React.FocusEvent<HTMLInputElement>) => {\n e.currentTarget.select();\n }, []);\n\n const Icon = type === 'folder' ? Folder : File;\n\n return (\n <li\n ref={ref}\n role=\"treeitem\"\n aria-level={depth + 1}\n data-tree-item-kind=\"input\"\n className={cn(\n 'group flex h-7 min-w-0 items-center gap-1.5 rounded-sm px-1',\n transitions.colors,\n 'focus-within:bg-fill-subtle focus-within:text-foreground focus-within:outline-hidden',\n className,\n )}\n style={{ paddingLeft: depth * 12 + 18 }}\n >\n <span className=\"flex shrink-0 items-center [&>svg]:size-3.5\">\n <Icon className=\"text-muted-foreground\" />\n </span>\n <input\n ref={inputRef}\n type=\"text\"\n defaultValue={defaultValue}\n placeholder={placeholder}\n autoFocus={autoFocus}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n onFocus={handleFocus}\n className=\"min-w-0 flex-1 border-none bg-transparent text-caption text-foreground outline-hidden placeholder:text-muted-foreground\"\n />\n </li>\n );\n },\n);\nTreeInput.displayName = 'Tree.Input';\n","import * as React from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface TreeLabelProps {\n className?: string;\n children: React.ReactNode;\n}\n\nexport const TreeLabel = React.forwardRef<HTMLSpanElement, TreeLabelProps>(({ className, children }, ref) => (\n <span ref={ref} className={cn('truncate text-foreground', className)}>\n {children}\n </span>\n));\nTreeLabel.displayName = 'Tree.Label';\n","import * as React from 'react';\nimport { TreeProvider, TreeDepthProvider } from './tree-context';\nimport { useIsomorphicLayoutEffect } from '@/hooks/use-isomorphic-layout-effect';\nimport { cn } from '@/lib/utils';\n\nconst TREE_FOCUSABLE_ITEM_SELECTOR = '[data-tree-item-kind=\"folder\"], [data-tree-item-kind=\"file\"]';\nconst TREE_FOLDER_TRIGGER_SELECTOR = '[data-tree-folder-trigger=\"true\"]';\n\nexport interface TreeRootProps {\n selectedId?: string;\n onSelect?: (id: string) => void;\n className?: string;\n children: React.ReactNode;\n}\n\nfunction assignRef<T>(ref: React.ForwardedRef<T>, value: T | null) {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref) {\n ref.current = value;\n }\n}\n\nfunction getTreeItems(root: HTMLElement): HTMLElement[] {\n return Array.from(root.querySelectorAll<HTMLElement>(TREE_FOCUSABLE_ITEM_SELECTOR)).filter(\n item => item.getAttribute('role') === 'treeitem',\n );\n}\n\nfunction setTabStops(items: HTMLElement[], focusableItem: HTMLElement) {\n for (const item of items) {\n item.tabIndex = item === focusableItem ? 0 : -1;\n }\n}\n\nfunction syncTreeItemSetMetadata(root: HTMLElement) {\n const groups = [root, ...Array.from(root.querySelectorAll<HTMLElement>('[role=\"group\"]'))];\n\n for (const group of groups) {\n const items = Array.from(group.children).filter(\n (child): child is HTMLElement =>\n child instanceof HTMLElement &&\n child.getAttribute('role') === 'treeitem' &&\n child.hasAttribute('data-tree-item-kind'),\n );\n\n items.forEach((item, index) => {\n item.setAttribute('aria-posinset', String(index + 1));\n item.setAttribute('aria-setsize', String(items.length));\n });\n }\n}\n\nfunction findSelectedItem(items: HTMLElement[], selectedId: string | undefined): HTMLElement | null {\n if (!selectedId) return null;\n return items.find(item => item.dataset.treeItemId === selectedId) ?? null;\n}\n\nfunction getActiveTreeItem(root: HTMLElement, items: HTMLElement[]): HTMLElement | null {\n const activeElement = root.ownerDocument.activeElement;\n if (!(activeElement instanceof HTMLElement) || !root.contains(activeElement)) return null;\n\n const activeItem = activeElement.closest<HTMLElement>(TREE_FOCUSABLE_ITEM_SELECTOR);\n return activeItem && items.includes(activeItem) ? activeItem : null;\n}\n\nfunction getClosestTreeItem(root: HTMLElement, target: EventTarget | null): HTMLElement | null {\n if (!(target instanceof HTMLElement) || !root.contains(target)) return null;\n const item = target.closest<HTMLElement>(TREE_FOCUSABLE_ITEM_SELECTOR);\n return item?.getAttribute('role') === 'treeitem' ? item : null;\n}\n\nfunction focusTreeItem(root: HTMLElement, item: HTMLElement, options: { focus?: boolean } = {}) {\n const items = getTreeItems(root);\n if (!items.includes(item)) return;\n\n setTabStops(items, item);\n if (options.focus !== false) {\n item.focus();\n }\n}\n\nfunction syncTreeTabStops(root: HTMLElement, selectedId: string | undefined) {\n const items = getTreeItems(root);\n syncTreeItemSetMetadata(root);\n\n const firstItem = items[0];\n if (!firstItem) return;\n\n const activeItem = getActiveTreeItem(root, items);\n const selectedItem = findSelectedItem(items, selectedId);\n setTabStops(items, activeItem ?? selectedItem ?? firstItem);\n}\n\nfunction isEditableTarget(target: EventTarget | null): boolean {\n if (!(target instanceof HTMLElement)) return false;\n if (target.dataset.treeFolderTrigger === 'true') return false;\n if (target.isContentEditable) return true;\n\n return !!target.closest('input, textarea, select, button, [contenteditable=\"true\"]');\n}\n\nfunction getFolderTrigger(item: HTMLElement): HTMLButtonElement | null {\n return item.querySelector<HTMLButtonElement>(TREE_FOLDER_TRIGGER_SELECTOR);\n}\n\nfunction getParentTreeItem(item: HTMLElement): HTMLElement | null {\n const parentGroup = item.parentElement?.closest('[role=\"group\"]');\n return parentGroup?.closest<HTMLElement>(TREE_FOCUSABLE_ITEM_SELECTOR) ?? null;\n}\n\nfunction activateTreeItem(item: HTMLElement) {\n const trigger = getFolderTrigger(item);\n if (trigger) {\n trigger.click();\n } else {\n item.click();\n }\n}\n\nexport const TreeRoot = React.forwardRef<HTMLUListElement, TreeRootProps>(\n ({ selectedId, onSelect, className, children }, ref) => {\n const rootRef = React.useRef<HTMLUListElement | null>(null);\n\n const handleRootRef = React.useCallback(\n (node: HTMLUListElement | null) => {\n rootRef.current = node;\n assignRef(ref, node);\n },\n [ref],\n );\n\n const focusItem = React.useCallback((item: HTMLElement, options?: { focus?: boolean }) => {\n const root = rootRef.current;\n if (!root) return;\n focusTreeItem(root, item, options);\n }, []);\n\n const handleKeyDown = React.useCallback((event: React.KeyboardEvent<HTMLUListElement>) => {\n if (event.defaultPrevented || isEditableTarget(event.target)) return;\n\n const root = rootRef.current;\n if (!root) return;\n\n const items = getTreeItems(root);\n const currentItem =\n getClosestTreeItem(root, event.target) ??\n getActiveTreeItem(root, items) ??\n items.find(item => item.tabIndex === 0);\n if (!currentItem) return;\n\n const currentIndex = items.indexOf(currentItem);\n if (currentIndex < 0) return;\n\n let nextItem: HTMLElement | null = null;\n let handled = true;\n\n switch (event.key) {\n case 'ArrowDown':\n nextItem = items[Math.min(currentIndex + 1, items.length - 1)] ?? null;\n break;\n case 'ArrowUp':\n nextItem = items[Math.max(currentIndex - 1, 0)] ?? null;\n break;\n case 'Home':\n nextItem = items[0] ?? null;\n break;\n case 'End':\n nextItem = items[items.length - 1] ?? null;\n break;\n case 'ArrowRight': {\n const trigger = getFolderTrigger(currentItem);\n if (trigger && currentItem.getAttribute('aria-expanded') !== 'true') {\n trigger.click();\n nextItem = currentItem;\n } else {\n nextItem = items[Math.min(currentIndex + 1, items.length - 1)] ?? null;\n }\n break;\n }\n case 'ArrowLeft': {\n const trigger = getFolderTrigger(currentItem);\n if (trigger && currentItem.getAttribute('aria-expanded') === 'true') {\n trigger.click();\n nextItem = currentItem;\n } else {\n nextItem = getParentTreeItem(currentItem);\n }\n break;\n }\n case 'Enter':\n case ' ':\n case 'Spacebar':\n activateTreeItem(currentItem);\n nextItem = currentItem;\n break;\n default:\n handled = false;\n }\n\n if (!handled) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n if (nextItem) {\n focusTreeItem(root, nextItem);\n }\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n const root = rootRef.current;\n if (!root) return;\n syncTreeTabStops(root, selectedId);\n }, [children, selectedId]);\n\n React.useEffect(() => {\n const root = rootRef.current;\n if (!root || typeof MutationObserver === 'undefined') return;\n\n const observer = new MutationObserver(() => {\n syncTreeTabStops(root, selectedId);\n });\n observer.observe(root, { childList: true, subtree: true });\n\n return () => {\n observer.disconnect();\n };\n }, [selectedId]);\n\n const contextValue = React.useMemo(() => ({ selectedId, onSelect, focusItem }), [selectedId, onSelect, focusItem]);\n\n return (\n <TreeProvider value={contextValue}>\n <TreeDepthProvider depth={0}>\n <ul\n ref={handleRootRef}\n role=\"tree\"\n className={cn('flex flex-col text-caption', className)}\n onKeyDown={handleKeyDown}\n >\n {children}\n </ul>\n </TreeDepthProvider>\n </TreeProvider>\n );\n },\n);\nTreeRoot.displayName = 'Tree';\n","import { TreeFile } from './tree-file';\nimport { TreeFolder } from './tree-folder';\nimport { TreeFolderContent } from './tree-folder-content';\nimport { TreeFolderTrigger } from './tree-folder-trigger';\nimport { TreeIcon } from './tree-icon';\nimport { TreeInput } from './tree-input';\nimport { TreeLabel } from './tree-label';\nimport { TreeRoot } from './tree-root';\n\nexport const Tree = Object.assign(TreeRoot, {\n Folder: TreeFolder,\n FolderTrigger: TreeFolderTrigger,\n FolderContent: TreeFolderContent,\n File: TreeFile,\n Icon: TreeIcon,\n Label: TreeLabel,\n Input: TreeInput,\n});\n"],"names":["React","jsx","cn","transitions","Collapsible","CollapsibleContent","jsxs","CollapsibleTrigger","ChevronRight","Folder","File","useIsomorphicLayoutEffect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Tree.cjs.js","sources":["../../src/ds/components/Tree/tree-context.tsx","../../src/ds/components/Tree/tree-file.tsx","../../src/ds/components/Tree/tree-folder.tsx","../../src/ds/components/Tree/tree-folder-content.tsx","../../src/ds/components/Tree/tree-folder-trigger.tsx","../../src/ds/components/Tree/tree-icon.tsx","../../src/ds/components/Tree/tree-input.tsx","../../src/ds/components/Tree/tree-label.tsx","../../src/ds/components/Tree/tree-root.tsx","../../src/ds/components/Tree/tree.tsx"],"sourcesContent":["import * as React from 'react';\n\nexport interface TreeContextValue {\n selectedId?: string;\n onSelect?: (id: string) => void;\n focusItem?: (item: HTMLElement, options?: { focus?: boolean }) => void;\n}\n\nconst TreeContext = React.createContext<TreeContextValue | null>(null);\n\nexport function TreeProvider({ children, value }: { children: React.ReactNode; value: TreeContextValue }) {\n return <TreeContext.Provider value={value}>{children}</TreeContext.Provider>;\n}\n\nexport function useTreeContext(): TreeContextValue | null {\n return React.useContext(TreeContext);\n}\n\nexport interface TreeFolderContextValue {\n isFocused: boolean;\n}\n\nconst TreeFolderContext = React.createContext<TreeFolderContextValue | null>(null);\n\nexport function TreeFolderProvider({ children, value }: { children: React.ReactNode; value: TreeFolderContextValue }) {\n return <TreeFolderContext.Provider value={value}>{children}</TreeFolderContext.Provider>;\n}\n\nexport function useTreeFolderContext(): TreeFolderContextValue | null {\n return React.useContext(TreeFolderContext);\n}\n\nconst TreeDepthContext = React.createContext<number>(0);\n\nexport function TreeDepthProvider({ children, depth }: { children: React.ReactNode; depth: number }) {\n return <TreeDepthContext.Provider value={depth}>{children}</TreeDepthContext.Provider>;\n}\n\nexport function useTreeDepth(): number {\n return React.useContext(TreeDepthContext);\n}\n","import * as React from 'react';\nimport { useTreeContext, useTreeDepth } from './tree-context';\nimport { transitions } from '@/ds/primitives/transitions';\nimport { cn } from '@/lib/utils';\n\nexport interface TreeFileProps {\n id?: string;\n className?: string;\n children: React.ReactNode;\n}\n\nexport const TreeFile = React.forwardRef<HTMLLIElement, TreeFileProps>(({ id, className, children }, ref) => {\n const treeCtx = useTreeContext();\n const depth = useTreeDepth();\n const isSelected = id != null && treeCtx?.selectedId === id;\n\n const handleClick = (e: React.MouseEvent<HTMLLIElement>) => {\n treeCtx?.focusItem?.(e.currentTarget);\n if (id != null && treeCtx?.onSelect) {\n treeCtx.onSelect(id);\n }\n };\n\n const handleFocus = (e: React.FocusEvent<HTMLLIElement>) => {\n treeCtx?.focusItem?.(e.currentTarget, { focus: false });\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if ((e.key === 'Enter' || e.key === ' ') && id != null && treeCtx?.onSelect) {\n e.preventDefault();\n treeCtx.onSelect(id);\n }\n };\n\n return (\n <li\n ref={ref}\n role=\"treeitem\"\n aria-level={depth + 1}\n aria-selected={isSelected || undefined}\n data-tree-item-kind=\"file\"\n data-tree-item-id={id}\n tabIndex={-1}\n className={cn(\n 'group flex h-7 min-w-0 cursor-pointer items-center gap-1.5 rounded-sm px-1',\n transitions.colors,\n 'outline-hidden hover:bg-fill-subtle focus-visible:bg-fill-subtle focus-visible:text-foreground focus-visible:outline-hidden',\n isSelected && 'bg-fill-hover text-foreground',\n className,\n )}\n // +18 offsets past the chevron (size-3 = 12px) + flex gap (gap-1.5 = 6px) that folders have\n style={{ paddingLeft: depth * 12 + 18 }}\n onClick={handleClick}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n >\n {children}\n </li>\n );\n});\nTreeFile.displayName = 'Tree.File';\n","import * as React from 'react';\nimport { TreeFolderProvider, useTreeContext, useTreeDepth } from './tree-context';\nimport { Collapsible } from '@/ds/components/Collapsible';\nimport { cn } from '@/lib/utils';\n\nexport interface TreeFolderProps {\n id?: string;\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n className?: string;\n children: React.ReactNode;\n}\n\nexport const TreeFolder = React.forwardRef<HTMLLIElement, TreeFolderProps>(\n ({ id, defaultOpen, open, onOpenChange, className, children }, ref) => {\n const treeCtx = useTreeContext();\n const depth = useTreeDepth();\n const [internalOpen, setInternalOpen] = React.useState(defaultOpen ?? false);\n const [isFocused, setIsFocused] = React.useState(false);\n const isOpen = open ?? internalOpen;\n\n const handleOpenChange = React.useCallback(\n (nextOpen: boolean) => {\n setInternalOpen(nextOpen);\n onOpenChange?.(nextOpen);\n },\n [onOpenChange],\n );\n\n const handleFocus = React.useCallback(\n (e: React.FocusEvent<HTMLLIElement>) => {\n if (e.target !== e.currentTarget) {\n setIsFocused(false);\n return;\n }\n\n setIsFocused(true);\n treeCtx?.focusItem?.(e.currentTarget, { focus: false });\n },\n [treeCtx],\n );\n\n const handleBlur = React.useCallback(() => {\n setIsFocused(false);\n }, []);\n\n const folderContextValue = React.useMemo(() => ({ isFocused }), [isFocused]);\n\n return (\n <li\n ref={ref}\n role=\"treeitem\"\n aria-expanded={isOpen}\n aria-level={depth + 1}\n data-tree-item-kind=\"folder\"\n data-tree-item-id={id}\n tabIndex={-1}\n className={cn('flex flex-col outline-hidden', className)}\n onFocus={handleFocus}\n onBlur={handleBlur}\n >\n <TreeFolderProvider value={folderContextValue}>\n <Collapsible open={isOpen} onOpenChange={handleOpenChange}>\n {children}\n </Collapsible>\n </TreeFolderProvider>\n </li>\n );\n },\n);\nTreeFolder.displayName = 'Tree.Folder';\n","import * as React from 'react';\nimport { useTreeDepth, TreeDepthProvider } from './tree-context';\nimport { CollapsibleContent } from '@/ds/components/Collapsible';\nimport { cn } from '@/lib/utils';\n\nexport interface TreeFolderContentProps {\n className?: string;\n children: React.ReactNode;\n}\n\nexport const TreeFolderContent = React.forwardRef<HTMLDivElement, TreeFolderContentProps>(\n ({ className, children }, ref) => {\n const depth = useTreeDepth();\n\n return (\n <CollapsibleContent ref={ref} className={cn(className)}>\n <TreeDepthProvider depth={depth + 1}>\n <ul role=\"group\" className=\"flex flex-col\">\n {children}\n </ul>\n </TreeDepthProvider>\n </CollapsibleContent>\n );\n },\n);\nTreeFolderContent.displayName = 'Tree.FolderContent';\n","import { ChevronRight } from 'lucide-react';\nimport * as React from 'react';\nimport { useTreeContext, useTreeDepth, useTreeFolderContext } from './tree-context';\nimport { CollapsibleTrigger } from '@/ds/components/Collapsible';\nimport { transitions } from '@/ds/primitives/transitions';\nimport { cn } from '@/lib/utils';\n\nexport interface TreeFolderTriggerProps {\n className?: string;\n children: React.ReactNode;\n actions?: React.ReactNode;\n}\n\nexport const TreeFolderTrigger = React.forwardRef<HTMLDivElement, TreeFolderTriggerProps>(\n ({ className, children, actions }, ref) => {\n const treeCtx = useTreeContext();\n const folderCtx = useTreeFolderContext();\n const depth = useTreeDepth();\n\n const focusFolderItem = React.useCallback(\n (target: HTMLElement, options?: { focus?: boolean }) => {\n const item = target.closest<HTMLElement>('[data-tree-item-kind=\"folder\"]');\n if (item) {\n treeCtx?.focusItem?.(item, options);\n }\n },\n [treeCtx],\n );\n\n return (\n <div\n ref={ref}\n data-tree-folder-row=\"true\"\n className={cn(\n 'group flex h-7 w-full min-w-0 items-center rounded-sm hover:bg-fill-subtle',\n transitions.colors,\n folderCtx?.isFocused && 'bg-fill-hover text-foreground',\n className,\n )}\n >\n <CollapsibleTrigger\n data-tree-folder-trigger=\"true\"\n tabIndex={-1}\n className=\"flex h-7 min-w-0 flex-1 cursor-pointer items-center gap-1.5 rounded-sm px-1 outline-hidden focus-visible:outline-hidden\"\n style={{ paddingLeft: depth * 12 }}\n onMouseDown={e => {\n e.preventDefault();\n focusFolderItem(e.currentTarget);\n }}\n onFocus={e => {\n focusFolderItem(e.currentTarget, { focus: false });\n }}\n >\n <ChevronRight aria-hidden=\"true\" className=\"size-3 shrink-0 text-muted-foreground\" />\n {children}\n </CollapsibleTrigger>\n {actions && (\n <span className=\"shrink-0 pr-1\" onClick={e => e.stopPropagation()}>\n {actions}\n </span>\n )}\n </div>\n );\n },\n);\nTreeFolderTrigger.displayName = 'Tree.FolderTrigger';\n","import * as React from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface TreeIconProps {\n className?: string;\n children: React.ReactNode;\n}\n\nexport const TreeIcon = React.forwardRef<HTMLSpanElement, TreeIconProps>(({ className, children }, ref) => (\n <span ref={ref} className={cn('flex shrink-0 items-center [&>svg]:size-3.5', className)}>\n {children}\n </span>\n));\nTreeIcon.displayName = 'Tree.Icon';\n","import { File, Folder } from 'lucide-react';\nimport * as React from 'react';\nimport { useTreeDepth } from './tree-context';\nimport { transitions } from '@/ds/primitives/transitions';\nimport { cn } from '@/lib/utils';\n\nexport interface TreeInputProps {\n type: 'file' | 'folder';\n onSubmit: (name: string) => void;\n onCancel?: () => void;\n defaultValue?: string;\n placeholder?: string;\n autoFocus?: boolean;\n className?: string;\n}\n\nexport const TreeInput = React.forwardRef<HTMLLIElement, TreeInputProps>(\n ({ type, onSubmit, onCancel, defaultValue = '', placeholder, autoFocus = true, className }, ref) => {\n const depth = useTreeDepth();\n const inputRef = React.useRef<HTMLInputElement>(null);\n const submittedRef = React.useRef(false);\n\n const handleSubmit = React.useCallback(\n (value: string) => {\n if (submittedRef.current) return;\n const trimmed = value.trim();\n if (trimmed) {\n submittedRef.current = true;\n onSubmit(trimmed);\n } else {\n onCancel?.();\n }\n },\n [onSubmit, onCancel],\n );\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n handleSubmit(e.currentTarget.value);\n } else if (e.key === 'Escape') {\n e.preventDefault();\n onCancel?.();\n }\n },\n [handleSubmit, onCancel],\n );\n\n const handleBlur = React.useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n handleSubmit(e.currentTarget.value);\n },\n [handleSubmit],\n );\n\n const handleFocus = React.useCallback((e: React.FocusEvent<HTMLInputElement>) => {\n e.currentTarget.select();\n }, []);\n\n const Icon = type === 'folder' ? Folder : File;\n\n return (\n <li\n ref={ref}\n role=\"treeitem\"\n aria-level={depth + 1}\n data-tree-item-kind=\"input\"\n className={cn(\n 'group flex h-7 min-w-0 items-center gap-1.5 rounded-sm px-1',\n transitions.colors,\n 'focus-within:bg-fill-subtle focus-within:text-foreground focus-within:outline-hidden',\n className,\n )}\n style={{ paddingLeft: depth * 12 + 18 }}\n >\n <span className=\"flex shrink-0 items-center [&>svg]:size-3.5\">\n <Icon className=\"text-muted-foreground\" />\n </span>\n <input\n ref={inputRef}\n type=\"text\"\n defaultValue={defaultValue}\n placeholder={placeholder}\n autoFocus={autoFocus}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n onFocus={handleFocus}\n className=\"min-w-0 flex-1 border-none bg-transparent text-caption text-foreground outline-hidden placeholder:text-muted-foreground\"\n />\n </li>\n );\n },\n);\nTreeInput.displayName = 'Tree.Input';\n","import * as React from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface TreeLabelProps {\n className?: string;\n children: React.ReactNode;\n}\n\nexport const TreeLabel = React.forwardRef<HTMLSpanElement, TreeLabelProps>(({ className, children }, ref) => (\n <span ref={ref} className={cn('truncate text-foreground', className)}>\n {children}\n </span>\n));\nTreeLabel.displayName = 'Tree.Label';\n","import * as React from 'react';\nimport { TreeProvider, TreeDepthProvider } from './tree-context';\nimport { useIsomorphicLayoutEffect } from '@/hooks/use-isomorphic-layout-effect';\nimport { cn } from '@/lib/utils';\n\nconst TREE_FOCUSABLE_ITEM_SELECTOR = '[data-tree-item-kind=\"folder\"], [data-tree-item-kind=\"file\"]';\nconst TREE_FOLDER_TRIGGER_SELECTOR = '[data-tree-folder-trigger=\"true\"]';\n\nexport interface TreeRootProps {\n selectedId?: string;\n onSelect?: (id: string) => void;\n className?: string;\n children: React.ReactNode;\n}\n\nfunction assignRef<T>(ref: React.ForwardedRef<T>, value: T | null) {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref) {\n ref.current = value;\n }\n}\n\nfunction getTreeItems(root: HTMLElement): HTMLElement[] {\n return Array.from(root.querySelectorAll<HTMLElement>(TREE_FOCUSABLE_ITEM_SELECTOR)).filter(\n item => item.getAttribute('role') === 'treeitem',\n );\n}\n\nfunction setTabStops(items: HTMLElement[], focusableItem: HTMLElement) {\n for (const item of items) {\n item.tabIndex = item === focusableItem ? 0 : -1;\n }\n}\n\nfunction syncTreeItemSetMetadata(root: HTMLElement) {\n const groups = [root, ...Array.from(root.querySelectorAll<HTMLElement>('[role=\"group\"]'))];\n\n for (const group of groups) {\n const items = Array.from(group.children).filter(\n (child): child is HTMLElement =>\n child instanceof HTMLElement &&\n child.getAttribute('role') === 'treeitem' &&\n child.hasAttribute('data-tree-item-kind'),\n );\n\n items.forEach((item, index) => {\n item.setAttribute('aria-posinset', String(index + 1));\n item.setAttribute('aria-setsize', String(items.length));\n });\n }\n}\n\nfunction findSelectedItem(items: HTMLElement[], selectedId: string | undefined): HTMLElement | null {\n if (!selectedId) return null;\n return items.find(item => item.dataset.treeItemId === selectedId) ?? null;\n}\n\nfunction getActiveTreeItem(root: HTMLElement, items: HTMLElement[]): HTMLElement | null {\n const activeElement = root.ownerDocument.activeElement;\n if (!(activeElement instanceof HTMLElement) || !root.contains(activeElement)) return null;\n\n const activeItem = activeElement.closest<HTMLElement>(TREE_FOCUSABLE_ITEM_SELECTOR);\n return activeItem && items.includes(activeItem) ? activeItem : null;\n}\n\nfunction getClosestTreeItem(root: HTMLElement, target: EventTarget | null): HTMLElement | null {\n if (!(target instanceof HTMLElement) || !root.contains(target)) return null;\n const item = target.closest<HTMLElement>(TREE_FOCUSABLE_ITEM_SELECTOR);\n return item?.getAttribute('role') === 'treeitem' ? item : null;\n}\n\nfunction focusTreeItem(root: HTMLElement, item: HTMLElement, options: { focus?: boolean } = {}) {\n const items = getTreeItems(root);\n if (!items.includes(item)) return;\n\n setTabStops(items, item);\n if (options.focus !== false) {\n item.focus();\n }\n}\n\nfunction syncTreeTabStops(root: HTMLElement, selectedId: string | undefined) {\n const items = getTreeItems(root);\n syncTreeItemSetMetadata(root);\n\n const firstItem = items[0];\n if (!firstItem) return;\n\n const activeItem = getActiveTreeItem(root, items);\n const selectedItem = findSelectedItem(items, selectedId);\n setTabStops(items, activeItem ?? selectedItem ?? firstItem);\n}\n\nfunction isEditableTarget(target: EventTarget | null): boolean {\n if (!(target instanceof HTMLElement)) return false;\n if (target.dataset.treeFolderTrigger === 'true') return false;\n if (target.isContentEditable) return true;\n\n return !!target.closest('input, textarea, select, button, [contenteditable=\"true\"]');\n}\n\nfunction getFolderTrigger(item: HTMLElement): HTMLButtonElement | null {\n return item.querySelector<HTMLButtonElement>(TREE_FOLDER_TRIGGER_SELECTOR);\n}\n\nfunction getParentTreeItem(item: HTMLElement): HTMLElement | null {\n const parentGroup = item.parentElement?.closest('[role=\"group\"]');\n return parentGroup?.closest<HTMLElement>(TREE_FOCUSABLE_ITEM_SELECTOR) ?? null;\n}\n\nfunction activateTreeItem(item: HTMLElement) {\n const trigger = getFolderTrigger(item);\n if (trigger) {\n trigger.click();\n } else {\n item.click();\n }\n}\n\nexport const TreeRoot = React.forwardRef<HTMLUListElement, TreeRootProps>(\n ({ selectedId, onSelect, className, children }, ref) => {\n const rootRef = React.useRef<HTMLUListElement | null>(null);\n\n const handleRootRef = React.useCallback(\n (node: HTMLUListElement | null) => {\n rootRef.current = node;\n assignRef(ref, node);\n },\n [ref],\n );\n\n const focusItem = React.useCallback((item: HTMLElement, options?: { focus?: boolean }) => {\n const root = rootRef.current;\n if (!root) return;\n focusTreeItem(root, item, options);\n }, []);\n\n const handleKeyDown = React.useCallback((event: React.KeyboardEvent<HTMLUListElement>) => {\n if (event.defaultPrevented || isEditableTarget(event.target)) return;\n\n const root = rootRef.current;\n if (!root) return;\n\n const items = getTreeItems(root);\n const currentItem =\n getClosestTreeItem(root, event.target) ??\n getActiveTreeItem(root, items) ??\n items.find(item => item.tabIndex === 0);\n if (!currentItem) return;\n\n const currentIndex = items.indexOf(currentItem);\n if (currentIndex < 0) return;\n\n let nextItem: HTMLElement | null = null;\n let handled = true;\n\n switch (event.key) {\n case 'ArrowDown':\n nextItem = items[Math.min(currentIndex + 1, items.length - 1)] ?? null;\n break;\n case 'ArrowUp':\n nextItem = items[Math.max(currentIndex - 1, 0)] ?? null;\n break;\n case 'Home':\n nextItem = items[0] ?? null;\n break;\n case 'End':\n nextItem = items[items.length - 1] ?? null;\n break;\n case 'ArrowRight': {\n const trigger = getFolderTrigger(currentItem);\n if (trigger && currentItem.getAttribute('aria-expanded') !== 'true') {\n trigger.click();\n nextItem = currentItem;\n } else {\n nextItem = items[Math.min(currentIndex + 1, items.length - 1)] ?? null;\n }\n break;\n }\n case 'ArrowLeft': {\n const trigger = getFolderTrigger(currentItem);\n if (trigger && currentItem.getAttribute('aria-expanded') === 'true') {\n trigger.click();\n nextItem = currentItem;\n } else {\n nextItem = getParentTreeItem(currentItem);\n }\n break;\n }\n case 'Enter':\n case ' ':\n case 'Spacebar':\n activateTreeItem(currentItem);\n nextItem = currentItem;\n break;\n default:\n handled = false;\n }\n\n if (!handled) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n if (nextItem) {\n focusTreeItem(root, nextItem);\n }\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n const root = rootRef.current;\n if (!root) return;\n syncTreeTabStops(root, selectedId);\n }, [children, selectedId]);\n\n React.useEffect(() => {\n const root = rootRef.current;\n if (!root || typeof MutationObserver === 'undefined') return;\n\n const observer = new MutationObserver(() => {\n syncTreeTabStops(root, selectedId);\n });\n observer.observe(root, { childList: true, subtree: true });\n\n return () => {\n observer.disconnect();\n };\n }, [selectedId]);\n\n const contextValue = React.useMemo(() => ({ selectedId, onSelect, focusItem }), [selectedId, onSelect, focusItem]);\n\n return (\n <TreeProvider value={contextValue}>\n <TreeDepthProvider depth={0}>\n <ul\n ref={handleRootRef}\n role=\"tree\"\n className={cn('flex flex-col text-caption', className)}\n onKeyDown={handleKeyDown}\n >\n {children}\n </ul>\n </TreeDepthProvider>\n </TreeProvider>\n );\n },\n);\nTreeRoot.displayName = 'Tree';\n","import { TreeFile } from './tree-file';\nimport { TreeFolder } from './tree-folder';\nimport { TreeFolderContent } from './tree-folder-content';\nimport { TreeFolderTrigger } from './tree-folder-trigger';\nimport { TreeIcon } from './tree-icon';\nimport { TreeInput } from './tree-input';\nimport { TreeLabel } from './tree-label';\nimport { TreeRoot } from './tree-root';\n\nexport const Tree = Object.assign(TreeRoot, {\n Folder: TreeFolder,\n FolderTrigger: TreeFolderTrigger,\n FolderContent: TreeFolderContent,\n File: TreeFile,\n Icon: TreeIcon,\n Label: TreeLabel,\n Input: TreeInput,\n});\n"],"names":["React","jsx","cn","transitions","Collapsible","CollapsibleContent","jsxs","CollapsibleTrigger","ChevronRight","Folder","File","useIsomorphicLayoutEffect"],"mappings":"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"}
|