@mastra/playground-ui 69.0.0-alpha.0 → 69.0.0-alpha.2
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/components.css +6 -0
- package/dist/{CodeEditor-ZoBu3Gjw.js → CodeEditor-BqAM9L7t.js} +5 -2
- package/dist/{CodeEditor-ZoBu3Gjw.js.map → CodeEditor-BqAM9L7t.js.map} +1 -1
- package/dist/{CodeEditor-DHIDfP5g.cjs → CodeEditor-zMSUzPdX.cjs} +5 -2
- package/dist/{CodeEditor-DHIDfP5g.cjs.map → CodeEditor-zMSUzPdX.cjs.map} +1 -1
- package/dist/{Comment-rQxuMDQv.cjs → Comment-A07IvOt2.cjs} +3 -3
- package/dist/{Comment-rQxuMDQv.cjs.map → Comment-A07IvOt2.cjs.map} +1 -1
- package/dist/{Comment-2q9SomE2.js → Comment-D_gSx7oM.js} +3 -3
- package/dist/{Comment-2q9SomE2.js.map → Comment-D_gSx7oM.js.map} +1 -1
- package/dist/{Composer-u1K6edoZ.cjs → Composer-D2BqRyb5.cjs} +2 -2
- package/dist/Composer-D2BqRyb5.cjs.map +1 -0
- package/dist/{Composer-bVE8qK52.js → Composer-kjwmlIgL.js} +2 -2
- package/dist/Composer-kjwmlIgL.js.map +1 -0
- package/dist/{DataCodeSection-CTodi9wg.js → DataCodeSection-CcX8Z68Y.js} +2 -2
- package/dist/{DataCodeSection-CTodi9wg.js.map → DataCodeSection-CcX8Z68Y.js.map} +1 -1
- package/dist/{DataCodeSection-7SvRJj6f.cjs → DataCodeSection-JPGTWLcL.cjs} +2 -2
- package/dist/{DataCodeSection-7SvRJj6f.cjs.map → DataCodeSection-JPGTWLcL.cjs.map} +1 -1
- package/dist/{DataDetailsPanel-BDoD6pxx.cjs → DataDetailsPanel-DCMlaG7j.cjs} +2 -2
- package/dist/{DataDetailsPanel-BDoD6pxx.cjs.map → DataDetailsPanel-DCMlaG7j.cjs.map} +1 -1
- package/dist/{DataDetailsPanel-BU05psHL.js → DataDetailsPanel-mTfbbQho.js} +2 -2
- package/dist/{DataDetailsPanel-BU05psHL.js.map → DataDetailsPanel-mTfbbQho.js.map} +1 -1
- package/dist/{DataPanel-BRRAvWYQ.cjs → DataPanel-LfExjFpP.cjs} +2 -2
- package/dist/{DataPanel-BRRAvWYQ.cjs.map → DataPanel-LfExjFpP.cjs.map} +1 -1
- package/dist/{DataPanel-pVr5LVaK.js → DataPanel-Rv5Mb_pf.js} +2 -2
- package/dist/{DataPanel-pVr5LVaK.js.map → DataPanel-Rv5Mb_pf.js.map} +1 -1
- package/dist/{FilterBar-Kmn6gMgO.js → FilterBar-DgHNtsDI.js} +5 -5
- package/dist/FilterBar-DgHNtsDI.js.map +1 -0
- package/dist/{FilterBar-jBz6yaNu.cjs → FilterBar-O8SYau_Q.cjs} +5 -5
- package/dist/FilterBar-O8SYau_Q.cjs.map +1 -0
- package/dist/KnowledgePageGraph.css +1 -3
- package/dist/{MarkdownRenderer-CY8LGt-l.js → MarkdownRenderer-BSGb65Ze.js} +2 -2
- package/dist/{MarkdownRenderer-CY8LGt-l.js.map → MarkdownRenderer-BSGb65Ze.js.map} +1 -1
- package/dist/{MarkdownRenderer-CUYpmuPh.cjs → MarkdownRenderer-CDwlvw0Y.cjs} +2 -2
- package/dist/{MarkdownRenderer-CUYpmuPh.cjs.map → MarkdownRenderer-CDwlvw0Y.cjs.map} +1 -1
- package/dist/{MetricsCard-DojbLiEx.cjs → MetricsCard-CSJ4TsNq.cjs} +3 -3
- package/dist/MetricsCard-CSJ4TsNq.cjs.map +1 -0
- package/dist/{MetricsCard-kAqSCPPe.js → MetricsCard-D6bQfynP.js} +3 -3
- package/dist/MetricsCard-D6bQfynP.js.map +1 -0
- package/dist/{Tree-Caz4FTCU.cjs → Tree-6pubDJLQ.cjs} +4 -3
- package/dist/Tree-6pubDJLQ.cjs.map +1 -0
- package/dist/{Tree-od43gLMO.js → Tree-DpRLmis3.js} +4 -3
- package/dist/Tree-DpRLmis3.js.map +1 -0
- package/dist/{Workflow-mIbUYdv0.js → Workflow-BVVYys0W.js} +3 -3
- package/dist/{Workflow-mIbUYdv0.js.map → Workflow-BVVYys0W.js.map} +1 -1
- package/dist/{Workflow-XR5L-3cJ.cjs → Workflow-CwIjxwC6.cjs} +3 -3
- package/dist/{Workflow-XR5L-3cJ.cjs.map → Workflow-CwIjxwC6.cjs.map} +1 -1
- package/dist/{activity-ClFChYfl.js → activity-BH_eegMA.js} +2 -2
- package/dist/{activity-ClFChYfl.js.map → activity-BH_eegMA.js.map} +1 -1
- package/dist/{activity-BprmG6yH.cjs → activity-Ciolopq8.cjs} +2 -2
- package/dist/{activity-BprmG6yH.cjs.map → activity-Ciolopq8.cjs.map} +1 -1
- package/dist/{ask-user-D4ezQ6pt.js → ask-user-CqzPUD9E.js} +2 -2
- package/dist/{ask-user-D4ezQ6pt.js.map → ask-user-CqzPUD9E.js.map} +1 -1
- package/dist/{ask-user-DcnUNMM5.cjs → ask-user-DIYcPkoX.cjs} +2 -2
- package/dist/{ask-user-DcnUNMM5.cjs.map → ask-user-DIYcPkoX.cjs.map} +1 -1
- package/dist/{combobox-lbSxWRMl.js → combobox-DLdInLYm.js} +2 -2
- package/dist/{combobox-lbSxWRMl.js.map → combobox-DLdInLYm.js.map} +1 -1
- package/dist/{combobox-i723LxeC.cjs → combobox-DU2jsrGa.cjs} +2 -2
- package/dist/{combobox-i723LxeC.cjs.map → combobox-DU2jsrGa.cjs.map} +1 -1
- package/dist/{combobox-parts-BeNqgCbj.cjs → combobox-parts-C236ZHtn.cjs} +2 -2
- package/dist/combobox-parts-C236ZHtn.cjs.map +1 -0
- package/dist/{combobox-parts-C9o4UfH_.js → combobox-parts-_m3Qgmci.js} +2 -2
- package/dist/combobox-parts-_m3Qgmci.js.map +1 -0
- package/dist/components/Breadcrumb.cjs.js.map +1 -1
- package/dist/components/Breadcrumb.es.js.map +1 -1
- package/dist/components/CodeBlock.cjs.js +1 -1
- package/dist/components/CodeBlock.es.js +1 -1
- package/dist/components/CodeEditor.cjs.js +1 -1
- package/dist/components/CodeEditor.es.js +1 -1
- package/dist/components/Combobox.cjs.js +2 -2
- package/dist/components/Combobox.es.js +2 -2
- package/dist/components/Command.cjs.js +1 -1
- package/dist/components/Command.cjs.js.map +1 -1
- package/dist/components/Command.es.js +1 -1
- 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/Composer.cjs.js +1 -1
- package/dist/components/Composer.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 +1 -1
- package/dist/components/DataList.es.js +1 -1
- package/dist/components/DataPanel.cjs.js +1 -1
- package/dist/components/DataPanel.es.js +1 -1
- package/dist/components/DateTimePicker.cjs.js +1 -1
- package/dist/components/DateTimePicker.es.js +1 -1
- package/dist/components/DateTimeRangePicker.cjs.js +1 -1
- package/dist/components/DateTimeRangePicker.es.js +1 -1
- package/dist/components/DropdownMenu.cjs.js +1 -1
- package/dist/components/DropdownMenu.es.js +1 -1
- package/dist/components/EnvironmentVariablesEditor.cjs.js +1 -1
- package/dist/components/EnvironmentVariablesEditor.es.js +1 -1
- package/dist/components/FilterBar.cjs.js +3 -3
- package/dist/components/FilterBar.es.js +3 -3
- package/dist/components/FormFieldBlocks.cjs.js +1 -1
- package/dist/components/FormFieldBlocks.es.js +1 -1
- package/dist/components/Input.cjs.js +1 -1
- package/dist/components/Input.es.js +1 -1
- package/dist/components/InputGroup.cjs.js +1 -1
- package/dist/components/InputGroup.es.js +1 -1
- package/dist/components/InputNumber.cjs.js +1 -1
- package/dist/components/InputNumber.es.js +1 -1
- package/dist/components/JSONSchemaForm.cjs.js +1 -1
- package/dist/components/JSONSchemaForm.es.js +1 -1
- package/dist/components/MarkdownRenderer.cjs.js +1 -1
- package/dist/components/MarkdownRenderer.es.js +1 -1
- package/dist/components/MetricsCard.cjs.js +1 -1
- package/dist/components/MetricsCard.es.js +1 -1
- package/dist/components/PropertyFilter.cjs.js +2 -2
- package/dist/components/PropertyFilter.es.js +2 -2
- package/dist/components/RuleBuilder.cjs.js +1 -1
- package/dist/components/RuleBuilder.es.js +1 -1
- package/dist/components/SavedViews.cjs.js +3 -3
- package/dist/components/SavedViews.cjs.js.map +1 -1
- package/dist/components/SavedViews.es.js +3 -3
- package/dist/components/SavedViews.es.js.map +1 -1
- package/dist/components/SearchInput.cjs.js +1 -1
- package/dist/components/SearchInput.es.js +1 -1
- package/dist/components/SideDialog.cjs.js +1 -1
- package/dist/components/SideDialog.es.js +1 -1
- package/dist/components/Sidebar.cjs.js +1 -1
- package/dist/components/Sidebar.es.js +1 -1
- package/dist/components/Tabs.cjs.js +2 -2
- package/dist/components/Tabs.es.js +2 -2
- package/dist/components/Textarea.cjs.js +1 -1
- package/dist/components/Textarea.cjs.js.map +1 -1
- package/dist/components/Textarea.es.js +1 -1
- package/dist/components/Textarea.es.js.map +1 -1
- package/dist/components/ThreadRail.cjs.js +2 -0
- package/dist/components/ThreadRail.cjs.js.map +1 -1
- package/dist/components/ThreadRail.es.js +2 -0
- package/dist/components/ThreadRail.es.js.map +1 -1
- package/dist/components/Tree.cjs.js +1 -1
- package/dist/components/Tree.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 +1 -1
- package/dist/components/ai/plan.es.js +1 -1
- package/dist/components/ai/tool-approval.cjs.js +1 -1
- package/dist/components/ai/tool-approval.es.js +1 -1
- package/dist/components/ai/tool-call.cjs.js +1 -1
- package/dist/components/ai/tool-call.es.js +1 -1
- package/dist/{date-time-range-picker-DdNgKD87.js → date-time-range-picker-CJyhcug7.js} +3 -3
- package/dist/{date-time-range-picker-DdNgKD87.js.map → date-time-range-picker-CJyhcug7.js.map} +1 -1
- package/dist/{date-time-range-picker-Bq-8IPtS.cjs → date-time-range-picker-Dhnuwa-U.cjs} +3 -3
- package/dist/{date-time-range-picker-Bq-8IPtS.cjs.map → date-time-range-picker-Dhnuwa-U.cjs.map} +1 -1
- 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/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 +1 -1
- package/dist/domains/chat/activity/model/activity-words.es.js +1 -1
- package/dist/domains/chat/attachments/composer-attachment-list.cjs.js +1 -1
- package/dist/domains/chat/attachments/composer-attachment-list.es.js +1 -1
- package/dist/domains/chat/attachments/split-message-attachments.cjs.js +4 -1
- package/dist/domains/chat/attachments/split-message-attachments.cjs.js.map +1 -1
- package/dist/domains/chat/attachments/split-message-attachments.es.js +4 -1
- package/dist/domains/chat/attachments/split-message-attachments.es.js.map +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 +1 -1
- package/dist/domains/chat/components/network-choice-metadata-dialog.es.js +1 -1
- package/dist/domains/chat/knowledge/pinned-knowledge.cjs.js +1 -1
- package/dist/domains/chat/knowledge/pinned-knowledge.es.js +1 -1
- package/dist/domains/chat/messages/dataset-save-action.cjs.js +1 -1
- package/dist/domains/chat/messages/dataset-save-action.es.js +1 -1
- package/dist/domains/chat/messages/message-row.cjs.js +2 -2
- package/dist/domains/chat/messages/message-row.es.js +2 -2
- 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 +1 -1
- package/dist/domains/chat/messages/renderers/message-text.es.js +1 -1
- package/dist/domains/chat/messages/renderers/reasoning-part-renderer.cjs.js +1 -1
- package/dist/domains/chat/messages/renderers/reasoning-part-renderer.es.js +1 -1
- package/dist/domains/chat/messages/signal-badge.cjs.js +1 -1
- package/dist/domains/chat/messages/signal-badge.es.js +1 -1
- package/dist/domains/chat/messages/skill-message.cjs.js +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 +5 -10
- package/dist/domains/chat/messages/tripwire-notice.cjs.js.map +1 -1
- package/dist/domains/chat/messages/tripwire-notice.es.js +5 -10
- package/dist/domains/chat/messages/tripwire-notice.es.js.map +1 -1
- package/dist/domains/chat/tools/badges/agent-badge-wrapper.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/agent-badge-wrapper.es.js +1 -1
- package/dist/domains/chat/tools/badges/agent-badge.cjs.js +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 +1 -1
- package/dist/domains/chat/tools/badges/background-task-metadata-dialog.es.js +1 -1
- 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 +1 -1
- package/dist/domains/chat/tools/badges/file-tree-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/knowledge-tool-badge.cjs.js +2 -2
- package/dist/domains/chat/tools/badges/knowledge-tool-badge.es.js +2 -2
- 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 +1 -1
- package/dist/domains/chat/tools/badges/sandbox-execution-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/tool-approval-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/tool-approval-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/tool-badge.cjs.js +2 -2
- package/dist/domains/chat/tools/badges/tool-badge.es.js +2 -2
- package/dist/domains/chat/tools/badges/workflow-badge.cjs.js +2 -2
- package/dist/domains/chat/tools/badges/workflow-badge.es.js +2 -2
- package/dist/domains/chat/tools/mcp-input-request-tool.cjs.js +2 -2
- package/dist/domains/chat/tools/mcp-input-request-tool.es.js +2 -2
- package/dist/domains/chat/tools/tool-card.cjs.js +1 -1
- package/dist/domains/chat/tools/tool-card.es.js +1 -1
- package/dist/domains/chat/tools/tool-groups.cjs.js +1 -1
- package/dist/domains/chat/tools/tool-groups.es.js +1 -1
- package/dist/domains/dashboards/components/connected-widget.cjs.js +55 -0
- package/dist/domains/dashboards/components/connected-widget.cjs.js.map +1 -0
- package/dist/domains/dashboards/components/connected-widget.d.ts +1 -0
- package/dist/domains/dashboards/components/connected-widget.es.js +54 -0
- package/dist/domains/dashboards/components/connected-widget.es.js.map +1 -0
- package/dist/domains/dashboards/components/dashboard-renderer.cjs.js +13 -8
- package/dist/domains/dashboards/components/dashboard-renderer.cjs.js.map +1 -1
- package/dist/domains/dashboards/components/dashboard-renderer.es.js +13 -8
- package/dist/domains/dashboards/components/dashboard-renderer.es.js.map +1 -1
- package/dist/domains/dashboards/components/stateless-widget.cjs.js +30 -0
- package/dist/domains/dashboards/components/stateless-widget.cjs.js.map +1 -0
- package/dist/domains/dashboards/components/stateless-widget.d.ts +1 -0
- package/dist/domains/dashboards/components/stateless-widget.es.js +29 -0
- package/dist/domains/dashboards/components/stateless-widget.es.js.map +1 -0
- package/dist/domains/dashboards/components/view-gate.cjs.js +18 -40
- package/dist/domains/dashboards/components/view-gate.cjs.js.map +1 -1
- package/dist/domains/dashboards/components/view-gate.es.js +18 -40
- package/dist/domains/dashboards/components/view-gate.es.js.map +1 -1
- package/dist/domains/dashboards/components/widget-chrome.cjs.js +1 -1
- package/dist/domains/dashboards/components/widget-chrome.es.js +1 -1
- package/dist/domains/dashboards/components/widget-controls.cjs.js +106 -0
- package/dist/domains/dashboards/components/widget-controls.cjs.js.map +1 -1
- package/dist/domains/dashboards/components/widget-controls.es.js +107 -3
- package/dist/domains/dashboards/components/widget-controls.es.js.map +1 -1
- package/dist/domains/dashboards/components/widget-error.cjs.js +1 -1
- package/dist/domains/dashboards/components/widget-error.es.js +1 -1
- package/dist/domains/dashboards/hooks/use-dashboard-environment.cjs.js +55 -0
- package/dist/domains/dashboards/hooks/use-dashboard-environment.cjs.js.map +1 -0
- package/dist/domains/dashboards/hooks/use-dashboard-environment.d.ts +1 -0
- package/dist/domains/dashboards/hooks/use-dashboard-environment.es.js +53 -0
- package/dist/domains/dashboards/hooks/use-dashboard-environment.es.js.map +1 -0
- package/dist/domains/dashboards/hooks/use-dashboard-requests.cjs.js +24 -0
- package/dist/domains/dashboards/hooks/use-dashboard-requests.cjs.js.map +1 -1
- package/dist/domains/dashboards/hooks/use-dashboard-requests.es.js +23 -1
- package/dist/domains/dashboards/hooks/use-dashboard-requests.es.js.map +1 -1
- package/dist/domains/dashboards/hooks/use-widget-views.cjs.js +10 -6
- package/dist/domains/dashboards/hooks/use-widget-views.cjs.js.map +1 -1
- package/dist/domains/dashboards/hooks/use-widget-views.es.js +10 -7
- package/dist/domains/dashboards/hooks/use-widget-views.es.js.map +1 -1
- package/dist/domains/dashboards/kinds/kpis/kpis-plan.cjs.js +11 -0
- package/dist/domains/dashboards/kinds/kpis/kpis-plan.cjs.js.map +1 -0
- package/dist/domains/dashboards/kinds/kpis/kpis-plan.d.ts +1 -0
- package/dist/domains/dashboards/kinds/kpis/kpis-plan.es.js +9 -0
- package/dist/domains/dashboards/kinds/kpis/kpis-plan.es.js.map +1 -0
- package/dist/domains/dashboards/kinds/kpis/kpis-widget.cjs.js +18 -19
- package/dist/domains/dashboards/kinds/kpis/kpis-widget.cjs.js.map +1 -1
- package/dist/domains/dashboards/kinds/kpis/kpis-widget.es.js +18 -19
- package/dist/domains/dashboards/kinds/kpis/kpis-widget.es.js.map +1 -1
- package/dist/domains/dashboards/kinds/kpis.cjs.js +3 -0
- package/dist/domains/dashboards/kinds/kpis.cjs.js.map +1 -1
- package/dist/domains/dashboards/kinds/kpis.es.js +3 -0
- package/dist/domains/dashboards/kinds/kpis.es.js.map +1 -1
- package/dist/domains/dashboards/kinds/scores/scores-plan.cjs.js +27 -0
- package/dist/domains/dashboards/kinds/scores/scores-plan.cjs.js.map +1 -0
- package/dist/domains/dashboards/kinds/scores/scores-plan.d.ts +1 -0
- package/dist/domains/dashboards/kinds/scores/scores-plan.es.js +24 -0
- package/dist/domains/dashboards/kinds/scores/scores-plan.es.js.map +1 -0
- package/dist/domains/dashboards/kinds/scores/scores-widget.cjs.js +25 -32
- package/dist/domains/dashboards/kinds/scores/scores-widget.cjs.js.map +1 -1
- package/dist/domains/dashboards/kinds/scores/scores-widget.es.js +26 -33
- package/dist/domains/dashboards/kinds/scores/scores-widget.es.js.map +1 -1
- package/dist/domains/dashboards/kinds/scores.cjs.js +4 -0
- package/dist/domains/dashboards/kinds/scores.cjs.js.map +1 -1
- package/dist/domains/dashboards/kinds/scores.es.js +4 -0
- package/dist/domains/dashboards/kinds/scores.es.js.map +1 -1
- package/dist/domains/dashboards/kinds/table/table-cells.cjs.js +2 -6
- package/dist/domains/dashboards/kinds/table/table-cells.cjs.js.map +1 -1
- package/dist/domains/dashboards/kinds/table/table-cells.es.js +2 -6
- package/dist/domains/dashboards/kinds/table/table-cells.es.js.map +1 -1
- package/dist/domains/dashboards/kinds/table/table-columns.cjs.js +5 -3
- package/dist/domains/dashboards/kinds/table/table-columns.cjs.js.map +1 -1
- package/dist/domains/dashboards/kinds/table/table-columns.es.js +5 -3
- package/dist/domains/dashboards/kinds/table/table-columns.es.js.map +1 -1
- package/dist/domains/dashboards/kinds/table/table-plan.cjs.js +47 -0
- package/dist/domains/dashboards/kinds/table/table-plan.cjs.js.map +1 -0
- package/dist/domains/dashboards/kinds/table/table-plan.d.ts +1 -0
- package/dist/domains/dashboards/kinds/table/table-plan.es.js +44 -0
- package/dist/domains/dashboards/kinds/table/table-plan.es.js.map +1 -0
- package/dist/domains/dashboards/kinds/table/table-tabs.cjs.js +20 -26
- package/dist/domains/dashboards/kinds/table/table-tabs.cjs.js.map +1 -1
- package/dist/domains/dashboards/kinds/table/table-tabs.es.js +22 -28
- package/dist/domains/dashboards/kinds/table/table-tabs.es.js.map +1 -1
- package/dist/domains/dashboards/kinds/table/table-view.cjs.js +13 -13
- package/dist/domains/dashboards/kinds/table/table-view.cjs.js.map +1 -1
- package/dist/domains/dashboards/kinds/table/table-view.es.js +14 -14
- package/dist/domains/dashboards/kinds/table/table-view.es.js.map +1 -1
- package/dist/domains/dashboards/kinds/table/table-widget.cjs.js +13 -17
- package/dist/domains/dashboards/kinds/table/table-widget.cjs.js.map +1 -1
- package/dist/domains/dashboards/kinds/table/table-widget.es.js +13 -17
- package/dist/domains/dashboards/kinds/table/table-widget.es.js.map +1 -1
- package/dist/domains/dashboards/kinds/table.cjs.js +4 -0
- package/dist/domains/dashboards/kinds/table.cjs.js.map +1 -1
- package/dist/domains/dashboards/kinds/table.es.js +4 -0
- package/dist/domains/dashboards/kinds/table.es.js.map +1 -1
- package/dist/domains/dashboards/kinds/timeseries/timeseries-plan.cjs.js +18 -0
- package/dist/domains/dashboards/kinds/timeseries/timeseries-plan.cjs.js.map +1 -0
- package/dist/domains/dashboards/kinds/timeseries/timeseries-plan.d.ts +1 -0
- package/dist/domains/dashboards/kinds/timeseries/timeseries-plan.es.js +16 -0
- package/dist/domains/dashboards/kinds/timeseries/timeseries-plan.es.js.map +1 -0
- package/dist/domains/dashboards/kinds/timeseries/timeseries-widget.cjs.js +22 -22
- package/dist/domains/dashboards/kinds/timeseries/timeseries-widget.cjs.js.map +1 -1
- package/dist/domains/dashboards/kinds/timeseries/timeseries-widget.es.js +25 -25
- package/dist/domains/dashboards/kinds/timeseries/timeseries-widget.es.js.map +1 -1
- package/dist/domains/dashboards/kinds/timeseries.cjs.js +3 -0
- package/dist/domains/dashboards/kinds/timeseries.cjs.js.map +1 -1
- package/dist/domains/dashboards/kinds/timeseries.es.js +3 -0
- package/dist/domains/dashboards/kinds/timeseries.es.js.map +1 -1
- package/dist/domains/dashboards/lib/alert-actions.cjs.js +123 -0
- package/dist/domains/dashboards/lib/alert-actions.cjs.js.map +1 -0
- package/dist/domains/dashboards/lib/alert-actions.d.ts +1 -0
- package/dist/domains/dashboards/lib/alert-actions.es.js +118 -0
- package/dist/domains/dashboards/lib/alert-actions.es.js.map +1 -0
- package/dist/domains/dashboards/lib/gate.cjs.js +62 -0
- package/dist/domains/dashboards/lib/gate.cjs.js.map +1 -0
- package/dist/domains/dashboards/lib/gate.d.ts +1 -0
- package/dist/domains/dashboards/lib/gate.es.js +60 -0
- package/dist/domains/dashboards/lib/gate.es.js.map +1 -0
- package/dist/domains/dashboards/lib/plan-widget.cjs.js +41 -0
- package/dist/domains/dashboards/lib/plan-widget.cjs.js.map +1 -0
- package/dist/domains/dashboards/lib/plan-widget.d.ts +1 -0
- package/dist/domains/dashboards/lib/plan-widget.es.js +38 -0
- package/dist/domains/dashboards/lib/plan-widget.es.js.map +1 -0
- package/dist/domains/dashboards/lib/requests.cjs.js +47 -0
- package/dist/domains/dashboards/lib/requests.cjs.js.map +1 -1
- package/dist/domains/dashboards/lib/requests.es.js +46 -1
- package/dist/domains/dashboards/lib/requests.es.js.map +1 -1
- package/dist/domains/dashboards/lib/scores.cjs.js +32 -0
- package/dist/domains/dashboards/lib/scores.cjs.js.map +1 -1
- package/dist/domains/dashboards/lib/scores.es.js +31 -1
- package/dist/domains/dashboards/lib/scores.es.js.map +1 -1
- package/dist/domains/dashboards/lib/timeseries.cjs.js +17 -0
- package/dist/domains/dashboards/lib/timeseries.cjs.js.map +1 -1
- package/dist/domains/dashboards/lib/timeseries.es.js +17 -1
- package/dist/domains/dashboards/lib/timeseries.es.js.map +1 -1
- package/dist/domains/dashboards/lib/values.cjs.js.map +1 -1
- package/dist/domains/dashboards/lib/values.es.js.map +1 -1
- package/dist/domains/dashboards/widget-kind.cjs.js.map +1 -1
- package/dist/domains/dashboards/widget-kind.es.js.map +1 -1
- package/dist/domains/dashboards.cjs.js +19 -2
- package/dist/domains/dashboards.es.js +9 -5
- package/dist/domains/datasets/components/add-dataset-item-dialog/add-dataset-item-dialog.cjs.js +1 -1
- package/dist/domains/datasets/components/add-dataset-item-dialog/add-dataset-item-dialog.es.js +1 -1
- package/dist/domains/datasets/components/add-dataset-item-dialog/trajectory-editor.cjs.js +2 -2
- package/dist/domains/datasets/components/add-dataset-item-dialog/trajectory-editor.es.js +2 -2
- package/dist/domains/datasets/components/save-as-dataset-item-dialog.cjs.js +2 -2
- package/dist/domains/datasets/components/save-as-dataset-item-dialog.es.js +2 -2
- package/dist/domains/knowledge/components/KnowledgePageDetail.cjs.js +186 -212
- package/dist/domains/knowledge/components/KnowledgePageDetail.cjs.js.map +1 -1
- package/dist/domains/knowledge/components/KnowledgePageDetail.es.js +188 -215
- package/dist/domains/knowledge/components/KnowledgePageDetail.es.js.map +1 -1
- package/dist/domains/knowledge/components/KnowledgePageExplorer.cjs.js +620 -268
- package/dist/domains/knowledge/components/KnowledgePageExplorer.cjs.js.map +1 -1
- package/dist/domains/knowledge/components/KnowledgePageExplorer.es.js +622 -270
- package/dist/domains/knowledge/components/KnowledgePageExplorer.es.js.map +1 -1
- package/dist/domains/knowledge/components/KnowledgePageGraph.cjs.js +544 -454
- package/dist/domains/knowledge/components/KnowledgePageGraph.cjs.js.map +1 -1
- package/dist/domains/knowledge/components/KnowledgePageGraph.es.js +548 -458
- package/dist/domains/knowledge/components/KnowledgePageGraph.es.js.map +1 -1
- package/dist/domains/knowledge/components/KnowledgePageTree.cjs.js +21 -12
- package/dist/domains/knowledge/components/KnowledgePageTree.cjs.js.map +1 -1
- package/dist/domains/knowledge/components/KnowledgePageTree.es.js +22 -13
- package/dist/domains/knowledge/components/KnowledgePageTree.es.js.map +1 -1
- package/dist/domains/knowledge/components/KnowledgeSourceIcon.cjs.js +16 -0
- package/dist/domains/knowledge/components/KnowledgeSourceIcon.cjs.js.map +1 -0
- package/dist/domains/knowledge/components/KnowledgeSourceIcon.d.ts +1 -0
- package/dist/domains/knowledge/components/KnowledgeSourceIcon.es.js +15 -0
- package/dist/domains/knowledge/components/KnowledgeSourceIcon.es.js.map +1 -0
- package/dist/domains/knowledge/components/KnowledgeTooltip.cjs.js +10 -0
- package/dist/domains/knowledge/components/KnowledgeTooltip.cjs.js.map +1 -0
- package/dist/domains/knowledge/components/KnowledgeTooltip.d.ts +1 -0
- package/dist/domains/knowledge/components/KnowledgeTooltip.es.js +9 -0
- package/dist/domains/knowledge/components/KnowledgeTooltip.es.js.map +1 -0
- package/dist/domains/knowledge/lib/fitViewport.cjs.js +22 -8
- package/dist/domains/knowledge/lib/fitViewport.cjs.js.map +1 -1
- package/dist/domains/knowledge/lib/fitViewport.es.js +22 -9
- package/dist/domains/knowledge/lib/fitViewport.es.js.map +1 -1
- package/dist/domains/knowledge/lib/pageAddress.cjs.js +51 -0
- package/dist/domains/knowledge/lib/pageAddress.cjs.js.map +1 -1
- package/dist/domains/knowledge/lib/pageAddress.es.js +50 -1
- package/dist/domains/knowledge/lib/pageAddress.es.js.map +1 -1
- package/dist/domains/knowledge/lib/pageRefs.cjs.js +43 -2
- package/dist/domains/knowledge/lib/pageRefs.cjs.js.map +1 -1
- package/dist/domains/knowledge/lib/pageRefs.es.js +43 -3
- package/dist/domains/knowledge/lib/pageRefs.es.js.map +1 -1
- package/dist/domains/knowledge/lib/pagesByRefContext.cjs.js +10 -0
- package/dist/domains/knowledge/lib/pagesByRefContext.cjs.js.map +1 -0
- package/dist/domains/knowledge/lib/pagesByRefContext.d.ts +1 -0
- package/dist/domains/knowledge/lib/pagesByRefContext.es.js +10 -0
- package/dist/domains/knowledge/lib/pagesByRefContext.es.js.map +1 -0
- package/dist/domains/logs/components/log-data-panel.cjs.js +1 -1
- package/dist/domains/logs/components/log-data-panel.es.js +1 -1
- package/dist/domains/logs/components/logs-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/mcps/components/mcp-app-tool-result.cjs.js +28 -3
- package/dist/domains/mcps/components/mcp-app-tool-result.cjs.js.map +1 -1
- package/dist/domains/mcps/components/mcp-app-tool-result.es.js +27 -2
- package/dist/domains/mcps/components/mcp-app-tool-result.es.js.map +1 -1
- package/dist/domains/mcps/components/mcp-app-viewer.cjs.js +163 -2
- package/dist/domains/mcps/components/mcp-app-viewer.cjs.js.map +1 -0
- package/dist/domains/mcps/components/mcp-app-viewer.es.js +163 -1
- package/dist/domains/mcps/components/mcp-app-viewer.es.js.map +1 -0
- package/dist/domains/mcps/context/mcp-app-host-context-value.cjs.js +11 -0
- package/dist/domains/mcps/context/mcp-app-host-context-value.cjs.js.map +1 -0
- package/dist/domains/mcps/context/mcp-app-host-context-value.d.ts +1 -0
- package/dist/domains/mcps/context/mcp-app-host-context-value.es.js +9 -0
- package/dist/domains/mcps/context/mcp-app-host-context-value.es.js.map +1 -0
- package/dist/domains/mcps/context/mcp-app-host-context.cjs.js +14 -0
- package/dist/domains/mcps/context/mcp-app-host-context.cjs.js.map +1 -0
- package/dist/domains/mcps/context/mcp-app-host-context.d.ts +1 -0
- package/dist/domains/mcps/context/mcp-app-host-context.es.js +13 -0
- package/dist/domains/mcps/context/mcp-app-host-context.es.js.map +1 -0
- package/dist/domains/mcps/hooks/use-mcp-app-tool-call.cjs.js +2 -1
- package/dist/domains/mcps/hooks/use-mcp-app-tool-call.cjs.js.map +1 -1
- package/dist/domains/mcps/hooks/use-mcp-app-tool-call.es.js +2 -1
- package/dist/domains/mcps/hooks/use-mcp-app-tool-call.es.js.map +1 -1
- package/dist/domains/mcps.cjs.js +5 -0
- package/dist/domains/mcps.d.ts +1 -0
- package/dist/domains/mcps.es.js +3 -0
- package/dist/domains/metrics/components/agent-runs-card.cjs.js +1 -1
- package/dist/domains/metrics/components/agent-runs-card.es.js +1 -1
- package/dist/domains/metrics/components/breakdown/breakdown-tab-body.cjs.js +1 -1
- package/dist/domains/metrics/components/breakdown/breakdown-tab-body.es.js +1 -1
- package/dist/domains/metrics/components/breakdown-card.cjs.js +1 -1
- package/dist/domains/metrics/components/breakdown-card.es.js +1 -1
- package/dist/domains/metrics/components/chart-area.cjs.js +1 -1
- package/dist/domains/metrics/components/chart-area.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/chart-card.cjs.js +1 -1
- package/dist/domains/metrics/components/chart-card.es.js +1 -1
- package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
- package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
- package/dist/domains/metrics/components/distinct-ids/distinct-ids-chart.cjs.js +1 -1
- package/dist/domains/metrics/components/distinct-ids/distinct-ids-chart.es.js +1 -1
- package/dist/domains/metrics/components/failure-rate-card.cjs.js +1 -1
- package/dist/domains/metrics/components/failure-rate-card.es.js +1 -1
- package/dist/domains/metrics/components/latency-card.cjs.js +1 -1
- package/dist/domains/metrics/components/latency-card.es.js +1 -1
- package/dist/domains/metrics/components/metrics-time-range-chip.cjs.js +1 -1
- package/dist/domains/metrics/components/metrics-time-range-chip.es.js +1 -1
- package/dist/domains/metrics/components/token-usage-card.cjs.js +1 -1
- package/dist/domains/metrics/components/token-usage-card.es.js +1 -1
- package/dist/domains/metrics/components/trace-aggregate-card.cjs.js +1 -1
- package/dist/domains/metrics/components/trace-aggregate-card.es.js +1 -1
- package/dist/domains/metrics.cjs.js +3 -3
- package/dist/domains/metrics.es.js +3 -3
- 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.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 +1 -1
- package/dist/domains/scores/components/score-data-panel.es.js +1 -1
- package/dist/domains/scores/components/span-scoring.cjs.js +1 -1
- package/dist/domains/scores/components/span-scoring.es.js +1 -1
- package/dist/domains/scores/components/trace-scores-list.cjs.js +1 -1
- package/dist/domains/scores/components/trace-scores-list.es.js +1 -1
- package/dist/domains/skills/skill-simple-form.cjs.js +3 -3
- package/dist/domains/skills/skill-simple-form.es.js +3 -3
- package/dist/domains/spans/components/spans-explorer-body.cjs.js +1 -1
- package/dist/domains/spans/components/spans-explorer-body.es.js +1 -1
- package/dist/domains/spans/components/spans-filter-bar.cjs.js +2 -2
- package/dist/domains/spans/components/spans-filter-bar.es.js +2 -2
- package/dist/domains/spans/hooks/use-spans-filter-bar.cjs.js +1 -1
- package/dist/domains/spans/hooks/use-spans-filter-bar.es.js +1 -1
- package/dist/domains/threads/components/threads-explorer-body.cjs.js +1 -1
- package/dist/domains/threads/components/threads-explorer-body.es.js +1 -1
- package/dist/domains/threads/components/threads-filter-bar.cjs.js +2 -2
- package/dist/domains/threads/components/threads-filter-bar.es.js +2 -2
- package/dist/domains/threads/hooks/use-threads-filter-bar.cjs.js +1 -1
- package/dist/domains/threads/hooks/use-threads-filter-bar.es.js +1 -1
- package/dist/domains/traces/components/feedback-options.cjs.js +0 -0
- package/dist/domains/traces/components/feedback-options.d.ts +1 -0
- package/dist/domains/traces/components/feedback-options.es.js +0 -0
- package/dist/domains/traces/components/feedback-thread.cjs.js +10 -4
- package/dist/domains/traces/components/feedback-thread.cjs.js.map +1 -1
- package/dist/domains/traces/components/feedback-thread.es.js +10 -4
- package/dist/domains/traces/components/feedback-thread.es.js.map +1 -1
- package/dist/domains/traces/components/span-data-panel-view.cjs.js +2 -2
- package/dist/domains/traces/components/span-data-panel-view.es.js +2 -2
- package/dist/domains/traces/components/span-details-view.cjs.js +1 -1
- package/dist/domains/traces/components/span-details-view.es.js +1 -1
- package/dist/domains/traces/components/span-feedback-tab.cjs.js +8 -5
- package/dist/domains/traces/components/span-feedback-tab.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-feedback-tab.es.js +8 -5
- package/dist/domains/traces/components/span-feedback-tab.es.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +2 -2
- package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-json.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-json.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +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-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-view-by-trace.cjs.js +5 -3
- package/dist/domains/traces/components/thread-view-by-trace.cjs.js.map +1 -1
- package/dist/domains/traces/components/thread-view-by-trace.es.js +5 -3
- package/dist/domains/traces/components/thread-view-by-trace.es.js.map +1 -1
- package/dist/domains/traces/components/trace-columns-menu.cjs.js +2 -2
- package/dist/domains/traces/components/trace-columns-menu.es.js +2 -2
- package/dist/domains/traces/components/trace-data-panel-view.cjs.js +2 -2
- package/dist/domains/traces/components/trace-data-panel-view.es.js +2 -2
- 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-feedback-tab.cjs.js +9 -4
- package/dist/domains/traces/components/trace-feedback-tab.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-feedback-tab.es.js +9 -4
- package/dist/domains/traces/components/trace-feedback-tab.es.js.map +1 -1
- package/dist/domains/traces/components/trace-id-button.cjs.js +1 -1
- package/dist/domains/traces/components/trace-id-button.es.js +1 -1
- package/dist/domains/traces/components/trace-span-panel.cjs.js +2 -1
- package/dist/domains/traces/components/trace-span-panel.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-span-panel.es.js +2 -1
- package/dist/domains/traces/components/trace-span-panel.es.js.map +1 -1
- package/dist/domains/traces/components/trace-summary-description.cjs.js +1 -1
- package/dist/domains/traces/components/trace-summary-description.es.js +1 -1
- package/dist/domains/traces/components/trace-thread-panel.cjs.js +3 -2
- package/dist/domains/traces/components/trace-thread-panel.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-thread-panel.es.js +3 -2
- package/dist/domains/traces/components/trace-thread-panel.es.js.map +1 -1
- package/dist/domains/traces/components/traces-explorer/traces-explorer-context.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-explorer/traces-explorer-context.es.js.map +1 -1
- package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.cjs.js +2 -2
- package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.es.js +2 -2
- package/dist/domains/traces/components/traces-explorer/traces-explorer-panel.cjs.js +8 -3
- package/dist/domains/traces/components/traces-explorer/traces-explorer-panel.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-explorer/traces-explorer-panel.es.js +8 -3
- package/dist/domains/traces/components/traces-explorer/traces-explorer-panel.es.js.map +1 -1
- package/dist/domains/traces/components/traces-explorer/traces-explorer-root.cjs.js +14 -1
- package/dist/domains/traces/components/traces-explorer/traces-explorer-root.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-explorer/traces-explorer-root.es.js +14 -1
- package/dist/domains/traces/components/traces-explorer/traces-explorer-root.es.js.map +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 +1 -1
- package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.es.js +1 -1
- package/dist/domains/traces/components/traces-explorer.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-explorer.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 +1 -1
- package/dist/domains/traces/components/traces-list-view.es.js +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/workflows/components/workflow-combobox.cjs.js +1 -1
- package/dist/domains/workflows/components/workflow-combobox.es.js +1 -1
- package/dist/domains/workflows/components/workflow-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/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 +1 -1
- package/dist/domains/workflows/workflow/data/workflow-data-inspector.es.js +1 -1
- 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/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/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-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-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 +1 -1
- package/dist/domains/workflows/workflow/workflow-map-config-dialog.es.js +1 -1
- 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-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 +1 -1
- package/dist/domains/workflows/workflow/workflow-step-action-bar.es.js +1 -1
- 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 +1 -1
- package/dist/domains/workflows/workflow/workflow-suspended-steps.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-time-travel-form.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-time-travel-form.es.js +1 -1
- package/dist/domains/workspace/components/workspace-add-skill-dialog.cjs.js +1 -1
- package/dist/domains/workspace/components/workspace-add-skill-dialog.es.js +1 -1
- package/dist/domains/workspace/components/workspace-create-directory.cjs.js +1 -1
- package/dist/domains/workspace/components/workspace-create-directory.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/{dropdown-menu-Dx-jCOIv.cjs → dropdown-menu-D3D8USIY.cjs} +9 -1
- package/dist/dropdown-menu-D3D8USIY.cjs.map +1 -0
- package/dist/{dropdown-menu-DKoWI8kD.js → dropdown-menu-jsf9D-J_.js} +9 -1
- package/dist/dropdown-menu-jsf9D-J_.js.map +1 -0
- 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 +1 -1
- package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +1 -1
- package/dist/ee/signals/settings/trace-signal-settings.cjs.js +1 -1
- package/dist/ee/signals/settings/trace-signal-settings.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/{filter-bar-chip-NBtfDca9.js → filter-bar-chip-Cz5GYBWP.js} +2 -2
- package/dist/{filter-bar-chip-NBtfDca9.js.map → filter-bar-chip-Cz5GYBWP.js.map} +1 -1
- package/dist/{filter-bar-chip-DFsbUZ-V.cjs → filter-bar-chip-q2Zr-cnY.cjs} +2 -2
- package/dist/{filter-bar-chip-DFsbUZ-V.cjs.map → filter-bar-chip-q2Zr-cnY.cjs.map} +1 -1
- package/dist/{filter-bar-time-range-DlVNjw43.cjs → filter-bar-time-range-D4C3kU0J.cjs} +3 -3
- package/dist/{filter-bar-time-range-DlVNjw43.cjs.map → filter-bar-time-range-D4C3kU0J.cjs.map} +1 -1
- package/dist/{filter-bar-time-range-D9SnzR2J.js → filter-bar-time-range-ao2YiYEJ.js} +3 -3
- package/dist/{filter-bar-time-range-D9SnzR2J.js.map → filter-bar-time-range-ao2YiYEJ.js.map} +1 -1
- package/dist/icons/ConfluenceIcon.cjs.js +18 -0
- package/dist/icons/ConfluenceIcon.cjs.js.map +1 -0
- package/dist/icons/ConfluenceIcon.d.ts +1 -0
- package/dist/icons/ConfluenceIcon.es.js +15 -0
- package/dist/icons/ConfluenceIcon.es.js.map +1 -0
- package/dist/icons/NotionIcon.cjs.js +18 -0
- package/dist/icons/NotionIcon.cjs.js.map +1 -0
- package/dist/icons/NotionIcon.d.ts +1 -0
- package/dist/icons/NotionIcon.es.js +15 -0
- package/dist/icons/NotionIcon.es.js.map +1 -0
- package/dist/icons/ZendeskIcon.cjs.js +18 -0
- package/dist/icons/ZendeskIcon.cjs.js.map +1 -0
- package/dist/icons/ZendeskIcon.d.ts +1 -0
- package/dist/icons/ZendeskIcon.es.js +15 -0
- package/dist/icons/ZendeskIcon.es.js.map +1 -0
- package/dist/{input-Cyit5ZSc.js → input-BNykbvOz.js} +2 -2
- package/dist/input-BNykbvOz.js.map +1 -0
- package/dist/{input-BpnUsQSt.cjs → input-D_V0m95F.cjs} +2 -2
- package/dist/input-D_V0m95F.cjs.map +1 -0
- package/dist/{input-group-NV4ZzKOk.js → input-group-CCSyY4J5.js} +3 -3
- package/dist/{input-group-NV4ZzKOk.js.map → input-group-CCSyY4J5.js.map} +1 -1
- package/dist/{input-group-DBCilXjT.cjs → input-group-Da8HBo30.cjs} +3 -3
- package/dist/{input-group-DBCilXjT.cjs.map → input-group-Da8HBo30.cjs.map} +1 -1
- package/dist/layout/tabbed-container.cjs.js +1 -1
- package/dist/layout/tabbed-container.es.js +1 -1
- package/dist/lib/form/components/number-field.cjs.js +1 -1
- package/dist/lib/form/components/number-field.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/{observability-saved-views-DgABvgat.cjs → observability-saved-views-CzRPN_9m.cjs} +4 -4
- package/dist/{observability-saved-views-DgABvgat.cjs.map → observability-saved-views-CzRPN_9m.cjs.map} +1 -1
- package/dist/{observability-saved-views-Ch53fh5_.js → observability-saved-views-hu_hkXVY.js} +4 -4
- package/dist/{observability-saved-views-Ch53fh5_.js.map → observability-saved-views-hu_hkXVY.js.map} +1 -1
- package/dist/primitives/menu-item.cjs.js +1 -1
- package/dist/primitives/menu-item.cjs.js.map +1 -1
- package/dist/primitives/menu-item.es.js +1 -1
- package/dist/primitives/menu-item.es.js.map +1 -1
- package/dist/{property-filter-applied-DuyL4S_K.cjs → property-filter-applied-ML84st6J.cjs} +3 -3
- package/dist/{property-filter-applied-DuyL4S_K.cjs.map → property-filter-applied-ML84st6J.cjs.map} +1 -1
- package/dist/{property-filter-applied-DoxQHG09.js → property-filter-applied-PaJ7sLsM.js} +3 -3
- package/dist/{property-filter-applied-DoxQHG09.js.map → property-filter-applied-PaJ7sLsM.js.map} +1 -1
- package/dist/{span-payload-primitives-D2NWznGy.cjs → span-payload-primitives-CL3hlirm.cjs} +3 -3
- package/dist/{span-payload-primitives-D2NWznGy.cjs.map → span-payload-primitives-CL3hlirm.cjs.map} +1 -1
- package/dist/{span-payload-primitives-BKkRpVVO.js → span-payload-primitives-KxqoXspn.js} +3 -3
- package/dist/{span-payload-primitives-BKkRpVVO.js.map → span-payload-primitives-KxqoXspn.js.map} +1 -1
- package/dist/src/domains/dashboards/components/connected-widget.d.ts +9 -0
- package/dist/src/domains/dashboards/components/dashboard-renderer.d.ts +9 -2
- package/dist/src/domains/dashboards/components/stateless-widget.d.ts +40 -0
- package/dist/src/domains/dashboards/components/view-gate.d.ts +2 -10
- package/dist/src/domains/dashboards/components/widget-controls.d.ts +25 -1
- package/dist/src/domains/dashboards/hooks/use-dashboard-environment.d.ts +8 -0
- package/dist/src/domains/dashboards/hooks/use-dashboard-requests.d.ts +11 -1
- package/dist/src/domains/dashboards/hooks/use-widget-views.d.ts +8 -2
- package/dist/src/domains/dashboards/index.d.ts +14 -6
- package/dist/src/domains/dashboards/kinds/kpis/kpis-plan.d.ts +355 -0
- package/dist/src/domains/dashboards/kinds/kpis/kpis-widget.d.ts +1 -1
- package/dist/src/domains/dashboards/kinds/scores/scores-plan.d.ts +358 -0
- package/dist/src/domains/dashboards/kinds/scores/scores-widget.d.ts +1 -1
- package/dist/src/domains/dashboards/kinds/table/table-cells.d.ts +6 -2
- package/dist/src/domains/dashboards/kinds/table/table-columns.d.ts +2 -1
- package/dist/src/domains/dashboards/kinds/table/table-plan.d.ts +18 -0
- package/dist/src/domains/dashboards/kinds/table/table-tabs.d.ts +1 -1
- package/dist/src/domains/dashboards/kinds/table/table-view.d.ts +1 -0
- package/dist/src/domains/dashboards/kinds/timeseries/timeseries-plan.d.ts +355 -0
- package/dist/src/domains/dashboards/lib/alert-actions.d.ts +36 -0
- package/dist/src/domains/dashboards/lib/gate.d.ts +65 -0
- package/dist/src/domains/dashboards/lib/plan-widget.d.ts +390 -0
- package/dist/src/domains/dashboards/lib/requests.d.ts +22 -0
- package/dist/src/domains/dashboards/lib/scores.d.ts +11 -1
- package/dist/src/domains/dashboards/lib/timeseries.d.ts +6 -1
- package/dist/src/domains/dashboards/lib/values.d.ts +5 -0
- package/dist/src/domains/dashboards/widget-kind.d.ts +105 -2
- package/dist/src/domains/knowledge/components/KnowledgePageDetail.d.ts +7 -1
- package/dist/src/domains/knowledge/components/KnowledgePageExplorer.d.ts +4 -1
- package/dist/src/domains/knowledge/components/KnowledgePageGraph.d.ts +3 -0
- package/dist/src/domains/knowledge/components/KnowledgeSourceIcon.d.ts +5 -0
- package/dist/src/domains/knowledge/components/KnowledgeTooltip.d.ts +5 -0
- package/dist/src/domains/knowledge/lib/fitViewport.d.ts +9 -2
- package/dist/src/domains/knowledge/lib/pageAddress.d.ts +10 -0
- package/dist/src/domains/knowledge/lib/pageRefs.d.ts +12 -1
- package/dist/src/domains/knowledge/lib/pagesByRefContext.d.ts +6 -0
- package/dist/src/domains/mcps/components/mcp-app-tool-result.d.ts +3 -1
- package/dist/src/domains/mcps/components/mcp-app-viewer.d.ts +6 -1
- package/dist/src/domains/mcps/context/mcp-app-host-context-value.d.ts +23 -0
- package/dist/src/domains/mcps/context/mcp-app-host-context.d.ts +7 -0
- package/dist/src/domains/mcps/index.d.ts +3 -0
- package/dist/src/domains/traces/components/feedback-options.d.ts +8 -0
- package/dist/src/domains/traces/components/feedback-thread.d.ts +2 -1
- package/dist/src/domains/traces/components/span-feedback-tab.d.ts +4 -2
- package/dist/src/domains/traces/components/thread-view-by-trace.d.ts +4 -1
- package/dist/src/domains/traces/components/trace-feedback-tab.d.ts +4 -2
- package/dist/src/domains/traces/components/trace-span-panel.d.ts +3 -1
- package/dist/src/domains/traces/components/trace-thread-panel.d.ts +3 -1
- package/dist/src/domains/traces/components/traces-explorer/index.d.ts +1 -0
- package/dist/src/domains/traces/components/traces-explorer/traces-explorer-context.d.ts +2 -0
- package/dist/src/domains/traces/components/traces-explorer/traces-explorer-root.d.ts +4 -1
- package/dist/src/ds/components/Breadcrumb/Breadcrumb.d.ts +2 -0
- package/dist/src/ds/components/DropdownMenu/dropdown-menu.d.ts +3 -0
- package/dist/src/ds/components/Tree/tree-label.d.ts +1 -1
- package/dist/src/ds/icons/ConfluenceIcon.d.ts +2 -0
- package/dist/src/ds/icons/NotionIcon.d.ts +2 -0
- package/dist/src/ds/icons/ZendeskIcon.d.ts +2 -0
- package/dist/src/ds/icons/index.d.ts +3 -0
- package/dist/src/utils/mcp-app-context.d.ts +6 -0
- package/dist/style.css +85 -35
- package/dist/{tabbed-container-Bhfi-DWr.cjs → tabbed-container-BMLD6mvc.cjs} +4 -4
- package/dist/{tabbed-container-Bhfi-DWr.cjs.map → tabbed-container-BMLD6mvc.cjs.map} +1 -1
- package/dist/{tabbed-container-DOkHshha.js → tabbed-container-CaS8cZCS.js} +4 -4
- package/dist/{tabbed-container-DOkHshha.js.map → tabbed-container-CaS8cZCS.js.map} +1 -1
- package/dist/{tabs-content-DwU_eA-a.js → tabs-content-BGkPZ5EQ.js} +2 -2
- package/dist/{tabs-content-DwU_eA-a.js.map → tabs-content-BGkPZ5EQ.js.map} +1 -1
- package/dist/{tabs-content-BACwMrMG.cjs → tabs-content-D_ic2ZqI.cjs} +2 -2
- package/dist/{tabs-content-BACwMrMG.cjs.map → tabs-content-D_ic2ZqI.cjs.map} +1 -1
- package/dist/{tabs-tab-BHs639jL.js → tabs-tab-CJVS0WED.js} +2 -2
- package/dist/{tabs-tab-BHs639jL.js.map → tabs-tab-CJVS0WED.js.map} +1 -1
- package/dist/{tabs-tab-CANh2eAD.cjs → tabs-tab-Dj2huH5T.cjs} +2 -2
- package/dist/{tabs-tab-CANh2eAD.cjs.map → tabs-tab-Dj2huH5T.cjs.map} +1 -1
- package/dist/{tool-approval-CguPaikn.cjs → tool-approval-C4WNL8VD.cjs} +3 -3
- package/dist/{tool-approval-CguPaikn.cjs.map → tool-approval-C4WNL8VD.cjs.map} +1 -1
- package/dist/{tool-approval-Cjz0yAzw.js → tool-approval-ZfL3-Vvi.js} +3 -3
- package/dist/{tool-approval-Cjz0yAzw.js.map → tool-approval-ZfL3-Vvi.js.map} +1 -1
- package/dist/{tool-call-ChJKYCfu.js → tool-call-BLzYTI-x.js} +2 -2
- package/dist/{tool-call-ChJKYCfu.js.map → tool-call-BLzYTI-x.js.map} +1 -1
- package/dist/{tool-call-BqDI9mrY.cjs → tool-call-C4TBpJ6Y.cjs} +2 -2
- package/dist/{tool-call-BqDI9mrY.cjs.map → tool-call-C4TBpJ6Y.cjs.map} +1 -1
- package/dist/{tool-card-GSiCfxMz.js → tool-card-CM0aHG3p.js} +4 -3
- package/dist/{tool-card-GSiCfxMz.js.map → tool-card-CM0aHG3p.js.map} +1 -1
- package/dist/{tool-card-Dg4VOYV6.cjs → tool-card-xDlCD0m6.cjs} +4 -3
- package/dist/{tool-card-Dg4VOYV6.cjs.map → tool-card-xDlCD0m6.cjs.map} +1 -1
- package/dist/{mcp-app-viewer-BV7FI498.js → types-BwdKiX24.js} +2 -144
- package/dist/types-BwdKiX24.js.map +1 -0
- package/dist/{mcp-app-viewer-M3-pqAlo.cjs → types-KjLUPShK.cjs} +8 -144
- package/dist/types-KjLUPShK.cjs.map +1 -0
- package/dist/{use-workflow-graph-runtime-BfCL6nd4.cjs → use-workflow-graph-runtime-DEJA9rk4.cjs} +2 -2
- package/dist/{use-workflow-graph-runtime-BfCL6nd4.cjs.map → use-workflow-graph-runtime-DEJA9rk4.cjs.map} +1 -1
- package/dist/{use-workflow-graph-runtime-B3VUuhUE.js → use-workflow-graph-runtime-DHOsA1DM.js} +2 -2
- package/dist/{use-workflow-graph-runtime-B3VUuhUE.js.map → use-workflow-graph-runtime-DHOsA1DM.js.map} +1 -1
- package/dist/utils/mcp-app-context.cjs.js +17 -0
- package/dist/utils/mcp-app-context.cjs.js.map +1 -0
- package/dist/utils/mcp-app-context.d.ts +1 -0
- package/dist/utils/mcp-app-context.es.js +15 -0
- package/dist/utils/mcp-app-context.es.js.map +1 -0
- package/package.json +8 -8
- package/dist/Composer-bVE8qK52.js.map +0 -1
- package/dist/Composer-u1K6edoZ.cjs.map +0 -1
- package/dist/FilterBar-Kmn6gMgO.js.map +0 -1
- package/dist/FilterBar-jBz6yaNu.cjs.map +0 -1
- package/dist/MetricsCard-DojbLiEx.cjs.map +0 -1
- package/dist/MetricsCard-kAqSCPPe.js.map +0 -1
- package/dist/Tree-Caz4FTCU.cjs.map +0 -1
- package/dist/Tree-od43gLMO.js.map +0 -1
- package/dist/combobox-parts-BeNqgCbj.cjs.map +0 -1
- package/dist/combobox-parts-C9o4UfH_.js.map +0 -1
- package/dist/domains/dashboards/hooks/use-scorers.cjs.js +0 -41
- package/dist/domains/dashboards/hooks/use-scorers.cjs.js.map +0 -1
- package/dist/domains/dashboards/hooks/use-scorers.d.ts +0 -1
- package/dist/domains/dashboards/hooks/use-scorers.es.js +0 -40
- package/dist/domains/dashboards/hooks/use-scorers.es.js.map +0 -1
- package/dist/dropdown-menu-DKoWI8kD.js.map +0 -1
- package/dist/dropdown-menu-Dx-jCOIv.cjs.map +0 -1
- package/dist/input-BpnUsQSt.cjs.map +0 -1
- package/dist/input-Cyit5ZSc.js.map +0 -1
- package/dist/mcp-app-viewer-BV7FI498.js.map +0 -1
- package/dist/mcp-app-viewer-M3-pqAlo.cjs.map +0 -1
- package/dist/src/domains/dashboards/hooks/use-scorers.d.ts +0 -66
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_domains_dashboards_components_widget_controls = require("../components/widget-controls.cjs.js");
|
|
3
|
+
const require_domains_dashboards_lib_chrome = require("./chrome.cjs.js");
|
|
4
|
+
const require_domains_dashboards_lib_requests = require("./requests.cjs.js");
|
|
5
|
+
const require_domains_dashboards_lib_values = require("./values.cjs.js");
|
|
6
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
7
|
+
// src/domains/dashboards/lib/alert-actions.tsx
|
|
8
|
+
var UNSATISFIABLE_ALERT = "The page's filters exclude everything this card shows.";
|
|
9
|
+
/** `p95` for 0.95: percentiles as people name them. */
|
|
10
|
+
var percentileName = (p) => `p${Math.round(p * 1e3) / 10}`;
|
|
11
|
+
/** What a ref picks from its query, beyond the query itself: `(countDistinct.threadId)`, `(p95)`. */
|
|
12
|
+
function refDetail(ref) {
|
|
13
|
+
const parts = [
|
|
14
|
+
ref.measure,
|
|
15
|
+
ref.field,
|
|
16
|
+
ref.percentile === void 0 ? void 0 : percentileName(ref.percentile),
|
|
17
|
+
ref.groups?.join(", "),
|
|
18
|
+
ref.notGroups && `not ${ref.notGroups.join(", ")}`
|
|
19
|
+
].filter((p) => p !== void 0);
|
|
20
|
+
return parts.length ? ` (${parts.join(", ")})` : "";
|
|
21
|
+
}
|
|
22
|
+
var refKey = ({ query, measure, field, percentile, groups, notGroups }) => JSON.stringify([
|
|
23
|
+
query,
|
|
24
|
+
measure,
|
|
25
|
+
field,
|
|
26
|
+
percentile,
|
|
27
|
+
groups,
|
|
28
|
+
notGroups
|
|
29
|
+
]);
|
|
30
|
+
/**
|
|
31
|
+
* Each distinct ref the view's values read, labelled: by the label of a value that is just that ref
|
|
32
|
+
* if there is one, else as a part of the first combined value reading it (the value's label, its
|
|
33
|
+
* query and what it picks). In the order the values first read them.
|
|
34
|
+
*/
|
|
35
|
+
function alertRefs(values) {
|
|
36
|
+
const own = /* @__PURE__ */ new Map();
|
|
37
|
+
for (const { label, value } of values) if ("query" in value && !own.has(refKey(value))) own.set(refKey(value), label);
|
|
38
|
+
const seen = /* @__PURE__ */ new Set();
|
|
39
|
+
return values.flatMap(({ label, value }) => require_domains_dashboards_lib_values.exprRefs(value).flatMap((ref) => {
|
|
40
|
+
const key = refKey(ref);
|
|
41
|
+
if (seen.has(key)) return [];
|
|
42
|
+
seen.add(key);
|
|
43
|
+
const { query: _query, ...rest } = ref;
|
|
44
|
+
return [{
|
|
45
|
+
label: own.get(key) ?? `${label}: ${ref.query}${refDetail(rest)}`,
|
|
46
|
+
ref
|
|
47
|
+
}];
|
|
48
|
+
}));
|
|
49
|
+
}
|
|
50
|
+
/** Each source's action, the host's for those it was asked about, in the view's order. */
|
|
51
|
+
function entries(located, answers) {
|
|
52
|
+
let asked = 0;
|
|
53
|
+
return located.flatMap(({ label, query }) => {
|
|
54
|
+
const action = query === "unsatisfiable" ? { disabled: UNSATISFIABLE_ALERT } : answers[asked++];
|
|
55
|
+
return action ? [{
|
|
56
|
+
label,
|
|
57
|
+
action
|
|
58
|
+
}] : [];
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* The open view's Create alert button, or nothing without an `alert` host. A view the page's filters
|
|
63
|
+
* block, or contradict, gets a disabled button saying so; otherwise the host decides, for the whole
|
|
64
|
+
* card or per source. A source whose query the page's filters contradict is disabled on its own.
|
|
65
|
+
*/
|
|
66
|
+
function alertAction(alert, widget, view, source) {
|
|
67
|
+
if (!alert) return void 0;
|
|
68
|
+
const name = view.label?.trim() || widget.title?.trim();
|
|
69
|
+
const label = name ? `Create alert from ${name}` : "Create alert";
|
|
70
|
+
const button = (action) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_domains_dashboards_components_widget_controls.AlertAction, {
|
|
71
|
+
action,
|
|
72
|
+
label,
|
|
73
|
+
LinkComponent: alert.LinkComponent
|
|
74
|
+
});
|
|
75
|
+
if ("blocked" in source) return button({ disabled: require_domains_dashboards_lib_chrome.unsupportedMessage(source.blocked, source.names) });
|
|
76
|
+
const page = source.page;
|
|
77
|
+
const queries = view.queries.map((q) => require_domains_dashboards_lib_requests.pageQuery(q, page));
|
|
78
|
+
const located = alertRefs(source.values).flatMap(({ label, ref }) => {
|
|
79
|
+
const index = view.queries.findIndex((q) => q.id === ref.query);
|
|
80
|
+
const query = queries[index];
|
|
81
|
+
if (query === void 0) return [];
|
|
82
|
+
const { query: _query, ...rest } = ref;
|
|
83
|
+
return [{
|
|
84
|
+
label,
|
|
85
|
+
ref: rest,
|
|
86
|
+
query
|
|
87
|
+
}];
|
|
88
|
+
});
|
|
89
|
+
const satisfiable = located.filter((s) => s.query !== "unsatisfiable");
|
|
90
|
+
if (located.length ? satisfiable.length === 0 : queries.some((q) => q === "unsatisfiable")) return button({ disabled: UNSATISFIABLE_ALERT });
|
|
91
|
+
const action = alert.action({
|
|
92
|
+
widget,
|
|
93
|
+
view,
|
|
94
|
+
queries: queries.filter((q) => q !== "unsatisfiable"),
|
|
95
|
+
sources: satisfiable
|
|
96
|
+
});
|
|
97
|
+
if (!Array.isArray(action)) return action && button(action);
|
|
98
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_domains_dashboards_components_widget_controls.AlertMenu, {
|
|
99
|
+
entries: entries(located, action),
|
|
100
|
+
label,
|
|
101
|
+
LinkComponent: alert.LinkComponent
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
/** `heading` with `action` first among its hover actions, so it sits left of the pin. */
|
|
105
|
+
function withAction(heading, action) {
|
|
106
|
+
if (!action) return heading;
|
|
107
|
+
return {
|
|
108
|
+
...heading,
|
|
109
|
+
actions: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [action, heading.actions] })
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/** A pending card's heading: a view the page's filters block gets its disabled button, saying so. */
|
|
113
|
+
function pendingHeading(heading, gate, alert, widget, view) {
|
|
114
|
+
if (gate.status !== "unsupported-filter") return heading;
|
|
115
|
+
return withAction(heading, alertAction(alert, widget, view, { blocked: gate.unsupportedFields }));
|
|
116
|
+
}
|
|
117
|
+
exports.UNSATISFIABLE_ALERT = UNSATISFIABLE_ALERT;
|
|
118
|
+
exports.alertAction = alertAction;
|
|
119
|
+
exports.alertRefs = alertRefs;
|
|
120
|
+
exports.pendingHeading = pendingHeading;
|
|
121
|
+
exports.withAction = withAction;
|
|
122
|
+
|
|
123
|
+
//# sourceMappingURL=alert-actions.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alert-actions.cjs.js","names":["exprRefs","AlertAction","unsupportedMessage","pageQuery","AlertMenu","_Fragment"],"sources":["../../../../src/domains/dashboards/lib/alert-actions.tsx"],"sourcesContent":["import type { DashboardQuery, DashboardWidget, DashboardWidgetView } from '@mastra/client-js';\nimport type { ReactNode } from 'react';\n\nimport { AlertAction, AlertMenu } from '../components/widget-controls';\nimport type { AlertEntry } from '../components/widget-controls';\nimport type { DashboardAlert, DashboardAlertAction, DashboardAlertRef, DashboardAlertSource } from '../widget-kind';\nimport type { ViewHeading } from './chrome';\nimport { unsupportedMessage } from './chrome';\nimport type { PendingGate } from './gate';\nimport { pageQuery } from './requests';\nimport type { DashboardPageContext } from './requests';\nimport { exprRefs } from './values';\nimport type { LabelledValue, ValueRef } from './values';\n\n/** What the open view runs against: the page's filters, or the page filters its aggregates can't apply. */\nexport type AlertSource =\n | {\n page: DashboardPageContext;\n /** The view's series, columns or KPIs, each becoming the alert's sources. */\n values: LabelledValue[];\n }\n | {\n blocked: string[];\n /** The filter bar's names for `blocked`, as the card names them. */ names?: Record<string, string>;\n };\n\nexport const UNSATISFIABLE_ALERT = \"The page's filters exclude everything this card shows.\";\n\n/** `p95` for 0.95: percentiles as people name them. */\nconst percentileName = (p: number) => `p${Math.round(p * 1000) / 10}`;\n\n/** What a ref picks from its query, beyond the query itself: `(countDistinct.threadId)`, `(p95)`. */\nfunction refDetail(ref: DashboardAlertRef) {\n const parts = [\n ref.measure,\n ref.field,\n ref.percentile === undefined ? undefined : percentileName(ref.percentile),\n ref.groups?.join(', '),\n ref.notGroups && `not ${ref.notGroups.join(', ')}`,\n ].filter((p): p is string => p !== undefined);\n return parts.length ? ` (${parts.join(', ')})` : '';\n}\n\nconst refKey = ({ query, measure, field, percentile, groups, notGroups }: ValueRef) =>\n JSON.stringify([query, measure, field, percentile, groups, notGroups]);\n\n/**\n * Each distinct ref the view's values read, labelled: by the label of a value that is just that ref\n * if there is one, else as a part of the first combined value reading it (the value's label, its\n * query and what it picks). In the order the values first read them.\n */\nexport function alertRefs(values: LabelledValue[]): { label: string; ref: ValueRef }[] {\n const own = new Map<string, string>();\n for (const { label, value } of values) {\n if ('query' in value && !own.has(refKey(value))) own.set(refKey(value), label);\n }\n const seen = new Set<string>();\n return values.flatMap(({ label, value }) =>\n exprRefs(value).flatMap(ref => {\n const key = refKey(ref);\n if (seen.has(key)) return [];\n seen.add(key);\n const { query: _query, ...rest } = ref;\n return [{ label: own.get(key) ?? `${label}: ${ref.query}${refDetail(rest)}`, ref }];\n }),\n );\n}\n\ntype Located = { label: string; ref: DashboardAlertRef; query: DashboardQuery | 'unsatisfiable' };\n\n/** Each source's action, the host's for those it was asked about, in the view's order. */\nfunction entries(located: Located[], answers: (DashboardAlertAction | undefined)[]): AlertEntry[] {\n let asked = 0;\n return located.flatMap(({ label, query }) => {\n const action: DashboardAlertAction | undefined =\n query === 'unsatisfiable' ? { disabled: UNSATISFIABLE_ALERT } : answers[asked++];\n return action ? [{ label, action }] : [];\n });\n}\n\n/**\n * The open view's Create alert button, or nothing without an `alert` host. A view the page's filters\n * block, or contradict, gets a disabled button saying so; otherwise the host decides, for the whole\n * card or per source. A source whose query the page's filters contradict is disabled on its own.\n */\nexport function alertAction(\n alert: DashboardAlert | undefined,\n widget: DashboardWidget,\n view: DashboardWidgetView,\n source: AlertSource,\n): ReactNode {\n if (!alert) return undefined;\n const name = view.label?.trim() || widget.title?.trim();\n const label = name ? `Create alert from ${name}` : 'Create alert';\n const button = (action: DashboardAlertAction) => (\n <AlertAction action={action} label={label} LinkComponent={alert.LinkComponent} />\n );\n if ('blocked' in source) return button({ disabled: unsupportedMessage(source.blocked, source.names) });\n const page = source.page;\n const queries = view.queries.map(q => pageQuery(q, page));\n const located = alertRefs(source.values).flatMap(({ label, ref }): Located[] => {\n const index = view.queries.findIndex(q => q.id === ref.query);\n const query = queries[index];\n if (query === undefined) return [];\n const { query: _query, ...rest } = ref;\n return [{ label, ref: rest, query }];\n });\n const satisfiable = located.filter((s): s is DashboardAlertSource => s.query !== 'unsatisfiable');\n const contradicted = located.length ? satisfiable.length === 0 : queries.some(q => q === 'unsatisfiable');\n if (contradicted) return button({ disabled: UNSATISFIABLE_ALERT });\n const action = alert.action({\n widget,\n view,\n queries: queries.filter(q => q !== 'unsatisfiable'),\n sources: satisfiable,\n });\n if (!Array.isArray(action)) return action && button(action);\n return <AlertMenu entries={entries(located, action)} label={label} LinkComponent={alert.LinkComponent} />;\n}\n\n/** `heading` with `action` first among its hover actions, so it sits left of the pin. */\nexport function withAction(heading: ViewHeading, action: ReactNode): ViewHeading {\n if (!action) return heading;\n return {\n ...heading,\n actions: (\n <>\n {action}\n {heading.actions}\n </>\n ),\n };\n}\n\n/** A pending card's heading: a view the page's filters block gets its disabled button, saying so. */\nexport function pendingHeading(\n heading: ViewHeading,\n gate: PendingGate,\n alert: DashboardAlert | undefined,\n widget: DashboardWidget,\n view: DashboardWidgetView,\n): ViewHeading {\n if (gate.status !== 'unsupported-filter') return heading;\n return withAction(heading, alertAction(alert, widget, view, { blocked: gate.unsupportedFields }));\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '../../../src/domains/dashboards/lib/alert-actions';
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { AlertAction, AlertMenu } from "../components/widget-controls.es.js";
|
|
2
|
+
import { unsupportedMessage } from "./chrome.es.js";
|
|
3
|
+
import { pageQuery } from "./requests.es.js";
|
|
4
|
+
import { exprRefs } from "./values.es.js";
|
|
5
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
// src/domains/dashboards/lib/alert-actions.tsx
|
|
7
|
+
var UNSATISFIABLE_ALERT = "The page's filters exclude everything this card shows.";
|
|
8
|
+
/** `p95` for 0.95: percentiles as people name them. */
|
|
9
|
+
var percentileName = (p) => `p${Math.round(p * 1e3) / 10}`;
|
|
10
|
+
/** What a ref picks from its query, beyond the query itself: `(countDistinct.threadId)`, `(p95)`. */
|
|
11
|
+
function refDetail(ref) {
|
|
12
|
+
const parts = [
|
|
13
|
+
ref.measure,
|
|
14
|
+
ref.field,
|
|
15
|
+
ref.percentile === void 0 ? void 0 : percentileName(ref.percentile),
|
|
16
|
+
ref.groups?.join(", "),
|
|
17
|
+
ref.notGroups && `not ${ref.notGroups.join(", ")}`
|
|
18
|
+
].filter((p) => p !== void 0);
|
|
19
|
+
return parts.length ? ` (${parts.join(", ")})` : "";
|
|
20
|
+
}
|
|
21
|
+
var refKey = ({ query, measure, field, percentile, groups, notGroups }) => JSON.stringify([
|
|
22
|
+
query,
|
|
23
|
+
measure,
|
|
24
|
+
field,
|
|
25
|
+
percentile,
|
|
26
|
+
groups,
|
|
27
|
+
notGroups
|
|
28
|
+
]);
|
|
29
|
+
/**
|
|
30
|
+
* Each distinct ref the view's values read, labelled: by the label of a value that is just that ref
|
|
31
|
+
* if there is one, else as a part of the first combined value reading it (the value's label, its
|
|
32
|
+
* query and what it picks). In the order the values first read them.
|
|
33
|
+
*/
|
|
34
|
+
function alertRefs(values) {
|
|
35
|
+
const own = /* @__PURE__ */ new Map();
|
|
36
|
+
for (const { label, value } of values) if ("query" in value && !own.has(refKey(value))) own.set(refKey(value), label);
|
|
37
|
+
const seen = /* @__PURE__ */ new Set();
|
|
38
|
+
return values.flatMap(({ label, value }) => exprRefs(value).flatMap((ref) => {
|
|
39
|
+
const key = refKey(ref);
|
|
40
|
+
if (seen.has(key)) return [];
|
|
41
|
+
seen.add(key);
|
|
42
|
+
const { query: _query, ...rest } = ref;
|
|
43
|
+
return [{
|
|
44
|
+
label: own.get(key) ?? `${label}: ${ref.query}${refDetail(rest)}`,
|
|
45
|
+
ref
|
|
46
|
+
}];
|
|
47
|
+
}));
|
|
48
|
+
}
|
|
49
|
+
/** Each source's action, the host's for those it was asked about, in the view's order. */
|
|
50
|
+
function entries(located, answers) {
|
|
51
|
+
let asked = 0;
|
|
52
|
+
return located.flatMap(({ label, query }) => {
|
|
53
|
+
const action = query === "unsatisfiable" ? { disabled: UNSATISFIABLE_ALERT } : answers[asked++];
|
|
54
|
+
return action ? [{
|
|
55
|
+
label,
|
|
56
|
+
action
|
|
57
|
+
}] : [];
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* The open view's Create alert button, or nothing without an `alert` host. A view the page's filters
|
|
62
|
+
* block, or contradict, gets a disabled button saying so; otherwise the host decides, for the whole
|
|
63
|
+
* card or per source. A source whose query the page's filters contradict is disabled on its own.
|
|
64
|
+
*/
|
|
65
|
+
function alertAction(alert, widget, view, source) {
|
|
66
|
+
if (!alert) return void 0;
|
|
67
|
+
const name = view.label?.trim() || widget.title?.trim();
|
|
68
|
+
const label = name ? `Create alert from ${name}` : "Create alert";
|
|
69
|
+
const button = (action) => /* @__PURE__ */ jsx(AlertAction, {
|
|
70
|
+
action,
|
|
71
|
+
label,
|
|
72
|
+
LinkComponent: alert.LinkComponent
|
|
73
|
+
});
|
|
74
|
+
if ("blocked" in source) return button({ disabled: unsupportedMessage(source.blocked, source.names) });
|
|
75
|
+
const page = source.page;
|
|
76
|
+
const queries = view.queries.map((q) => pageQuery(q, page));
|
|
77
|
+
const located = alertRefs(source.values).flatMap(({ label, ref }) => {
|
|
78
|
+
const index = view.queries.findIndex((q) => q.id === ref.query);
|
|
79
|
+
const query = queries[index];
|
|
80
|
+
if (query === void 0) return [];
|
|
81
|
+
const { query: _query, ...rest } = ref;
|
|
82
|
+
return [{
|
|
83
|
+
label,
|
|
84
|
+
ref: rest,
|
|
85
|
+
query
|
|
86
|
+
}];
|
|
87
|
+
});
|
|
88
|
+
const satisfiable = located.filter((s) => s.query !== "unsatisfiable");
|
|
89
|
+
if (located.length ? satisfiable.length === 0 : queries.some((q) => q === "unsatisfiable")) return button({ disabled: UNSATISFIABLE_ALERT });
|
|
90
|
+
const action = alert.action({
|
|
91
|
+
widget,
|
|
92
|
+
view,
|
|
93
|
+
queries: queries.filter((q) => q !== "unsatisfiable"),
|
|
94
|
+
sources: satisfiable
|
|
95
|
+
});
|
|
96
|
+
if (!Array.isArray(action)) return action && button(action);
|
|
97
|
+
return /* @__PURE__ */ jsx(AlertMenu, {
|
|
98
|
+
entries: entries(located, action),
|
|
99
|
+
label,
|
|
100
|
+
LinkComponent: alert.LinkComponent
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
/** `heading` with `action` first among its hover actions, so it sits left of the pin. */
|
|
104
|
+
function withAction(heading, action) {
|
|
105
|
+
if (!action) return heading;
|
|
106
|
+
return {
|
|
107
|
+
...heading,
|
|
108
|
+
actions: /* @__PURE__ */ jsxs(Fragment, { children: [action, heading.actions] })
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
/** A pending card's heading: a view the page's filters block gets its disabled button, saying so. */
|
|
112
|
+
function pendingHeading(heading, gate, alert, widget, view) {
|
|
113
|
+
if (gate.status !== "unsupported-filter") return heading;
|
|
114
|
+
return withAction(heading, alertAction(alert, widget, view, { blocked: gate.unsupportedFields }));
|
|
115
|
+
}
|
|
116
|
+
export { UNSATISFIABLE_ALERT, alertAction, alertRefs, pendingHeading, withAction };
|
|
117
|
+
|
|
118
|
+
//# sourceMappingURL=alert-actions.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alert-actions.es.js","names":["_Fragment"],"sources":["../../../../src/domains/dashboards/lib/alert-actions.tsx"],"sourcesContent":["import type { DashboardQuery, DashboardWidget, DashboardWidgetView } from '@mastra/client-js';\nimport type { ReactNode } from 'react';\n\nimport { AlertAction, AlertMenu } from '../components/widget-controls';\nimport type { AlertEntry } from '../components/widget-controls';\nimport type { DashboardAlert, DashboardAlertAction, DashboardAlertRef, DashboardAlertSource } from '../widget-kind';\nimport type { ViewHeading } from './chrome';\nimport { unsupportedMessage } from './chrome';\nimport type { PendingGate } from './gate';\nimport { pageQuery } from './requests';\nimport type { DashboardPageContext } from './requests';\nimport { exprRefs } from './values';\nimport type { LabelledValue, ValueRef } from './values';\n\n/** What the open view runs against: the page's filters, or the page filters its aggregates can't apply. */\nexport type AlertSource =\n | {\n page: DashboardPageContext;\n /** The view's series, columns or KPIs, each becoming the alert's sources. */\n values: LabelledValue[];\n }\n | {\n blocked: string[];\n /** The filter bar's names for `blocked`, as the card names them. */ names?: Record<string, string>;\n };\n\nexport const UNSATISFIABLE_ALERT = \"The page's filters exclude everything this card shows.\";\n\n/** `p95` for 0.95: percentiles as people name them. */\nconst percentileName = (p: number) => `p${Math.round(p * 1000) / 10}`;\n\n/** What a ref picks from its query, beyond the query itself: `(countDistinct.threadId)`, `(p95)`. */\nfunction refDetail(ref: DashboardAlertRef) {\n const parts = [\n ref.measure,\n ref.field,\n ref.percentile === undefined ? undefined : percentileName(ref.percentile),\n ref.groups?.join(', '),\n ref.notGroups && `not ${ref.notGroups.join(', ')}`,\n ].filter((p): p is string => p !== undefined);\n return parts.length ? ` (${parts.join(', ')})` : '';\n}\n\nconst refKey = ({ query, measure, field, percentile, groups, notGroups }: ValueRef) =>\n JSON.stringify([query, measure, field, percentile, groups, notGroups]);\n\n/**\n * Each distinct ref the view's values read, labelled: by the label of a value that is just that ref\n * if there is one, else as a part of the first combined value reading it (the value's label, its\n * query and what it picks). In the order the values first read them.\n */\nexport function alertRefs(values: LabelledValue[]): { label: string; ref: ValueRef }[] {\n const own = new Map<string, string>();\n for (const { label, value } of values) {\n if ('query' in value && !own.has(refKey(value))) own.set(refKey(value), label);\n }\n const seen = new Set<string>();\n return values.flatMap(({ label, value }) =>\n exprRefs(value).flatMap(ref => {\n const key = refKey(ref);\n if (seen.has(key)) return [];\n seen.add(key);\n const { query: _query, ...rest } = ref;\n return [{ label: own.get(key) ?? `${label}: ${ref.query}${refDetail(rest)}`, ref }];\n }),\n );\n}\n\ntype Located = { label: string; ref: DashboardAlertRef; query: DashboardQuery | 'unsatisfiable' };\n\n/** Each source's action, the host's for those it was asked about, in the view's order. */\nfunction entries(located: Located[], answers: (DashboardAlertAction | undefined)[]): AlertEntry[] {\n let asked = 0;\n return located.flatMap(({ label, query }) => {\n const action: DashboardAlertAction | undefined =\n query === 'unsatisfiable' ? { disabled: UNSATISFIABLE_ALERT } : answers[asked++];\n return action ? [{ label, action }] : [];\n });\n}\n\n/**\n * The open view's Create alert button, or nothing without an `alert` host. A view the page's filters\n * block, or contradict, gets a disabled button saying so; otherwise the host decides, for the whole\n * card or per source. A source whose query the page's filters contradict is disabled on its own.\n */\nexport function alertAction(\n alert: DashboardAlert | undefined,\n widget: DashboardWidget,\n view: DashboardWidgetView,\n source: AlertSource,\n): ReactNode {\n if (!alert) return undefined;\n const name = view.label?.trim() || widget.title?.trim();\n const label = name ? `Create alert from ${name}` : 'Create alert';\n const button = (action: DashboardAlertAction) => (\n <AlertAction action={action} label={label} LinkComponent={alert.LinkComponent} />\n );\n if ('blocked' in source) return button({ disabled: unsupportedMessage(source.blocked, source.names) });\n const page = source.page;\n const queries = view.queries.map(q => pageQuery(q, page));\n const located = alertRefs(source.values).flatMap(({ label, ref }): Located[] => {\n const index = view.queries.findIndex(q => q.id === ref.query);\n const query = queries[index];\n if (query === undefined) return [];\n const { query: _query, ...rest } = ref;\n return [{ label, ref: rest, query }];\n });\n const satisfiable = located.filter((s): s is DashboardAlertSource => s.query !== 'unsatisfiable');\n const contradicted = located.length ? satisfiable.length === 0 : queries.some(q => q === 'unsatisfiable');\n if (contradicted) return button({ disabled: UNSATISFIABLE_ALERT });\n const action = alert.action({\n widget,\n view,\n queries: queries.filter(q => q !== 'unsatisfiable'),\n sources: satisfiable,\n });\n if (!Array.isArray(action)) return action && button(action);\n return <AlertMenu entries={entries(located, action)} label={label} LinkComponent={alert.LinkComponent} />;\n}\n\n/** `heading` with `action` first among its hover actions, so it sits left of the pin. */\nexport function withAction(heading: ViewHeading, action: ReactNode): ViewHeading {\n if (!action) return heading;\n return {\n ...heading,\n actions: (\n <>\n {action}\n {heading.actions}\n </>\n ),\n };\n}\n\n/** A pending card's heading: a view the page's filters block gets its disabled button, saying so. */\nexport function pendingHeading(\n heading: ViewHeading,\n gate: PendingGate,\n alert: DashboardAlert | undefined,\n widget: DashboardWidget,\n view: DashboardWidgetView,\n): ViewHeading {\n if (gate.status !== 'unsupported-filter') return heading;\n return withAction(heading, alertAction(alert, widget, view, { blocked: gate.unsupportedFields }));\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_domains_dashboards_lib_requests = require("./requests.cjs.js");
|
|
3
|
+
// src/domains/dashboards/lib/gate.ts
|
|
4
|
+
var sourcesOf = (queries) => new Set(queries.map(require_domains_dashboards_lib_requests.aggregateSource));
|
|
5
|
+
/** Whether any of `queries` reads trace or span aggregates, so the page's gates apply to it. */
|
|
6
|
+
var needsAggregates = (queries) => {
|
|
7
|
+
const sources = sourcesOf(queries);
|
|
8
|
+
return sources.has("trace") || sources.has("span");
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Whether `queries` can run on the page `env` describes, and their page context when they can.
|
|
12
|
+
* Metrics and scores answer every filter; trace and span aggregates wait on their gates. With
|
|
13
|
+
* `partial`, a page filter the aggregates can't apply doesn't hold the widget up: its views check
|
|
14
|
+
* `blocked` themselves (a table's tabs).
|
|
15
|
+
*/
|
|
16
|
+
function widgetGate(queries, env, { partial = false } = {}) {
|
|
17
|
+
if (!needsAggregates(queries)) return {
|
|
18
|
+
status: "ready",
|
|
19
|
+
page: {
|
|
20
|
+
window: env.window,
|
|
21
|
+
filters: env.filters
|
|
22
|
+
},
|
|
23
|
+
blocked: () => void 0
|
|
24
|
+
};
|
|
25
|
+
const { trace, span } = env.gates;
|
|
26
|
+
const gatesOf = (qs) => {
|
|
27
|
+
const sources = sourcesOf(qs);
|
|
28
|
+
return [...sources.has("trace") ? [trace] : [], ...sources.has("span") ? [span] : []];
|
|
29
|
+
};
|
|
30
|
+
const blocked = (qs) => {
|
|
31
|
+
const fields = gatesOf(qs).flatMap((g) => g.status === "unsupported-filter" ? g.unsupportedFields : []);
|
|
32
|
+
return fields.length ? [...new Set(fields)] : void 0;
|
|
33
|
+
};
|
|
34
|
+
const gates = gatesOf(queries);
|
|
35
|
+
if (gates.some((g) => g.status === "unavailable")) return { status: "hidden" };
|
|
36
|
+
if (gates.some((g) => g.status === "loading")) return {
|
|
37
|
+
status: "pending",
|
|
38
|
+
gate: { status: "loading" }
|
|
39
|
+
};
|
|
40
|
+
const unsupportedFields = blocked(queries);
|
|
41
|
+
if (unsupportedFields && !partial) return {
|
|
42
|
+
status: "pending",
|
|
43
|
+
gate: {
|
|
44
|
+
status: "unsupported-filter",
|
|
45
|
+
unsupportedFields
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
return {
|
|
49
|
+
status: "ready",
|
|
50
|
+
page: {
|
|
51
|
+
window: env.window,
|
|
52
|
+
filters: env.filters,
|
|
53
|
+
traceWhere: trace.status === "ready" ? trace.where : void 0,
|
|
54
|
+
spanWhere: span.status === "ready" ? span.where : void 0
|
|
55
|
+
},
|
|
56
|
+
blocked
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
exports.needsAggregates = needsAggregates;
|
|
60
|
+
exports.widgetGate = widgetGate;
|
|
61
|
+
|
|
62
|
+
//# sourceMappingURL=gate.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate.cjs.js","names":["aggregateSource"],"sources":["../../../../src/domains/dashboards/lib/gate.ts"],"sourcesContent":["import type { DashboardQuery } from '@mastra/client-js';\nimport { aggregateSource } from './requests';\nimport type { DashboardPageContext } from './requests';\n\n/** One aggregate backend's readiness, as plain data a host can provide. */\nexport type AggregateGateInput<Where> =\n /** Capabilities are still loading. */\n | { status: 'loading' }\n /** The server can't answer these aggregates: widgets that need them are hidden. */\n | { status: 'unavailable' }\n /** A page filter has no equivalent on this backend, so its numbers would ignore it. */\n | { status: 'unsupported-filter'; unsupportedFields: string[] }\n | { status: 'ready'; where?: Where };\n\n/** What a widget needs from its page: the frozen window, the filters, and the aggregate gates. */\nexport type DashboardEnvironment = {\n window: DashboardPageContext['window'];\n filters: DashboardPageContext['filters'];\n /** What figures are compared against, e.g. `vs previous 24h`. */\n comparisonLabel: string;\n /** Display name for a project id, when the page spans several projects; ids show as they are without it. */\n projectLabel?: (projectId: string) => string;\n gates: {\n trace: AggregateGateInput<NonNullable<DashboardPageContext['traceWhere']>>;\n span: AggregateGateInput<NonNullable<DashboardPageContext['spanWhere']>>;\n };\n};\n\n/** A view that can't run yet: capabilities loading, or a page filter its aggregates can't apply. */\nexport type PendingGate = { status: 'loading' } | { status: 'unsupported-filter'; unsupportedFields: string[] };\n\n/** The page filters `queries` can't apply; `undefined` when they apply them all. */\nexport type BlockedFields = (queries: readonly DashboardQuery[]) => string[] | undefined;\n\nexport type WidgetGate =\n /** The server can't answer the widget: it renders nothing. */\n | { status: 'hidden' }\n | { status: 'pending'; gate: PendingGate }\n | { status: 'ready'; page: DashboardPageContext; blocked: BlockedFields };\n\nconst sourcesOf = (queries: readonly DashboardQuery[]) => new Set(queries.map(aggregateSource));\n\n/** Whether any of `queries` reads trace or span aggregates, so the page's gates apply to it. */\nexport const needsAggregates = (queries: readonly DashboardQuery[]) => {\n const sources = sourcesOf(queries);\n return sources.has('trace') || sources.has('span');\n};\n\n/**\n * Whether `queries` can run on the page `env` describes, and their page context when they can.\n * Metrics and scores answer every filter; trace and span aggregates wait on their gates. With\n * `partial`, a page filter the aggregates can't apply doesn't hold the widget up: its views check\n * `blocked` themselves (a table's tabs).\n */\nexport function widgetGate(\n queries: readonly DashboardQuery[],\n env: DashboardEnvironment,\n { partial = false }: { partial?: boolean } = {},\n): WidgetGate {\n if (!needsAggregates(queries)) {\n return { status: 'ready', page: { window: env.window, filters: env.filters }, blocked: () => undefined };\n }\n\n const { trace, span } = env.gates;\n const gatesOf = (qs: readonly DashboardQuery[]) => {\n const sources = sourcesOf(qs);\n return [...(sources.has('trace') ? [trace] : []), ...(sources.has('span') ? [span] : [])];\n };\n const blocked: BlockedFields = qs => {\n const fields = gatesOf(qs).flatMap(g => (g.status === 'unsupported-filter' ? g.unsupportedFields : []));\n return fields.length ? [...new Set(fields)] : undefined;\n };\n\n const gates = gatesOf(queries);\n if (gates.some(g => g.status === 'unavailable')) return { status: 'hidden' };\n if (gates.some(g => g.status === 'loading')) return { status: 'pending', gate: { status: 'loading' } };\n const unsupportedFields = blocked(queries);\n if (unsupportedFields && !partial) {\n return { status: 'pending', gate: { status: 'unsupported-filter', unsupportedFields } };\n }\n\n return {\n status: 'ready',\n page: {\n window: env.window,\n filters: env.filters,\n traceWhere: trace.status === 'ready' ? trace.where : undefined,\n spanWhere: span.status === 'ready' ? span.where : undefined,\n },\n blocked,\n };\n}\n"],"mappings":";;;AAwCA,IAAM,aAAa,YAAuC,IAAI,IAAI,QAAQ,IAAIA,wCAAAA,eAAe,CAAC;;AAG9F,IAAa,mBAAmB,YAAuC;CACrE,MAAM,UAAU,UAAU,OAAO;CACjC,OAAO,QAAQ,IAAI,OAAO,KAAK,QAAQ,IAAI,MAAM;AACnD;;;;;;;AAQA,SAAgB,WACd,SACA,KACA,EAAE,UAAU,UAAiC,CAAC,GAClC;CACZ,IAAI,CAAC,gBAAgB,OAAO,GAC1B,OAAO;EAAE,QAAQ;EAAS,MAAM;GAAE,QAAQ,IAAI;GAAQ,SAAS,IAAI;EAAQ;EAAG,eAAe,KAAA;CAAU;CAGzG,MAAM,EAAE,OAAO,SAAS,IAAI;CAC5B,MAAM,WAAW,OAAkC;EACjD,MAAM,UAAU,UAAU,EAAE;EAC5B,OAAO,CAAC,GAAI,QAAQ,IAAI,OAAO,IAAI,CAAC,KAAK,IAAI,CAAC,GAAI,GAAI,QAAQ,IAAI,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,CAAE;CAC1F;CACA,MAAM,WAAyB,OAAM;EACnC,MAAM,SAAS,QAAQ,EAAE,CAAC,CAAC,SAAQ,MAAM,EAAE,WAAW,uBAAuB,EAAE,oBAAoB,CAAC,CAAE;EACtG,OAAO,OAAO,SAAS,CAAC,GAAG,IAAI,IAAI,MAAM,CAAC,IAAI,KAAA;CAChD;CAEA,MAAM,QAAQ,QAAQ,OAAO;CAC7B,IAAI,MAAM,MAAK,MAAK,EAAE,WAAW,aAAa,GAAG,OAAO,EAAE,QAAQ,SAAS;CAC3E,IAAI,MAAM,MAAK,MAAK,EAAE,WAAW,SAAS,GAAG,OAAO;EAAE,QAAQ;EAAW,MAAM,EAAE,QAAQ,UAAU;CAAE;CACrG,MAAM,oBAAoB,QAAQ,OAAO;CACzC,IAAI,qBAAqB,CAAC,SACxB,OAAO;EAAE,QAAQ;EAAW,MAAM;GAAE,QAAQ;GAAsB;EAAkB;CAAE;CAGxF,OAAO;EACL,QAAQ;EACR,MAAM;GACJ,QAAQ,IAAI;GACZ,SAAS,IAAI;GACb,YAAY,MAAM,WAAW,UAAU,MAAM,QAAQ,KAAA;GACrD,WAAW,KAAK,WAAW,UAAU,KAAK,QAAQ,KAAA;EACpD;EACA;CACF;AACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '../../../src/domains/dashboards/lib/gate';
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { aggregateSource } from "./requests.es.js";
|
|
2
|
+
// src/domains/dashboards/lib/gate.ts
|
|
3
|
+
var sourcesOf = (queries) => new Set(queries.map(aggregateSource));
|
|
4
|
+
/** Whether any of `queries` reads trace or span aggregates, so the page's gates apply to it. */
|
|
5
|
+
var needsAggregates = (queries) => {
|
|
6
|
+
const sources = sourcesOf(queries);
|
|
7
|
+
return sources.has("trace") || sources.has("span");
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Whether `queries` can run on the page `env` describes, and their page context when they can.
|
|
11
|
+
* Metrics and scores answer every filter; trace and span aggregates wait on their gates. With
|
|
12
|
+
* `partial`, a page filter the aggregates can't apply doesn't hold the widget up: its views check
|
|
13
|
+
* `blocked` themselves (a table's tabs).
|
|
14
|
+
*/
|
|
15
|
+
function widgetGate(queries, env, { partial = false } = {}) {
|
|
16
|
+
if (!needsAggregates(queries)) return {
|
|
17
|
+
status: "ready",
|
|
18
|
+
page: {
|
|
19
|
+
window: env.window,
|
|
20
|
+
filters: env.filters
|
|
21
|
+
},
|
|
22
|
+
blocked: () => void 0
|
|
23
|
+
};
|
|
24
|
+
const { trace, span } = env.gates;
|
|
25
|
+
const gatesOf = (qs) => {
|
|
26
|
+
const sources = sourcesOf(qs);
|
|
27
|
+
return [...sources.has("trace") ? [trace] : [], ...sources.has("span") ? [span] : []];
|
|
28
|
+
};
|
|
29
|
+
const blocked = (qs) => {
|
|
30
|
+
const fields = gatesOf(qs).flatMap((g) => g.status === "unsupported-filter" ? g.unsupportedFields : []);
|
|
31
|
+
return fields.length ? [...new Set(fields)] : void 0;
|
|
32
|
+
};
|
|
33
|
+
const gates = gatesOf(queries);
|
|
34
|
+
if (gates.some((g) => g.status === "unavailable")) return { status: "hidden" };
|
|
35
|
+
if (gates.some((g) => g.status === "loading")) return {
|
|
36
|
+
status: "pending",
|
|
37
|
+
gate: { status: "loading" }
|
|
38
|
+
};
|
|
39
|
+
const unsupportedFields = blocked(queries);
|
|
40
|
+
if (unsupportedFields && !partial) return {
|
|
41
|
+
status: "pending",
|
|
42
|
+
gate: {
|
|
43
|
+
status: "unsupported-filter",
|
|
44
|
+
unsupportedFields
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
return {
|
|
48
|
+
status: "ready",
|
|
49
|
+
page: {
|
|
50
|
+
window: env.window,
|
|
51
|
+
filters: env.filters,
|
|
52
|
+
traceWhere: trace.status === "ready" ? trace.where : void 0,
|
|
53
|
+
spanWhere: span.status === "ready" ? span.where : void 0
|
|
54
|
+
},
|
|
55
|
+
blocked
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
export { needsAggregates, widgetGate };
|
|
59
|
+
|
|
60
|
+
//# sourceMappingURL=gate.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate.es.js","names":[],"sources":["../../../../src/domains/dashboards/lib/gate.ts"],"sourcesContent":["import type { DashboardQuery } from '@mastra/client-js';\nimport { aggregateSource } from './requests';\nimport type { DashboardPageContext } from './requests';\n\n/** One aggregate backend's readiness, as plain data a host can provide. */\nexport type AggregateGateInput<Where> =\n /** Capabilities are still loading. */\n | { status: 'loading' }\n /** The server can't answer these aggregates: widgets that need them are hidden. */\n | { status: 'unavailable' }\n /** A page filter has no equivalent on this backend, so its numbers would ignore it. */\n | { status: 'unsupported-filter'; unsupportedFields: string[] }\n | { status: 'ready'; where?: Where };\n\n/** What a widget needs from its page: the frozen window, the filters, and the aggregate gates. */\nexport type DashboardEnvironment = {\n window: DashboardPageContext['window'];\n filters: DashboardPageContext['filters'];\n /** What figures are compared against, e.g. `vs previous 24h`. */\n comparisonLabel: string;\n /** Display name for a project id, when the page spans several projects; ids show as they are without it. */\n projectLabel?: (projectId: string) => string;\n gates: {\n trace: AggregateGateInput<NonNullable<DashboardPageContext['traceWhere']>>;\n span: AggregateGateInput<NonNullable<DashboardPageContext['spanWhere']>>;\n };\n};\n\n/** A view that can't run yet: capabilities loading, or a page filter its aggregates can't apply. */\nexport type PendingGate = { status: 'loading' } | { status: 'unsupported-filter'; unsupportedFields: string[] };\n\n/** The page filters `queries` can't apply; `undefined` when they apply them all. */\nexport type BlockedFields = (queries: readonly DashboardQuery[]) => string[] | undefined;\n\nexport type WidgetGate =\n /** The server can't answer the widget: it renders nothing. */\n | { status: 'hidden' }\n | { status: 'pending'; gate: PendingGate }\n | { status: 'ready'; page: DashboardPageContext; blocked: BlockedFields };\n\nconst sourcesOf = (queries: readonly DashboardQuery[]) => new Set(queries.map(aggregateSource));\n\n/** Whether any of `queries` reads trace or span aggregates, so the page's gates apply to it. */\nexport const needsAggregates = (queries: readonly DashboardQuery[]) => {\n const sources = sourcesOf(queries);\n return sources.has('trace') || sources.has('span');\n};\n\n/**\n * Whether `queries` can run on the page `env` describes, and their page context when they can.\n * Metrics and scores answer every filter; trace and span aggregates wait on their gates. With\n * `partial`, a page filter the aggregates can't apply doesn't hold the widget up: its views check\n * `blocked` themselves (a table's tabs).\n */\nexport function widgetGate(\n queries: readonly DashboardQuery[],\n env: DashboardEnvironment,\n { partial = false }: { partial?: boolean } = {},\n): WidgetGate {\n if (!needsAggregates(queries)) {\n return { status: 'ready', page: { window: env.window, filters: env.filters }, blocked: () => undefined };\n }\n\n const { trace, span } = env.gates;\n const gatesOf = (qs: readonly DashboardQuery[]) => {\n const sources = sourcesOf(qs);\n return [...(sources.has('trace') ? [trace] : []), ...(sources.has('span') ? [span] : [])];\n };\n const blocked: BlockedFields = qs => {\n const fields = gatesOf(qs).flatMap(g => (g.status === 'unsupported-filter' ? g.unsupportedFields : []));\n return fields.length ? [...new Set(fields)] : undefined;\n };\n\n const gates = gatesOf(queries);\n if (gates.some(g => g.status === 'unavailable')) return { status: 'hidden' };\n if (gates.some(g => g.status === 'loading')) return { status: 'pending', gate: { status: 'loading' } };\n const unsupportedFields = blocked(queries);\n if (unsupportedFields && !partial) {\n return { status: 'pending', gate: { status: 'unsupported-filter', unsupportedFields } };\n }\n\n return {\n status: 'ready',\n page: {\n window: env.window,\n filters: env.filters,\n traceWhere: trace.status === 'ready' ? trace.where : undefined,\n spanWhere: span.status === 'ready' ? span.where : undefined,\n },\n blocked,\n };\n}\n"],"mappings":";;AAwCA,IAAM,aAAa,YAAuC,IAAI,IAAI,QAAQ,IAAI,eAAe,CAAC;;AAG9F,IAAa,mBAAmB,YAAuC;CACrE,MAAM,UAAU,UAAU,OAAO;CACjC,OAAO,QAAQ,IAAI,OAAO,KAAK,QAAQ,IAAI,MAAM;AACnD;;;;;;;AAQA,SAAgB,WACd,SACA,KACA,EAAE,UAAU,UAAiC,CAAC,GAClC;CACZ,IAAI,CAAC,gBAAgB,OAAO,GAC1B,OAAO;EAAE,QAAQ;EAAS,MAAM;GAAE,QAAQ,IAAI;GAAQ,SAAS,IAAI;EAAQ;EAAG,eAAe,KAAA;CAAU;CAGzG,MAAM,EAAE,OAAO,SAAS,IAAI;CAC5B,MAAM,WAAW,OAAkC;EACjD,MAAM,UAAU,UAAU,EAAE;EAC5B,OAAO,CAAC,GAAI,QAAQ,IAAI,OAAO,IAAI,CAAC,KAAK,IAAI,CAAC,GAAI,GAAI,QAAQ,IAAI,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,CAAE;CAC1F;CACA,MAAM,WAAyB,OAAM;EACnC,MAAM,SAAS,QAAQ,EAAE,CAAC,CAAC,SAAQ,MAAM,EAAE,WAAW,uBAAuB,EAAE,oBAAoB,CAAC,CAAE;EACtG,OAAO,OAAO,SAAS,CAAC,GAAG,IAAI,IAAI,MAAM,CAAC,IAAI,KAAA;CAChD;CAEA,MAAM,QAAQ,QAAQ,OAAO;CAC7B,IAAI,MAAM,MAAK,MAAK,EAAE,WAAW,aAAa,GAAG,OAAO,EAAE,QAAQ,SAAS;CAC3E,IAAI,MAAM,MAAK,MAAK,EAAE,WAAW,SAAS,GAAG,OAAO;EAAE,QAAQ;EAAW,MAAM,EAAE,QAAQ,UAAU;CAAE;CACrG,MAAM,oBAAoB,QAAQ,OAAO;CACzC,IAAI,qBAAqB,CAAC,SACxB,OAAO;EAAE,QAAQ;EAAW,MAAM;GAAE,QAAQ;GAAsB;EAAkB;CAAE;CAGxF,OAAO;EACL,QAAQ;EACR,MAAM;GACJ,QAAQ,IAAI;GACZ,SAAS,IAAI;GACb,YAAY,MAAM,WAAW,UAAU,MAAM,QAAQ,KAAA;GACrD,WAAW,KAAK,WAAW,UAAU,KAAK,QAAQ,KAAA;EACpD;EACA;CACF;AACF"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_domains_dashboards_lib_gate = require("./gate.cjs.js");
|
|
3
|
+
// src/domains/dashboards/lib/plan-widget.ts
|
|
4
|
+
/**
|
|
5
|
+
* The queries the page's gates apply to with `state` picked: the kind's `gatedQueries`, or every
|
|
6
|
+
* view's. A kind planning no requests fetches on its own, behind its own `ViewGate`, so the planner
|
|
7
|
+
* never holds it up.
|
|
8
|
+
*/
|
|
9
|
+
function plannedQueries({ kind, views }, state) {
|
|
10
|
+
if (!kind.discover && !kind.requests) return [];
|
|
11
|
+
return kind.gatedQueries ? kind.gatedQueries(views, state) : views.flatMap((v) => v.queries);
|
|
12
|
+
}
|
|
13
|
+
/** Whether the queries the widget shows with `state` picked can run on the page `env` describes. */
|
|
14
|
+
var preparedGate = (prepared, env, state) => require_domains_dashboards_lib_gate.widgetGate(plannedQueries(prepared, state), env, { partial: prepared.kind.partial });
|
|
15
|
+
/**
|
|
16
|
+
* What a widget sends, worked out from plain data and nothing else: the page `env`, the user's
|
|
17
|
+
* `state`, and the answers so far to its `discover` requests. Call it once without `discovered`,
|
|
18
|
+
* send `discover`, then again with their answers for the full `requests`; a host sending both at
|
|
19
|
+
* once (as `DashboardRenderer` does) re-plans as the answers arrive.
|
|
20
|
+
*/
|
|
21
|
+
function planWidget(prepared, env, state, discovered = []) {
|
|
22
|
+
const gate = preparedGate(prepared, env, state);
|
|
23
|
+
if (gate.status !== "ready") return gate;
|
|
24
|
+
const ctx = {
|
|
25
|
+
widget: prepared.widget,
|
|
26
|
+
views: prepared.views,
|
|
27
|
+
page: gate.page,
|
|
28
|
+
blocked: gate.blocked,
|
|
29
|
+
state
|
|
30
|
+
};
|
|
31
|
+
return {
|
|
32
|
+
...gate,
|
|
33
|
+
discover: prepared.kind.discover?.(ctx) ?? [],
|
|
34
|
+
requests: prepared.kind.requests?.(ctx, discovered) ?? []
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
exports.planWidget = planWidget;
|
|
38
|
+
exports.plannedQueries = plannedQueries;
|
|
39
|
+
exports.preparedGate = preparedGate;
|
|
40
|
+
|
|
41
|
+
//# sourceMappingURL=plan-widget.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-widget.cjs.js","names":["widgetGate"],"sources":["../../../../src/domains/dashboards/lib/plan-widget.ts"],"sourcesContent":["import type { WidgetPlanContext, WidgetRequests, WidgetState } from '../widget-kind';\nimport { widgetGate } from './gate';\nimport type { BlockedFields, DashboardEnvironment, PendingGate, WidgetGate } from './gate';\nimport type { PreparedWidget } from './prepare-widget';\nimport type { DashboardPageContext, DashboardResult } from './requests';\n\n/** A widget that parsed and shows at the page's scope. */\nexport type ReadyPreparedWidget = Extract<PreparedWidget, { ok: true }>;\n\nexport type WidgetPlan =\n /** The server can't answer the widget: it renders nothing and sends nothing. */\n | { status: 'hidden' }\n /** The widget waits on, or can't apply, the page's aggregate gates: it sends nothing yet. */\n | { status: 'pending'; gate: PendingGate }\n | {\n status: 'ready';\n page: DashboardPageContext;\n blocked: BlockedFields;\n /** Send first: their answers, passed back as `discovered`, decide `requests`. */\n discover: WidgetRequests;\n /** What the widget renders from; `undefined` slots aren't sent. */\n requests: WidgetRequests;\n };\n\n/**\n * The queries the page's gates apply to with `state` picked: the kind's `gatedQueries`, or every\n * view's. A kind planning no requests fetches on its own, behind its own `ViewGate`, so the planner\n * never holds it up.\n */\nexport function plannedQueries({ kind, views }: ReadyPreparedWidget, state: WidgetState) {\n if (!kind.discover && !kind.requests) return [];\n return kind.gatedQueries ? kind.gatedQueries(views, state) : views.flatMap(v => v.queries);\n}\n\n/** Whether the queries the widget shows with `state` picked can run on the page `env` describes. */\nexport const preparedGate = (\n prepared: ReadyPreparedWidget,\n env: DashboardEnvironment,\n state: WidgetState,\n): WidgetGate => widgetGate(plannedQueries(prepared, state), env, { partial: prepared.kind.partial });\n\n/**\n * What a widget sends, worked out from plain data and nothing else: the page `env`, the user's\n * `state`, and the answers so far to its `discover` requests. Call it once without `discovered`,\n * send `discover`, then again with their answers for the full `requests`; a host sending both at\n * once (as `DashboardRenderer` does) re-plans as the answers arrive.\n */\nexport function planWidget(\n prepared: ReadyPreparedWidget,\n env: DashboardEnvironment,\n state: WidgetState,\n discovered: (DashboardResult | undefined)[] = [],\n): WidgetPlan {\n const gate = preparedGate(prepared, env, state);\n if (gate.status !== 'ready') return gate;\n const ctx: WidgetPlanContext<unknown> = {\n widget: prepared.widget,\n views: prepared.views,\n page: gate.page,\n blocked: gate.blocked,\n state,\n };\n return {\n ...gate,\n discover: prepared.kind.discover?.(ctx) ?? [],\n requests: prepared.kind.requests?.(ctx, discovered) ?? [],\n };\n}\n"],"mappings":";;;;;;;;AA6BA,SAAgB,eAAe,EAAE,MAAM,SAA8B,OAAoB;CACvF,IAAI,CAAC,KAAK,YAAY,CAAC,KAAK,UAAU,OAAO,CAAC;CAC9C,OAAO,KAAK,eAAe,KAAK,aAAa,OAAO,KAAK,IAAI,MAAM,SAAQ,MAAK,EAAE,OAAO;AAC3F;;AAGA,IAAa,gBACX,UACA,KACA,UACeA,oCAAAA,WAAW,eAAe,UAAU,KAAK,GAAG,KAAK,EAAE,SAAS,SAAS,KAAK,QAAQ,CAAC;;;;;;;AAQpG,SAAgB,WACd,UACA,KACA,OACA,aAA8C,CAAC,GACnC;CACZ,MAAM,OAAO,aAAa,UAAU,KAAK,KAAK;CAC9C,IAAI,KAAK,WAAW,SAAS,OAAO;CACpC,MAAM,MAAkC;EACtC,QAAQ,SAAS;EACjB,OAAO,SAAS;EAChB,MAAM,KAAK;EACX,SAAS,KAAK;EACd;CACF;CACA,OAAO;EACL,GAAG;EACH,UAAU,SAAS,KAAK,WAAW,GAAG,KAAK,CAAC;EAC5C,UAAU,SAAS,KAAK,WAAW,KAAK,UAAU,KAAK,CAAC;CAC1D;AACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '../../../src/domains/dashboards/lib/plan-widget';
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { widgetGate } from "./gate.es.js";
|
|
2
|
+
// src/domains/dashboards/lib/plan-widget.ts
|
|
3
|
+
/**
|
|
4
|
+
* The queries the page's gates apply to with `state` picked: the kind's `gatedQueries`, or every
|
|
5
|
+
* view's. A kind planning no requests fetches on its own, behind its own `ViewGate`, so the planner
|
|
6
|
+
* never holds it up.
|
|
7
|
+
*/
|
|
8
|
+
function plannedQueries({ kind, views }, state) {
|
|
9
|
+
if (!kind.discover && !kind.requests) return [];
|
|
10
|
+
return kind.gatedQueries ? kind.gatedQueries(views, state) : views.flatMap((v) => v.queries);
|
|
11
|
+
}
|
|
12
|
+
/** Whether the queries the widget shows with `state` picked can run on the page `env` describes. */
|
|
13
|
+
var preparedGate = (prepared, env, state) => widgetGate(plannedQueries(prepared, state), env, { partial: prepared.kind.partial });
|
|
14
|
+
/**
|
|
15
|
+
* What a widget sends, worked out from plain data and nothing else: the page `env`, the user's
|
|
16
|
+
* `state`, and the answers so far to its `discover` requests. Call it once without `discovered`,
|
|
17
|
+
* send `discover`, then again with their answers for the full `requests`; a host sending both at
|
|
18
|
+
* once (as `DashboardRenderer` does) re-plans as the answers arrive.
|
|
19
|
+
*/
|
|
20
|
+
function planWidget(prepared, env, state, discovered = []) {
|
|
21
|
+
const gate = preparedGate(prepared, env, state);
|
|
22
|
+
if (gate.status !== "ready") return gate;
|
|
23
|
+
const ctx = {
|
|
24
|
+
widget: prepared.widget,
|
|
25
|
+
views: prepared.views,
|
|
26
|
+
page: gate.page,
|
|
27
|
+
blocked: gate.blocked,
|
|
28
|
+
state
|
|
29
|
+
};
|
|
30
|
+
return {
|
|
31
|
+
...gate,
|
|
32
|
+
discover: prepared.kind.discover?.(ctx) ?? [],
|
|
33
|
+
requests: prepared.kind.requests?.(ctx, discovered) ?? []
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export { planWidget, plannedQueries, preparedGate };
|
|
37
|
+
|
|
38
|
+
//# sourceMappingURL=plan-widget.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-widget.es.js","names":[],"sources":["../../../../src/domains/dashboards/lib/plan-widget.ts"],"sourcesContent":["import type { WidgetPlanContext, WidgetRequests, WidgetState } from '../widget-kind';\nimport { widgetGate } from './gate';\nimport type { BlockedFields, DashboardEnvironment, PendingGate, WidgetGate } from './gate';\nimport type { PreparedWidget } from './prepare-widget';\nimport type { DashboardPageContext, DashboardResult } from './requests';\n\n/** A widget that parsed and shows at the page's scope. */\nexport type ReadyPreparedWidget = Extract<PreparedWidget, { ok: true }>;\n\nexport type WidgetPlan =\n /** The server can't answer the widget: it renders nothing and sends nothing. */\n | { status: 'hidden' }\n /** The widget waits on, or can't apply, the page's aggregate gates: it sends nothing yet. */\n | { status: 'pending'; gate: PendingGate }\n | {\n status: 'ready';\n page: DashboardPageContext;\n blocked: BlockedFields;\n /** Send first: their answers, passed back as `discovered`, decide `requests`. */\n discover: WidgetRequests;\n /** What the widget renders from; `undefined` slots aren't sent. */\n requests: WidgetRequests;\n };\n\n/**\n * The queries the page's gates apply to with `state` picked: the kind's `gatedQueries`, or every\n * view's. A kind planning no requests fetches on its own, behind its own `ViewGate`, so the planner\n * never holds it up.\n */\nexport function plannedQueries({ kind, views }: ReadyPreparedWidget, state: WidgetState) {\n if (!kind.discover && !kind.requests) return [];\n return kind.gatedQueries ? kind.gatedQueries(views, state) : views.flatMap(v => v.queries);\n}\n\n/** Whether the queries the widget shows with `state` picked can run on the page `env` describes. */\nexport const preparedGate = (\n prepared: ReadyPreparedWidget,\n env: DashboardEnvironment,\n state: WidgetState,\n): WidgetGate => widgetGate(plannedQueries(prepared, state), env, { partial: prepared.kind.partial });\n\n/**\n * What a widget sends, worked out from plain data and nothing else: the page `env`, the user's\n * `state`, and the answers so far to its `discover` requests. Call it once without `discovered`,\n * send `discover`, then again with their answers for the full `requests`; a host sending both at\n * once (as `DashboardRenderer` does) re-plans as the answers arrive.\n */\nexport function planWidget(\n prepared: ReadyPreparedWidget,\n env: DashboardEnvironment,\n state: WidgetState,\n discovered: (DashboardResult | undefined)[] = [],\n): WidgetPlan {\n const gate = preparedGate(prepared, env, state);\n if (gate.status !== 'ready') return gate;\n const ctx: WidgetPlanContext<unknown> = {\n widget: prepared.widget,\n views: prepared.views,\n page: gate.page,\n blocked: gate.blocked,\n state,\n };\n return {\n ...gate,\n discover: prepared.kind.discover?.(ctx) ?? [],\n requests: prepared.kind.requests?.(ctx, discovered) ?? [],\n };\n}\n"],"mappings":";;;;;;;AA6BA,SAAgB,eAAe,EAAE,MAAM,SAA8B,OAAoB;CACvF,IAAI,CAAC,KAAK,YAAY,CAAC,KAAK,UAAU,OAAO,CAAC;CAC9C,OAAO,KAAK,eAAe,KAAK,aAAa,OAAO,KAAK,IAAI,MAAM,SAAQ,MAAK,EAAE,OAAO;AAC3F;;AAGA,IAAa,gBACX,UACA,KACA,UACe,WAAW,eAAe,UAAU,KAAK,GAAG,KAAK,EAAE,SAAS,SAAS,KAAK,QAAQ,CAAC;;;;;;;AAQpG,SAAgB,WACd,UACA,KACA,OACA,aAA8C,CAAC,GACnC;CACZ,MAAM,OAAO,aAAa,UAAU,KAAK,KAAK;CAC9C,IAAI,KAAK,WAAW,SAAS,OAAO;CACpC,MAAM,MAAkC;EACtC,QAAQ,SAAS;EACjB,OAAO,SAAS;EAChB,MAAM,KAAK;EACX,SAAS,KAAK;EACd;CACF;CACA,OAAO;EACL,GAAG;EACH,UAAU,SAAS,KAAK,WAAW,GAAG,KAAK,CAAC;EAC5C,UAAU,SAAS,KAAK,WAAW,KAAK,UAAU,KAAK,CAAC;CAC1D;AACF"}
|
|
@@ -37,6 +37,35 @@ function valuesArgs(query, page, window) {
|
|
|
37
37
|
}
|
|
38
38
|
};
|
|
39
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* The query with the page's filter bar ANDed in, as `buildRequest` applies it, but without the time
|
|
42
|
+
* window: trace and span predicates joined with `and`, metrics and scores filters intersected.
|
|
43
|
+
* `'unsatisfiable'` when the filters contradict, so nothing can match.
|
|
44
|
+
*/
|
|
45
|
+
function pageQuery(query, page) {
|
|
46
|
+
if (query.source === "traceAggregate") {
|
|
47
|
+
const where = andTrace(query.where, page.traceWhere);
|
|
48
|
+
return where ? {
|
|
49
|
+
...query,
|
|
50
|
+
where
|
|
51
|
+
} : query;
|
|
52
|
+
}
|
|
53
|
+
if (query.source === "spanAggregate") {
|
|
54
|
+
const where = andSpan(query.where, page.spanWhere);
|
|
55
|
+
return where ? {
|
|
56
|
+
...query,
|
|
57
|
+
where
|
|
58
|
+
} : query;
|
|
59
|
+
}
|
|
60
|
+
const combined = require_domains_dashboards_lib_filters.intersectFilters(page.filters, query.filters);
|
|
61
|
+
if (combined === void 0) return "unsatisfiable";
|
|
62
|
+
const { timestamp: _timestamp, ...filters } = combined;
|
|
63
|
+
const { filters: _own, ...rest } = query;
|
|
64
|
+
return Object.keys(filters).length > 0 ? {
|
|
65
|
+
...rest,
|
|
66
|
+
filters
|
|
67
|
+
} : rest;
|
|
68
|
+
}
|
|
40
69
|
/** A bucketed request's interval: its own, else the kind's, else the bar charts' for `window`. */
|
|
41
70
|
function bucketOf(own, interval, window) {
|
|
42
71
|
return own ?? interval ?? require_domains_metrics_lib_metrics_buckets.bucketPlan(window.start, window.end).interval;
|
|
@@ -203,6 +232,18 @@ function emptyAnswer(method) {
|
|
|
203
232
|
method,
|
|
204
233
|
data: { series: [] }
|
|
205
234
|
};
|
|
235
|
+
case "listScores": return {
|
|
236
|
+
method,
|
|
237
|
+
data: {
|
|
238
|
+
scores: [],
|
|
239
|
+
pagination: {
|
|
240
|
+
total: 0,
|
|
241
|
+
page: 0,
|
|
242
|
+
perPage: 0,
|
|
243
|
+
hasMore: false
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
};
|
|
206
247
|
}
|
|
207
248
|
}
|
|
208
249
|
/** Runs a request on the client; an unsatisfiable one answers empty without a call. */
|
|
@@ -249,6 +290,10 @@ async function sendRequest(client, request) {
|
|
|
249
290
|
method: request.method,
|
|
250
291
|
data: await client.getScorePercentiles(request.args)
|
|
251
292
|
};
|
|
293
|
+
case "listScores": return {
|
|
294
|
+
method: request.method,
|
|
295
|
+
data: await client.listScores(request.args)
|
|
296
|
+
};
|
|
252
297
|
}
|
|
253
298
|
}
|
|
254
299
|
/**
|
|
@@ -272,6 +317,8 @@ var aggregateSource = (query) => query.source === "traceAggregate" ? "trace" : q
|
|
|
272
317
|
exports.aggregateSource = aggregateSource;
|
|
273
318
|
exports.buildPreviousRequest = buildPreviousRequest;
|
|
274
319
|
exports.buildRequest = buildRequest;
|
|
320
|
+
exports.emptyAnswer = emptyAnswer;
|
|
321
|
+
exports.pageQuery = pageQuery;
|
|
275
322
|
exports.requestKey = requestKey;
|
|
276
323
|
exports.sendRequest = sendRequest;
|
|
277
324
|
exports.sendsPreviousRequest = sendsPreviousRequest;
|