@mastra/playground-ui 67.0.0 → 68.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{ActionRow-BfK77pCT.cjs → ActionRow-BlC9GAef.cjs} +4 -4
- package/dist/ActionRow-BlC9GAef.cjs.map +1 -0
- package/dist/{ActionRow-Cd6tOC2K.js → ActionRow-DCrRCvBq.js} +4 -4
- package/dist/ActionRow-DCrRCvBq.js.map +1 -0
- package/dist/{Button-Bw1e3ONi.js → Button-CLXTbAY8.js} +42 -13
- package/dist/Button-CLXTbAY8.js.map +1 -0
- package/dist/{Button-YQRflC47.cjs → Button-DLcMcuUL.cjs} +58 -11
- package/dist/Button-DLcMcuUL.cjs.map +1 -0
- package/dist/{CodeEditor-CJ9jC9lu.cjs → CodeEditor-CLzs0yVc.cjs} +4 -4
- package/dist/{CodeEditor-CJ9jC9lu.cjs.map → CodeEditor-CLzs0yVc.cjs.map} +1 -1
- package/dist/{CodeEditor-CPVxj7WS.js → CodeEditor-COnz9c6B.js} +4 -4
- package/dist/{CodeEditor-CPVxj7WS.js.map → CodeEditor-COnz9c6B.js.map} +1 -1
- package/dist/{Comment-VFJq2wRp.js → Comment-0n98b_f_.js} +3 -3
- package/dist/{Comment-VFJq2wRp.js.map → Comment-0n98b_f_.js.map} +1 -1
- package/dist/{Comment-KYUQzeSu.cjs → Comment-Cg0f7eLa.cjs} +3 -3
- package/dist/{Comment-KYUQzeSu.cjs.map → Comment-Cg0f7eLa.cjs.map} +1 -1
- package/dist/{DataCodeSection-CZRPsStI.cjs → DataCodeSection-CcPmJPTp.cjs} +8 -8
- package/dist/{DataCodeSection-CZRPsStI.cjs.map → DataCodeSection-CcPmJPTp.cjs.map} +1 -1
- package/dist/{DataCodeSection-Ckd47p_S.js → DataCodeSection-KJRyRD1Q.js} +6 -6
- package/dist/{DataCodeSection-Ckd47p_S.js.map → DataCodeSection-KJRyRD1Q.js.map} +1 -1
- package/dist/{DataDetailsPanel-_CK0Huk6.js → DataDetailsPanel-CohEKPm4.js} +5 -5
- package/dist/{DataDetailsPanel-_CK0Huk6.js.map → DataDetailsPanel-CohEKPm4.js.map} +1 -1
- package/dist/{DataDetailsPanel-DFhM9H5D.cjs → DataDetailsPanel-DiyjEXqK.cjs} +6 -6
- package/dist/{DataDetailsPanel-DFhM9H5D.cjs.map → DataDetailsPanel-DiyjEXqK.cjs.map} +1 -1
- package/dist/{DataList-2tIlQsLc.js → DataList-CUhRQAv6.js} +2 -2
- package/dist/{DataList-2tIlQsLc.js.map → DataList-CUhRQAv6.js.map} +1 -1
- package/dist/{DataList-Czwmwyvp.cjs → DataList-Cj0mfk19.cjs} +2 -2
- package/dist/{DataList-Czwmwyvp.cjs.map → DataList-Cj0mfk19.cjs.map} +1 -1
- package/dist/{DataPanel-CY1W5LHJ.js → DataPanel-Bv4M17xO.js} +3 -3
- package/dist/{DataPanel-CY1W5LHJ.js.map → DataPanel-Bv4M17xO.js.map} +1 -1
- package/dist/{DataPanel-C0Ll76Ne.cjs → DataPanel-BwB1Oifd.cjs} +3 -3
- package/dist/{DataPanel-C0Ll76Ne.cjs.map → DataPanel-BwB1Oifd.cjs.map} +1 -1
- package/dist/{Dialog-CjaiCrkv.cjs → Dialog-BvWF9HE-.cjs} +2 -2
- package/dist/{Dialog-CjaiCrkv.cjs.map → Dialog-BvWF9HE-.cjs.map} +1 -1
- package/dist/{Dialog-CKtTR8h3.js → Dialog-DaWtxwd9.js} +2 -2
- package/dist/{Dialog-CKtTR8h3.js.map → Dialog-DaWtxwd9.js.map} +1 -1
- package/dist/{ErrorBoundary-Bm0LL_b7.cjs → ErrorBoundary-B5GjmA6V.cjs} +2 -2
- package/dist/{ErrorBoundary-Bm0LL_b7.cjs.map → ErrorBoundary-B5GjmA6V.cjs.map} +1 -1
- package/dist/{ErrorBoundary-95_6A77S.js → ErrorBoundary-Cat3KU86.js} +2 -2
- package/dist/{ErrorBoundary-95_6A77S.js.map → ErrorBoundary-Cat3KU86.js.map} +1 -1
- package/dist/{FilterBar--4oguuVe.js → FilterBar-BO-vvvyq.js} +18 -22
- package/dist/FilterBar-BO-vvvyq.js.map +1 -0
- package/dist/{FilterBar-BUd4f7oi.cjs → FilterBar-Buw0tv51.cjs} +18 -22
- package/dist/FilterBar-Buw0tv51.cjs.map +1 -0
- package/dist/KnowledgePageGraph.css +11 -0
- package/dist/{LogsDataList-Cslabh8K.js → LogsDataList-BI2C5OJz.js} +2 -2
- package/dist/{LogsDataList-Cslabh8K.js.map → LogsDataList-BI2C5OJz.js.map} +1 -1
- package/dist/{LogsDataList-DMmxAt_t.cjs → LogsDataList-CCIfUPGo.cjs} +2 -2
- package/dist/{LogsDataList-DMmxAt_t.cjs.map → LogsDataList-CCIfUPGo.cjs.map} +1 -1
- package/dist/{MarkdownRenderer-DME2xKTk.js → MarkdownRenderer-2GOXQJEv.js} +3 -3
- package/dist/{MarkdownRenderer-DME2xKTk.js.map → MarkdownRenderer-2GOXQJEv.js.map} +1 -1
- package/dist/{MarkdownRenderer-CS6u5drO.cjs → MarkdownRenderer-CB8Z_CHc.cjs} +4 -4
- package/dist/{MarkdownRenderer-CS6u5drO.cjs.map → MarkdownRenderer-CB8Z_CHc.cjs.map} +1 -1
- package/dist/{Message-nVI6tMS3.js → Message-CWzi5F_Q.js} +2 -2
- package/dist/{Message-nVI6tMS3.js.map → Message-CWzi5F_Q.js.map} +1 -1
- package/dist/{Message-DsCNQpou.cjs → Message-jj56lxNL.cjs} +2 -2
- package/dist/{Message-DsCNQpou.cjs.map → Message-jj56lxNL.cjs.map} +1 -1
- package/dist/{Notice-CyKngbbv.js → Notice-C-8oOZZF.js} +2 -2
- package/dist/{Notice-CyKngbbv.js.map → Notice-C-8oOZZF.js.map} +1 -1
- package/dist/{Notice-DWNeCe-t.cjs → Notice-JZ7SW7q6.cjs} +2 -2
- package/dist/{Notice-DWNeCe-t.cjs.map → Notice-JZ7SW7q6.cjs.map} +1 -1
- package/dist/{Workflow-BVWvgDmI.js → Workflow-C3SlEdP-.js} +5 -5
- package/dist/{Workflow-BVWvgDmI.js.map → Workflow-C3SlEdP-.js.map} +1 -1
- package/dist/{Workflow-BeF6pIO9.cjs → Workflow-DSWQ-ROz.cjs} +5 -5
- package/dist/{Workflow-BeF6pIO9.cjs.map → Workflow-DSWQ-ROz.cjs.map} +1 -1
- package/dist/{activity-DAK8tj7r.cjs → activity-DyB5H3gF.cjs} +2 -2
- package/dist/{activity-DAK8tj7r.cjs.map → activity-DyB5H3gF.cjs.map} +1 -1
- package/dist/{activity-CM34JyW-.js → activity-rJ1NQl_2.js} +2 -2
- package/dist/{activity-CM34JyW-.js.map → activity-rJ1NQl_2.js.map} +1 -1
- package/dist/{ask-user-BdjH9F7G.js → ask-user-B225wzWc.js} +2 -2
- package/dist/{ask-user-BdjH9F7G.js.map → ask-user-B225wzWc.js.map} +1 -1
- package/dist/{ask-user-C82m_G9W.cjs → ask-user-DdYz56qH.cjs} +2 -2
- package/dist/{ask-user-C82m_G9W.cjs.map → ask-user-DdYz56qH.cjs.map} +1 -1
- package/dist/buttons-group-Dc6R7YSs.cjs +48 -0
- package/dist/buttons-group-Dc6R7YSs.cjs.map +1 -0
- package/dist/buttons-group-DkFlnMiL.js +35 -0
- package/dist/buttons-group-DkFlnMiL.js.map +1 -0
- package/dist/{ButtonsGroup.css → buttons-group.css} +2 -0
- package/dist/clear-filters-button-Buc973vw.cjs +27 -0
- package/dist/clear-filters-button-Buc973vw.cjs.map +1 -0
- package/dist/clear-filters-button-CNrRuHOY.js +22 -0
- package/dist/clear-filters-button-CNrRuHOY.js.map +1 -0
- package/dist/{combobox-8kNAJFlj.cjs → combobox-CMx2ayFN.cjs} +3 -3
- package/dist/{combobox-8kNAJFlj.cjs.map → combobox-CMx2ayFN.cjs.map} +1 -1
- package/dist/{combobox-wFudhN8F.js → combobox-CtCK0mNx.js} +3 -3
- package/dist/{combobox-wFudhN8F.js.map → combobox-CtCK0mNx.js.map} +1 -1
- package/dist/{combobox-parts-W7KRQUsV.js → combobox-parts-C1CugUAU.js} +11 -19
- package/dist/combobox-parts-C1CugUAU.js.map +1 -0
- package/dist/{combobox-parts-BZVXwbG7.cjs → combobox-parts-ScKcYjMR.cjs} +10 -18
- package/dist/combobox-parts-ScKcYjMR.cjs.map +1 -0
- package/dist/components/ActionRow.cjs.js +1 -1
- package/dist/components/ActionRow.es.js +1 -1
- package/dist/components/AlertDialog.cjs.js +2 -2
- package/dist/components/AlertDialog.es.js +2 -2
- package/dist/components/Button.cjs.js +4 -1
- package/dist/components/Button.es.js +2 -2
- package/dist/components/ButtonsGroup.cjs.js +3 -38
- package/dist/components/ButtonsGroup.es.js +1 -35
- package/dist/components/ClampedText.cjs.js +1 -1
- package/dist/components/ClampedText.es.js +1 -1
- package/dist/components/ClearFiltersButton.cjs.js +3 -0
- package/dist/components/ClearFiltersButton.d.ts +1 -0
- package/dist/components/ClearFiltersButton.es.js +1 -0
- package/dist/components/CodeBlock.cjs.js +3 -3
- package/dist/components/CodeBlock.es.js +3 -3
- package/dist/components/CodeEditor.cjs.js +1 -1
- package/dist/components/CodeEditor.es.js +1 -1
- package/dist/components/CollapsibleBox.cjs.js +1 -1
- package/dist/components/CollapsibleBox.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 +3 -2
- package/dist/components/Command.cjs.js.map +1 -1
- package/dist/components/Command.es.js +3 -2
- package/dist/components/Command.es.js.map +1 -1
- package/dist/components/Comment.cjs.js +1 -1
- package/dist/components/Comment.es.js +1 -1
- package/dist/components/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 +1 -1
- package/dist/components/DataDetailsPanel.es.js +1 -1
- package/dist/components/DataList.cjs.js +3 -3
- package/dist/components/DataList.es.js +3 -3
- package/dist/components/DataPanel.cjs.js +1 -1
- package/dist/components/DataPanel.es.js +1 -1
- package/dist/components/DateRangeTimeline.cjs.js +1 -1
- package/dist/components/DateRangeTimeline.es.js +1 -1
- package/dist/components/DateTimePicker.cjs.js +2 -2
- package/dist/components/DateTimePicker.es.js +2 -2
- package/dist/components/DateTimeRangePicker.cjs.js +2 -2
- package/dist/components/DateTimeRangePicker.es.js +1 -1
- package/dist/components/Dialog.cjs.js +1 -1
- package/dist/components/Dialog.es.js +1 -1
- 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 +7 -2
- package/dist/components/FilterBar.es.js +4 -3
- package/dist/components/FormFieldBlocks.cjs.js +2 -2
- package/dist/components/FormFieldBlocks.es.js +2 -2
- package/dist/components/InputGroup.cjs.js +1 -1
- package/dist/components/InputGroup.es.js +1 -1
- package/dist/components/InputNumber.cjs.js +2 -2
- package/dist/components/InputNumber.es.js +2 -2
- 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 -2
- package/dist/components/LogsDataList.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/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 +3 -3
- package/dist/components/RuleBuilder.cjs.js +2 -2
- package/dist/components/RuleBuilder.es.js +2 -2
- package/dist/components/SavedViews.cjs.js +4 -3
- package/dist/components/SavedViews.cjs.js.map +1 -1
- package/dist/components/SavedViews.es.js +4 -3
- package/dist/components/SavedViews.es.js.map +1 -1
- package/dist/components/SearchInput.cjs.js +5 -2
- package/dist/components/SearchInput.cjs.js.map +1 -1
- package/dist/components/SearchInput.es.js +5 -2
- package/dist/components/SearchInput.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 +5 -5
- package/dist/components/SideDialog.cjs.js.map +1 -1
- package/dist/components/SideDialog.es.js +4 -4
- package/dist/components/Sidebar.cjs.js +3 -3
- package/dist/components/Sidebar.es.js +3 -3
- package/dist/components/Tabs.cjs.js +2 -2
- package/dist/components/Tabs.es.js +2 -2
- package/dist/components/ThreadList.cjs.js +1 -1
- package/dist/components/ThreadList.es.js +1 -1
- package/dist/components/Toaster.cjs.js +2 -2
- package/dist/components/Toaster.es.js +2 -2
- package/dist/components/Truncate.cjs.js +1 -1
- package/dist/components/Truncate.es.js +1 -1
- package/dist/components/Workflow.cjs.js +1 -1
- package/dist/components/Workflow.es.js +1 -1
- package/dist/components/ai/activity.cjs.js +1 -1
- package/dist/components/ai/activity.es.js +1 -1
- package/dist/components/ai/ask-user.cjs.js +1 -1
- package/dist/components/ai/ask-user.es.js +1 -1
- package/dist/components/ai/plan.cjs.js +2 -2
- package/dist/components/ai/plan.es.js +2 -2
- 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 +2 -2
- package/dist/components/ai/tool-call.es.js +2 -2
- package/dist/{copy-button-CF-X4iDj.js → copy-button-BXrbevLn.js} +2 -2
- package/dist/{copy-button-CF-X4iDj.js.map → copy-button-BXrbevLn.js.map} +1 -1
- package/dist/{copy-button-BYEFKNpo.cjs → copy-button-DJAQ6_3o.cjs} +2 -2
- package/dist/{copy-button-BYEFKNpo.cjs.map → copy-button-DJAQ6_3o.cjs.map} +1 -1
- package/dist/{data-list-BkimqE_P.cjs → data-list-C4Vmq5HA.cjs} +2 -2
- package/dist/{data-list-BkimqE_P.cjs.map → data-list-C4Vmq5HA.cjs.map} +1 -1
- package/dist/{data-list-evmf5xWI.js → data-list-DHCOoLmj.js} +2 -2
- package/dist/{data-list-evmf5xWI.js.map → data-list-DHCOoLmj.js.map} +1 -1
- package/dist/{DateTimeRangePicker-HmPOHwAQ.cjs → date-time-range-picker-CTt7Od0P.cjs} +71 -57
- package/dist/date-time-range-picker-CTt7Od0P.cjs.map +1 -0
- package/dist/{DateTimeRangePicker-C_Lie_2P.js → date-time-range-picker-DKh1K9Iy.js} +72 -58
- package/dist/date-time-range-picker-DKh1K9Iy.js.map +1 -0
- package/dist/domains/auth/components/session-expired.cjs.js +2 -2
- package/dist/domains/auth/components/session-expired.es.js +2 -2
- package/dist/domains/chat/activity/activity-stretch-line.cjs.js +1 -1
- package/dist/domains/chat/activity/activity-stretch-line.es.js +1 -1
- package/dist/domains/chat/activity/components/activity-fold.cjs.js +1 -1
- package/dist/domains/chat/activity/components/activity-fold.es.js +1 -1
- package/dist/domains/chat/activity/components/activity-timed-trigger.cjs.js +1 -1
- package/dist/domains/chat/activity/components/activity-timed-trigger.es.js +1 -1
- package/dist/domains/chat/activity/components/calls-panel.cjs.js +1 -1
- package/dist/domains/chat/activity/components/calls-panel.es.js +1 -1
- package/dist/domains/chat/activity/components/stretch-content.cjs.js +1 -1
- package/dist/domains/chat/activity/components/stretch-content.es.js +1 -1
- package/dist/domains/chat/activity/components/stretch-thought.cjs.js +1 -1
- package/dist/domains/chat/activity/components/stretch-thought.es.js +1 -1
- package/dist/domains/chat/activity/model/activity-segments.cjs.js +1 -1
- package/dist/domains/chat/activity/model/activity-segments.es.js +1 -1
- package/dist/domains/chat/activity/model/activity-words.cjs.js +2 -2
- package/dist/domains/chat/activity/model/activity-words.es.js +2 -2
- package/dist/domains/chat/attachments/attachment-preview-dialog.cjs.js +2 -2
- package/dist/domains/chat/attachments/attachment-preview-dialog.es.js +2 -2
- package/dist/domains/chat/attachments/composer-attachment.cjs.js +1 -1
- package/dist/domains/chat/attachments/composer-attachment.es.js +1 -1
- package/dist/domains/chat/components/badge-wrapper.cjs.js +1 -1
- package/dist/domains/chat/components/badge-wrapper.es.js +1 -1
- package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js +3 -3
- package/dist/domains/chat/components/network-choice-metadata-dialog.es.js +3 -3
- package/dist/domains/chat/knowledge/knowledge-links.cjs.js +40 -0
- package/dist/domains/chat/knowledge/knowledge-links.cjs.js.map +1 -0
- package/dist/domains/chat/knowledge/knowledge-links.d.ts +1 -0
- package/dist/domains/chat/knowledge/knowledge-links.es.js +38 -0
- package/dist/domains/chat/knowledge/knowledge-links.es.js.map +1 -0
- package/dist/domains/chat/knowledge/pinned-knowledge-data.cjs.js +79 -0
- package/dist/domains/chat/knowledge/pinned-knowledge-data.cjs.js.map +1 -0
- package/dist/domains/chat/knowledge/pinned-knowledge-data.d.ts +1 -0
- package/dist/domains/chat/knowledge/pinned-knowledge-data.es.js +77 -0
- package/dist/domains/chat/knowledge/pinned-knowledge-data.es.js.map +1 -0
- package/dist/domains/chat/knowledge/pinned-knowledge.cjs.js +124 -0
- package/dist/domains/chat/knowledge/pinned-knowledge.cjs.js.map +1 -0
- package/dist/domains/chat/knowledge/pinned-knowledge.d.ts +1 -0
- package/dist/domains/chat/knowledge/pinned-knowledge.es.js +123 -0
- package/dist/domains/chat/knowledge/pinned-knowledge.es.js.map +1 -0
- package/dist/domains/chat/knowledge.cjs.js +12 -0
- package/dist/domains/chat/knowledge.d.ts +1 -0
- package/dist/domains/chat/knowledge.es.js +5 -0
- 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 +4 -4
- package/dist/domains/chat/messages/message-row.es.js +4 -4
- 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/reasoning-content.cjs.js +1 -1
- package/dist/domains/chat/messages/reasoning-content.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/signal-badge.cjs.js +8 -1
- package/dist/domains/chat/messages/signal-badge.cjs.js.map +1 -1
- package/dist/domains/chat/messages/signal-badge.es.js +8 -1
- package/dist/domains/chat/messages/signal-badge.es.js.map +1 -1
- package/dist/domains/chat/messages/skill-message.cjs.js +2 -2
- package/dist/domains/chat/messages/skill-message.es.js +2 -2
- package/dist/domains/chat/messages/system-reminder-badge.cjs.js +1 -1
- package/dist/domains/chat/messages/system-reminder-badge.es.js +1 -1
- package/dist/domains/chat/messages/tripwire-notice.cjs.js +2 -2
- package/dist/domains/chat/messages/tripwire-notice.es.js +2 -2
- package/dist/domains/chat/tools/badges/agent-badge-wrapper.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/agent-badge-wrapper.es.js +1 -1
- package/dist/domains/chat/tools/badges/agent-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/agent-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/ask-user-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/ask-user-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/background-task-metadata-dialog.cjs.js +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 +1 -1
- package/dist/domains/chat/tools/badges/code-mode-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/file-tree-badge.cjs.js +2 -2
- package/dist/domains/chat/tools/badges/file-tree-badge.es.js +2 -2
- package/dist/domains/chat/tools/badges/knowledge-tool-badge.cjs.js +273 -0
- package/dist/domains/chat/tools/badges/knowledge-tool-badge.cjs.js.map +1 -0
- package/dist/domains/chat/tools/badges/knowledge-tool-badge.d.ts +1 -0
- package/dist/domains/chat/tools/badges/knowledge-tool-badge.es.js +270 -0
- package/dist/domains/chat/tools/badges/knowledge-tool-badge.es.js.map +1 -0
- package/dist/domains/chat/tools/badges/mcp-task-chip.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/mcp-task-chip.es.js +1 -1
- 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-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/tool-approval-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/tool-badge.cjs.js +4 -4
- package/dist/domains/chat/tools/badges/tool-badge.es.js +4 -4
- package/dist/domains/chat/tools/badges/workflow-badge.cjs.js +4 -4
- package/dist/domains/chat/tools/badges/workflow-badge.es.js +4 -4
- package/dist/domains/chat/tools/connect-prompt-tool.cjs.js +3 -3
- package/dist/domains/chat/tools/connect-prompt-tool.es.js +3 -3
- package/dist/domains/chat/tools/submit-plan-tool.cjs.js +1 -1
- package/dist/domains/chat/tools/submit-plan-tool.es.js +1 -1
- package/dist/domains/chat/tools/tool-card-kind.cjs.js +4 -2
- package/dist/domains/chat/tools/tool-card-kind.cjs.js.map +1 -1
- package/dist/domains/chat/tools/tool-card-kind.es.js +4 -2
- package/dist/domains/chat/tools/tool-card-kind.es.js.map +1 -1
- package/dist/domains/chat/tools/tool-card.cjs.js +1 -1
- package/dist/domains/chat/tools/tool-card.es.js +1 -1
- package/dist/domains/chat/tools/tool-groups.cjs.js +3 -2
- package/dist/domains/chat/tools/tool-groups.cjs.js.map +1 -1
- package/dist/domains/chat/tools/tool-groups.es.js +3 -2
- package/dist/domains/chat/tools/tool-groups.es.js.map +1 -1
- package/dist/domains/chat.cjs.js +11 -0
- package/dist/domains/chat.es.js +5 -1
- package/dist/domains/dashboards/components/dashboard-renderer.cjs.js +1 -1
- package/dist/domains/dashboards/components/dashboard-renderer.es.js +1 -1
- package/dist/domains/datasets/components/add-dataset-item-dialog/add-dataset-item-dialog.cjs.js +4 -4
- package/dist/domains/datasets/components/add-dataset-item-dialog/add-dataset-item-dialog.es.js +4 -4
- package/dist/domains/datasets/components/add-dataset-item-dialog/dataset-picker.cjs.js +1 -1
- package/dist/domains/datasets/components/add-dataset-item-dialog/dataset-picker.es.js +1 -1
- package/dist/domains/datasets/components/add-dataset-item-dialog/trajectory-editor.cjs.js +3 -3
- package/dist/domains/datasets/components/add-dataset-item-dialog/trajectory-editor.es.js +3 -3
- package/dist/domains/datasets/components/save-as-dataset-item-dialog.cjs.js +5 -5
- package/dist/domains/datasets/components/save-as-dataset-item-dialog.es.js +5 -5
- package/dist/domains/knowledge/components/KnowledgePageDetail.cjs.js +438 -0
- package/dist/domains/knowledge/components/KnowledgePageDetail.cjs.js.map +1 -0
- package/dist/domains/knowledge/components/KnowledgePageDetail.d.ts +1 -0
- package/dist/domains/knowledge/components/KnowledgePageDetail.es.js +436 -0
- package/dist/domains/knowledge/components/KnowledgePageDetail.es.js.map +1 -0
- package/dist/domains/knowledge/components/KnowledgePageExplorer.cjs.js +521 -0
- package/dist/domains/knowledge/components/KnowledgePageExplorer.cjs.js.map +1 -0
- package/dist/domains/knowledge/components/KnowledgePageExplorer.d.ts +1 -0
- package/dist/domains/knowledge/components/KnowledgePageExplorer.es.js +520 -0
- package/dist/domains/knowledge/components/KnowledgePageExplorer.es.js.map +1 -0
- package/dist/domains/knowledge/components/KnowledgePageGraph.cjs.js +626 -0
- package/dist/domains/knowledge/components/KnowledgePageGraph.cjs.js.map +1 -0
- package/dist/domains/knowledge/components/KnowledgePageGraph.d.ts +1 -0
- package/dist/domains/knowledge/components/KnowledgePageGraph.es.js +625 -0
- package/dist/domains/knowledge/components/KnowledgePageGraph.es.js.map +1 -0
- package/dist/domains/knowledge/components/KnowledgePageTree.cjs.js +170 -0
- package/dist/domains/knowledge/components/KnowledgePageTree.cjs.js.map +1 -0
- package/dist/domains/knowledge/components/KnowledgePageTree.d.ts +1 -0
- package/dist/domains/knowledge/components/KnowledgePageTree.es.js +168 -0
- package/dist/domains/knowledge/components/KnowledgePageTree.es.js.map +1 -0
- package/dist/domains/knowledge/hooks/useInteractionIdle.cjs.js +37 -0
- package/dist/domains/knowledge/hooks/useInteractionIdle.cjs.js.map +1 -0
- package/dist/domains/knowledge/hooks/useInteractionIdle.d.ts +1 -0
- package/dist/domains/knowledge/hooks/useInteractionIdle.es.js +35 -0
- package/dist/domains/knowledge/hooks/useInteractionIdle.es.js.map +1 -0
- package/dist/domains/knowledge/lib/layout.cjs.js +93 -0
- package/dist/domains/knowledge/lib/layout.cjs.js.map +1 -0
- package/dist/domains/knowledge/lib/layout.d.ts +1 -0
- package/dist/domains/knowledge/lib/layout.es.js +92 -0
- package/dist/domains/knowledge/lib/layout.es.js.map +1 -0
- package/dist/domains/knowledge/lib/pageGraph.cjs.js +135 -0
- package/dist/domains/knowledge/lib/pageGraph.cjs.js.map +1 -0
- package/dist/domains/knowledge/lib/pageGraph.d.ts +1 -0
- package/dist/domains/knowledge/lib/pageGraph.es.js +128 -0
- package/dist/domains/knowledge/lib/pageGraph.es.js.map +1 -0
- package/dist/domains/knowledge/lib/pageLayout.cjs.js +49 -0
- package/dist/domains/knowledge/lib/pageLayout.cjs.js.map +1 -0
- package/dist/domains/knowledge/lib/pageLayout.d.ts +1 -0
- package/dist/domains/knowledge/lib/pageLayout.es.js +48 -0
- package/dist/domains/knowledge/lib/pageLayout.es.js.map +1 -0
- package/dist/domains/knowledge/lib/pageTree.cjs.js +98 -0
- package/dist/domains/knowledge/lib/pageTree.cjs.js.map +1 -0
- package/dist/domains/knowledge/lib/pageTree.d.ts +1 -0
- package/dist/domains/knowledge/lib/pageTree.es.js +94 -0
- package/dist/domains/knowledge/lib/pageTree.es.js.map +1 -0
- package/dist/domains/knowledge/lib/popupPlacement.cjs.js +22 -0
- package/dist/domains/knowledge/lib/popupPlacement.cjs.js.map +1 -0
- package/dist/domains/knowledge/lib/popupPlacement.d.ts +1 -0
- package/dist/domains/knowledge/lib/popupPlacement.es.js +21 -0
- package/dist/domains/knowledge/lib/popupPlacement.es.js.map +1 -0
- package/dist/domains/knowledge/lib/recordText.cjs.js +26 -0
- package/dist/domains/knowledge/lib/recordText.cjs.js.map +1 -0
- package/dist/domains/knowledge/lib/recordText.d.ts +1 -0
- package/dist/domains/knowledge/lib/recordText.es.js +25 -0
- package/dist/domains/knowledge/lib/recordText.es.js.map +1 -0
- package/dist/domains/knowledge/pageTypes.cjs.js +0 -0
- package/dist/domains/knowledge/pageTypes.d.ts +1 -0
- package/dist/domains/knowledge/pageTypes.es.js +0 -0
- package/dist/domains/logs/components/log-data-panel.cjs.js +6 -6
- package/dist/domains/logs/components/log-data-panel.cjs.js.map +1 -1
- package/dist/domains/logs/components/log-data-panel.es.js +4 -4
- 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-saved-views.cjs.js +1 -1
- package/dist/domains/logs/components/logs-saved-views.es.js +1 -1
- package/dist/domains/logs/components/logs-toolbar.cjs.js +1 -1
- package/dist/domains/logs/components/logs-toolbar.es.js +1 -1
- package/dist/domains/logs/components/no-logs-info.cjs.js +1 -1
- package/dist/domains/logs/components/no-logs-info.es.js +1 -1
- package/dist/domains/logs/hooks/use-logs-filter-persistence.cjs.js +1 -1
- package/dist/domains/logs/hooks/use-logs-filter-persistence.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/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/chart-card-error.cjs.js +1 -1
- package/dist/domains/metrics/components/chart-card-error.es.js +1 -1
- package/dist/domains/metrics/components/date-range-selector.cjs.js +2 -2
- package/dist/domains/metrics/components/date-range-selector.cjs.js.map +1 -1
- package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
- package/dist/domains/metrics/components/metrics-time-range-chip.cjs.js +4 -4
- package/dist/domains/metrics/components/metrics-time-range-chip.cjs.js.map +1 -1
- package/dist/domains/metrics/components/metrics-time-range-chip.es.js +4 -4
- package/dist/domains/metrics/components/metrics-time-range-chip.es.js.map +1 -1
- package/dist/domains/metrics/drilldown.cjs.js +1 -1
- package/dist/domains/metrics/drilldown.es.js +1 -1
- package/dist/domains/metrics/metrics-filters.cjs.js +1 -1
- package/dist/domains/metrics/metrics-filters.es.js +1 -1
- package/dist/domains/observability/hooks/use-observability-list-filters.cjs.js +1 -1
- package/dist/domains/observability/hooks/use-observability-list-filters.es.js +1 -1
- package/dist/domains/observability/observability-list-url-state.cjs.js +1 -1
- package/dist/domains/observability/observability-list-url-state.es.js +1 -1
- package/dist/domains/observability/saved-view-state.cjs.js +1 -1
- package/dist/domains/observability/saved-view-state.es.js +1 -1
- package/dist/domains/observability/saved-views/observability-saved-views.cjs.js +1 -1
- package/dist/domains/observability/saved-views/observability-saved-views.es.js +1 -1
- package/dist/domains/observability/saved-views/saved-views-provider.cjs.js +3 -2
- package/dist/domains/observability/saved-views/saved-views-provider.cjs.js.map +1 -1
- package/dist/domains/observability/saved-views/saved-views-provider.es.js +3 -2
- package/dist/domains/observability/saved-views/saved-views-provider.es.js.map +1 -1
- package/dist/domains/observability/saved-views/saved-views-source.cjs.js.map +1 -1
- package/dist/domains/observability/saved-views/saved-views-source.es.js.map +1 -1
- package/dist/domains/observability/saved-views/use-hosted-saved-views.cjs.js +3 -2
- package/dist/domains/observability/saved-views/use-hosted-saved-views.cjs.js.map +1 -1
- package/dist/domains/observability/saved-views/use-hosted-saved-views.es.js +3 -2
- package/dist/domains/observability/saved-views/use-hosted-saved-views.es.js.map +1 -1
- package/dist/domains/observability/saved-views.cjs.js +1 -1
- package/dist/domains/observability/saved-views.es.js +1 -1
- package/dist/domains/observability.cjs.js +1 -1
- package/dist/domains/observability.es.js +1 -1
- package/dist/domains/scores/components/score-data-panel.cjs.js +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-list.cjs.js +2 -2
- package/dist/domains/scores/components/trace-scores-list.es.js +2 -2
- package/dist/domains/scores/components/trace-scores-tab.cjs.js +1 -1
- package/dist/domains/scores/components/trace-scores-tab.es.js +1 -1
- package/dist/domains/skills/skill-simple-form.cjs.js +4 -4
- package/dist/domains/skills/skill-simple-form.cjs.js.map +1 -1
- package/dist/domains/skills/skill-simple-form.es.js +4 -4
- package/dist/domains/skills/skill-simple-form.es.js.map +1 -1
- package/dist/domains/spans/components/spans-explorer-body.cjs.js +8 -8
- package/dist/domains/spans/components/spans-explorer-body.cjs.js.map +1 -1
- package/dist/domains/spans/components/spans-explorer-body.es.js +8 -8
- package/dist/domains/spans/components/spans-explorer-body.es.js.map +1 -1
- package/dist/domains/spans/components/spans-filter-bar.cjs.js +5 -5
- package/dist/domains/spans/components/spans-filter-bar.cjs.js.map +1 -1
- package/dist/domains/spans/components/spans-filter-bar.es.js +5 -5
- package/dist/domains/spans/components/spans-filter-bar.es.js.map +1 -1
- package/dist/domains/spans/hooks/use-spans-filter-bar.cjs.js +5 -5
- package/dist/domains/spans/hooks/use-spans-filter-bar.cjs.js.map +1 -1
- package/dist/domains/spans/hooks/use-spans-filter-bar.es.js +5 -5
- package/dist/domains/spans/hooks/use-spans-filter-bar.es.js.map +1 -1
- package/dist/domains/spans/span-filters.cjs.js +2 -2
- package/dist/domains/spans/span-filters.cjs.js.map +1 -1
- package/dist/domains/spans/span-filters.es.js +2 -2
- package/dist/domains/spans/span-filters.es.js.map +1 -1
- package/dist/domains/threads/components/threads-explorer-body.cjs.js +8 -8
- package/dist/domains/threads/components/threads-explorer-body.cjs.js.map +1 -1
- package/dist/domains/threads/components/threads-explorer-body.es.js +8 -8
- package/dist/domains/threads/components/threads-explorer-body.es.js.map +1 -1
- package/dist/domains/threads/components/threads-filter-bar.cjs.js +5 -5
- package/dist/domains/threads/components/threads-filter-bar.cjs.js.map +1 -1
- package/dist/domains/threads/components/threads-filter-bar.es.js +5 -5
- package/dist/domains/threads/components/threads-filter-bar.es.js.map +1 -1
- package/dist/domains/threads/hooks/use-threads-filter-bar.cjs.js +5 -5
- package/dist/domains/threads/hooks/use-threads-filter-bar.cjs.js.map +1 -1
- package/dist/domains/threads/hooks/use-threads-filter-bar.es.js +5 -5
- package/dist/domains/threads/hooks/use-threads-filter-bar.es.js.map +1 -1
- package/dist/domains/threads/thread-filters.cjs.js +2 -2
- package/dist/domains/threads/thread-filters.cjs.js.map +1 -1
- package/dist/domains/threads/thread-filters.es.js +2 -2
- package/dist/domains/threads/thread-filters.es.js.map +1 -1
- package/dist/domains/traces/components/columns-menu/columns-menu.cjs.js +1 -1
- package/dist/domains/traces/components/columns-menu/columns-menu.es.js +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 +5 -5
- package/dist/domains/traces/components/span-data-panel-view.es.js +5 -5
- 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-outcome.cjs.js +1 -1
- package/dist/domains/traces/components/span-outcome.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +2 -2
- package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +2 -2
- package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +3 -3
- package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +3 -3
- package/dist/domains/traces/components/span-payload/span-payload-json.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-json.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +3 -3
- package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +3 -3
- package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +1 -1
- 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 +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-processor-mutations.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-processor-mutations.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-tools-section.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-tools-section.es.js +1 -1
- package/dist/domains/traces/components/span-summary-description.cjs.js +1 -1
- package/dist/domains/traces/components/span-summary-description.es.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-messages.cjs.js +2 -2
- package/dist/domains/traces/components/thread-trace/thread-trace-messages.es.js +2 -2
- package/dist/domains/traces/components/thread-trace/thread-trace-row.cjs.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-row.es.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-spans.cjs.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-spans.es.js +1 -1
- package/dist/domains/traces/components/thread-view-by-trace.cjs.js +1 -1
- package/dist/domains/traces/components/thread-view-by-trace.es.js +1 -1
- package/dist/domains/traces/components/trace-columns-menu.cjs.js +3 -4
- package/dist/domains/traces/components/trace-columns-menu.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-columns-menu.es.js +3 -4
- package/dist/domains/traces/components/trace-columns-menu.es.js.map +1 -1
- package/dist/domains/traces/components/trace-data-panel-view.cjs.js +4 -4
- package/dist/domains/traces/components/trace-data-panel-view.es.js +4 -4
- package/dist/domains/traces/components/trace-data-panel.cjs.js +1 -1
- package/dist/domains/traces/components/trace-data-panel.es.js +1 -1
- package/dist/domains/traces/components/trace-details-view.cjs.js +1 -1
- package/dist/domains/traces/components/trace-details-view.es.js +1 -1
- package/dist/domains/traces/components/trace-error-cell.cjs.js +1 -1
- package/dist/domains/traces/components/trace-error-cell.es.js +1 -1
- package/dist/domains/traces/components/trace-error-summary.cjs.js +1 -1
- package/dist/domains/traces/components/trace-error-summary.es.js +1 -1
- package/dist/domains/traces/components/trace-id-button.cjs.js +1 -1
- package/dist/domains/traces/components/trace-id-button.es.js +1 -1
- package/dist/domains/traces/components/trace-span-panel.cjs.js +1 -1
- package/dist/domains/traces/components/trace-span-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/traces-explorer/traces-explorer-actions.cjs.js +1 -1
- package/dist/domains/traces/components/traces-explorer/traces-explorer-actions.es.js +1 -1
- package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.cjs.js +5 -5
- package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.es.js +5 -5
- package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.es.js.map +1 -1
- package/dist/domains/traces/components/traces-explorer/traces-explorer-root.cjs.js +1 -1
- package/dist/domains/traces/components/traces-explorer/traces-explorer-root.es.js +1 -1
- package/dist/domains/traces/components/traces-explorer/traces-explorer-saved-views.cjs.js +1 -1
- package/dist/domains/traces/components/traces-explorer/traces-explorer-saved-views.es.js +1 -1
- package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.cjs.js +5 -5
- package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.es.js +5 -5
- package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.es.js.map +1 -1
- package/dist/domains/traces/components/traces-list-mode-toggle.cjs.js +1 -1
- package/dist/domains/traces/components/traces-list-mode-toggle.es.js +1 -1
- package/dist/domains/traces/components/traces-list-view.cjs.js +2 -2
- package/dist/domains/traces/components/traces-list-view.es.js +2 -2
- package/dist/domains/traces/components/traces-page-skeleton.cjs.js +2 -2
- package/dist/domains/traces/components/traces-page-skeleton.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-page-skeleton.es.js +2 -2
- package/dist/domains/traces/components/traces-page-skeleton.es.js.map +1 -1
- package/dist/domains/traces/components/traces-spans-switch.cjs.js +1 -1
- package/dist/domains/traces/components/traces-spans-switch.es.js +1 -1
- package/dist/domains/traces/hooks/use-download-trace-json.cjs.js +1 -1
- package/dist/domains/traces/hooks/use-download-trace-json.es.js +1 -1
- package/dist/domains/traces/trace-filters.cjs.js +1 -1
- package/dist/domains/traces/trace-filters.es.js +1 -1
- package/dist/domains/traces/trace-query-filters.cjs.js +1 -1
- package/dist/domains/traces/trace-query-filters.es.js +1 -1
- package/dist/domains/traces.cjs.js +1 -1
- package/dist/domains/traces.es.js +1 -1
- package/dist/domains/workflows/components/workflow-combobox.cjs.js +2 -2
- package/dist/domains/workflows/components/workflow-combobox.es.js +2 -2
- package/dist/domains/workflows/components/workflow-information.cjs.js +2 -2
- package/dist/domains/workflows/components/workflow-information.es.js +2 -2
- package/dist/domains/workflows/components/workflow-layout.cjs.js +1 -1
- package/dist/domains/workflows/components/workflow-layout.es.js +1 -1
- package/dist/domains/workflows/components/workflow-step-detail.cjs.js +2 -2
- package/dist/domains/workflows/components/workflow-step-detail.es.js +2 -2
- package/dist/domains/workflows/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 +2 -2
- package/dist/domains/workflows/components/workflows-list/workflows-list.es.js +2 -2
- package/dist/domains/workflows/context/use-stream-for-run.cjs.js +1 -1
- package/dist/domains/workflows/context/use-stream-for-run.es.js +1 -1
- package/dist/domains/workflows/runs/workflow-run-list.cjs.js +1 -1
- package/dist/domains/workflows/runs/workflow-run-list.es.js +1 -1
- 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 +1 -1
- package/dist/domains/workflows/workflow/use-workflow-graph-runtime.es.js +1 -1
- package/dist/domains/workflows/workflow/use-workflow-trigger.cjs.js +2 -1
- package/dist/domains/workflows/workflow/use-workflow-trigger.cjs.js.map +1 -1
- package/dist/domains/workflows/workflow/use-workflow-trigger.es.js +2 -1
- package/dist/domains/workflows/workflow/use-workflow-trigger.es.js.map +1 -1
- package/dist/domains/workflows/workflow/utils.cjs.js +1 -1
- package/dist/domains/workflows/workflow/utils.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-body-graph.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-body-graph.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-cancel-button.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-cancel-button.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-data-edge.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-data-edge.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-debug-step-controls.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-debug-step-controls.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-graph-boundary.cjs.js +3 -3
- package/dist/domains/workflows/workflow/workflow-graph-boundary.es.js +3 -3
- package/dist/domains/workflows/workflow/workflow-graph-inner.cjs.js +2 -2
- package/dist/domains/workflows/workflow/workflow-graph-inner.es.js +2 -2
- package/dist/domains/workflows/workflow/workflow-graph-layout.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-graph-layout.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-graph-node.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-graph-node.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-graph.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-graph.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-map-config-dialog.cjs.js +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 +1 -1
- package/dist/domains/workflows/workflow/workflow-nested-graph.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-run-data.cjs.js +3 -3
- package/dist/domains/workflows/workflow/workflow-run-data.es.js +3 -3
- 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 +1 -1
- package/dist/domains/workflows/workflow/workflow-run-header.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-status.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-status.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-step-action-bar.cjs.js +2 -2
- package/dist/domains/workflows/workflow/workflow-step-action-bar.es.js +2 -2
- package/dist/domains/workflows/workflow/workflow-step-node-utils.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-step-node-utils.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-suspended-steps.cjs.js +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 +2 -2
- package/dist/domains/workflows/workflow/workflow-time-travel-form.es.js +2 -2
- package/dist/domains/workflows/workflow/workflow-timeline-row.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-timeline-row.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-timeline.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-timeline.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-trigger-form.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-trigger-form.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-trigger-header.cjs.js +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/domains/workspace/components/workspace-add-skill-dialog.cjs.js +3 -3
- package/dist/domains/workspace/components/workspace-add-skill-dialog.es.js +3 -3
- package/dist/domains/workspace/components/workspace-add-skill.cjs.js +1 -1
- package/dist/domains/workspace/components/workspace-add-skill.es.js +1 -1
- package/dist/domains/workspace/components/workspace-create-directory.cjs.js +2 -2
- package/dist/domains/workspace/components/workspace-create-directory.es.js +2 -2
- package/dist/domains/workspace/components/workspace-error.cjs.js +1 -1
- package/dist/domains/workspace/components/workspace-error.es.js +1 -1
- package/dist/domains/workspace/components/workspace-markdown-preview.cjs.js +1 -1
- package/dist/domains/workspace/components/workspace-markdown-preview.es.js +1 -1
- package/dist/domains/workspace/components/workspace-search.cjs.js +1 -1
- package/dist/domains/workspace/components/workspace-search.es.js +1 -1
- package/dist/domains/workspace/components/workspace-tree.cjs.js +1 -1
- package/dist/domains/workspace/components/workspace-tree.es.js +1 -1
- package/dist/ee/signals/components/entity-index-list.cjs.js +1 -1
- package/dist/ee/signals/components/entity-index-list.es.js +1 -1
- package/dist/ee/signals/components/signals-empty-state.cjs.js +1 -1
- package/dist/ee/signals/components/signals-empty-state.es.js +1 -1
- package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +6 -6
- 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 +5 -5
- package/dist/ee/signals/examples-pager.cjs.js +1 -1
- package/dist/ee/signals/examples-pager.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 +2 -2
- package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +2 -2
- 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/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 +1 -1
- package/dist/ee/signals/snapshot-timeline.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 +1 -1
- package/dist/ee/signals/trace-insight-view.es.js +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 +2 -2
- package/dist/ee/topics/components/topic-trace-summary-list.es.js +2 -2
- package/dist/{filter-bar-chip-7O02P9Vk.js → filter-bar-chip-B4sV4gDm.js} +86 -71
- package/dist/filter-bar-chip-B4sV4gDm.js.map +1 -0
- package/dist/{filter-bar-chip-BUyMf8XQ.cjs → filter-bar-chip-CIEsWcEw.cjs} +88 -79
- package/dist/filter-bar-chip-CIEsWcEw.cjs.map +1 -0
- package/dist/filter-bar-chip.css +22 -0
- package/dist/filter-bar-time-range-CXQMBgpz.js +60 -0
- package/dist/filter-bar-time-range-CXQMBgpz.js.map +1 -0
- package/dist/filter-bar-time-range-DvuaFnkI.cjs +83 -0
- package/dist/filter-bar-time-range-DvuaFnkI.cjs.map +1 -0
- package/dist/hooks/use-copy-to-clipboard.cjs.js +1 -1
- package/dist/hooks/use-copy-to-clipboard.es.js +1 -1
- package/dist/{input-group-uDpFNnSW.cjs → input-group-DVJLZDBL.cjs} +6 -4
- package/dist/input-group-DVJLZDBL.cjs.map +1 -0
- package/dist/{input-group-g85FYfze.js → input-group-QKKV_ouF.js} +7 -5
- package/dist/input-group-QKKV_ouF.js.map +1 -0
- package/dist/layout/tabbed-container.cjs.js +1 -1
- package/dist/layout/tabbed-container.es.js +1 -1
- package/dist/lib/form/components/array-element-wrapper.cjs.js +1 -1
- package/dist/lib/form/components/array-element-wrapper.es.js +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/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/lib/form/dynamic-form.cjs.js +2 -2
- package/dist/lib/form/dynamic-form.cjs.js.map +1 -1
- package/dist/lib/form/dynamic-form.es.js +2 -2
- package/dist/lib/form/dynamic-form.es.js.map +1 -1
- package/dist/lib/form/json-draft.cjs.js +1 -1
- package/dist/lib/form/json-draft.es.js +1 -1
- package/dist/lib/form/zod-provider/compat.cjs.js +8 -0
- package/dist/lib/form/zod-provider/compat.cjs.js.map +1 -1
- package/dist/lib/form/zod-provider/compat.es.js +8 -1
- package/dist/lib/form/zod-provider/compat.es.js.map +1 -1
- package/dist/lib/form/zod-provider.cjs.js +1 -1
- package/dist/lib/form/zod-provider.es.js +1 -1
- package/dist/{list-search-BEJmYa9a.cjs → list-search-BtRno5As.cjs} +2 -2
- package/dist/list-search-BtRno5As.cjs.map +1 -0
- package/dist/{list-search-bg7WzULj.js → list-search-CkhsTFdG.js} +2 -2
- package/dist/list-search-CkhsTFdG.js.map +1 -0
- package/dist/{observability-saved-views-CwCii7hh.cjs → observability-saved-views-BAzxxoAr.cjs} +10 -8
- package/dist/observability-saved-views-BAzxxoAr.cjs.map +1 -0
- package/dist/{observability-saved-views-Bo5kLN20.js → observability-saved-views-BBam8Fr5.js} +10 -8
- package/dist/observability-saved-views-BBam8Fr5.js.map +1 -0
- package/dist/primitives/control-icon.cjs.js +9 -0
- package/dist/primitives/control-icon.cjs.js.map +1 -0
- package/dist/primitives/control-icon.d.ts +1 -0
- package/dist/primitives/control-icon.es.js +8 -0
- package/dist/primitives/control-icon.es.js.map +1 -0
- package/dist/primitives/control-size.cjs.js +6 -0
- package/dist/primitives/control-size.cjs.js.map +1 -1
- package/dist/primitives/control-size.es.js +6 -1
- package/dist/primitives/control-size.es.js.map +1 -1
- package/dist/primitives/menu-item.cjs.js +3 -3
- package/dist/primitives/menu-item.cjs.js.map +1 -1
- package/dist/primitives/menu-item.es.js +3 -3
- package/dist/primitives/menu-item.es.js.map +1 -1
- package/dist/primitives/trigger-button.cjs.js +1 -1
- package/dist/primitives/trigger-button.es.js +1 -1
- package/dist/{property-filter-applied-DqsPFbYM.cjs → property-filter-applied-BCeRLcXb.cjs} +18 -18
- package/dist/{property-filter-applied-DqsPFbYM.cjs.map → property-filter-applied-BCeRLcXb.cjs.map} +1 -1
- package/dist/{property-filter-applied-DRglaEj-.js → property-filter-applied-p3dTTDdb.js} +3 -3
- package/dist/{property-filter-applied-DRglaEj-.js.map → property-filter-applied-p3dTTDdb.js.map} +1 -1
- package/dist/{select-BbFpEBAY.js → select-BdIZEdcy.js} +4 -8
- package/dist/select-BdIZEdcy.js.map +1 -0
- package/dist/{select-NySY9Men.cjs → select-Dg8L5ROX.cjs} +3 -7
- package/dist/select-Dg8L5ROX.cjs.map +1 -0
- package/dist/{span-payload-primitives-Dyhbqaa7.js → span-payload-primitives-B3RdahsC.js} +4 -4
- package/dist/{span-payload-primitives-Dyhbqaa7.js.map → span-payload-primitives-B3RdahsC.js.map} +1 -1
- package/dist/{span-payload-primitives-B10Xxmx7.cjs → span-payload-primitives-_2d-pAOD.cjs} +4 -4
- package/dist/{span-payload-primitives-B10Xxmx7.cjs.map → span-payload-primitives-_2d-pAOD.cjs.map} +1 -1
- package/dist/src/domains/chat/index.d.ts +1 -0
- package/dist/src/domains/chat/knowledge/index.d.ts +5 -0
- package/dist/src/domains/chat/knowledge/knowledge-links.d.ts +21 -0
- package/dist/src/domains/chat/knowledge/pinned-knowledge-data.d.ts +22 -0
- package/dist/src/domains/chat/knowledge/pinned-knowledge.d.ts +9 -0
- package/dist/src/domains/chat/tools/badges/knowledge-tool-badge.d.ts +19 -0
- package/dist/src/domains/chat/tools/tool-card-kind.d.ts +2 -2
- package/dist/src/domains/knowledge/components/KnowledgePageDetail.d.ts +42 -0
- package/dist/src/domains/knowledge/components/KnowledgePageExplorer.d.ts +80 -0
- package/dist/src/domains/knowledge/components/KnowledgePageGraph.d.ts +35 -0
- package/dist/src/domains/knowledge/components/KnowledgePageTree.d.ts +27 -0
- package/dist/src/domains/knowledge/hooks/useInteractionIdle.d.ts +12 -0
- package/dist/src/domains/knowledge/lib/layout.d.ts +35 -0
- package/dist/src/domains/knowledge/lib/pageGraph.d.ts +45 -0
- package/dist/src/domains/knowledge/lib/pageLayout.d.ts +24 -0
- package/dist/src/domains/knowledge/lib/pageTree.d.ts +28 -0
- package/dist/src/domains/knowledge/lib/popupPlacement.d.ts +12 -0
- package/dist/src/domains/knowledge/lib/recordText.d.ts +9 -0
- package/dist/src/domains/knowledge/pageTypes.d.ts +96 -0
- package/dist/src/domains/metrics/components/metrics-time-range-chip.d.ts +2 -2
- package/dist/src/domains/observability/saved-views/saved-views-provider.d.ts +6 -1
- package/dist/src/domains/observability/saved-views/saved-views-source.d.ts +1 -0
- package/dist/src/domains/observability/saved-views/use-hosted-saved-views.d.ts +1 -1
- package/dist/src/domains/skills/skill-simple-form.d.ts +3 -1
- package/dist/src/domains/spans/components/spans-filter-bar.d.ts +1 -1
- package/dist/src/domains/spans/hooks/use-spans-filter-bar.d.ts +1 -1
- package/dist/src/domains/spans/span-filters.d.ts +1 -1
- package/dist/src/domains/threads/components/threads-filter-bar.d.ts +1 -1
- package/dist/src/domains/threads/hooks/use-threads-filter-bar.d.ts +1 -1
- package/dist/src/domains/threads/thread-filters.d.ts +1 -1
- package/dist/src/domains/traces/components/traces-explorer/traces-explorer-filter-bar.d.ts +3 -3
- package/dist/src/domains/traces/components/traces-page-skeleton.d.ts +1 -1
- package/dist/src/ds/components/Button/Button.d.ts +15 -0
- package/dist/src/ds/components/ClearFiltersButton/clear-filters-button.d.ts +12 -0
- package/dist/src/ds/components/ClearFiltersButton/index.d.ts +1 -0
- package/dist/src/ds/components/Combobox/combobox-styles.d.ts +0 -1
- package/dist/src/ds/components/DateTimeRangePicker/date-time-range-picker.d.ts +12 -11
- package/dist/src/ds/components/FilterBar/filter-bar-chip.d.ts +10 -7
- package/dist/src/ds/components/FilterBar/filter-bar-time-range.d.ts +19 -0
- package/dist/src/ds/components/FilterBar/filter-bar.d.ts +2 -0
- package/dist/src/ds/components/FilterBar/index.d.ts +2 -0
- package/dist/src/ds/components/FilterBar/use-filter-bar-item-keys.d.ts +23 -0
- package/dist/src/ds/components/ListSearch/list-search.d.ts +1 -0
- package/dist/src/ds/components/SavedViews/saved-view-picker.d.ts +3 -1
- package/dist/src/ds/components/ai/tool-call/tool-phrases.d.ts +30 -0
- package/dist/src/ds/primitives/control-icon.d.ts +3 -0
- package/dist/src/ds/primitives/control-size.d.ts +1 -0
- package/dist/src/lib/form/zod-provider/compat.d.ts +5 -0
- package/dist/style.css +181 -66
- package/dist/{tabbed-container-BKUqfEKy.js → tabbed-container-5j6dhoRX.js} +6 -6
- package/dist/{tabbed-container-BKUqfEKy.js.map → tabbed-container-5j6dhoRX.js.map} +1 -1
- package/dist/{tabbed-container-CFEImJOK.cjs → tabbed-container-DQU7pVio.cjs} +6 -6
- package/dist/{tabbed-container-CFEImJOK.cjs.map → tabbed-container-DQU7pVio.cjs.map} +1 -1
- package/dist/{tabs-content-DgR3Hik1.cjs → tabs-content-CmXe5ML0.cjs} +2 -2
- package/dist/{tabs-content-DgR3Hik1.cjs.map → tabs-content-CmXe5ML0.cjs.map} +1 -1
- package/dist/{tabs-content-cpV6A9c3.js → tabs-content-D__B9hd-.js} +2 -2
- package/dist/{tabs-content-cpV6A9c3.js.map → tabs-content-D__B9hd-.js.map} +1 -1
- package/dist/{tabs-tab-UT1JliwK.js → tabs-tab-CYTZevdV.js} +2 -2
- package/dist/{tabs-tab-UT1JliwK.js.map → tabs-tab-CYTZevdV.js.map} +1 -1
- package/dist/{tabs-tab-Qp3RJ17z.cjs → tabs-tab-DGwfHVDr.cjs} +2 -2
- package/dist/{tabs-tab-Qp3RJ17z.cjs.map → tabs-tab-DGwfHVDr.cjs.map} +1 -1
- package/dist/{toast-api-WhxnAT9F.js → toast-api-D_rrRhNG.js} +2 -2
- package/dist/{toast-api-WhxnAT9F.js.map → toast-api-D_rrRhNG.js.map} +1 -1
- package/dist/{toast-api-Bv87KHu_.cjs → toast-api-qtkOucy2.cjs} +2 -2
- package/dist/{toast-api-Bv87KHu_.cjs.map → toast-api-qtkOucy2.cjs.map} +1 -1
- package/dist/{tool-approval-BfjoSNOC.cjs → tool-approval-1qiB4hhG.cjs} +5 -5
- package/dist/{tool-approval-BfjoSNOC.cjs.map → tool-approval-1qiB4hhG.cjs.map} +1 -1
- package/dist/{tool-approval-FeuyUUcL.js → tool-approval-B6MFcaKV.js} +5 -5
- package/dist/{tool-approval-FeuyUUcL.js.map → tool-approval-B6MFcaKV.js.map} +1 -1
- package/dist/{tool-call-CvilN9ti.cjs → tool-call-Bu66PkD-.cjs} +34 -4
- package/dist/{tool-call-CvilN9ti.cjs.map → tool-call-Bu66PkD-.cjs.map} +1 -1
- package/dist/{tool-call-BxYXs9w0.js → tool-call-Ch9-jjXU.js} +34 -4
- package/dist/{tool-call-BxYXs9w0.js.map → tool-call-Ch9-jjXU.js.map} +1 -1
- package/dist/{tool-card-B7O8AsRl.cjs → tool-card-DrqPZfPQ.cjs} +20 -6
- package/dist/tool-card-DrqPZfPQ.cjs.map +1 -0
- package/dist/{tool-card-ELW898uw.js → tool-card-sO6P2Qj4.js} +20 -6
- package/dist/tool-card-sO6P2Qj4.js.map +1 -0
- package/dist/{tool-presentation-BLErsb7c.cjs → tool-presentation-CQlDEwgS.cjs} +26 -1
- package/dist/tool-presentation-CQlDEwgS.cjs.map +1 -0
- package/dist/{tool-presentation-BSZYIWx2.js → tool-presentation-DvCsb_kz.js} +26 -1
- package/dist/tool-presentation-DvCsb_kz.js.map +1 -0
- package/dist/{trace-filters-BJaebsxJ.js → trace-filters-CaWkw779.js} +2 -3
- package/dist/trace-filters-CaWkw779.js.map +1 -0
- package/dist/{trace-filters-BNEZ31HX.cjs → trace-filters-a0N9bf52.cjs} +1 -2
- package/dist/trace-filters-a0N9bf52.cjs.map +1 -0
- package/dist/{use-workflow-graph-runtime-deTN_q_G.js → use-workflow-graph-runtime-BKNhOKsH.js} +3 -3
- package/dist/{use-workflow-graph-runtime-deTN_q_G.js.map → use-workflow-graph-runtime-BKNhOKsH.js.map} +1 -1
- package/dist/{use-workflow-graph-runtime-DkwQjMEV.cjs → use-workflow-graph-runtime-DYao-08R.cjs} +3 -3
- package/dist/{use-workflow-graph-runtime-DkwQjMEV.cjs.map → use-workflow-graph-runtime-DYao-08R.cjs.map} +1 -1
- package/dist/utils/toast.cjs.js +1 -1
- package/dist/utils/toast.es.js +1 -1
- package/package.json +12 -10
- package/theme.css +4 -0
- package/dist/ActionRow-BfK77pCT.cjs.map +0 -1
- package/dist/ActionRow-Cd6tOC2K.js.map +0 -1
- package/dist/Button-Bw1e3ONi.js.map +0 -1
- package/dist/Button-YQRflC47.cjs.map +0 -1
- package/dist/DateTimeRangePicker-C_Lie_2P.js.map +0 -1
- package/dist/DateTimeRangePicker-HmPOHwAQ.cjs.map +0 -1
- package/dist/FilterBar--4oguuVe.js.map +0 -1
- package/dist/FilterBar-BUd4f7oi.cjs.map +0 -1
- package/dist/combobox-parts-BZVXwbG7.cjs.map +0 -1
- package/dist/combobox-parts-W7KRQUsV.js.map +0 -1
- package/dist/components/ButtonsGroup.cjs.js.map +0 -1
- package/dist/components/ButtonsGroup.es.js.map +0 -1
- package/dist/domains/traces/components/trace-time-range-chip.cjs.js +0 -90
- package/dist/domains/traces/components/trace-time-range-chip.cjs.js.map +0 -1
- package/dist/domains/traces/components/trace-time-range-chip.d.ts +0 -1
- package/dist/domains/traces/components/trace-time-range-chip.es.js +0 -86
- package/dist/domains/traces/components/trace-time-range-chip.es.js.map +0 -1
- package/dist/filter-bar-chip-7O02P9Vk.js.map +0 -1
- package/dist/filter-bar-chip-BUyMf8XQ.cjs.map +0 -1
- package/dist/input-group-g85FYfze.js.map +0 -1
- package/dist/input-group-uDpFNnSW.cjs.map +0 -1
- package/dist/list-search-BEJmYa9a.cjs.map +0 -1
- package/dist/list-search-bg7WzULj.js.map +0 -1
- package/dist/observability-saved-views-Bo5kLN20.js.map +0 -1
- package/dist/observability-saved-views-CwCii7hh.cjs.map +0 -1
- package/dist/select-BbFpEBAY.js.map +0 -1
- package/dist/select-NySY9Men.cjs.map +0 -1
- package/dist/src/domains/traces/components/trace-time-range-chip.d.ts +0 -22
- package/dist/tool-card-B7O8AsRl.cjs.map +0 -1
- package/dist/tool-card-ELW898uw.js.map +0 -1
- package/dist/tool-presentation-BLErsb7c.cjs.map +0 -1
- package/dist/tool-presentation-BSZYIWx2.js.map +0 -1
- package/dist/trace-filters-BJaebsxJ.js.map +0 -1
- package/dist/trace-filters-BNEZ31HX.cjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"input-group-uDpFNnSW.cjs","names":["cn","inputSurfaceAndFocusWithinStyle","fieldErrorRimWithin","React","ControlSizeContext","controlHeight","cva","InputPrimitive","deprecatedErrorAria","textFieldAutofillProps","keepOwnAccessibleName","TextareaControl","Button"],"sources":["../src/ds/components/InputGroup/input-group.tsx"],"sourcesContent":["import { Input as InputPrimitive } from '@base-ui/react/input';\nimport { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { Button } from '@/ds/components/Button';\nimport type { ButtonProps } from '@/ds/components/Button/Button';\nimport { keepOwnAccessibleName } from '@/ds/components/Field/field-control-aria';\nimport { ControlSizeContext, controlHeight } from '@/ds/primitives/control-size';\nimport type { ControlSize } from '@/ds/primitives/control-size';\nimport {\n deprecatedErrorAria,\n fieldErrorRimWithin,\n inputSurfaceAndFocusWithinStyle,\n} from '@/ds/primitives/form-element';\nimport { textFieldAutofillProps } from '@/ds/primitives/password-manager-autofill';\nimport { TextareaControl } from '@/ds/primitives/textarea-control';\nimport { cn } from '@/lib/utils';\n\n// Size flows down as `data-size` on the named group root (`group/input-group`), read by the\n// control through `group-data-[size=…]` variants — no prop drilling. The one context read is\n// upward: a wrapper that owns the rung (ButtonsGroup) hands it to the field.\n\nconst inputGroupBaseClassName = cn(\n // `flex-1` (not `min-w-0`) lets the root fill a flex row while keeping its content-floor\n // so it never collapses to 0. `items-center` centres the control: it carries its own\n // h-form-* (2px taller than the root's content box), so stretch would push its text low\n // / overflow the bottom border, while centring overlaps the (transparent) borders cleanly.\n 'group/input-group relative flex w-full flex-1 items-center',\n // The wrapper owns its control's width — a bare control has no width of its own,\n // so the group is the one that decides the input fills the remaining space.\n '[&>[data-slot=input-group-control]]:min-w-0 [&>[data-slot=input-group-control]]:flex-1',\n 'text-foreground',\n 'has-[:disabled]:cursor-not-allowed has-[:disabled]:text-muted-foreground',\n // Height is on the root (border-box) so the group matches a same-size sibling control.\n // Auto height when vertical (block-* addon) or wrapping a textarea.\n 'has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col',\n 'has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col',\n 'has-[textarea]:h-auto',\n 'has-[>[data-align=inline-start]]:[&>[data-slot=input-group-control]]:pl-0',\n 'has-[>[data-align=inline-end]]:[&>[data-slot=input-group-control]]:pr-0',\n // In flex-col, flex-1 zeroes the control's height; force flex-none + w-full instead.\n 'has-[>[data-align=block-start]]:[&>[data-slot=input-group-control]]:w-full has-[>[data-align=block-start]]:[&>[data-slot=input-group-control]]:flex-none',\n 'has-[>[data-align=block-end]]:[&>[data-slot=input-group-control]]:w-full has-[>[data-align=block-end]]:[&>[data-slot=input-group-control]]:flex-none',\n);\n\nconst inputGroupRoundedTextareaClassName = cn(\n // Pill (rounded-full) only fits single-line inline shapes. Fall back to rounded-xl\n // whenever the group goes vertical (block-* addon) or wraps a textarea.\n 'has-[>[data-align=block-start]]:rounded-xl',\n 'has-[>[data-align=block-end]]:rounded-xl',\n 'has-[textarea]:rounded-xl',\n);\n\n// A group wears the field material — the same `bg-card` plus rim an Input wears — so a\n// group and a bare field beside it are one surface. Its states move the rim, and they\n// read the nested control's focus (`focus-within`) because the wrapper never takes focus\n// itself. There is no second look: a transparent `outline` group existed alongside this\n// one and only ever produced two boundary languages for the same control, which is why\n// four of its call sites had wrapped it in a hand-made `bg-card rounded-full` div to get\n// the material back.\n// eslint-disable-next-line react-refresh/only-export-components -- shared with InputNumber\nexport const inputGroupClassName = cn(\n inputGroupBaseClassName,\n 'rounded-full',\n inputSurfaceAndFocusWithinStyle,\n fieldErrorRimWithin,\n inputGroupRoundedTextareaClassName,\n);\n\nexport type InputGroupProps = React.ComponentProps<'div'> & {\n size?: ControlSize;\n};\n\nfunction InputGroup({ className, size, ...props }: InputGroupProps) {\n // A wrapper's rung wins over the field's own: inside a ButtonsGroup the group owns the\n // height of every segment, so a field that kept its own type scale would sit at one rung\n // and read at another.\n const groupSize = React.useContext(ControlSizeContext);\n const resolved = groupSize ?? size ?? 'md';\n return (\n <div\n role=\"group\"\n data-slot=\"input-group\"\n data-size={resolved}\n className={cn(inputGroupClassName, controlHeight[resolved], className)}\n {...props}\n />\n );\n}\n\nconst inputGroupControlTextBySize = cn(\n 'group-data-[size=sm]/input-group:text-caption',\n 'group-data-[size=md]/input-group:text-body-sm',\n 'group-data-[size=lg]/input-group:text-body',\n);\n\nconst inputGroupAddonVariants = cva(\n cn(\n 'flex items-center justify-center gap-2 text-muted-foreground select-none',\n inputGroupControlTextBySize,\n 'group-has-[:disabled]/input-group:text-muted-foreground',\n \"[&>svg:not([class*='size-'])]:size-4\",\n ),\n {\n variants: {\n variant: {\n default: '',\n flush: '',\n },\n align: {\n 'inline-start': 'order-first pr-1 pl-3 has-[>button]:pl-1',\n 'inline-end': 'order-last pr-3 pl-1 has-[>button]:pr-1',\n 'block-start': 'order-first w-full justify-start border-b border-border px-3 pt-2 pb-1',\n 'block-end': 'order-last w-full justify-start border-t border-border px-3 pt-1 pb-2',\n },\n },\n compoundVariants: [\n { variant: 'flush', align: ['inline-start', 'inline-end'], className: 'gap-0 [&>button]:mx-0' },\n { variant: 'flush', align: 'inline-start', className: 'pl-0 has-[>button]:pl-0' },\n { variant: 'flush', align: 'inline-end', className: 'pr-0 has-[>button]:pr-0' },\n ],\n defaultVariants: {\n variant: 'default',\n align: 'inline-start',\n },\n },\n);\n\nexport type InputGroupAddonProps = React.ComponentProps<'div'> &\n Omit<VariantProps<typeof inputGroupAddonVariants>, 'variant'> & {\n /** `flush` joins inline buttons without a gap or an inset from the field's outside edge. */\n variant?: VariantProps<typeof inputGroupAddonVariants>['variant'];\n };\n\nfunction InputGroupAddon({\n className,\n align = 'inline-start',\n variant = 'default',\n onClick,\n ...props\n}: InputGroupAddonProps) {\n return (\n <div\n role=\"group\"\n data-slot=\"input-group-addon\"\n data-align={align}\n data-variant={variant}\n className={cn(inputGroupAddonVariants({ align, variant }), className)}\n onClick={event => {\n // Click on non-interactive addon area focuses the control inside the group.\n // Skip when a button/input handled the click itself.\n const target = event.target as HTMLElement;\n if (!target.closest('button, input, textarea, [role=\"button\"]')) {\n event.currentTarget.parentElement\n ?.querySelector<HTMLInputElement | HTMLTextAreaElement>('[data-slot=input-group-control]')\n ?.focus();\n }\n onClick?.(event);\n }}\n {...props}\n />\n );\n}\n\n// Size flows from the parent group's `data-size` (no React context). All four sizes are\n// written out so Tailwind's scanner emits them. The control is sized to the root's\n// content box (token height minus the 1px border on each side) so it never overflows the\n// root — otherwise, in a flex-column parent, the root's content-based minimum would win\n// over its explicit height and the group would render 2px taller than a sibling control.\n// The explicit height also keeps the control from collapsing to the line-height in block\n// mode (flex-col + flex-none).\nconst inputGroupControlHeightBySize = cn(\n 'group-data-[size=sm]/input-group:h-[calc(var(--spacing-control-sm)-2px)]',\n 'group-data-[size=md]/input-group:h-[calc(var(--spacing-control-md)-2px)]',\n 'group-data-[size=lg]/input-group:h-[calc(var(--spacing-control-lg)-2px)]',\n);\n\n// eslint-disable-next-line react-refresh/only-export-components -- shared with InputNumber\nexport const inputGroupControlClassName = cn(\n 'min-w-0 flex-1 bg-transparent px-3 text-label text-foreground outline-hidden',\n inputGroupControlHeightBySize,\n 'placeholder:text-muted-foreground placeholder:transition-opacity placeholder:duration-normal',\n 'focus:placeholder:opacity-70',\n 'disabled:cursor-not-allowed',\n);\n\nexport type InputGroupInputProps = Omit<React.ComponentProps<'input'>, 'size'> & {\n testId?: string;\n /** @deprecated Wrap the group in `<Field invalid>`, or set `aria-invalid` on a control outside a `Field`. */\n error?: boolean;\n};\n\nfunction InputGroupInput({ className, testId, error, type = 'text', autoComplete, ...props }: InputGroupInputProps) {\n return (\n <InputPrimitive\n type={type}\n data-slot=\"input-group-control\"\n data-testid={testId}\n className={cn(\n inputGroupControlClassName,\n // WebKit and Firefox use different selectors for native number spinners.\n '[&::-webkit-outer-spin-button]:m-0 [&::-webkit-outer-spin-button]:appearance-none',\n '[&::-webkit-inner-spin-button]:m-0 [&::-webkit-inner-spin-button]:appearance-none',\n '[&[type=number]]:[appearance:textfield]',\n // type=\"search\": drop WebKit's native clear button so it doesn't double up with a\n // custom clear control (e.g. the scorers toolbar's InputGroupButton).\n '[&::-webkit-search-cancel-button]:appearance-none',\n className,\n )}\n {...deprecatedErrorAria(error)}\n {...props}\n {...textFieldAutofillProps(autoComplete)}\n {...keepOwnAccessibleName(props)}\n />\n );\n}\n\nexport type InputGroupTextareaProps = React.ComponentProps<'textarea'> & {\n testId?: string;\n /** @deprecated Wrap the group in `<Field invalid>`, or set `aria-invalid` on a control outside a `Field`. */\n error?: boolean;\n};\n\nfunction InputGroupTextarea({ className, testId, error, ...props }: InputGroupTextareaProps) {\n return (\n <TextareaControl\n data-slot=\"input-group-control\"\n data-testid={testId}\n className={cn(\n 'min-h-15 min-w-0 flex-1 resize-y bg-transparent px-3 py-2 text-foreground outline-hidden',\n inputGroupControlTextBySize,\n 'placeholder:text-muted-foreground placeholder:transition-opacity placeholder:duration-normal',\n 'focus:placeholder:opacity-70',\n 'disabled:cursor-not-allowed',\n className,\n )}\n {...deprecatedErrorAria(error)}\n {...props}\n />\n );\n}\n\nexport type InputGroupTextProps = React.ComponentProps<'span'>;\n\nfunction InputGroupText({ className, ...props }: InputGroupTextProps) {\n return (\n <span\n className={cn(\n 'flex items-center gap-2 text-caption text-muted-foreground [&_svg]:pointer-events-none',\n \"[&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport type InputGroupButtonProps = Omit<React.ComponentProps<typeof Button>, 'size' | 'variant'> & {\n size?: ButtonProps['size'];\n variant?: ButtonProps['variant'];\n};\n\nfunction InputGroupButton({ size = 'icon-sm', variant = 'ghost', type = 'button', ...props }: InputGroupButtonProps) {\n return <Button type={type} size={size} variant={variant} {...props} />;\n}\n\nexport { InputGroup, InputGroupAddon, InputGroupInput, InputGroupTextarea, InputGroupText, InputGroupButton };\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"list-search-BEJmYa9a.cjs","names":["useState","useRef","useDebouncedCallback","SearchInput"],"sources":["../src/ds/components/ListSearch/list-search.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\nimport { useDebouncedCallback } from 'use-debounce';\nimport { SearchInput } from '@/ds/components/SearchInput';\nimport type { SearchInputProps } from '@/ds/components/SearchInput';\nimport { useKeydown } from '@/lib/keyboard';\n\nexport type ListSearchProps = {\n onSearch: (search: string) => void;\n label: string;\n placeholder: string;\n debounceMs?: number;\n size?: SearchInputProps['size'];\n /**\n * Optional controlled value. When provided, ListSearch stays in sync with this\n * prop — useful when the parent needs to clear the input programmatically\n * (e.g. from a Reset button). If omitted, ListSearch manages its own state.\n */\n value?: string;\n /**\n * Opts out of the Cmd/Ctrl+Shift+F focus shortcut. Pass this on secondary\n * instances so two search fields on the same page don't fight over focus.\n */\n shortcutDisabled?: boolean;\n};\n\nexport const ListSearch = ({\n onSearch,\n label,\n placeholder,\n debounceMs = 300,\n size,\n value: controlledValue,\n shortcutDisabled = false,\n}: ListSearchProps) => {\n const [internalValue, setInternalValue] = useState(controlledValue ?? '');\n const inputRef = useRef<HTMLInputElement>(null);\n\n useKeydown(\n {\n 'mod+shift+f': () => {\n inputRef.current?.focus();\n inputRef.current?.select();\n },\n },\n { enabled: !shortcutDisabled },\n );\n\n const debouncedSearch = useDebouncedCallback((val: string) => {\n onSearch(val);\n }, debounceMs);\n\n // Sync internal state with controlled value (e.g. parent Reset clears it to '').\n // Also cancel any pending debounced callback so a stale handleChange call\n // can't overwrite the newly-applied controlled value.\n useEffect(() => {\n if (controlledValue !== undefined) {\n debouncedSearch.cancel();\n setInternalValue(controlledValue);\n }\n }, [controlledValue, debouncedSearch]);\n\n useEffect(() => () => debouncedSearch.cancel(), [debouncedSearch]);\n\n const searchNowOrDebounced = (next: string) => {\n setInternalValue(next);\n if (next) {\n debouncedSearch(next);\n return;\n }\n debouncedSearch.cancel();\n onSearch('');\n };\n\n return (\n <SearchInput\n ref={inputRef}\n label={label}\n placeholder={placeholder}\n size={size}\n value={internalValue}\n onValueChange={searchNowOrDebounced}\n className=\"w-full max-w-120\"\n />\n );\n};\n"],"mappings":";;;;;;AAyBA,IAAa,cAAc,EACzB,UACA,OACA,aACA,aAAa,KACb,MACA,OAAO,iBACP,mBAAmB,YACE;CACrB,MAAM,CAAC,eAAe,qBAAA,GAAoBA,MAAAA,SAAAA,CAAS,mBAAmB,EAAE;CACxE,MAAM,YAAA,GAAWC,MAAAA,OAAAA,CAAyB,IAAI;CAE9C,6BAAA,WACE,EACE,qBAAqB;EACnB,SAAS,SAAS,MAAM;EACxB,SAAS,SAAS,OAAO;CAC3B,EACF,GACA,EAAE,SAAS,CAAC,iBAAiB,CAC/B;CAEA,MAAM,mBAAA,GAAkBC,aAAAA,qBAAAA,EAAsB,QAAgB;EAC5D,SAAS,GAAG;CACd,GAAG,UAAU;CAKb,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,IAAI,oBAAoB,KAAA,GAAW;GACjC,gBAAgB,OAAO;GACvB,iBAAiB,eAAe;EAClC;CACF,GAAG,CAAC,iBAAiB,eAAe,CAAC;CAErC,CAAA,GAAA,MAAA,UAAA,aAAsB,gBAAgB,OAAO,GAAG,CAAC,eAAe,CAAC;CAEjE,MAAM,wBAAwB,SAAiB;EAC7C,iBAAiB,IAAI;EACrB,IAAI,MAAM;GACR,gBAAgB,IAAI;GACpB;EACF;EACA,gBAAgB,OAAO;EACvB,SAAS,EAAE;CACb;CAEA,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,+BAAAA,aAAD;EACE,KAAK;EACE;EACM;EACP;EACN,OAAO;EACP,eAAe;EACf,WAAU;CACX,CAAA;AAEL"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"list-search-bg7WzULj.js","names":[],"sources":["../src/ds/components/ListSearch/list-search.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\nimport { useDebouncedCallback } from 'use-debounce';\nimport { SearchInput } from '@/ds/components/SearchInput';\nimport type { SearchInputProps } from '@/ds/components/SearchInput';\nimport { useKeydown } from '@/lib/keyboard';\n\nexport type ListSearchProps = {\n onSearch: (search: string) => void;\n label: string;\n placeholder: string;\n debounceMs?: number;\n size?: SearchInputProps['size'];\n /**\n * Optional controlled value. When provided, ListSearch stays in sync with this\n * prop — useful when the parent needs to clear the input programmatically\n * (e.g. from a Reset button). If omitted, ListSearch manages its own state.\n */\n value?: string;\n /**\n * Opts out of the Cmd/Ctrl+Shift+F focus shortcut. Pass this on secondary\n * instances so two search fields on the same page don't fight over focus.\n */\n shortcutDisabled?: boolean;\n};\n\nexport const ListSearch = ({\n onSearch,\n label,\n placeholder,\n debounceMs = 300,\n size,\n value: controlledValue,\n shortcutDisabled = false,\n}: ListSearchProps) => {\n const [internalValue, setInternalValue] = useState(controlledValue ?? '');\n const inputRef = useRef<HTMLInputElement>(null);\n\n useKeydown(\n {\n 'mod+shift+f': () => {\n inputRef.current?.focus();\n inputRef.current?.select();\n },\n },\n { enabled: !shortcutDisabled },\n );\n\n const debouncedSearch = useDebouncedCallback((val: string) => {\n onSearch(val);\n }, debounceMs);\n\n // Sync internal state with controlled value (e.g. parent Reset clears it to '').\n // Also cancel any pending debounced callback so a stale handleChange call\n // can't overwrite the newly-applied controlled value.\n useEffect(() => {\n if (controlledValue !== undefined) {\n debouncedSearch.cancel();\n setInternalValue(controlledValue);\n }\n }, [controlledValue, debouncedSearch]);\n\n useEffect(() => () => debouncedSearch.cancel(), [debouncedSearch]);\n\n const searchNowOrDebounced = (next: string) => {\n setInternalValue(next);\n if (next) {\n debouncedSearch(next);\n return;\n }\n debouncedSearch.cancel();\n onSearch('');\n };\n\n return (\n <SearchInput\n ref={inputRef}\n label={label}\n placeholder={placeholder}\n size={size}\n value={internalValue}\n onValueChange={searchNowOrDebounced}\n className=\"w-full max-w-120\"\n />\n );\n};\n"],"mappings":";;;;;;AAyBA,IAAa,cAAc,EACzB,UACA,OACA,aACA,aAAa,KACb,MACA,OAAO,iBACP,mBAAmB,YACE;CACrB,MAAM,CAAC,eAAe,oBAAoB,SAAS,mBAAmB,EAAE;CACxE,MAAM,WAAW,OAAyB,IAAI;CAE9C,WACE,EACE,qBAAqB;EACnB,SAAS,SAAS,MAAM;EACxB,SAAS,SAAS,OAAO;CAC3B,EACF,GACA,EAAE,SAAS,CAAC,iBAAiB,CAC/B;CAEA,MAAM,kBAAkB,sBAAsB,QAAgB;EAC5D,SAAS,GAAG;CACd,GAAG,UAAU;CAKb,gBAAgB;EACd,IAAI,oBAAoB,KAAA,GAAW;GACjC,gBAAgB,OAAO;GACvB,iBAAiB,eAAe;EAClC;CACF,GAAG,CAAC,iBAAiB,eAAe,CAAC;CAErC,sBAAsB,gBAAgB,OAAO,GAAG,CAAC,eAAe,CAAC;CAEjE,MAAM,wBAAwB,SAAiB;EAC7C,iBAAiB,IAAI;EACrB,IAAI,MAAM;GACR,gBAAgB,IAAI;GACpB;EACF;EACA,gBAAgB,OAAO;EACvB,SAAS,EAAE;CACb;CAEA,OACE,oBAAC,aAAD;EACE,KAAK;EACE;EACM;EACP;EACN,OAAO;EACP,eAAe;EACf,WAAU;CACX,CAAA;AAEL"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"observability-saved-views-Bo5kLN20.js","names":["_Fragment"],"sources":["../src/ds/components/SavedViews/saved-view-picker.tsx","../src/domains/observability/saved-views/observability-saved-views.tsx"],"sourcesContent":["import { CopyIcon, EllipsisIcon, LayersIcon, LayersPlusIcon, TextCursorInputIcon, Trash2Icon } from 'lucide-react';\nimport { useRef, useState } from 'react';\nimport type { FormEvent, ReactNode, RefObject } from 'react';\nimport { MAX_SAVED_VIEW_NAME_CHARS } from './saved-view-schema';\nimport type { SavedView } from './saved-view-schema';\nimport type { SavedViewsController } from './use-saved-views';\nimport { Button } from '@/ds/components/Button/Button';\nimport {\n ComboboxContent,\n ComboboxEmpty,\n ComboboxItem,\n ComboboxItemEnd,\n ComboboxList,\n ComboboxRoot,\n ComboboxSearch,\n ComboboxTrigger,\n} from '@/ds/components/Combobox/combobox-parts';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu';\nimport { Field, FieldError } from '@/ds/components/Field';\nimport { Input } from '@/ds/components/Input/input';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/ds/components/Popover';\nimport { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\nexport type SavedViewPickerProps<TSettings> = {\n views: SavedViewsController<TSettings>;\n /** Names the page's unfiltered state, e.g. \"All traces\". */\n defaultLabel: string;\n newViewSettings: NoInfer<TSettings>;\n /** Muted text after a view in the list, e.g. \"Shared\". */\n describeView?: (view: SavedView<TSettings>) => ReactNode;\n /** Whether a view can be renamed, deleted or overwritten. Others can still be applied and duplicated. */\n canEdit?: (view: SavedView<TSettings>) => boolean;\n 'aria-label'?: string;\n className?: string;\n};\n\ntype PickerItem = { value: string; label: string; viewId: string | undefined };\n\nconst DEFAULT_ITEM_VALUE = '';\n\n/**\n * A compact saved-views control for a page header: a searchable view picker, the active view's\n * actions, and save / reset once the page differs from the view. Driven by the same controller\n * as `SavedViewTabs`.\n */\nexport function SavedViewPicker<TSettings>({\n views,\n defaultLabel,\n newViewSettings,\n describeView,\n canEdit = () => true,\n 'aria-label': ariaLabel = 'Views',\n className,\n}: SavedViewPickerProps<TSettings>) {\n const anchorRef = useRef<HTMLDivElement>(null);\n const [renaming, setRenaming] = useState(false);\n const { draft, activeView } = views;\n const creating = draft !== undefined && draft.viewId === undefined;\n const activeUnsaved = !creating && draft?.viewId !== undefined && views.unsaved;\n const editable = activeView !== undefined && canEdit(activeView);\n\n const items: PickerItem[] = [\n { value: DEFAULT_ITEM_VALUE, label: defaultLabel, viewId: undefined },\n ...views.views.map(view => ({ value: view.id, label: view.name, viewId: view.id })),\n ];\n const selected = items.find(item => item.viewId === activeView?.id) ?? items[0];\n const viewsById = new Map(views.views.map(view => [view.id, view]));\n\n return (\n <div\n role=\"group\"\n aria-label={ariaLabel}\n className={cn('flex min-w-0 flex-wrap items-center justify-end gap-1.5', className)}\n >\n {views.error && !creating && !renaming && (\n <Txt role=\"alert\" variant=\"caption\" className=\"min-w-0 truncate text-destructive-foreground\">\n {views.error}\n </Txt>\n )}\n {activeUnsaved && (\n <div className=\"flex shrink-0 items-center gap-1.5\">\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" disabled={views.pending} onClick={views.discard}>\n Reset\n </Button>\n {editable && (\n <Button type=\"button\" variant=\"default\" size=\"sm\" disabled={views.pending} onClick={views.save}>\n Save changes\n </Button>\n )}\n </div>\n )}\n <div ref={anchorRef} className=\"flex min-w-0 items-center gap-0.5\">\n <ComboboxRoot\n items={items}\n value={selected}\n onValueChange={(item: PickerItem | null) => {\n if (item) views.select(item.viewId);\n }}\n isItemEqualToValue={(item: PickerItem, value: PickerItem) => item.value === value.value}\n autoHighlight\n >\n <ComboboxTrigger\n size=\"sm\"\n icon={<LayersIcon />}\n aria-label={`View: ${selected?.label}${activeUnsaved ? ', unsaved changes' : ''}`}\n className=\"max-w-60\"\n >\n {selected?.label}\n {activeUnsaved && (\n <span className=\"ml-1.5 inline-block size-1.5 rounded-full bg-warning-indicator align-middle\" />\n )}\n </ComboboxTrigger>\n <ComboboxContent align=\"end\">\n <ComboboxSearch placeholder=\"Search views…\" />\n <ComboboxEmpty>No views found.</ComboboxEmpty>\n <ComboboxList>\n {(item: PickerItem) => {\n const view = item.viewId ? viewsById.get(item.viewId) : undefined;\n return (\n <ComboboxItem key={item.value} value={item}>\n <span className=\"truncate\">{item.label}</span>\n {view && describeView && <ComboboxItemEnd>{describeView(view)}</ComboboxItemEnd>}\n </ComboboxItem>\n );\n }}\n </ComboboxList>\n </ComboboxContent>\n </ComboboxRoot>\n {activeView && !creating && (\n <DropdownMenu>\n <DropdownMenu.Trigger variant=\"ghost\" size=\"icon-sm\" tooltip=\"View actions\" className=\"shrink-0\">\n <EllipsisIcon />\n </DropdownMenu.Trigger>\n <DropdownMenu.Content align=\"end\">\n {editable && (\n <DropdownMenu.Item onClick={() => setRenaming(true)}>\n <TextCursorInputIcon aria-hidden />\n Rename\n </DropdownMenu.Item>\n )}\n <DropdownMenu.Item onClick={() => views.duplicate(activeView.id)}>\n <CopyIcon aria-hidden />\n Duplicate\n </DropdownMenu.Item>\n {editable && (\n <>\n <DropdownMenu.Separator />\n <DropdownMenu.Item variant=\"destructive\" onClick={() => views.remove(activeView.id)}>\n <Trash2Icon aria-hidden />\n Delete view\n </DropdownMenu.Item>\n </>\n )}\n </DropdownMenu.Content>\n </DropdownMenu>\n )}\n </div>\n <Popover\n open={creating}\n onOpenChange={open => {\n if (open) views.create(newViewSettings);\n else views.discard();\n }}\n >\n <PopoverTrigger variant=\"ghost\" size=\"icon-sm\" tooltip=\"Save as new view\" className=\"shrink-0\">\n <LayersPlusIcon />\n </PopoverTrigger>\n <PopoverContent align=\"end\" className=\"w-72\">\n {creating && (\n <ViewNameForm\n title=\"Save as new view\"\n initialName={draft.name}\n submitLabel=\"Save view\"\n error={views.error}\n pending={views.pending}\n onNameChange={name => views.change({ name })}\n onSubmit={() => views.save()}\n onCancel={views.discard}\n />\n )}\n </PopoverContent>\n </Popover>\n {activeView && (\n <RenamePopover\n open={renaming}\n anchorRef={anchorRef}\n name={activeView.name}\n error={views.error}\n pending={views.pending}\n onClose={() => setRenaming(false)}\n onRename={name => views.rename(activeView.id, name)}\n />\n )}\n </div>\n );\n}\n\nfunction RenamePopover({\n open,\n anchorRef,\n name,\n error,\n pending,\n onClose,\n onRename,\n}: {\n open: boolean;\n anchorRef: RefObject<HTMLDivElement | null>;\n name: string;\n error: string | undefined;\n pending: boolean | undefined;\n onClose: () => void;\n onRename: (name: string) => boolean | Promise<boolean>;\n}) {\n // The name that last failed to save: its error shows until the user types something else.\n const [failedName, setFailedName] = useState<string>();\n const [typedName, setTypedName] = useState(name);\n const close = () => {\n setFailedName(undefined);\n setTypedName(name);\n onClose();\n };\n return (\n <Popover open={open} onOpenChange={next => !next && close()}>\n <PopoverContent anchor={anchorRef} align=\"end\" className=\"w-72\">\n {open && (\n <ViewNameForm\n title=\"Rename view\"\n initialName={name}\n submitLabel=\"Rename\"\n error={failedName !== undefined && failedName === typedName ? error : undefined}\n pending={pending}\n onNameChange={setTypedName}\n onSubmit={async next => {\n if (await onRename(next)) close();\n else setFailedName(next);\n }}\n onCancel={close}\n />\n )}\n </PopoverContent>\n </Popover>\n );\n}\n\nfunction ViewNameForm({\n title,\n initialName,\n submitLabel,\n error,\n pending,\n onNameChange,\n onSubmit,\n onCancel,\n}: {\n title: string;\n initialName: string;\n submitLabel: string;\n error?: string;\n pending?: boolean;\n onNameChange?: (name: string) => void;\n onSubmit: (name: string) => void | Promise<void>;\n onCancel: () => void;\n}) {\n const [name, setName] = useState(initialName);\n const submit = (event: FormEvent) => {\n event.preventDefault();\n if (name.trim()) void onSubmit(name);\n };\n return (\n <form className=\"flex flex-col gap-3\" onSubmit={submit}>\n <Txt as=\"h2\" variant=\"label\">\n {title}\n </Txt>\n <Field invalid={error !== undefined}>\n <Input\n aria-label=\"View name\"\n size=\"sm\"\n autoFocus\n onFocus={event => event.currentTarget.select()}\n maxLength={MAX_SAVED_VIEW_NAME_CHARS}\n value={name}\n onChange={event => {\n setName(event.target.value);\n onNameChange?.(event.target.value);\n }}\n />\n <FieldError>{error}</FieldError>\n </Field>\n <div className=\"flex justify-end gap-1.5\">\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={onCancel}>\n Cancel\n </Button>\n <Button type=\"submit\" variant=\"default\" size=\"sm\" disabled={pending || !name.trim()}>\n {submitLabel}\n </Button>\n </div>\n </form>\n );\n}\n","import type { SavedViewPage } from '@mastra/core/storage';\nimport { createPortal } from 'react-dom';\nimport { useSavedViewsSource } from './saved-views-source';\nimport type { SavedViewsContextValue } from './saved-views-source';\nimport { useHostedSavedViews } from './use-hosted-saved-views';\nimport type { SavedViewColumnsControl } from './use-hosted-saved-views';\nimport { useObservabilityHeaderSlot } from '@/domains/observability/components/observability-header-slot';\nimport { SavedViewPicker } from '@/ds/components/SavedViews/saved-view-picker';\nimport type { SetURLSearchParamsLike } from '@/lib/sort/use-url-sort';\nimport { cn } from '@/lib/utils';\n\nconst DEFAULT_LABELS: Record<SavedViewPage, string> = {\n traces: 'All traces',\n spans: 'All spans',\n threads: 'All threads',\n logs: 'All logs',\n};\n\nexport type ObservabilitySavedViewsProps = {\n page: SavedViewPage;\n searchParams: URLSearchParams;\n setSearchParams: SetURLSearchParamsLike;\n /** The page's column picker (traces, spans, threads), so views save and restore columns. */\n columns?: SavedViewColumnsControl;\n /**\n * The range the page shows when the URL names none, when the host's differs from the page's own\n * (the same value passed to `useObservabilityListFilters`).\n */\n defaultDatePreset?: string;\n className?: string;\n};\n\n/**\n * The saved views of an observability page: a searchable view picker with save and reset actions.\n * Inside the shared traces / spans / threads header it moves into that header's row. Renders nothing\n * unless a `SavedViewsProvider` above it supplies where views are stored.\n */\nexport function ObservabilitySavedViews(props: ObservabilitySavedViewsProps) {\n const context = useSavedViewsSource();\n if (!context) return null;\n return <HostedSavedViewsBar {...props} {...context} />;\n}\n\nfunction HostedSavedViewsBar({\n page,\n searchParams,\n setSearchParams,\n columns,\n defaultDatePreset,\n className,\n source,\n queryKeyScope,\n canEdit,\n}: ObservabilitySavedViewsProps & SavedViewsContextValue) {\n const headerSlot = useObservabilityHeaderSlot();\n const views = useHostedSavedViews({\n page,\n source,\n queryKeyScope,\n canEdit,\n searchParams,\n setSearchParams,\n columns,\n defaultDatePreset,\n });\n\n const picker = (\n <SavedViewPicker\n views={views}\n defaultLabel={DEFAULT_LABELS[page]}\n aria-label=\"Saved views\"\n newViewSettings={{ state: { schemaVersion: 1, page, filters: [] } }}\n describeView={view => (view.settings.record?.scope === 'org' ? 'Shared' : undefined)}\n canEdit={view => !canEdit || !view.settings.record || canEdit(view.settings.record)}\n className={className}\n />\n );\n return headerSlot ? createPortal(picker, headerSlot) : picker;\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"observability-saved-views-CwCii7hh.cjs","names":["useRef","useState","cn","Txt","Button","ComboboxRoot","ComboboxTrigger","LayersIcon","ComboboxContent","ComboboxSearch","ComboboxEmpty","ComboboxList","ComboboxItem","ComboboxItemEnd","DropdownMenu","EllipsisIcon","TextCursorInputIcon","CopyIcon","_Fragment","Trash2Icon","Popover","PopoverTrigger","LayersPlusIcon","PopoverContent","Field","Input","FieldError","useSavedViewsSource","useObservabilityHeaderSlot","useHostedSavedViews","createPortal"],"sources":["../src/ds/components/SavedViews/saved-view-picker.tsx","../src/domains/observability/saved-views/observability-saved-views.tsx"],"sourcesContent":["import { CopyIcon, EllipsisIcon, LayersIcon, LayersPlusIcon, TextCursorInputIcon, Trash2Icon } from 'lucide-react';\nimport { useRef, useState } from 'react';\nimport type { FormEvent, ReactNode, RefObject } from 'react';\nimport { MAX_SAVED_VIEW_NAME_CHARS } from './saved-view-schema';\nimport type { SavedView } from './saved-view-schema';\nimport type { SavedViewsController } from './use-saved-views';\nimport { Button } from '@/ds/components/Button/Button';\nimport {\n ComboboxContent,\n ComboboxEmpty,\n ComboboxItem,\n ComboboxItemEnd,\n ComboboxList,\n ComboboxRoot,\n ComboboxSearch,\n ComboboxTrigger,\n} from '@/ds/components/Combobox/combobox-parts';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu';\nimport { Field, FieldError } from '@/ds/components/Field';\nimport { Input } from '@/ds/components/Input/input';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/ds/components/Popover';\nimport { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\nexport type SavedViewPickerProps<TSettings> = {\n views: SavedViewsController<TSettings>;\n /** Names the page's unfiltered state, e.g. \"All traces\". */\n defaultLabel: string;\n newViewSettings: NoInfer<TSettings>;\n /** Muted text after a view in the list, e.g. \"Shared\". */\n describeView?: (view: SavedView<TSettings>) => ReactNode;\n /** Whether a view can be renamed, deleted or overwritten. Others can still be applied and duplicated. */\n canEdit?: (view: SavedView<TSettings>) => boolean;\n 'aria-label'?: string;\n className?: string;\n};\n\ntype PickerItem = { value: string; label: string; viewId: string | undefined };\n\nconst DEFAULT_ITEM_VALUE = '';\n\n/**\n * A compact saved-views control for a page header: a searchable view picker, the active view's\n * actions, and save / reset once the page differs from the view. Driven by the same controller\n * as `SavedViewTabs`.\n */\nexport function SavedViewPicker<TSettings>({\n views,\n defaultLabel,\n newViewSettings,\n describeView,\n canEdit = () => true,\n 'aria-label': ariaLabel = 'Views',\n className,\n}: SavedViewPickerProps<TSettings>) {\n const anchorRef = useRef<HTMLDivElement>(null);\n const [renaming, setRenaming] = useState(false);\n const { draft, activeView } = views;\n const creating = draft !== undefined && draft.viewId === undefined;\n const activeUnsaved = !creating && draft?.viewId !== undefined && views.unsaved;\n const editable = activeView !== undefined && canEdit(activeView);\n\n const items: PickerItem[] = [\n { value: DEFAULT_ITEM_VALUE, label: defaultLabel, viewId: undefined },\n ...views.views.map(view => ({ value: view.id, label: view.name, viewId: view.id })),\n ];\n const selected = items.find(item => item.viewId === activeView?.id) ?? items[0];\n const viewsById = new Map(views.views.map(view => [view.id, view]));\n\n return (\n <div\n role=\"group\"\n aria-label={ariaLabel}\n className={cn('flex min-w-0 flex-wrap items-center justify-end gap-1.5', className)}\n >\n {views.error && !creating && !renaming && (\n <Txt role=\"alert\" variant=\"caption\" className=\"min-w-0 truncate text-destructive-foreground\">\n {views.error}\n </Txt>\n )}\n {activeUnsaved && (\n <div className=\"flex shrink-0 items-center gap-1.5\">\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" disabled={views.pending} onClick={views.discard}>\n Reset\n </Button>\n {editable && (\n <Button type=\"button\" variant=\"default\" size=\"sm\" disabled={views.pending} onClick={views.save}>\n Save changes\n </Button>\n )}\n </div>\n )}\n <div ref={anchorRef} className=\"flex min-w-0 items-center gap-0.5\">\n <ComboboxRoot\n items={items}\n value={selected}\n onValueChange={(item: PickerItem | null) => {\n if (item) views.select(item.viewId);\n }}\n isItemEqualToValue={(item: PickerItem, value: PickerItem) => item.value === value.value}\n autoHighlight\n >\n <ComboboxTrigger\n size=\"sm\"\n icon={<LayersIcon />}\n aria-label={`View: ${selected?.label}${activeUnsaved ? ', unsaved changes' : ''}`}\n className=\"max-w-60\"\n >\n {selected?.label}\n {activeUnsaved && (\n <span className=\"ml-1.5 inline-block size-1.5 rounded-full bg-warning-indicator align-middle\" />\n )}\n </ComboboxTrigger>\n <ComboboxContent align=\"end\">\n <ComboboxSearch placeholder=\"Search views…\" />\n <ComboboxEmpty>No views found.</ComboboxEmpty>\n <ComboboxList>\n {(item: PickerItem) => {\n const view = item.viewId ? viewsById.get(item.viewId) : undefined;\n return (\n <ComboboxItem key={item.value} value={item}>\n <span className=\"truncate\">{item.label}</span>\n {view && describeView && <ComboboxItemEnd>{describeView(view)}</ComboboxItemEnd>}\n </ComboboxItem>\n );\n }}\n </ComboboxList>\n </ComboboxContent>\n </ComboboxRoot>\n {activeView && !creating && (\n <DropdownMenu>\n <DropdownMenu.Trigger variant=\"ghost\" size=\"icon-sm\" tooltip=\"View actions\" className=\"shrink-0\">\n <EllipsisIcon />\n </DropdownMenu.Trigger>\n <DropdownMenu.Content align=\"end\">\n {editable && (\n <DropdownMenu.Item onClick={() => setRenaming(true)}>\n <TextCursorInputIcon aria-hidden />\n Rename\n </DropdownMenu.Item>\n )}\n <DropdownMenu.Item onClick={() => views.duplicate(activeView.id)}>\n <CopyIcon aria-hidden />\n Duplicate\n </DropdownMenu.Item>\n {editable && (\n <>\n <DropdownMenu.Separator />\n <DropdownMenu.Item variant=\"destructive\" onClick={() => views.remove(activeView.id)}>\n <Trash2Icon aria-hidden />\n Delete view\n </DropdownMenu.Item>\n </>\n )}\n </DropdownMenu.Content>\n </DropdownMenu>\n )}\n </div>\n <Popover\n open={creating}\n onOpenChange={open => {\n if (open) views.create(newViewSettings);\n else views.discard();\n }}\n >\n <PopoverTrigger variant=\"ghost\" size=\"icon-sm\" tooltip=\"Save as new view\" className=\"shrink-0\">\n <LayersPlusIcon />\n </PopoverTrigger>\n <PopoverContent align=\"end\" className=\"w-72\">\n {creating && (\n <ViewNameForm\n title=\"Save as new view\"\n initialName={draft.name}\n submitLabel=\"Save view\"\n error={views.error}\n pending={views.pending}\n onNameChange={name => views.change({ name })}\n onSubmit={() => views.save()}\n onCancel={views.discard}\n />\n )}\n </PopoverContent>\n </Popover>\n {activeView && (\n <RenamePopover\n open={renaming}\n anchorRef={anchorRef}\n name={activeView.name}\n error={views.error}\n pending={views.pending}\n onClose={() => setRenaming(false)}\n onRename={name => views.rename(activeView.id, name)}\n />\n )}\n </div>\n );\n}\n\nfunction RenamePopover({\n open,\n anchorRef,\n name,\n error,\n pending,\n onClose,\n onRename,\n}: {\n open: boolean;\n anchorRef: RefObject<HTMLDivElement | null>;\n name: string;\n error: string | undefined;\n pending: boolean | undefined;\n onClose: () => void;\n onRename: (name: string) => boolean | Promise<boolean>;\n}) {\n // The name that last failed to save: its error shows until the user types something else.\n const [failedName, setFailedName] = useState<string>();\n const [typedName, setTypedName] = useState(name);\n const close = () => {\n setFailedName(undefined);\n setTypedName(name);\n onClose();\n };\n return (\n <Popover open={open} onOpenChange={next => !next && close()}>\n <PopoverContent anchor={anchorRef} align=\"end\" className=\"w-72\">\n {open && (\n <ViewNameForm\n title=\"Rename view\"\n initialName={name}\n submitLabel=\"Rename\"\n error={failedName !== undefined && failedName === typedName ? error : undefined}\n pending={pending}\n onNameChange={setTypedName}\n onSubmit={async next => {\n if (await onRename(next)) close();\n else setFailedName(next);\n }}\n onCancel={close}\n />\n )}\n </PopoverContent>\n </Popover>\n );\n}\n\nfunction ViewNameForm({\n title,\n initialName,\n submitLabel,\n error,\n pending,\n onNameChange,\n onSubmit,\n onCancel,\n}: {\n title: string;\n initialName: string;\n submitLabel: string;\n error?: string;\n pending?: boolean;\n onNameChange?: (name: string) => void;\n onSubmit: (name: string) => void | Promise<void>;\n onCancel: () => void;\n}) {\n const [name, setName] = useState(initialName);\n const submit = (event: FormEvent) => {\n event.preventDefault();\n if (name.trim()) void onSubmit(name);\n };\n return (\n <form className=\"flex flex-col gap-3\" onSubmit={submit}>\n <Txt as=\"h2\" variant=\"label\">\n {title}\n </Txt>\n <Field invalid={error !== undefined}>\n <Input\n aria-label=\"View name\"\n size=\"sm\"\n autoFocus\n onFocus={event => event.currentTarget.select()}\n maxLength={MAX_SAVED_VIEW_NAME_CHARS}\n value={name}\n onChange={event => {\n setName(event.target.value);\n onNameChange?.(event.target.value);\n }}\n />\n <FieldError>{error}</FieldError>\n </Field>\n <div className=\"flex justify-end gap-1.5\">\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={onCancel}>\n Cancel\n </Button>\n <Button type=\"submit\" variant=\"default\" size=\"sm\" disabled={pending || !name.trim()}>\n {submitLabel}\n </Button>\n </div>\n </form>\n );\n}\n","import type { SavedViewPage } from '@mastra/core/storage';\nimport { createPortal } from 'react-dom';\nimport { useSavedViewsSource } from './saved-views-source';\nimport type { SavedViewsContextValue } from './saved-views-source';\nimport { useHostedSavedViews } from './use-hosted-saved-views';\nimport type { SavedViewColumnsControl } from './use-hosted-saved-views';\nimport { useObservabilityHeaderSlot } from '@/domains/observability/components/observability-header-slot';\nimport { SavedViewPicker } from '@/ds/components/SavedViews/saved-view-picker';\nimport type { SetURLSearchParamsLike } from '@/lib/sort/use-url-sort';\nimport { cn } from '@/lib/utils';\n\nconst DEFAULT_LABELS: Record<SavedViewPage, string> = {\n traces: 'All traces',\n spans: 'All spans',\n threads: 'All threads',\n logs: 'All logs',\n};\n\nexport type ObservabilitySavedViewsProps = {\n page: SavedViewPage;\n searchParams: URLSearchParams;\n setSearchParams: SetURLSearchParamsLike;\n /** The page's column picker (traces, spans, threads), so views save and restore columns. */\n columns?: SavedViewColumnsControl;\n /**\n * The range the page shows when the URL names none, when the host's differs from the page's own\n * (the same value passed to `useObservabilityListFilters`).\n */\n defaultDatePreset?: string;\n className?: string;\n};\n\n/**\n * The saved views of an observability page: a searchable view picker with save and reset actions.\n * Inside the shared traces / spans / threads header it moves into that header's row. Renders nothing\n * unless a `SavedViewsProvider` above it supplies where views are stored.\n */\nexport function ObservabilitySavedViews(props: ObservabilitySavedViewsProps) {\n const context = useSavedViewsSource();\n if (!context) return null;\n return <HostedSavedViewsBar {...props} {...context} />;\n}\n\nfunction HostedSavedViewsBar({\n page,\n searchParams,\n setSearchParams,\n columns,\n defaultDatePreset,\n className,\n source,\n queryKeyScope,\n canEdit,\n}: ObservabilitySavedViewsProps & SavedViewsContextValue) {\n const headerSlot = useObservabilityHeaderSlot();\n const views = useHostedSavedViews({\n page,\n source,\n queryKeyScope,\n canEdit,\n searchParams,\n setSearchParams,\n columns,\n defaultDatePreset,\n });\n\n const picker = (\n <SavedViewPicker\n views={views}\n defaultLabel={DEFAULT_LABELS[page]}\n aria-label=\"Saved views\"\n newViewSettings={{ state: { schemaVersion: 1, page, filters: [] } }}\n describeView={view => (view.settings.record?.scope === 'org' ? 'Shared' : undefined)}\n canEdit={view => !canEdit || !view.settings.record || canEdit(view.settings.record)}\n className={className}\n />\n );\n return headerSlot ? createPortal(picker, headerSlot) : picker;\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"select-BbFpEBAY.js","names":["React","Select","SelectPrimitive"],"sources":["../src/ds/components/Select/select.tsx"],"sourcesContent":["import { Select as SelectPrimitive } from '@base-ui/react/select';\nimport type { SelectPopupProps, SelectPositionerProps } from '@base-ui/react/select';\nimport { Check, ChevronDown } from 'lucide-react';\nimport * as React from 'react';\n\nimport { buttonVariants } from '../Button/Button';\nimport type { TextButtonSize } from '../Button/Button';\nimport { keepOwnAccessibleName } from '@/ds/components/Field/field-control-aria';\nimport { controlTriggerOpenState } from '@/ds/primitives/control-size';\nimport { FLOATING_POSITION_METHOD } from '@/ds/primitives/floating';\nimport { fieldTriggerErrorBorder, fieldTriggerStyle, fieldTriggerWidthStyle } from '@/ds/primitives/form-element';\nimport {\n menuItemCheckClass,\n menuItemClass,\n menuPopupClass,\n menuPositionerClass,\n menuSeparatorClass,\n} from '@/ds/primitives/menu-item';\nimport { menuScrollPopupClass, MenuScrollArea } from '@/ds/primitives/menu-scroll-area';\nimport { usePortalContainer } from '@/ds/primitives/portal-container';\nimport { transitions } from '@/ds/primitives/transitions';\nimport { cn } from '@/lib/utils';\n\n/**\n * Select migrated from `@radix-ui/react-select` to Base UI (`@base-ui/react/select`).\n *\n * The public API (`Select`, `SelectGroup`, `SelectValue`, `SelectTrigger`,\n * `SelectContent`, `SelectItem`) is intentionally kept stable so existing\n * consumers do not need changes.\n *\n * Notable behavioral differences vs. Radix that consumers should be aware of:\n * - `onValueChange` now receives a second `eventDetails` argument. Existing\n * handlers typed as `(value: string) => void` keep working (extra arg ignored).\n * - The dropdown no longer overlaps the trigger by default\n * (`alignItemWithTrigger={false}`), matching the previous Radix `popper`\n * positioning behavior.\n *\n * Implementation note: unlike Radix, Base UI's `Select.Value` can only resolve\n * a selected value to its label once the popup has mounted (it reads labels\n * from rendered items). To preserve the Radix behavior where the trigger shows\n * the selected label even while closed, `Select` auto-derives an `items` map\n * from the `SelectItem`s declared inside `SelectContent` and passes it to\n * `Select.Root`. Consumers can still pass an explicit `items` prop to override.\n */\ntype SelectItemNode = React.ReactElement<{ value: unknown; children?: React.ReactNode }>;\n\nfunction isSelectItem(node: React.ReactNode): node is SelectItemNode {\n return React.isValidElement(node) && (node.type as { displayName?: string })?.displayName === 'SelectItem';\n}\n\n/** Recursively collect `{ value, label }` pairs from declared `SelectItem`s. */\nfunction collectItems(children: React.ReactNode, acc: Array<{ value: unknown; label: React.ReactNode }>): void {\n React.Children.forEach(children, child => {\n if (!React.isValidElement(child)) return;\n if (isSelectItem(child)) {\n acc.push({ value: child.props.value, label: child.props.children });\n return;\n }\n const nested = (child.props as { children?: React.ReactNode })?.children;\n if (nested != null) collectItems(nested, acc);\n });\n}\n\ntype SelectRootProps<Value> = SelectPrimitive.Root.Props<Value>;\ntype SelectChangeDetails = Parameters<NonNullable<SelectRootProps<unknown>['onValueChange']>>[1];\n\n/**\n * `onValueChange` is intentionally narrowed to a non-null value: these selects\n * always hold a value once changed, which keeps existing `(value) => void`\n * consumer handlers valid (Base UI's own callback type is `Value | null`).\n */\ntype SelectProps<Value = string> = Omit<SelectRootProps<Value>, 'onValueChange'> & {\n onValueChange?: (value: Value, eventDetails: SelectChangeDetails) => void;\n};\n\nfunction Select<Value = string>({ children, items, onValueChange, ...props }: SelectProps<Value>) {\n const derivedItems = React.useMemo(() => {\n if (items != null) return items;\n const acc: Array<{ value: unknown; label: React.ReactNode }> = [];\n collectItems(children, acc);\n return acc.length > 0 ? acc : undefined;\n }, [items, children]);\n\n return (\n <SelectPrimitive.Root\n items={derivedItems}\n onValueChange={onValueChange ? (value, eventDetails) => onValueChange(value as Value, eventDetails) : undefined}\n {...props}\n >\n {children}\n </SelectPrimitive.Root>\n );\n}\nSelect.displayName = 'Select';\n\nconst SelectGroup = SelectPrimitive.Group;\n\nexport type SelectValueProps = Omit<SelectPrimitive.Value.Props, 'className'> & {\n className?: string;\n};\n\n/**\n * Displays the selected value. Radix's `Select.Value` took a `placeholder`\n * prop and rendered the selected item's text automatically; Base UI's\n * `Select.Value` behaves the same way (renders the value, falls back to\n * `placeholder` when nothing is selected), so this is a thin passthrough.\n */\nconst SelectValue = React.forwardRef<HTMLSpanElement, SelectValueProps>(({ className, ...props }, ref) => (\n <SelectPrimitive.Value ref={ref} className={cn('truncate', className)} {...props} />\n));\nSelectValue.displayName = 'SelectValue';\n\n/**\n * A select is a form field, so it reuses the Button's size/shape recipe with\n * these looks: `default` (the Input's overlay surface — the default here too,\n * so a select sits next to an Input as the same kind of thing) and `ghost`\n * (borderless, for dense toolbars/inline pickers). The high-emphasis `primary` look is the only one intentionally NOT\n * offered (a field is not a call-to-action).\n */\nexport type SelectTriggerVariant = 'default' | 'ghost';\ntype SelectTriggerLegacyVariant = 'primary';\n\nexport type SelectTriggerProps = Omit<SelectPrimitive.Trigger.Props, 'className'> & {\n className?: string;\n size?: TextButtonSize;\n variant?: SelectTriggerVariant | SelectTriggerLegacyVariant;\n};\n\nfunction normalizeSelectTriggerVariant(\n variant: SelectTriggerVariant | SelectTriggerLegacyVariant,\n): SelectTriggerVariant {\n return variant === 'primary' ? 'default' : variant;\n}\n\nconst SelectTrigger = React.forwardRef<HTMLButtonElement, SelectTriggerProps>(\n ({ className, children, size = 'md', variant = 'default', ...props }, ref) => {\n const visualVariant = normalizeSelectTriggerVariant(variant);\n\n return (\n <SelectPrimitive.Trigger\n ref={ref}\n data-slot=\"select-trigger\"\n // A select = a button + a trailing chevron: reuse the Button recipe\n // (variant colors, size = height/text/padding/radius, unified border\n // focus, disabled) and layer only the select-specific extras.\n className={cn(\n buttonVariants({ variant: visualVariant, size }),\n visualVariant === 'default' && fieldTriggerStyle,\n // Fill the field and push the value left / chevron right (Button's\n // base centers its content with `justify-center`).\n fieldTriggerWidthStyle,\n 'justify-between',\n // Read as \"active\" while the menu is open, per variant (see map above).\n controlTriggerOpenState[visualVariant],\n 'data-[placeholder]:text-muted-foreground',\n fieldTriggerErrorBorder,\n '[&>span]:truncate',\n className,\n )}\n {...props}\n {...keepOwnAccessibleName(props)}\n >\n {children}\n {/* `SelectPrimitive.Icon` renders the provided element in place of its\n default `<span>`, so the chevron would land as a *direct* `<svg>`\n child of the trigger — where Button's `TEXT_MODE_ADORNMENTS`\n `[&>svg]` rules (negative `mx`, forced 50% opacity, 1.1em sizing)\n would distort and mis-position it. Wrapping it in a `<span>` keeps\n the svg one level deep so those rules can't reach it, leaving the\n chevron pinned at the right edge at its intended size and color. */}\n <SelectPrimitive.Icon\n render={\n <span className=\"flex shrink-0 items-center\">\n <ChevronDown className={cn('size-4 text-muted-foreground', transitions.colors)} />\n </span>\n }\n />\n </SelectPrimitive.Trigger>\n );\n },\n);\nSelectTrigger.displayName = 'SelectTrigger';\n\ntype SelectContentPositionerProps = Omit<SelectPositionerProps, keyof SelectPopupProps>;\n\nexport type SelectContentProps = Omit<SelectPopupProps, 'className'> &\n SelectContentPositionerProps & {\n className?: string;\n /**\n * Kept for API compatibility with the previous Radix API. Radix supported\n * `position=\"popper\" | \"item-aligned\"`; Base UI always uses popper-style\n * positioning so this prop is accepted but has no effect.\n */\n position?: 'popper' | 'item-aligned';\n /** Optional portal container, forwarded to `Select.Portal`. */\n container?: HTMLElement | null;\n };\n\nconst SelectContent = React.forwardRef<HTMLDivElement, SelectContentProps>(\n (\n {\n className,\n children,\n position: _position,\n container,\n side = 'bottom',\n align = 'start',\n sideOffset = 4,\n alignItemWithTrigger = false,\n anchor,\n positionMethod = FLOATING_POSITION_METHOD,\n alignOffset,\n collisionBoundary,\n collisionPadding,\n sticky,\n arrowPadding,\n disableAnchorTracking,\n collisionAvoidance,\n ...props\n },\n ref,\n ) => {\n // Default to the nearest SideDialog/Drawer popup so the dropdown stays\n // interactive inside a modal drawer; an explicit `container` still wins.\n const resolvedContainer = usePortalContainer(container);\n const positionerProps: SelectContentPositionerProps = {\n side,\n align,\n sideOffset,\n alignItemWithTrigger,\n anchor,\n positionMethod,\n alignOffset,\n collisionBoundary,\n collisionPadding,\n sticky,\n arrowPadding,\n disableAnchorTracking,\n collisionAvoidance,\n };\n\n return (\n <SelectPrimitive.Portal container={resolvedContainer}>\n <SelectPrimitive.Positioner className={menuPositionerClass} {...positionerProps}>\n <SelectPrimitive.Popup ref={ref} className={cn(menuPopupClass, menuScrollPopupClass, className)} {...props}>\n {/* The viewport is Select's list, so Select scrolls it to line the selected item up with the\n trigger. `role` is restated because the viewport's own `presentation` role would win. */}\n <MenuScrollArea viewportRender={<SelectPrimitive.List role=\"listbox\" />}>{children}</MenuScrollArea>\n </SelectPrimitive.Popup>\n </SelectPrimitive.Positioner>\n </SelectPrimitive.Portal>\n );\n },\n);\nSelectContent.displayName = 'SelectContent';\n\nexport type SelectItemProps = Omit<SelectPrimitive.Item.Props, 'className'> & {\n className?: string;\n};\n\nconst SelectItem = React.forwardRef<HTMLDivElement, SelectItemProps>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item ref={ref} className={cn(menuItemClass, className)} {...props}>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n <SelectPrimitive.ItemIndicator className={menuItemCheckClass}>\n <Check />\n </SelectPrimitive.ItemIndicator>\n </SelectPrimitive.Item>\n));\nSelectItem.displayName = 'SelectItem';\n\nexport type SelectSeparatorProps = Omit<SelectPrimitive.Separator.Props, 'className'> & {\n className?: string;\n};\n\nconst SelectSeparator = React.forwardRef<HTMLDivElement, SelectSeparatorProps>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n data-slot=\"select-separator\"\n className={cn(menuSeparatorClass, className)}\n {...props}\n />\n));\nSelectSeparator.displayName = 'SelectSeparator';\n\nexport { Select, SelectGroup, SelectValue, SelectTrigger, SelectContent, SelectItem, SelectSeparator };\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"select-NySY9Men.cjs","names":["React","SelectPrimitive","cn","buttonVariants","fieldTriggerWidthStyle","controlTriggerOpenState","fieldTriggerErrorBorder","keepOwnAccessibleName","ChevronDown","transitions","FLOATING_POSITION_METHOD","usePortalContainer","menuPositionerClass","menuPopupClass","menuScrollPopupClass","MenuScrollArea","menuItemClass","menuItemCheckClass","Check","menuSeparatorClass"],"sources":["../src/ds/components/Select/select.tsx"],"sourcesContent":["import { Select as SelectPrimitive } from '@base-ui/react/select';\nimport type { SelectPopupProps, SelectPositionerProps } from '@base-ui/react/select';\nimport { Check, ChevronDown } from 'lucide-react';\nimport * as React from 'react';\n\nimport { buttonVariants } from '../Button/Button';\nimport type { TextButtonSize } from '../Button/Button';\nimport { keepOwnAccessibleName } from '@/ds/components/Field/field-control-aria';\nimport { controlTriggerOpenState } from '@/ds/primitives/control-size';\nimport { FLOATING_POSITION_METHOD } from '@/ds/primitives/floating';\nimport { fieldTriggerErrorBorder, fieldTriggerStyle, fieldTriggerWidthStyle } from '@/ds/primitives/form-element';\nimport {\n menuItemCheckClass,\n menuItemClass,\n menuPopupClass,\n menuPositionerClass,\n menuSeparatorClass,\n} from '@/ds/primitives/menu-item';\nimport { menuScrollPopupClass, MenuScrollArea } from '@/ds/primitives/menu-scroll-area';\nimport { usePortalContainer } from '@/ds/primitives/portal-container';\nimport { transitions } from '@/ds/primitives/transitions';\nimport { cn } from '@/lib/utils';\n\n/**\n * Select migrated from `@radix-ui/react-select` to Base UI (`@base-ui/react/select`).\n *\n * The public API (`Select`, `SelectGroup`, `SelectValue`, `SelectTrigger`,\n * `SelectContent`, `SelectItem`) is intentionally kept stable so existing\n * consumers do not need changes.\n *\n * Notable behavioral differences vs. Radix that consumers should be aware of:\n * - `onValueChange` now receives a second `eventDetails` argument. Existing\n * handlers typed as `(value: string) => void` keep working (extra arg ignored).\n * - The dropdown no longer overlaps the trigger by default\n * (`alignItemWithTrigger={false}`), matching the previous Radix `popper`\n * positioning behavior.\n *\n * Implementation note: unlike Radix, Base UI's `Select.Value` can only resolve\n * a selected value to its label once the popup has mounted (it reads labels\n * from rendered items). To preserve the Radix behavior where the trigger shows\n * the selected label even while closed, `Select` auto-derives an `items` map\n * from the `SelectItem`s declared inside `SelectContent` and passes it to\n * `Select.Root`. Consumers can still pass an explicit `items` prop to override.\n */\ntype SelectItemNode = React.ReactElement<{ value: unknown; children?: React.ReactNode }>;\n\nfunction isSelectItem(node: React.ReactNode): node is SelectItemNode {\n return React.isValidElement(node) && (node.type as { displayName?: string })?.displayName === 'SelectItem';\n}\n\n/** Recursively collect `{ value, label }` pairs from declared `SelectItem`s. */\nfunction collectItems(children: React.ReactNode, acc: Array<{ value: unknown; label: React.ReactNode }>): void {\n React.Children.forEach(children, child => {\n if (!React.isValidElement(child)) return;\n if (isSelectItem(child)) {\n acc.push({ value: child.props.value, label: child.props.children });\n return;\n }\n const nested = (child.props as { children?: React.ReactNode })?.children;\n if (nested != null) collectItems(nested, acc);\n });\n}\n\ntype SelectRootProps<Value> = SelectPrimitive.Root.Props<Value>;\ntype SelectChangeDetails = Parameters<NonNullable<SelectRootProps<unknown>['onValueChange']>>[1];\n\n/**\n * `onValueChange` is intentionally narrowed to a non-null value: these selects\n * always hold a value once changed, which keeps existing `(value) => void`\n * consumer handlers valid (Base UI's own callback type is `Value | null`).\n */\ntype SelectProps<Value = string> = Omit<SelectRootProps<Value>, 'onValueChange'> & {\n onValueChange?: (value: Value, eventDetails: SelectChangeDetails) => void;\n};\n\nfunction Select<Value = string>({ children, items, onValueChange, ...props }: SelectProps<Value>) {\n const derivedItems = React.useMemo(() => {\n if (items != null) return items;\n const acc: Array<{ value: unknown; label: React.ReactNode }> = [];\n collectItems(children, acc);\n return acc.length > 0 ? acc : undefined;\n }, [items, children]);\n\n return (\n <SelectPrimitive.Root\n items={derivedItems}\n onValueChange={onValueChange ? (value, eventDetails) => onValueChange(value as Value, eventDetails) : undefined}\n {...props}\n >\n {children}\n </SelectPrimitive.Root>\n );\n}\nSelect.displayName = 'Select';\n\nconst SelectGroup = SelectPrimitive.Group;\n\nexport type SelectValueProps = Omit<SelectPrimitive.Value.Props, 'className'> & {\n className?: string;\n};\n\n/**\n * Displays the selected value. Radix's `Select.Value` took a `placeholder`\n * prop and rendered the selected item's text automatically; Base UI's\n * `Select.Value` behaves the same way (renders the value, falls back to\n * `placeholder` when nothing is selected), so this is a thin passthrough.\n */\nconst SelectValue = React.forwardRef<HTMLSpanElement, SelectValueProps>(({ className, ...props }, ref) => (\n <SelectPrimitive.Value ref={ref} className={cn('truncate', className)} {...props} />\n));\nSelectValue.displayName = 'SelectValue';\n\n/**\n * A select is a form field, so it reuses the Button's size/shape recipe with\n * these looks: `default` (the Input's overlay surface — the default here too,\n * so a select sits next to an Input as the same kind of thing) and `ghost`\n * (borderless, for dense toolbars/inline pickers). The high-emphasis `primary` look is the only one intentionally NOT\n * offered (a field is not a call-to-action).\n */\nexport type SelectTriggerVariant = 'default' | 'ghost';\ntype SelectTriggerLegacyVariant = 'primary';\n\nexport type SelectTriggerProps = Omit<SelectPrimitive.Trigger.Props, 'className'> & {\n className?: string;\n size?: TextButtonSize;\n variant?: SelectTriggerVariant | SelectTriggerLegacyVariant;\n};\n\nfunction normalizeSelectTriggerVariant(\n variant: SelectTriggerVariant | SelectTriggerLegacyVariant,\n): SelectTriggerVariant {\n return variant === 'primary' ? 'default' : variant;\n}\n\nconst SelectTrigger = React.forwardRef<HTMLButtonElement, SelectTriggerProps>(\n ({ className, children, size = 'md', variant = 'default', ...props }, ref) => {\n const visualVariant = normalizeSelectTriggerVariant(variant);\n\n return (\n <SelectPrimitive.Trigger\n ref={ref}\n data-slot=\"select-trigger\"\n // A select = a button + a trailing chevron: reuse the Button recipe\n // (variant colors, size = height/text/padding/radius, unified border\n // focus, disabled) and layer only the select-specific extras.\n className={cn(\n buttonVariants({ variant: visualVariant, size }),\n visualVariant === 'default' && fieldTriggerStyle,\n // Fill the field and push the value left / chevron right (Button's\n // base centers its content with `justify-center`).\n fieldTriggerWidthStyle,\n 'justify-between',\n // Read as \"active\" while the menu is open, per variant (see map above).\n controlTriggerOpenState[visualVariant],\n 'data-[placeholder]:text-muted-foreground',\n fieldTriggerErrorBorder,\n '[&>span]:truncate',\n className,\n )}\n {...props}\n {...keepOwnAccessibleName(props)}\n >\n {children}\n {/* `SelectPrimitive.Icon` renders the provided element in place of its\n default `<span>`, so the chevron would land as a *direct* `<svg>`\n child of the trigger — where Button's `TEXT_MODE_ADORNMENTS`\n `[&>svg]` rules (negative `mx`, forced 50% opacity, 1.1em sizing)\n would distort and mis-position it. Wrapping it in a `<span>` keeps\n the svg one level deep so those rules can't reach it, leaving the\n chevron pinned at the right edge at its intended size and color. */}\n <SelectPrimitive.Icon\n render={\n <span className=\"flex shrink-0 items-center\">\n <ChevronDown className={cn('size-4 text-muted-foreground', transitions.colors)} />\n </span>\n }\n />\n </SelectPrimitive.Trigger>\n );\n },\n);\nSelectTrigger.displayName = 'SelectTrigger';\n\ntype SelectContentPositionerProps = Omit<SelectPositionerProps, keyof SelectPopupProps>;\n\nexport type SelectContentProps = Omit<SelectPopupProps, 'className'> &\n SelectContentPositionerProps & {\n className?: string;\n /**\n * Kept for API compatibility with the previous Radix API. Radix supported\n * `position=\"popper\" | \"item-aligned\"`; Base UI always uses popper-style\n * positioning so this prop is accepted but has no effect.\n */\n position?: 'popper' | 'item-aligned';\n /** Optional portal container, forwarded to `Select.Portal`. */\n container?: HTMLElement | null;\n };\n\nconst SelectContent = React.forwardRef<HTMLDivElement, SelectContentProps>(\n (\n {\n className,\n children,\n position: _position,\n container,\n side = 'bottom',\n align = 'start',\n sideOffset = 4,\n alignItemWithTrigger = false,\n anchor,\n positionMethod = FLOATING_POSITION_METHOD,\n alignOffset,\n collisionBoundary,\n collisionPadding,\n sticky,\n arrowPadding,\n disableAnchorTracking,\n collisionAvoidance,\n ...props\n },\n ref,\n ) => {\n // Default to the nearest SideDialog/Drawer popup so the dropdown stays\n // interactive inside a modal drawer; an explicit `container` still wins.\n const resolvedContainer = usePortalContainer(container);\n const positionerProps: SelectContentPositionerProps = {\n side,\n align,\n sideOffset,\n alignItemWithTrigger,\n anchor,\n positionMethod,\n alignOffset,\n collisionBoundary,\n collisionPadding,\n sticky,\n arrowPadding,\n disableAnchorTracking,\n collisionAvoidance,\n };\n\n return (\n <SelectPrimitive.Portal container={resolvedContainer}>\n <SelectPrimitive.Positioner className={menuPositionerClass} {...positionerProps}>\n <SelectPrimitive.Popup ref={ref} className={cn(menuPopupClass, menuScrollPopupClass, className)} {...props}>\n {/* The viewport is Select's list, so Select scrolls it to line the selected item up with the\n trigger. `role` is restated because the viewport's own `presentation` role would win. */}\n <MenuScrollArea viewportRender={<SelectPrimitive.List role=\"listbox\" />}>{children}</MenuScrollArea>\n </SelectPrimitive.Popup>\n </SelectPrimitive.Positioner>\n </SelectPrimitive.Portal>\n );\n },\n);\nSelectContent.displayName = 'SelectContent';\n\nexport type SelectItemProps = Omit<SelectPrimitive.Item.Props, 'className'> & {\n className?: string;\n};\n\nconst SelectItem = React.forwardRef<HTMLDivElement, SelectItemProps>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item ref={ref} className={cn(menuItemClass, className)} {...props}>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n <SelectPrimitive.ItemIndicator className={menuItemCheckClass}>\n <Check />\n </SelectPrimitive.ItemIndicator>\n </SelectPrimitive.Item>\n));\nSelectItem.displayName = 'SelectItem';\n\nexport type SelectSeparatorProps = Omit<SelectPrimitive.Separator.Props, 'className'> & {\n className?: string;\n};\n\nconst SelectSeparator = React.forwardRef<HTMLDivElement, SelectSeparatorProps>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n data-slot=\"select-separator\"\n className={cn(menuSeparatorClass, className)}\n {...props}\n />\n));\nSelectSeparator.displayName = 'SelectSeparator';\n\nexport { Select, SelectGroup, SelectValue, SelectTrigger, SelectContent, SelectItem, SelectSeparator };\n"],"mappings":";;;;;;;;;;;;;;;;;AA8CA,SAAS,aAAa,MAA+C;CACnE,OAAOA,MAAM,eAAe,IAAI,KAAM,KAAK,MAAmC,gBAAgB;AAChG;;AAGA,SAAS,aAAa,UAA2B,KAA8D;CAC7G,MAAM,SAAS,QAAQ,WAAU,UAAS;EACxC,IAAI,CAACA,MAAM,eAAe,KAAK,GAAG;EAClC,IAAI,aAAa,KAAK,GAAG;GACvB,IAAI,KAAK;IAAE,OAAO,MAAM,MAAM;IAAO,OAAO,MAAM,MAAM;GAAS,CAAC;GAClE;EACF;EACA,MAAM,SAAU,MAAM,OAA0C;EAChE,IAAI,UAAU,MAAM,aAAa,QAAQ,GAAG;CAC9C,CAAC;AACH;AAcA,SAAS,OAAuB,EAAE,UAAU,OAAO,eAAe,GAAG,SAA6B;CAChG,MAAM,eAAeA,MAAM,cAAc;EACvC,IAAI,SAAS,MAAM,OAAO;EAC1B,MAAM,MAAyD,CAAC;EAChE,aAAa,UAAU,GAAG;EAC1B,OAAO,IAAI,SAAS,IAAI,MAAM,KAAA;CAChC,GAAG,CAAC,OAAO,QAAQ,CAAC;CAEpB,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,sBAAAA,OAAgB,MAAjB;EACE,OAAO;EACP,eAAe,iBAAiB,OAAO,iBAAiB,cAAc,OAAgB,YAAY,IAAI,KAAA;EACtG,GAAI;EAEH;CACmB,CAAA;AAE1B;AACA,OAAO,cAAc;AAErB,IAAM,cAAcA,sBAAAA,OAAgB;;;;;;;AAYpC,IAAM,cAAcD,MAAM,YAA+C,EAAE,WAAW,GAAG,SAAS,QAChG,iBAAA,GAAA,kBAAA,IAAA,CAACC,sBAAAA,OAAgB,OAAjB;CAA4B;CAAK,WAAWC,cAAAA,GAAG,YAAY,SAAS;CAAG,GAAI;AAAQ,CAAA,CACpF;AACD,YAAY,cAAc;AAkB1B,SAAS,8BACP,SACsB;CACtB,OAAO,YAAY,YAAY,YAAY;AAC7C;AAEA,IAAM,gBAAgBF,MAAM,YACzB,EAAE,WAAW,UAAU,OAAO,MAAM,UAAU,WAAW,GAAG,SAAS,QAAQ;CAC5E,MAAM,gBAAgB,8BAA8B,OAAO;CAE3D,OACE,iBAAA,GAAA,kBAAA,KAAA,CAACC,sBAAAA,OAAgB,SAAjB;EACO;EACL,aAAU;EAIV,WAAWC,cAAAA,GACTC,eAAAA,eAAe;GAAE,SAAS;GAAe;EAAK,CAAC,GAC/C,kBAAkB,aAAA,8TAGlBC,gCAAAA,wBACA,mBAEAC,gCAAAA,wBAAwB,gBACxB,4CACAC,gCAAAA,yBACA,qBACA,SACF;EACA,GAAI;EACJ,GAAIC,2BAAAA,sBAAsB,KAAK;EArBjC,UAAA,CAuBG,UAQD,iBAAA,GAAA,kBAAA,IAAA,CAACN,sBAAAA,OAAgB,MAAjB,EACE,QACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,WAAU;GACd,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACO,aAAAA,aAAD,EAAa,WAAWN,cAAAA,GAAG,gCAAgCO,+BAAAA,YAAY,MAAM,EAAI,CAAA;EAC7E,CAAA,EAET,CAAA,CACsB;;AAE7B,CACF;AACA,cAAc,cAAc;AAiB5B,IAAM,gBAAgBT,MAAM,YAExB,EACE,WACA,UACA,UAAU,WACV,WACA,OAAO,UACP,QAAQ,SACR,aAAa,GACb,uBAAuB,OACvB,QACA,iBAAiBU,4BAAAA,0BACjB,aACA,mBACA,kBACA,QACA,cACA,uBACA,oBACA,GAAG,SAEL,QACG;CAGH,MAAM,oBAAoBC,oCAAAA,mBAAmB,SAAS;CACtD,MAAM,kBAAgD;EACpD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CAEA,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACV,sBAAAA,OAAgB,QAAjB;EAAwB,WAAW;EACjC,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACA,sBAAAA,OAAgB,YAAjB;GAA4B,WAAWW,6BAAAA;GAAqB,GAAI;GAC9D,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACX,sBAAAA,OAAgB,OAAjB;IAA4B;IAAK,WAAWC,cAAAA,GAAGW,6BAAAA,gBAAgBC,oCAAAA,sBAAsB,SAAS;IAAG,GAAI;IAGnG,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,oCAAAA,gBAAD;KAAgB,gBAAgB,iBAAA,GAAA,kBAAA,IAAA,CAACd,sBAAAA,OAAgB,MAAjB,EAAsB,MAAK,UAAW,CAAA;KAAI;IAAyB,CAAA;GAC9E,CAAA;EACG,CAAA;CACN,CAAA;AAE5B,CACF;AACA,cAAc,cAAc;AAM5B,IAAM,aAAaD,MAAM,YAA6C,EAAE,WAAW,UAAU,GAAG,SAAS,QACvG,iBAAA,GAAA,kBAAA,KAAA,CAACC,sBAAAA,OAAgB,MAAjB;CAA2B;CAAK,WAAWC,cAAAA,GAAGc,6BAAAA,eAAe,SAAS;CAAG,GAAI;CAA7E,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACf,sBAAAA,OAAgB,UAAjB,EAA2B,SAAmC,CAAA,GAC9D,iBAAA,GAAA,kBAAA,IAAA,CAACA,sBAAAA,OAAgB,eAAjB;EAA+B,WAAWgB,6BAAAA;EACxC,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,aAAAA,OAAD,CAAQ,CAAA;CACqB,CAAA,CACX;AACvB,CAAA,CAAA;AACD,WAAW,cAAc;AAMzB,IAAM,kBAAkBlB,MAAM,YAAkD,EAAE,WAAW,GAAG,SAAS,QACvG,iBAAA,GAAA,kBAAA,IAAA,CAACC,sBAAAA,OAAgB,WAAjB;CACO;CACL,aAAU;CACV,WAAWC,cAAAA,GAAGiB,6BAAAA,oBAAoB,SAAS;CAC3C,GAAI;AACL,CAAA,CACF;AACD,gBAAgB,cAAc"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import type { DateRangePreset, DateTimeRangePickerProps } from '../../../ds/components/DateTimeRangePicker';
|
|
2
|
-
import type { FilterBarField, FilterBarItem } from '../../../ds/components/FilterBar/types';
|
|
3
|
-
export declare const TRACE_TIME_RANGE_FIELD_ID = "timeRange";
|
|
4
|
-
/**
|
|
5
|
-
* Synthetic FilterBar field backing the always-present time-range chip. Hidden from the
|
|
6
|
-
* input's field step (the chip cannot be added twice) but registered so the chip resolves
|
|
7
|
-
* its label and takes part in keyboard navigation.
|
|
8
|
-
*/
|
|
9
|
-
export declare const TRACE_TIME_RANGE_FIELD: FilterBarField;
|
|
10
|
-
export declare const TRACE_TIME_RANGE_ITEM: FilterBarItem;
|
|
11
|
-
export type TraceTimeRangeChipProps = Pick<DateTimeRangePickerProps, 'preset' | 'onPresetChange' | 'dateFrom' | 'dateTo' | 'onDateChange' | 'onDateRangeChange' | 'disabled' | 'maxRangeMs' | 'minDate' | 'presets'> & {
|
|
12
|
-
/** Shows a × that switches back to this preset whenever another range is selected. */
|
|
13
|
-
defaultPreset?: DateRangePreset;
|
|
14
|
-
/** Replaces what the × does, e.g. to undo a histogram zoom before falling back to `defaultPreset`. */
|
|
15
|
-
onReset?: () => void;
|
|
16
|
-
};
|
|
17
|
-
/**
|
|
18
|
-
* The trace list's date range rendered as a FilterBar chip: `Time <preset>`. Always
|
|
19
|
-
* present and non-removable; the value segment opens the regular DateTimeRangePicker
|
|
20
|
-
* menu/popover. With `defaultPreset`, a trailing × resets the range to it.
|
|
21
|
-
*/
|
|
22
|
-
export declare function TraceTimeRangeChip({ defaultPreset, onReset, ...props }: TraceTimeRangeChipProps): import("react").JSX.Element;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tool-card-B7O8AsRl.cjs","names":["awaitsToolApproval","ToolCallMono","CodeEditor","ToolApprovalBadge","AgentIcon","NetworkChoiceMetadataDialogTrigger","BackgroundTaskMetadataDialogTrigger","_Fragment","Button","Markdown","React","SectionLabel","useAgentMessages","LoadingBadge","toAISdkV5Messages","resolveToChildMessages","PlaygroundWorkflowRunProvider","useMcpAppTools","useChatSend","useContext","ChatAgentContext","useChatRunning","useCallback","toolCardKind","toolInteraction","badgeStatus","ObservationMarkerBadge","AskUserTool","ConnectPromptTool","SubmitPlanTool","isAgentCall","isWorkflowCall","ToolBadge","isSettledState","WorkflowBadge","FileTreeBadge","SandboxExecutionBadge","codeModeCall","CodeModeBadge","_Fragment","ToolResultMedia","McpAppToolResult"],"sources":["../src/domains/chat/tools/badges/agent-badge.tsx","../src/domains/chat/tools/badges/agent-badge-wrapper.tsx","../src/domains/chat/tools/tool-card.tsx"],"sourcesContent":["import React from 'react';\nimport Markdown from 'react-markdown';\nimport { ToolCard } from '../tool-card';\nimport { BackgroundTaskMetadataDialogTrigger } from './background-task-metadata-dialog';\nimport type { MessageMetadata } from '@/domains/chat';\nimport { NetworkChoiceMetadataDialogTrigger } from '@/domains/chat/components/network-choice-metadata-dialog';\nimport { SectionLabel } from '@/domains/chat/components/section-label';\nimport { awaitsToolApproval } from '@/domains/chat/tools/badges/awaits-tool-approval';\nimport type { ToolApprovalRequest } from '@/domains/chat/tools/badges/tool-approval-badge';\nimport { ToolApprovalBadge } from '@/domains/chat/tools/badges/tool-approval-badge';\nimport type { ActivityStatus } from '@/ds/components/ai/activity';\nimport { ToolCallMono } from '@/ds/components/ai/tool-call';\nimport { Button } from '@/ds/components/Button';\nimport { CodeEditor } from '@/ds/components/CodeEditor';\nimport { AgentIcon } from '@/ds/icons/AgentIcon';\n\ntype TextMessage = {\n type: 'text';\n content: string;\n};\n\ntype ToolMessage = {\n type: 'tool';\n toolName: string;\n toolOutput?: any;\n args?: any;\n toolCallId: string;\n result?: any;\n};\n\nexport type AgentMessage = TextMessage | ToolMessage;\n\nexport interface AgentBadgeProps extends Omit<ToolApprovalRequest, 'toolCalled'> {\n agentId: string;\n messages: AgentMessage[];\n metadata?: MessageMetadata;\n suspendPayload?: any;\n toolCalled?: boolean;\n isComplete?: boolean;\n keepOpenForStreamingChildMessages?: boolean;\n status?: ActivityStatus;\n errorText?: string;\n onLoadPrevious?: () => void;\n isLoadingPrevious?: boolean;\n}\n\nexport const AgentBadge = ({\n agentId,\n messages = [],\n metadata,\n toolCallId,\n toolApprovalMetadata,\n toolName,\n isNetwork,\n suspendPayload,\n toolCalled: toolCalledProp,\n isComplete = false,\n keepOpenForStreamingChildMessages = false,\n status = 'idle',\n errorText,\n onLoadPrevious,\n isLoadingPrevious = false,\n}: AgentBadgeProps) => {\n const routingDecision = metadata?.mode === 'network' ? metadata.routingDecision : undefined;\n const selectionReason =\n metadata?.mode === 'network' ? (routingDecision?.selectionReason ?? metadata.selectionReason) : undefined;\n const agentNetworkInput = metadata?.mode === 'network' ? (routingDecision ?? metadata.agentInput) : undefined;\n\n const parentSuspendedTools =\n metadata?.mode === 'stream' || metadata?.mode === 'network' || metadata?.mode === 'generate'\n ? metadata?.suspendedTools\n : undefined;\n\n const bgEntry =\n (metadata?.mode === 'stream' || metadata?.mode === 'generate') && metadata?.backgroundTasks\n ? metadata.backgroundTasks[toolCallId]\n : undefined;\n\n const allChildToolsComplete =\n messages.length > 0 &&\n messages.every(message => {\n if (message.type === 'text') {\n return true;\n }\n return message.toolOutput !== undefined;\n });\n\n let toolCalled = isComplete && allChildToolsComplete;\n\n if (isNetwork) {\n toolCalled = toolCalledProp ?? allChildToolsComplete;\n }\n\n const isError = status === 'error';\n const shouldCollapseContent = isComplete && !isError && !toolApprovalMetadata && !keepOpenForStreamingChildMessages;\n const shownError = isError ? errorText : undefined;\n const hasBody =\n Boolean(onLoadPrevious) ||\n messages.length > 0 ||\n Boolean(shownError) ||\n Boolean(suspendPayload) ||\n awaitsToolApproval({ toolApprovalMetadata, toolCalled });\n\n let suspendPayloadSlot =\n typeof suspendPayload === 'string' ? (\n <ToolCallMono copyText={suspendPayload} className=\"text-muted-foreground\">\n {suspendPayload}\n </ToolCallMono>\n ) : (\n <CodeEditor data={suspendPayload} data-testid=\"tool-suspend-payload\" />\n );\n\n return (\n <ToolApprovalBadge\n approval={{\n toolCalled,\n toolCallId,\n toolApprovalMetadata,\n toolName,\n isNetwork,\n isGenerateMode: metadata?.mode === 'generate',\n }}\n data-testid=\"agent-badge\"\n icon={<AgentIcon className=\"text-span-agent\" />}\n title={agentId}\n status={status}\n initialCollapsed={shouldCollapseContent}\n extraInfo={\n metadata?.mode === 'network' ? (\n <NetworkChoiceMetadataDialogTrigger\n selectionReason={selectionReason ?? ''}\n input={agentNetworkInput as string | Record<string, unknown> | undefined}\n />\n ) : bgEntry?.taskId && bgEntry?.startedAt ? (\n <BackgroundTaskMetadataDialogTrigger backgroundTask={bgEntry} />\n ) : null\n }\n >\n {hasBody && (\n <>\n {onLoadPrevious && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onLoadPrevious}\n disabled={isLoadingPrevious}\n data-testid=\"agent-badge-load-previous\"\n >\n {isLoadingPrevious ? 'Loading earlier messages…' : 'Load earlier messages'}\n </Button>\n )}\n\n {messages.map((message, index) => {\n if (message.type === 'text') {\n return <Markdown key={index}>{message.content}</Markdown>;\n }\n\n let result;\n\n try {\n result = typeof message.toolOutput === 'string' ? JSON.parse(message.toolOutput) : message.toolOutput;\n } catch {\n result = message.toolOutput;\n }\n\n return (\n <React.Fragment key={index}>\n <ToolCard\n toolName={message.toolName}\n input={message.args}\n output={result}\n state=\"output-available\"\n toolCallId={message.toolCallId}\n metadata={{\n mode: 'stream',\n requireApprovalMetadata: isNetwork ? metadata?.requireApprovalMetadata : undefined,\n suspendedTools: parentSuspendedTools,\n }}\n />\n </React.Fragment>\n );\n })}\n\n {shownError && (\n <ToolCallMono copyText={shownError} data-testid=\"agent-error\" className=\"text-destructive-foreground\">\n {shownError}\n </ToolCallMono>\n )}\n\n {suspendPayloadSlot !== undefined && suspendPayload && (\n <div>\n <SectionLabel>Agent suspend payload</SectionLabel>\n {suspendPayloadSlot}\n </div>\n )}\n </>\n )}\n </ToolApprovalBadge>\n );\n};\n","import { toAISdkV5Messages } from '@mastra/ai-sdk/ui';\nimport { useAgentMessages } from '@mastra/react/hooks/agents';\nimport type { AgentMessage } from './agent-badge';\nimport { AgentBadge } from './agent-badge';\nimport { resolveToChildMessages } from './resolve-child-messages';\nimport type { MessageMetadata } from '@/domains/chat';\nimport { LoadingBadge } from '@/domains/chat/components/loading-badge';\nimport type { ToolApprovalRequest } from '@/domains/chat/tools/badges/tool-approval-badge';\nimport type { ActivityStatus } from '@/ds/components/ai/activity';\n\ninterface SubAgentToolResult {\n toolName: string;\n toolCallId: string;\n result: any;\n args: any;\n}\n\ninterface AgentBadgeWrapperProps extends Omit<ToolApprovalRequest, 'toolCalled'> {\n agentId: string;\n result?: {\n childMessages?: AgentMessage[];\n subAgentResourceId?: string;\n subAgentThreadId?: string;\n subAgentToolResults?: SubAgentToolResult[];\n text?: string;\n };\n metadata?: MessageMetadata;\n suspendPayload?: any;\n toolCalled?: boolean;\n isComplete?: boolean;\n status?: ActivityStatus;\n errorText?: string;\n}\n\nexport const AgentBadgeWrapper = ({\n agentId,\n result,\n metadata,\n toolCallId,\n toolApprovalMetadata,\n toolName,\n isNetwork,\n suspendPayload,\n toolCalled,\n isComplete,\n status,\n errorText,\n}: AgentBadgeWrapperProps) => {\n const shouldFetchAgentMessages = Boolean(\n result?.subAgentThreadId && !result.text && !result.subAgentToolResults?.length,\n );\n const { data, isLoading, fetchNextPage, hasNextPage, isFetchingNextPage } = useAgentMessages({\n threadId: shouldFetchAgentMessages ? result?.subAgentThreadId : undefined,\n agentId,\n memory: true,\n });\n\n if (isLoading) {\n return <LoadingBadge />;\n }\n\n const convertedMessages = data?.messages ? toAISdkV5Messages(data.messages) : [];\n\n let childMessages = result?.childMessages?.length ? result.childMessages : undefined;\n\n if (!childMessages && result?.subAgentToolResults?.length) {\n const toolMessages: AgentMessage[] = result.subAgentToolResults.map(tr => ({\n type: 'tool' as const,\n toolName: tr.toolName,\n toolCallId: tr.toolCallId,\n args: tr.args,\n toolOutput: tr.result,\n }));\n if (result.text) {\n toolMessages.push({ type: 'text' as const, content: result.text });\n }\n childMessages = toolMessages;\n }\n\n if (!childMessages && result?.text) {\n childMessages = [{ type: 'text' as const, content: result.text }];\n }\n\n let onLoadPrevious: (() => void) | undefined;\n if (!childMessages) {\n childMessages = resolveToChildMessages(convertedMessages) as AgentMessage[];\n onLoadPrevious = hasNextPage ? fetchNextPage : undefined;\n }\n\n const hasStreamingChildMessages = Boolean(result && Object.prototype.hasOwnProperty.call(result, 'childMessages'));\n\n return (\n <AgentBadge\n agentId={agentId}\n messages={childMessages ?? []}\n keepOpenForStreamingChildMessages={hasStreamingChildMessages}\n metadata={metadata}\n toolCallId={toolCallId}\n toolApprovalMetadata={toolApprovalMetadata}\n toolName={toolName}\n isNetwork={isNetwork}\n suspendPayload={suspendPayload}\n toolCalled={toolCalled}\n isComplete={isComplete}\n status={status}\n errorText={errorText}\n onLoadPrevious={onLoadPrevious}\n isLoadingPrevious={isFetchingNextPage}\n />\n );\n};\n","import { useMcpAppTools } from '@mastra/react/hooks/mcps';\nimport { useCallback, useContext } from 'react';\nimport { AgentBadgeWrapper } from './badges/agent-badge-wrapper';\nimport { FileTreeBadge } from './badges/file-tree-badge';\nimport { SandboxExecutionBadge } from './badges/sandbox-execution-badge';\nimport { ToolBadge } from './badges/tool-badge';\nimport { useWorkflowStream, WorkflowBadge } from './badges/workflow-badge';\nimport { SubmitPlanTool } from './submit-plan-tool';\nimport { ToolResultMedia } from './tool-result-media';\nimport type { MessageMetadata } from '@/domains/chat';\nimport { ChatAgentContext, useChatRunning, useChatSend } from '@/domains/chat/context/chat-context';\nimport { AskUserTool } from '@/domains/chat/tools/ask-user-tool';\nimport { CodeModeBadge } from '@/domains/chat/tools/badges/code-mode-badge';\nimport { ObservationMarkerBadge } from '@/domains/chat/tools/badges/observation-marker-badge';\nimport { ConnectPromptTool } from '@/domains/chat/tools/connect-prompt-tool';\nimport {\n badgeStatus,\n codeModeCall,\n isAgentCall,\n isSettledState,\n isWorkflowCall,\n toolCardKind,\n toolInteraction,\n} from '@/domains/chat/tools/tool-card-kind';\nimport { McpAppToolResult } from '@/domains/mcps/components/mcp-app-tool-result';\nimport { PlaygroundWorkflowRunProvider } from '@/domains/workflows/context/playground-workflow-run-provider';\n\n/** A `data`-typed part the agent wrote via `writer.custom`, scoped to a call by `data.toolCallId`. */\nexport interface DataMessagePart {\n type: string;\n name?: string;\n data?: any;\n}\n\nexport interface ToolCardProps {\n toolName: string;\n input: any;\n output: any;\n modelOutput?: unknown;\n /** The Mastra background task running the call, when it was deferred. */\n backgroundTaskId?: string;\n /** The background task's status in the part's metadata: `running` until the part holds its result. */\n backgroundTaskStatus?: string;\n toolCallId: string;\n /** Part state: v5 `output-available`/`output-error`/`input-available`, or v4 `result`/`call`. */\n state?: string;\n /** Error message when `state` is `output-error`. */\n errorText?: string;\n metadata?: MessageMetadata;\n /** `data`-typed parts from the parent message, for badges that read live streaming metadata. */\n dataParts?: ReadonlyArray<DataMessagePart>;\n /** Historical rendering mode: preserve presentation while suppressing executable actions and side effects. */\n readOnly?: boolean;\n}\n\nconst stripPrefix = (toolName: string, prefix: string): string =>\n toolName.startsWith(prefix) ? toolName.slice(prefix.length) : toolName;\n\n/** Its own workflow run scope, so a streaming workflow result can drive a live graph inside the card. */\nexport const ToolCard = (props: ToolCardProps) => {\n return (\n <PlaygroundWorkflowRunProvider workflowId=\"\" withoutTimeTravel>\n <ToolCardInner {...props} />\n </PlaygroundWorkflowRunProvider>\n );\n};\n\nexport const ToolCardInner = ({\n toolName,\n input,\n output,\n modelOutput,\n backgroundTaskId,\n backgroundTaskStatus,\n toolCallId,\n state,\n errorText,\n metadata,\n dataParts,\n readOnly = false,\n}: ToolCardProps) => {\n const { data: mcpAppTools } = useMcpAppTools();\n const send = useChatSend();\n const chatAgent = useContext(ChatAgentContext);\n const { isRunning } = useChatRunning();\n const handleMcpAppSendMessage = useCallback(\n (content: string) => {\n void send({ message: content });\n },\n [send],\n );\n useWorkflowStream(output);\n\n const kind = toolCardKind({ toolName, toolCallId, input, output, state }, { metadata, mcpAppTools });\n const { approval: toolApprovalMetadata, suspended: suspendedToolMetadata } = toolInteraction(\n metadata,\n toolName,\n toolCallId,\n );\n const status = badgeStatus(state, isRunning);\n const isNetwork = metadata?.mode === 'network';\n const toolCalled = isNetwork && metadata?.hasMoreMessages ? true : undefined;\n const agentToolName = stripPrefix(toolName, 'agent-');\n const workflowToolName = stripPrefix(toolName, 'workflow-');\n\n switch (kind) {\n case 'hidden':\n return null;\n case 'observation':\n return <ObservationMarkerBadge toolName={toolName} omData={output?.omData ?? input} />;\n case 'ask_user':\n if (!readOnly) {\n return <AskUserTool toolName={toolName} toolCallId={toolCallId} output={output} metadata={metadata} />;\n }\n break;\n case 'connect_prompt':\n return <ConnectPromptTool output={output} readOnly={readOnly} />;\n case 'submit_plan':\n return (\n <SubmitPlanTool\n agentId={chatAgent?.agentId}\n agentVersionId={chatAgent?.agentVersionId}\n requestContext={chatAgent?.requestContext}\n toolName={toolName}\n toolCallId={toolCallId}\n output={output}\n metadata={metadata}\n />\n );\n case 'background': {\n const isAgent = isAgentCall(metadata, toolName);\n const isWorkflow = isWorkflowCall(metadata, toolName);\n return (\n <ToolBadge\n toolName={isAgent ? agentToolName : isWorkflow ? workflowToolName : toolName}\n args={input}\n result={output}\n toolOutput={[]}\n metadata={metadata}\n toolCallId={toolCallId}\n toolApprovalMetadata={toolApprovalMetadata}\n suspendPayload={suspendedToolMetadata?.suspendPayload}\n isNetwork={isNetwork}\n toolCalled={toolCalled}\n withoutArgs={isAgent || isWorkflow}\n status={status}\n backgroundTaskId={backgroundTaskId}\n backgroundTaskStatus={backgroundTaskStatus}\n />\n );\n }\n case 'agent':\n return (\n <AgentBadgeWrapper\n agentId={agentToolName}\n result={output}\n metadata={metadata}\n toolCallId={toolCallId}\n toolApprovalMetadata={toolApprovalMetadata}\n toolName={toolName}\n isNetwork={isNetwork}\n suspendPayload={suspendedToolMetadata?.suspendPayload}\n toolCalled={toolCalled}\n isComplete={isSettledState(state)}\n status={status}\n errorText={errorText}\n />\n );\n case 'workflow':\n return (\n <WorkflowBadge\n workflowId={workflowToolName}\n isStreaming={metadata?.mode === 'stream' || isNetwork}\n result={output}\n metadata={metadata}\n toolCallId={toolCallId}\n toolApprovalMetadata={toolApprovalMetadata}\n suspendPayload={suspendedToolMetadata?.suspendPayload}\n toolName={toolName}\n isNetwork={isNetwork}\n toolCalled={toolCalled}\n />\n );\n case 'file_tree':\n return (\n <FileTreeBadge\n toolName={toolName}\n args={input}\n result={output}\n metadata={metadata}\n toolCallId={toolCallId}\n toolApprovalMetadata={toolApprovalMetadata}\n isNetwork={isNetwork}\n toolCalled={toolCalled}\n dataParts={dataParts}\n status={status}\n />\n );\n case 'sandbox':\n return (\n <SandboxExecutionBadge\n toolName={toolName}\n args={input}\n result={output}\n metadata={metadata}\n toolCallId={toolCallId}\n toolApprovalMetadata={toolApprovalMetadata}\n isNetwork={isNetwork}\n toolCalled={toolCalled}\n dataParts={dataParts}\n status={status}\n />\n );\n case 'code_mode': {\n const call = codeModeCall(input, output);\n if (call) {\n return (\n <CodeModeBadge\n toolName={toolName}\n code={call.code}\n result={call.result}\n metadata={metadata}\n toolCallId={toolCallId}\n toolApprovalMetadata={toolApprovalMetadata}\n isNetwork={isNetwork}\n toolCalled={toolCalled}\n />\n );\n }\n break;\n }\n case 'mcp_app':\n case 'plain':\n break;\n }\n\n const mcpAppInfo = mcpAppTools?.[toolName];\n\n return (\n <>\n <ToolBadge\n toolName={toolName}\n args={input}\n result={output ?? errorText}\n toolOutput={output?.toolOutput || []}\n metadata={metadata}\n toolCallId={toolCallId}\n toolApprovalMetadata={toolApprovalMetadata}\n suspendPayload={suspendedToolMetadata?.suspendPayload}\n isNetwork={isNetwork}\n toolCalled={toolCalled}\n status={status}\n backgroundTaskId={backgroundTaskId}\n backgroundTaskStatus={backgroundTaskStatus}\n />\n <ToolResultMedia modelOutput={modelOutput} />\n {mcpAppInfo && output !== undefined && (\n <McpAppToolResult\n appInfo={mcpAppInfo}\n toolArgs={input}\n toolResult={output}\n onSendMessage={handleMcpAppSendMessage}\n readOnly={readOnly}\n />\n )}\n </>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tool-card-ELW898uw.js","names":["_Fragment","_Fragment"],"sources":["../src/domains/chat/tools/badges/agent-badge.tsx","../src/domains/chat/tools/badges/agent-badge-wrapper.tsx","../src/domains/chat/tools/tool-card.tsx"],"sourcesContent":["import React from 'react';\nimport Markdown from 'react-markdown';\nimport { ToolCard } from '../tool-card';\nimport { BackgroundTaskMetadataDialogTrigger } from './background-task-metadata-dialog';\nimport type { MessageMetadata } from '@/domains/chat';\nimport { NetworkChoiceMetadataDialogTrigger } from '@/domains/chat/components/network-choice-metadata-dialog';\nimport { SectionLabel } from '@/domains/chat/components/section-label';\nimport { awaitsToolApproval } from '@/domains/chat/tools/badges/awaits-tool-approval';\nimport type { ToolApprovalRequest } from '@/domains/chat/tools/badges/tool-approval-badge';\nimport { ToolApprovalBadge } from '@/domains/chat/tools/badges/tool-approval-badge';\nimport type { ActivityStatus } from '@/ds/components/ai/activity';\nimport { ToolCallMono } from '@/ds/components/ai/tool-call';\nimport { Button } from '@/ds/components/Button';\nimport { CodeEditor } from '@/ds/components/CodeEditor';\nimport { AgentIcon } from '@/ds/icons/AgentIcon';\n\ntype TextMessage = {\n type: 'text';\n content: string;\n};\n\ntype ToolMessage = {\n type: 'tool';\n toolName: string;\n toolOutput?: any;\n args?: any;\n toolCallId: string;\n result?: any;\n};\n\nexport type AgentMessage = TextMessage | ToolMessage;\n\nexport interface AgentBadgeProps extends Omit<ToolApprovalRequest, 'toolCalled'> {\n agentId: string;\n messages: AgentMessage[];\n metadata?: MessageMetadata;\n suspendPayload?: any;\n toolCalled?: boolean;\n isComplete?: boolean;\n keepOpenForStreamingChildMessages?: boolean;\n status?: ActivityStatus;\n errorText?: string;\n onLoadPrevious?: () => void;\n isLoadingPrevious?: boolean;\n}\n\nexport const AgentBadge = ({\n agentId,\n messages = [],\n metadata,\n toolCallId,\n toolApprovalMetadata,\n toolName,\n isNetwork,\n suspendPayload,\n toolCalled: toolCalledProp,\n isComplete = false,\n keepOpenForStreamingChildMessages = false,\n status = 'idle',\n errorText,\n onLoadPrevious,\n isLoadingPrevious = false,\n}: AgentBadgeProps) => {\n const routingDecision = metadata?.mode === 'network' ? metadata.routingDecision : undefined;\n const selectionReason =\n metadata?.mode === 'network' ? (routingDecision?.selectionReason ?? metadata.selectionReason) : undefined;\n const agentNetworkInput = metadata?.mode === 'network' ? (routingDecision ?? metadata.agentInput) : undefined;\n\n const parentSuspendedTools =\n metadata?.mode === 'stream' || metadata?.mode === 'network' || metadata?.mode === 'generate'\n ? metadata?.suspendedTools\n : undefined;\n\n const bgEntry =\n (metadata?.mode === 'stream' || metadata?.mode === 'generate') && metadata?.backgroundTasks\n ? metadata.backgroundTasks[toolCallId]\n : undefined;\n\n const allChildToolsComplete =\n messages.length > 0 &&\n messages.every(message => {\n if (message.type === 'text') {\n return true;\n }\n return message.toolOutput !== undefined;\n });\n\n let toolCalled = isComplete && allChildToolsComplete;\n\n if (isNetwork) {\n toolCalled = toolCalledProp ?? allChildToolsComplete;\n }\n\n const isError = status === 'error';\n const shouldCollapseContent = isComplete && !isError && !toolApprovalMetadata && !keepOpenForStreamingChildMessages;\n const shownError = isError ? errorText : undefined;\n const hasBody =\n Boolean(onLoadPrevious) ||\n messages.length > 0 ||\n Boolean(shownError) ||\n Boolean(suspendPayload) ||\n awaitsToolApproval({ toolApprovalMetadata, toolCalled });\n\n let suspendPayloadSlot =\n typeof suspendPayload === 'string' ? (\n <ToolCallMono copyText={suspendPayload} className=\"text-muted-foreground\">\n {suspendPayload}\n </ToolCallMono>\n ) : (\n <CodeEditor data={suspendPayload} data-testid=\"tool-suspend-payload\" />\n );\n\n return (\n <ToolApprovalBadge\n approval={{\n toolCalled,\n toolCallId,\n toolApprovalMetadata,\n toolName,\n isNetwork,\n isGenerateMode: metadata?.mode === 'generate',\n }}\n data-testid=\"agent-badge\"\n icon={<AgentIcon className=\"text-span-agent\" />}\n title={agentId}\n status={status}\n initialCollapsed={shouldCollapseContent}\n extraInfo={\n metadata?.mode === 'network' ? (\n <NetworkChoiceMetadataDialogTrigger\n selectionReason={selectionReason ?? ''}\n input={agentNetworkInput as string | Record<string, unknown> | undefined}\n />\n ) : bgEntry?.taskId && bgEntry?.startedAt ? (\n <BackgroundTaskMetadataDialogTrigger backgroundTask={bgEntry} />\n ) : null\n }\n >\n {hasBody && (\n <>\n {onLoadPrevious && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onLoadPrevious}\n disabled={isLoadingPrevious}\n data-testid=\"agent-badge-load-previous\"\n >\n {isLoadingPrevious ? 'Loading earlier messages…' : 'Load earlier messages'}\n </Button>\n )}\n\n {messages.map((message, index) => {\n if (message.type === 'text') {\n return <Markdown key={index}>{message.content}</Markdown>;\n }\n\n let result;\n\n try {\n result = typeof message.toolOutput === 'string' ? JSON.parse(message.toolOutput) : message.toolOutput;\n } catch {\n result = message.toolOutput;\n }\n\n return (\n <React.Fragment key={index}>\n <ToolCard\n toolName={message.toolName}\n input={message.args}\n output={result}\n state=\"output-available\"\n toolCallId={message.toolCallId}\n metadata={{\n mode: 'stream',\n requireApprovalMetadata: isNetwork ? metadata?.requireApprovalMetadata : undefined,\n suspendedTools: parentSuspendedTools,\n }}\n />\n </React.Fragment>\n );\n })}\n\n {shownError && (\n <ToolCallMono copyText={shownError} data-testid=\"agent-error\" className=\"text-destructive-foreground\">\n {shownError}\n </ToolCallMono>\n )}\n\n {suspendPayloadSlot !== undefined && suspendPayload && (\n <div>\n <SectionLabel>Agent suspend payload</SectionLabel>\n {suspendPayloadSlot}\n </div>\n )}\n </>\n )}\n </ToolApprovalBadge>\n );\n};\n","import { toAISdkV5Messages } from '@mastra/ai-sdk/ui';\nimport { useAgentMessages } from '@mastra/react/hooks/agents';\nimport type { AgentMessage } from './agent-badge';\nimport { AgentBadge } from './agent-badge';\nimport { resolveToChildMessages } from './resolve-child-messages';\nimport type { MessageMetadata } from '@/domains/chat';\nimport { LoadingBadge } from '@/domains/chat/components/loading-badge';\nimport type { ToolApprovalRequest } from '@/domains/chat/tools/badges/tool-approval-badge';\nimport type { ActivityStatus } from '@/ds/components/ai/activity';\n\ninterface SubAgentToolResult {\n toolName: string;\n toolCallId: string;\n result: any;\n args: any;\n}\n\ninterface AgentBadgeWrapperProps extends Omit<ToolApprovalRequest, 'toolCalled'> {\n agentId: string;\n result?: {\n childMessages?: AgentMessage[];\n subAgentResourceId?: string;\n subAgentThreadId?: string;\n subAgentToolResults?: SubAgentToolResult[];\n text?: string;\n };\n metadata?: MessageMetadata;\n suspendPayload?: any;\n toolCalled?: boolean;\n isComplete?: boolean;\n status?: ActivityStatus;\n errorText?: string;\n}\n\nexport const AgentBadgeWrapper = ({\n agentId,\n result,\n metadata,\n toolCallId,\n toolApprovalMetadata,\n toolName,\n isNetwork,\n suspendPayload,\n toolCalled,\n isComplete,\n status,\n errorText,\n}: AgentBadgeWrapperProps) => {\n const shouldFetchAgentMessages = Boolean(\n result?.subAgentThreadId && !result.text && !result.subAgentToolResults?.length,\n );\n const { data, isLoading, fetchNextPage, hasNextPage, isFetchingNextPage } = useAgentMessages({\n threadId: shouldFetchAgentMessages ? result?.subAgentThreadId : undefined,\n agentId,\n memory: true,\n });\n\n if (isLoading) {\n return <LoadingBadge />;\n }\n\n const convertedMessages = data?.messages ? toAISdkV5Messages(data.messages) : [];\n\n let childMessages = result?.childMessages?.length ? result.childMessages : undefined;\n\n if (!childMessages && result?.subAgentToolResults?.length) {\n const toolMessages: AgentMessage[] = result.subAgentToolResults.map(tr => ({\n type: 'tool' as const,\n toolName: tr.toolName,\n toolCallId: tr.toolCallId,\n args: tr.args,\n toolOutput: tr.result,\n }));\n if (result.text) {\n toolMessages.push({ type: 'text' as const, content: result.text });\n }\n childMessages = toolMessages;\n }\n\n if (!childMessages && result?.text) {\n childMessages = [{ type: 'text' as const, content: result.text }];\n }\n\n let onLoadPrevious: (() => void) | undefined;\n if (!childMessages) {\n childMessages = resolveToChildMessages(convertedMessages) as AgentMessage[];\n onLoadPrevious = hasNextPage ? fetchNextPage : undefined;\n }\n\n const hasStreamingChildMessages = Boolean(result && Object.prototype.hasOwnProperty.call(result, 'childMessages'));\n\n return (\n <AgentBadge\n agentId={agentId}\n messages={childMessages ?? []}\n keepOpenForStreamingChildMessages={hasStreamingChildMessages}\n metadata={metadata}\n toolCallId={toolCallId}\n toolApprovalMetadata={toolApprovalMetadata}\n toolName={toolName}\n isNetwork={isNetwork}\n suspendPayload={suspendPayload}\n toolCalled={toolCalled}\n isComplete={isComplete}\n status={status}\n errorText={errorText}\n onLoadPrevious={onLoadPrevious}\n isLoadingPrevious={isFetchingNextPage}\n />\n );\n};\n","import { useMcpAppTools } from '@mastra/react/hooks/mcps';\nimport { useCallback, useContext } from 'react';\nimport { AgentBadgeWrapper } from './badges/agent-badge-wrapper';\nimport { FileTreeBadge } from './badges/file-tree-badge';\nimport { SandboxExecutionBadge } from './badges/sandbox-execution-badge';\nimport { ToolBadge } from './badges/tool-badge';\nimport { useWorkflowStream, WorkflowBadge } from './badges/workflow-badge';\nimport { SubmitPlanTool } from './submit-plan-tool';\nimport { ToolResultMedia } from './tool-result-media';\nimport type { MessageMetadata } from '@/domains/chat';\nimport { ChatAgentContext, useChatRunning, useChatSend } from '@/domains/chat/context/chat-context';\nimport { AskUserTool } from '@/domains/chat/tools/ask-user-tool';\nimport { CodeModeBadge } from '@/domains/chat/tools/badges/code-mode-badge';\nimport { ObservationMarkerBadge } from '@/domains/chat/tools/badges/observation-marker-badge';\nimport { ConnectPromptTool } from '@/domains/chat/tools/connect-prompt-tool';\nimport {\n badgeStatus,\n codeModeCall,\n isAgentCall,\n isSettledState,\n isWorkflowCall,\n toolCardKind,\n toolInteraction,\n} from '@/domains/chat/tools/tool-card-kind';\nimport { McpAppToolResult } from '@/domains/mcps/components/mcp-app-tool-result';\nimport { PlaygroundWorkflowRunProvider } from '@/domains/workflows/context/playground-workflow-run-provider';\n\n/** A `data`-typed part the agent wrote via `writer.custom`, scoped to a call by `data.toolCallId`. */\nexport interface DataMessagePart {\n type: string;\n name?: string;\n data?: any;\n}\n\nexport interface ToolCardProps {\n toolName: string;\n input: any;\n output: any;\n modelOutput?: unknown;\n /** The Mastra background task running the call, when it was deferred. */\n backgroundTaskId?: string;\n /** The background task's status in the part's metadata: `running` until the part holds its result. */\n backgroundTaskStatus?: string;\n toolCallId: string;\n /** Part state: v5 `output-available`/`output-error`/`input-available`, or v4 `result`/`call`. */\n state?: string;\n /** Error message when `state` is `output-error`. */\n errorText?: string;\n metadata?: MessageMetadata;\n /** `data`-typed parts from the parent message, for badges that read live streaming metadata. */\n dataParts?: ReadonlyArray<DataMessagePart>;\n /** Historical rendering mode: preserve presentation while suppressing executable actions and side effects. */\n readOnly?: boolean;\n}\n\nconst stripPrefix = (toolName: string, prefix: string): string =>\n toolName.startsWith(prefix) ? toolName.slice(prefix.length) : toolName;\n\n/** Its own workflow run scope, so a streaming workflow result can drive a live graph inside the card. */\nexport const ToolCard = (props: ToolCardProps) => {\n return (\n <PlaygroundWorkflowRunProvider workflowId=\"\" withoutTimeTravel>\n <ToolCardInner {...props} />\n </PlaygroundWorkflowRunProvider>\n );\n};\n\nexport const ToolCardInner = ({\n toolName,\n input,\n output,\n modelOutput,\n backgroundTaskId,\n backgroundTaskStatus,\n toolCallId,\n state,\n errorText,\n metadata,\n dataParts,\n readOnly = false,\n}: ToolCardProps) => {\n const { data: mcpAppTools } = useMcpAppTools();\n const send = useChatSend();\n const chatAgent = useContext(ChatAgentContext);\n const { isRunning } = useChatRunning();\n const handleMcpAppSendMessage = useCallback(\n (content: string) => {\n void send({ message: content });\n },\n [send],\n );\n useWorkflowStream(output);\n\n const kind = toolCardKind({ toolName, toolCallId, input, output, state }, { metadata, mcpAppTools });\n const { approval: toolApprovalMetadata, suspended: suspendedToolMetadata } = toolInteraction(\n metadata,\n toolName,\n toolCallId,\n );\n const status = badgeStatus(state, isRunning);\n const isNetwork = metadata?.mode === 'network';\n const toolCalled = isNetwork && metadata?.hasMoreMessages ? true : undefined;\n const agentToolName = stripPrefix(toolName, 'agent-');\n const workflowToolName = stripPrefix(toolName, 'workflow-');\n\n switch (kind) {\n case 'hidden':\n return null;\n case 'observation':\n return <ObservationMarkerBadge toolName={toolName} omData={output?.omData ?? input} />;\n case 'ask_user':\n if (!readOnly) {\n return <AskUserTool toolName={toolName} toolCallId={toolCallId} output={output} metadata={metadata} />;\n }\n break;\n case 'connect_prompt':\n return <ConnectPromptTool output={output} readOnly={readOnly} />;\n case 'submit_plan':\n return (\n <SubmitPlanTool\n agentId={chatAgent?.agentId}\n agentVersionId={chatAgent?.agentVersionId}\n requestContext={chatAgent?.requestContext}\n toolName={toolName}\n toolCallId={toolCallId}\n output={output}\n metadata={metadata}\n />\n );\n case 'background': {\n const isAgent = isAgentCall(metadata, toolName);\n const isWorkflow = isWorkflowCall(metadata, toolName);\n return (\n <ToolBadge\n toolName={isAgent ? agentToolName : isWorkflow ? workflowToolName : toolName}\n args={input}\n result={output}\n toolOutput={[]}\n metadata={metadata}\n toolCallId={toolCallId}\n toolApprovalMetadata={toolApprovalMetadata}\n suspendPayload={suspendedToolMetadata?.suspendPayload}\n isNetwork={isNetwork}\n toolCalled={toolCalled}\n withoutArgs={isAgent || isWorkflow}\n status={status}\n backgroundTaskId={backgroundTaskId}\n backgroundTaskStatus={backgroundTaskStatus}\n />\n );\n }\n case 'agent':\n return (\n <AgentBadgeWrapper\n agentId={agentToolName}\n result={output}\n metadata={metadata}\n toolCallId={toolCallId}\n toolApprovalMetadata={toolApprovalMetadata}\n toolName={toolName}\n isNetwork={isNetwork}\n suspendPayload={suspendedToolMetadata?.suspendPayload}\n toolCalled={toolCalled}\n isComplete={isSettledState(state)}\n status={status}\n errorText={errorText}\n />\n );\n case 'workflow':\n return (\n <WorkflowBadge\n workflowId={workflowToolName}\n isStreaming={metadata?.mode === 'stream' || isNetwork}\n result={output}\n metadata={metadata}\n toolCallId={toolCallId}\n toolApprovalMetadata={toolApprovalMetadata}\n suspendPayload={suspendedToolMetadata?.suspendPayload}\n toolName={toolName}\n isNetwork={isNetwork}\n toolCalled={toolCalled}\n />\n );\n case 'file_tree':\n return (\n <FileTreeBadge\n toolName={toolName}\n args={input}\n result={output}\n metadata={metadata}\n toolCallId={toolCallId}\n toolApprovalMetadata={toolApprovalMetadata}\n isNetwork={isNetwork}\n toolCalled={toolCalled}\n dataParts={dataParts}\n status={status}\n />\n );\n case 'sandbox':\n return (\n <SandboxExecutionBadge\n toolName={toolName}\n args={input}\n result={output}\n metadata={metadata}\n toolCallId={toolCallId}\n toolApprovalMetadata={toolApprovalMetadata}\n isNetwork={isNetwork}\n toolCalled={toolCalled}\n dataParts={dataParts}\n status={status}\n />\n );\n case 'code_mode': {\n const call = codeModeCall(input, output);\n if (call) {\n return (\n <CodeModeBadge\n toolName={toolName}\n code={call.code}\n result={call.result}\n metadata={metadata}\n toolCallId={toolCallId}\n toolApprovalMetadata={toolApprovalMetadata}\n isNetwork={isNetwork}\n toolCalled={toolCalled}\n />\n );\n }\n break;\n }\n case 'mcp_app':\n case 'plain':\n break;\n }\n\n const mcpAppInfo = mcpAppTools?.[toolName];\n\n return (\n <>\n <ToolBadge\n toolName={toolName}\n args={input}\n result={output ?? errorText}\n toolOutput={output?.toolOutput || []}\n metadata={metadata}\n toolCallId={toolCallId}\n toolApprovalMetadata={toolApprovalMetadata}\n suspendPayload={suspendedToolMetadata?.suspendPayload}\n isNetwork={isNetwork}\n toolCalled={toolCalled}\n status={status}\n backgroundTaskId={backgroundTaskId}\n backgroundTaskStatus={backgroundTaskStatus}\n />\n <ToolResultMedia modelOutput={modelOutput} />\n {mcpAppInfo && output !== undefined && (\n <McpAppToolResult\n appInfo={mcpAppInfo}\n toolArgs={input}\n toolResult={output}\n onSendMessage={handleMcpAppSendMessage}\n readOnly={readOnly}\n />\n )}\n </>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tool-presentation-BLErsb7c.cjs","names":["agentGlyph","humanize"],"sources":["../src/ds/components/ai/tool-call/tool-presentation.ts"],"sourcesContent":["import type { LucideIcon } from 'lucide-react';\n\nimport type { ToolKind } from './tool-phrases';\nimport { agentGlyph } from '@/ds/components/AgentIndicator';\nimport type { AgentIndicatorState } from '@/ds/components/AgentIndicator';\nimport { humanize } from '@/lib/string';\n\nexport interface ToolPresentation {\n /** What the agent indicator turns into while this call runs. */\n pose: AgentIndicatorState;\n /** The pose held still, so the call's row and the live indicator draw the same thing. */\n icon: LucideIcon;\n /** Stable name of the kind of tool, e.g. \"Run\"; also groups calls by kind. */\n label: string;\n /** Salient argument shown next to the label: command, path, pattern… */\n detail?: string;\n /**\n * What a command does, in the agent's words. `ActivityHeadline` shows it alone in place of\n * label and detail; both stay set for consumers that render them directly.\n */\n description?: string;\n /** Shell command, when the tool is terminal-style. Drives the expanded body. */\n command?: string;\n}\n\n/** Tool arguments and results as the mono body shows them: strings verbatim, the rest pretty JSON. */\nexport function stringifyToolValue(value: unknown): string {\n if (typeof value === 'string') return value;\n try {\n return JSON.stringify(value, null, 2) ?? String(value);\n } catch {\n return String(value);\n }\n}\n\nfunction hasProperty<K extends string>(value: object, key: K): value is object & Record<K, unknown> {\n return key in value;\n}\n\nfunction stringArg(args: unknown, key: string): string | undefined {\n if (!args || typeof args !== 'object' || !hasProperty(args, key)) return undefined;\n const value = args[key];\n if (typeof value === 'number') return String(value);\n return typeof value === 'string' && value.length > 0 ? value : undefined;\n}\n\nfunction firstStringArg(args: unknown, keys: string[]): string | undefined {\n for (const key of keys) {\n const value = stringArg(args, key);\n if (value) return value;\n }\n return undefined;\n}\n\ninterface ToolStyle {\n pose: AgentIndicatorState;\n label: ToolKind;\n detailKeys?: string[];\n isCommand?: boolean;\n}\n\nconst TOOL_STYLES: Record<string, ToolStyle> = {\n view: { pose: 'reading', label: 'Read', detailKeys: ['path'] },\n read_file: { pose: 'reading', label: 'Read', detailKeys: ['path'] },\n write_file: { pose: 'editing', label: 'Write', detailKeys: ['path'] },\n create_file: { pose: 'editing', label: 'Write', detailKeys: ['path'] },\n edit_file: { pose: 'editing', label: 'Edit', detailKeys: ['path'] },\n string_replace: { pose: 'editing', label: 'Edit', detailKeys: ['path'] },\n str_replace: { pose: 'editing', label: 'Edit', detailKeys: ['path'] },\n ast_edit: { pose: 'editing', label: 'Edit', detailKeys: ['path'] },\n execute_command: { pose: 'running', label: 'Run', detailKeys: ['command'], isCommand: true },\n get_process_output: { pose: 'reading', label: 'Process output', detailKeys: ['pid'] },\n kill_process: { pose: 'running', label: 'Stop process', detailKeys: ['pid'] },\n find_files: { pose: 'finding', label: 'Find files', detailKeys: ['pattern', 'path'] },\n list_files: { pose: 'finding', label: 'List files', detailKeys: ['pattern', 'path'] },\n grep: { pose: 'searching', label: 'Search', detailKeys: ['pattern', 'path'] },\n search_content: { pose: 'searching', label: 'Search', detailKeys: ['pattern', 'query'] },\n search: { pose: 'searching', label: 'Search', detailKeys: ['query'] },\n web_search: { pose: 'browsing', label: 'Search the web', detailKeys: ['query'] },\n lsp_inspect: { pose: 'reading', label: 'Inspect code', detailKeys: ['path'] },\n file_stat: { pose: 'reading', label: 'File info', detailKeys: ['path'] },\n delete: { pose: 'deleting', label: 'Delete', detailKeys: ['path'] },\n delete_file: { pose: 'deleting', label: 'Delete', detailKeys: ['path'] },\n mkdir: { pose: 'editing', label: 'New folder', detailKeys: ['path'] },\n skill: { pose: 'skill', label: 'Skill', detailKeys: ['name'] },\n skill_search: { pose: 'skill', label: 'Search skills', detailKeys: ['query'] },\n skill_read: { pose: 'skill', label: 'Skill file', detailKeys: ['path'] },\n};\n\n/** Agents prefix commands with `cd <workspace> &&`, which crowds out the command itself on a one-line row. */\nfunction withoutCdPrefix(command: string): string {\n return command.replace(/^\\s*cd\\s+(?:'[^']*'|\"[^\"]*\"|[^\\s&|;]+)\\s*&&\\s*/, '') || command;\n}\n\nexport function presentTool(toolName: string, args: unknown): ToolPresentation {\n const style = TOOL_STYLES[toolName.replace(/^mastra_workspace_/, '')];\n if (!style) return { pose: 'tool', icon: agentGlyph('tool'), label: humanize(toolName) };\n\n const dressed = { pose: style.pose, icon: agentGlyph(style.pose), label: style.label };\n const detail = style.detailKeys ? firstStringArg(args, style.detailKeys) : undefined;\n if (!detail) return dressed;\n if (!style.isCommand) return { ...dressed, detail };\n // Workspaces with `requireDescription` have the agent say what a command does; that reads better\n // on a one-line row than \"Run\" and the command, which stays in the expanded body.\n const description = stringArg(args, 'description')?.replace(/\\s+/g, ' ').trim() || undefined;\n return { ...dressed, detail: withoutCdPrefix(detail), description, command: detail };\n}\n\nexport type ToolEdit = { path?: string } & ({ oldText: string; newText: string } | { content: string });\n\nfunction stringField(args: unknown, key: string): string | undefined {\n if (!args || typeof args !== 'object' || !hasProperty(args, key)) return undefined;\n return typeof args[key] === 'string' ? args[key] : undefined;\n}\n\nexport function toolEdit(toolName: string, args: unknown): ToolEdit | undefined {\n const path = stringField(args, 'path');\n const newText = stringField(args, 'new_string');\n if (/string_replace|str_replace|edit_file/i.test(toolName) && newText !== undefined) {\n return { path, oldText: stringField(args, 'old_string') ?? '', newText };\n }\n const content = stringField(args, 'content');\n if (/write_file|create_file/i.test(toolName) && content !== undefined) return { path, content };\n return undefined;\n}\n\nexport interface ToolArgumentsInput {\n toolName: string;\n args?: unknown;\n argsText?: string;\n hideArguments?: boolean;\n}\n\nfunction isEmptyObject(value: unknown): boolean {\n return typeof value === 'object' && value !== null && Object.keys(value).length === 0;\n}\n\nexport function visibleToolArgumentsText({ args, argsText, hideArguments }: ToolArgumentsInput): string | undefined {\n if (hideArguments || isEmptyObject(args)) return undefined;\n return args === undefined ? argsText : stringifyToolValue(args);\n}\n\nexport function hasToolArguments(input: ToolArgumentsInput): boolean {\n return Boolean(toolEdit(input.toolName, input.args) || visibleToolArgumentsText(input));\n}\n\n/** Task tools draw in the docked task list, never as a transcript row. */\nconst TASK_TOOLS = new Set(['task_write', 'task_update', 'task_complete', 'task_check']);\n\nexport function isTaskTool(toolName: string): boolean {\n return TASK_TOOLS.has(toolName);\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tool-presentation-BSZYIWx2.js","names":[],"sources":["../src/ds/components/ai/tool-call/tool-presentation.ts"],"sourcesContent":["import type { LucideIcon } from 'lucide-react';\n\nimport type { ToolKind } from './tool-phrases';\nimport { agentGlyph } from '@/ds/components/AgentIndicator';\nimport type { AgentIndicatorState } from '@/ds/components/AgentIndicator';\nimport { humanize } from '@/lib/string';\n\nexport interface ToolPresentation {\n /** What the agent indicator turns into while this call runs. */\n pose: AgentIndicatorState;\n /** The pose held still, so the call's row and the live indicator draw the same thing. */\n icon: LucideIcon;\n /** Stable name of the kind of tool, e.g. \"Run\"; also groups calls by kind. */\n label: string;\n /** Salient argument shown next to the label: command, path, pattern… */\n detail?: string;\n /**\n * What a command does, in the agent's words. `ActivityHeadline` shows it alone in place of\n * label and detail; both stay set for consumers that render them directly.\n */\n description?: string;\n /** Shell command, when the tool is terminal-style. Drives the expanded body. */\n command?: string;\n}\n\n/** Tool arguments and results as the mono body shows them: strings verbatim, the rest pretty JSON. */\nexport function stringifyToolValue(value: unknown): string {\n if (typeof value === 'string') return value;\n try {\n return JSON.stringify(value, null, 2) ?? String(value);\n } catch {\n return String(value);\n }\n}\n\nfunction hasProperty<K extends string>(value: object, key: K): value is object & Record<K, unknown> {\n return key in value;\n}\n\nfunction stringArg(args: unknown, key: string): string | undefined {\n if (!args || typeof args !== 'object' || !hasProperty(args, key)) return undefined;\n const value = args[key];\n if (typeof value === 'number') return String(value);\n return typeof value === 'string' && value.length > 0 ? value : undefined;\n}\n\nfunction firstStringArg(args: unknown, keys: string[]): string | undefined {\n for (const key of keys) {\n const value = stringArg(args, key);\n if (value) return value;\n }\n return undefined;\n}\n\ninterface ToolStyle {\n pose: AgentIndicatorState;\n label: ToolKind;\n detailKeys?: string[];\n isCommand?: boolean;\n}\n\nconst TOOL_STYLES: Record<string, ToolStyle> = {\n view: { pose: 'reading', label: 'Read', detailKeys: ['path'] },\n read_file: { pose: 'reading', label: 'Read', detailKeys: ['path'] },\n write_file: { pose: 'editing', label: 'Write', detailKeys: ['path'] },\n create_file: { pose: 'editing', label: 'Write', detailKeys: ['path'] },\n edit_file: { pose: 'editing', label: 'Edit', detailKeys: ['path'] },\n string_replace: { pose: 'editing', label: 'Edit', detailKeys: ['path'] },\n str_replace: { pose: 'editing', label: 'Edit', detailKeys: ['path'] },\n ast_edit: { pose: 'editing', label: 'Edit', detailKeys: ['path'] },\n execute_command: { pose: 'running', label: 'Run', detailKeys: ['command'], isCommand: true },\n get_process_output: { pose: 'reading', label: 'Process output', detailKeys: ['pid'] },\n kill_process: { pose: 'running', label: 'Stop process', detailKeys: ['pid'] },\n find_files: { pose: 'finding', label: 'Find files', detailKeys: ['pattern', 'path'] },\n list_files: { pose: 'finding', label: 'List files', detailKeys: ['pattern', 'path'] },\n grep: { pose: 'searching', label: 'Search', detailKeys: ['pattern', 'path'] },\n search_content: { pose: 'searching', label: 'Search', detailKeys: ['pattern', 'query'] },\n search: { pose: 'searching', label: 'Search', detailKeys: ['query'] },\n web_search: { pose: 'browsing', label: 'Search the web', detailKeys: ['query'] },\n lsp_inspect: { pose: 'reading', label: 'Inspect code', detailKeys: ['path'] },\n file_stat: { pose: 'reading', label: 'File info', detailKeys: ['path'] },\n delete: { pose: 'deleting', label: 'Delete', detailKeys: ['path'] },\n delete_file: { pose: 'deleting', label: 'Delete', detailKeys: ['path'] },\n mkdir: { pose: 'editing', label: 'New folder', detailKeys: ['path'] },\n skill: { pose: 'skill', label: 'Skill', detailKeys: ['name'] },\n skill_search: { pose: 'skill', label: 'Search skills', detailKeys: ['query'] },\n skill_read: { pose: 'skill', label: 'Skill file', detailKeys: ['path'] },\n};\n\n/** Agents prefix commands with `cd <workspace> &&`, which crowds out the command itself on a one-line row. */\nfunction withoutCdPrefix(command: string): string {\n return command.replace(/^\\s*cd\\s+(?:'[^']*'|\"[^\"]*\"|[^\\s&|;]+)\\s*&&\\s*/, '') || command;\n}\n\nexport function presentTool(toolName: string, args: unknown): ToolPresentation {\n const style = TOOL_STYLES[toolName.replace(/^mastra_workspace_/, '')];\n if (!style) return { pose: 'tool', icon: agentGlyph('tool'), label: humanize(toolName) };\n\n const dressed = { pose: style.pose, icon: agentGlyph(style.pose), label: style.label };\n const detail = style.detailKeys ? firstStringArg(args, style.detailKeys) : undefined;\n if (!detail) return dressed;\n if (!style.isCommand) return { ...dressed, detail };\n // Workspaces with `requireDescription` have the agent say what a command does; that reads better\n // on a one-line row than \"Run\" and the command, which stays in the expanded body.\n const description = stringArg(args, 'description')?.replace(/\\s+/g, ' ').trim() || undefined;\n return { ...dressed, detail: withoutCdPrefix(detail), description, command: detail };\n}\n\nexport type ToolEdit = { path?: string } & ({ oldText: string; newText: string } | { content: string });\n\nfunction stringField(args: unknown, key: string): string | undefined {\n if (!args || typeof args !== 'object' || !hasProperty(args, key)) return undefined;\n return typeof args[key] === 'string' ? args[key] : undefined;\n}\n\nexport function toolEdit(toolName: string, args: unknown): ToolEdit | undefined {\n const path = stringField(args, 'path');\n const newText = stringField(args, 'new_string');\n if (/string_replace|str_replace|edit_file/i.test(toolName) && newText !== undefined) {\n return { path, oldText: stringField(args, 'old_string') ?? '', newText };\n }\n const content = stringField(args, 'content');\n if (/write_file|create_file/i.test(toolName) && content !== undefined) return { path, content };\n return undefined;\n}\n\nexport interface ToolArgumentsInput {\n toolName: string;\n args?: unknown;\n argsText?: string;\n hideArguments?: boolean;\n}\n\nfunction isEmptyObject(value: unknown): boolean {\n return typeof value === 'object' && value !== null && Object.keys(value).length === 0;\n}\n\nexport function visibleToolArgumentsText({ args, argsText, hideArguments }: ToolArgumentsInput): string | undefined {\n if (hideArguments || isEmptyObject(args)) return undefined;\n return args === undefined ? argsText : stringifyToolValue(args);\n}\n\nexport function hasToolArguments(input: ToolArgumentsInput): boolean {\n return Boolean(toolEdit(input.toolName, input.args) || visibleToolArgumentsText(input));\n}\n\n/** Task tools draw in the docked task list, never as a transcript row. */\nconst TASK_TOOLS = new Set(['task_write', 'task_update', 'task_complete', 'task_check']);\n\nexport function isTaskTool(toolName: string): boolean {\n return TASK_TOOLS.has(toolName);\n}\n"],"mappings":";;;;AA0BA,SAAgB,mBAAmB,OAAwB;CACzD,IAAI,OAAO,UAAU,UAAU,OAAO;CACtC,IAAI;EACF,OAAO,KAAK,UAAU,OAAO,MAAM,CAAC,KAAK,OAAO,KAAK;CACvD,QAAQ;EACN,OAAO,OAAO,KAAK;CACrB;AACF;AAEA,SAAS,YAA8B,OAAe,KAA8C;CAClG,OAAO,OAAO;AAChB;AAEA,SAAS,UAAU,MAAe,KAAiC;CACjE,IAAI,CAAC,QAAQ,OAAO,SAAS,YAAY,CAAC,YAAY,MAAM,GAAG,GAAG,OAAO,KAAA;CACzE,MAAM,QAAQ,KAAK;CACnB,IAAI,OAAO,UAAU,UAAU,OAAO,OAAO,KAAK;CAClD,OAAO,OAAO,UAAU,YAAY,MAAM,SAAS,IAAI,QAAQ,KAAA;AACjE;AAEA,SAAS,eAAe,MAAe,MAAoC;CACzE,KAAK,MAAM,OAAO,MAAM;EACtB,MAAM,QAAQ,UAAU,MAAM,GAAG;EACjC,IAAI,OAAO,OAAO;CACpB;AAEF;AASA,IAAM,cAAyC;CAC7C,MAAM;EAAE,MAAM;EAAW,OAAO;EAAQ,YAAY,CAAC,MAAM;CAAE;CAC7D,WAAW;EAAE,MAAM;EAAW,OAAO;EAAQ,YAAY,CAAC,MAAM;CAAE;CAClE,YAAY;EAAE,MAAM;EAAW,OAAO;EAAS,YAAY,CAAC,MAAM;CAAE;CACpE,aAAa;EAAE,MAAM;EAAW,OAAO;EAAS,YAAY,CAAC,MAAM;CAAE;CACrE,WAAW;EAAE,MAAM;EAAW,OAAO;EAAQ,YAAY,CAAC,MAAM;CAAE;CAClE,gBAAgB;EAAE,MAAM;EAAW,OAAO;EAAQ,YAAY,CAAC,MAAM;CAAE;CACvE,aAAa;EAAE,MAAM;EAAW,OAAO;EAAQ,YAAY,CAAC,MAAM;CAAE;CACpE,UAAU;EAAE,MAAM;EAAW,OAAO;EAAQ,YAAY,CAAC,MAAM;CAAE;CACjE,iBAAiB;EAAE,MAAM;EAAW,OAAO;EAAO,YAAY,CAAC,SAAS;EAAG,WAAW;CAAK;CAC3F,oBAAoB;EAAE,MAAM;EAAW,OAAO;EAAkB,YAAY,CAAC,KAAK;CAAE;CACpF,cAAc;EAAE,MAAM;EAAW,OAAO;EAAgB,YAAY,CAAC,KAAK;CAAE;CAC5E,YAAY;EAAE,MAAM;EAAW,OAAO;EAAc,YAAY,CAAC,WAAW,MAAM;CAAE;CACpF,YAAY;EAAE,MAAM;EAAW,OAAO;EAAc,YAAY,CAAC,WAAW,MAAM;CAAE;CACpF,MAAM;EAAE,MAAM;EAAa,OAAO;EAAU,YAAY,CAAC,WAAW,MAAM;CAAE;CAC5E,gBAAgB;EAAE,MAAM;EAAa,OAAO;EAAU,YAAY,CAAC,WAAW,OAAO;CAAE;CACvF,QAAQ;EAAE,MAAM;EAAa,OAAO;EAAU,YAAY,CAAC,OAAO;CAAE;CACpE,YAAY;EAAE,MAAM;EAAY,OAAO;EAAkB,YAAY,CAAC,OAAO;CAAE;CAC/E,aAAa;EAAE,MAAM;EAAW,OAAO;EAAgB,YAAY,CAAC,MAAM;CAAE;CAC5E,WAAW;EAAE,MAAM;EAAW,OAAO;EAAa,YAAY,CAAC,MAAM;CAAE;CACvE,QAAQ;EAAE,MAAM;EAAY,OAAO;EAAU,YAAY,CAAC,MAAM;CAAE;CAClE,aAAa;EAAE,MAAM;EAAY,OAAO;EAAU,YAAY,CAAC,MAAM;CAAE;CACvE,OAAO;EAAE,MAAM;EAAW,OAAO;EAAc,YAAY,CAAC,MAAM;CAAE;CACpE,OAAO;EAAE,MAAM;EAAS,OAAO;EAAS,YAAY,CAAC,MAAM;CAAE;CAC7D,cAAc;EAAE,MAAM;EAAS,OAAO;EAAiB,YAAY,CAAC,OAAO;CAAE;CAC7E,YAAY;EAAE,MAAM;EAAS,OAAO;EAAc,YAAY,CAAC,MAAM;CAAE;AACzE;;AAGA,SAAS,gBAAgB,SAAyB;CAChD,OAAO,QAAQ,QAAQ,kDAAkD,EAAE,KAAK;AAClF;AAEA,SAAgB,YAAY,UAAkB,MAAiC;CAC7E,MAAM,QAAQ,YAAY,SAAS,QAAQ,sBAAsB,EAAE;CACnE,IAAI,CAAC,OAAO,OAAO;EAAE,MAAM;EAAQ,MAAM,WAAW,MAAM;EAAG,OAAO,SAAS,QAAQ;CAAE;CAEvF,MAAM,UAAU;EAAE,MAAM,MAAM;EAAM,MAAM,WAAW,MAAM,IAAI;EAAG,OAAO,MAAM;CAAM;CACrF,MAAM,SAAS,MAAM,aAAa,eAAe,MAAM,MAAM,UAAU,IAAI,KAAA;CAC3E,IAAI,CAAC,QAAQ,OAAO;CACpB,IAAI,CAAC,MAAM,WAAW,OAAO;EAAE,GAAG;EAAS;CAAO;CAGlD,MAAM,cAAc,UAAU,MAAM,aAAa,CAAC,EAAE,QAAQ,QAAQ,GAAG,CAAC,CAAC,KAAK,KAAK,KAAA;CACnF,OAAO;EAAE,GAAG;EAAS,QAAQ,gBAAgB,MAAM;EAAG;EAAa,SAAS;CAAO;AACrF;AAIA,SAAS,YAAY,MAAe,KAAiC;CACnE,IAAI,CAAC,QAAQ,OAAO,SAAS,YAAY,CAAC,YAAY,MAAM,GAAG,GAAG,OAAO,KAAA;CACzE,OAAO,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO,KAAA;AACrD;AAEA,SAAgB,SAAS,UAAkB,MAAqC;CAC9E,MAAM,OAAO,YAAY,MAAM,MAAM;CACrC,MAAM,UAAU,YAAY,MAAM,YAAY;CAC9C,IAAI,wCAAwC,KAAK,QAAQ,KAAK,YAAY,KAAA,GACxE,OAAO;EAAE;EAAM,SAAS,YAAY,MAAM,YAAY,KAAK;EAAI;CAAQ;CAEzE,MAAM,UAAU,YAAY,MAAM,SAAS;CAC3C,IAAI,0BAA0B,KAAK,QAAQ,KAAK,YAAY,KAAA,GAAW,OAAO;EAAE;EAAM;CAAQ;AAEhG;AASA,SAAS,cAAc,OAAyB;CAC9C,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,OAAO,KAAK,KAAK,CAAC,CAAC,WAAW;AACtF;AAEA,SAAgB,yBAAyB,EAAE,MAAM,UAAU,iBAAyD;CAClH,IAAI,iBAAiB,cAAc,IAAI,GAAG,OAAO,KAAA;CACjD,OAAO,SAAS,KAAA,IAAY,WAAW,mBAAmB,IAAI;AAChE;AAEA,SAAgB,iBAAiB,OAAoC;CACnE,OAAO,QAAQ,SAAS,MAAM,UAAU,MAAM,IAAI,KAAK,yBAAyB,KAAK,CAAC;AACxF;;AAGA,IAAM,6BAAa,IAAI,IAAI;CAAC;CAAc;CAAe;CAAiB;AAAY,CAAC;AAEvF,SAAgB,WAAW,UAA2B;CACpD,OAAO,WAAW,IAAI,QAAQ;AAChC"}
|