@mastra/playground-ui 65.0.0-alpha.2 → 65.0.0-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -0
- package/components.css +7 -0
- package/dist/{Avatar-98bsFrSV.js → Avatar-BjaG9NU_.js} +10 -8
- package/dist/Avatar-BjaG9NU_.js.map +1 -0
- package/dist/{Avatar-BCj8SvOb.cjs → Avatar-DM90rmwx.cjs} +10 -8
- package/dist/Avatar-DM90rmwx.cjs.map +1 -0
- package/dist/{Button-DH1aTzbs.cjs → Button-C4I05uT4.cjs} +17 -10
- package/dist/Button-C4I05uT4.cjs.map +1 -0
- package/dist/{Button-EGoajBQY.js → Button-D8a5EWJ5.js} +18 -11
- package/dist/Button-D8a5EWJ5.js.map +1 -0
- package/dist/{ErrorBoundary-DQPzT6am.js → ErrorBoundary-C6JifxpQ.js} +2 -2
- package/dist/{ErrorBoundary-DQPzT6am.js.map → ErrorBoundary-C6JifxpQ.js.map} +1 -1
- package/dist/{ErrorBoundary-CpUob9SO.cjs → ErrorBoundary-DP1JqmTo.cjs} +2 -2
- package/dist/{ErrorBoundary-CpUob9SO.cjs.map → ErrorBoundary-DP1JqmTo.cjs.map} +1 -1
- package/dist/Notice-BioYTS4b.js.map +1 -1
- package/dist/Notice-DYgIy4FO.cjs.map +1 -1
- package/dist/{activity-CsTUr5_l.js → activity-B7c_nQMn.js} +2 -2
- package/dist/activity-B7c_nQMn.js.map +1 -0
- package/dist/{activity-2tovEdIP.cjs → activity-D3iI9pYN.cjs} +2 -2
- package/dist/activity-D3iI9pYN.cjs.map +1 -0
- package/dist/{alert-dialog-B7JTnkF4.js → alert-dialog-B13NSeKN.js} +3 -3
- package/dist/{alert-dialog-B7JTnkF4.js.map → alert-dialog-B13NSeKN.js.map} +1 -1
- package/dist/{alert-dialog-B1gWLQm2.cjs → alert-dialog-DY2JJAnk.cjs} +3 -3
- package/dist/{alert-dialog-B1gWLQm2.cjs.map → alert-dialog-DY2JJAnk.cjs.map} +1 -1
- package/dist/arrival-C1hkyLHm.js.map +1 -1
- package/dist/arrival-Cvxloi0B.cjs.map +1 -1
- package/dist/{ask-user-card-DroerVbm.cjs → ask-user-card-DiFQcUzM.cjs} +2 -2
- package/dist/ask-user-card-DiFQcUzM.cjs.map +1 -0
- package/dist/{ask-user-card-BCjsjimu.js → ask-user-card-DnvW7jXS.js} +2 -2
- package/dist/{ask-user-card-BCjsjimu.js.map → ask-user-card-DnvW7jXS.js.map} +1 -1
- package/dist/{avatar-size-CNR0U-LW.js → avatar-size-BXzy28Bx.js} +4 -1
- package/dist/avatar-size-BXzy28Bx.js.map +1 -0
- package/dist/{avatar-size-DxStOo5A.cjs → avatar-size-DIFE4I8A.cjs} +4 -1
- package/dist/avatar-size-DIFE4I8A.cjs.map +1 -0
- package/dist/buttons-group.css +0 -4
- package/dist/code-DJReJPSX.cjs.map +1 -1
- package/dist/code-DLuATvYu.js.map +1 -1
- package/dist/{code-block-vpcX2sDQ.cjs → code-block-C79fiykv.cjs} +4 -4
- package/dist/{code-block-vpcX2sDQ.cjs.map → code-block-C79fiykv.cjs.map} +1 -1
- package/dist/{code-block-DIDa6lg6.js → code-block-D6A1DMv-.js} +4 -4
- package/dist/{code-block-DIDa6lg6.js.map → code-block-D6A1DMv-.js.map} +1 -1
- package/dist/{code-editor-BDxYMkGm.js → code-editor-8Fpinga4.js} +2 -2
- package/dist/{code-editor-BDxYMkGm.js.map → code-editor-8Fpinga4.js.map} +1 -1
- package/dist/{code-editor-DQuJ1XXd.cjs → code-editor-Bd-Cldem.cjs} +2 -2
- package/dist/{code-editor-DQuJ1XXd.cjs.map → code-editor-Bd-Cldem.cjs.map} +1 -1
- package/dist/{collapsible-box-B9ATVQzW.cjs → collapsible-box-CzU0OwJx.cjs} +2 -2
- package/dist/{collapsible-box-B9ATVQzW.cjs.map → collapsible-box-CzU0OwJx.cjs.map} +1 -1
- package/dist/{collapsible-box-CMBYunuM.js → collapsible-box-DotFa3hr.js} +2 -2
- package/dist/{collapsible-box-CMBYunuM.js.map → collapsible-box-DotFa3hr.js.map} +1 -1
- package/dist/{combobox-Bw13EcK0.js → combobox-BCoCVZHs.js} +7 -5
- package/dist/combobox-BCoCVZHs.js.map +1 -0
- package/dist/{combobox-BNlVCFgY.cjs → combobox-DbZAWh8q.cjs} +7 -5
- package/dist/combobox-DbZAWh8q.cjs.map +1 -0
- package/dist/{combobox-styles-Dr66ofEp.js → combobox-styles-Cens2tsx.js} +2 -2
- package/dist/{combobox-styles-Dr66ofEp.js.map → combobox-styles-Cens2tsx.js.map} +1 -1
- package/dist/{combobox-styles-BK2nGTNl.cjs → combobox-styles-Cy4rpw03.cjs} +2 -2
- package/dist/{combobox-styles-BK2nGTNl.cjs.map → combobox-styles-Cy4rpw03.cjs.map} +1 -1
- package/dist/{command-UEPxVJlE.cjs → command-Duh5C_Pm.cjs} +2 -2
- package/dist/command-Duh5C_Pm.cjs.map +1 -0
- package/dist/{command-V9rsKc7P.js → command-xIH7ZTdl.js} +2 -2
- package/dist/command-xIH7ZTdl.js.map +1 -0
- package/dist/components/AlertDialog.cjs.js +1 -1
- package/dist/components/AlertDialog.es.js +1 -1
- package/dist/components/Avatar.cjs.js +1 -1
- package/dist/components/Avatar.es.js +1 -1
- package/dist/components/Breadcrumb.cjs.js +7 -4
- package/dist/components/Breadcrumb.cjs.js.map +1 -1
- package/dist/components/Breadcrumb.es.js +7 -4
- package/dist/components/Breadcrumb.es.js.map +1 -1
- package/dist/components/Button.cjs.js +1 -1
- package/dist/components/Button.es.js +2 -2
- package/dist/components/ClampedText.cjs.js +2 -2
- package/dist/components/ClampedText.cjs.js.map +1 -1
- package/dist/components/ClampedText.es.js +2 -2
- package/dist/components/ClampedText.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/CollapsibleBox.cjs.js +1 -1
- package/dist/components/CollapsibleBox.es.js +1 -1
- package/dist/components/Combobox.cjs.js +2 -2
- package/dist/components/Combobox.es.js +2 -2
- package/dist/components/Command.cjs.js +1 -1
- package/dist/components/Command.es.js +1 -1
- package/dist/components/CommandPalette.cjs.js +1 -1
- package/dist/components/CommandPalette.es.js +1 -1
- package/dist/components/Comment.cjs.js +2 -2
- package/dist/components/Comment.es.js +2 -2
- package/dist/components/CopyButton.cjs.js +1 -1
- package/dist/components/CopyButton.es.js +1 -1
- package/dist/components/DataCodeSection.cjs.js +1 -1
- package/dist/components/DataCodeSection.es.js +1 -1
- package/dist/components/DataDetailsPanel.cjs.js +2 -2
- package/dist/components/DataDetailsPanel.es.js +2 -2
- package/dist/components/DataKeysAndValues.cjs.js +1 -1
- package/dist/components/DataKeysAndValues.es.js +1 -1
- package/dist/components/DataList.cjs.js +15 -17
- package/dist/components/DataList.cjs.js.map +1 -1
- package/dist/components/DataList.es.js +4 -5
- package/dist/components/DataList.es.js.map +1 -1
- package/dist/components/DataPanel.cjs.js +1 -1
- package/dist/components/DataPanel.es.js +1 -1
- package/dist/components/DateRangeTimeline.cjs.js +1 -1
- package/dist/components/DateRangeTimeline.es.js +1 -1
- package/dist/components/DateTimePicker.cjs.js +2 -2
- package/dist/components/DateTimePicker.es.js +2 -2
- package/dist/components/DateTimeRangePicker.cjs.js +1 -1
- package/dist/components/DateTimeRangePicker.es.js +1 -1
- package/dist/components/Dialog.cjs.js +2 -2
- package/dist/components/Dialog.es.js +2 -2
- package/dist/components/DisabledFeatureButton.cjs.js +1 -1
- package/dist/components/DisabledFeatureButton.es.js +1 -1
- package/dist/components/Drawer.cjs.js +1 -1
- package/dist/components/Drawer.es.js +1 -1
- package/dist/components/EnvironmentVariablesEditor.cjs.js +3 -3
- package/dist/components/EnvironmentVariablesEditor.cjs.js.map +1 -1
- package/dist/components/EnvironmentVariablesEditor.es.js +3 -3
- package/dist/components/EnvironmentVariablesEditor.es.js.map +1 -1
- package/dist/components/ErrorBoundary.cjs.js +1 -1
- package/dist/components/ErrorBoundary.es.js +1 -1
- package/dist/components/FilterBar.cjs.js +8 -31
- package/dist/components/FilterBar.cjs.js.map +1 -1
- package/dist/components/FilterBar.es.js +10 -33
- package/dist/components/FilterBar.es.js.map +1 -1
- package/dist/components/FormFieldBlocks.cjs.js +3 -3
- package/dist/components/FormFieldBlocks.cjs.js.map +1 -1
- package/dist/components/FormFieldBlocks.es.js +3 -3
- package/dist/components/FormFieldBlocks.es.js.map +1 -1
- package/dist/components/InputGroup.cjs.js +1 -1
- package/dist/components/InputGroup.es.js +1 -1
- package/dist/components/InputNumber.cjs.js +2 -2
- package/dist/components/InputNumber.es.js +2 -2
- package/dist/components/JSONSchemaForm.cjs.js +2 -2
- package/dist/components/JSONSchemaForm.es.js +2 -2
- package/dist/components/ListSearch.cjs.js +1 -1
- package/dist/components/ListSearch.es.js +1 -1
- package/dist/components/LogsDataList.cjs.js +5 -2
- package/dist/components/LogsDataList.cjs.js.map +1 -1
- package/dist/components/LogsDataList.es.js +5 -2
- package/dist/components/LogsDataList.es.js.map +1 -1
- package/dist/components/MarkdownRenderer.cjs.js +1 -1
- package/dist/components/MarkdownRenderer.es.js +1 -1
- package/dist/components/Message.cjs.js +1 -1
- package/dist/components/Message.es.js +1 -1
- package/dist/components/MetricsCard.cjs.js +1 -1
- package/dist/components/MetricsCard.es.js +1 -1
- package/dist/components/PrevNextNav.cjs.js +1 -1
- package/dist/components/PrevNextNav.es.js +1 -1
- package/dist/components/ProductAvatar.cjs.js +2 -1
- package/dist/components/ProductAvatar.cjs.js.map +1 -1
- package/dist/components/ProductAvatar.es.js +2 -1
- package/dist/components/ProductAvatar.es.js.map +1 -1
- package/dist/components/PropertyFilter.cjs.js +4 -4
- package/dist/components/PropertyFilter.cjs.js.map +1 -1
- package/dist/components/PropertyFilter.es.js +5 -5
- package/dist/components/PropertyFilter.es.js.map +1 -1
- package/dist/components/RuleBuilder.cjs.js +3 -2
- package/dist/components/RuleBuilder.cjs.js.map +1 -1
- package/dist/components/RuleBuilder.es.js +3 -2
- package/dist/components/RuleBuilder.es.js.map +1 -1
- package/dist/components/SavedViews.cjs.js +4 -8
- package/dist/components/SavedViews.cjs.js.map +1 -1
- package/dist/components/SavedViews.es.js +5 -9
- 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/Select.cjs.js +1 -1
- package/dist/components/Select.es.js +1 -1
- package/dist/components/SideDialog.cjs.js +1 -1
- package/dist/components/SideDialog.es.js +1 -1
- package/dist/components/Sidebar.cjs.js +3 -3
- package/dist/components/Sidebar.cjs.js.map +1 -1
- package/dist/components/Sidebar.es.js +3 -3
- package/dist/components/Sidebar.es.js.map +1 -1
- package/dist/components/StatusIndicators.cjs.js.map +1 -1
- package/dist/components/StatusIndicators.es.js.map +1 -1
- package/dist/components/Table.cjs.js.map +1 -1
- package/dist/components/Table.es.js.map +1 -1
- package/dist/components/Tabs.cjs.js +1 -1
- package/dist/components/Tabs.es.js +1 -1
- package/dist/components/ThreadList.cjs.js +1 -1
- package/dist/components/ThreadList.es.js +1 -1
- package/dist/components/ThreadRail.cjs.js.map +1 -1
- package/dist/components/ThreadRail.es.js.map +1 -1
- package/dist/components/Truncate.cjs.js +1 -1
- package/dist/components/Truncate.es.js +1 -1
- package/dist/components/Workflow.cjs.js +6 -6
- package/dist/components/Workflow.es.js +6 -6
- package/dist/components/ai/activity.cjs.js +4 -4
- package/dist/components/ai/activity.es.js +4 -4
- package/dist/components/ai/ask-user.cjs.js +1 -1
- package/dist/components/ai/ask-user.es.js +1 -1
- package/dist/components/ai/plan.cjs.js +1 -1
- package/dist/components/ai/plan.es.js +1 -1
- package/dist/components/ai/tool-approval.cjs.js +1 -1
- package/dist/components/ai/tool-approval.es.js +1 -1
- package/dist/components/ai/tool-call.cjs.js +4 -4
- package/dist/components/ai/tool-call.es.js +4 -4
- package/dist/composer-Bs4iyUfe.js.map +1 -1
- package/dist/composer-CDQnP3og.cjs.map +1 -1
- package/dist/context-menu-C67xhcfa.js.map +1 -1
- package/dist/context-menu-jNuzE86D.cjs.map +1 -1
- package/dist/{copy-button-Cd0keCti.cjs → copy-button-BC02oZJo.cjs} +2 -2
- package/dist/{copy-button-Cd0keCti.cjs.map → copy-button-BC02oZJo.cjs.map} +1 -1
- package/dist/{copy-button-C_M3Tu_-.js → copy-button-B_i9lwFJ.js} +2 -2
- package/dist/{copy-button-C_M3Tu_-.js.map → copy-button-B_i9lwFJ.js.map} +1 -1
- package/dist/{data-code-section-lj3PaHjc.cjs → data-code-section-BJa6NDgN.cjs} +5 -5
- package/dist/{data-code-section-lj3PaHjc.cjs.map → data-code-section-BJa6NDgN.cjs.map} +1 -1
- package/dist/{data-code-section-mpRgtM8j.js → data-code-section-Cjs-piiY.js} +5 -5
- package/dist/{data-code-section-mpRgtM8j.js.map → data-code-section-Cjs-piiY.js.map} +1 -1
- package/dist/{data-keys-and-values-1lYi60YK.cjs → data-keys-and-values-DBXIqeXt.cjs} +2 -2
- package/dist/data-keys-and-values-DBXIqeXt.cjs.map +1 -0
- package/dist/{data-keys-and-values-CHpxKsfq.js → data-keys-and-values-DHp6cHJo.js} +2 -2
- package/dist/data-keys-and-values-DHp6cHJo.js.map +1 -0
- package/dist/{data-list-top-DJh08vFA.cjs → data-list-DlXU1PLQ.cjs} +339 -13
- package/dist/data-list-DlXU1PLQ.cjs.map +1 -0
- package/dist/{data-list-top-T-mtdIUp.js → data-list-Tor18oy5.js} +332 -5
- package/dist/data-list-Tor18oy5.js.map +1 -0
- package/dist/{data-list-skeleton-bNfITSHs.js → data-list-skeleton-CXUB-u3p.js} +2 -2
- package/dist/{data-list-skeleton-bNfITSHs.js.map → data-list-skeleton-CXUB-u3p.js.map} +1 -1
- package/dist/{data-list-skeleton-sdcaabdX.cjs → data-list-skeleton-DY0F40WQ.cjs} +6 -6
- package/dist/{data-list-skeleton-sdcaabdX.cjs.map → data-list-skeleton-DY0F40WQ.cjs.map} +1 -1
- package/dist/{data-panel-BkfjzriB.cjs → data-panel-DGNV14pm.cjs} +20 -9
- package/dist/data-panel-DGNV14pm.cjs.map +1 -0
- package/dist/{data-panel-CMkR6Avv.js → data-panel-DjtnX70w.js} +20 -9
- package/dist/data-panel-DjtnX70w.js.map +1 -0
- package/dist/{date-time-range-picker-BjQVCVUM.cjs → date-time-range-picker-CXGab8Nj.cjs} +3 -3
- package/dist/{date-time-range-picker-BjQVCVUM.cjs.map → date-time-range-picker-CXGab8Nj.cjs.map} +1 -1
- package/dist/{date-time-range-picker-D-EECKzz.js → date-time-range-picker-CcnDMZJu.js} +3 -3
- package/dist/{date-time-range-picker-D-EECKzz.js.map → date-time-range-picker-CcnDMZJu.js.map} +1 -1
- package/dist/{dialog-j2e95YNV.js → dialog-AzCRnEo3.js} +3 -3
- package/dist/{dialog-j2e95YNV.js.map → dialog-AzCRnEo3.js.map} +1 -1
- package/dist/{dialog-BMUfQ9XU.cjs → dialog-SSeOqRnH.cjs} +3 -3
- package/dist/{dialog-BMUfQ9XU.cjs.map → dialog-SSeOqRnH.cjs.map} +1 -1
- package/dist/{dialog-action-CmFDNyZX.cjs → dialog-action-Caa-pb85.cjs} +3 -3
- package/dist/{dialog-action-CmFDNyZX.cjs.map → dialog-action-Caa-pb85.cjs.map} +1 -1
- package/dist/{dialog-action-zKqvuroE.js → dialog-action-DykMOK2W.js} +3 -3
- package/dist/{dialog-action-zKqvuroE.js.map → dialog-action-DykMOK2W.js.map} +1 -1
- package/dist/domains/auth/components/session-expired.cjs.js +1 -1
- package/dist/domains/auth/components/session-expired.es.js +1 -1
- package/dist/domains/chat/attachments/attachment-preview-dialog.cjs.js +2 -2
- package/dist/domains/chat/attachments/attachment-preview-dialog.es.js +2 -2
- package/dist/domains/chat/attachments/composer-attachment.cjs.js +1 -1
- package/dist/domains/chat/attachments/composer-attachment.es.js +1 -1
- package/dist/domains/chat/components/badge-wrapper.cjs.js +1 -1
- package/dist/domains/chat/components/badge-wrapper.es.js +1 -1
- package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js +3 -3
- package/dist/domains/chat/components/network-choice-metadata-dialog.es.js +3 -3
- package/dist/domains/chat/messages/assistant-message-actions.cjs.js +2 -2
- package/dist/domains/chat/messages/assistant-message-actions.es.js +2 -2
- package/dist/domains/chat/messages/dataset-save-action.cjs.js +5 -5
- package/dist/domains/chat/messages/dataset-save-action.es.js +5 -5
- package/dist/domains/chat/messages/message-row.cjs.js +4 -4
- package/dist/domains/chat/messages/message-row.es.js +4 -4
- package/dist/domains/chat/messages/notification-signal-notice.cjs.js +1 -1
- package/dist/domains/chat/messages/notification-signal-notice.es.js +1 -1
- package/dist/domains/chat/messages/renderers/message-text.cjs.js +1 -1
- package/dist/domains/chat/messages/renderers/message-text.cjs.js.map +1 -1
- package/dist/domains/chat/messages/renderers/message-text.es.js +1 -1
- package/dist/domains/chat/messages/renderers/message-text.es.js.map +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 +3 -3
- package/dist/domains/chat/messages/skill-message.es.js +3 -3
- package/dist/domains/chat/messages/system-reminder-badge.cjs.js +1 -1
- package/dist/domains/chat/messages/system-reminder-badge.es.js +1 -1
- package/dist/domains/chat/om/om-parts-converter.cjs.js.map +1 -1
- package/dist/domains/chat/om/om-parts-converter.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 +4 -4
- package/dist/domains/chat/tools/badges/agent-badge.es.js +4 -4
- package/dist/domains/chat/tools/badges/ask-user-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/ask-user-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/background-task-metadata-dialog.cjs.js +3 -3
- package/dist/domains/chat/tools/badges/background-task-metadata-dialog.cjs.js.map +1 -1
- package/dist/domains/chat/tools/badges/background-task-metadata-dialog.es.js +3 -3
- package/dist/domains/chat/tools/badges/background-task-metadata-dialog.es.js.map +1 -1
- package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js +2 -2
- package/dist/domains/chat/tools/badges/code-mode-badge.es.js +2 -2
- package/dist/domains/chat/tools/badges/file-tree-badge.cjs.js +2 -2
- package/dist/domains/chat/tools/badges/file-tree-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 +3 -3
- package/dist/domains/chat/tools/badges/tool-badge.es.js +3 -3
- package/dist/domains/chat/tools/badges/workflow-badge.cjs.js +6 -3
- package/dist/domains/chat/tools/badges/workflow-badge.cjs.js.map +1 -1
- package/dist/domains/chat/tools/badges/workflow-badge.es.js +6 -3
- package/dist/domains/chat/tools/badges/workflow-badge.es.js.map +1 -1
- package/dist/domains/chat/tools/submit-plan-tool.cjs.js +2 -2
- package/dist/domains/chat/tools/submit-plan-tool.es.js +2 -2
- package/dist/domains/chat/tools/tool-card.cjs.js +1 -1
- package/dist/domains/chat/tools/tool-card.es.js +1 -1
- package/dist/domains/datasets/components/save-as-dataset-item-dialog.cjs.js +4 -4
- package/dist/domains/datasets/components/save-as-dataset-item-dialog.es.js +4 -4
- package/dist/domains/logs/components/log-data-panel.cjs.js +4 -4
- package/dist/domains/logs/components/log-data-panel.es.js +4 -4
- package/dist/domains/logs/components/logs-list-view.cjs.js +3 -2
- package/dist/domains/logs/components/logs-list-view.cjs.js.map +1 -1
- package/dist/domains/logs/components/logs-list-view.es.js +3 -2
- package/dist/domains/logs/components/logs-list-view.es.js.map +1 -1
- package/dist/domains/logs/components/logs-toolbar.cjs.js +1 -1
- package/dist/domains/logs/components/logs-toolbar.es.js +1 -1
- package/dist/domains/logs/components/no-logs-info.cjs.js +1 -1
- package/dist/domains/logs/components/no-logs-info.es.js +1 -1
- package/dist/domains/mcps/components/mcp-app-viewer.cjs.js.map +1 -1
- package/dist/domains/mcps/components/mcp-app-viewer.es.js.map +1 -1
- package/dist/domains/memory/components/flame-graph.cjs.js +1 -1
- package/dist/domains/memory/components/flame-graph.es.js +1 -1
- package/dist/domains/memory/components/memory-studio-panel.cjs.js +1 -1
- package/dist/domains/memory/components/memory-studio-panel.es.js +1 -1
- package/dist/domains/metrics/components/agent-runs-card.cjs.js +1 -1
- package/dist/domains/metrics/components/agent-runs-card.es.js +1 -1
- package/dist/domains/metrics/components/card-action-buttons.cjs.js +1 -1
- package/dist/domains/metrics/components/card-action-buttons.es.js +1 -1
- package/dist/domains/metrics/components/chart-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/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/scores-card.cjs.js +1 -1
- package/dist/domains/metrics/components/scores-card.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-volume-card.cjs.js +1 -1
- package/dist/domains/metrics/components/trace-volume-card.es.js +1 -1
- package/dist/domains/metrics/components/usage-card.cjs.js +1 -1
- package/dist/domains/metrics/components/usage-card.es.js +1 -1
- package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.cjs.js +4 -4
- package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.es.js +4 -4
- package/dist/domains/scores/components/score-data-panel.cjs.js +3 -3
- package/dist/domains/scores/components/score-data-panel.es.js +3 -3
- package/dist/domains/scores/components/span-scoring.cjs.js +3 -3
- package/dist/domains/scores/components/span-scoring.es.js +3 -3
- package/dist/domains/scores/components/trace-scores-tab.cjs.js +2 -1
- package/dist/domains/scores/components/trace-scores-tab.cjs.js.map +1 -1
- package/dist/domains/scores/components/trace-scores-tab.es.js +2 -1
- package/dist/domains/scores/components/trace-scores-tab.es.js.map +1 -1
- package/dist/domains/traces/components/feedback-thread.cjs.js +4 -4
- package/dist/domains/traces/components/feedback-thread.cjs.js.map +1 -1
- package/dist/domains/traces/components/feedback-thread.es.js +4 -4
- package/dist/domains/traces/components/feedback-thread.es.js.map +1 -1
- package/dist/domains/traces/components/shared.cjs.js +4 -3
- package/dist/domains/traces/components/shared.cjs.js.map +1 -1
- package/dist/domains/traces/components/shared.es.js +5 -4
- package/dist/domains/traces/components/shared.es.js.map +1 -1
- package/dist/domains/traces/components/span-data-panel-view.cjs.js +4 -4
- package/dist/domains/traces/components/span-data-panel-view.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-data-panel-view.es.js +4 -4
- package/dist/domains/traces/components/span-data-panel-view.es.js.map +1 -1
- package/dist/domains/traces/components/span-details-view.cjs.js +1 -1
- package/dist/domains/traces/components/span-details-view.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +2 -2
- package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +2 -2
- package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +2 -2
- package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +2 -2
- package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +3 -3
- package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +3 -3
- package/dist/domains/traces/components/span-payload/span-payload-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 +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-processor.es.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-registry.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-registry.es.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-section.cjs.js +3 -3
- package/dist/domains/traces/components/span-payload/span-payload-section.es.js +3 -3
- package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +2 -2
- package/dist/domains/traces/components/span-payload/span-processor-attributes.cjs.js +2 -2
- package/dist/domains/traces/components/span-payload/span-processor-attributes.es.js +2 -2
- package/dist/domains/traces/components/span-rows.cjs.js +5 -0
- package/dist/domains/traces/components/span-rows.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-rows.es.js +5 -0
- package/dist/domains/traces/components/span-rows.es.js.map +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/span-timeline-row.cjs.js +34 -28
- package/dist/domains/traces/components/span-timeline-row.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-timeline-row.es.js +34 -28
- package/dist/domains/traces/components/span-timeline-row.es.js.map +1 -1
- package/dist/domains/traces/components/span-timing-hover-card.cjs.js +1 -1
- package/dist/domains/traces/components/span-timing-hover-card.es.js +1 -1
- package/dist/domains/traces/components/span-token-usage.cjs.js +1 -1
- package/dist/domains/traces/components/span-token-usage.es.js +1 -1
- package/dist/domains/traces/components/span-tree-rail.cjs.js +50 -0
- package/dist/domains/traces/components/span-tree-rail.cjs.js.map +1 -0
- package/dist/domains/traces/components/span-tree-rail.d.ts +2 -0
- package/dist/domains/traces/components/span-tree-rail.es.js +42 -0
- package/dist/domains/traces/components/span-tree-rail.es.js.map +1 -0
- package/dist/domains/traces/components/span-tree-row.cjs.js +2 -2
- package/dist/domains/traces/components/span-tree-row.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-tree-row.es.js +2 -2
- package/dist/domains/traces/components/span-tree-row.es.js.map +1 -1
- package/dist/domains/traces/components/span-type-badge.cjs.js +29 -0
- package/dist/domains/traces/components/span-type-badge.cjs.js.map +1 -0
- package/dist/domains/traces/components/span-type-badge.d.ts +2 -0
- package/dist/domains/traces/components/span-type-badge.es.js +25 -0
- package/dist/domains/traces/components/span-type-badge.es.js.map +1 -0
- package/dist/domains/traces/components/span-type-legend.cjs.js +2 -2
- package/dist/domains/traces/components/span-type-legend.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-type-legend.es.js +2 -2
- package/dist/domains/traces/components/span-type-legend.es.js.map +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-messages.cjs.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-messages.es.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-row.cjs.js.map +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-row.es.js.map +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-spans.cjs.js +2 -2
- package/dist/domains/traces/components/thread-trace/thread-trace-spans.es.js +2 -2
- package/dist/domains/traces/components/thread-view-by-trace.cjs.js +2 -1
- 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 +2 -1
- package/dist/domains/traces/components/thread-view-by-trace.es.js.map +1 -1
- package/dist/domains/traces/components/timeline-name-col.cjs.js +53 -27
- package/dist/domains/traces/components/timeline-name-col.cjs.js.map +1 -1
- package/dist/domains/traces/components/timeline-name-col.es.js +54 -28
- package/dist/domains/traces/components/timeline-name-col.es.js.map +1 -1
- package/dist/domains/traces/components/timeline-structure-sign.cjs.js +23 -14
- package/dist/domains/traces/components/timeline-structure-sign.cjs.js.map +1 -1
- package/dist/domains/traces/components/timeline-structure-sign.es.js +24 -15
- package/dist/domains/traces/components/timeline-structure-sign.es.js.map +1 -1
- package/dist/domains/traces/components/trace-columns-menu.cjs.js +4 -4
- package/dist/domains/traces/components/trace-columns-menu.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-columns-menu.es.js +4 -4
- package/dist/domains/traces/components/trace-columns-menu.es.js.map +1 -1
- package/dist/domains/traces/components/trace-data-panel-view.cjs.js +32 -5
- package/dist/domains/traces/components/trace-data-panel-view.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-data-panel-view.es.js +32 -5
- package/dist/domains/traces/components/trace-data-panel-view.es.js.map +1 -1
- package/dist/domains/traces/components/trace-data-panel.cjs.js +5 -2
- package/dist/domains/traces/components/trace-data-panel.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-data-panel.es.js +5 -2
- package/dist/domains/traces/components/trace-data-panel.es.js.map +1 -1
- package/dist/domains/traces/components/trace-error-cell.cjs.js +35 -0
- package/dist/domains/traces/components/trace-error-cell.cjs.js.map +1 -0
- package/dist/domains/traces/components/trace-error-cell.d.ts +2 -0
- package/dist/domains/traces/components/trace-error-cell.es.js +31 -0
- package/dist/domains/traces/components/trace-error-cell.es.js.map +1 -0
- package/dist/domains/traces/components/trace-error-details.cjs.js +22 -0
- package/dist/domains/traces/components/trace-error-details.cjs.js.map +1 -0
- package/dist/domains/traces/components/trace-error-details.d.ts +2 -0
- package/dist/domains/traces/components/trace-error-details.es.js +18 -0
- package/dist/domains/traces/components/trace-error-details.es.js.map +1 -0
- package/dist/domains/traces/components/trace-error-summary.cjs.js +31 -0
- package/dist/domains/traces/components/trace-error-summary.cjs.js.map +1 -0
- package/dist/domains/traces/components/trace-error-summary.d.ts +2 -0
- package/dist/domains/traces/components/trace-error-summary.es.js +27 -0
- package/dist/domains/traces/components/trace-error-summary.es.js.map +1 -0
- package/dist/domains/traces/components/trace-id-button.cjs.js +1 -1
- package/dist/domains/traces/components/trace-id-button.es.js +1 -1
- package/dist/domains/traces/components/trace-span-panel.cjs.js +1 -1
- package/dist/domains/traces/components/trace-span-panel.es.js +1 -1
- package/dist/domains/traces/components/trace-span-tree-skeleton.cjs.js +7 -7
- package/dist/domains/traces/components/trace-span-tree-skeleton.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-span-tree-skeleton.es.js +7 -7
- package/dist/domains/traces/components/trace-span-tree-skeleton.es.js.map +1 -1
- package/dist/domains/traces/components/trace-span-tree.cjs.js +1 -2
- package/dist/domains/traces/components/trace-span-tree.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-span-tree.es.js +2 -3
- package/dist/domains/traces/components/trace-span-tree.es.js.map +1 -1
- package/dist/domains/traces/components/trace-summary-description.cjs.js +1 -1
- package/dist/domains/traces/components/trace-summary-description.es.js +1 -1
- package/dist/domains/traces/components/trace-thread-item-view.cjs.js +1 -1
- package/dist/domains/traces/components/trace-thread-item-view.es.js +1 -1
- package/dist/domains/traces/components/trace-thread-panel.cjs.js +1 -1
- package/dist/domains/traces/components/trace-thread-panel.es.js +1 -1
- package/dist/domains/traces/components/trace-time-range-chip.cjs.js +2 -2
- package/dist/domains/traces/components/trace-time-range-chip.es.js +2 -2
- package/dist/domains/traces/components/traces-list-mode-toggle.cjs.js +1 -1
- package/dist/domains/traces/components/traces-list-mode-toggle.es.js +1 -1
- package/dist/domains/traces/components/traces-list-view.cjs.js +10 -7
- package/dist/domains/traces/components/traces-list-view.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-list-view.es.js +9 -6
- package/dist/domains/traces/components/traces-list-view.es.js.map +1 -1
- package/dist/domains/traces/components/traces-page-skeleton.cjs.js +4 -1
- package/dist/domains/traces/components/traces-page-skeleton.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-page-skeleton.es.js +4 -1
- package/dist/domains/traces/components/traces-page-skeleton.es.js.map +1 -1
- package/dist/domains/traces/hooks/use-trace-list-navigation.cjs.js.map +1 -1
- package/dist/domains/traces/hooks/use-trace-list-navigation.es.js.map +1 -1
- package/dist/domains/traces/utils/flatten-to-search-text.cjs.js.map +1 -1
- package/dist/domains/traces/utils/flatten-to-search-text.es.js.map +1 -1
- package/dist/domains/workflows/components/workflow-combobox.cjs.js +1 -1
- package/dist/domains/workflows/components/workflow-combobox.es.js +1 -1
- package/dist/domains/workflows/components/workflow-information.cjs.js +1 -1
- package/dist/domains/workflows/components/workflow-information.es.js +1 -1
- package/dist/domains/workflows/components/workflow-step-detail.cjs.js +3 -3
- package/dist/domains/workflows/components/workflow-step-detail.es.js +3 -3
- package/dist/domains/workflows/components/workflows-list/no-workflows-info.cjs.js +1 -1
- package/dist/domains/workflows/components/workflows-list/no-workflows-info.es.js +1 -1
- package/dist/domains/workflows/components/workflows-list/workflows-list.cjs.js +2 -2
- package/dist/domains/workflows/components/workflows-list/workflows-list.es.js +2 -2
- package/dist/domains/workflows/runs/workflow-run-list.cjs.js +2 -2
- package/dist/domains/workflows/runs/workflow-run-list.es.js +2 -2
- package/dist/domains/workflows/workflow/data/workflow-data-button.cjs.js +1 -1
- package/dist/domains/workflows/workflow/data/workflow-data-button.es.js +1 -1
- package/dist/domains/workflows/workflow/data/workflow-data-inspector.cjs.js +2 -2
- package/dist/domains/workflows/workflow/data/workflow-data-inspector.es.js +2 -2
- package/dist/domains/workflows/workflow/input/workflow-json-input.cjs.js +1 -1
- package/dist/domains/workflows/workflow/input/workflow-json-input.es.js +1 -1
- package/dist/domains/workflows/workflow/input/workflow-processor-input.cjs.js +1 -1
- package/dist/domains/workflows/workflow/input/workflow-processor-input.es.js +1 -1
- package/dist/domains/workflows/workflow/use-workflow-graph-runtime.cjs.js +2 -2
- package/dist/domains/workflows/workflow/use-workflow-graph-runtime.es.js +2 -2
- package/dist/domains/workflows/workflow/workflow-body-graph.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-body-graph.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-cancel-button.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-cancel-button.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-data-edge.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-data-edge.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-debug-step-controls.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-debug-step-controls.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-graph-boundary.cjs.js +3 -3
- package/dist/domains/workflows/workflow/workflow-graph-boundary.es.js +3 -3
- package/dist/domains/workflows/workflow/workflow-graph-inner.cjs.js +2 -2
- package/dist/domains/workflows/workflow/workflow-graph-inner.es.js +2 -2
- package/dist/domains/workflows/workflow/workflow-graph-node.cjs.js +2 -2
- package/dist/domains/workflows/workflow/workflow-graph-node.es.js +2 -2
- package/dist/domains/workflows/workflow/workflow-input-data.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-input-data.cjs.js.map +1 -1
- package/dist/domains/workflows/workflow/workflow-input-data.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-input-data.es.js.map +1 -1
- package/dist/domains/workflows/workflow/workflow-map-config-dialog.cjs.js +3 -3
- package/dist/domains/workflows/workflow/workflow-map-config-dialog.es.js +3 -3
- package/dist/domains/workflows/workflow/workflow-nested-graph.cjs.js +3 -3
- package/dist/domains/workflows/workflow/workflow-nested-graph.es.js +3 -3
- package/dist/domains/workflows/workflow/workflow-run-data.cjs.js +2 -2
- package/dist/domains/workflows/workflow/workflow-run-data.es.js +2 -2
- package/dist/domains/workflows/workflow/workflow-run-header.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-run-header.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-status.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-status.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-step-action-bar.cjs.js +3 -3
- package/dist/domains/workflows/workflow/workflow-step-action-bar.es.js +3 -3
- package/dist/domains/workflows/workflow/workflow-suspended-steps.cjs.js +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/workflows/workflow/workflow-timeline-row.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-timeline-row.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-timeline.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-timeline.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-trigger-form.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-trigger-form.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-trigger-header.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-trigger-header.es.js +1 -1
- package/dist/domains/workspace/components/workspace-active-file.cjs.js +1 -1
- package/dist/domains/workspace/components/workspace-active-file.es.js +1 -1
- package/dist/domains/workspace/components/workspace-add-skill-dialog.cjs.js +5 -5
- package/dist/domains/workspace/components/workspace-add-skill-dialog.es.js +5 -5
- package/dist/domains/workspace/components/workspace-add-skill.cjs.js +1 -1
- package/dist/domains/workspace/components/workspace-add-skill.es.js +1 -1
- package/dist/domains/workspace/components/workspace-create-directory.cjs.js +2 -2
- package/dist/domains/workspace/components/workspace-create-directory.es.js +2 -2
- package/dist/domains/workspace/components/workspace-markdown-preview.cjs.js +2 -2
- package/dist/domains/workspace/components/workspace-markdown-preview.es.js +2 -2
- 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 +2 -2
- package/dist/domains/workspace/components/workspace-tree.es.js +2 -2
- package/dist/{drawer-DROYPMUm.cjs → drawer-DdTU-nBR.cjs} +2 -2
- package/dist/{drawer-DROYPMUm.cjs.map → drawer-DdTU-nBR.cjs.map} +1 -1
- package/dist/{drawer-C-8E9yHN.js → drawer-mj-G7-Tu.js} +2 -2
- package/dist/{drawer-C-8E9yHN.js.map → drawer-mj-G7-Tu.js.map} +1 -1
- package/dist/dropdown-menu-CQ_48tVI.js.map +1 -1
- package/dist/dropdown-menu-CsynT1aD.cjs.map +1 -1
- package/dist/ee/signals/components/entity-index-list.cjs.js +3 -1
- package/dist/ee/signals/components/entity-index-list.cjs.js.map +1 -1
- package/dist/ee/signals/components/entity-index-list.es.js +3 -1
- package/dist/ee/signals/components/entity-index-list.es.js.map +1 -1
- package/dist/ee/signals/components/signals-empty-state.cjs.js +1 -1
- package/dist/ee/signals/components/signals-empty-state.es.js +1 -1
- package/dist/ee/signals/components/trace-intelligence-entity-detail.cjs.js.map +1 -1
- package/dist/ee/signals/components/trace-intelligence-entity-detail.es.js.map +1 -1
- package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +6 -4
- package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js.map +1 -1
- package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +6 -4
- package/dist/ee/signals/components/trace-intelligence-entity-index.es.js.map +1 -1
- package/dist/ee/signals/examples-pager.cjs.js +1 -1
- package/dist/ee/signals/examples-pager.es.js +1 -1
- package/dist/ee/signals/noise-detail-panel.cjs.js +1 -1
- package/dist/ee/signals/noise-detail-panel.es.js +1 -1
- package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js +2 -2
- package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +2 -2
- package/dist/ee/signals/settings/trace-signal-settings.cjs.js +1 -1
- package/dist/ee/signals/settings/trace-signal-settings.es.js +1 -1
- package/dist/ee/signals/signals-error-state.cjs.js +1 -1
- package/dist/ee/signals/signals-error-state.es.js +1 -1
- package/dist/ee/signals/snapshot-timeline.cjs.js +1 -1
- package/dist/ee/signals/snapshot-timeline.es.js +1 -1
- package/dist/ee/signals/theme-detail-panel.cjs.js +1 -1
- package/dist/ee/signals/theme-detail-panel.es.js +1 -1
- package/dist/ee/signals/theme-filter-banner.cjs.js +1 -1
- package/dist/ee/signals/theme-filter-banner.es.js +1 -1
- package/dist/ee/signals/trace-insight-view.cjs.js +1 -1
- package/dist/ee/signals/trace-insight-view.es.js +1 -1
- package/dist/ee/signals/trace-intelligence-provider.cjs.js.map +1 -1
- package/dist/ee/signals/trace-intelligence-provider.es.js.map +1 -1
- package/dist/ee/signals/view-mode-tab.cjs.js +1 -1
- package/dist/ee/signals/view-mode-tab.es.js +1 -1
- package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +3 -3
- package/dist/ee/topics/components/topic-trace-summary-list.es.js +3 -3
- package/dist/{field-error-id-Dbe6IInA.cjs → field-error-id-0yYYU0ar.cjs} +2 -2
- package/dist/{field-error-id-Dbe6IInA.cjs.map → field-error-id-0yYYU0ar.cjs.map} +1 -1
- package/dist/{field-error-id-Sqhk00e4.js → field-error-id-CdzuQK5c.js} +2 -2
- package/dist/{field-error-id-Sqhk00e4.js.map → field-error-id-CdzuQK5c.js.map} +1 -1
- package/dist/{filter-bar-chip-BarAq1S2.js → filter-bar-chip-C9CXOudu.js} +3 -3
- package/dist/filter-bar-chip-C9CXOudu.js.map +1 -0
- package/dist/{filter-bar-chip-BJJ6ytJ4.cjs → filter-bar-chip-DgvuQv6c.cjs} +3 -3
- package/dist/filter-bar-chip-DgvuQv6c.cjs.map +1 -0
- package/dist/hooks/use-environment-variables-editor.cjs.js.map +1 -1
- package/dist/hooks/use-environment-variables-editor.es.js.map +1 -1
- package/dist/hooks/use-fluid-hover.cjs.js.map +1 -1
- package/dist/hooks/use-fluid-hover.es.js.map +1 -1
- package/dist/icons/Icon.cjs.js.map +1 -1
- package/dist/icons/Icon.es.js.map +1 -1
- package/dist/icons/SkillIcon.cjs.js.map +1 -1
- package/dist/icons/SkillIcon.es.js.map +1 -1
- package/dist/icons/icon-size-classes.cjs.js +4 -4
- package/dist/icons/icon-size-classes.cjs.js.map +1 -1
- package/dist/icons/icon-size-classes.es.js +4 -4
- package/dist/icons/icon-size-classes.es.js.map +1 -1
- package/dist/{input-group-CiBbTaPP.js → input-group-BAg6iSIe.js} +2 -2
- package/dist/{input-group-CiBbTaPP.js.map → input-group-BAg6iSIe.js.map} +1 -1
- package/dist/{input-group-DSW5WoSU.cjs → input-group-DRXUthxe.cjs} +2 -2
- package/dist/{input-group-DSW5WoSU.cjs.map → input-group-DRXUthxe.cjs.map} +1 -1
- package/dist/keyboard/keyboard-dispatcher.cjs.js +2 -4
- package/dist/keyboard/keyboard-dispatcher.cjs.js.map +1 -1
- package/dist/keyboard/keyboard-dispatcher.es.js +2 -4
- package/dist/keyboard/keyboard-dispatcher.es.js.map +1 -1
- package/dist/keyboard/keyboard-shortcuts-context.cjs.js.map +1 -1
- package/dist/keyboard/keyboard-shortcuts-context.es.js.map +1 -1
- package/dist/keyboard/use-keydown.cjs.js +2 -0
- package/dist/keyboard/use-keydown.cjs.js.map +1 -1
- package/dist/keyboard/use-keydown.es.js +2 -0
- package/dist/keyboard/use-keydown.es.js.map +1 -1
- package/dist/layout/tabbed-container.cjs.js +4 -4
- package/dist/layout/tabbed-container.es.js +4 -4
- package/dist/lib/form/components/array-element-wrapper.cjs.js +1 -1
- package/dist/lib/form/components/array-element-wrapper.es.js +1 -1
- package/dist/lib/form/components/array-wrapper.cjs.js +1 -1
- package/dist/lib/form/components/array-wrapper.es.js +1 -1
- package/dist/lib/form/components/date-field.cjs.js +1 -1
- package/dist/lib/form/components/date-field.es.js +1 -1
- package/dist/lib/form/components/form-submit-row.cjs.js +1 -1
- package/dist/lib/form/components/form-submit-row.es.js +1 -1
- package/dist/lib/form/components/record-field.cjs.js +1 -1
- package/dist/lib/form/components/record-field.es.js +1 -1
- package/dist/lib/form/components/select-field.cjs.js +1 -1
- package/dist/lib/form/components/select-field.es.js +1 -1
- package/dist/lib/form/components/submit-button.cjs.js +1 -1
- package/dist/lib/form/components/submit-button.es.js +1 -1
- package/dist/lib/form/zod-provider.cjs.js.map +1 -1
- package/dist/lib/form/zod-provider.es.js.map +1 -1
- package/dist/{list-search-D3I6xt0B.js → list-search-ByJdIxIh.js} +2 -2
- package/dist/{list-search-D3I6xt0B.js.map → list-search-ByJdIxIh.js.map} +1 -1
- package/dist/{list-search-DHiQ1-O6.cjs → list-search-DNJVeHmK.cjs} +2 -2
- package/dist/{list-search-DHiQ1-O6.cjs.map → list-search-DNJVeHmK.cjs.map} +1 -1
- package/dist/{logs-data-list-Cb85LPcT.js → logs-data-list-CGerYgSd.js} +2 -3
- package/dist/{logs-data-list-Cb85LPcT.js.map → logs-data-list-CGerYgSd.js.map} +1 -1
- package/dist/{logs-data-list-DlQxxrNw.cjs → logs-data-list-DEZuSjqt.cjs} +21 -22
- package/dist/{logs-data-list-DlQxxrNw.cjs.map → logs-data-list-DEZuSjqt.cjs.map} +1 -1
- package/dist/{markdown-renderer-HIfFphpI.cjs → markdown-renderer-BcpwvSl9.cjs} +3 -3
- package/dist/{markdown-renderer-HIfFphpI.cjs.map → markdown-renderer-BcpwvSl9.cjs.map} +1 -1
- package/dist/{markdown-renderer-BYxWiHRj.js → markdown-renderer-CHLpv5n5.js} +3 -3
- package/dist/{markdown-renderer-BYxWiHRj.js.map → markdown-renderer-CHLpv5n5.js.map} +1 -1
- package/dist/{message-copy-button-CnVgCy9y.cjs → message-copy-button-D3O4hWDV.cjs} +2 -2
- package/dist/{message-copy-button-CnVgCy9y.cjs.map → message-copy-button-D3O4hWDV.cjs.map} +1 -1
- package/dist/{message-copy-button-Ctew41Rr.js → message-copy-button-OI1mwAaS.js} +2 -2
- package/dist/{message-copy-button-Ctew41Rr.js.map → message-copy-button-OI1mwAaS.js.map} +1 -1
- package/dist/{metrics-card-DaFApxZY.cjs → metrics-card-CpjGYNBP.cjs} +2 -2
- package/dist/{metrics-card-DaFApxZY.cjs.map → metrics-card-CpjGYNBP.cjs.map} +1 -1
- package/dist/{metrics-card-Z_moDiV5.js → metrics-card-D6ty6a6Z.js} +2 -2
- package/dist/{metrics-card-Z_moDiV5.js.map → metrics-card-D6ty6a6Z.js.map} +1 -1
- package/dist/{notification-activity-MR63WqZm.cjs → notification-activity-BSNuqJDd.cjs} +2 -2
- package/dist/{notification-activity-MR63WqZm.cjs.map → notification-activity-BSNuqJDd.cjs.map} +1 -1
- package/dist/{notification-activity-FJcMFxIj.js → notification-activity-BWXHmlTn.js} +2 -2
- package/dist/{notification-activity-FJcMFxIj.js.map → notification-activity-BWXHmlTn.js.map} +1 -1
- package/dist/{plan-BoOK_LAB.cjs → plan-Cm3yHvs3.cjs} +4 -4
- package/dist/{plan-BoOK_LAB.cjs.map → plan-Cm3yHvs3.cjs.map} +1 -1
- package/dist/{plan-m0hj6Zgv.js → plan-TtrepVnQ.js} +4 -4
- package/dist/{plan-m0hj6Zgv.js.map → plan-TtrepVnQ.js.map} +1 -1
- package/dist/primitives/form-element.cjs.js.map +1 -1
- package/dist/primitives/form-element.es.js.map +1 -1
- package/dist/primitives/menu-item.cjs.js +4 -2
- package/dist/primitives/menu-item.cjs.js.map +1 -1
- package/dist/primitives/menu-item.es.js +4 -2
- package/dist/primitives/menu-item.es.js.map +1 -1
- package/dist/primitives/popup-anchor.cjs.js +34 -0
- package/dist/primitives/popup-anchor.cjs.js.map +1 -0
- package/dist/primitives/popup-anchor.d.ts +2 -0
- package/dist/primitives/popup-anchor.es.js +10 -0
- package/dist/primitives/popup-anchor.es.js.map +1 -0
- package/dist/primitives/trigger-button.cjs.js +1 -1
- package/dist/primitives/trigger-button.es.js +1 -1
- package/dist/{property-filter-applied-J9ob_Rss.js → property-filter-applied-BMmMf4DE.js} +2 -2
- package/dist/property-filter-applied-BMmMf4DE.js.map +1 -0
- package/dist/{property-filter-applied-CtSglSaH.cjs → property-filter-applied-Bj-bh9gv.cjs} +2 -2
- package/dist/property-filter-applied-Bj-bh9gv.cjs.map +1 -0
- package/dist/{reasoning-activity-5MFE3mzw.js → reasoning-activity-C-sJt2A9.js} +3 -3
- package/dist/{reasoning-activity-5MFE3mzw.js.map → reasoning-activity-C-sJt2A9.js.map} +1 -1
- package/dist/{reasoning-activity-DMvughvN.cjs → reasoning-activity-DpYFjxuL.cjs} +3 -3
- package/dist/{reasoning-activity-DMvughvN.cjs.map → reasoning-activity-DpYFjxuL.cjs.map} +1 -1
- package/dist/resize/panel-drawer.cjs.js +1 -1
- package/dist/resize/panel-drawer.es.js +1 -1
- package/dist/{search-input-BPqubJZC.js → search-input-C9qFBzn6.js} +2 -2
- package/dist/{search-input-BPqubJZC.js.map → search-input-C9qFBzn6.js.map} +1 -1
- package/dist/{search-input-BUMYRaUW.cjs → search-input-CMNy0JWd.cjs} +2 -2
- package/dist/{search-input-BUMYRaUW.cjs.map → search-input-CMNy0JWd.cjs.map} +1 -1
- package/dist/section-CctlZIXp.cjs.map +1 -1
- package/dist/section-D0hKTVXt.js.map +1 -1
- package/dist/{select-CQtsggxJ.js → select-7rYaECQf.js} +2 -2
- package/dist/select-7rYaECQf.js.map +1 -0
- package/dist/{select-CbNLtiAs.cjs → select-A3AFKLd9.cjs} +2 -2
- package/dist/select-A3AFKLd9.cjs.map +1 -0
- package/dist/shimmer-BCSr3Rqf.js.map +1 -1
- package/dist/shimmer-Co-XPvF9.cjs.map +1 -1
- package/dist/{side-dialog-bm8NPDXy.js → side-dialog-DSvj8H6x.js} +4 -4
- package/dist/{side-dialog-bm8NPDXy.js.map → side-dialog-DSvj8H6x.js.map} +1 -1
- package/dist/{side-dialog-BzULMBaH.cjs → side-dialog-SJCWBnbw.cjs} +4 -4
- package/dist/{side-dialog-BzULMBaH.cjs.map → side-dialog-SJCWBnbw.cjs.map} +1 -1
- package/dist/{signal-activity-D-_u7DFm.cjs → signal-activity-C_bihjcd.cjs} +2 -2
- package/dist/{signal-activity-D-_u7DFm.cjs.map → signal-activity-C_bihjcd.cjs.map} +1 -1
- package/dist/{signal-activity-BkFexFiJ.js → signal-activity-J9kpnwAF.js} +2 -2
- package/dist/{signal-activity-BkFexFiJ.js.map → signal-activity-J9kpnwAF.js.map} +1 -1
- package/dist/{span-payload-primitives-wujxDKfA.cjs → span-payload-primitives-C0KYtmtV.cjs} +3 -3
- package/dist/{span-payload-primitives-wujxDKfA.cjs.map → span-payload-primitives-C0KYtmtV.cjs.map} +1 -1
- package/dist/{span-payload-primitives-jQiJK0qI.js → span-payload-primitives-D_N9LeLk.js} +3 -3
- package/dist/{span-payload-primitives-jQiJK0qI.js.map → span-payload-primitives-D_N9LeLk.js.map} +1 -1
- package/dist/src/domains/traces/components/span-rows.d.ts +2 -0
- package/dist/src/domains/traces/components/span-tree-rail.d.ts +23 -0
- package/dist/src/domains/traces/components/span-type-badge.d.ts +9 -0
- package/dist/src/domains/traces/components/timeline-name-col.d.ts +2 -2
- package/dist/src/domains/traces/components/timeline-structure-sign.d.ts +14 -1
- package/dist/src/domains/traces/components/trace-error-cell.d.ts +8 -0
- package/dist/src/domains/traces/components/trace-error-details.d.ts +10 -0
- package/dist/src/domains/traces/components/trace-error-summary.d.ts +8 -0
- package/dist/src/domains/traces/components/trace-span-tree-skeleton.d.ts +1 -1
- package/dist/src/domains/traces/hooks/use-traces-list-source.d.ts +1 -0
- package/dist/src/ds/components/Avatar/avatar-size.d.ts +1 -1
- package/dist/src/ds/components/Breadcrumb/crumb-switcher.d.ts +0 -1
- package/dist/src/ds/components/Button/Button.d.ts +1 -1
- package/dist/src/ds/components/EnvironmentVariablesEditor/environment-variables-editor-context.d.ts +1 -2
- package/dist/src/ds/components/SavedViews/saved-view-editor.d.ts +1 -1
- package/dist/src/ds/components/Select/select.d.ts +1 -1
- package/dist/src/ds/primitives/popup-anchor.d.ts +4 -0
- package/dist/src/hooks/use-environment-variables-editor.d.ts +1 -1
- package/dist/src/lib/keyboard/keyboard-dispatcher.d.ts +2 -0
- package/dist/src/lib/keyboard/use-keydown.d.ts +8 -1
- package/dist/style.css +121 -143
- package/dist/{tabs-tab-DRaRUvQ3.cjs → tabs-tab-B0W25Dm2.cjs} +2 -2
- package/dist/{tabs-tab-DRaRUvQ3.cjs.map → tabs-tab-B0W25Dm2.cjs.map} +1 -1
- package/dist/{tabs-tab-CIVJEMoY.js → tabs-tab-CkLyKrL0.js} +2 -2
- package/dist/{tabs-tab-CIVJEMoY.js.map → tabs-tab-CkLyKrL0.js.map} +1 -1
- package/dist/{thread-list-BANpytn3.cjs → thread-list-BBPZYHh8.cjs} +2 -2
- package/dist/thread-list-BBPZYHh8.cjs.map +1 -0
- package/dist/{thread-list-lXnXsPul.js → thread-list-BGjKZfEH.js} +2 -2
- package/dist/thread-list-BGjKZfEH.js.map +1 -0
- package/dist/{time-picker-BpCfTfoe.js → time-picker-Bzdboi4W.js} +2 -2
- package/dist/{time-picker-BpCfTfoe.js.map → time-picker-Bzdboi4W.js.map} +1 -1
- package/dist/{time-picker-DhekkO5t.cjs → time-picker-CyvG-fwX.cjs} +2 -2
- package/dist/{time-picker-DhekkO5t.cjs.map → time-picker-CyvG-fwX.cjs.map} +1 -1
- package/dist/{tool-approval-BrqoN_mP.js → tool-approval-P8rUFAYp.js} +4 -4
- package/dist/{tool-approval-BrqoN_mP.js.map → tool-approval-P8rUFAYp.js.map} +1 -1
- package/dist/{tool-approval-zBfJ20iR.cjs → tool-approval-zhWdp8i6.cjs} +4 -4
- package/dist/{tool-approval-zBfJ20iR.cjs.map → tool-approval-zhWdp8i6.cjs.map} +1 -1
- package/dist/{tool-call-arguments-DwMeGQHD.cjs → tool-call-arguments-DzpFckIm.cjs} +3 -3
- package/dist/{tool-call-arguments-DwMeGQHD.cjs.map → tool-call-arguments-DzpFckIm.cjs.map} +1 -1
- package/dist/{tool-call-arguments-Dx4LW1Ni.js → tool-call-arguments-goEdIs4f.js} +3 -3
- package/dist/{tool-call-arguments-Dx4LW1Ni.js.map → tool-call-arguments-goEdIs4f.js.map} +1 -1
- package/dist/{tool-call-group-DJsiIb-B.cjs → tool-call-group-C56oARyx.cjs} +4 -4
- package/dist/tool-call-group-C56oARyx.cjs.map +1 -0
- package/dist/{tool-call-group-ZDNZog5K.js → tool-call-group-DU4T72Xn.js} +4 -4
- package/dist/tool-call-group-DU4T72Xn.js.map +1 -0
- package/dist/{tool-call-mono-Bs7y-1Cq.js → tool-call-mono-DPW6hN91.js} +2 -2
- package/dist/{tool-call-mono-Bs7y-1Cq.js.map → tool-call-mono-DPW6hN91.js.map} +1 -1
- package/dist/{tool-call-mono-I-vdqzCe.cjs → tool-call-mono-aheL8CkL.cjs} +2 -2
- package/dist/{tool-call-mono-I-vdqzCe.cjs.map → tool-call-mono-aheL8CkL.cjs.map} +1 -1
- package/dist/{tool-call-output-Dd8zlhLd.js → tool-call-output-BQYzMMMi.js} +2 -2
- package/dist/{tool-call-output-Dd8zlhLd.js.map → tool-call-output-BQYzMMMi.js.map} +1 -1
- package/dist/{tool-call-output-BrNg0Lkd.cjs → tool-call-output-CuwM5IHd.cjs} +2 -2
- package/dist/{tool-call-output-BrNg0Lkd.cjs.map → tool-call-output-CuwM5IHd.cjs.map} +1 -1
- package/dist/{tool-card-D4yrR2AE.js → tool-card-aclA3iVz.js} +4 -4
- package/dist/{tool-card-D4yrR2AE.js.map → tool-card-aclA3iVz.js.map} +1 -1
- package/dist/{tool-card-D6UdNzIX.cjs → tool-card-yii3vGHu.cjs} +4 -4
- package/dist/{tool-card-D6UdNzIX.cjs.map → tool-card-yii3vGHu.cjs.map} +1 -1
- package/dist/{traces-data-list-Bhhg9drs.cjs → traces-data-list-Co9k5J4f.cjs} +18 -20
- package/dist/{traces-data-list-Bhhg9drs.cjs.map → traces-data-list-Co9k5J4f.cjs.map} +1 -1
- package/dist/{traces-data-list-DMWPJFBc.js → traces-data-list-TCKjOldO.js} +2 -4
- package/dist/{traces-data-list-DMWPJFBc.js.map → traces-data-list-TCKjOldO.js.map} +1 -1
- package/dist/use-data-list-keyboard-DF3tLe10.cjs.map +1 -1
- package/dist/use-data-list-keyboard-DFQr4t38.js.map +1 -1
- package/dist/{use-workflow-graph-runtime-DF-56pIR.cjs → use-workflow-graph-runtime-DcQD5eA6.cjs} +3 -3
- package/dist/{use-workflow-graph-runtime-DF-56pIR.cjs.map → use-workflow-graph-runtime-DcQD5eA6.cjs.map} +1 -1
- package/dist/{use-workflow-graph-runtime-BrHXo49Q.js → use-workflow-graph-runtime-xq_aSXPh.js} +3 -3
- package/dist/{use-workflow-graph-runtime-BrHXo49Q.js.map → use-workflow-graph-runtime-xq_aSXPh.js.map} +1 -1
- package/dist/utils/workspace-compat.cjs.js.map +1 -1
- package/dist/utils/workspace-compat.es.js.map +1 -1
- package/dist/{workflow-code-dialog-content-CfVy6bGG.cjs → workflow-code-dialog-content-B_BQCuFW.cjs} +3 -3
- package/dist/{workflow-code-dialog-content-CfVy6bGG.cjs.map → workflow-code-dialog-content-B_BQCuFW.cjs.map} +1 -1
- package/dist/{workflow-code-dialog-content-DviJz1jB.js → workflow-code-dialog-content-CFEaeYUX.js} +3 -3
- package/dist/{workflow-code-dialog-content-DviJz1jB.js.map → workflow-code-dialog-content-CFEaeYUX.js.map} +1 -1
- package/dist/{workflow-condition-card-BRwhMmNO.cjs → workflow-condition-card-CMzoK307.cjs} +3 -3
- package/dist/{workflow-condition-card-BRwhMmNO.cjs.map → workflow-condition-card-CMzoK307.cjs.map} +1 -1
- package/dist/{workflow-condition-card-sFdOjlab.js → workflow-condition-card-CbQ4fCxY.js} +3 -3
- package/dist/{workflow-condition-card-sFdOjlab.js.map → workflow-condition-card-CbQ4fCxY.js.map} +1 -1
- package/dist/{workflow-data-edge-view-DpPhr9gZ.cjs → workflow-data-edge-view-0utEB4Yb.cjs} +2 -2
- package/dist/{workflow-data-edge-view-DpPhr9gZ.cjs.map → workflow-data-edge-view-0utEB4Yb.cjs.map} +1 -1
- package/dist/{workflow-data-edge-view-CuSzc6YI.js → workflow-data-edge-view-gwwJEvXz.js} +2 -2
- package/dist/{workflow-data-edge-view-CuSzc6YI.js.map → workflow-data-edge-view-gwwJEvXz.js.map} +1 -1
- package/dist/{workflow-debug-controls-CAn_6S8K.cjs → workflow-debug-controls-B5zqE_rm.cjs} +2 -2
- package/dist/{workflow-debug-controls-CAn_6S8K.cjs.map → workflow-debug-controls-B5zqE_rm.cjs.map} +1 -1
- package/dist/{workflow-debug-controls-CLzbxd5O.js → workflow-debug-controls-CPpdNzD9.js} +2 -2
- package/dist/{workflow-debug-controls-CLzbxd5O.js.map → workflow-debug-controls-CPpdNzD9.js.map} +1 -1
- package/dist/{workflow-edge-data-button-Dtt_OUz9.js → workflow-edge-data-button-YWjfx-W0.js} +4 -4
- package/dist/{workflow-edge-data-button-Dtt_OUz9.js.map → workflow-edge-data-button-YWjfx-W0.js.map} +1 -1
- package/dist/{workflow-edge-data-button-B8rQaAoK.cjs → workflow-edge-data-button-tDvziS5v.cjs} +4 -4
- package/dist/{workflow-edge-data-button-B8rQaAoK.cjs.map → workflow-edge-data-button-tDvziS5v.cjs.map} +1 -1
- package/dist/{workflow-step-action-DqFjktfs.js → workflow-step-action-D8MVfEIl.js} +2 -2
- package/dist/{workflow-step-action-DqFjktfs.js.map → workflow-step-action-D8MVfEIl.js.map} +1 -1
- package/dist/{workflow-step-action-Cu01omgz.cjs → workflow-step-action-DZgS0_fL.cjs} +2 -2
- package/dist/{workflow-step-action-Cu01omgz.cjs.map → workflow-step-action-DZgS0_fL.cjs.map} +1 -1
- package/package.json +11 -13
- package/theme/scale.css +7 -0
- package/dist/Avatar-98bsFrSV.js.map +0 -1
- package/dist/Avatar-BCj8SvOb.cjs.map +0 -1
- package/dist/Button-DH1aTzbs.cjs.map +0 -1
- package/dist/Button-EGoajBQY.js.map +0 -1
- package/dist/activity-2tovEdIP.cjs.map +0 -1
- package/dist/activity-CsTUr5_l.js.map +0 -1
- package/dist/ask-user-card-DroerVbm.cjs.map +0 -1
- package/dist/avatar-size-CNR0U-LW.js.map +0 -1
- package/dist/avatar-size-DxStOo5A.cjs.map +0 -1
- package/dist/combobox-BNlVCFgY.cjs.map +0 -1
- package/dist/combobox-Bw13EcK0.js.map +0 -1
- package/dist/command-UEPxVJlE.cjs.map +0 -1
- package/dist/command-V9rsKc7P.js.map +0 -1
- package/dist/data-keys-and-values-1lYi60YK.cjs.map +0 -1
- package/dist/data-keys-and-values-CHpxKsfq.js.map +0 -1
- package/dist/data-list-CmjTe8xE.cjs +0 -142
- package/dist/data-list-CmjTe8xE.cjs.map +0 -1
- package/dist/data-list-DT1LVR29.js +0 -138
- package/dist/data-list-DT1LVR29.js.map +0 -1
- package/dist/data-list-spacer-CdlT6bDd.cjs +0 -218
- package/dist/data-list-spacer-CdlT6bDd.cjs.map +0 -1
- package/dist/data-list-spacer-D--gDmOm.js +0 -209
- package/dist/data-list-spacer-D--gDmOm.js.map +0 -1
- package/dist/data-list-top-DJh08vFA.cjs.map +0 -1
- package/dist/data-list-top-T-mtdIUp.js.map +0 -1
- package/dist/data-panel-BkfjzriB.cjs.map +0 -1
- package/dist/data-panel-CMkR6Avv.js.map +0 -1
- package/dist/filter-bar-chip-BJJ6ytJ4.cjs.map +0 -1
- package/dist/filter-bar-chip-BarAq1S2.js.map +0 -1
- package/dist/property-filter-applied-CtSglSaH.cjs.map +0 -1
- package/dist/property-filter-applied-J9ob_Rss.js.map +0 -1
- package/dist/select-CQtsggxJ.js.map +0 -1
- package/dist/select-CbNLtiAs.cjs.map +0 -1
- package/dist/thread-list-BANpytn3.cjs.map +0 -1
- package/dist/thread-list-lXnXsPul.js.map +0 -1
- package/dist/tool-call-group-DJsiIb-B.cjs.map +0 -1
- package/dist/tool-call-group-ZDNZog5K.js.map +0 -1
|
@@ -2,16 +2,16 @@ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
|
2
2
|
import { Columns3Icon, PlusIcon } from 'lucide-react';
|
|
3
3
|
import { useState, useMemo } from 'react';
|
|
4
4
|
import { TRACE_USAGE_COLUMNS, TRACE_CUSTOM_COLUMN_FIELDS, TRACE_CUSTOM_COLUMN_LABELS } from '../trace-list-columns.es.js';
|
|
5
|
-
import { B as Button } from '../../../Button-
|
|
6
|
-
import { C as Combobox } from '../../../combobox-
|
|
5
|
+
import { B as Button } from '../../../Button-D8a5EWJ5.js';
|
|
6
|
+
import { C as Combobox } from '../../../combobox-BCoCVZHs.js';
|
|
7
7
|
import '@base-ui/react/combobox';
|
|
8
|
-
import { D as Dialog, d as DialogContent, g as DialogHeader, j as DialogTitle, e as DialogDescription, a as DialogBody, f as DialogFooter, b as DialogCancel } from '../../../dialog-
|
|
8
|
+
import { D as Dialog, d as DialogContent, g as DialogHeader, j as DialogTitle, e as DialogDescription, a as DialogBody, f as DialogFooter, b as DialogCancel } from '../../../dialog-AzCRnEo3.js';
|
|
9
9
|
import { D as DropdownMenu } from '../../../dropdown-menu-CQ_48tVI.js';
|
|
10
10
|
import { F as Field, e as FieldLabel, c as FieldError } from '../../../field-Dl1zeXTv.js';
|
|
11
11
|
import '../../../field-control-aria-DB6y41tQ.js';
|
|
12
12
|
import { F as Form } from '../../../form-CMfC7JKB.js';
|
|
13
13
|
import { T as Txt } from '../../../Txt-BtIGLRk1.js';
|
|
14
|
-
import { D as DialogAction } from '../../../dialog-action-
|
|
14
|
+
import { D as DialogAction } from '../../../dialog-action-DykMOK2W.js';
|
|
15
15
|
|
|
16
16
|
const EMPTY_KEYS = [];
|
|
17
17
|
const STANDARD_COLUMNS = [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-columns-menu.es.js","sources":["../../../../src/domains/traces/components/trace-columns-menu.tsx"],"sourcesContent":["import { Columns3Icon, PlusIcon } from 'lucide-react';\nimport { useMemo, useState, type FormEvent } from 'react';\nimport { TRACE_CUSTOM_COLUMN_FIELDS, TRACE_CUSTOM_COLUMN_LABELS, TRACE_USAGE_COLUMNS } from '../trace-list-columns';\nimport type { TraceColumnPreferences, TraceCustomColumn, TraceOptionalColumn } from '../trace-list-columns';\nimport { Button } from '@/ds/components/Button';\nimport { Combobox } from '@/ds/components/Combobox';\nimport {\n Dialog,\n DialogAction,\n DialogBody,\n DialogCancel,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '@/ds/components/Dialog';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu';\nimport { Field, FieldError, FieldLabel } from '@/ds/components/Field';\nimport { Form } from '@/ds/components/Form';\nimport { Txt } from '@/ds/components/Txt';\n\nconst EMPTY_KEYS: readonly string[] = [];\n\nconst STANDARD_COLUMNS: readonly TraceOptionalColumn[] = [\n 'type',\n 'input',\n 'output',\n 'duration',\n 'endTime',\n 'environment',\n];\n\nconst COLUMN_LABELS: Record<TraceOptionalColumn, string> = {\n type: 'Primitive type',\n input: 'Input',\n output: 'Output',\n duration: 'Duration',\n endTime: 'End',\n environment: 'Environment',\n inputTokens: 'Input tokens',\n outputTokens: 'Output tokens',\n totalTokens: 'Total tokens',\n estimatedCost: 'Estimated cost',\n};\n\ntype TraceColumnsMenuProps = {\n preferences: TraceColumnPreferences;\n /** Top-level metadata keys observed on traces in the current time range, offered in the picker. */\n availableMetadataKeys?: readonly string[];\n usageDisabledReason?: string;\n /** When false (server without the trace-query API), metadata columns can't be added. Defaults to true. */\n withQueryTrace?: boolean;\n onToggleColumn: (column: TraceOptionalColumn) => void;\n onAddCustomColumn: (field: TraceCustomColumn) => void;\n onRemoveCustomColumn: (field: TraceCustomColumn) => void;\n onAddMetadataColumn: (key: string) => void;\n onRemoveMetadataColumn: (key: string) => void;\n onReset: () => void;\n};\n\nexport function TraceColumnsMenu({\n preferences,\n availableMetadataKeys = EMPTY_KEYS,\n usageDisabledReason,\n withQueryTrace = true,\n onToggleColumn,\n onAddCustomColumn,\n onRemoveCustomColumn,\n onAddMetadataColumn,\n onRemoveMetadataColumn,\n onReset,\n}: TraceColumnsMenuProps) {\n const [isMetadataDialogOpen, setIsMetadataDialogOpen] = useState(false);\n const [metadataKey, setMetadataKey] = useState('');\n const [metadataError, setMetadataError] = useState<string | undefined>();\n\n const metadataKeyOptions = useMemo(() => {\n const keys = availableMetadataKeys.filter(key => !preferences.metadataKeys.includes(key));\n if (metadataKey && !keys.includes(metadataKey)) keys.push(metadataKey);\n return keys.map(key => ({ label: key, value: key }));\n }, [availableMetadataKeys, preferences.metadataKeys, metadataKey]);\n\n const handleDialogOpenChange = (open: boolean) => {\n setIsMetadataDialogOpen(open);\n if (!open) {\n setMetadataKey('');\n setMetadataError(undefined);\n }\n };\n\n const handleAddMetadata = (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n const normalizedKey = metadataKey.trim();\n if (!normalizedKey) {\n setMetadataError('Enter a metadata key.');\n return;\n }\n if (preferences.metadataKeys.includes(normalizedKey)) {\n setMetadataError('That metadata column is already visible.');\n return;\n }\n\n onAddMetadataColumn(normalizedKey);\n handleDialogOpenChange(false);\n };\n\n return (\n <>\n <DropdownMenu>\n <DropdownMenu.Trigger\n render={\n <Button variant=\"ghost\" size=\"md\" icon={<Columns3Icon aria-hidden />}>\n Columns\n </Button>\n }\n />\n <DropdownMenu.Content align=\"end\" className=\"min-w-56\">\n <DropdownMenu.Label>Standard columns</DropdownMenu.Label>\n {STANDARD_COLUMNS.map(column => (\n <DropdownMenu.CheckboxItem\n key={column}\n checked={preferences.visibleColumns.includes(column)}\n onCheckedChange={() => onToggleColumn(column)}\n >\n {COLUMN_LABELS[column]}\n </DropdownMenu.CheckboxItem>\n ))}\n\n <DropdownMenu.Separator />\n <DropdownMenu.Label>Usage columns</DropdownMenu.Label>\n {TRACE_USAGE_COLUMNS.map(column => (\n <DropdownMenu.CheckboxItem\n key={column}\n checked={preferences.visibleColumns.includes(column)}\n disabled={Boolean(usageDisabledReason)}\n onCheckedChange={() => onToggleColumn(column)}\n >\n {COLUMN_LABELS[column]}\n </DropdownMenu.CheckboxItem>\n ))}\n {usageDisabledReason && (\n <Txt variant=\"meta\" tone=\"faint\" className=\"px-2 py-1\" role=\"note\">\n {usageDisabledReason}\n </Txt>\n )}\n\n <DropdownMenu.Separator />\n <DropdownMenu.Label>Custom columns</DropdownMenu.Label>\n {TRACE_CUSTOM_COLUMN_FIELDS.map(field => {\n const isVisible = preferences.customColumns.includes(field);\n return (\n <DropdownMenu.CheckboxItem\n key={field}\n checked={isVisible}\n onCheckedChange={() => (isVisible ? onRemoveCustomColumn(field) : onAddCustomColumn(field))}\n >\n {TRACE_CUSTOM_COLUMN_LABELS[field]}\n </DropdownMenu.CheckboxItem>\n );\n })}\n\n {(withQueryTrace || preferences.metadataKeys.length > 0) && (\n <>\n <DropdownMenu.Separator />\n <DropdownMenu.Label>Metadata columns</DropdownMenu.Label>\n {preferences.metadataKeys.map(key => (\n <DropdownMenu.CheckboxItem\n key={key}\n checked\n title={key}\n onCheckedChange={() => onRemoveMetadataColumn(key)}\n >\n {key}\n </DropdownMenu.CheckboxItem>\n ))}\n {withQueryTrace && (\n <DropdownMenu.Item onSelect={() => setIsMetadataDialogOpen(true)}>\n <PlusIcon aria-hidden />\n Add metadata column\n </DropdownMenu.Item>\n )}\n </>\n )}\n\n <DropdownMenu.Separator />\n <DropdownMenu.Item onSelect={onReset}>Reset to defaults</DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu>\n\n {withQueryTrace && (\n <Dialog open={isMetadataDialogOpen} onOpenChange={handleDialogOpenChange}>\n <DialogContent>\n <Form onSubmit={handleAddMetadata} className=\"gap-0\">\n <DialogHeader>\n <DialogTitle>Add metadata column</DialogTitle>\n <DialogDescription>\n Pick a top-level trace metadata key observed in the current time range, or type one. Only the key is\n saved, never its values.\n </DialogDescription>\n </DialogHeader>\n <DialogBody>\n <Field invalid={Boolean(metadataError)}>\n <FieldLabel>Metadata key</FieldLabel>\n <Combobox\n options={metadataKeyOptions}\n value={metadataKey}\n onValueChange={key => {\n setMetadataKey(key);\n setMetadataError(undefined);\n }}\n allowCustomValue\n placeholder=\"Select a metadata key…\"\n searchPlaceholder=\"Search metadata keys…\"\n emptyText=\"No metadata keys observed. Type one to add it.\"\n />\n <FieldError>{metadataError}</FieldError>\n </Field>\n </DialogBody>\n <DialogFooter>\n <DialogCancel>Cancel</DialogCancel>\n <DialogAction type=\"submit\">Add column</DialogAction>\n </DialogFooter>\n </Form>\n </DialogContent>\n </Dialog>\n )}\n </>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"trace-columns-menu.es.js","sources":["../../../../src/domains/traces/components/trace-columns-menu.tsx"],"sourcesContent":["import { Columns3Icon, PlusIcon } from 'lucide-react';\nimport { useMemo, useState } from 'react';\nimport type { FormEvent } from 'react';\nimport { TRACE_CUSTOM_COLUMN_FIELDS, TRACE_CUSTOM_COLUMN_LABELS, TRACE_USAGE_COLUMNS } from '../trace-list-columns';\nimport type { TraceColumnPreferences, TraceCustomColumn, TraceOptionalColumn } from '../trace-list-columns';\nimport { Button } from '@/ds/components/Button';\nimport { Combobox } from '@/ds/components/Combobox';\nimport {\n Dialog,\n DialogAction,\n DialogBody,\n DialogCancel,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '@/ds/components/Dialog';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu';\nimport { Field, FieldError, FieldLabel } from '@/ds/components/Field';\nimport { Form } from '@/ds/components/Form';\nimport { Txt } from '@/ds/components/Txt';\n\nconst EMPTY_KEYS: readonly string[] = [];\n\nconst STANDARD_COLUMNS: readonly TraceOptionalColumn[] = [\n 'type',\n 'input',\n 'output',\n 'duration',\n 'endTime',\n 'environment',\n];\n\nconst COLUMN_LABELS: Record<TraceOptionalColumn, string> = {\n type: 'Primitive type',\n input: 'Input',\n output: 'Output',\n duration: 'Duration',\n endTime: 'End',\n environment: 'Environment',\n inputTokens: 'Input tokens',\n outputTokens: 'Output tokens',\n totalTokens: 'Total tokens',\n estimatedCost: 'Estimated cost',\n};\n\ntype TraceColumnsMenuProps = {\n preferences: TraceColumnPreferences;\n /** Top-level metadata keys observed on traces in the current time range, offered in the picker. */\n availableMetadataKeys?: readonly string[];\n usageDisabledReason?: string;\n /** When false (server without the trace-query API), metadata columns can't be added. Defaults to true. */\n withQueryTrace?: boolean;\n onToggleColumn: (column: TraceOptionalColumn) => void;\n onAddCustomColumn: (field: TraceCustomColumn) => void;\n onRemoveCustomColumn: (field: TraceCustomColumn) => void;\n onAddMetadataColumn: (key: string) => void;\n onRemoveMetadataColumn: (key: string) => void;\n onReset: () => void;\n};\n\nexport function TraceColumnsMenu({\n preferences,\n availableMetadataKeys = EMPTY_KEYS,\n usageDisabledReason,\n withQueryTrace = true,\n onToggleColumn,\n onAddCustomColumn,\n onRemoveCustomColumn,\n onAddMetadataColumn,\n onRemoveMetadataColumn,\n onReset,\n}: TraceColumnsMenuProps) {\n const [isMetadataDialogOpen, setIsMetadataDialogOpen] = useState(false);\n const [metadataKey, setMetadataKey] = useState('');\n const [metadataError, setMetadataError] = useState<string | undefined>();\n\n const metadataKeyOptions = useMemo(() => {\n const keys = availableMetadataKeys.filter(key => !preferences.metadataKeys.includes(key));\n if (metadataKey && !keys.includes(metadataKey)) keys.push(metadataKey);\n return keys.map(key => ({ label: key, value: key }));\n }, [availableMetadataKeys, preferences.metadataKeys, metadataKey]);\n\n const handleDialogOpenChange = (open: boolean) => {\n setIsMetadataDialogOpen(open);\n if (!open) {\n setMetadataKey('');\n setMetadataError(undefined);\n }\n };\n\n const handleAddMetadata = (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n const normalizedKey = metadataKey.trim();\n if (!normalizedKey) {\n setMetadataError('Enter a metadata key.');\n return;\n }\n if (preferences.metadataKeys.includes(normalizedKey)) {\n setMetadataError('That metadata column is already visible.');\n return;\n }\n\n onAddMetadataColumn(normalizedKey);\n handleDialogOpenChange(false);\n };\n\n return (\n <>\n <DropdownMenu>\n <DropdownMenu.Trigger\n render={\n <Button variant=\"ghost\" size=\"md\" icon={<Columns3Icon aria-hidden />}>\n Columns\n </Button>\n }\n />\n <DropdownMenu.Content align=\"end\" className=\"min-w-56\">\n <DropdownMenu.Label>Standard columns</DropdownMenu.Label>\n {STANDARD_COLUMNS.map(column => (\n <DropdownMenu.CheckboxItem\n key={column}\n checked={preferences.visibleColumns.includes(column)}\n onCheckedChange={() => onToggleColumn(column)}\n >\n {COLUMN_LABELS[column]}\n </DropdownMenu.CheckboxItem>\n ))}\n\n <DropdownMenu.Separator />\n <DropdownMenu.Label>Usage columns</DropdownMenu.Label>\n {TRACE_USAGE_COLUMNS.map(column => (\n <DropdownMenu.CheckboxItem\n key={column}\n checked={preferences.visibleColumns.includes(column)}\n disabled={Boolean(usageDisabledReason)}\n onCheckedChange={() => onToggleColumn(column)}\n >\n {COLUMN_LABELS[column]}\n </DropdownMenu.CheckboxItem>\n ))}\n {usageDisabledReason && (\n <Txt variant=\"meta\" tone=\"faint\" className=\"px-2 py-1\" role=\"note\">\n {usageDisabledReason}\n </Txt>\n )}\n\n <DropdownMenu.Separator />\n <DropdownMenu.Label>Custom columns</DropdownMenu.Label>\n {TRACE_CUSTOM_COLUMN_FIELDS.map(field => {\n const isVisible = preferences.customColumns.includes(field);\n return (\n <DropdownMenu.CheckboxItem\n key={field}\n checked={isVisible}\n onCheckedChange={() => (isVisible ? onRemoveCustomColumn(field) : onAddCustomColumn(field))}\n >\n {TRACE_CUSTOM_COLUMN_LABELS[field]}\n </DropdownMenu.CheckboxItem>\n );\n })}\n\n {(withQueryTrace || preferences.metadataKeys.length > 0) && (\n <>\n <DropdownMenu.Separator />\n <DropdownMenu.Label>Metadata columns</DropdownMenu.Label>\n {preferences.metadataKeys.map(key => (\n <DropdownMenu.CheckboxItem\n key={key}\n checked\n title={key}\n onCheckedChange={() => onRemoveMetadataColumn(key)}\n >\n {key}\n </DropdownMenu.CheckboxItem>\n ))}\n {withQueryTrace && (\n <DropdownMenu.Item onSelect={() => setIsMetadataDialogOpen(true)}>\n <PlusIcon aria-hidden />\n Add metadata column\n </DropdownMenu.Item>\n )}\n </>\n )}\n\n <DropdownMenu.Separator />\n <DropdownMenu.Item onSelect={onReset}>Reset to defaults</DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu>\n\n {withQueryTrace && (\n <Dialog open={isMetadataDialogOpen} onOpenChange={handleDialogOpenChange}>\n <DialogContent>\n <Form onSubmit={handleAddMetadata} className=\"gap-0\">\n <DialogHeader>\n <DialogTitle>Add metadata column</DialogTitle>\n <DialogDescription>\n Pick a top-level trace metadata key observed in the current time range, or type one. Only the key is\n saved, never its values.\n </DialogDescription>\n </DialogHeader>\n <DialogBody>\n <Field invalid={Boolean(metadataError)}>\n <FieldLabel>Metadata key</FieldLabel>\n <Combobox\n options={metadataKeyOptions}\n value={metadataKey}\n onValueChange={key => {\n setMetadataKey(key);\n setMetadataError(undefined);\n }}\n allowCustomValue\n placeholder=\"Select a metadata key…\"\n searchPlaceholder=\"Search metadata keys…\"\n emptyText=\"No metadata keys observed. Type one to add it.\"\n />\n <FieldError>{metadataError}</FieldError>\n </Field>\n </DialogBody>\n <DialogFooter>\n <DialogCancel>Cancel</DialogCancel>\n <DialogAction type=\"submit\">Add column</DialogAction>\n </DialogFooter>\n </Form>\n </DialogContent>\n </Dialog>\n )}\n </>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -14,15 +14,15 @@ const domains_traces_components_traceIdButton = require('./trace-id-button.cjs.j
|
|
|
14
14
|
const domains_traces_components_traceSpanTimeline = require('./trace-span-timeline.cjs.js');
|
|
15
15
|
const domains_traces_components_traceSpanTree = require('./trace-span-tree.cjs.js');
|
|
16
16
|
const domains_traces_components_traceSummaryDescription = require('./trace-summary-description.cjs.js');
|
|
17
|
-
const Button = require('../../../Button-
|
|
17
|
+
const Button = require('../../../Button-C4I05uT4.cjs');
|
|
18
18
|
const buttonsGroup = require('../../../buttons-group-Bg9Unm6G.cjs');
|
|
19
|
-
const dataPanel = require('../../../data-panel-
|
|
19
|
+
const dataPanel = require('../../../data-panel-DGNV14pm.cjs');
|
|
20
20
|
const dropdownMenu = require('../../../dropdown-menu-CsynT1aD.cjs');
|
|
21
21
|
const Notice = require('../../../Notice-DYgIy4FO.cjs');
|
|
22
|
-
const searchInput = require('../../../search-input-
|
|
22
|
+
const searchInput = require('../../../search-input-CMNy0JWd.cjs');
|
|
23
23
|
const tabsRoot = require('../../../tabs-root-sOhEgFZ-.cjs');
|
|
24
24
|
const tabsList = require('../../../tabs-list-BTRYiT_o.cjs');
|
|
25
|
-
const tabsTab = require('../../../tabs-tab-
|
|
25
|
+
const tabsTab = require('../../../tabs-tab-B0W25Dm2.cjs');
|
|
26
26
|
const icons_Icon = require('../../../icons/Icon.cjs.js');
|
|
27
27
|
const icons_ScorersIcon = require('../../../icons/ScorersIcon.cjs.js');
|
|
28
28
|
const hooks_useScrollToFirstHighlight = require('../../../hooks/use-scroll-to-first-highlight.cjs.js');
|
|
@@ -175,6 +175,7 @@ function TraceDataPanelView({
|
|
|
175
175
|
() => anchorSpanId ? spans?.find((s) => s.spanId === anchorSpanId) : spans?.find((s) => s.parentSpanId == null),
|
|
176
176
|
[spans, anchorSpanId]
|
|
177
177
|
);
|
|
178
|
+
const rootError = getSpanError(rootSpan?.error);
|
|
178
179
|
const handleSpanClick = (id) => {
|
|
179
180
|
const newId = selectedSpanId === id ? void 0 : id;
|
|
180
181
|
setSelectedSpanId(newId);
|
|
@@ -289,7 +290,7 @@ function TraceDataPanelView({
|
|
|
289
290
|
size: "sm",
|
|
290
291
|
value: query,
|
|
291
292
|
onValueChange: setQuery,
|
|
292
|
-
className: "w-
|
|
293
|
+
className: "min-w-0 flex-1"
|
|
293
294
|
}
|
|
294
295
|
),
|
|
295
296
|
/* @__PURE__ */ jsxRuntime.jsxs(buttonsGroup.ButtonsGroup, { size: "sm", className: "shrink-0", children: [
|
|
@@ -332,6 +333,25 @@ function TraceDataPanelView({
|
|
|
332
333
|
searchHeader,
|
|
333
334
|
/* @__PURE__ */ jsxRuntime.jsxs(dataPanel.DataPanel.Content, { children: [
|
|
334
335
|
!isOnTracePage && !onEvaluateTrace && !onSaveAsDatasetItem && !onAddTraceMocksToItem && showUnavailableFeaturesMsg && /* @__PURE__ */ jsxRuntime.jsx(Notice.Notice, { variant: "info", className: "mb-6", children: /* @__PURE__ */ jsxRuntime.jsx(Notice.Notice.Message, { children: "Evaluating traces and saving them as dataset items is available in Mastra Studio (local or deployed)." }) }),
|
|
336
|
+
rootSpan && rootError && /* @__PURE__ */ jsxRuntime.jsx(
|
|
337
|
+
Notice.Notice,
|
|
338
|
+
{
|
|
339
|
+
variant: "destructive",
|
|
340
|
+
title: rootError.name ?? "Error",
|
|
341
|
+
action: /* @__PURE__ */ jsxRuntime.jsx(
|
|
342
|
+
Notice.Notice.Button,
|
|
343
|
+
{
|
|
344
|
+
onClick: () => {
|
|
345
|
+
setSelectedSpanId(rootSpan.spanId);
|
|
346
|
+
onSpanSelect?.(rootSpan.spanId);
|
|
347
|
+
},
|
|
348
|
+
children: "View details"
|
|
349
|
+
}
|
|
350
|
+
),
|
|
351
|
+
className: "mb-4",
|
|
352
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(Notice.Notice.Message, { className: "line-clamp-3", children: rootError.message })
|
|
353
|
+
}
|
|
354
|
+
),
|
|
335
355
|
isTimeline ? /* @__PURE__ */ jsxRuntime.jsx(domains_traces_components_traceSpanTimeline.TraceSpanTimeline, { ...viewProps }) : /* @__PURE__ */ jsxRuntime.jsx(domains_traces_components_traceSpanTree.TraceSpanTree, { ...viewProps }),
|
|
336
356
|
noSearchResults
|
|
337
357
|
] })
|
|
@@ -343,6 +363,13 @@ function TraceDataPanelView({
|
|
|
343
363
|
}
|
|
344
364
|
);
|
|
345
365
|
}
|
|
366
|
+
function getSpanError(error) {
|
|
367
|
+
if (typeof error !== "object" || error === null || !("message" in error) || typeof error.message !== "string") {
|
|
368
|
+
return void 0;
|
|
369
|
+
}
|
|
370
|
+
const name = "name" in error && typeof error.name === "string" ? error.name : void 0;
|
|
371
|
+
return { name, message: error.message };
|
|
372
|
+
}
|
|
346
373
|
const safeLayoutStorage = {
|
|
347
374
|
getItem: (key) => {
|
|
348
375
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-data-panel-view.cjs.js","sources":["../../../../src/domains/traces/components/trace-data-panel-view.tsx"],"sourcesContent":["import {\n ChartGanttIcon,\n CircleGaugeIcon,\n DownloadIcon,\n Link2Icon,\n ListTreeIcon,\n Loader2Icon,\n MessageSquareReplyIcon,\n MessageSquareTextIcon,\n MoreHorizontalIcon,\n SaveIcon,\n WrenchIcon,\n} from 'lucide-react';\nimport { useEffect, useMemo, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { Panel, useDefaultLayout } from 'react-resizable-panels';\nimport { getAllSpanIds } from '../hooks/get-all-span-ids';\nimport { useDownloadTraceJson } from '../hooks/use-download-trace-json';\nimport { useTraceSearch } from '../hooks/use-trace-search';\nimport type { TraceUsageSummary } from '../trace-list-columns';\nimport type { LightSpanRecord } from '../types';\nimport { formatHierarchicalSpans } from './format-hierarchical-spans';\nimport { TraceIdButton } from './trace-id-button';\nimport { TraceSpanTimeline } from './trace-span-timeline';\nimport { TraceSpanTree } from './trace-span-tree';\nimport { TraceSummaryDescription } from './trace-summary-description';\nimport { Button } from '@/ds/components/Button';\nimport { ButtonsGroup } from '@/ds/components/ButtonsGroup';\nimport { DataPanel } from '@/ds/components/DataPanel';\nimport type { DataPanelProps } from '@/ds/components/DataPanel';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu';\nimport { Notice } from '@/ds/components/Notice';\nimport { SearchInput } from '@/ds/components/SearchInput';\nimport { Tab, TabList, Tabs } from '@/ds/components/Tabs';\nimport { Icon } from '@/ds/icons/Icon';\nimport { ScorersIcon } from '@/ds/icons/ScorersIcon';\nimport type { LinkComponent } from '@/ds/types/link-component';\nimport { useScrollToFirstHighlight } from '@/hooks/use-scroll-to-first-highlight';\nimport { useTextHighlight } from '@/hooks/use-text-highlight';\nimport { PanelGroup } from '@/lib/resize/panel-group';\nimport { PanelSeparator } from '@/lib/resize/separator';\nimport { cn } from '@/lib/utils';\n\nexport type TraceDataPanelPlacement = 'traces-list' | 'trace-page';\n\nexport type TraceSpanView = 'tree' | 'timeline';\n\n/** What the side column next to the span tree shows. */\nexport type TraceSideView = 'messages' | 'feedback' | 'scores';\n\nexport interface TraceDataPanelViewProps {\n /** Keep the panel mounted and pass `undefined` to close it, so the drawer animates out. */\n traceId?: string;\n /** Lightweight spans for the trace. Caller fetches via useTraceLightSpans. */\n spans: LightSpanRecord[] | undefined;\n isLoading?: boolean;\n onClose: () => void;\n onSpanSelect?: (spanId: string | undefined) => void;\n onEvaluateTrace?: () => void;\n /** When set, an \"Add full trace to dataset\" button appears; the consumer owns the dialog. */\n onSaveAsDatasetItem?: (args: { traceId: string; rootSpanId: string | undefined }) => void;\n /** When set, an \"Add tool mocks to item\" button appears; the consumer owns the dialog. */\n onAddTraceMocksToItem?: (args: { traceId: string }) => void;\n initialSpanId?: string | null;\n onPrevious?: () => void;\n onNext?: () => void;\n /** Drawer width; defaults to `wide` since the panel lays out several columns. */\n size?: DataPanelProps['size'];\n /** Elevation when opened next to other sibling panels. */\n depth?: DataPanelProps['depth'];\n /** Rendered inside the drawer above the trace header (e.g. inbox feedback context). */\n headerSlot?: ReactNode;\n /** Integration-specific actions shown alongside the standard trace controls. */\n headerActionsSlot?: ReactNode;\n /** Accessible drawer name; defaults to the trace id. */\n title?: string;\n placement: TraceDataPanelPlacement;\n /** @deprecated No longer used: the panel renders the span tree with the duration as text. */\n timelineChartWidth?: 'wide' | 'default';\n /** When both are provided, renders an \"Open trace page\" button. */\n LinkComponent?: LinkComponent;\n traceHref?: string;\n /** When provided, the entity name in the trace summary links to the entity's page. */\n entityHref?: string;\n /** Token and estimated-cost totals shown in the compact trace summary. */\n usage?: TraceUsageSummary;\n /**\n * Span treated as the displayed root of the timeline. Required for branch\n * subtrees from `getBranch` where the anchor has a real parent that's outside\n * `spans`. When omitted, the span with no parent is used (trace case).\n */\n anchorSpanId?: string;\n /**\n * Whether to render the \"Evaluating traces and saving them as dataset items is\n * available in Mastra Studio\" info notice when neither `onEvaluateTrace` nor\n * `onSaveAsDatasetItem` is provided. Defaults to `true`. Pass `false` when this\n * panel is rendered inside Studio in a context that intentionally omits those\n * handlers (e.g. inline below an experiment result).\n */\n showUnavailableFeaturesMsg?: boolean;\n /**\n * When provided, a \"Scores\" tab appears; the slot renders whatever trace-level\n * scoring UI the consumer wants.\n */\n scoresTabSlot?: (args: { traceId: string; rootSpanId: string | undefined }) => ReactNode;\n /** Optional count shown in the \"Scores\" tab label. */\n scoresTabBadge?: ReactNode;\n /**\n * When provided, a \"Feedback\" tab appears; the slot renders the trace-level\n * feedback UI. Trace feedback is not scoped to a span — the span panel owns that.\n */\n feedbackTabSlot?: (args: { traceId: string }) => ReactNode;\n /** Optional count rendered after the \"Feedback\" tab label, e.g. `Feedback (3)`. */\n feedbackTabBadge?: ReactNode;\n /** Span ids to feature in the timeline; every other span is faded. */\n featuredSpanIds?: string[];\n /**\n * The \"Messages\" view of the side column next to the span tree (typically the\n * trace as one reconstructed agent turn). Rendered without content padding.\n */\n messagesPanelSlot?: ReactNode;\n /**\n * Actions rendered at the end of the side column's tab row (e.g. \"Open full thread\").\n * `compact` is true when the side column is narrow and controls collapse to icons.\n */\n sideHeaderActions?: (options: { compact: boolean }) => ReactNode;\n /** Controlled span view (tree or timeline); falls back to local state starting on the tree. */\n spanView?: TraceSpanView;\n onSpanViewChange?: (view: TraceSpanView) => void;\n /** Controlled side column view; falls back to the first available view. */\n sideView?: TraceSideView;\n onSideViewChange?: (view: TraceSideView) => void;\n /**\n * Rendered as a column to the right of the timeline inside the same card;\n * typically the span detail.\n */\n spanPanelSlot?: ReactNode;\n}\n\nexport function TraceDataPanelView({\n traceId,\n spans,\n isLoading,\n onClose,\n onSpanSelect,\n onEvaluateTrace,\n onSaveAsDatasetItem,\n onAddTraceMocksToItem,\n initialSpanId,\n onPrevious,\n onNext,\n size = 'wide',\n depth,\n headerSlot,\n headerActionsSlot,\n title,\n placement,\n LinkComponent,\n traceHref,\n entityHref,\n usage,\n anchorSpanId,\n showUnavailableFeaturesMsg = true,\n scoresTabSlot,\n scoresTabBadge,\n feedbackTabSlot,\n feedbackTabBadge,\n featuredSpanIds,\n messagesPanelSlot,\n sideHeaderActions,\n sideView: controlledSideView,\n onSideViewChange,\n spanView: controlledSpanView,\n onSpanViewChange,\n spanPanelSlot,\n}: TraceDataPanelViewProps) {\n const isOnTracePage = placement === 'trace-page';\n\n // The side column next to the span tree hosts Messages / Feedback / Scores;\n // which one is shown is purely a local viewing choice.\n const sideViews = useMemo(() => {\n const views: Array<{ value: TraceSideView; name: string; label: ReactNode }> = [];\n if (messagesPanelSlot) {\n views.push({\n value: 'messages',\n name: 'Messages',\n label: (\n <>\n <Icon size=\"xs\">\n <MessageSquareTextIcon />\n </Icon>\n <span className=\"@max-[501px]:sr-only\">Messages</span>\n </>\n ),\n });\n }\n if (feedbackTabSlot) {\n views.push({\n value: 'feedback',\n name: 'Feedback',\n label: (\n <>\n <Icon size=\"xs\">\n <MessageSquareReplyIcon />\n </Icon>\n <span className=\"@max-[501px]:sr-only\">\n Feedback{feedbackTabBadge != null && <> ({feedbackTabBadge})</>}\n </span>\n </>\n ),\n });\n }\n if (scoresTabSlot) {\n views.push({\n value: 'scores',\n name: 'Scores',\n label: (\n <>\n <Icon size=\"xs\">\n <ScorersIcon />\n </Icon>\n <span className=\"@max-[501px]:sr-only\">Scores{scoresTabBadge != null && <> ({scoresTabBadge})</>}</span>\n </>\n ),\n });\n }\n return views;\n }, [messagesPanelSlot, feedbackTabSlot, feedbackTabBadge, scoresTabSlot, scoresTabBadge]);\n const [uncontrolledSideView, setUncontrolledSideView] = useState<TraceSideView>();\n // Mirrors the side column's `@max-[501px]` container query: the layout collapses in CSS, but\n // tooltips render in a portal outside the container, so they need the width in JS.\n const [sideColumnElement, setSideColumnElement] = useState<HTMLDivElement | null>(null);\n const [compactSide, setCompactSide] = useState(false);\n useEffect(() => {\n if (!sideColumnElement || !('ResizeObserver' in globalThis)) return;\n const observer = new ResizeObserver(() => setCompactSide(sideColumnElement.clientWidth <= 500));\n observer.observe(sideColumnElement);\n return () => observer.disconnect();\n }, [sideColumnElement]);\n const chosenSideView = controlledSideView ?? uncontrolledSideView;\n const sideView = (sideViews.find(view => view.value === chosenSideView) ?? sideViews[0])?.value;\n const handleSideViewChange = (view: TraceSideView) => {\n setUncontrolledSideView(view);\n onSideViewChange?.(view);\n };\n\n const [uncontrolledSpanView, setUncontrolledSpanView] = useState<TraceSpanView>('tree');\n const spanView = controlledSpanView ?? uncontrolledSpanView;\n const setSpanView = (view: TraceSpanView) => {\n setUncontrolledSpanView(view);\n onSpanViewChange?.(view);\n };\n\n const { download: downloadTraceJson, isPending: isDownloadingTrace } = useDownloadTraceJson();\n\n const [selectedSpanId, setSelectedSpanId] = useState<string | undefined>(initialSpanId ?? undefined);\n\n // Sync selected span when initialSpanId or trace data changes\n useEffect(() => {\n // No span requested: clear immediately.\n if (!initialSpanId) {\n setSelectedSpanId(undefined);\n onSpanSelect?.(undefined);\n return;\n }\n // Span requested: wait for trace data before deciding so an in-flight\n // fetch doesn't wipe a URL-provided selection. Callers that default their\n // spans to `[]` while loading only say so through `isLoading`.\n if (isLoading || !spans) return;\n\n const found = spans.find(s => s.spanId === initialSpanId);\n if (found) {\n setSelectedSpanId(initialSpanId);\n onSpanSelect?.(initialSpanId);\n } else {\n setSelectedSpanId(undefined);\n onSpanSelect?.(undefined);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initialSpanId, spans, isLoading]);\n\n const { query, setQuery, results, payloadOnlyMatchIds } = useTraceSearch(spans ?? []);\n\n const hierarchicalSpans = useMemo(\n () =>\n formatHierarchicalSpans(\n // Carried on the span rather than drilled as a prop: the tree is rebuilt here and\n // rendered several components deeper.\n results.map(span => ({ ...span, matchedInPayloadOnly: payloadOnlyMatchIds.has(span.spanId) })),\n anchorSpanId,\n ),\n [results, payloadOnlyMatchIds, anchorSpanId],\n );\n\n const [expandedSpanIds, setExpandedSpanIds] = useState<string[]>([]);\n\n useEffect(() => {\n if (hierarchicalSpans.length > 0) {\n setExpandedSpanIds(getAllSpanIds(hierarchicalSpans));\n }\n }, [hierarchicalSpans]);\n\n const rootSpan = useMemo(\n () => (anchorSpanId ? spans?.find(s => s.spanId === anchorSpanId) : spans?.find(s => s.parentSpanId == null)),\n [spans, anchorSpanId],\n );\n const handleSpanClick = (id: string) => {\n const newId = selectedSpanId === id ? undefined : id;\n setSelectedSpanId(newId);\n onSpanSelect?.(newId);\n };\n\n const traceSummary = rootSpan && (\n <TraceSummaryDescription rootSpan={rootSpan} usage={usage} entityHref={entityHref} LinkComponent={LinkComponent} />\n );\n\n const traceActionsMenu = traceId && (\n <DropdownMenu>\n <DropdownMenu.Trigger\n render={\n <Button size=\"sm\" variant=\"ghost\" tooltip=\"Open trace actions\" aria-label=\"Open trace actions\">\n <MoreHorizontalIcon />\n </Button>\n }\n />\n <DropdownMenu.Content align=\"end\">\n {!isOnTracePage && onSaveAsDatasetItem && (\n <DropdownMenu.Item onSelect={() => onSaveAsDatasetItem({ traceId, rootSpanId: rootSpan?.spanId })}>\n <SaveIcon />\n Add full trace to dataset\n </DropdownMenu.Item>\n )}\n {!isOnTracePage && onAddTraceMocksToItem && (\n <DropdownMenu.Item onSelect={() => onAddTraceMocksToItem({ traceId })}>\n <WrenchIcon />\n Add tool mocks to item\n </DropdownMenu.Item>\n )}\n {!isOnTracePage && LinkComponent && traceHref && (\n <DropdownMenu.Item render={<LinkComponent href={traceHref} />}>\n <Link2Icon />\n Open trace page\n </DropdownMenu.Item>\n )}\n <DropdownMenu.Item disabled={isDownloadingTrace} onSelect={() => downloadTraceJson(traceId)}>\n {isDownloadingTrace ? <Loader2Icon className=\"animate-spin\" /> : <DownloadIcon />}\n Download trace JSON\n </DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu>\n );\n\n const sideColumn =\n traceId && sideView ? (\n <div\n ref={setSideColumnElement}\n data-trace-side-column\n className=\"@container flex h-full min-h-0 min-w-0 flex-col overflow-hidden\"\n >\n {/* Whether the Messages tab exists depends on the spans, so the tabs wait for them;\n otherwise the column flickers Feedback → Messages as the first tab changes. */}\n {isLoading ? (\n <DataPanel.Header className=\"border-b border-border\">\n <div aria-hidden className=\"h-control-sm\" />\n </DataPanel.Header>\n ) : (\n <Tabs<TraceSideView> defaultTab={sideView} value={sideView} onValueChange={handleSideViewChange}>\n <DataPanel.Header className=\"border-b border-border\">\n <TabList variant=\"pill-ghost\" size=\"sm\">\n {sideViews.map(view => (\n <Tab key={view.value} value={view.value} tooltip={compactSide ? view.name : undefined}>\n {view.label}\n </Tab>\n ))}\n </TabList>\n {sideHeaderActions && (\n <div className=\"ml-auto flex shrink-0 items-center whitespace-nowrap\">\n {sideHeaderActions({ compact: compactSide })}\n </div>\n )}\n </DataPanel.Header>\n </Tabs>\n )}\n {!isLoading && sideView === 'messages' && (\n <DataPanel.Content className=\"p-0\">{messagesPanelSlot}</DataPanel.Content>\n )}\n {!isLoading && sideView === 'feedback' && (\n <DataPanel.Content>{feedbackTabSlot?.({ traceId })}</DataPanel.Content>\n )}\n {!isLoading && sideView === 'scores' && (\n <DataPanel.Content>{scoresTabSlot?.({ traceId, rootSpanId: rootSpan?.spanId })}</DataPanel.Content>\n )}\n </div>\n ) : null;\n\n return (\n <DataPanel\n open={!!traceId}\n onClose={onClose}\n title={title ?? (isOnTracePage ? 'Trace Timeline' : `Trace ${traceId ?? ''}`)}\n size={size}\n depth={depth}\n >\n {traceId && (\n <>\n {headerSlot}\n <DataPanel.Header>\n {isOnTracePage ? (\n <>\n <DataPanel.HeaderContent>\n <DataPanel.Heading>Trace Timeline</DataPanel.Heading>\n {traceSummary}\n </DataPanel.HeaderContent>\n <DataPanel.HeaderActions>\n {headerActionsSlot}\n {traceActionsMenu}\n </DataPanel.HeaderActions>\n </>\n ) : (\n <>\n <DataPanel.HeaderContent>\n <DataPanel.Heading>\n Trace\n <TraceIdButton id={traceId} />\n </DataPanel.Heading>\n {traceSummary}\n </DataPanel.HeaderContent>\n <DataPanel.HeaderActions>\n {headerActionsSlot}\n {onEvaluateTrace && (\n <Button variant=\"primary\" size=\"sm\" onClick={onEvaluateTrace} disabled={!rootSpan}>\n <CircleGaugeIcon />\n Score trace\n </Button>\n )}\n {traceActionsMenu}\n {(onPrevious || onNext) && (\n <DataPanel.NextPrevNav\n onPrevious={onPrevious}\n onNext={onNext}\n previousLabel=\"Go to previous trace\"\n nextLabel=\"Go to next trace\"\n />\n )}\n <DataPanel.CloseButton icon=\"x\" onClick={onClose} label=\"Close trace\" tooltip=\"Close trace\" />\n </DataPanel.HeaderActions>\n </>\n )}\n </DataPanel.Header>\n\n <TracePanelColumns\n layoutKey={rootSpan ? (rootSpan.entityType ?? 'unknown') : undefined}\n sideColumnSlot={sideColumn}\n spanPanelSlot={spanPanelSlot}\n highlightQuery={query}\n spanPanelKey={selectedSpanId}\n >\n {!isLoading && !spans?.length ? (\n <DataPanel.NoData>No spans found for this trace.</DataPanel.NoData>\n ) : (\n (() => {\n // Shared by the Spans and Timeline tabs: both views render the same\n // filtered `hierarchicalSpans`, so one query drives both.\n const isTimeline = spanView === 'timeline';\n const searchHeader = (\n <DataPanel.Header className=\"gap-2 border-b border-border\">\n <SearchInput\n label=\"Search spans\"\n placeholder=\"Search spans...\"\n size=\"sm\"\n value={query}\n onValueChange={setQuery}\n className=\"w-full\"\n />\n <ButtonsGroup size=\"sm\" className=\"shrink-0\">\n <Button\n variant={isTimeline ? 'default' : 'primary'}\n aria-pressed={!isTimeline}\n tooltip=\"Span tree\"\n tooltipPosition=\"bottom\"\n onClick={() => setSpanView('tree')}\n >\n <ListTreeIcon />\n </Button>\n <Button\n variant={isTimeline ? 'primary' : 'default'}\n aria-pressed={isTimeline}\n tooltip=\"Timeline\"\n tooltipPosition=\"bottom\"\n onClick={() => setSpanView('timeline')}\n >\n <ChartGanttIcon />\n </Button>\n </ButtonsGroup>\n </DataPanel.Header>\n );\n const noSearchResults = !isLoading && hierarchicalSpans.length === 0 && (\n <DataPanel.NoData>No spans match your search.</DataPanel.NoData>\n );\n const viewProps = {\n hierarchicalSpans,\n onSpanClick: handleSpanClick,\n selectedSpanId,\n expandedSpanIds,\n setExpandedSpanIds,\n featuredSpanIds,\n revealSpanId: featuredSpanIds?.at(-1),\n isLoading,\n };\n\n return (\n <>\n {searchHeader}\n <DataPanel.Content>\n {!isOnTracePage &&\n !onEvaluateTrace &&\n !onSaveAsDatasetItem &&\n !onAddTraceMocksToItem &&\n showUnavailableFeaturesMsg && (\n <Notice variant=\"info\" className=\"mb-6\">\n <Notice.Message>\n Evaluating traces and saving them as dataset items is available in Mastra Studio (local or\n deployed).\n </Notice.Message>\n </Notice>\n )}\n\n {/* Both views share selection + expansion state, and stay mounted with no\n results because they host the search field: unmounting would strand the\n user with a query they can no longer clear. */}\n {isTimeline ? <TraceSpanTimeline {...viewProps} /> : <TraceSpanTree {...viewProps} />}\n {noSearchResults}\n </DataPanel.Content>\n </>\n );\n })()\n )}\n </TracePanelColumns>\n </>\n )}\n </DataPanel>\n );\n}\n\n/**\n * Lays out the card body as three columns — `[side] [trace] [span]` — inside the\n * same card. The side column (messages / feedback / scores) is independent of the\n * Spans/Timeline tabs, so it sits beside them rather than inside a tab. The side\n * and span columns are resizable (down to a minimum width); the trace column takes the rest.\n * Search matches — span names in the timeline tree as well as values in the span\n * detail — are highlighted while a query is active.\n */\n// localStorage access throws when storage is blocked (privacy modes, sandboxed iframes), and the\n// library parses stored values without a guard; fall back to defaults instead of crashing the panel.\nconst safeLayoutStorage = {\n getItem: (key: string): string | null => {\n try {\n const value = localStorage.getItem(key);\n if (value !== null) JSON.parse(value);\n return value;\n } catch {\n return null;\n }\n },\n setItem: (key: string, value: string) => {\n try {\n localStorage.setItem(key, value);\n } catch {\n // Persisting is best-effort.\n }\n },\n};\n\nfunction TracePanelColumns({\n layoutKey,\n sideColumnSlot,\n spanPanelSlot,\n highlightQuery,\n spanPanelKey,\n children,\n}: {\n /**\n * Root entity type of the trace; column sizes are persisted per value in localStorage.\n * Undefined while the root span is unknown, in which case nothing is persisted.\n */\n layoutKey?: string;\n /** Resizable column on the left (messages / feedback / scores). */\n sideColumnSlot?: ReactNode;\n spanPanelSlot?: ReactNode;\n highlightQuery: string;\n /** Identity of the span shown in the panel; changing it re-triggers the match scroll. */\n spanPanelKey?: string;\n children: ReactNode;\n}) {\n // A single hook call on the common ancestor covers both the timeline tree and\n // the span detail, so span names and payload values highlight together.\n const { ref: highlightRef } = useTextHighlight<HTMLDivElement>(highlightQuery);\n\n // Scoped to the span-panel column only: a match deep in a large payload sits below\n // the fold, so the first painted match is brought into view when the panel opens.\n // The timeline column must never be scrolled by this.\n const { ref: scrollToMatchRef } = useScrollToFirstHighlight<HTMLDivElement>(highlightQuery, spanPanelKey);\n\n // One stored layout per panel combination, so opening/closing the span panel doesn't clobber the other.\n const panelIds = [...(sideColumnSlot ? ['trace-side'] : []), 'trace-main', ...(spanPanelSlot ? ['trace-span'] : [])];\n const { defaultLayout, onLayoutChanged } = useDefaultLayout({\n id: `mastra:trace-panel-layout:${layoutKey ?? 'unknown'}`,\n panelIds,\n storage: safeLayoutStorage,\n });\n\n return (\n <div ref={highlightRef} data-trace-columns className=\"flex min-h-0 flex-1\">\n <PanelGroup\n // defaultLayout is only read on mount: remount once the entity type is known.\n key={layoutKey ?? 'unknown'}\n orientation=\"horizontal\"\n className=\"min-h-0 flex-1\"\n defaultLayout={layoutKey ? defaultLayout : undefined}\n onLayoutChanged={layoutKey ? onLayoutChanged : undefined}\n >\n {sideColumnSlot && (\n <>\n <Panel id=\"trace-side\" minSize={280} defaultSize=\"40%\">\n <div className=\"flex h-full min-h-0 flex-col border-r border-border\">{sideColumnSlot}</div>\n </Panel>\n <PanelSeparator variant=\"pill\" />\n </>\n )}\n <Panel id=\"trace-main\" minSize={320} className=\"flex min-h-0 min-w-0 flex-col\">\n {children}\n </Panel>\n {spanPanelSlot && (\n <>\n <PanelSeparator variant=\"pill\" />\n <Panel id=\"trace-span\" minSize={320} defaultSize=\"35%\">\n <div\n ref={scrollToMatchRef}\n data-highlight\n className=\"flex h-full min-h-0 animate-in flex-col border-l border-border duration-300 fade-in-0\"\n >\n {spanPanelSlot}\n </div>\n </Panel>\n </>\n )}\n </PanelGroup>\n </div>\n );\n}\n"],"names":["useMemo","jsxs","Fragment","jsx","Icon","MessageSquareTextIcon","MessageSquareReplyIcon","ScorersIcon","useState","useEffect","useDownloadTraceJson","useTraceSearch","formatHierarchicalSpans","getAllSpanIds","TraceSummaryDescription","DropdownMenu","Button","MoreHorizontalIcon","SaveIcon","WrenchIcon","Link2Icon","Loader2Icon","DownloadIcon","DataPanel","Tabs","TabList","Tab","TraceIdButton","CircleGaugeIcon","SearchInput","ButtonsGroup","ListTreeIcon","ChartGanttIcon","Notice","TraceSpanTimeline","TraceSpanTree","useTextHighlight","useScrollToFirstHighlight","useDefaultLayout","PanelGroup","Panel","PanelSeparator"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"trace-data-panel-view.cjs.js","sources":["../../../../src/domains/traces/components/trace-data-panel-view.tsx"],"sourcesContent":["import {\n ChartGanttIcon,\n CircleGaugeIcon,\n DownloadIcon,\n Link2Icon,\n ListTreeIcon,\n Loader2Icon,\n MessageSquareReplyIcon,\n MessageSquareTextIcon,\n MoreHorizontalIcon,\n SaveIcon,\n WrenchIcon,\n} from 'lucide-react';\nimport { useEffect, useMemo, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { Panel, useDefaultLayout } from 'react-resizable-panels';\nimport { getAllSpanIds } from '../hooks/get-all-span-ids';\nimport { useDownloadTraceJson } from '../hooks/use-download-trace-json';\nimport { useTraceSearch } from '../hooks/use-trace-search';\nimport type { TraceUsageSummary } from '../trace-list-columns';\nimport type { LightSpanRecord } from '../types';\nimport { formatHierarchicalSpans } from './format-hierarchical-spans';\nimport { TraceIdButton } from './trace-id-button';\nimport { TraceSpanTimeline } from './trace-span-timeline';\nimport { TraceSpanTree } from './trace-span-tree';\nimport { TraceSummaryDescription } from './trace-summary-description';\nimport { Button } from '@/ds/components/Button';\nimport { ButtonsGroup } from '@/ds/components/ButtonsGroup';\nimport { DataPanel } from '@/ds/components/DataPanel';\nimport type { DataPanelProps } from '@/ds/components/DataPanel';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu';\nimport { Notice } from '@/ds/components/Notice';\nimport { SearchInput } from '@/ds/components/SearchInput';\nimport { Tab, TabList, Tabs } from '@/ds/components/Tabs';\nimport { Icon } from '@/ds/icons/Icon';\nimport { ScorersIcon } from '@/ds/icons/ScorersIcon';\nimport type { LinkComponent } from '@/ds/types/link-component';\nimport { useScrollToFirstHighlight } from '@/hooks/use-scroll-to-first-highlight';\nimport { useTextHighlight } from '@/hooks/use-text-highlight';\nimport { PanelGroup } from '@/lib/resize/panel-group';\nimport { PanelSeparator } from '@/lib/resize/separator';\nimport { cn } from '@/lib/utils';\n\nexport type TraceDataPanelPlacement = 'traces-list' | 'trace-page';\n\nexport type TraceSpanView = 'tree' | 'timeline';\n\n/** What the side column next to the span tree shows. */\nexport type TraceSideView = 'messages' | 'feedback' | 'scores';\n\nexport interface TraceDataPanelViewProps {\n /** Keep the panel mounted and pass `undefined` to close it, so the drawer animates out. */\n traceId?: string;\n /** Lightweight spans for the trace. Caller fetches via useTraceLightSpans. */\n spans: LightSpanRecord[] | undefined;\n isLoading?: boolean;\n onClose: () => void;\n onSpanSelect?: (spanId: string | undefined) => void;\n onEvaluateTrace?: () => void;\n /** When set, an \"Add full trace to dataset\" button appears; the consumer owns the dialog. */\n onSaveAsDatasetItem?: (args: { traceId: string; rootSpanId: string | undefined }) => void;\n /** When set, an \"Add tool mocks to item\" button appears; the consumer owns the dialog. */\n onAddTraceMocksToItem?: (args: { traceId: string }) => void;\n initialSpanId?: string | null;\n onPrevious?: () => void;\n onNext?: () => void;\n /** Drawer width; defaults to `wide` since the panel lays out several columns. */\n size?: DataPanelProps['size'];\n /** Elevation when opened next to other sibling panels. */\n depth?: DataPanelProps['depth'];\n /** Rendered inside the drawer above the trace header (e.g. inbox feedback context). */\n headerSlot?: ReactNode;\n /** Integration-specific actions shown alongside the standard trace controls. */\n headerActionsSlot?: ReactNode;\n /** Accessible drawer name; defaults to the trace id. */\n title?: string;\n placement: TraceDataPanelPlacement;\n /** @deprecated No longer used: the panel renders the span tree with the duration as text. */\n timelineChartWidth?: 'wide' | 'default';\n /** When both are provided, renders an \"Open trace page\" button. */\n LinkComponent?: LinkComponent;\n traceHref?: string;\n /** When provided, the entity name in the trace summary links to the entity's page. */\n entityHref?: string;\n /** Token and estimated-cost totals shown in the compact trace summary. */\n usage?: TraceUsageSummary;\n /**\n * Span treated as the displayed root of the timeline. Required for branch\n * subtrees from `getBranch` where the anchor has a real parent that's outside\n * `spans`. When omitted, the span with no parent is used (trace case).\n */\n anchorSpanId?: string;\n /**\n * Whether to render the \"Evaluating traces and saving them as dataset items is\n * available in Mastra Studio\" info notice when neither `onEvaluateTrace` nor\n * `onSaveAsDatasetItem` is provided. Defaults to `true`. Pass `false` when this\n * panel is rendered inside Studio in a context that intentionally omits those\n * handlers (e.g. inline below an experiment result).\n */\n showUnavailableFeaturesMsg?: boolean;\n /**\n * When provided, a \"Scores\" tab appears; the slot renders whatever trace-level\n * scoring UI the consumer wants.\n */\n scoresTabSlot?: (args: { traceId: string; rootSpanId: string | undefined }) => ReactNode;\n /** Optional count shown in the \"Scores\" tab label. */\n scoresTabBadge?: ReactNode;\n /**\n * When provided, a \"Feedback\" tab appears; the slot renders the trace-level\n * feedback UI. Trace feedback is not scoped to a span — the span panel owns that.\n */\n feedbackTabSlot?: (args: { traceId: string }) => ReactNode;\n /** Optional count rendered after the \"Feedback\" tab label, e.g. `Feedback (3)`. */\n feedbackTabBadge?: ReactNode;\n /** Span ids to feature in the timeline; every other span is faded. */\n featuredSpanIds?: string[];\n /**\n * The \"Messages\" view of the side column next to the span tree (typically the\n * trace as one reconstructed agent turn). Rendered without content padding.\n */\n messagesPanelSlot?: ReactNode;\n /**\n * Actions rendered at the end of the side column's tab row (e.g. \"Open full thread\").\n * `compact` is true when the side column is narrow and controls collapse to icons.\n */\n sideHeaderActions?: (options: { compact: boolean }) => ReactNode;\n /** Controlled span view (tree or timeline); falls back to local state starting on the tree. */\n spanView?: TraceSpanView;\n onSpanViewChange?: (view: TraceSpanView) => void;\n /** Controlled side column view; falls back to the first available view. */\n sideView?: TraceSideView;\n onSideViewChange?: (view: TraceSideView) => void;\n /**\n * Rendered as a column to the right of the timeline inside the same card;\n * typically the span detail.\n */\n spanPanelSlot?: ReactNode;\n}\n\nexport function TraceDataPanelView({\n traceId,\n spans,\n isLoading,\n onClose,\n onSpanSelect,\n onEvaluateTrace,\n onSaveAsDatasetItem,\n onAddTraceMocksToItem,\n initialSpanId,\n onPrevious,\n onNext,\n size = 'wide',\n depth,\n headerSlot,\n headerActionsSlot,\n title,\n placement,\n LinkComponent,\n traceHref,\n entityHref,\n usage,\n anchorSpanId,\n showUnavailableFeaturesMsg = true,\n scoresTabSlot,\n scoresTabBadge,\n feedbackTabSlot,\n feedbackTabBadge,\n featuredSpanIds,\n messagesPanelSlot,\n sideHeaderActions,\n sideView: controlledSideView,\n onSideViewChange,\n spanView: controlledSpanView,\n onSpanViewChange,\n spanPanelSlot,\n}: TraceDataPanelViewProps) {\n const isOnTracePage = placement === 'trace-page';\n\n // The side column next to the span tree hosts Messages / Feedback / Scores;\n // which one is shown is purely a local viewing choice.\n const sideViews = useMemo(() => {\n const views: Array<{ value: TraceSideView; name: string; label: ReactNode }> = [];\n if (messagesPanelSlot) {\n views.push({\n value: 'messages',\n name: 'Messages',\n label: (\n <>\n <Icon size=\"xs\">\n <MessageSquareTextIcon />\n </Icon>\n <span className=\"@max-[501px]:sr-only\">Messages</span>\n </>\n ),\n });\n }\n if (feedbackTabSlot) {\n views.push({\n value: 'feedback',\n name: 'Feedback',\n label: (\n <>\n <Icon size=\"xs\">\n <MessageSquareReplyIcon />\n </Icon>\n <span className=\"@max-[501px]:sr-only\">\n Feedback{feedbackTabBadge != null && <> ({feedbackTabBadge})</>}\n </span>\n </>\n ),\n });\n }\n if (scoresTabSlot) {\n views.push({\n value: 'scores',\n name: 'Scores',\n label: (\n <>\n <Icon size=\"xs\">\n <ScorersIcon />\n </Icon>\n <span className=\"@max-[501px]:sr-only\">Scores{scoresTabBadge != null && <> ({scoresTabBadge})</>}</span>\n </>\n ),\n });\n }\n return views;\n }, [messagesPanelSlot, feedbackTabSlot, feedbackTabBadge, scoresTabSlot, scoresTabBadge]);\n const [uncontrolledSideView, setUncontrolledSideView] = useState<TraceSideView>();\n // Mirrors the side column's `@max-[501px]` container query: the layout collapses in CSS, but\n // tooltips render in a portal outside the container, so they need the width in JS.\n const [sideColumnElement, setSideColumnElement] = useState<HTMLDivElement | null>(null);\n const [compactSide, setCompactSide] = useState(false);\n useEffect(() => {\n if (!sideColumnElement || !('ResizeObserver' in globalThis)) return;\n const observer = new ResizeObserver(() => setCompactSide(sideColumnElement.clientWidth <= 500));\n observer.observe(sideColumnElement);\n return () => observer.disconnect();\n }, [sideColumnElement]);\n const chosenSideView = controlledSideView ?? uncontrolledSideView;\n const sideView = (sideViews.find(view => view.value === chosenSideView) ?? sideViews[0])?.value;\n const handleSideViewChange = (view: TraceSideView) => {\n setUncontrolledSideView(view);\n onSideViewChange?.(view);\n };\n\n const [uncontrolledSpanView, setUncontrolledSpanView] = useState<TraceSpanView>('tree');\n const spanView = controlledSpanView ?? uncontrolledSpanView;\n const setSpanView = (view: TraceSpanView) => {\n setUncontrolledSpanView(view);\n onSpanViewChange?.(view);\n };\n\n const { download: downloadTraceJson, isPending: isDownloadingTrace } = useDownloadTraceJson();\n\n const [selectedSpanId, setSelectedSpanId] = useState<string | undefined>(initialSpanId ?? undefined);\n\n // Sync selected span when initialSpanId or trace data changes\n useEffect(() => {\n // No span requested: clear immediately.\n if (!initialSpanId) {\n setSelectedSpanId(undefined);\n onSpanSelect?.(undefined);\n return;\n }\n // Span requested: wait for trace data before deciding so an in-flight\n // fetch doesn't wipe a URL-provided selection. Callers that default their\n // spans to `[]` while loading only say so through `isLoading`.\n if (isLoading || !spans) return;\n\n const found = spans.find(s => s.spanId === initialSpanId);\n if (found) {\n setSelectedSpanId(initialSpanId);\n onSpanSelect?.(initialSpanId);\n } else {\n setSelectedSpanId(undefined);\n onSpanSelect?.(undefined);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initialSpanId, spans, isLoading]);\n\n const { query, setQuery, results, payloadOnlyMatchIds } = useTraceSearch(spans ?? []);\n\n const hierarchicalSpans = useMemo(\n () =>\n formatHierarchicalSpans(\n // Carried on the span rather than drilled as a prop: the tree is rebuilt here and\n // rendered several components deeper.\n results.map(span => ({ ...span, matchedInPayloadOnly: payloadOnlyMatchIds.has(span.spanId) })),\n anchorSpanId,\n ),\n [results, payloadOnlyMatchIds, anchorSpanId],\n );\n\n const [expandedSpanIds, setExpandedSpanIds] = useState<string[]>([]);\n\n useEffect(() => {\n if (hierarchicalSpans.length > 0) {\n setExpandedSpanIds(getAllSpanIds(hierarchicalSpans));\n }\n }, [hierarchicalSpans]);\n\n const rootSpan = useMemo(\n () => (anchorSpanId ? spans?.find(s => s.spanId === anchorSpanId) : spans?.find(s => s.parentSpanId == null)),\n [spans, anchorSpanId],\n );\n const rootError = getSpanError(rootSpan?.error);\n const handleSpanClick = (id: string) => {\n const newId = selectedSpanId === id ? undefined : id;\n setSelectedSpanId(newId);\n onSpanSelect?.(newId);\n };\n\n const traceSummary = rootSpan && (\n <TraceSummaryDescription rootSpan={rootSpan} usage={usage} entityHref={entityHref} LinkComponent={LinkComponent} />\n );\n\n const traceActionsMenu = traceId && (\n <DropdownMenu>\n <DropdownMenu.Trigger\n render={\n <Button size=\"sm\" variant=\"ghost\" tooltip=\"Open trace actions\" aria-label=\"Open trace actions\">\n <MoreHorizontalIcon />\n </Button>\n }\n />\n <DropdownMenu.Content align=\"end\">\n {!isOnTracePage && onSaveAsDatasetItem && (\n <DropdownMenu.Item onSelect={() => onSaveAsDatasetItem({ traceId, rootSpanId: rootSpan?.spanId })}>\n <SaveIcon />\n Add full trace to dataset\n </DropdownMenu.Item>\n )}\n {!isOnTracePage && onAddTraceMocksToItem && (\n <DropdownMenu.Item onSelect={() => onAddTraceMocksToItem({ traceId })}>\n <WrenchIcon />\n Add tool mocks to item\n </DropdownMenu.Item>\n )}\n {!isOnTracePage && LinkComponent && traceHref && (\n <DropdownMenu.Item render={<LinkComponent href={traceHref} />}>\n <Link2Icon />\n Open trace page\n </DropdownMenu.Item>\n )}\n <DropdownMenu.Item disabled={isDownloadingTrace} onSelect={() => downloadTraceJson(traceId)}>\n {isDownloadingTrace ? <Loader2Icon className=\"animate-spin\" /> : <DownloadIcon />}\n Download trace JSON\n </DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu>\n );\n\n const sideColumn =\n traceId && sideView ? (\n <div\n ref={setSideColumnElement}\n data-trace-side-column\n className=\"@container flex h-full min-h-0 min-w-0 flex-col overflow-hidden\"\n >\n {/* Whether the Messages tab exists depends on the spans, so the tabs wait for them;\n otherwise the column flickers Feedback → Messages as the first tab changes. */}\n {isLoading ? (\n <DataPanel.Header className=\"border-b border-border\">\n <div aria-hidden className=\"h-control-sm\" />\n </DataPanel.Header>\n ) : (\n <Tabs<TraceSideView> defaultTab={sideView} value={sideView} onValueChange={handleSideViewChange}>\n <DataPanel.Header className=\"border-b border-border\">\n <TabList variant=\"pill-ghost\" size=\"sm\">\n {sideViews.map(view => (\n <Tab key={view.value} value={view.value} tooltip={compactSide ? view.name : undefined}>\n {view.label}\n </Tab>\n ))}\n </TabList>\n {sideHeaderActions && (\n <div className=\"ml-auto flex shrink-0 items-center whitespace-nowrap\">\n {sideHeaderActions({ compact: compactSide })}\n </div>\n )}\n </DataPanel.Header>\n </Tabs>\n )}\n {!isLoading && sideView === 'messages' && (\n <DataPanel.Content className=\"p-0\">{messagesPanelSlot}</DataPanel.Content>\n )}\n {!isLoading && sideView === 'feedback' && (\n <DataPanel.Content>{feedbackTabSlot?.({ traceId })}</DataPanel.Content>\n )}\n {!isLoading && sideView === 'scores' && (\n <DataPanel.Content>{scoresTabSlot?.({ traceId, rootSpanId: rootSpan?.spanId })}</DataPanel.Content>\n )}\n </div>\n ) : null;\n\n return (\n <DataPanel\n open={!!traceId}\n onClose={onClose}\n title={title ?? (isOnTracePage ? 'Trace Timeline' : `Trace ${traceId ?? ''}`)}\n size={size}\n depth={depth}\n >\n {traceId && (\n <>\n {headerSlot}\n <DataPanel.Header>\n {isOnTracePage ? (\n <>\n <DataPanel.HeaderContent>\n <DataPanel.Heading>Trace Timeline</DataPanel.Heading>\n {traceSummary}\n </DataPanel.HeaderContent>\n <DataPanel.HeaderActions>\n {headerActionsSlot}\n {traceActionsMenu}\n </DataPanel.HeaderActions>\n </>\n ) : (\n <>\n <DataPanel.HeaderContent>\n <DataPanel.Heading>\n Trace\n <TraceIdButton id={traceId} />\n </DataPanel.Heading>\n {traceSummary}\n </DataPanel.HeaderContent>\n <DataPanel.HeaderActions>\n {headerActionsSlot}\n {onEvaluateTrace && (\n <Button variant=\"primary\" size=\"sm\" onClick={onEvaluateTrace} disabled={!rootSpan}>\n <CircleGaugeIcon />\n Score trace\n </Button>\n )}\n {traceActionsMenu}\n {(onPrevious || onNext) && (\n <DataPanel.NextPrevNav\n onPrevious={onPrevious}\n onNext={onNext}\n previousLabel=\"Go to previous trace\"\n nextLabel=\"Go to next trace\"\n />\n )}\n <DataPanel.CloseButton icon=\"x\" onClick={onClose} label=\"Close trace\" tooltip=\"Close trace\" />\n </DataPanel.HeaderActions>\n </>\n )}\n </DataPanel.Header>\n\n <TracePanelColumns\n layoutKey={rootSpan ? (rootSpan.entityType ?? 'unknown') : undefined}\n sideColumnSlot={sideColumn}\n spanPanelSlot={spanPanelSlot}\n highlightQuery={query}\n spanPanelKey={selectedSpanId}\n >\n {!isLoading && !spans?.length ? (\n <DataPanel.NoData>No spans found for this trace.</DataPanel.NoData>\n ) : (\n (() => {\n // Shared by the Spans and Timeline tabs: both views render the same\n // filtered `hierarchicalSpans`, so one query drives both.\n const isTimeline = spanView === 'timeline';\n const searchHeader = (\n <DataPanel.Header className=\"gap-2 border-b border-border\">\n <SearchInput\n label=\"Search spans\"\n placeholder=\"Search spans...\"\n size=\"sm\"\n value={query}\n onValueChange={setQuery}\n className=\"min-w-0 flex-1\"\n />\n <ButtonsGroup size=\"sm\" className=\"shrink-0\">\n <Button\n variant={isTimeline ? 'default' : 'primary'}\n aria-pressed={!isTimeline}\n tooltip=\"Span tree\"\n tooltipPosition=\"bottom\"\n onClick={() => setSpanView('tree')}\n >\n <ListTreeIcon />\n </Button>\n <Button\n variant={isTimeline ? 'primary' : 'default'}\n aria-pressed={isTimeline}\n tooltip=\"Timeline\"\n tooltipPosition=\"bottom\"\n onClick={() => setSpanView('timeline')}\n >\n <ChartGanttIcon />\n </Button>\n </ButtonsGroup>\n </DataPanel.Header>\n );\n const noSearchResults = !isLoading && hierarchicalSpans.length === 0 && (\n <DataPanel.NoData>No spans match your search.</DataPanel.NoData>\n );\n const viewProps = {\n hierarchicalSpans,\n onSpanClick: handleSpanClick,\n selectedSpanId,\n expandedSpanIds,\n setExpandedSpanIds,\n featuredSpanIds,\n revealSpanId: featuredSpanIds?.at(-1),\n isLoading,\n };\n\n return (\n <>\n {searchHeader}\n <DataPanel.Content>\n {!isOnTracePage &&\n !onEvaluateTrace &&\n !onSaveAsDatasetItem &&\n !onAddTraceMocksToItem &&\n showUnavailableFeaturesMsg && (\n <Notice variant=\"info\" className=\"mb-6\">\n <Notice.Message>\n Evaluating traces and saving them as dataset items is available in Mastra Studio (local or\n deployed).\n </Notice.Message>\n </Notice>\n )}\n\n {rootSpan && rootError && (\n <Notice\n variant=\"destructive\"\n title={rootError.name ?? 'Error'}\n action={\n <Notice.Button\n onClick={() => {\n setSelectedSpanId(rootSpan.spanId);\n onSpanSelect?.(rootSpan.spanId);\n }}\n >\n View details\n </Notice.Button>\n }\n className=\"mb-4\"\n >\n <Notice.Message className=\"line-clamp-3\">{rootError.message}</Notice.Message>\n </Notice>\n )}\n\n {/* Both views share selection + expansion state, and stay mounted with no\n results because they host the search field: unmounting would strand the\n user with a query they can no longer clear. */}\n {isTimeline ? <TraceSpanTimeline {...viewProps} /> : <TraceSpanTree {...viewProps} />}\n {noSearchResults}\n </DataPanel.Content>\n </>\n );\n })()\n )}\n </TracePanelColumns>\n </>\n )}\n </DataPanel>\n );\n}\n\n/** The error a span recorded, when it has the `{ name?, message }` shape spans store. */\nfunction getSpanError(error: unknown): { name?: string; message: string } | undefined {\n if (typeof error !== 'object' || error === null || !('message' in error) || typeof error.message !== 'string') {\n return undefined;\n }\n const name = 'name' in error && typeof error.name === 'string' ? error.name : undefined;\n return { name, message: error.message };\n}\n\n/**\n * Lays out the card body as three columns — `[side] [trace] [span]` — inside the\n * same card. The side column (messages / feedback / scores) is independent of the\n * Spans/Timeline tabs, so it sits beside them rather than inside a tab. The side\n * and span columns are resizable (down to a minimum width); the trace column takes the rest.\n * Search matches — span names in the timeline tree as well as values in the span\n * detail — are highlighted while a query is active.\n */\n// localStorage access throws when storage is blocked (privacy modes, sandboxed iframes), and the\n// library parses stored values without a guard; fall back to defaults instead of crashing the panel.\nconst safeLayoutStorage = {\n getItem: (key: string): string | null => {\n try {\n const value = localStorage.getItem(key);\n if (value !== null) JSON.parse(value);\n return value;\n } catch {\n return null;\n }\n },\n setItem: (key: string, value: string) => {\n try {\n localStorage.setItem(key, value);\n } catch {\n // Persisting is best-effort.\n }\n },\n};\n\nfunction TracePanelColumns({\n layoutKey,\n sideColumnSlot,\n spanPanelSlot,\n highlightQuery,\n spanPanelKey,\n children,\n}: {\n /**\n * Root entity type of the trace; column sizes are persisted per value in localStorage.\n * Undefined while the root span is unknown, in which case nothing is persisted.\n */\n layoutKey?: string;\n /** Resizable column on the left (messages / feedback / scores). */\n sideColumnSlot?: ReactNode;\n spanPanelSlot?: ReactNode;\n highlightQuery: string;\n /** Identity of the span shown in the panel; changing it re-triggers the match scroll. */\n spanPanelKey?: string;\n children: ReactNode;\n}) {\n // A single hook call on the common ancestor covers both the timeline tree and\n // the span detail, so span names and payload values highlight together.\n const { ref: highlightRef } = useTextHighlight<HTMLDivElement>(highlightQuery);\n\n // Scoped to the span-panel column only: a match deep in a large payload sits below\n // the fold, so the first painted match is brought into view when the panel opens.\n // The timeline column must never be scrolled by this.\n const { ref: scrollToMatchRef } = useScrollToFirstHighlight<HTMLDivElement>(highlightQuery, spanPanelKey);\n\n // One stored layout per panel combination, so opening/closing the span panel doesn't clobber the other.\n const panelIds = [...(sideColumnSlot ? ['trace-side'] : []), 'trace-main', ...(spanPanelSlot ? ['trace-span'] : [])];\n const { defaultLayout, onLayoutChanged } = useDefaultLayout({\n id: `mastra:trace-panel-layout:${layoutKey ?? 'unknown'}`,\n panelIds,\n storage: safeLayoutStorage,\n });\n\n return (\n <div ref={highlightRef} data-trace-columns className=\"flex min-h-0 flex-1\">\n <PanelGroup\n // defaultLayout is only read on mount: remount once the entity type is known.\n key={layoutKey ?? 'unknown'}\n orientation=\"horizontal\"\n className=\"min-h-0 flex-1\"\n defaultLayout={layoutKey ? defaultLayout : undefined}\n onLayoutChanged={layoutKey ? onLayoutChanged : undefined}\n >\n {sideColumnSlot && (\n <>\n <Panel id=\"trace-side\" minSize={280} defaultSize=\"40%\">\n <div className=\"flex h-full min-h-0 flex-col border-r border-border\">{sideColumnSlot}</div>\n </Panel>\n <PanelSeparator variant=\"pill\" />\n </>\n )}\n <Panel id=\"trace-main\" minSize={320} className=\"flex min-h-0 min-w-0 flex-col\">\n {children}\n </Panel>\n {spanPanelSlot && (\n <>\n <PanelSeparator variant=\"pill\" />\n <Panel id=\"trace-span\" minSize={320} defaultSize=\"35%\">\n <div\n ref={scrollToMatchRef}\n data-highlight\n className=\"flex h-full min-h-0 animate-in flex-col border-l border-border duration-300 fade-in-0\"\n >\n {spanPanelSlot}\n </div>\n </Panel>\n </>\n )}\n </PanelGroup>\n </div>\n );\n}\n"],"names":["useMemo","jsxs","Fragment","jsx","Icon","MessageSquareTextIcon","MessageSquareReplyIcon","ScorersIcon","useState","useEffect","useDownloadTraceJson","useTraceSearch","formatHierarchicalSpans","getAllSpanIds","TraceSummaryDescription","DropdownMenu","Button","MoreHorizontalIcon","SaveIcon","WrenchIcon","Link2Icon","Loader2Icon","DownloadIcon","DataPanel","Tabs","TabList","Tab","TraceIdButton","CircleGaugeIcon","SearchInput","ButtonsGroup","ListTreeIcon","ChartGanttIcon","Notice","TraceSpanTimeline","TraceSpanTree","useTextHighlight","useScrollToFirstHighlight","useDefaultLayout","PanelGroup","Panel","PanelSeparator"],"mappings":"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"}
|
|
@@ -10,15 +10,15 @@ import { TraceIdButton } from './trace-id-button.es.js';
|
|
|
10
10
|
import { TraceSpanTimeline } from './trace-span-timeline.es.js';
|
|
11
11
|
import { TraceSpanTree } from './trace-span-tree.es.js';
|
|
12
12
|
import { TraceSummaryDescription } from './trace-summary-description.es.js';
|
|
13
|
-
import { B as Button } from '../../../Button-
|
|
13
|
+
import { B as Button } from '../../../Button-D8a5EWJ5.js';
|
|
14
14
|
import { B as ButtonsGroup } from '../../../buttons-group-DGWioDP3.js';
|
|
15
|
-
import { D as DataPanel } from '../../../data-panel-
|
|
15
|
+
import { D as DataPanel } from '../../../data-panel-DjtnX70w.js';
|
|
16
16
|
import { D as DropdownMenu } from '../../../dropdown-menu-CQ_48tVI.js';
|
|
17
17
|
import { N as Notice } from '../../../Notice-BioYTS4b.js';
|
|
18
|
-
import { S as SearchInput } from '../../../search-input-
|
|
18
|
+
import { S as SearchInput } from '../../../search-input-C9qFBzn6.js';
|
|
19
19
|
import { T as Tabs } from '../../../tabs-root-CI7WQrJF.js';
|
|
20
20
|
import { T as TabList } from '../../../tabs-list-BCnrYcX1.js';
|
|
21
|
-
import { T as Tab } from '../../../tabs-tab-
|
|
21
|
+
import { T as Tab } from '../../../tabs-tab-CkLyKrL0.js';
|
|
22
22
|
import { Icon } from '../../../icons/Icon.es.js';
|
|
23
23
|
import { ScorersIcon } from '../../../icons/ScorersIcon.es.js';
|
|
24
24
|
import { useScrollToFirstHighlight } from '../../../hooks/use-scroll-to-first-highlight.es.js';
|
|
@@ -171,6 +171,7 @@ function TraceDataPanelView({
|
|
|
171
171
|
() => anchorSpanId ? spans?.find((s) => s.spanId === anchorSpanId) : spans?.find((s) => s.parentSpanId == null),
|
|
172
172
|
[spans, anchorSpanId]
|
|
173
173
|
);
|
|
174
|
+
const rootError = getSpanError(rootSpan?.error);
|
|
174
175
|
const handleSpanClick = (id) => {
|
|
175
176
|
const newId = selectedSpanId === id ? void 0 : id;
|
|
176
177
|
setSelectedSpanId(newId);
|
|
@@ -285,7 +286,7 @@ function TraceDataPanelView({
|
|
|
285
286
|
size: "sm",
|
|
286
287
|
value: query,
|
|
287
288
|
onValueChange: setQuery,
|
|
288
|
-
className: "w-
|
|
289
|
+
className: "min-w-0 flex-1"
|
|
289
290
|
}
|
|
290
291
|
),
|
|
291
292
|
/* @__PURE__ */ jsxs(ButtonsGroup, { size: "sm", className: "shrink-0", children: [
|
|
@@ -328,6 +329,25 @@ function TraceDataPanelView({
|
|
|
328
329
|
searchHeader,
|
|
329
330
|
/* @__PURE__ */ jsxs(DataPanel.Content, { children: [
|
|
330
331
|
!isOnTracePage && !onEvaluateTrace && !onSaveAsDatasetItem && !onAddTraceMocksToItem && showUnavailableFeaturesMsg && /* @__PURE__ */ jsx(Notice, { variant: "info", className: "mb-6", children: /* @__PURE__ */ jsx(Notice.Message, { children: "Evaluating traces and saving them as dataset items is available in Mastra Studio (local or deployed)." }) }),
|
|
332
|
+
rootSpan && rootError && /* @__PURE__ */ jsx(
|
|
333
|
+
Notice,
|
|
334
|
+
{
|
|
335
|
+
variant: "destructive",
|
|
336
|
+
title: rootError.name ?? "Error",
|
|
337
|
+
action: /* @__PURE__ */ jsx(
|
|
338
|
+
Notice.Button,
|
|
339
|
+
{
|
|
340
|
+
onClick: () => {
|
|
341
|
+
setSelectedSpanId(rootSpan.spanId);
|
|
342
|
+
onSpanSelect?.(rootSpan.spanId);
|
|
343
|
+
},
|
|
344
|
+
children: "View details"
|
|
345
|
+
}
|
|
346
|
+
),
|
|
347
|
+
className: "mb-4",
|
|
348
|
+
children: /* @__PURE__ */ jsx(Notice.Message, { className: "line-clamp-3", children: rootError.message })
|
|
349
|
+
}
|
|
350
|
+
),
|
|
331
351
|
isTimeline ? /* @__PURE__ */ jsx(TraceSpanTimeline, { ...viewProps }) : /* @__PURE__ */ jsx(TraceSpanTree, { ...viewProps }),
|
|
332
352
|
noSearchResults
|
|
333
353
|
] })
|
|
@@ -339,6 +359,13 @@ function TraceDataPanelView({
|
|
|
339
359
|
}
|
|
340
360
|
);
|
|
341
361
|
}
|
|
362
|
+
function getSpanError(error) {
|
|
363
|
+
if (typeof error !== "object" || error === null || !("message" in error) || typeof error.message !== "string") {
|
|
364
|
+
return void 0;
|
|
365
|
+
}
|
|
366
|
+
const name = "name" in error && typeof error.name === "string" ? error.name : void 0;
|
|
367
|
+
return { name, message: error.message };
|
|
368
|
+
}
|
|
342
369
|
const safeLayoutStorage = {
|
|
343
370
|
getItem: (key) => {
|
|
344
371
|
try {
|