@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,4 +1,4 @@
|
|
|
1
|
-
import { t as Button } from "../../../Button-
|
|
1
|
+
import { t as Button } from "../../../Button-CLXTbAY8.js";
|
|
2
2
|
import { TraceIcon } from "../../../icons/TraceIcon.es.js";
|
|
3
3
|
import { jsx } from "react/jsx-runtime";
|
|
4
4
|
import { ListTreeIcon, LogsIcon, MessagesSquareIcon } from "lucide-react";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_Button = require("../../../Button-
|
|
2
|
+
const require_Button = require("../../../Button-DLcMcuUL.cjs");
|
|
3
3
|
const require_domains_auth_components_permission_denied = require("../../auth/components/permission-denied.cjs.js");
|
|
4
4
|
const require_domains_auth_components_session_expired = require("../../auth/components/session-expired.cjs.js");
|
|
5
5
|
const require_MetricsCard = require("../../../MetricsCard-CEB-f2sv.cjs");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as Button } from "../../../Button-
|
|
1
|
+
import { t as Button } from "../../../Button-CLXTbAY8.js";
|
|
2
2
|
import { PermissionDenied } from "../../auth/components/permission-denied.es.js";
|
|
3
3
|
import { SessionExpired } from "../../auth/components/session-expired.es.js";
|
|
4
4
|
import { t as MetricsCard } from "../../../MetricsCard-M8awJ2B_.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_domains_metrics_hooks_use_metrics = require("../hooks/use-metrics.cjs.js");
|
|
3
|
-
const
|
|
3
|
+
const require_date_time_range_picker = require("../../../date-time-range-picker-CTt7Od0P.cjs");
|
|
4
4
|
const require_domains_metrics_metrics_date_presets = require("../metrics-date-presets.cjs.js");
|
|
5
5
|
let react = require("react");
|
|
6
6
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
@@ -12,7 +12,7 @@ function DateRangeSelector() {
|
|
|
12
12
|
presetRef.current = datePreset;
|
|
13
13
|
const customRangeRef = (0, react.useRef)(customRange);
|
|
14
14
|
customRangeRef.current = customRange;
|
|
15
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
15
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_date_time_range_picker.DateTimeRangePicker, {
|
|
16
16
|
preset: require_domains_metrics_metrics_date_presets.toPickerPreset(datePreset),
|
|
17
17
|
onPresetChange: (next) => {
|
|
18
18
|
const mapped = require_domains_metrics_metrics_date_presets.fromPickerPreset(next);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-range-selector.cjs.js","names":["useMetrics","useRef","DateTimeRangePicker","toPickerPreset","fromPickerPreset","METRICS_PICKER_PRESETS"],"sources":["../../../../src/domains/metrics/components/date-range-selector.tsx"],"sourcesContent":["import { useRef } from 'react';\nimport { DateTimeRangePicker } from '../../../ds/components/DateTimeRangePicker';\nimport { useMetrics } from '../hooks/use-metrics';\nimport { fromPickerPreset, METRICS_PICKER_PRESETS, toPickerPreset } from '../metrics-date-presets';\n\n/** @deprecated The metrics dashboard picks its range from the filter bar. Use `MetricsTimeRangeChip`. */\nexport function DateRangeSelector() {\n const { datePreset, setDatePreset, customRange, setCustomRange } = useMetrics();\n\n // The picker reports each field separately and also fires onDateChange right\n // after a non-custom preset switch. Track the latest preset and range\n // synchronously so the guard below skips those calls and the second field\n // change still sees the first one.\n const presetRef = useRef(datePreset);\n presetRef.current = datePreset;\n const customRangeRef = useRef(customRange);\n customRangeRef.current = customRange;\n\n return (\n <DateTimeRangePicker\n preset={toPickerPreset(datePreset)}\n onPresetChange={next => {\n const mapped = fromPickerPreset(next);\n presetRef.current = mapped;\n setDatePreset(mapped);\n }}\n dateFrom={customRange?.from}\n dateTo={customRange?.to}\n onDateChange={(value, type) => {\n if (presetRef.current !== 'custom') return;\n const next = { ...customRangeRef.current, [type]: value };\n customRangeRef.current = next;\n setCustomRange(next);\n }}\n presets={METRICS_PICKER_PRESETS}\n />\n );\n}\n"],"mappings":";;;;;;;;AAMA,SAAgB,oBAAoB;CAClC,MAAM,EAAE,YAAY,eAAe,aAAa,mBAAmBA,0CAAAA,WAAW;CAM9E,MAAM,aAAA,GAAYC,MAAAA,OAAAA,CAAO,UAAU;CACnC,UAAU,UAAU;CACpB,MAAM,kBAAA,GAAiBA,MAAAA,OAAAA,CAAO,WAAW;CACzC,eAAe,UAAU;CAEzB,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,
|
|
1
|
+
{"version":3,"file":"date-range-selector.cjs.js","names":["useMetrics","useRef","DateTimeRangePicker","toPickerPreset","fromPickerPreset","METRICS_PICKER_PRESETS"],"sources":["../../../../src/domains/metrics/components/date-range-selector.tsx"],"sourcesContent":["import { useRef } from 'react';\nimport { DateTimeRangePicker } from '../../../ds/components/DateTimeRangePicker';\nimport { useMetrics } from '../hooks/use-metrics';\nimport { fromPickerPreset, METRICS_PICKER_PRESETS, toPickerPreset } from '../metrics-date-presets';\n\n/** @deprecated The metrics dashboard picks its range from the filter bar. Use `MetricsTimeRangeChip`. */\nexport function DateRangeSelector() {\n const { datePreset, setDatePreset, customRange, setCustomRange } = useMetrics();\n\n // The picker reports each field separately and also fires onDateChange right\n // after a non-custom preset switch. Track the latest preset and range\n // synchronously so the guard below skips those calls and the second field\n // change still sees the first one.\n const presetRef = useRef(datePreset);\n presetRef.current = datePreset;\n const customRangeRef = useRef(customRange);\n customRangeRef.current = customRange;\n\n return (\n <DateTimeRangePicker\n preset={toPickerPreset(datePreset)}\n onPresetChange={next => {\n const mapped = fromPickerPreset(next);\n presetRef.current = mapped;\n setDatePreset(mapped);\n }}\n dateFrom={customRange?.from}\n dateTo={customRange?.to}\n onDateChange={(value, type) => {\n if (presetRef.current !== 'custom') return;\n const next = { ...customRangeRef.current, [type]: value };\n customRangeRef.current = next;\n setCustomRange(next);\n }}\n presets={METRICS_PICKER_PRESETS}\n />\n );\n}\n"],"mappings":";;;;;;;;AAMA,SAAgB,oBAAoB;CAClC,MAAM,EAAE,YAAY,eAAe,aAAa,mBAAmBA,0CAAAA,WAAW;CAM9E,MAAM,aAAA,GAAYC,MAAAA,OAAAA,CAAO,UAAU;CACnC,UAAU,UAAU;CACpB,MAAM,kBAAA,GAAiBA,MAAAA,OAAAA,CAAO,WAAW;CACzC,eAAe,UAAU;CAEzB,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,+BAAAA,qBAAD;EACE,QAAQC,6CAAAA,eAAe,UAAU;EACjC,iBAAgB,SAAQ;GACtB,MAAM,SAASC,6CAAAA,iBAAiB,IAAI;GACpC,UAAU,UAAU;GACpB,cAAc,MAAM;EACtB;EACA,UAAU,aAAa;EACvB,QAAQ,aAAa;EACrB,eAAe,OAAO,SAAS;GAC7B,IAAI,UAAU,YAAY,UAAU;GACpC,MAAM,OAAO;IAAE,GAAG,eAAe;KAAU,OAAO;GAAM;GACxD,eAAe,UAAU;GACzB,eAAe,IAAI;EACrB;EACA,SAASC,6CAAAA;CACV,CAAA;AAEL"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useMetrics } from "../hooks/use-metrics.es.js";
|
|
2
|
-
import { t as DateTimeRangePicker } from "../../../
|
|
2
|
+
import { t as DateTimeRangePicker } from "../../../date-time-range-picker-DKh1K9Iy.js";
|
|
3
3
|
import { METRICS_PICKER_PRESETS, fromPickerPreset, toPickerPreset } from "../metrics-date-presets.es.js";
|
|
4
4
|
import { useRef } from "react";
|
|
5
5
|
import { jsx } from "react/jsx-runtime";
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_domains_metrics_hooks_use_metrics = require("../hooks/use-metrics.cjs.js");
|
|
3
3
|
const require_domains_metrics_metrics_date_presets = require("../metrics-date-presets.cjs.js");
|
|
4
|
-
const require_domains_traces_components_trace_time_range_chip = require("../../traces/components/trace-time-range-chip.cjs.js");
|
|
5
4
|
const require_domains_metrics_hooks_use_trace_retention_min_date = require("../hooks/use-trace-retention-min-date.cjs.js");
|
|
5
|
+
const require_filter_bar_time_range = require("../../../filter-bar-time-range-DvuaFnkI.cjs");
|
|
6
6
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
7
7
|
// src/domains/metrics/components/metrics-time-range-chip.tsx
|
|
8
8
|
/**
|
|
9
|
-
* The dashboard's date range as the filter bar's
|
|
10
|
-
* Render it from `FilterBar.Chips` for `
|
|
9
|
+
* The dashboard's date range as the filter bar's time range, the same control the Traces page shows.
|
|
10
|
+
* Render it from `FilterBar.Chips` for `FILTER_BAR_TIME_RANGE_ITEM`, inside a `MetricsProvider`.
|
|
11
11
|
*/
|
|
12
12
|
function MetricsTimeRangeChip() {
|
|
13
13
|
const { datePreset, setDatePreset, customRange, setCustomRange } = require_domains_metrics_hooks_use_metrics.useMetrics();
|
|
14
14
|
const minDate = require_domains_metrics_hooks_use_trace_retention_min_date.useTraceRetentionMinDate();
|
|
15
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
15
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_filter_bar_time_range.FilterBarTimeRange, {
|
|
16
16
|
preset: require_domains_metrics_metrics_date_presets.toPickerPreset(datePreset),
|
|
17
17
|
onPresetChange: (next) => setDatePreset(require_domains_metrics_metrics_date_presets.fromPickerPreset(next)),
|
|
18
18
|
dateFrom: customRange?.from,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics-time-range-chip.cjs.js","names":["useMetrics","useTraceRetentionMinDate","
|
|
1
|
+
{"version":3,"file":"metrics-time-range-chip.cjs.js","names":["useMetrics","useTraceRetentionMinDate","FilterBarTimeRange","toPickerPreset","fromPickerPreset","METRICS_PICKER_PRESETS"],"sources":["../../../../src/domains/metrics/components/metrics-time-range-chip.tsx"],"sourcesContent":["import { useMetrics } from '../hooks/use-metrics';\nimport { useTraceRetentionMinDate } from '../hooks/use-trace-retention-min-date';\nimport { fromPickerPreset, METRICS_PICKER_PRESETS, toPickerPreset } from '../metrics-date-presets';\nimport { FilterBarTimeRange } from '@/ds/components/FilterBar/filter-bar-time-range';\n\n/**\n * The dashboard's date range as the filter bar's time range, the same control the Traces page shows.\n * Render it from `FilterBar.Chips` for `FILTER_BAR_TIME_RANGE_ITEM`, inside a `MetricsProvider`.\n */\nexport function MetricsTimeRangeChip() {\n const { datePreset, setDatePreset, customRange, setCustomRange } = useMetrics();\n const minDate = useTraceRetentionMinDate();\n\n return (\n <FilterBarTimeRange\n preset={toPickerPreset(datePreset)}\n onPresetChange={next => setDatePreset(fromPickerPreset(next))}\n dateFrom={customRange?.from}\n dateTo={customRange?.to}\n // Relative presets derive their window from the preset alone; only an applied custom range\n // carries bounds, and both land in one update.\n onDateRangeChange={(from, to) => setCustomRange({ from, to })}\n presets={METRICS_PICKER_PRESETS}\n minDate={minDate}\n />\n );\n}\n"],"mappings":";;;;;;;;;;;AASA,SAAgB,uBAAuB;CACrC,MAAM,EAAE,YAAY,eAAe,aAAa,mBAAmBA,0CAAAA,WAAW;CAC9E,MAAM,UAAUC,2DAAAA,yBAAyB;CAEzC,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,8BAAAA,oBAAD;EACE,QAAQC,6CAAAA,eAAe,UAAU;EACjC,iBAAgB,SAAQ,cAAcC,6CAAAA,iBAAiB,IAAI,CAAC;EAC5D,UAAU,aAAa;EACvB,QAAQ,aAAa;EAGrB,oBAAoB,MAAM,OAAO,eAAe;GAAE;GAAM;EAAG,CAAC;EAC5D,SAASC,6CAAAA;EACA;CACV,CAAA;AAEL"}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { useMetrics } from "../hooks/use-metrics.es.js";
|
|
2
2
|
import { METRICS_PICKER_PRESETS, fromPickerPreset, toPickerPreset } from "../metrics-date-presets.es.js";
|
|
3
|
-
import { TraceTimeRangeChip } from "../../traces/components/trace-time-range-chip.es.js";
|
|
4
3
|
import { useTraceRetentionMinDate } from "../hooks/use-trace-retention-min-date.es.js";
|
|
4
|
+
import { i as FilterBarTimeRange } from "../../../filter-bar-time-range-CXQMBgpz.js";
|
|
5
5
|
import { jsx } from "react/jsx-runtime";
|
|
6
6
|
// src/domains/metrics/components/metrics-time-range-chip.tsx
|
|
7
7
|
/**
|
|
8
|
-
* The dashboard's date range as the filter bar's
|
|
9
|
-
* Render it from `FilterBar.Chips` for `
|
|
8
|
+
* The dashboard's date range as the filter bar's time range, the same control the Traces page shows.
|
|
9
|
+
* Render it from `FilterBar.Chips` for `FILTER_BAR_TIME_RANGE_ITEM`, inside a `MetricsProvider`.
|
|
10
10
|
*/
|
|
11
11
|
function MetricsTimeRangeChip() {
|
|
12
12
|
const { datePreset, setDatePreset, customRange, setCustomRange } = useMetrics();
|
|
13
13
|
const minDate = useTraceRetentionMinDate();
|
|
14
|
-
return /* @__PURE__ */ jsx(
|
|
14
|
+
return /* @__PURE__ */ jsx(FilterBarTimeRange, {
|
|
15
15
|
preset: toPickerPreset(datePreset),
|
|
16
16
|
onPresetChange: (next) => setDatePreset(fromPickerPreset(next)),
|
|
17
17
|
dateFrom: customRange?.from,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics-time-range-chip.es.js","names":[],"sources":["../../../../src/domains/metrics/components/metrics-time-range-chip.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"metrics-time-range-chip.es.js","names":[],"sources":["../../../../src/domains/metrics/components/metrics-time-range-chip.tsx"],"sourcesContent":["import { useMetrics } from '../hooks/use-metrics';\nimport { useTraceRetentionMinDate } from '../hooks/use-trace-retention-min-date';\nimport { fromPickerPreset, METRICS_PICKER_PRESETS, toPickerPreset } from '../metrics-date-presets';\nimport { FilterBarTimeRange } from '@/ds/components/FilterBar/filter-bar-time-range';\n\n/**\n * The dashboard's date range as the filter bar's time range, the same control the Traces page shows.\n * Render it from `FilterBar.Chips` for `FILTER_BAR_TIME_RANGE_ITEM`, inside a `MetricsProvider`.\n */\nexport function MetricsTimeRangeChip() {\n const { datePreset, setDatePreset, customRange, setCustomRange } = useMetrics();\n const minDate = useTraceRetentionMinDate();\n\n return (\n <FilterBarTimeRange\n preset={toPickerPreset(datePreset)}\n onPresetChange={next => setDatePreset(fromPickerPreset(next))}\n dateFrom={customRange?.from}\n dateTo={customRange?.to}\n // Relative presets derive their window from the preset alone; only an applied custom range\n // carries bounds, and both land in one update.\n onDateRangeChange={(from, to) => setCustomRange({ from, to })}\n presets={METRICS_PICKER_PRESETS}\n minDate={minDate}\n />\n );\n}\n"],"mappings":";;;;;;;;;;AASA,SAAgB,uBAAuB;CACrC,MAAM,EAAE,YAAY,eAAe,aAAa,mBAAmB,WAAW;CAC9E,MAAM,UAAU,yBAAyB;CAEzC,OACE,oBAAC,oBAAD;EACE,QAAQ,eAAe,UAAU;EACjC,iBAAgB,SAAQ,cAAc,iBAAiB,IAAI,CAAC;EAC5D,UAAU,aAAa;EACvB,QAAQ,aAAa;EAGrB,oBAAoB,MAAM,OAAO,eAAe;GAAE;GAAM;EAAG,CAAC;EAC5D,SAAS;EACA;CACV,CAAA;AAEL"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_trace_filters = require("../../trace-filters-
|
|
2
|
+
const require_trace_filters = require("../../trace-filters-a0N9bf52.cjs");
|
|
3
3
|
const require_domains_logs_log_filters = require("../logs/log-filters.cjs.js");
|
|
4
4
|
// src/domains/metrics/drilldown.ts
|
|
5
5
|
/** Map the metrics date preset (`24h`, `3d`, …) to the equivalent traces /
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as TRACE_ROOT_ENTITY_TYPE_PARAM, T as TRACE_STATUS_PARAM, a as TRACE_DATE_FROM_PARAM, c as TRACE_DATE_TO_PARAM, d as TRACE_FILTER_GROUP_PARAM, m as TRACE_LIST_MODE_PARAM, o as TRACE_DATE_PRESET_PARAM, x as TRACE_PROPERTY_FILTER_PARAM_BY_FIELD } from "../../trace-filters-
|
|
1
|
+
import { C as TRACE_ROOT_ENTITY_TYPE_PARAM, T as TRACE_STATUS_PARAM, a as TRACE_DATE_FROM_PARAM, c as TRACE_DATE_TO_PARAM, d as TRACE_FILTER_GROUP_PARAM, m as TRACE_LIST_MODE_PARAM, o as TRACE_DATE_PRESET_PARAM, x as TRACE_PROPERTY_FILTER_PARAM_BY_FIELD } from "../../trace-filters-CaWkw779.js";
|
|
2
2
|
import { LOGS_DATE_FROM_PARAM, LOGS_DATE_PRESET_PARAM, LOGS_DATE_TO_PARAM, LOGS_PROPERTY_FILTER_PARAM_BY_FIELD, LOGS_ROOT_ENTITY_TYPE_PARAM } from "../logs/log-filters.es.js";
|
|
3
3
|
// src/domains/metrics/drilldown.ts
|
|
4
4
|
/** Map the metrics date preset (`24h`, `3d`, …) to the equivalent traces /
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_trace_filters = require("../../trace-filters-
|
|
2
|
+
const require_trace_filters = require("../../trace-filters-a0N9bf52.cjs");
|
|
3
3
|
let lucide_react = require("lucide-react");
|
|
4
4
|
// src/domains/metrics/metrics-filters.ts
|
|
5
5
|
/** Primitive type options — matches the traces filter vocabulary. */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Q as traceFilterFieldIcon, Z as traceFilterFieldColor } from "../../trace-filters-
|
|
1
|
+
import { Q as traceFilterFieldIcon, Z as traceFilterFieldColor } from "../../trace-filters-CaWkw779.js";
|
|
2
2
|
import { CloudIcon, CpuIcon } from "lucide-react";
|
|
3
3
|
// src/domains/metrics/metrics-filters.ts
|
|
4
4
|
/** Primitive type options — matches the traces filter vocabulary. */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_trace_filters = require("../../../trace-filters-
|
|
2
|
+
const require_trace_filters = require("../../../trace-filters-a0N9bf52.cjs");
|
|
3
3
|
const require_domains_traces_components_traces_explorer_traces_explorer_actions = require("../../traces/components/traces-explorer/traces-explorer-actions.cjs.js");
|
|
4
4
|
const require_domains_observability_observability_list_url_state = require("../observability-list-url-state.cjs.js");
|
|
5
5
|
const require_domains_observability_list_polling = require("../list-polling.cjs.js");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ft as resolveTraceQueryTimeRange } from "../../../trace-filters-
|
|
1
|
+
import { ft as resolveTraceQueryTimeRange } from "../../../trace-filters-CaWkw779.js";
|
|
2
2
|
import { resolveTracesDateWindow } from "../../traces/components/traces-explorer/traces-explorer-actions.es.js";
|
|
3
3
|
import { OBSERVABILITY_LIST_DEFAULT_DATE_PRESET, OBSERVABILITY_LIST_SORT_FIELDS, readObservabilityListDates, readObservabilityListFilters, readObservabilityListSort, writeObservabilityListDates, writeObservabilityListFilters, writeObservabilityListSort } from "../observability-list-url-state.es.js";
|
|
4
4
|
import { recoveryRefetchInterval } from "../list-polling.es.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_trace_filters = require("../../trace-filters-
|
|
2
|
+
const require_trace_filters = require("../../trace-filters-a0N9bf52.cjs");
|
|
3
3
|
const require_domains_traces_components_traces_explorer_traces_explorer_actions = require("../traces/components/traces-explorer/traces-explorer-actions.cjs.js");
|
|
4
4
|
const require_sort_use_url_sort = require("../../sort/use-url-sort.cjs.js");
|
|
5
5
|
// src/domains/observability/observability-list-url-state.ts
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $ as traceFilterOperatorParam, B as getTraceFilterGroups, X as serializeTraceFilterGroup, a as TRACE_DATE_FROM_PARAM, c as TRACE_DATE_TO_PARAM, d as TRACE_FILTER_GROUP_PARAM, dt as isTraceFilterOperatorId, et as traceFilterTokenOperator, o as TRACE_DATE_PRESET_PARAM, s as TRACE_DATE_PRESET_VALUES } from "../../trace-filters-
|
|
1
|
+
import { $ as traceFilterOperatorParam, B as getTraceFilterGroups, X as serializeTraceFilterGroup, a as TRACE_DATE_FROM_PARAM, c as TRACE_DATE_TO_PARAM, d as TRACE_FILTER_GROUP_PARAM, dt as isTraceFilterOperatorId, et as traceFilterTokenOperator, o as TRACE_DATE_PRESET_PARAM, s as TRACE_DATE_PRESET_VALUES } from "../../trace-filters-CaWkw779.js";
|
|
2
2
|
import { DEFAULT_TRACES_FILTERS } from "../traces/components/traces-explorer/traces-explorer-actions.es.js";
|
|
3
3
|
import { SORT_KEY_PARAM, readUrlSort } from "../../sort/use-url-sort.es.js";
|
|
4
4
|
// src/domains/observability/observability-list-url-state.ts
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_trace_filters = require("../../trace-filters-
|
|
2
|
+
const require_trace_filters = require("../../trace-filters-a0N9bf52.cjs");
|
|
3
3
|
const require_domains_traces_components_traces_explorer_traces_explorer_actions = require("../traces/components/traces-explorer/traces-explorer-actions.cjs.js");
|
|
4
4
|
const require_sort_use_url_sort = require("../../sort/use-url-sort.cjs.js");
|
|
5
5
|
const require_domains_observability_observability_list_url_state = require("./observability-list-url-state.cjs.js");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A as TRACE_TAGS_OPERATORS, B as getTraceFilterGroups, D as TRACE_STRING_OPERATORS, I as createTraceFilterBarFields, M as applyTracePropertyFilterTokens, O as TRACE_SYNTHETIC_FILTER_FIELD_IDS, V as getTracePropertyFilterTokens, W as isTraceMetadataFieldId, a as TRACE_DATE_FROM_PARAM, b as TRACE_PROPERTY_FILTER_FIELD_IDS, c as TRACE_DATE_TO_PARAM, dt as isTraceFilterOperatorId, h as TRACE_LIST_MODE_VALUES, m as TRACE_LIST_MODE_PARAM, o as TRACE_DATE_PRESET_PARAM, s as TRACE_DATE_PRESET_VALUES, ut as isTraceFilterGroup } from "../../trace-filters-
|
|
1
|
+
import { A as TRACE_TAGS_OPERATORS, B as getTraceFilterGroups, D as TRACE_STRING_OPERATORS, I as createTraceFilterBarFields, M as applyTracePropertyFilterTokens, O as TRACE_SYNTHETIC_FILTER_FIELD_IDS, V as getTracePropertyFilterTokens, W as isTraceMetadataFieldId, a as TRACE_DATE_FROM_PARAM, b as TRACE_PROPERTY_FILTER_FIELD_IDS, c as TRACE_DATE_TO_PARAM, dt as isTraceFilterOperatorId, h as TRACE_LIST_MODE_VALUES, m as TRACE_LIST_MODE_PARAM, o as TRACE_DATE_PRESET_PARAM, s as TRACE_DATE_PRESET_VALUES, ut as isTraceFilterGroup } from "../../trace-filters-CaWkw779.js";
|
|
2
2
|
import { DEFAULT_TRACES_FILTERS, TRACES_SORT_FIELDS } from "../traces/components/traces-explorer/traces-explorer-actions.es.js";
|
|
3
3
|
import { SORT_KEY_PARAM, readUrlSort } from "../../sort/use-url-sort.es.js";
|
|
4
4
|
import { OBSERVABILITY_LIST_DEFAULT_DATE_PRESET, OBSERVABILITY_LIST_SORT_FIELDS, SPAN_LIST_SORT_FIELDS, readObservabilityListFilters, writeObservabilityListFilters } from "./observability-list-url-state.es.js";
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_observability_saved_views = require("../../../observability-saved-views-
|
|
2
|
+
const require_observability_saved_views = require("../../../observability-saved-views-BAzxxoAr.cjs");
|
|
3
3
|
exports.ObservabilitySavedViews = require_observability_saved_views.ObservabilitySavedViews;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { t as ObservabilitySavedViews } from "../../../observability-saved-views-
|
|
1
|
+
export { t as ObservabilitySavedViews } from "../../../observability-saved-views-BBam8Fr5.js";
|
|
@@ -3,12 +3,13 @@ const require_domains_observability_saved_views_saved_views_source = require("./
|
|
|
3
3
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
4
4
|
// src/domains/observability/saved-views/saved-views-provider.tsx
|
|
5
5
|
/** Turns saved views on for the observability pages below it. Without it, the pages show none. */
|
|
6
|
-
function SavedViewsProvider({ source, queryKeyScope = [], canEdit, children }) {
|
|
6
|
+
function SavedViewsProvider({ source, queryKeyScope = [], canEdit, canCreate, children }) {
|
|
7
7
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_domains_observability_saved_views_saved_views_source.SavedViewsContext.Provider, {
|
|
8
8
|
value: {
|
|
9
9
|
source,
|
|
10
10
|
queryKeyScope,
|
|
11
|
-
canEdit
|
|
11
|
+
canEdit,
|
|
12
|
+
canCreate
|
|
12
13
|
},
|
|
13
14
|
children
|
|
14
15
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"saved-views-provider.cjs.js","names":["SavedViewsContext"],"sources":["../../../../src/domains/observability/saved-views/saved-views-provider.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport { SavedViewsContext } from './saved-views-source';\nimport type { SavedViewRecord, SavedViewsSource } from './saved-views-source';\n\nexport type SavedViewsProviderProps = {\n source: SavedViewsSource;\n /** Keeps the cached views of one scope (e.g. `['project', projectId]`) apart from another's. */\n queryKeyScope?: readonly unknown[];\n /**\n * Whether a view can be renamed, deleted or overwritten here, e.g. `view => view.scope !== 'org'` where\n * org-wide views are read-only. Read-only views can still be applied and duplicated. Defaults to all.\n */\n canEdit?: (view: SavedViewRecord) => boolean;\n children: ReactNode;\n};\n\n/** Turns saved views on for the observability pages below it. Without it, the pages show none. */\nexport function SavedViewsProvider({
|
|
1
|
+
{"version":3,"file":"saved-views-provider.cjs.js","names":["SavedViewsContext"],"sources":["../../../../src/domains/observability/saved-views/saved-views-provider.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport { SavedViewsContext } from './saved-views-source';\nimport type { SavedViewRecord, SavedViewsSource } from './saved-views-source';\n\nexport type SavedViewsProviderProps = {\n source: SavedViewsSource;\n /** Keeps the cached views of one scope (e.g. `['project', projectId]`) apart from another's. */\n queryKeyScope?: readonly unknown[];\n /**\n * Whether a view can be renamed, deleted or overwritten here, e.g. `view => view.scope !== 'org'` where\n * org-wide views are read-only. Read-only views can still be applied and duplicated. Defaults to all.\n */\n canEdit?: (view: SavedViewRecord) => boolean;\n /**\n * Whether new views can be saved here (save as new view, duplicate), e.g. `false` for a user who may only\n * read views. With `canEdit={() => false}` the views can only be applied. Defaults to true.\n */\n canCreate?: boolean;\n children: ReactNode;\n};\n\n/** Turns saved views on for the observability pages below it. Without it, the pages show none. */\nexport function SavedViewsProvider({\n source,\n queryKeyScope = [],\n canEdit,\n canCreate,\n children,\n}: SavedViewsProviderProps) {\n return (\n <SavedViewsContext.Provider value={{ source, queryKeyScope, canEdit, canCreate }}>\n {children}\n </SavedViewsContext.Provider>\n );\n}\n"],"mappings":";;;;;AAsBA,SAAgB,mBAAmB,EACjC,QACA,gBAAgB,CAAC,GACjB,SACA,WACA,YAC0B;CAC1B,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACA,6DAAAA,kBAAkB,UAAnB;EAA4B,OAAO;GAAE;GAAQ;GAAe;GAAS;EAAU;EAC5E;CACyB,CAAA;AAEhC"}
|
|
@@ -2,12 +2,13 @@ import { SavedViewsContext } from "./saved-views-source.es.js";
|
|
|
2
2
|
import { jsx } from "react/jsx-runtime";
|
|
3
3
|
// src/domains/observability/saved-views/saved-views-provider.tsx
|
|
4
4
|
/** Turns saved views on for the observability pages below it. Without it, the pages show none. */
|
|
5
|
-
function SavedViewsProvider({ source, queryKeyScope = [], canEdit, children }) {
|
|
5
|
+
function SavedViewsProvider({ source, queryKeyScope = [], canEdit, canCreate, children }) {
|
|
6
6
|
return /* @__PURE__ */ jsx(SavedViewsContext.Provider, {
|
|
7
7
|
value: {
|
|
8
8
|
source,
|
|
9
9
|
queryKeyScope,
|
|
10
|
-
canEdit
|
|
10
|
+
canEdit,
|
|
11
|
+
canCreate
|
|
11
12
|
},
|
|
12
13
|
children
|
|
13
14
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"saved-views-provider.es.js","names":[],"sources":["../../../../src/domains/observability/saved-views/saved-views-provider.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport { SavedViewsContext } from './saved-views-source';\nimport type { SavedViewRecord, SavedViewsSource } from './saved-views-source';\n\nexport type SavedViewsProviderProps = {\n source: SavedViewsSource;\n /** Keeps the cached views of one scope (e.g. `['project', projectId]`) apart from another's. */\n queryKeyScope?: readonly unknown[];\n /**\n * Whether a view can be renamed, deleted or overwritten here, e.g. `view => view.scope !== 'org'` where\n * org-wide views are read-only. Read-only views can still be applied and duplicated. Defaults to all.\n */\n canEdit?: (view: SavedViewRecord) => boolean;\n children: ReactNode;\n};\n\n/** Turns saved views on for the observability pages below it. Without it, the pages show none. */\nexport function SavedViewsProvider({
|
|
1
|
+
{"version":3,"file":"saved-views-provider.es.js","names":[],"sources":["../../../../src/domains/observability/saved-views/saved-views-provider.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport { SavedViewsContext } from './saved-views-source';\nimport type { SavedViewRecord, SavedViewsSource } from './saved-views-source';\n\nexport type SavedViewsProviderProps = {\n source: SavedViewsSource;\n /** Keeps the cached views of one scope (e.g. `['project', projectId]`) apart from another's. */\n queryKeyScope?: readonly unknown[];\n /**\n * Whether a view can be renamed, deleted or overwritten here, e.g. `view => view.scope !== 'org'` where\n * org-wide views are read-only. Read-only views can still be applied and duplicated. Defaults to all.\n */\n canEdit?: (view: SavedViewRecord) => boolean;\n /**\n * Whether new views can be saved here (save as new view, duplicate), e.g. `false` for a user who may only\n * read views. With `canEdit={() => false}` the views can only be applied. Defaults to true.\n */\n canCreate?: boolean;\n children: ReactNode;\n};\n\n/** Turns saved views on for the observability pages below it. Without it, the pages show none. */\nexport function SavedViewsProvider({\n source,\n queryKeyScope = [],\n canEdit,\n canCreate,\n children,\n}: SavedViewsProviderProps) {\n return (\n <SavedViewsContext.Provider value={{ source, queryKeyScope, canEdit, canCreate }}>\n {children}\n </SavedViewsContext.Provider>\n );\n}\n"],"mappings":";;;;AAsBA,SAAgB,mBAAmB,EACjC,QACA,gBAAgB,CAAC,GACjB,SACA,WACA,YAC0B;CAC1B,OACE,oBAAC,kBAAkB,UAAnB;EAA4B,OAAO;GAAE;GAAQ;GAAe;GAAS;EAAU;EAC5E;CACyB,CAAA;AAEhC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"saved-views-source.cjs.js","names":["createContext","useContext"],"sources":["../../../../src/domains/observability/saved-views/saved-views-source.ts"],"sourcesContent":["import type { SavedViewPage, SavedViewState } from '@mastra/core/storage';\nimport { createContext, useContext } from 'react';\n\n/** A saved view as the host stores it. */\nexport type SavedViewRecord = {\n id: string;\n name: string;\n state: SavedViewState;\n updatedAt: string;\n /** `org`: shared by every project of the organization. Omitted: saved where it is listed. */\n scope?: 'org' | 'project';\n};\n\n/**\n * Where saved views are stored. The host supplies it (e.g. backed by its API), so the observability\n * pages show saved views only where the host supports them.\n */\nexport type SavedViewsSource = {\n /** The views of one page, newest-updated first. */\n list: (page: SavedViewPage) => Promise<SavedViewRecord[]>;\n /** Rejects with `SavedViewNameTakenError` when the name is already used. */\n create: (input: { name: string; state: SavedViewState }) => Promise<SavedViewRecord>;\n /** Rejects with `SavedViewNameTakenError` when the new name is already used. */\n update: (id: string, patch: { name?: string; state?: SavedViewState }) => Promise<SavedViewRecord>;\n remove: (id: string) => Promise<void>;\n};\n\n/** Thrown by a `SavedViewsSource` when a view with the same name already exists (e.g. on an HTTP 409). */\nexport class SavedViewNameTakenError extends Error {\n constructor(message = 'A saved view with this name already exists') {\n super(message);\n this.name = 'SavedViewNameTakenError';\n }\n}\n\nexport type SavedViewsContextValue = {\n source: SavedViewsSource;\n queryKeyScope: readonly unknown[];\n canEdit?: (view: SavedViewRecord) => boolean;\n};\n\nexport const SavedViewsContext = createContext<SavedViewsContextValue | undefined>(undefined);\n\nexport const useSavedViewsSource = () => useContext(SavedViewsContext);\n\nexport const savedViewsQueryKey = (queryKeyScope: readonly unknown[], page: SavedViewPage) => [\n 'saved-views',\n ...queryKeyScope,\n page,\n];\n"],"mappings":";;;;AA4BA,IAAa,0BAAb,cAA6C,MAAM;CACjD,YAAY,UAAU,8CAA8C;EAClE,MAAM,OAAO;EACb,KAAK,OAAO;CACd;AACF;
|
|
1
|
+
{"version":3,"file":"saved-views-source.cjs.js","names":["createContext","useContext"],"sources":["../../../../src/domains/observability/saved-views/saved-views-source.ts"],"sourcesContent":["import type { SavedViewPage, SavedViewState } from '@mastra/core/storage';\nimport { createContext, useContext } from 'react';\n\n/** A saved view as the host stores it. */\nexport type SavedViewRecord = {\n id: string;\n name: string;\n state: SavedViewState;\n updatedAt: string;\n /** `org`: shared by every project of the organization. Omitted: saved where it is listed. */\n scope?: 'org' | 'project';\n};\n\n/**\n * Where saved views are stored. The host supplies it (e.g. backed by its API), so the observability\n * pages show saved views only where the host supports them.\n */\nexport type SavedViewsSource = {\n /** The views of one page, newest-updated first. */\n list: (page: SavedViewPage) => Promise<SavedViewRecord[]>;\n /** Rejects with `SavedViewNameTakenError` when the name is already used. */\n create: (input: { name: string; state: SavedViewState }) => Promise<SavedViewRecord>;\n /** Rejects with `SavedViewNameTakenError` when the new name is already used. */\n update: (id: string, patch: { name?: string; state?: SavedViewState }) => Promise<SavedViewRecord>;\n remove: (id: string) => Promise<void>;\n};\n\n/** Thrown by a `SavedViewsSource` when a view with the same name already exists (e.g. on an HTTP 409). */\nexport class SavedViewNameTakenError extends Error {\n constructor(message = 'A saved view with this name already exists') {\n super(message);\n this.name = 'SavedViewNameTakenError';\n }\n}\n\nexport type SavedViewsContextValue = {\n source: SavedViewsSource;\n queryKeyScope: readonly unknown[];\n canEdit?: (view: SavedViewRecord) => boolean;\n canCreate?: boolean;\n};\n\nexport const SavedViewsContext = createContext<SavedViewsContextValue | undefined>(undefined);\n\nexport const useSavedViewsSource = () => useContext(SavedViewsContext);\n\nexport const savedViewsQueryKey = (queryKeyScope: readonly unknown[], page: SavedViewPage) => [\n 'saved-views',\n ...queryKeyScope,\n page,\n];\n"],"mappings":";;;;AA4BA,IAAa,0BAAb,cAA6C,MAAM;CACjD,YAAY,UAAU,8CAA8C;EAClE,MAAM,OAAO;EACb,KAAK,OAAO;CACd;AACF;AASA,IAAa,qBAAA,GAAoBA,MAAAA,cAAAA,CAAkD,KAAA,CAAS;AAE5F,IAAa,6BAAA,GAA4BC,MAAAA,WAAAA,CAAW,iBAAiB;AAErE,IAAa,sBAAsB,eAAmC,SAAwB;CAC5F;CACA,GAAG;CACH;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"saved-views-source.es.js","names":[],"sources":["../../../../src/domains/observability/saved-views/saved-views-source.ts"],"sourcesContent":["import type { SavedViewPage, SavedViewState } from '@mastra/core/storage';\nimport { createContext, useContext } from 'react';\n\n/** A saved view as the host stores it. */\nexport type SavedViewRecord = {\n id: string;\n name: string;\n state: SavedViewState;\n updatedAt: string;\n /** `org`: shared by every project of the organization. Omitted: saved where it is listed. */\n scope?: 'org' | 'project';\n};\n\n/**\n * Where saved views are stored. The host supplies it (e.g. backed by its API), so the observability\n * pages show saved views only where the host supports them.\n */\nexport type SavedViewsSource = {\n /** The views of one page, newest-updated first. */\n list: (page: SavedViewPage) => Promise<SavedViewRecord[]>;\n /** Rejects with `SavedViewNameTakenError` when the name is already used. */\n create: (input: { name: string; state: SavedViewState }) => Promise<SavedViewRecord>;\n /** Rejects with `SavedViewNameTakenError` when the new name is already used. */\n update: (id: string, patch: { name?: string; state?: SavedViewState }) => Promise<SavedViewRecord>;\n remove: (id: string) => Promise<void>;\n};\n\n/** Thrown by a `SavedViewsSource` when a view with the same name already exists (e.g. on an HTTP 409). */\nexport class SavedViewNameTakenError extends Error {\n constructor(message = 'A saved view with this name already exists') {\n super(message);\n this.name = 'SavedViewNameTakenError';\n }\n}\n\nexport type SavedViewsContextValue = {\n source: SavedViewsSource;\n queryKeyScope: readonly unknown[];\n canEdit?: (view: SavedViewRecord) => boolean;\n};\n\nexport const SavedViewsContext = createContext<SavedViewsContextValue | undefined>(undefined);\n\nexport const useSavedViewsSource = () => useContext(SavedViewsContext);\n\nexport const savedViewsQueryKey = (queryKeyScope: readonly unknown[], page: SavedViewPage) => [\n 'saved-views',\n ...queryKeyScope,\n page,\n];\n"],"mappings":";;;AA4BA,IAAa,0BAAb,cAA6C,MAAM;CACjD,YAAY,UAAU,8CAA8C;EAClE,MAAM,OAAO;EACb,KAAK,OAAO;CACd;AACF;
|
|
1
|
+
{"version":3,"file":"saved-views-source.es.js","names":[],"sources":["../../../../src/domains/observability/saved-views/saved-views-source.ts"],"sourcesContent":["import type { SavedViewPage, SavedViewState } from '@mastra/core/storage';\nimport { createContext, useContext } from 'react';\n\n/** A saved view as the host stores it. */\nexport type SavedViewRecord = {\n id: string;\n name: string;\n state: SavedViewState;\n updatedAt: string;\n /** `org`: shared by every project of the organization. Omitted: saved where it is listed. */\n scope?: 'org' | 'project';\n};\n\n/**\n * Where saved views are stored. The host supplies it (e.g. backed by its API), so the observability\n * pages show saved views only where the host supports them.\n */\nexport type SavedViewsSource = {\n /** The views of one page, newest-updated first. */\n list: (page: SavedViewPage) => Promise<SavedViewRecord[]>;\n /** Rejects with `SavedViewNameTakenError` when the name is already used. */\n create: (input: { name: string; state: SavedViewState }) => Promise<SavedViewRecord>;\n /** Rejects with `SavedViewNameTakenError` when the new name is already used. */\n update: (id: string, patch: { name?: string; state?: SavedViewState }) => Promise<SavedViewRecord>;\n remove: (id: string) => Promise<void>;\n};\n\n/** Thrown by a `SavedViewsSource` when a view with the same name already exists (e.g. on an HTTP 409). */\nexport class SavedViewNameTakenError extends Error {\n constructor(message = 'A saved view with this name already exists') {\n super(message);\n this.name = 'SavedViewNameTakenError';\n }\n}\n\nexport type SavedViewsContextValue = {\n source: SavedViewsSource;\n queryKeyScope: readonly unknown[];\n canEdit?: (view: SavedViewRecord) => boolean;\n canCreate?: boolean;\n};\n\nexport const SavedViewsContext = createContext<SavedViewsContextValue | undefined>(undefined);\n\nexport const useSavedViewsSource = () => useContext(SavedViewsContext);\n\nexport const savedViewsQueryKey = (queryKeyScope: readonly unknown[], page: SavedViewPage) => [\n 'saved-views',\n ...queryKeyScope,\n page,\n];\n"],"mappings":";;;AA4BA,IAAa,0BAAb,cAA6C,MAAM;CACjD,YAAY,UAAU,8CAA8C;EAClE,MAAM,OAAO;EACb,KAAK,OAAO;CACd;AACF;AASA,IAAa,oBAAoB,cAAkD,KAAA,CAAS;AAE5F,IAAa,4BAA4B,WAAW,iBAAiB;AAErE,IAAa,sBAAsB,eAAmC,SAAwB;CAC5F;CACA,GAAG;CACH;AACF"}
|
|
@@ -60,7 +60,7 @@ var validName = (name) => {
|
|
|
60
60
|
* the draft: picking a view writes its state to the URL (and its columns to the column picker), and
|
|
61
61
|
* the view shows unsaved changes while the URL differs from it.
|
|
62
62
|
*/
|
|
63
|
-
function useHostedSavedViews({ page, source, queryKeyScope, searchParams, setSearchParams, columns, defaultDatePreset, canEdit = () => true }) {
|
|
63
|
+
function useHostedSavedViews({ page, source, queryKeyScope, searchParams, setSearchParams, columns, defaultDatePreset, canEdit = () => true, canCreate = true }) {
|
|
64
64
|
const queryClient = (0, _tanstack_react_query.useQueryClient)();
|
|
65
65
|
const queryKey = require_domains_observability_saved_views_saved_views_source.savedViewsQueryKey(queryKeyScope, page);
|
|
66
66
|
const { data: records = [] } = (0, _tanstack_react_query.useQuery)({
|
|
@@ -151,6 +151,7 @@ function useHostedSavedViews({ page, source, queryKeyScope, searchParams, setSea
|
|
|
151
151
|
applied: draft ?? activeView,
|
|
152
152
|
select,
|
|
153
153
|
create: () => {
|
|
154
|
+
if (!canCreate) return;
|
|
154
155
|
setError(void 0);
|
|
155
156
|
setCreatingName(NEW_VIEW_NAME);
|
|
156
157
|
},
|
|
@@ -201,7 +202,7 @@ function useHostedSavedViews({ page, source, queryKeyScope, searchParams, setSea
|
|
|
201
202
|
},
|
|
202
203
|
duplicate: async (viewId) => {
|
|
203
204
|
const original = records.find((item) => item.id === viewId);
|
|
204
|
-
if (!original || pending || !fitsSizeLimit(original.state)) return;
|
|
205
|
+
if (!canCreate || !original || pending || !fitsSizeLimit(original.state)) return;
|
|
205
206
|
const name = validName(`${original.name} copy`) ?? original.name;
|
|
206
207
|
const choice = choiceRef.current;
|
|
207
208
|
const copy = await run(() => source.create({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-hosted-saved-views.cjs.js","names":["SavedViewNameTakenError","savedViewNameSchema","useQueryClient","savedViewsQueryKey","useQuery","useState","useRef","savedViewFromSearchParams","applySavedView"],"sources":["../../../../src/domains/observability/saved-views/use-hosted-saved-views.ts"],"sourcesContent":["import type { SavedViewPage, SavedViewState } from '@mastra/core/storage';\nimport { useQuery, useQueryClient } from '@tanstack/react-query';\nimport { useRef, useState } from 'react';\nimport { applySavedView, savedViewFromSearchParams } from '../saved-view-state';\nimport { SavedViewNameTakenError, savedViewsQueryKey } from './saved-views-source';\nimport type { SavedViewRecord, SavedViewsContextValue } from './saved-views-source';\nimport type { TraceColumnPreferences } from '@/domains/traces/trace-list-columns';\nimport type { FilterBarItem } from '@/ds/components/FilterBar/types';\nimport { savedViewNameSchema } from '@/ds/components/SavedViews/saved-view-schema';\nimport type { SavedView } from '@/ds/components/SavedViews/saved-view-schema';\nimport type { SavedViewDraft, SavedViewsController } from '@/ds/components/SavedViews/use-saved-views';\nimport type { SetURLSearchParamsLike } from '@/lib/sort/use-url-sort';\n\n/** Same limit as the saved view schema in `@mastra/core`, checked before a request is made. */\nexport const SAVED_VIEW_STATE_MAX_BYTES = 16 * 1024;\n\nconst NEW_VIEW_NAME = 'Untitled view';\nexport const SAVED_VIEW_TOO_LARGE_MESSAGE =\n 'This view is too large to save (16 KiB max). Remove some filters or columns.';\nconst SAVE_FAILED_MESSAGE = 'Could not save the view. Try again.';\nconst DELETE_FAILED_MESSAGE = 'Could not delete the view. Try again.';\n\n/** A view's state, and for a stored view its record. */\nexport type HostedSavedViewSettings = { state: SavedViewState; record?: SavedViewRecord };\n\nexport type SavedViewColumnsControl = {\n preferences: TraceColumnPreferences;\n setPreferences: (next: TraceColumnPreferences) => void;\n /** Back to the page's default columns, when the page default is picked. */\n resetColumns: () => void;\n};\n\nexport type UseHostedSavedViewsArgs = SavedViewsContextValue & {\n page: SavedViewPage;\n searchParams: URLSearchParams;\n setSearchParams: SetURLSearchParamsLike;\n /** The page's column picker; omitted on pages with fixed columns. */\n columns?: SavedViewColumnsControl;\n /** The range the page shows when the URL names none, when the host's differs from the page's own. */\n defaultDatePreset?: string;\n};\n\nconst stateBytes = (state: SavedViewState) => new TextEncoder().encode(JSON.stringify(state)).length;\n\n/** The filters a view's hover summary lists: its top-level filters (groups are counted separately). */\nfunction summaryFilters(state: SavedViewState): FilterBarItem[] {\n return state.filters.flatMap((node, index) =>\n 'nodes' in node\n ? []\n : [\n {\n id: `${index}`,\n fieldId: node.fieldId,\n operatorId: node.operatorId ?? (Array.isArray(node.value) ? 'in' : 'is'),\n value: node.value,\n },\n ],\n );\n}\n\n/** The parts of a view that compare equal when they set the same URL and columns. */\nfunction comparable(state: SavedViewState, withColumns: boolean): string {\n const { filters, dateRange, sort, options, columns } = state;\n return JSON.stringify({ filters, dateRange, sort, options, columns: withColumns ? columns : undefined });\n}\n\nfunction errorMessage(error: unknown, name: string): string {\n return error instanceof SavedViewNameTakenError ? `A view named \"${name}\" already exists.` : SAVE_FAILED_MESSAGE;\n}\n\n/** What the user picked: a saved view, or the page default when `id` is undefined. */\ntype Picked = { id: string | undefined };\n\n/** The unsaved state shown in the bar: a view being created, or edits to the active view. */\nfunction draftOf(\n current: SavedViewState,\n creatingName: string | undefined,\n editedRecord: SavedViewRecord | undefined,\n): SavedViewDraft<HostedSavedViewSettings> | undefined {\n const unsaved = { filters: summaryFilters(current), settings: { state: current } };\n if (creatingName !== undefined) return { name: creatingName, ...unsaved };\n if (editedRecord) return { viewId: editedRecord.id, name: editedRecord.name, ...unsaved };\n return undefined;\n}\n\nconst validName = (name: string) => {\n const parsed = savedViewNameSchema.safeParse(name);\n return parsed.success ? parsed.data : undefined;\n};\n\n/**\n * Saved views of one observability page, stored by the host's `SavedViewsSource`. The page URL is\n * the draft: picking a view writes its state to the URL (and its columns to the column picker), and\n * the view shows unsaved changes while the URL differs from it.\n */\nexport function useHostedSavedViews({\n page,\n source,\n queryKeyScope,\n searchParams,\n setSearchParams,\n columns,\n defaultDatePreset,\n canEdit = () => true,\n}: UseHostedSavedViewsArgs): SavedViewsController<HostedSavedViewSettings> {\n const queryClient = useQueryClient();\n const queryKey = savedViewsQueryKey(queryKeyScope, page);\n const { data: records = [] } = useQuery({ queryKey, queryFn: () => source.list(page) });\n\n // Nothing picked yet: the view matching the URL (e.g. after a reload) is active.\n // `{ id: undefined }`: the page default was picked.\n const [picked, setPicked] = useState<Picked>();\n const [creatingName, setCreatingName] = useState<string>();\n const [error, setError] = useState<string>();\n const [pending, setPending] = useState(false);\n // Bumped whenever the user picks or leaves a view, so a request that settles afterwards does not\n // switch the page back to the view it created.\n const choiceRef = useRef(0);\n // The search params a view was applied over. A host can render the new URL a render after the\n // navigation that set it (a data router does), so until it does the old URL says nothing about\n // whether the view has unsaved changes.\n const [appliedOver, setAppliedOver] = useState<URLSearchParams>();\n\n const current = savedViewFromSearchParams(page, searchParams, { columns: columns?.preferences });\n\n // A view as the page would hold it once applied, so a view saved by an older page (or with stale\n // parts) still compares equal to the URL it sets.\n const matchesUrl = (state: SavedViewState) => {\n const applied = applySavedView(state, new URLSearchParams(), { defaultDatePreset });\n const normalized = savedViewFromSearchParams(page, applied.params, { columns: applied.columns });\n const withColumns = applied.columns !== undefined;\n return comparable(normalized, withColumns) === comparable(current, withColumns);\n };\n\n const activeRecord = picked\n ? records.find(record => record.id === picked.id)\n : records.find(record => matchesUrl(record.state));\n const activeMatches = activeRecord !== undefined && matchesUrl(activeRecord.state);\n const awaitingUrl = appliedOver !== undefined && appliedOver === searchParams && !activeMatches;\n if (appliedOver !== undefined && !awaitingUrl) setAppliedOver(undefined);\n const activeUnsaved = activeRecord !== undefined && !activeMatches && !awaitingUrl;\n\n const toView = (record: SavedViewRecord): SavedView<HostedSavedViewSettings> => ({\n id: record.id,\n name: record.name,\n filters: summaryFilters(record.state),\n settings: { state: record.state, record },\n });\n const views = records.map(toView);\n const activeView = activeRecord ? toView(activeRecord) : undefined;\n\n const draft = draftOf(current, creatingName, activeUnsaved ? activeRecord : undefined);\n\n const applyState = (state: SavedViewState) => {\n const applied = applySavedView(state, searchParams, { defaultDatePreset });\n setAppliedOver(searchParams);\n setSearchParams(previous => applySavedView(state, previous, { defaultDatePreset }).params);\n if (applied.columns && columns) columns.setPreferences(applied.columns);\n };\n\n const storeRecord = (record: SavedViewRecord) =>\n queryClient.setQueryData<SavedViewRecord[]>(queryKey, (list = []) =>\n list.some(item => item.id === record.id)\n ? list.map(item => (item.id === record.id ? record : item))\n : [record, ...list],\n );\n\n const run = async <T>(task: () => Promise<T>, onError: (error: unknown) => string): Promise<T | undefined> => {\n setPending(true);\n setError(undefined);\n try {\n return await task();\n } catch (cause) {\n setError(onError(cause));\n return undefined;\n } finally {\n setPending(false);\n void queryClient.invalidateQueries({ queryKey });\n }\n };\n\n const fitsSizeLimit = (state: SavedViewState) => {\n if (stateBytes(state) <= SAVED_VIEW_STATE_MAX_BYTES) return true;\n setError(SAVED_VIEW_TOO_LARGE_MESSAGE);\n return false;\n };\n\n const select = (viewId: string | undefined) => {\n choiceRef.current += 1;\n setCreatingName(undefined);\n setError(undefined);\n if (viewId === undefined) {\n setPicked({ id: undefined });\n applyState({ schemaVersion: 1, page, filters: [] });\n columns?.resetColumns();\n return;\n }\n const record = records.find(item => item.id === viewId);\n if (!record) return;\n setPicked({ id: record.id });\n applyState(record.state);\n };\n\n return {\n views,\n activeView,\n draft,\n unsaved: creatingName !== undefined || activeUnsaved,\n error,\n pending,\n applied: draft ?? activeView,\n select,\n create: () => {\n setError(undefined);\n setCreatingName(NEW_VIEW_NAME);\n },\n edit: viewId => {\n if (viewId !== activeRecord?.id) select(viewId);\n },\n change: ({ name }) => {\n if (name === undefined || creatingName === undefined) return;\n setError(undefined);\n setCreatingName(name);\n },\n save: async () => {\n if (pending || !fitsSizeLimit(current)) return;\n if (creatingName !== undefined) {\n const name = validName(creatingName) ?? NEW_VIEW_NAME;\n const choice = choiceRef.current;\n const record = await run(\n () => source.create({ name, state: current }),\n cause => errorMessage(cause, name),\n );\n if (!record) return;\n storeRecord(record);\n if (choice !== choiceRef.current) return;\n setCreatingName(undefined);\n setPicked({ id: record.id });\n return;\n }\n if (!activeRecord || !activeUnsaved || !canEdit(activeRecord)) return;\n const { id, name } = activeRecord;\n const record = await run(\n () => source.update(id, { state: current }),\n cause => errorMessage(cause, name),\n );\n if (record) storeRecord(record);\n },\n discard: () => {\n choiceRef.current += 1;\n setError(undefined);\n if (creatingName !== undefined) setCreatingName(undefined);\n else if (activeRecord) applyState(activeRecord.state);\n },\n rename: async (viewId, rawName) => {\n const name = validName(rawName);\n const record = records.find(item => item.id === viewId);\n if (!name || !record || pending || !canEdit(record)) return false;\n if (name === record.name) return true;\n const renamed = await run(\n () => source.update(viewId, { name }),\n cause => errorMessage(cause, name),\n );\n if (!renamed) return false;\n storeRecord(renamed);\n return true;\n },\n duplicate: async viewId => {\n const original = records.find(item => item.id === viewId);\n if (!original || pending || !fitsSizeLimit(original.state)) return;\n const name = validName(`${original.name} copy`) ?? original.name;\n const choice = choiceRef.current;\n const copy = await run(\n () => source.create({ name, state: original.state }),\n cause => errorMessage(cause, name),\n );\n if (!copy) return;\n storeRecord(copy);\n if (choice !== choiceRef.current) return;\n setCreatingName(undefined);\n setPicked({ id: copy.id });\n applyState(copy.state);\n },\n remove: async viewId => {\n const record = records.find(item => item.id === viewId);\n if (!record || pending || !canEdit(record)) return;\n choiceRef.current += 1;\n const removed = await run(\n async () => {\n await source.remove(viewId);\n return true;\n },\n () => DELETE_FAILED_MESSAGE,\n );\n if (!removed) return;\n queryClient.setQueryData<SavedViewRecord[]>(queryKey, (list = []) => list.filter(item => item.id !== viewId));\n // The page keeps its filters; the default tab is picked so the deleted view is not re-matched.\n if (activeRecord?.id === viewId) setPicked({ id: undefined });\n },\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"use-hosted-saved-views.cjs.js","names":["SavedViewNameTakenError","savedViewNameSchema","useQueryClient","savedViewsQueryKey","useQuery","useState","useRef","savedViewFromSearchParams","applySavedView"],"sources":["../../../../src/domains/observability/saved-views/use-hosted-saved-views.ts"],"sourcesContent":["import type { SavedViewPage, SavedViewState } from '@mastra/core/storage';\nimport { useQuery, useQueryClient } from '@tanstack/react-query';\nimport { useRef, useState } from 'react';\nimport { applySavedView, savedViewFromSearchParams } from '../saved-view-state';\nimport { SavedViewNameTakenError, savedViewsQueryKey } from './saved-views-source';\nimport type { SavedViewRecord, SavedViewsContextValue } from './saved-views-source';\nimport type { TraceColumnPreferences } from '@/domains/traces/trace-list-columns';\nimport type { FilterBarItem } from '@/ds/components/FilterBar/types';\nimport { savedViewNameSchema } from '@/ds/components/SavedViews/saved-view-schema';\nimport type { SavedView } from '@/ds/components/SavedViews/saved-view-schema';\nimport type { SavedViewDraft, SavedViewsController } from '@/ds/components/SavedViews/use-saved-views';\nimport type { SetURLSearchParamsLike } from '@/lib/sort/use-url-sort';\n\n/** Same limit as the saved view schema in `@mastra/core`, checked before a request is made. */\nexport const SAVED_VIEW_STATE_MAX_BYTES = 16 * 1024;\n\nconst NEW_VIEW_NAME = 'Untitled view';\nexport const SAVED_VIEW_TOO_LARGE_MESSAGE =\n 'This view is too large to save (16 KiB max). Remove some filters or columns.';\nconst SAVE_FAILED_MESSAGE = 'Could not save the view. Try again.';\nconst DELETE_FAILED_MESSAGE = 'Could not delete the view. Try again.';\n\n/** A view's state, and for a stored view its record. */\nexport type HostedSavedViewSettings = { state: SavedViewState; record?: SavedViewRecord };\n\nexport type SavedViewColumnsControl = {\n preferences: TraceColumnPreferences;\n setPreferences: (next: TraceColumnPreferences) => void;\n /** Back to the page's default columns, when the page default is picked. */\n resetColumns: () => void;\n};\n\nexport type UseHostedSavedViewsArgs = SavedViewsContextValue & {\n page: SavedViewPage;\n searchParams: URLSearchParams;\n setSearchParams: SetURLSearchParamsLike;\n /** The page's column picker; omitted on pages with fixed columns. */\n columns?: SavedViewColumnsControl;\n /** The range the page shows when the URL names none, when the host's differs from the page's own. */\n defaultDatePreset?: string;\n};\n\nconst stateBytes = (state: SavedViewState) => new TextEncoder().encode(JSON.stringify(state)).length;\n\n/** The filters a view's hover summary lists: its top-level filters (groups are counted separately). */\nfunction summaryFilters(state: SavedViewState): FilterBarItem[] {\n return state.filters.flatMap((node, index) =>\n 'nodes' in node\n ? []\n : [\n {\n id: `${index}`,\n fieldId: node.fieldId,\n operatorId: node.operatorId ?? (Array.isArray(node.value) ? 'in' : 'is'),\n value: node.value,\n },\n ],\n );\n}\n\n/** The parts of a view that compare equal when they set the same URL and columns. */\nfunction comparable(state: SavedViewState, withColumns: boolean): string {\n const { filters, dateRange, sort, options, columns } = state;\n return JSON.stringify({ filters, dateRange, sort, options, columns: withColumns ? columns : undefined });\n}\n\nfunction errorMessage(error: unknown, name: string): string {\n return error instanceof SavedViewNameTakenError ? `A view named \"${name}\" already exists.` : SAVE_FAILED_MESSAGE;\n}\n\n/** What the user picked: a saved view, or the page default when `id` is undefined. */\ntype Picked = { id: string | undefined };\n\n/** The unsaved state shown in the bar: a view being created, or edits to the active view. */\nfunction draftOf(\n current: SavedViewState,\n creatingName: string | undefined,\n editedRecord: SavedViewRecord | undefined,\n): SavedViewDraft<HostedSavedViewSettings> | undefined {\n const unsaved = { filters: summaryFilters(current), settings: { state: current } };\n if (creatingName !== undefined) return { name: creatingName, ...unsaved };\n if (editedRecord) return { viewId: editedRecord.id, name: editedRecord.name, ...unsaved };\n return undefined;\n}\n\nconst validName = (name: string) => {\n const parsed = savedViewNameSchema.safeParse(name);\n return parsed.success ? parsed.data : undefined;\n};\n\n/**\n * Saved views of one observability page, stored by the host's `SavedViewsSource`. The page URL is\n * the draft: picking a view writes its state to the URL (and its columns to the column picker), and\n * the view shows unsaved changes while the URL differs from it.\n */\nexport function useHostedSavedViews({\n page,\n source,\n queryKeyScope,\n searchParams,\n setSearchParams,\n columns,\n defaultDatePreset,\n canEdit = () => true,\n canCreate = true,\n}: UseHostedSavedViewsArgs): SavedViewsController<HostedSavedViewSettings> {\n const queryClient = useQueryClient();\n const queryKey = savedViewsQueryKey(queryKeyScope, page);\n const { data: records = [] } = useQuery({ queryKey, queryFn: () => source.list(page) });\n\n // Nothing picked yet: the view matching the URL (e.g. after a reload) is active.\n // `{ id: undefined }`: the page default was picked.\n const [picked, setPicked] = useState<Picked>();\n const [creatingName, setCreatingName] = useState<string>();\n const [error, setError] = useState<string>();\n const [pending, setPending] = useState(false);\n // Bumped whenever the user picks or leaves a view, so a request that settles afterwards does not\n // switch the page back to the view it created.\n const choiceRef = useRef(0);\n // The search params a view was applied over. A host can render the new URL a render after the\n // navigation that set it (a data router does), so until it does the old URL says nothing about\n // whether the view has unsaved changes.\n const [appliedOver, setAppliedOver] = useState<URLSearchParams>();\n\n const current = savedViewFromSearchParams(page, searchParams, { columns: columns?.preferences });\n\n // A view as the page would hold it once applied, so a view saved by an older page (or with stale\n // parts) still compares equal to the URL it sets.\n const matchesUrl = (state: SavedViewState) => {\n const applied = applySavedView(state, new URLSearchParams(), { defaultDatePreset });\n const normalized = savedViewFromSearchParams(page, applied.params, { columns: applied.columns });\n const withColumns = applied.columns !== undefined;\n return comparable(normalized, withColumns) === comparable(current, withColumns);\n };\n\n const activeRecord = picked\n ? records.find(record => record.id === picked.id)\n : records.find(record => matchesUrl(record.state));\n const activeMatches = activeRecord !== undefined && matchesUrl(activeRecord.state);\n const awaitingUrl = appliedOver !== undefined && appliedOver === searchParams && !activeMatches;\n if (appliedOver !== undefined && !awaitingUrl) setAppliedOver(undefined);\n const activeUnsaved = activeRecord !== undefined && !activeMatches && !awaitingUrl;\n\n const toView = (record: SavedViewRecord): SavedView<HostedSavedViewSettings> => ({\n id: record.id,\n name: record.name,\n filters: summaryFilters(record.state),\n settings: { state: record.state, record },\n });\n const views = records.map(toView);\n const activeView = activeRecord ? toView(activeRecord) : undefined;\n\n const draft = draftOf(current, creatingName, activeUnsaved ? activeRecord : undefined);\n\n const applyState = (state: SavedViewState) => {\n const applied = applySavedView(state, searchParams, { defaultDatePreset });\n setAppliedOver(searchParams);\n setSearchParams(previous => applySavedView(state, previous, { defaultDatePreset }).params);\n if (applied.columns && columns) columns.setPreferences(applied.columns);\n };\n\n const storeRecord = (record: SavedViewRecord) =>\n queryClient.setQueryData<SavedViewRecord[]>(queryKey, (list = []) =>\n list.some(item => item.id === record.id)\n ? list.map(item => (item.id === record.id ? record : item))\n : [record, ...list],\n );\n\n const run = async <T>(task: () => Promise<T>, onError: (error: unknown) => string): Promise<T | undefined> => {\n setPending(true);\n setError(undefined);\n try {\n return await task();\n } catch (cause) {\n setError(onError(cause));\n return undefined;\n } finally {\n setPending(false);\n void queryClient.invalidateQueries({ queryKey });\n }\n };\n\n const fitsSizeLimit = (state: SavedViewState) => {\n if (stateBytes(state) <= SAVED_VIEW_STATE_MAX_BYTES) return true;\n setError(SAVED_VIEW_TOO_LARGE_MESSAGE);\n return false;\n };\n\n const select = (viewId: string | undefined) => {\n choiceRef.current += 1;\n setCreatingName(undefined);\n setError(undefined);\n if (viewId === undefined) {\n setPicked({ id: undefined });\n applyState({ schemaVersion: 1, page, filters: [] });\n columns?.resetColumns();\n return;\n }\n const record = records.find(item => item.id === viewId);\n if (!record) return;\n setPicked({ id: record.id });\n applyState(record.state);\n };\n\n return {\n views,\n activeView,\n draft,\n unsaved: creatingName !== undefined || activeUnsaved,\n error,\n pending,\n applied: draft ?? activeView,\n select,\n create: () => {\n if (!canCreate) return;\n setError(undefined);\n setCreatingName(NEW_VIEW_NAME);\n },\n edit: viewId => {\n if (viewId !== activeRecord?.id) select(viewId);\n },\n change: ({ name }) => {\n if (name === undefined || creatingName === undefined) return;\n setError(undefined);\n setCreatingName(name);\n },\n save: async () => {\n if (pending || !fitsSizeLimit(current)) return;\n if (creatingName !== undefined) {\n const name = validName(creatingName) ?? NEW_VIEW_NAME;\n const choice = choiceRef.current;\n const record = await run(\n () => source.create({ name, state: current }),\n cause => errorMessage(cause, name),\n );\n if (!record) return;\n storeRecord(record);\n if (choice !== choiceRef.current) return;\n setCreatingName(undefined);\n setPicked({ id: record.id });\n return;\n }\n if (!activeRecord || !activeUnsaved || !canEdit(activeRecord)) return;\n const { id, name } = activeRecord;\n const record = await run(\n () => source.update(id, { state: current }),\n cause => errorMessage(cause, name),\n );\n if (record) storeRecord(record);\n },\n discard: () => {\n choiceRef.current += 1;\n setError(undefined);\n if (creatingName !== undefined) setCreatingName(undefined);\n else if (activeRecord) applyState(activeRecord.state);\n },\n rename: async (viewId, rawName) => {\n const name = validName(rawName);\n const record = records.find(item => item.id === viewId);\n if (!name || !record || pending || !canEdit(record)) return false;\n if (name === record.name) return true;\n const renamed = await run(\n () => source.update(viewId, { name }),\n cause => errorMessage(cause, name),\n );\n if (!renamed) return false;\n storeRecord(renamed);\n return true;\n },\n duplicate: async viewId => {\n const original = records.find(item => item.id === viewId);\n if (!canCreate || !original || pending || !fitsSizeLimit(original.state)) return;\n const name = validName(`${original.name} copy`) ?? original.name;\n const choice = choiceRef.current;\n const copy = await run(\n () => source.create({ name, state: original.state }),\n cause => errorMessage(cause, name),\n );\n if (!copy) return;\n storeRecord(copy);\n if (choice !== choiceRef.current) return;\n setCreatingName(undefined);\n setPicked({ id: copy.id });\n applyState(copy.state);\n },\n remove: async viewId => {\n const record = records.find(item => item.id === viewId);\n if (!record || pending || !canEdit(record)) return;\n choiceRef.current += 1;\n const removed = await run(\n async () => {\n await source.remove(viewId);\n return true;\n },\n () => DELETE_FAILED_MESSAGE,\n );\n if (!removed) return;\n queryClient.setQueryData<SavedViewRecord[]>(queryKey, (list = []) => list.filter(item => item.id !== viewId));\n // The page keeps its filters; the default tab is picked so the deleted view is not re-matched.\n if (activeRecord?.id === viewId) setPicked({ id: undefined });\n },\n };\n}\n"],"mappings":"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"}
|
|
@@ -59,7 +59,7 @@ var validName = (name) => {
|
|
|
59
59
|
* the draft: picking a view writes its state to the URL (and its columns to the column picker), and
|
|
60
60
|
* the view shows unsaved changes while the URL differs from it.
|
|
61
61
|
*/
|
|
62
|
-
function useHostedSavedViews({ page, source, queryKeyScope, searchParams, setSearchParams, columns, defaultDatePreset, canEdit = () => true }) {
|
|
62
|
+
function useHostedSavedViews({ page, source, queryKeyScope, searchParams, setSearchParams, columns, defaultDatePreset, canEdit = () => true, canCreate = true }) {
|
|
63
63
|
const queryClient = useQueryClient();
|
|
64
64
|
const queryKey = savedViewsQueryKey(queryKeyScope, page);
|
|
65
65
|
const { data: records = [] } = useQuery({
|
|
@@ -150,6 +150,7 @@ function useHostedSavedViews({ page, source, queryKeyScope, searchParams, setSea
|
|
|
150
150
|
applied: draft ?? activeView,
|
|
151
151
|
select,
|
|
152
152
|
create: () => {
|
|
153
|
+
if (!canCreate) return;
|
|
153
154
|
setError(void 0);
|
|
154
155
|
setCreatingName(NEW_VIEW_NAME);
|
|
155
156
|
},
|
|
@@ -200,7 +201,7 @@ function useHostedSavedViews({ page, source, queryKeyScope, searchParams, setSea
|
|
|
200
201
|
},
|
|
201
202
|
duplicate: async (viewId) => {
|
|
202
203
|
const original = records.find((item) => item.id === viewId);
|
|
203
|
-
if (!original || pending || !fitsSizeLimit(original.state)) return;
|
|
204
|
+
if (!canCreate || !original || pending || !fitsSizeLimit(original.state)) return;
|
|
204
205
|
const name = validName(`${original.name} copy`) ?? original.name;
|
|
205
206
|
const choice = choiceRef.current;
|
|
206
207
|
const copy = await run(() => source.create({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-hosted-saved-views.es.js","names":[],"sources":["../../../../src/domains/observability/saved-views/use-hosted-saved-views.ts"],"sourcesContent":["import type { SavedViewPage, SavedViewState } from '@mastra/core/storage';\nimport { useQuery, useQueryClient } from '@tanstack/react-query';\nimport { useRef, useState } from 'react';\nimport { applySavedView, savedViewFromSearchParams } from '../saved-view-state';\nimport { SavedViewNameTakenError, savedViewsQueryKey } from './saved-views-source';\nimport type { SavedViewRecord, SavedViewsContextValue } from './saved-views-source';\nimport type { TraceColumnPreferences } from '@/domains/traces/trace-list-columns';\nimport type { FilterBarItem } from '@/ds/components/FilterBar/types';\nimport { savedViewNameSchema } from '@/ds/components/SavedViews/saved-view-schema';\nimport type { SavedView } from '@/ds/components/SavedViews/saved-view-schema';\nimport type { SavedViewDraft, SavedViewsController } from '@/ds/components/SavedViews/use-saved-views';\nimport type { SetURLSearchParamsLike } from '@/lib/sort/use-url-sort';\n\n/** Same limit as the saved view schema in `@mastra/core`, checked before a request is made. */\nexport const SAVED_VIEW_STATE_MAX_BYTES = 16 * 1024;\n\nconst NEW_VIEW_NAME = 'Untitled view';\nexport const SAVED_VIEW_TOO_LARGE_MESSAGE =\n 'This view is too large to save (16 KiB max). Remove some filters or columns.';\nconst SAVE_FAILED_MESSAGE = 'Could not save the view. Try again.';\nconst DELETE_FAILED_MESSAGE = 'Could not delete the view. Try again.';\n\n/** A view's state, and for a stored view its record. */\nexport type HostedSavedViewSettings = { state: SavedViewState; record?: SavedViewRecord };\n\nexport type SavedViewColumnsControl = {\n preferences: TraceColumnPreferences;\n setPreferences: (next: TraceColumnPreferences) => void;\n /** Back to the page's default columns, when the page default is picked. */\n resetColumns: () => void;\n};\n\nexport type UseHostedSavedViewsArgs = SavedViewsContextValue & {\n page: SavedViewPage;\n searchParams: URLSearchParams;\n setSearchParams: SetURLSearchParamsLike;\n /** The page's column picker; omitted on pages with fixed columns. */\n columns?: SavedViewColumnsControl;\n /** The range the page shows when the URL names none, when the host's differs from the page's own. */\n defaultDatePreset?: string;\n};\n\nconst stateBytes = (state: SavedViewState) => new TextEncoder().encode(JSON.stringify(state)).length;\n\n/** The filters a view's hover summary lists: its top-level filters (groups are counted separately). */\nfunction summaryFilters(state: SavedViewState): FilterBarItem[] {\n return state.filters.flatMap((node, index) =>\n 'nodes' in node\n ? []\n : [\n {\n id: `${index}`,\n fieldId: node.fieldId,\n operatorId: node.operatorId ?? (Array.isArray(node.value) ? 'in' : 'is'),\n value: node.value,\n },\n ],\n );\n}\n\n/** The parts of a view that compare equal when they set the same URL and columns. */\nfunction comparable(state: SavedViewState, withColumns: boolean): string {\n const { filters, dateRange, sort, options, columns } = state;\n return JSON.stringify({ filters, dateRange, sort, options, columns: withColumns ? columns : undefined });\n}\n\nfunction errorMessage(error: unknown, name: string): string {\n return error instanceof SavedViewNameTakenError ? `A view named \"${name}\" already exists.` : SAVE_FAILED_MESSAGE;\n}\n\n/** What the user picked: a saved view, or the page default when `id` is undefined. */\ntype Picked = { id: string | undefined };\n\n/** The unsaved state shown in the bar: a view being created, or edits to the active view. */\nfunction draftOf(\n current: SavedViewState,\n creatingName: string | undefined,\n editedRecord: SavedViewRecord | undefined,\n): SavedViewDraft<HostedSavedViewSettings> | undefined {\n const unsaved = { filters: summaryFilters(current), settings: { state: current } };\n if (creatingName !== undefined) return { name: creatingName, ...unsaved };\n if (editedRecord) return { viewId: editedRecord.id, name: editedRecord.name, ...unsaved };\n return undefined;\n}\n\nconst validName = (name: string) => {\n const parsed = savedViewNameSchema.safeParse(name);\n return parsed.success ? parsed.data : undefined;\n};\n\n/**\n * Saved views of one observability page, stored by the host's `SavedViewsSource`. The page URL is\n * the draft: picking a view writes its state to the URL (and its columns to the column picker), and\n * the view shows unsaved changes while the URL differs from it.\n */\nexport function useHostedSavedViews({\n page,\n source,\n queryKeyScope,\n searchParams,\n setSearchParams,\n columns,\n defaultDatePreset,\n canEdit = () => true,\n}: UseHostedSavedViewsArgs): SavedViewsController<HostedSavedViewSettings> {\n const queryClient = useQueryClient();\n const queryKey = savedViewsQueryKey(queryKeyScope, page);\n const { data: records = [] } = useQuery({ queryKey, queryFn: () => source.list(page) });\n\n // Nothing picked yet: the view matching the URL (e.g. after a reload) is active.\n // `{ id: undefined }`: the page default was picked.\n const [picked, setPicked] = useState<Picked>();\n const [creatingName, setCreatingName] = useState<string>();\n const [error, setError] = useState<string>();\n const [pending, setPending] = useState(false);\n // Bumped whenever the user picks or leaves a view, so a request that settles afterwards does not\n // switch the page back to the view it created.\n const choiceRef = useRef(0);\n // The search params a view was applied over. A host can render the new URL a render after the\n // navigation that set it (a data router does), so until it does the old URL says nothing about\n // whether the view has unsaved changes.\n const [appliedOver, setAppliedOver] = useState<URLSearchParams>();\n\n const current = savedViewFromSearchParams(page, searchParams, { columns: columns?.preferences });\n\n // A view as the page would hold it once applied, so a view saved by an older page (or with stale\n // parts) still compares equal to the URL it sets.\n const matchesUrl = (state: SavedViewState) => {\n const applied = applySavedView(state, new URLSearchParams(), { defaultDatePreset });\n const normalized = savedViewFromSearchParams(page, applied.params, { columns: applied.columns });\n const withColumns = applied.columns !== undefined;\n return comparable(normalized, withColumns) === comparable(current, withColumns);\n };\n\n const activeRecord = picked\n ? records.find(record => record.id === picked.id)\n : records.find(record => matchesUrl(record.state));\n const activeMatches = activeRecord !== undefined && matchesUrl(activeRecord.state);\n const awaitingUrl = appliedOver !== undefined && appliedOver === searchParams && !activeMatches;\n if (appliedOver !== undefined && !awaitingUrl) setAppliedOver(undefined);\n const activeUnsaved = activeRecord !== undefined && !activeMatches && !awaitingUrl;\n\n const toView = (record: SavedViewRecord): SavedView<HostedSavedViewSettings> => ({\n id: record.id,\n name: record.name,\n filters: summaryFilters(record.state),\n settings: { state: record.state, record },\n });\n const views = records.map(toView);\n const activeView = activeRecord ? toView(activeRecord) : undefined;\n\n const draft = draftOf(current, creatingName, activeUnsaved ? activeRecord : undefined);\n\n const applyState = (state: SavedViewState) => {\n const applied = applySavedView(state, searchParams, { defaultDatePreset });\n setAppliedOver(searchParams);\n setSearchParams(previous => applySavedView(state, previous, { defaultDatePreset }).params);\n if (applied.columns && columns) columns.setPreferences(applied.columns);\n };\n\n const storeRecord = (record: SavedViewRecord) =>\n queryClient.setQueryData<SavedViewRecord[]>(queryKey, (list = []) =>\n list.some(item => item.id === record.id)\n ? list.map(item => (item.id === record.id ? record : item))\n : [record, ...list],\n );\n\n const run = async <T>(task: () => Promise<T>, onError: (error: unknown) => string): Promise<T | undefined> => {\n setPending(true);\n setError(undefined);\n try {\n return await task();\n } catch (cause) {\n setError(onError(cause));\n return undefined;\n } finally {\n setPending(false);\n void queryClient.invalidateQueries({ queryKey });\n }\n };\n\n const fitsSizeLimit = (state: SavedViewState) => {\n if (stateBytes(state) <= SAVED_VIEW_STATE_MAX_BYTES) return true;\n setError(SAVED_VIEW_TOO_LARGE_MESSAGE);\n return false;\n };\n\n const select = (viewId: string | undefined) => {\n choiceRef.current += 1;\n setCreatingName(undefined);\n setError(undefined);\n if (viewId === undefined) {\n setPicked({ id: undefined });\n applyState({ schemaVersion: 1, page, filters: [] });\n columns?.resetColumns();\n return;\n }\n const record = records.find(item => item.id === viewId);\n if (!record) return;\n setPicked({ id: record.id });\n applyState(record.state);\n };\n\n return {\n views,\n activeView,\n draft,\n unsaved: creatingName !== undefined || activeUnsaved,\n error,\n pending,\n applied: draft ?? activeView,\n select,\n create: () => {\n setError(undefined);\n setCreatingName(NEW_VIEW_NAME);\n },\n edit: viewId => {\n if (viewId !== activeRecord?.id) select(viewId);\n },\n change: ({ name }) => {\n if (name === undefined || creatingName === undefined) return;\n setError(undefined);\n setCreatingName(name);\n },\n save: async () => {\n if (pending || !fitsSizeLimit(current)) return;\n if (creatingName !== undefined) {\n const name = validName(creatingName) ?? NEW_VIEW_NAME;\n const choice = choiceRef.current;\n const record = await run(\n () => source.create({ name, state: current }),\n cause => errorMessage(cause, name),\n );\n if (!record) return;\n storeRecord(record);\n if (choice !== choiceRef.current) return;\n setCreatingName(undefined);\n setPicked({ id: record.id });\n return;\n }\n if (!activeRecord || !activeUnsaved || !canEdit(activeRecord)) return;\n const { id, name } = activeRecord;\n const record = await run(\n () => source.update(id, { state: current }),\n cause => errorMessage(cause, name),\n );\n if (record) storeRecord(record);\n },\n discard: () => {\n choiceRef.current += 1;\n setError(undefined);\n if (creatingName !== undefined) setCreatingName(undefined);\n else if (activeRecord) applyState(activeRecord.state);\n },\n rename: async (viewId, rawName) => {\n const name = validName(rawName);\n const record = records.find(item => item.id === viewId);\n if (!name || !record || pending || !canEdit(record)) return false;\n if (name === record.name) return true;\n const renamed = await run(\n () => source.update(viewId, { name }),\n cause => errorMessage(cause, name),\n );\n if (!renamed) return false;\n storeRecord(renamed);\n return true;\n },\n duplicate: async viewId => {\n const original = records.find(item => item.id === viewId);\n if (!original || pending || !fitsSizeLimit(original.state)) return;\n const name = validName(`${original.name} copy`) ?? original.name;\n const choice = choiceRef.current;\n const copy = await run(\n () => source.create({ name, state: original.state }),\n cause => errorMessage(cause, name),\n );\n if (!copy) return;\n storeRecord(copy);\n if (choice !== choiceRef.current) return;\n setCreatingName(undefined);\n setPicked({ id: copy.id });\n applyState(copy.state);\n },\n remove: async viewId => {\n const record = records.find(item => item.id === viewId);\n if (!record || pending || !canEdit(record)) return;\n choiceRef.current += 1;\n const removed = await run(\n async () => {\n await source.remove(viewId);\n return true;\n },\n () => DELETE_FAILED_MESSAGE,\n );\n if (!removed) return;\n queryClient.setQueryData<SavedViewRecord[]>(queryKey, (list = []) => list.filter(item => item.id !== viewId));\n // The page keeps its filters; the default tab is picked so the deleted view is not re-matched.\n if (activeRecord?.id === viewId) setPicked({ id: undefined });\n },\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"use-hosted-saved-views.es.js","names":[],"sources":["../../../../src/domains/observability/saved-views/use-hosted-saved-views.ts"],"sourcesContent":["import type { SavedViewPage, SavedViewState } from '@mastra/core/storage';\nimport { useQuery, useQueryClient } from '@tanstack/react-query';\nimport { useRef, useState } from 'react';\nimport { applySavedView, savedViewFromSearchParams } from '../saved-view-state';\nimport { SavedViewNameTakenError, savedViewsQueryKey } from './saved-views-source';\nimport type { SavedViewRecord, SavedViewsContextValue } from './saved-views-source';\nimport type { TraceColumnPreferences } from '@/domains/traces/trace-list-columns';\nimport type { FilterBarItem } from '@/ds/components/FilterBar/types';\nimport { savedViewNameSchema } from '@/ds/components/SavedViews/saved-view-schema';\nimport type { SavedView } from '@/ds/components/SavedViews/saved-view-schema';\nimport type { SavedViewDraft, SavedViewsController } from '@/ds/components/SavedViews/use-saved-views';\nimport type { SetURLSearchParamsLike } from '@/lib/sort/use-url-sort';\n\n/** Same limit as the saved view schema in `@mastra/core`, checked before a request is made. */\nexport const SAVED_VIEW_STATE_MAX_BYTES = 16 * 1024;\n\nconst NEW_VIEW_NAME = 'Untitled view';\nexport const SAVED_VIEW_TOO_LARGE_MESSAGE =\n 'This view is too large to save (16 KiB max). Remove some filters or columns.';\nconst SAVE_FAILED_MESSAGE = 'Could not save the view. Try again.';\nconst DELETE_FAILED_MESSAGE = 'Could not delete the view. Try again.';\n\n/** A view's state, and for a stored view its record. */\nexport type HostedSavedViewSettings = { state: SavedViewState; record?: SavedViewRecord };\n\nexport type SavedViewColumnsControl = {\n preferences: TraceColumnPreferences;\n setPreferences: (next: TraceColumnPreferences) => void;\n /** Back to the page's default columns, when the page default is picked. */\n resetColumns: () => void;\n};\n\nexport type UseHostedSavedViewsArgs = SavedViewsContextValue & {\n page: SavedViewPage;\n searchParams: URLSearchParams;\n setSearchParams: SetURLSearchParamsLike;\n /** The page's column picker; omitted on pages with fixed columns. */\n columns?: SavedViewColumnsControl;\n /** The range the page shows when the URL names none, when the host's differs from the page's own. */\n defaultDatePreset?: string;\n};\n\nconst stateBytes = (state: SavedViewState) => new TextEncoder().encode(JSON.stringify(state)).length;\n\n/** The filters a view's hover summary lists: its top-level filters (groups are counted separately). */\nfunction summaryFilters(state: SavedViewState): FilterBarItem[] {\n return state.filters.flatMap((node, index) =>\n 'nodes' in node\n ? []\n : [\n {\n id: `${index}`,\n fieldId: node.fieldId,\n operatorId: node.operatorId ?? (Array.isArray(node.value) ? 'in' : 'is'),\n value: node.value,\n },\n ],\n );\n}\n\n/** The parts of a view that compare equal when they set the same URL and columns. */\nfunction comparable(state: SavedViewState, withColumns: boolean): string {\n const { filters, dateRange, sort, options, columns } = state;\n return JSON.stringify({ filters, dateRange, sort, options, columns: withColumns ? columns : undefined });\n}\n\nfunction errorMessage(error: unknown, name: string): string {\n return error instanceof SavedViewNameTakenError ? `A view named \"${name}\" already exists.` : SAVE_FAILED_MESSAGE;\n}\n\n/** What the user picked: a saved view, or the page default when `id` is undefined. */\ntype Picked = { id: string | undefined };\n\n/** The unsaved state shown in the bar: a view being created, or edits to the active view. */\nfunction draftOf(\n current: SavedViewState,\n creatingName: string | undefined,\n editedRecord: SavedViewRecord | undefined,\n): SavedViewDraft<HostedSavedViewSettings> | undefined {\n const unsaved = { filters: summaryFilters(current), settings: { state: current } };\n if (creatingName !== undefined) return { name: creatingName, ...unsaved };\n if (editedRecord) return { viewId: editedRecord.id, name: editedRecord.name, ...unsaved };\n return undefined;\n}\n\nconst validName = (name: string) => {\n const parsed = savedViewNameSchema.safeParse(name);\n return parsed.success ? parsed.data : undefined;\n};\n\n/**\n * Saved views of one observability page, stored by the host's `SavedViewsSource`. The page URL is\n * the draft: picking a view writes its state to the URL (and its columns to the column picker), and\n * the view shows unsaved changes while the URL differs from it.\n */\nexport function useHostedSavedViews({\n page,\n source,\n queryKeyScope,\n searchParams,\n setSearchParams,\n columns,\n defaultDatePreset,\n canEdit = () => true,\n canCreate = true,\n}: UseHostedSavedViewsArgs): SavedViewsController<HostedSavedViewSettings> {\n const queryClient = useQueryClient();\n const queryKey = savedViewsQueryKey(queryKeyScope, page);\n const { data: records = [] } = useQuery({ queryKey, queryFn: () => source.list(page) });\n\n // Nothing picked yet: the view matching the URL (e.g. after a reload) is active.\n // `{ id: undefined }`: the page default was picked.\n const [picked, setPicked] = useState<Picked>();\n const [creatingName, setCreatingName] = useState<string>();\n const [error, setError] = useState<string>();\n const [pending, setPending] = useState(false);\n // Bumped whenever the user picks or leaves a view, so a request that settles afterwards does not\n // switch the page back to the view it created.\n const choiceRef = useRef(0);\n // The search params a view was applied over. A host can render the new URL a render after the\n // navigation that set it (a data router does), so until it does the old URL says nothing about\n // whether the view has unsaved changes.\n const [appliedOver, setAppliedOver] = useState<URLSearchParams>();\n\n const current = savedViewFromSearchParams(page, searchParams, { columns: columns?.preferences });\n\n // A view as the page would hold it once applied, so a view saved by an older page (or with stale\n // parts) still compares equal to the URL it sets.\n const matchesUrl = (state: SavedViewState) => {\n const applied = applySavedView(state, new URLSearchParams(), { defaultDatePreset });\n const normalized = savedViewFromSearchParams(page, applied.params, { columns: applied.columns });\n const withColumns = applied.columns !== undefined;\n return comparable(normalized, withColumns) === comparable(current, withColumns);\n };\n\n const activeRecord = picked\n ? records.find(record => record.id === picked.id)\n : records.find(record => matchesUrl(record.state));\n const activeMatches = activeRecord !== undefined && matchesUrl(activeRecord.state);\n const awaitingUrl = appliedOver !== undefined && appliedOver === searchParams && !activeMatches;\n if (appliedOver !== undefined && !awaitingUrl) setAppliedOver(undefined);\n const activeUnsaved = activeRecord !== undefined && !activeMatches && !awaitingUrl;\n\n const toView = (record: SavedViewRecord): SavedView<HostedSavedViewSettings> => ({\n id: record.id,\n name: record.name,\n filters: summaryFilters(record.state),\n settings: { state: record.state, record },\n });\n const views = records.map(toView);\n const activeView = activeRecord ? toView(activeRecord) : undefined;\n\n const draft = draftOf(current, creatingName, activeUnsaved ? activeRecord : undefined);\n\n const applyState = (state: SavedViewState) => {\n const applied = applySavedView(state, searchParams, { defaultDatePreset });\n setAppliedOver(searchParams);\n setSearchParams(previous => applySavedView(state, previous, { defaultDatePreset }).params);\n if (applied.columns && columns) columns.setPreferences(applied.columns);\n };\n\n const storeRecord = (record: SavedViewRecord) =>\n queryClient.setQueryData<SavedViewRecord[]>(queryKey, (list = []) =>\n list.some(item => item.id === record.id)\n ? list.map(item => (item.id === record.id ? record : item))\n : [record, ...list],\n );\n\n const run = async <T>(task: () => Promise<T>, onError: (error: unknown) => string): Promise<T | undefined> => {\n setPending(true);\n setError(undefined);\n try {\n return await task();\n } catch (cause) {\n setError(onError(cause));\n return undefined;\n } finally {\n setPending(false);\n void queryClient.invalidateQueries({ queryKey });\n }\n };\n\n const fitsSizeLimit = (state: SavedViewState) => {\n if (stateBytes(state) <= SAVED_VIEW_STATE_MAX_BYTES) return true;\n setError(SAVED_VIEW_TOO_LARGE_MESSAGE);\n return false;\n };\n\n const select = (viewId: string | undefined) => {\n choiceRef.current += 1;\n setCreatingName(undefined);\n setError(undefined);\n if (viewId === undefined) {\n setPicked({ id: undefined });\n applyState({ schemaVersion: 1, page, filters: [] });\n columns?.resetColumns();\n return;\n }\n const record = records.find(item => item.id === viewId);\n if (!record) return;\n setPicked({ id: record.id });\n applyState(record.state);\n };\n\n return {\n views,\n activeView,\n draft,\n unsaved: creatingName !== undefined || activeUnsaved,\n error,\n pending,\n applied: draft ?? activeView,\n select,\n create: () => {\n if (!canCreate) return;\n setError(undefined);\n setCreatingName(NEW_VIEW_NAME);\n },\n edit: viewId => {\n if (viewId !== activeRecord?.id) select(viewId);\n },\n change: ({ name }) => {\n if (name === undefined || creatingName === undefined) return;\n setError(undefined);\n setCreatingName(name);\n },\n save: async () => {\n if (pending || !fitsSizeLimit(current)) return;\n if (creatingName !== undefined) {\n const name = validName(creatingName) ?? NEW_VIEW_NAME;\n const choice = choiceRef.current;\n const record = await run(\n () => source.create({ name, state: current }),\n cause => errorMessage(cause, name),\n );\n if (!record) return;\n storeRecord(record);\n if (choice !== choiceRef.current) return;\n setCreatingName(undefined);\n setPicked({ id: record.id });\n return;\n }\n if (!activeRecord || !activeUnsaved || !canEdit(activeRecord)) return;\n const { id, name } = activeRecord;\n const record = await run(\n () => source.update(id, { state: current }),\n cause => errorMessage(cause, name),\n );\n if (record) storeRecord(record);\n },\n discard: () => {\n choiceRef.current += 1;\n setError(undefined);\n if (creatingName !== undefined) setCreatingName(undefined);\n else if (activeRecord) applyState(activeRecord.state);\n },\n rename: async (viewId, rawName) => {\n const name = validName(rawName);\n const record = records.find(item => item.id === viewId);\n if (!name || !record || pending || !canEdit(record)) return false;\n if (name === record.name) return true;\n const renamed = await run(\n () => source.update(viewId, { name }),\n cause => errorMessage(cause, name),\n );\n if (!renamed) return false;\n storeRecord(renamed);\n return true;\n },\n duplicate: async viewId => {\n const original = records.find(item => item.id === viewId);\n if (!canCreate || !original || pending || !fitsSizeLimit(original.state)) return;\n const name = validName(`${original.name} copy`) ?? original.name;\n const choice = choiceRef.current;\n const copy = await run(\n () => source.create({ name, state: original.state }),\n cause => errorMessage(cause, name),\n );\n if (!copy) return;\n storeRecord(copy);\n if (choice !== choiceRef.current) return;\n setCreatingName(undefined);\n setPicked({ id: copy.id });\n applyState(copy.state);\n },\n remove: async viewId => {\n const record = records.find(item => item.id === viewId);\n if (!record || pending || !canEdit(record)) return;\n choiceRef.current += 1;\n const removed = await run(\n async () => {\n await source.remove(viewId);\n return true;\n },\n () => DELETE_FAILED_MESSAGE,\n );\n if (!removed) return;\n queryClient.setQueryData<SavedViewRecord[]>(queryKey, (list = []) => list.filter(item => item.id !== viewId));\n // The page keeps its filters; the default tab is picked so the deleted view is not re-matched.\n if (activeRecord?.id === viewId) setPicked({ id: undefined });\n },\n };\n}\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_domains_observability_saved_views_saved_views_source = require("./saved-views/saved-views-source.cjs.js");
|
|
3
|
-
const require_observability_saved_views = require("../../observability-saved-views-
|
|
3
|
+
const require_observability_saved_views = require("../../observability-saved-views-BAzxxoAr.cjs");
|
|
4
4
|
const require_domains_observability_saved_views_saved_views_provider = require("./saved-views/saved-views-provider.cjs.js");
|
|
5
5
|
exports.ObservabilitySavedViews = require_observability_saved_views.ObservabilitySavedViews;
|
|
6
6
|
exports.SavedViewNameTakenError = require_domains_observability_saved_views_saved_views_source.SavedViewNameTakenError;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { SavedViewNameTakenError } from "./saved-views/saved-views-source.es.js";
|
|
2
|
-
import { t as ObservabilitySavedViews } from "../../observability-saved-views-
|
|
2
|
+
import { t as ObservabilitySavedViews } from "../../observability-saved-views-BBam8Fr5.js";
|
|
3
3
|
import { SavedViewsProvider } from "./saved-views/saved-views-provider.es.js";
|
|
4
4
|
export { ObservabilitySavedViews, SavedViewNameTakenError, SavedViewsProvider };
|