@mastra/playground-ui 48.0.0-alpha.8 → 48.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +338 -0
- package/dist/{Button-Bm94fEF2.cjs → Button-B4Ixj2aW.cjs} +4 -3
- package/dist/Button-B4Ixj2aW.cjs.map +1 -0
- package/dist/{Button-Bx2lFdqb.js → Button-C-9Pzy-Z.js} +4 -3
- package/dist/Button-C-9Pzy-Z.js.map +1 -0
- package/dist/{Notice-B9cdEg8R.cjs → Notice-DSfh1Ap5.cjs} +2 -2
- package/dist/{Notice-B9cdEg8R.cjs.map → Notice-DSfh1Ap5.cjs.map} +1 -1
- package/dist/{Notice-DIK9IZsq.js → Notice-DWHQgxkA.js} +2 -2
- package/dist/{Notice-DIK9IZsq.js.map → Notice-DWHQgxkA.js.map} +1 -1
- package/dist/{SessionExpired-C5ADs4NL.cjs → SessionExpired-CL4bppLl.cjs} +2 -2
- package/dist/{SessionExpired-C5ADs4NL.cjs.map → SessionExpired-CL4bppLl.cjs.map} +1 -1
- package/dist/{SessionExpired-CHF__hq9.js → SessionExpired-qvMB5AP_.js} +2 -2
- package/dist/{SessionExpired-CHF__hq9.js.map → SessionExpired-qvMB5AP_.js.map} +1 -1
- package/dist/Shimmer.css +37 -0
- package/dist/{combobox-sa_Pxyl4.js → combobox-CH9vBToX.js} +2 -2
- package/dist/{combobox-sa_Pxyl4.js.map → combobox-CH9vBToX.js.map} +1 -1
- package/dist/{combobox-DXwbHjvQ.cjs → combobox-Z3NehlIY.cjs} +2 -2
- package/dist/{combobox-DXwbHjvQ.cjs.map → combobox-Z3NehlIY.cjs.map} +1 -1
- package/dist/{command-Duq1xsiS.js → command-BZ7S7MR-.js} +2 -2
- package/dist/{command-Duq1xsiS.js.map → command-BZ7S7MR-.js.map} +1 -1
- package/dist/{command-qsEykgml.cjs → command-DJwcGKv_.cjs} +2 -2
- package/dist/{command-qsEykgml.cjs.map → command-DJwcGKv_.cjs.map} +1 -1
- package/dist/components/AlertDialog.cjs.js +1 -1
- package/dist/components/AlertDialog.es.js +1 -1
- package/dist/components/Button.cjs.js +1 -1
- package/dist/components/Button.es.js +1 -1
- package/dist/components/ChatShell.cjs.js +10 -6
- package/dist/components/ChatShell.cjs.js.map +1 -1
- package/dist/components/ChatShell.es.js +10 -6
- package/dist/components/ChatShell.es.js.map +1 -1
- package/dist/components/ClampedText.cjs.js +1 -1
- package/dist/components/ClampedText.es.js +1 -1
- package/dist/components/CodeBlock.cjs.js +6 -5
- package/dist/components/CodeBlock.cjs.js.map +1 -1
- package/dist/components/CodeBlock.es.js +4 -3
- package/dist/components/CodeBlock.es.js.map +1 -1
- package/dist/components/CodeEditor.cjs.js +1 -1
- package/dist/components/CodeEditor.es.js +1 -1
- package/dist/components/Columns.cjs.js +1 -1
- package/dist/components/Columns.es.js +1 -1
- package/dist/components/Combobox.cjs.js +1 -1
- package/dist/components/Combobox.es.js +1 -1
- 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/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/DataFilter.cjs.js +2 -2
- package/dist/components/DataFilter.es.js +2 -2
- package/dist/components/DataList.cjs.js +2 -2
- package/dist/components/DataList.es.js +2 -2
- 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 +1 -1
- package/dist/components/Dialog.es.js +1 -1
- package/dist/components/Drawer.cjs.js +1 -1
- package/dist/components/Drawer.es.js +1 -1
- package/dist/components/DropdownMenu.cjs.js +1 -1
- package/dist/components/DropdownMenu.es.js +1 -1
- package/dist/components/EnvironmentVariablesEditor.cjs.js +4 -4
- package/dist/components/EnvironmentVariablesEditor.es.js +4 -4
- package/dist/components/ErrorBoundary.cjs.js +1 -1
- package/dist/components/ErrorBoundary.es.js +1 -1
- package/dist/components/FormFieldBlocks.cjs.js +2 -2
- package/dist/components/FormFieldBlocks.es.js +2 -2
- package/dist/components/HoverCard.cjs.js +1 -1
- package/dist/components/HoverCard.es.js +1 -1
- package/dist/components/InputGroup.cjs.js +1 -1
- package/dist/components/InputGroup.es.js +1 -1
- package/dist/components/JSONSchemaForm.cjs.js +2 -2
- package/dist/components/JSONSchemaForm.es.js +2 -2
- package/dist/components/KeyValueList.cjs.js +1 -1
- package/dist/components/KeyValueList.es.js +1 -1
- package/dist/components/ListSearch.cjs.js +1 -1
- package/dist/components/ListSearch.es.js +1 -1
- package/dist/components/MainSidebar.cjs.js +73 -50
- package/dist/components/MainSidebar.cjs.js.map +1 -1
- package/dist/components/MainSidebar.es.js +73 -50
- package/dist/components/MainSidebar.es.js.map +1 -1
- package/dist/components/MarkdownRenderer.cjs.js +1 -1
- package/dist/components/MarkdownRenderer.es.js +1 -1
- package/dist/components/MessageScroller.cjs.js +1 -1
- package/dist/components/MessageScroller.es.js +1 -1
- package/dist/components/Notice.cjs.js +1 -1
- package/dist/components/Notice.es.js +1 -1
- package/dist/components/PrevNextNav.cjs.js +1 -1
- package/dist/components/PrevNextNav.es.js +1 -1
- package/dist/components/PropertyFilter.cjs.js +3 -3
- package/dist/components/PropertyFilter.es.js +4 -4
- package/dist/components/RuleBuilder.cjs.js +2 -2
- package/dist/components/RuleBuilder.es.js +2 -2
- package/dist/components/SankeyChart.cjs.js +10 -709
- package/dist/components/SankeyChart.cjs.js.map +1 -1
- package/dist/components/SankeyChart.es.js +2 -706
- package/dist/components/SankeyChart.es.js.map +1 -1
- package/dist/components/Select.cjs.js +1 -1
- package/dist/components/Select.es.js +1 -1
- package/dist/components/SessionExpired.cjs.js +1 -1
- package/dist/components/SessionExpired.es.js +1 -1
- package/dist/components/Shimmer.cjs.js +2 -15
- package/dist/components/Shimmer.cjs.js.map +1 -1
- package/dist/components/Shimmer.es.js +2 -15
- package/dist/components/Shimmer.es.js.map +1 -1
- package/dist/components/SideDialog.cjs.js +3 -3
- package/dist/components/SideDialog.es.js +3 -3
- package/dist/components/Tabs.cjs.js +4 -3
- package/dist/components/Tabs.cjs.js.map +1 -1
- package/dist/components/Tabs.es.js +2 -1
- package/dist/components/Tabs.es.js.map +1 -1
- package/dist/components/ThreadList.cjs.js +1 -1
- package/dist/components/ThreadList.es.js +1 -1
- package/dist/components/ThreadRail.cjs.js +6 -5
- package/dist/components/ThreadRail.cjs.js.map +1 -1
- package/dist/components/ThreadRail.es.js +6 -6
- 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/ai/ask-user.cjs.js +1 -1
- package/dist/components/ai/ask-user.es.js +1 -1
- package/dist/components/ai/plan.cjs.js +2 -2
- package/dist/components/ai/plan.es.js +2 -2
- package/dist/{copy-button-H2iaKMng.js → copy-button-B1GWIQ-x.js} +2 -2
- package/dist/{copy-button-H2iaKMng.js.map → copy-button-B1GWIQ-x.js.map} +1 -1
- package/dist/{copy-button-BKFcsNE1.cjs → copy-button-DwZ3c7D4.cjs} +2 -2
- package/dist/{copy-button-BKFcsNE1.cjs.map → copy-button-DwZ3c7D4.cjs.map} +1 -1
- package/dist/{data-code-section-D2zjah_b.cjs → data-code-section-BjmFgJpC.cjs} +5 -5
- package/dist/{data-code-section-D2zjah_b.cjs.map → data-code-section-BjmFgJpC.cjs.map} +1 -1
- package/dist/{data-code-section-MHMkC6q9.js → data-code-section-PJM5l3aS.js} +5 -5
- package/dist/{data-code-section-MHMkC6q9.js.map → data-code-section-PJM5l3aS.js.map} +1 -1
- package/dist/{data-list-CnQRIUyN.js → data-list-CnQWE0QP.js} +2 -2
- package/dist/{data-list-CnQRIUyN.js.map → data-list-CnQWE0QP.js.map} +1 -1
- package/dist/{data-list-Cb-piK4z.cjs → data-list-Cnnnx_vD.cjs} +2 -2
- package/dist/{data-list-Cb-piK4z.cjs.map → data-list-Cnnnx_vD.cjs.map} +1 -1
- package/dist/{data-panel-BEvHk4wg.js → data-panel-BQqPr6ew.js} +3 -3
- package/dist/{data-panel-BEvHk4wg.js.map → data-panel-BQqPr6ew.js.map} +1 -1
- package/dist/{data-panel-BumsjXVz.cjs → data-panel-C85h9XvH.cjs} +3 -3
- package/dist/{data-panel-BumsjXVz.cjs.map → data-panel-C85h9XvH.cjs.map} +1 -1
- package/dist/{date-time-range-picker-yJBIm34J.js → date-time-range-picker-BQpZVrH7.js} +4 -4
- package/dist/{date-time-range-picker-yJBIm34J.js.map → date-time-range-picker-BQpZVrH7.js.map} +1 -1
- package/dist/{date-time-range-picker-ue0m5G27.cjs → date-time-range-picker-sT6pHDmU.cjs} +4 -4
- package/dist/{date-time-range-picker-ue0m5G27.cjs.map → date-time-range-picker-sT6pHDmU.cjs.map} +1 -1
- package/dist/{dialog-ClItuCFY.cjs → dialog-5ZYCeKf-.cjs} +2 -2
- package/dist/{dialog-ClItuCFY.cjs.map → dialog-5ZYCeKf-.cjs.map} +1 -1
- package/dist/{dialog-bnt6epW2.js → dialog-DDXW5M21.js} +2 -2
- package/dist/{dialog-bnt6epW2.js.map → dialog-DDXW5M21.js.map} +1 -1
- package/dist/domains/logs/components/log-details-view.cjs.js +2 -2
- package/dist/domains/logs/components/log-details-view.es.js +2 -2
- package/dist/domains/logs/components/logs-error-content.cjs.js +1 -1
- package/dist/domains/logs/components/logs-error-content.es.js +1 -1
- package/dist/domains/logs/components/logs-toolbar.cjs.js +1 -1
- package/dist/domains/logs/components/logs-toolbar.es.js +1 -1
- package/dist/domains/logs/components/no-logs-info.cjs.js +1 -1
- package/dist/domains/logs/components/no-logs-info.es.js +1 -1
- package/dist/domains/memory/components/flame-graph.cjs.js +1 -1
- package/dist/domains/memory/components/flame-graph.es.js +1 -1
- package/dist/domains/memory/components/memory-studio-panel.cjs.js +1 -1
- package/dist/domains/memory/components/memory-studio-panel.es.js +1 -1
- package/dist/domains/metrics/components/card-action-buttons.cjs.js +1 -1
- package/dist/domains/metrics/components/card-action-buttons.es.js +1 -1
- package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
- package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
- package/dist/domains/metrics/components/latency-card-view.cjs.js +4 -3
- package/dist/domains/metrics/components/latency-card-view.cjs.js.map +1 -1
- package/dist/domains/metrics/components/latency-card-view.es.js +2 -1
- package/dist/domains/metrics/components/latency-card-view.es.js.map +1 -1
- package/dist/domains/metrics/components/memory-card-view.cjs.js +5 -4
- package/dist/domains/metrics/components/memory-card-view.cjs.js.map +1 -1
- package/dist/domains/metrics/components/memory-card-view.es.js +3 -2
- package/dist/domains/metrics/components/memory-card-view.es.js.map +1 -1
- package/dist/domains/metrics/components/model-usage-cost-card-view.cjs.js +1 -1
- package/dist/domains/metrics/components/model-usage-cost-card-view.es.js +1 -1
- package/dist/domains/metrics/components/scores-card-view.cjs.js +5 -4
- package/dist/domains/metrics/components/scores-card-view.cjs.js.map +1 -1
- package/dist/domains/metrics/components/scores-card-view.es.js +3 -2
- package/dist/domains/metrics/components/scores-card-view.es.js.map +1 -1
- package/dist/domains/metrics/components/token-usage-by-agent-card-view.cjs.js +4 -3
- package/dist/domains/metrics/components/token-usage-by-agent-card-view.cjs.js.map +1 -1
- package/dist/domains/metrics/components/token-usage-by-agent-card-view.es.js +2 -1
- package/dist/domains/metrics/components/token-usage-by-agent-card-view.es.js.map +1 -1
- package/dist/domains/metrics/components/token-usage-timeline-card-view.cjs.js +4 -3
- package/dist/domains/metrics/components/token-usage-timeline-card-view.cjs.js.map +1 -1
- package/dist/domains/metrics/components/token-usage-timeline-card-view.es.js +2 -1
- package/dist/domains/metrics/components/token-usage-timeline-card-view.es.js.map +1 -1
- package/dist/domains/metrics/components/traces-volume-card-view.cjs.js +4 -3
- package/dist/domains/metrics/components/traces-volume-card-view.cjs.js.map +1 -1
- package/dist/domains/metrics/components/traces-volume-card-view.es.js +2 -1
- package/dist/domains/metrics/components/traces-volume-card-view.es.js.map +1 -1
- package/dist/domains/traces/components/no-traces-info.cjs.js +1 -1
- package/dist/domains/traces/components/no-traces-info.es.js +1 -1
- package/dist/domains/traces/components/shared.cjs.js +8 -0
- package/dist/domains/traces/components/shared.cjs.js.map +1 -1
- package/dist/domains/traces/components/shared.es.js +8 -0
- package/dist/domains/traces/components/shared.es.js.map +1 -1
- package/dist/domains/traces/components/span-data-panel-view.cjs.js +6 -5
- 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 -3
- package/dist/domains/traces/components/span-data-panel-view.es.js.map +1 -1
- package/dist/domains/traces/components/timeline-name-col.cjs.js +6 -2
- package/dist/domains/traces/components/timeline-name-col.cjs.js.map +1 -1
- package/dist/domains/traces/components/timeline-name-col.es.js +6 -2
- package/dist/domains/traces/components/timeline-name-col.es.js.map +1 -1
- package/dist/domains/traces/components/timeline-timing-col.cjs.js +1 -1
- package/dist/domains/traces/components/timeline-timing-col.es.js +1 -1
- package/dist/domains/traces/components/trace-columns-menu.cjs.js +3 -3
- package/dist/domains/traces/components/trace-columns-menu.es.js +3 -3
- package/dist/domains/traces/components/trace-data-panel-view.cjs.js +4 -10
- 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 +5 -11
- package/dist/domains/traces/components/trace-data-panel-view.es.js.map +1 -1
- package/dist/domains/traces/components/traces-error-content.cjs.js +1 -1
- package/dist/domains/traces/components/traces-error-content.es.js +1 -1
- package/dist/domains/traces/components/traces-list-mode-toggle.cjs.js +2 -2
- package/dist/domains/traces/components/traces-list-mode-toggle.es.js +2 -2
- package/dist/domains/traces/components/traces-list-view.cjs.js +2 -2
- package/dist/domains/traces/components/traces-list-view.es.js +2 -2
- package/dist/domains/traces/components/traces-toolbar.cjs.js +1 -1
- package/dist/domains/traces/components/traces-toolbar.es.js +1 -1
- package/dist/domains/traces/hooks/use-entity-names.cjs.js +12 -4
- package/dist/domains/traces/hooks/use-entity-names.cjs.js.map +1 -1
- package/dist/domains/traces/hooks/use-entity-names.es.js +12 -4
- package/dist/domains/traces/hooks/use-entity-names.es.js.map +1 -1
- package/dist/{drawer-DZ9amYo_.js → drawer-C8jNXutE.js} +2 -2
- package/dist/{drawer-DZ9amYo_.js.map → drawer-C8jNXutE.js.map} +1 -1
- package/dist/{drawer-CdsTitFp.cjs → drawer-CNnvBMfD.cjs} +2 -2
- package/dist/{drawer-CdsTitFp.cjs.map → drawer-CNnvBMfD.cjs.map} +1 -1
- package/dist/{dropdown-menu-ppWztidX.cjs → dropdown-menu-BZGlERgf.cjs} +4 -3
- package/dist/dropdown-menu-BZGlERgf.cjs.map +1 -0
- package/dist/{dropdown-menu-DEFygDZI.js → dropdown-menu-DCMh8P4w.js} +4 -3
- package/dist/dropdown-menu-DCMh8P4w.js.map +1 -0
- 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/entity-learning-api.cjs.js +113 -0
- package/dist/ee/signals/entity-learning-api.cjs.js.map +1 -0
- package/dist/ee/signals/entity-learning-api.d.ts +2 -0
- package/dist/ee/signals/entity-learning-api.es.js +99 -0
- package/dist/ee/signals/entity-learning-api.es.js.map +1 -0
- package/dist/ee/signals/examples-pager.cjs.js +49 -0
- package/dist/ee/signals/examples-pager.cjs.js.map +1 -0
- package/dist/ee/signals/examples-pager.d.ts +2 -0
- package/dist/ee/signals/examples-pager.es.js +44 -0
- package/dist/ee/signals/examples-pager.es.js.map +1 -0
- package/dist/ee/signals/flow-card.cjs.js +105 -0
- package/dist/ee/signals/flow-card.cjs.js.map +1 -0
- package/dist/ee/signals/flow-card.d.ts +2 -0
- package/dist/ee/signals/flow-card.es.js +101 -0
- package/dist/ee/signals/flow-card.es.js.map +1 -0
- package/dist/ee/signals/hooks/theme-query-guards.cjs.js +20 -0
- package/dist/ee/signals/hooks/theme-query-guards.cjs.js.map +1 -0
- package/dist/ee/signals/hooks/theme-query-guards.d.ts +2 -0
- package/dist/ee/signals/hooks/theme-query-guards.es.js +14 -0
- package/dist/ee/signals/hooks/theme-query-guards.es.js.map +1 -0
- package/dist/ee/signals/hooks/use-entity-learning-progress.cjs.js +19 -0
- package/dist/ee/signals/hooks/use-entity-learning-progress.cjs.js.map +1 -0
- package/dist/ee/signals/hooks/use-entity-learning-progress.d.ts +2 -0
- package/dist/ee/signals/hooks/use-entity-learning-progress.es.js +15 -0
- package/dist/ee/signals/hooks/use-entity-learning-progress.es.js.map +1 -0
- package/dist/ee/signals/hooks/use-noise-examples.cjs.js +32 -0
- package/dist/ee/signals/hooks/use-noise-examples.cjs.js.map +1 -0
- package/dist/ee/signals/hooks/use-noise-examples.d.ts +2 -0
- package/dist/ee/signals/hooks/use-noise-examples.es.js +28 -0
- package/dist/ee/signals/hooks/use-noise-examples.es.js.map +1 -0
- package/dist/ee/signals/hooks/use-noise.cjs.js +22 -0
- package/dist/ee/signals/hooks/use-noise.cjs.js.map +1 -0
- package/dist/ee/signals/hooks/use-noise.d.ts +2 -0
- package/dist/ee/signals/hooks/use-noise.es.js +18 -0
- package/dist/ee/signals/hooks/use-noise.es.js.map +1 -0
- package/dist/ee/signals/hooks/use-snapshot-playback.cjs.js +22 -0
- package/dist/ee/signals/hooks/use-snapshot-playback.cjs.js.map +1 -0
- package/dist/ee/signals/hooks/use-snapshot-playback.d.ts +2 -0
- package/dist/ee/signals/hooks/use-snapshot-playback.es.js +18 -0
- package/dist/ee/signals/hooks/use-snapshot-playback.es.js.map +1 -0
- package/dist/ee/signals/hooks/use-theme-detail.cjs.js +27 -0
- package/dist/ee/signals/hooks/use-theme-detail.cjs.js.map +1 -0
- package/dist/ee/signals/hooks/use-theme-detail.d.ts +2 -0
- package/dist/ee/signals/hooks/use-theme-detail.es.js +23 -0
- package/dist/ee/signals/hooks/use-theme-detail.es.js.map +1 -0
- package/dist/ee/signals/hooks/use-theme-entities.cjs.js +18 -0
- package/dist/ee/signals/hooks/use-theme-entities.cjs.js.map +1 -0
- package/dist/ee/signals/hooks/use-theme-entities.d.ts +2 -0
- package/dist/ee/signals/hooks/use-theme-entities.es.js +14 -0
- package/dist/ee/signals/hooks/use-theme-entities.es.js.map +1 -0
- package/dist/ee/signals/hooks/use-theme-examples.cjs.js +40 -0
- package/dist/ee/signals/hooks/use-theme-examples.cjs.js.map +1 -0
- package/dist/ee/signals/hooks/use-theme-examples.d.ts +2 -0
- package/dist/ee/signals/hooks/use-theme-examples.es.js +36 -0
- package/dist/ee/signals/hooks/use-theme-examples.es.js.map +1 -0
- package/dist/ee/signals/hooks/use-theme-flow.cjs.js +23 -0
- package/dist/ee/signals/hooks/use-theme-flow.cjs.js.map +1 -0
- package/dist/ee/signals/hooks/use-theme-flow.d.ts +2 -0
- package/dist/ee/signals/hooks/use-theme-flow.es.js +19 -0
- package/dist/ee/signals/hooks/use-theme-flow.es.js.map +1 -0
- package/dist/ee/signals/hooks/use-theme-flows.cjs.js +22 -0
- package/dist/ee/signals/hooks/use-theme-flows.cjs.js.map +1 -0
- package/dist/ee/signals/hooks/use-theme-flows.d.ts +2 -0
- package/dist/ee/signals/hooks/use-theme-flows.es.js +18 -0
- package/dist/ee/signals/hooks/use-theme-flows.es.js.map +1 -0
- package/dist/ee/signals/hooks/use-theme-history.cjs.js +20 -0
- package/dist/ee/signals/hooks/use-theme-history.cjs.js.map +1 -0
- package/dist/ee/signals/hooks/use-theme-history.d.ts +2 -0
- package/dist/ee/signals/hooks/use-theme-history.es.js +16 -0
- package/dist/ee/signals/hooks/use-theme-history.es.js.map +1 -0
- package/dist/ee/signals/hooks/use-theme-paths.cjs.js +21 -0
- package/dist/ee/signals/hooks/use-theme-paths.cjs.js.map +1 -0
- package/dist/ee/signals/hooks/use-theme-paths.d.ts +2 -0
- package/dist/ee/signals/hooks/use-theme-paths.es.js +17 -0
- package/dist/ee/signals/hooks/use-theme-paths.es.js.map +1 -0
- package/dist/ee/signals/hooks/use-theme-snapshots.cjs.js +22 -0
- package/dist/ee/signals/hooks/use-theme-snapshots.cjs.js.map +1 -0
- package/dist/ee/signals/hooks/use-theme-snapshots.d.ts +2 -0
- package/dist/ee/signals/hooks/use-theme-snapshots.es.js +18 -0
- package/dist/ee/signals/hooks/use-theme-snapshots.es.js.map +1 -0
- package/dist/ee/signals/hooks/use-trace-insight.cjs.js +21 -0
- package/dist/ee/signals/hooks/use-trace-insight.cjs.js.map +1 -0
- package/dist/ee/signals/hooks/use-trace-insight.d.ts +2 -0
- package/dist/ee/signals/hooks/use-trace-insight.es.js +17 -0
- package/dist/ee/signals/hooks/use-trace-insight.es.js.map +1 -0
- package/dist/ee/signals/hooks.cjs.js +30 -0
- package/dist/ee/signals/hooks.cjs.js.map +1 -0
- package/dist/ee/signals/hooks.d.ts +2 -0
- package/dist/ee/signals/hooks.es.js +12 -0
- package/dist/ee/signals/hooks.es.js.map +1 -0
- package/dist/ee/signals/lifeline-point.cjs.js +73 -0
- package/dist/ee/signals/lifeline-point.cjs.js.map +1 -0
- package/dist/ee/signals/lifeline-point.d.ts +2 -0
- package/dist/ee/signals/lifeline-point.es.js +69 -0
- package/dist/ee/signals/lifeline-point.es.js.map +1 -0
- package/dist/ee/signals/lifeline-row.cjs.js +118 -0
- package/dist/ee/signals/lifeline-row.cjs.js.map +1 -0
- package/dist/ee/signals/lifeline-row.d.ts +2 -0
- package/dist/ee/signals/lifeline-row.es.js +114 -0
- package/dist/ee/signals/lifeline-row.es.js.map +1 -0
- package/dist/ee/signals/noise-detail-panel.cjs.js +96 -0
- package/dist/ee/signals/noise-detail-panel.cjs.js.map +1 -0
- package/dist/ee/signals/noise-detail-panel.d.ts +2 -0
- package/dist/ee/signals/noise-detail-panel.es.js +92 -0
- package/dist/ee/signals/noise-detail-panel.es.js.map +1 -0
- package/dist/ee/signals/sankey-signals-data.cjs.js +138 -0
- package/dist/ee/signals/sankey-signals-data.cjs.js.map +1 -0
- package/dist/ee/signals/sankey-signals-data.d.ts +2 -0
- package/dist/ee/signals/sankey-signals-data.es.js +127 -0
- package/dist/ee/signals/sankey-signals-data.es.js.map +1 -0
- package/dist/ee/signals/sankey-signals.cjs.js +367 -0
- package/dist/ee/signals/sankey-signals.cjs.js.map +1 -0
- package/dist/ee/signals/sankey-signals.d.ts +2 -0
- package/dist/ee/signals/sankey-signals.es.js +363 -0
- package/dist/ee/signals/sankey-signals.es.js.map +1 -0
- package/dist/ee/signals/signal-delta-column.cjs.js +90 -0
- package/dist/ee/signals/signal-delta-column.cjs.js.map +1 -0
- package/dist/ee/signals/signal-delta-column.d.ts +2 -0
- package/dist/ee/signals/signal-delta-column.es.js +86 -0
- package/dist/ee/signals/signal-delta-column.es.js.map +1 -0
- package/dist/ee/signals/signal-formatting.cjs.js +83 -0
- package/dist/ee/signals/signal-formatting.cjs.js.map +1 -0
- package/dist/ee/signals/signal-formatting.d.ts +2 -0
- package/dist/ee/signals/signal-formatting.es.js +70 -0
- package/dist/ee/signals/signal-formatting.es.js.map +1 -0
- package/dist/ee/signals/signal-lifelines.cjs.js +69 -0
- package/dist/ee/signals/signal-lifelines.cjs.js.map +1 -0
- package/dist/ee/signals/signal-lifelines.d.ts +2 -0
- package/dist/ee/signals/signal-lifelines.es.js +65 -0
- package/dist/ee/signals/signal-lifelines.es.js.map +1 -0
- package/dist/ee/signals/signals-error-state.cjs.js +28 -0
- package/dist/ee/signals/signals-error-state.cjs.js.map +1 -0
- package/dist/ee/signals/signals-error-state.d.ts +2 -0
- package/dist/ee/signals/signals-error-state.es.js +24 -0
- package/dist/ee/signals/signals-error-state.es.js.map +1 -0
- package/dist/ee/signals/signals-loading-skeleton.cjs.js +57 -0
- package/dist/ee/signals/signals-loading-skeleton.cjs.js.map +1 -0
- package/dist/ee/signals/signals-loading-skeleton.d.ts +2 -0
- package/dist/ee/signals/signals-loading-skeleton.es.js +52 -0
- package/dist/ee/signals/signals-loading-skeleton.es.js.map +1 -0
- package/dist/ee/signals/snapshot-timeline-data.cjs.js +40 -0
- package/dist/ee/signals/snapshot-timeline-data.cjs.js.map +1 -0
- package/dist/ee/signals/snapshot-timeline-data.d.ts +2 -0
- package/dist/ee/signals/snapshot-timeline-data.es.js +34 -0
- package/dist/ee/signals/snapshot-timeline-data.es.js.map +1 -0
- package/dist/ee/signals/snapshot-timeline.cjs.js +109 -0
- package/dist/ee/signals/snapshot-timeline.cjs.js.map +1 -0
- package/dist/ee/signals/snapshot-timeline.d.ts +2 -0
- package/dist/ee/signals/snapshot-timeline.es.js +104 -0
- package/dist/ee/signals/snapshot-timeline.es.js.map +1 -0
- package/dist/ee/signals/sortable-signal-headers.cjs.js +145 -0
- package/dist/ee/signals/sortable-signal-headers.cjs.js.map +1 -0
- package/dist/ee/signals/sortable-signal-headers.d.ts +2 -0
- package/dist/ee/signals/sortable-signal-headers.es.js +141 -0
- package/dist/ee/signals/sortable-signal-headers.es.js.map +1 -0
- package/dist/ee/signals/theme-compare-data.cjs.js +46 -0
- package/dist/ee/signals/theme-compare-data.cjs.js.map +1 -0
- package/dist/ee/signals/theme-compare-data.d.ts +2 -0
- package/dist/ee/signals/theme-compare-data.es.js +41 -0
- package/dist/ee/signals/theme-compare-data.es.js.map +1 -0
- package/dist/ee/signals/theme-compare-sparkline.cjs.js +67 -0
- package/dist/ee/signals/theme-compare-sparkline.cjs.js.map +1 -0
- package/dist/ee/signals/theme-compare-sparkline.d.ts +2 -0
- package/dist/ee/signals/theme-compare-sparkline.es.js +63 -0
- package/dist/ee/signals/theme-compare-sparkline.es.js.map +1 -0
- package/dist/ee/signals/theme-compare.cjs.js +103 -0
- package/dist/ee/signals/theme-compare.cjs.js.map +1 -0
- package/dist/ee/signals/theme-compare.d.ts +2 -0
- package/dist/ee/signals/theme-compare.es.js +99 -0
- package/dist/ee/signals/theme-compare.es.js.map +1 -0
- package/dist/ee/signals/theme-detail-panel.cjs.js +171 -0
- package/dist/ee/signals/theme-detail-panel.cjs.js.map +1 -0
- package/dist/ee/signals/theme-detail-panel.d.ts +2 -0
- package/dist/ee/signals/theme-detail-panel.es.js +167 -0
- package/dist/ee/signals/theme-detail-panel.es.js.map +1 -0
- package/dist/ee/signals/theme-drilldown-data.cjs.js +115 -0
- package/dist/ee/signals/theme-drilldown-data.cjs.js.map +1 -0
- package/dist/ee/signals/theme-drilldown-data.d.ts +2 -0
- package/dist/ee/signals/theme-drilldown-data.es.js +109 -0
- package/dist/ee/signals/theme-drilldown-data.es.js.map +1 -0
- package/dist/ee/signals/theme-filter-banner.cjs.js +64 -0
- package/dist/ee/signals/theme-filter-banner.cjs.js.map +1 -0
- package/dist/ee/signals/theme-filter-banner.d.ts +2 -0
- package/dist/ee/signals/theme-filter-banner.es.js +60 -0
- package/dist/ee/signals/theme-filter-banner.es.js.map +1 -0
- package/dist/ee/signals/theme-lifelines-data.cjs.js +62 -0
- package/dist/ee/signals/theme-lifelines-data.cjs.js.map +1 -0
- package/dist/ee/signals/theme-lifelines-data.d.ts +2 -0
- package/dist/ee/signals/theme-lifelines-data.es.js +56 -0
- package/dist/ee/signals/theme-lifelines-data.es.js.map +1 -0
- package/dist/ee/signals/theme-lifelines.cjs.js +75 -0
- package/dist/ee/signals/theme-lifelines.cjs.js.map +1 -0
- package/dist/ee/signals/theme-lifelines.d.ts +2 -0
- package/dist/ee/signals/theme-lifelines.es.js +71 -0
- package/dist/ee/signals/theme-lifelines.es.js.map +1 -0
- package/dist/ee/signals/theme-trend-chart.cjs.js +83 -0
- package/dist/ee/signals/theme-trend-chart.cjs.js.map +1 -0
- package/dist/ee/signals/theme-trend-chart.d.ts +2 -0
- package/dist/ee/signals/theme-trend-chart.es.js +79 -0
- package/dist/ee/signals/theme-trend-chart.es.js.map +1 -0
- package/dist/ee/signals/theme-trend.cjs.js +27 -0
- package/dist/ee/signals/theme-trend.cjs.js.map +1 -0
- package/dist/ee/signals/theme-trend.d.ts +2 -0
- package/dist/ee/signals/theme-trend.es.js +22 -0
- package/dist/ee/signals/theme-trend.es.js.map +1 -0
- package/dist/ee/signals/trace-insight-view.cjs.js +89 -0
- package/dist/ee/signals/trace-insight-view.cjs.js.map +1 -0
- package/dist/ee/signals/trace-insight-view.d.ts +2 -0
- package/dist/ee/signals/trace-insight-view.es.js +85 -0
- package/dist/ee/signals/trace-insight-view.es.js.map +1 -0
- package/dist/ee/signals/trace-intelligence-context.cjs.js +24 -0
- package/dist/ee/signals/trace-intelligence-context.cjs.js.map +1 -0
- package/dist/ee/signals/trace-intelligence-context.d.ts +2 -0
- package/dist/ee/signals/trace-intelligence-context.es.js +19 -0
- package/dist/ee/signals/trace-intelligence-context.es.js.map +1 -0
- package/dist/ee/signals/trace-intelligence-explainer.cjs.js +45 -0
- package/dist/ee/signals/trace-intelligence-explainer.cjs.js.map +1 -0
- package/dist/ee/signals/trace-intelligence-explainer.d.ts +2 -0
- package/dist/ee/signals/trace-intelligence-explainer.es.js +41 -0
- package/dist/ee/signals/trace-intelligence-explainer.es.js.map +1 -0
- package/dist/ee/signals/trace-intelligence-provider.cjs.js +19 -0
- package/dist/ee/signals/trace-intelligence-provider.cjs.js.map +1 -0
- package/dist/ee/signals/trace-intelligence-provider.d.ts +2 -0
- package/dist/ee/signals/trace-intelligence-provider.es.js +15 -0
- package/dist/ee/signals/trace-intelligence-provider.es.js.map +1 -0
- package/dist/ee/signals/types.cjs.js +3 -0
- package/dist/ee/signals/types.cjs.js.map +1 -0
- package/dist/ee/signals/types.d.ts +2 -0
- package/dist/ee/signals/types.es.js +2 -0
- package/dist/ee/signals/types.es.js.map +1 -0
- package/dist/ee/signals/use-trace-intelligence.cjs.js +13 -0
- package/dist/ee/signals/use-trace-intelligence.cjs.js.map +1 -0
- package/dist/ee/signals/use-trace-intelligence.d.ts +2 -0
- package/dist/ee/signals/use-trace-intelligence.es.js +9 -0
- package/dist/ee/signals/use-trace-intelligence.es.js.map +1 -0
- package/dist/ee/signals/view-mode-tab.cjs.js +18 -0
- package/dist/ee/signals/view-mode-tab.cjs.js.map +1 -0
- package/dist/ee/signals/view-mode-tab.d.ts +2 -0
- package/dist/ee/signals/view-mode-tab.es.js +14 -0
- package/dist/ee/signals/view-mode-tab.es.js.map +1 -0
- package/dist/ee/signals.cjs.js +38 -0
- package/dist/ee/signals.cjs.js.map +1 -1
- package/dist/ee/signals.es.js +18 -0
- package/dist/ee/signals.es.js.map +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/{hover-card-crVofiZO.js → hover-card-Bs845QbV.js} +2 -2
- package/dist/{hover-card-crVofiZO.js.map → hover-card-Bs845QbV.js.map} +1 -1
- package/dist/{hover-card-Bx258om1.cjs → hover-card-Cd9QK50X.cjs} +2 -2
- package/dist/{hover-card-Bx258om1.cjs.map → hover-card-Cd9QK50X.cjs.map} +1 -1
- package/dist/{input-group-CH72YUVL.cjs → input-group-BTaw3Ycd.cjs} +2 -2
- package/dist/{input-group-CH72YUVL.cjs.map → input-group-BTaw3Ycd.cjs.map} +1 -1
- package/dist/{input-group-Dzs-ai0n.js → input-group-CWT_IwX0.js} +2 -2
- package/dist/{input-group-Dzs-ai0n.js.map → input-group-CWT_IwX0.js.map} +1 -1
- package/dist/{markdown-renderer-Bi2fWeoF.js → markdown-renderer-DszxuuNM.js} +36 -18
- package/dist/markdown-renderer-DszxuuNM.js.map +1 -0
- package/dist/{markdown-renderer-DwfNrhEH.cjs → markdown-renderer-g8xNLOc0.cjs} +36 -18
- package/dist/markdown-renderer-g8xNLOc0.cjs.map +1 -0
- package/dist/{message-scroller-BmzjZZNs.cjs → message-scroller-BssU0EKT.cjs} +89 -16
- package/dist/message-scroller-BssU0EKT.cjs.map +1 -0
- package/dist/{message-scroller-D5O7sUS5.js → message-scroller-DlVS0FW7.js} +89 -16
- package/dist/message-scroller-DlVS0FW7.js.map +1 -0
- package/dist/{property-filter-applied-DI4w1ACS.js → property-filter-applied-C2teL4uw.js} +3 -3
- package/dist/{property-filter-applied-DI4w1ACS.js.map → property-filter-applied-C2teL4uw.js.map} +1 -1
- package/dist/{property-filter-applied-BhxbHAN8.cjs → property-filter-applied-ChK5XtsC.cjs} +3 -3
- package/dist/{property-filter-applied-BhxbHAN8.cjs.map → property-filter-applied-ChK5XtsC.cjs.map} +1 -1
- package/dist/resize/panel-drawer.cjs.js +1 -1
- package/dist/resize/panel-drawer.es.js +1 -1
- package/dist/sankey-chart-Bp-DrL1q.cjs +925 -0
- package/dist/sankey-chart-Bp-DrL1q.cjs.map +1 -0
- package/dist/sankey-chart-zhW_F0Rm.js +915 -0
- package/dist/sankey-chart-zhW_F0Rm.js.map +1 -0
- package/dist/{search-field-block-DCnFZzRK.js → search-field-block-D0PBxCxK.js} +2 -2
- package/dist/{search-field-block-DCnFZzRK.js.map → search-field-block-D0PBxCxK.js.map} +1 -1
- package/dist/{search-field-block-D6TdrHZX.cjs → search-field-block-D4vuLoZI.cjs} +2 -2
- package/dist/{search-field-block-D6TdrHZX.cjs.map → search-field-block-D4vuLoZI.cjs.map} +1 -1
- package/dist/{select-Beo8qQ0e.js → select-B_E0ADD5.js} +2 -2
- package/dist/{select-Beo8qQ0e.js.map → select-B_E0ADD5.js.map} +1 -1
- package/dist/{select-B6ce20XX.cjs → select-OAXqZLkC.cjs} +2 -2
- package/dist/{select-B6ce20XX.cjs.map → select-OAXqZLkC.cjs.map} +1 -1
- package/dist/{select-field-block-svlHplxW.cjs → select-field-block-BN9oU5B5.cjs} +2 -2
- package/dist/{select-field-block-svlHplxW.cjs.map → select-field-block-BN9oU5B5.cjs.map} +1 -1
- package/dist/{select-field-block-DXw3tD0y.js → select-field-block-D1Na8gZW.js} +2 -2
- package/dist/{select-field-block-DXw3tD0y.js.map → select-field-block-D1Na8gZW.js.map} +1 -1
- package/dist/src/domains/traces/hooks/use-entity-names.d.ts +2 -1
- package/dist/src/ds/components/ChatShell/chat-shell.d.ts +9 -6
- package/dist/src/ds/components/MainSidebar/main-sidebar-nav-item-classes.d.ts +13 -2
- package/dist/src/ds/components/MainSidebar/main-sidebar-nav-link.d.ts +2 -2
- package/dist/src/ds/components/MarkdownRenderer/markdown-renderer.d.ts +3 -1
- package/dist/src/ds/components/SankeyChart/sankey-chart.d.ts +7 -2
- package/dist/src/ds/components/SankeyChart/sankey-portal-tooltip.d.ts +8 -0
- package/dist/src/ds/components/SankeyChart/use-sankey-geometry-transition.d.ts +11 -0
- package/dist/src/ds/components/SankeyChart/use-sankey-hover-tooltip.d.ts +15 -0
- package/dist/src/ds/components/ThreadRail/thread-rail-turns.d.ts +2 -0
- package/dist/src/ee/signals/entity-learning-api.d.ts +13 -0
- package/dist/src/ee/signals/examples-pager.d.ts +7 -0
- package/dist/src/ee/signals/flow-card.d.ts +14 -0
- package/dist/src/ee/signals/hooks/index.d.ts +11 -0
- package/dist/src/ee/signals/hooks/theme-query-guards.d.ts +3 -0
- package/dist/src/ee/signals/hooks/use-entity-learning-progress.d.ts +1 -0
- package/dist/src/ee/signals/hooks/use-noise-examples.d.ts +2 -0
- package/dist/src/ee/signals/hooks/use-noise.d.ts +2 -0
- package/dist/src/ee/signals/hooks/use-snapshot-playback.d.ts +9 -0
- package/dist/src/ee/signals/hooks/use-theme-detail.d.ts +2 -0
- package/dist/src/ee/signals/hooks/use-theme-entities.d.ts +1 -0
- package/dist/src/ee/signals/hooks/use-theme-examples.d.ts +2 -0
- package/dist/src/ee/signals/hooks/use-theme-flow.d.ts +2 -0
- package/dist/src/ee/signals/hooks/use-theme-flows.d.ts +2 -0
- package/dist/src/ee/signals/hooks/use-theme-history.d.ts +2 -0
- package/dist/src/ee/signals/hooks/use-theme-paths.d.ts +2 -0
- package/dist/src/ee/signals/hooks/use-theme-snapshots.d.ts +2 -0
- package/dist/src/ee/signals/hooks/use-trace-insight.d.ts +1 -0
- package/dist/src/ee/signals/index.d.ts +9 -0
- package/dist/src/ee/signals/lifeline-point.d.ts +8 -0
- package/dist/src/ee/signals/lifeline-row.d.ts +11 -0
- package/dist/src/ee/signals/noise-detail-panel.d.ts +10 -0
- package/dist/src/ee/signals/sankey-signals-data.d.ts +41 -0
- package/dist/src/ee/signals/sankey-signals.d.ts +12 -0
- package/dist/src/ee/signals/signal-delta-column.d.ts +12 -0
- package/dist/src/ee/signals/signal-formatting.d.ts +15 -0
- package/dist/src/ee/signals/signal-lifelines.d.ts +9 -0
- package/dist/src/ee/signals/signals-error-state.d.ts +5 -0
- package/dist/src/ee/signals/signals-loading-skeleton.d.ts +2 -0
- package/dist/src/ee/signals/snapshot-timeline-data.d.ts +12 -0
- package/dist/src/ee/signals/snapshot-timeline.d.ts +25 -0
- package/dist/src/ee/signals/sortable-signal-headers.d.ts +6 -0
- package/dist/src/ee/signals/theme-compare-data.d.ts +24 -0
- package/dist/src/ee/signals/theme-compare-sparkline.d.ts +5 -0
- package/dist/src/ee/signals/theme-compare.d.ts +17 -0
- package/dist/src/ee/signals/theme-detail-panel.d.ts +11 -0
- package/dist/src/ee/signals/theme-drilldown-data.d.ts +10 -0
- package/dist/src/ee/signals/theme-filter-banner.d.ts +8 -0
- package/dist/src/ee/signals/theme-lifelines-data.d.ts +35 -0
- package/dist/src/ee/signals/theme-lifelines.d.ts +17 -0
- package/dist/src/ee/signals/theme-trend-chart.d.ts +6 -0
- package/dist/src/ee/signals/theme-trend.d.ts +17 -0
- package/dist/src/ee/signals/trace-insight-view.d.ts +6 -0
- package/dist/src/ee/signals/trace-intelligence-context.d.ts +10 -0
- package/dist/src/ee/signals/trace-intelligence-explainer.d.ts +2 -0
- package/dist/src/ee/signals/trace-intelligence-provider.d.ts +11 -0
- package/dist/src/ee/signals/types.d.ts +1 -0
- package/dist/src/ee/signals/use-trace-intelligence.d.ts +1 -0
- package/dist/src/ee/signals/view-mode-tab.d.ts +6 -0
- package/dist/src/test/msw-server.d.ts +1 -0
- package/dist/src/test/vitest-setup.d.ts +1 -0
- package/dist/style.css +306 -18
- package/dist/tabs-root-BBPou4QC.js +69 -0
- package/dist/tabs-root-BBPou4QC.js.map +1 -0
- package/dist/tabs-root-VtBc6K2q.cjs +72 -0
- package/dist/tabs-root-VtBc6K2q.cjs.map +1 -0
- package/dist/{tabs-tab-BkUCE-4E.cjs → tabs-tab-Cq4YR31P.cjs} +2 -67
- package/dist/tabs-tab-Cq4YR31P.cjs.map +1 -0
- package/dist/{tabs-tab-DDGltcUc.js → tabs-tab-D5JTAehi.js} +6 -69
- package/dist/tabs-tab-D5JTAehi.js.map +1 -0
- package/dist/{time-picker-mLzcoQMO.js → time-picker-CkqREdQB.js} +2 -2
- package/dist/{time-picker-mLzcoQMO.js.map → time-picker-CkqREdQB.js.map} +1 -1
- package/dist/{time-picker-BOQtPoyD.cjs → time-picker-Dy2oyq8P.cjs} +2 -2
- package/dist/{time-picker-BOQtPoyD.cjs.map → time-picker-Dy2oyq8P.cjs.map} +1 -1
- package/dist/{traces-data-list-DtuaCDES.js → traces-data-list-B3wMvCfk.js} +2 -2
- package/dist/{traces-data-list-DtuaCDES.js.map → traces-data-list-B3wMvCfk.js.map} +1 -1
- package/dist/{traces-data-list-vsvvvEiP.cjs → traces-data-list-pTNo_zbS.cjs} +2 -2
- package/dist/{traces-data-list-vsvvvEiP.cjs.map → traces-data-list-pTNo_zbS.cjs.map} +1 -1
- package/package.json +8 -8
- package/theme.css +6 -8
- package/dist/Button-Bm94fEF2.cjs.map +0 -1
- package/dist/Button-Bx2lFdqb.js.map +0 -1
- package/dist/dropdown-menu-DEFygDZI.js.map +0 -1
- package/dist/dropdown-menu-ppWztidX.cjs.map +0 -1
- package/dist/markdown-renderer-Bi2fWeoF.js.map +0 -1
- package/dist/markdown-renderer-DwfNrhEH.cjs.map +0 -1
- package/dist/message-scroller-BmzjZZNs.cjs.map +0 -1
- package/dist/message-scroller-D5O7sUS5.js.map +0 -1
- package/dist/tabs-tab-BkUCE-4E.cjs.map +0 -1
- package/dist/tabs-tab-DDGltcUc.js.map +0 -1
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { useThemeFlows } from './hooks/use-theme-flows.es.js';
|
|
4
|
+
import { snapshotSummaryLabel } from './sankey-signals-data.es.js';
|
|
5
|
+
import { SignalDeltaColumn } from './signal-delta-column.es.js';
|
|
6
|
+
import { SignalsFrameLoadingSkeleton } from './signals-loading-skeleton.es.js';
|
|
7
|
+
import { TimelineTrack } from './snapshot-timeline.es.js';
|
|
8
|
+
import { timelineTickPositions } from './snapshot-timeline-data.es.js';
|
|
9
|
+
|
|
10
|
+
function ThemeCompare({
|
|
11
|
+
entityId,
|
|
12
|
+
entityType,
|
|
13
|
+
signalNames,
|
|
14
|
+
snapshots,
|
|
15
|
+
totalSnapshots,
|
|
16
|
+
onThemeSelect
|
|
17
|
+
}) {
|
|
18
|
+
const [pointIndexes, setPointIndexes] = useState();
|
|
19
|
+
const [grabbedPoint, setGrabbedPoint] = useState();
|
|
20
|
+
const lastIndex = snapshots.length - 1;
|
|
21
|
+
const points = [
|
|
22
|
+
Math.min(pointIndexes?.[0] ?? 0, lastIndex),
|
|
23
|
+
Math.min(pointIndexes?.[1] ?? lastIndex, lastIndex)
|
|
24
|
+
];
|
|
25
|
+
const fromIndex = Math.min(points[0], points[1]);
|
|
26
|
+
const toIndex = Math.max(points[0], points[1]);
|
|
27
|
+
const flowQueries = useThemeFlows(
|
|
28
|
+
entityId,
|
|
29
|
+
entityType,
|
|
30
|
+
signalNames,
|
|
31
|
+
snapshots.map((snapshot) => snapshot.snapshotId)
|
|
32
|
+
);
|
|
33
|
+
const flows = flowQueries.map((query) => query.data);
|
|
34
|
+
const fromFlow = flows[fromIndex];
|
|
35
|
+
const toFlow = flows[toIndex];
|
|
36
|
+
const positions = timelineTickPositions(snapshots);
|
|
37
|
+
const fromSnapshot = snapshots[fromIndex];
|
|
38
|
+
const toSnapshot = snapshots[toIndex];
|
|
39
|
+
if (!fromSnapshot || !toSnapshot) return null;
|
|
40
|
+
const handleTickSelect = (index) => {
|
|
41
|
+
if (grabbedPoint !== void 0) {
|
|
42
|
+
setPointIndexes(grabbedPoint === 0 ? [index, points[1]] : [points[0], index]);
|
|
43
|
+
setGrabbedPoint(void 0);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const pointAtIndex = points[0] === index ? 0 : points[1] === index ? 1 : void 0;
|
|
47
|
+
if (pointAtIndex !== void 0) {
|
|
48
|
+
setGrabbedPoint(pointAtIndex);
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const selectedPosition = positions[index];
|
|
52
|
+
const firstPointPosition = positions[points[0]];
|
|
53
|
+
const secondPointPosition = positions[points[1]];
|
|
54
|
+
if (selectedPosition === void 0 || firstPointPosition === void 0 || secondPointPosition === void 0) return;
|
|
55
|
+
const distanceToFirst = Math.abs(selectedPosition - firstPointPosition);
|
|
56
|
+
const distanceToSecond = Math.abs(selectedPosition - secondPointPosition);
|
|
57
|
+
setPointIndexes(distanceToFirst <= distanceToSecond ? [index, points[1]] : [points[0], index]);
|
|
58
|
+
};
|
|
59
|
+
const markers = /* @__PURE__ */ new Map([
|
|
60
|
+
[points[0], "compare-point"],
|
|
61
|
+
[points[1], "compare-point"]
|
|
62
|
+
]);
|
|
63
|
+
const grabbedIndex = grabbedPoint === void 0 ? void 0 : points[grabbedPoint];
|
|
64
|
+
return /* @__PURE__ */ jsxs("section", { "aria-label": "Snapshot comparison", className: "space-y-4", children: [
|
|
65
|
+
/* @__PURE__ */ jsx("div", { className: "flex flex-wrap items-center gap-3 px-3 py-2.5 sm:px-4", children: /* @__PURE__ */ jsx(
|
|
66
|
+
TimelineTrack,
|
|
67
|
+
{
|
|
68
|
+
snapshots,
|
|
69
|
+
totalCount: totalSnapshots,
|
|
70
|
+
markers,
|
|
71
|
+
grabbedIndex,
|
|
72
|
+
onTickSelect: handleTickSelect
|
|
73
|
+
}
|
|
74
|
+
) }),
|
|
75
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-x-3 gap-y-1.5", children: [
|
|
76
|
+
/* @__PURE__ */ jsx("p", { className: "border-border1 text-neutral4 rounded-md border px-2 py-1 font-mono text-xs tabular-nums", children: snapshotSummaryLabel(fromSnapshot, flows[fromIndex]) }),
|
|
77
|
+
/* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "text-neutral3 text-xs", children: "→" }),
|
|
78
|
+
/* @__PURE__ */ jsx("p", { className: "border-border1 text-neutral4 rounded-md border px-2 py-1 font-mono text-xs tabular-nums", children: snapshotSummaryLabel(toSnapshot, flows[toIndex]) }),
|
|
79
|
+
/* @__PURE__ */ jsx("p", { className: "text-neutral3 text-xs", children: grabbedPoint === void 0 ? "Click a landmark to move the nearest point · click a point to grab it." : "Point grabbed — click a landmark to place it." })
|
|
80
|
+
] }),
|
|
81
|
+
fromIndex === toIndex ? /* @__PURE__ */ jsx("p", { className: "border-border1 bg-surface2 text-neutral3 rounded-lg border p-6 text-sm", children: "Pick two different landmarks on the timeline to compare them." }) : !fromFlow || !toFlow ? /* @__PURE__ */ jsx(SignalsFrameLoadingSkeleton, {}) : /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 xl:grid-cols-4", children: signalNames.map((signalName) => /* @__PURE__ */ jsx(
|
|
82
|
+
SignalDeltaColumn,
|
|
83
|
+
{
|
|
84
|
+
signalName,
|
|
85
|
+
fromFlow,
|
|
86
|
+
toFlow,
|
|
87
|
+
flows,
|
|
88
|
+
positions,
|
|
89
|
+
fromIndex,
|
|
90
|
+
toIndex,
|
|
91
|
+
onThemeSelect
|
|
92
|
+
},
|
|
93
|
+
signalName
|
|
94
|
+
)) })
|
|
95
|
+
] });
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export { ThemeCompare };
|
|
99
|
+
//# sourceMappingURL=theme-compare.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme-compare.es.js","sources":["../../../src/ee/signals/theme-compare.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { useThemeFlows } from './hooks/use-theme-flows';\nimport { snapshotSummaryLabel } from './sankey-signals-data';\nimport { SignalDeltaColumn } from './signal-delta-column';\nimport { SignalsFrameLoadingSkeleton } from './signals-loading-skeleton';\nimport { TimelineTrack } from './snapshot-timeline';\nimport type { TimelineMarkerKind } from './snapshot-timeline';\nimport { timelineTickPositions } from './snapshot-timeline-data';\nimport type { ThemeSelection } from './theme-drilldown-data';\nimport type { ThemeSnapshot, TraceSignalName } from './types';\n\n/**\n * Compare mode: two interchangeable points on the shared time axis show how\n * each signal's theme mix moved between them (always read earlier → later),\n * with per-theme sparklines across every landmark in range. Clicking an\n * unmarked landmark moves the nearest point; clicking a marked landmark grabs\n * that point so the next click moves it specifically.\n */\nexport function ThemeCompare({\n entityId,\n entityType,\n signalNames,\n snapshots,\n totalSnapshots,\n onThemeSelect,\n}: {\n entityId: string;\n entityType: string;\n signalNames: TraceSignalName[];\n snapshots: ThemeSnapshot[];\n totalSnapshots: number;\n onThemeSelect: (selection: ThemeSelection, snapshotIndex: number) => void;\n}) {\n const [pointIndexes, setPointIndexes] = useState<[number, number]>();\n const [grabbedPoint, setGrabbedPoint] = useState<0 | 1>();\n const lastIndex = snapshots.length - 1;\n const points: [number, number] = [\n Math.min(pointIndexes?.[0] ?? 0, lastIndex),\n Math.min(pointIndexes?.[1] ?? lastIndex, lastIndex),\n ];\n // Compare always reads earlier → later regardless of which point moved last.\n const fromIndex = Math.min(points[0], points[1]);\n const toIndex = Math.max(points[0], points[1]);\n const flowQueries = useThemeFlows(\n entityId,\n entityType,\n signalNames,\n snapshots.map(snapshot => snapshot.snapshotId),\n );\n const flows = flowQueries.map(query => query.data);\n const fromFlow = flows[fromIndex];\n const toFlow = flows[toIndex];\n const positions = timelineTickPositions(snapshots);\n const fromSnapshot = snapshots[fromIndex];\n const toSnapshot = snapshots[toIndex];\n\n if (!fromSnapshot || !toSnapshot) return null;\n\n // The two points are interchangeable: an unmarked tick moves whichever\n // point is nearest on the track; a marked tick grabs that point so the next\n // click moves it specifically (covers moving a point past the other).\n const handleTickSelect = (index: number) => {\n if (grabbedPoint !== undefined) {\n setPointIndexes(grabbedPoint === 0 ? [index, points[1]] : [points[0], index]);\n setGrabbedPoint(undefined);\n return;\n }\n const pointAtIndex = points[0] === index ? 0 : points[1] === index ? 1 : undefined;\n if (pointAtIndex !== undefined) {\n setGrabbedPoint(pointAtIndex);\n return;\n }\n const selectedPosition = positions[index];\n const firstPointPosition = positions[points[0]];\n const secondPointPosition = positions[points[1]];\n if (selectedPosition === undefined || firstPointPosition === undefined || secondPointPosition === undefined) return;\n\n const distanceToFirst = Math.abs(selectedPosition - firstPointPosition);\n const distanceToSecond = Math.abs(selectedPosition - secondPointPosition);\n setPointIndexes(distanceToFirst <= distanceToSecond ? [index, points[1]] : [points[0], index]);\n };\n\n const markers = new Map<number, TimelineMarkerKind>([\n [points[0], 'compare-point'],\n [points[1], 'compare-point'],\n ]);\n const grabbedIndex = grabbedPoint === undefined ? undefined : points[grabbedPoint];\n\n return (\n <section aria-label=\"Snapshot comparison\" className=\"space-y-4\">\n <div className=\"flex flex-wrap items-center gap-3 px-3 py-2.5 sm:px-4\">\n <TimelineTrack\n snapshots={snapshots}\n totalCount={totalSnapshots}\n markers={markers}\n grabbedIndex={grabbedIndex}\n onTickSelect={handleTickSelect}\n />\n </div>\n <div className=\"flex flex-wrap items-center gap-x-3 gap-y-1.5\">\n <p className=\"border-border1 text-neutral4 rounded-md border px-2 py-1 font-mono text-xs tabular-nums\">\n {snapshotSummaryLabel(fromSnapshot, flows[fromIndex])}\n </p>\n <span aria-hidden=\"true\" className=\"text-neutral3 text-xs\">\n →\n </span>\n <p className=\"border-border1 text-neutral4 rounded-md border px-2 py-1 font-mono text-xs tabular-nums\">\n {snapshotSummaryLabel(toSnapshot, flows[toIndex])}\n </p>\n <p className=\"text-neutral3 text-xs\">\n {grabbedPoint === undefined\n ? 'Click a landmark to move the nearest point · click a point to grab it.'\n : 'Point grabbed — click a landmark to place it.'}\n </p>\n </div>\n {fromIndex === toIndex ? (\n <p className=\"border-border1 bg-surface2 text-neutral3 rounded-lg border p-6 text-sm\">\n Pick two different landmarks on the timeline to compare them.\n </p>\n ) : !fromFlow || !toFlow ? (\n <SignalsFrameLoadingSkeleton />\n ) : (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 xl:grid-cols-4\">\n {signalNames.map(signalName => (\n <SignalDeltaColumn\n key={signalName}\n signalName={signalName}\n fromFlow={fromFlow}\n toFlow={toFlow}\n flows={flows}\n positions={positions}\n fromIndex={fromIndex}\n toIndex={toIndex}\n onThemeSelect={onThemeSelect}\n />\n ))}\n </div>\n )}\n </section>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
|
+
|
|
5
|
+
const jsxRuntime = require('react/jsx-runtime');
|
|
6
|
+
const React = require('react');
|
|
7
|
+
const ee_signals_examplesPager = require('./examples-pager.cjs.js');
|
|
8
|
+
require('@tanstack/react-query');
|
|
9
|
+
require('./trace-intelligence-context.cjs.js');
|
|
10
|
+
const ee_signals_hooks_useThemeDetail = require('./hooks/use-theme-detail.cjs.js');
|
|
11
|
+
const ee_signals_hooks_useThemeExamples = require('./hooks/use-theme-examples.cjs.js');
|
|
12
|
+
const ee_signals_hooks_useThemeHistory = require('./hooks/use-theme-history.cjs.js');
|
|
13
|
+
const ee_signals_signalColors = require('./signal-colors.cjs.js');
|
|
14
|
+
const ee_signals_signalFormatting = require('./signal-formatting.cjs.js');
|
|
15
|
+
const ee_signals_themeTrend = require('./theme-trend.cjs.js');
|
|
16
|
+
const ee_signals_themeTrendChart = require('./theme-trend-chart.cjs.js');
|
|
17
|
+
const ee_signals_traceInsightView = require('./trace-insight-view.cjs.js');
|
|
18
|
+
const drawer = require('../../drawer-CNnvBMfD.cjs');
|
|
19
|
+
const sankeyColor = require('../../sankeyColor-DONd5cg9.cjs');
|
|
20
|
+
const tooltip = require('../../tooltip-CLz5PtEE.cjs');
|
|
21
|
+
|
|
22
|
+
function ThemeDetailPanel({
|
|
23
|
+
entityId,
|
|
24
|
+
entityType,
|
|
25
|
+
snapshotId,
|
|
26
|
+
snapshotTotal,
|
|
27
|
+
selection,
|
|
28
|
+
onClose
|
|
29
|
+
}) {
|
|
30
|
+
const examplesContextKey = `${snapshotId}:${selection?.signalName ?? ""}:${selection?.themeId ?? ""}`;
|
|
31
|
+
const [examplesPage, setExamplesPage] = React.useState(() => ({ contextKey: examplesContextKey, offset: 0 }));
|
|
32
|
+
const examplesOffset = examplesPage.contextKey === examplesContextKey ? examplesPage.offset : 0;
|
|
33
|
+
const [insightTraceId, setInsightTraceId] = React.useState();
|
|
34
|
+
const detailQuery = ee_signals_hooks_useThemeDetail.useThemeDetail(
|
|
35
|
+
entityId,
|
|
36
|
+
entityType,
|
|
37
|
+
selection?.signalName ?? "goal",
|
|
38
|
+
snapshotId,
|
|
39
|
+
selection?.themeId
|
|
40
|
+
);
|
|
41
|
+
const examplesQuery = ee_signals_hooks_useThemeExamples.useThemeExamples(
|
|
42
|
+
entityId,
|
|
43
|
+
entityType,
|
|
44
|
+
selection?.signalName ?? "goal",
|
|
45
|
+
snapshotId,
|
|
46
|
+
selection?.themeId,
|
|
47
|
+
ee_signals_examplesPager.EXAMPLES_PAGE_SIZE,
|
|
48
|
+
examplesOffset
|
|
49
|
+
);
|
|
50
|
+
const historyQuery = ee_signals_hooks_useThemeHistory.useThemeHistory(
|
|
51
|
+
entityId,
|
|
52
|
+
entityType,
|
|
53
|
+
selection?.signalName ?? "goal",
|
|
54
|
+
snapshotTotal > 1 ? selection?.themeId : void 0
|
|
55
|
+
);
|
|
56
|
+
const title = detailQuery.data?.theme?.label ?? selection?.label ?? "Theme details";
|
|
57
|
+
const signalName = selection?.signalName;
|
|
58
|
+
const historyPoints = historyQuery.data ? ee_signals_themeTrend.chronologicalHistoryPoints(historyQuery.data.points) : [];
|
|
59
|
+
const oldestHistoryPoint = historyPoints[0];
|
|
60
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
61
|
+
drawer.Drawer,
|
|
62
|
+
{
|
|
63
|
+
onOpenChange: (open) => {
|
|
64
|
+
if (!open) {
|
|
65
|
+
setExamplesPage({ contextKey: "", offset: 0 });
|
|
66
|
+
setInsightTraceId(void 0);
|
|
67
|
+
onClose();
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
open: selection !== void 0,
|
|
71
|
+
overlay: "none",
|
|
72
|
+
side: "right",
|
|
73
|
+
variant: "floating",
|
|
74
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(drawer.DrawerContent, { children: [
|
|
75
|
+
/* @__PURE__ */ jsxRuntime.jsxs(drawer.DrawerHeader, { className: "border-border1 border-b", children: [
|
|
76
|
+
signalName !== void 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
77
|
+
"span",
|
|
78
|
+
{
|
|
79
|
+
className: "font-mono text-xs font-semibold tracking-widest",
|
|
80
|
+
style: { color: sankeyColor.nodeColor(ee_signals_signalColors.getSignalHue(signalName)) },
|
|
81
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(tooltip.Tooltip, { children: [
|
|
82
|
+
/* @__PURE__ */ jsxRuntime.jsx(tooltip.TooltipTrigger, { className: "cursor-default uppercase", children: signalName }),
|
|
83
|
+
/* @__PURE__ */ jsxRuntime.jsx(tooltip.TooltipContent, { children: ee_signals_signalFormatting.SIGNAL_DESCRIPTIONS[signalName] })
|
|
84
|
+
] })
|
|
85
|
+
}
|
|
86
|
+
),
|
|
87
|
+
/* @__PURE__ */ jsxRuntime.jsx(drawer.DrawerTitle, { children: title }),
|
|
88
|
+
/* @__PURE__ */ jsxRuntime.jsxs(drawer.DrawerDescription, { className: "sr-only", children: [
|
|
89
|
+
"Details for the ",
|
|
90
|
+
signalName ?? "selected",
|
|
91
|
+
" theme ",
|
|
92
|
+
title
|
|
93
|
+
] })
|
|
94
|
+
] }),
|
|
95
|
+
/* @__PURE__ */ jsxRuntime.jsxs(drawer.DrawerBody, { className: "grid content-start gap-6 overflow-y-auto p-6", children: [
|
|
96
|
+
insightTraceId !== void 0 && /* @__PURE__ */ jsxRuntime.jsx(ee_signals_traceInsightView.TraceInsightView, { traceId: insightTraceId, onBack: () => setInsightTraceId(void 0) }),
|
|
97
|
+
insightTraceId === void 0 && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
98
|
+
detailQuery.isPending && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-neutral3 text-sm", children: "Loading theme details…" }),
|
|
99
|
+
detailQuery.isError && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-red-500", children: "Unable to load theme details." }),
|
|
100
|
+
detailQuery.data && !detailQuery.data.theme && /* @__PURE__ */ jsxRuntime.jsxs("section", { children: [
|
|
101
|
+
/* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-neutral6 text-sm font-semibold", children: "Not present in this snapshot" }),
|
|
102
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-neutral3 mt-2 text-sm", children: "This theme has no data in the selected snapshot." })
|
|
103
|
+
] }),
|
|
104
|
+
detailQuery.data?.theme && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
105
|
+
/* @__PURE__ */ jsxRuntime.jsxs("section", { "aria-labelledby": "theme-summary-heading", children: [
|
|
106
|
+
/* @__PURE__ */ jsxRuntime.jsx("h2", { id: "theme-summary-heading", className: "text-neutral3 font-mono text-xs tracking-wider uppercase", children: "Summary" }),
|
|
107
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-neutral5 mt-3 text-sm", children: detailQuery.data.theme.description ?? "No description available." }),
|
|
108
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-neutral5 mt-3 font-mono text-sm tabular-nums", children: ee_signals_signalFormatting.shareSentence(detailQuery.data.theme.traceCount, detailQuery.data.theme.coverage) })
|
|
109
|
+
] }),
|
|
110
|
+
/* @__PURE__ */ jsxRuntime.jsxs("section", { "aria-labelledby": "theme-examples-heading", children: [
|
|
111
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
112
|
+
"h2",
|
|
113
|
+
{
|
|
114
|
+
id: "theme-examples-heading",
|
|
115
|
+
className: "text-neutral3 font-mono text-xs tracking-wider uppercase",
|
|
116
|
+
children: "Examples"
|
|
117
|
+
}
|
|
118
|
+
),
|
|
119
|
+
examplesQuery.isPending && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-neutral3 mt-3 text-sm", children: "Loading examples…" }),
|
|
120
|
+
examplesQuery.isError && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-3 text-sm text-red-500", children: "Unable to load examples." }),
|
|
121
|
+
examplesQuery.data && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
122
|
+
examplesQuery.data.examples.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-neutral3 mt-3 text-sm", children: "No examples in this snapshot." }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "mt-3 space-y-3", children: examplesQuery.data.examples.map((example) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
123
|
+
"button",
|
|
124
|
+
{
|
|
125
|
+
type: "button",
|
|
126
|
+
"aria-label": `View trace insight for ${example.signalText}`,
|
|
127
|
+
className: "border-border1 bg-surface3 text-neutral5 hover:bg-surface5 w-full cursor-pointer rounded-md border p-3 text-left text-sm",
|
|
128
|
+
onClick: () => setInsightTraceId(example.traceId),
|
|
129
|
+
children: example.signalText
|
|
130
|
+
}
|
|
131
|
+
) }, example.traceId)) }),
|
|
132
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
133
|
+
ee_signals_examplesPager.ExamplesPager,
|
|
134
|
+
{
|
|
135
|
+
traceCount: detailQuery.data.theme.traceCount,
|
|
136
|
+
offset: examplesOffset,
|
|
137
|
+
onOffsetChange: (offset) => setExamplesPage({ contextKey: examplesContextKey, offset })
|
|
138
|
+
}
|
|
139
|
+
)
|
|
140
|
+
] })
|
|
141
|
+
] }),
|
|
142
|
+
snapshotTotal > 1 && /* @__PURE__ */ jsxRuntime.jsxs("section", { "aria-labelledby": "theme-trend-heading", children: [
|
|
143
|
+
/* @__PURE__ */ jsxRuntime.jsx("h2", { id: "theme-trend-heading", className: "text-neutral3 font-mono text-xs tracking-wider uppercase", children: "Trend" }),
|
|
144
|
+
historyQuery.isPending && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-neutral3 mt-3 text-sm", children: "Loading trend…" }),
|
|
145
|
+
historyQuery.isError && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-3 text-sm text-red-500", children: "Unable to load the trend." }),
|
|
146
|
+
oldestHistoryPoint !== void 0 && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
147
|
+
/* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-neutral5 mt-3 text-sm", children: [
|
|
148
|
+
historyQuery.data?.nextCursor ? `Active since at least ${ee_signals_signalFormatting.formatSnapshotDate(oldestHistoryPoint.startedAt)} · in ${historyPoints.length}+ snapshots` : `First seen ${ee_signals_signalFormatting.formatSnapshotDate(oldestHistoryPoint.startedAt)} · in ${historyPoints.length} ${historyPoints.length === 1 ? "snapshot" : "snapshots"}`,
|
|
149
|
+
" ",
|
|
150
|
+
"· ",
|
|
151
|
+
ee_signals_themeTrend.themeTrendDirection(historyPoints)
|
|
152
|
+
] }),
|
|
153
|
+
historyPoints.length >= 2 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
154
|
+
ee_signals_themeTrendChart.ThemeTrendChart,
|
|
155
|
+
{
|
|
156
|
+
points: historyPoints,
|
|
157
|
+
color: sankeyColor.nodeColor(ee_signals_signalColors.getSignalHue(signalName ?? "goal"))
|
|
158
|
+
}
|
|
159
|
+
)
|
|
160
|
+
] })
|
|
161
|
+
] })
|
|
162
|
+
] })
|
|
163
|
+
] })
|
|
164
|
+
] })
|
|
165
|
+
] })
|
|
166
|
+
}
|
|
167
|
+
);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
exports.ThemeDetailPanel = ThemeDetailPanel;
|
|
171
|
+
//# sourceMappingURL=theme-detail-panel.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme-detail-panel.cjs.js","sources":["../../../src/ee/signals/theme-detail-panel.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { EXAMPLES_PAGE_SIZE, ExamplesPager } from './examples-pager';\nimport { useThemeDetail, useThemeExamples, useThemeHistory } from './hooks';\nimport { getSignalHue } from './signal-colors';\nimport { formatSnapshotDate, shareSentence, SIGNAL_DESCRIPTIONS } from './signal-formatting';\nimport type { ThemeSelection } from './theme-drilldown-data';\nimport { chronologicalHistoryPoints, themeTrendDirection } from './theme-trend';\nimport { ThemeTrendChart } from './theme-trend-chart';\nimport { TraceInsightView } from './trace-insight-view';\nimport {\n Drawer,\n DrawerBody,\n DrawerContent,\n DrawerDescription,\n DrawerHeader,\n DrawerTitle,\n} from '@/ds/components/Drawer';\nimport { nodeColor } from '@/ds/components/SankeyChart';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/ds/components/Tooltip';\n\ninterface ThemeDetailPanelProps {\n entityId: string;\n entityType: string;\n snapshotId: string;\n snapshotTotal: number;\n selection: ThemeSelection | undefined;\n onClose: () => void;\n}\n\nexport function ThemeDetailPanel({\n entityId,\n entityType,\n snapshotId,\n snapshotTotal,\n selection,\n onClose,\n}: ThemeDetailPanelProps) {\n const examplesContextKey = `${snapshotId}:${selection?.signalName ?? ''}:${selection?.themeId ?? ''}`;\n const [examplesPage, setExamplesPage] = useState(() => ({ contextKey: examplesContextKey, offset: 0 }));\n const examplesOffset = examplesPage.contextKey === examplesContextKey ? examplesPage.offset : 0;\n const [insightTraceId, setInsightTraceId] = useState<string>();\n const detailQuery = useThemeDetail(\n entityId,\n entityType,\n selection?.signalName ?? 'goal',\n snapshotId,\n selection?.themeId,\n );\n const examplesQuery = useThemeExamples(\n entityId,\n entityType,\n selection?.signalName ?? 'goal',\n snapshotId,\n selection?.themeId,\n EXAMPLES_PAGE_SIZE,\n examplesOffset,\n );\n const historyQuery = useThemeHistory(\n entityId,\n entityType,\n selection?.signalName ?? 'goal',\n snapshotTotal > 1 ? selection?.themeId : undefined,\n );\n const title = detailQuery.data?.theme?.label ?? selection?.label ?? 'Theme details';\n const signalName = selection?.signalName;\n const historyPoints = historyQuery.data ? chronologicalHistoryPoints(historyQuery.data.points) : [];\n const oldestHistoryPoint = historyPoints[0];\n\n return (\n <Drawer\n onOpenChange={open => {\n if (!open) {\n setExamplesPage({ contextKey: '', offset: 0 });\n setInsightTraceId(undefined);\n onClose();\n }\n }}\n open={selection !== undefined}\n overlay=\"none\"\n side=\"right\"\n variant=\"floating\"\n >\n <DrawerContent>\n <DrawerHeader className=\"border-border1 border-b\">\n {signalName !== undefined && (\n <span\n className=\"font-mono text-xs font-semibold tracking-widest\"\n style={{ color: nodeColor(getSignalHue(signalName)) }}\n >\n <Tooltip>\n <TooltipTrigger className=\"cursor-default uppercase\">{signalName}</TooltipTrigger>\n <TooltipContent>{SIGNAL_DESCRIPTIONS[signalName]}</TooltipContent>\n </Tooltip>\n </span>\n )}\n <DrawerTitle>{title}</DrawerTitle>\n <DrawerDescription className=\"sr-only\">\n Details for the {signalName ?? 'selected'} theme {title}\n </DrawerDescription>\n </DrawerHeader>\n <DrawerBody className=\"grid content-start gap-6 overflow-y-auto p-6\">\n {insightTraceId !== undefined && (\n <TraceInsightView traceId={insightTraceId} onBack={() => setInsightTraceId(undefined)} />\n )}\n {insightTraceId === undefined && (\n <>\n {detailQuery.isPending && <p className=\"text-neutral3 text-sm\">Loading theme details…</p>}\n {detailQuery.isError && <p className=\"text-sm text-red-500\">Unable to load theme details.</p>}\n {detailQuery.data && !detailQuery.data.theme && (\n <section>\n <h2 className=\"text-neutral6 text-sm font-semibold\">Not present in this snapshot</h2>\n <p className=\"text-neutral3 mt-2 text-sm\">This theme has no data in the selected snapshot.</p>\n </section>\n )}\n {detailQuery.data?.theme && (\n <>\n <section aria-labelledby=\"theme-summary-heading\">\n <h2 id=\"theme-summary-heading\" className=\"text-neutral3 font-mono text-xs tracking-wider uppercase\">\n Summary\n </h2>\n <p className=\"text-neutral5 mt-3 text-sm\">\n {detailQuery.data.theme.description ?? 'No description available.'}\n </p>\n <p className=\"text-neutral5 mt-3 font-mono text-sm tabular-nums\">\n {shareSentence(detailQuery.data.theme.traceCount, detailQuery.data.theme.coverage)}\n </p>\n </section>\n\n <section aria-labelledby=\"theme-examples-heading\">\n <h2\n id=\"theme-examples-heading\"\n className=\"text-neutral3 font-mono text-xs tracking-wider uppercase\"\n >\n Examples\n </h2>\n {examplesQuery.isPending && <p className=\"text-neutral3 mt-3 text-sm\">Loading examples…</p>}\n {examplesQuery.isError && <p className=\"mt-3 text-sm text-red-500\">Unable to load examples.</p>}\n {examplesQuery.data && (\n <>\n {examplesQuery.data.examples.length === 0 ? (\n <p className=\"text-neutral3 mt-3 text-sm\">No examples in this snapshot.</p>\n ) : (\n <ul className=\"mt-3 space-y-3\">\n {examplesQuery.data.examples.map(example => (\n <li key={example.traceId}>\n <button\n type=\"button\"\n aria-label={`View trace insight for ${example.signalText}`}\n className=\"border-border1 bg-surface3 text-neutral5 hover:bg-surface5 w-full cursor-pointer rounded-md border p-3 text-left text-sm\"\n onClick={() => setInsightTraceId(example.traceId)}\n >\n {example.signalText}\n </button>\n </li>\n ))}\n </ul>\n )}\n <ExamplesPager\n traceCount={detailQuery.data.theme.traceCount}\n offset={examplesOffset}\n onOffsetChange={offset => setExamplesPage({ contextKey: examplesContextKey, offset })}\n />\n </>\n )}\n </section>\n\n {snapshotTotal > 1 && (\n <section aria-labelledby=\"theme-trend-heading\">\n <h2 id=\"theme-trend-heading\" className=\"text-neutral3 font-mono text-xs tracking-wider uppercase\">\n Trend\n </h2>\n {historyQuery.isPending && <p className=\"text-neutral3 mt-3 text-sm\">Loading trend…</p>}\n {historyQuery.isError && <p className=\"mt-3 text-sm text-red-500\">Unable to load the trend.</p>}\n {oldestHistoryPoint !== undefined && (\n <>\n <p className=\"text-neutral5 mt-3 text-sm\">\n {/* A nextCursor means older points exist beyond the fetched window,\n so the oldest loaded point is a lower bound, not the true origin. */}\n {historyQuery.data?.nextCursor\n ? `Active since at least ${formatSnapshotDate(oldestHistoryPoint.startedAt)} · in ${historyPoints.length}+ snapshots`\n : `First seen ${formatSnapshotDate(oldestHistoryPoint.startedAt)} · in ${historyPoints.length} ${historyPoints.length === 1 ? 'snapshot' : 'snapshots'}`}{' '}\n · {themeTrendDirection(historyPoints)}\n </p>\n {historyPoints.length >= 2 && (\n <ThemeTrendChart\n points={historyPoints}\n color={nodeColor(getSignalHue(signalName ?? 'goal'))}\n />\n )}\n </>\n )}\n </section>\n )}\n </>\n )}\n </>\n )}\n </DrawerBody>\n </DrawerContent>\n </Drawer>\n );\n}\n"],"names":["useState","useThemeDetail","useThemeExamples","EXAMPLES_PAGE_SIZE","useThemeHistory","chronologicalHistoryPoints","jsx","Drawer","DrawerContent","jsxs","DrawerHeader","nodeColor","getSignalHue","Tooltip","TooltipTrigger","TooltipContent","SIGNAL_DESCRIPTIONS","DrawerTitle","DrawerDescription","DrawerBody","TraceInsightView","Fragment","shareSentence","ExamplesPager","formatSnapshotDate","themeTrendDirection","ThemeTrendChart"],"mappings":"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"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { EXAMPLES_PAGE_SIZE, ExamplesPager } from './examples-pager.es.js';
|
|
4
|
+
import '@tanstack/react-query';
|
|
5
|
+
import './trace-intelligence-context.es.js';
|
|
6
|
+
import { useThemeDetail } from './hooks/use-theme-detail.es.js';
|
|
7
|
+
import { useThemeExamples } from './hooks/use-theme-examples.es.js';
|
|
8
|
+
import { useThemeHistory } from './hooks/use-theme-history.es.js';
|
|
9
|
+
import { getSignalHue } from './signal-colors.es.js';
|
|
10
|
+
import { SIGNAL_DESCRIPTIONS, shareSentence, formatSnapshotDate } from './signal-formatting.es.js';
|
|
11
|
+
import { chronologicalHistoryPoints, themeTrendDirection } from './theme-trend.es.js';
|
|
12
|
+
import { ThemeTrendChart } from './theme-trend-chart.es.js';
|
|
13
|
+
import { TraceInsightView } from './trace-insight-view.es.js';
|
|
14
|
+
import { D as Drawer, d as DrawerContent, g as DrawerHeader, o as DrawerTitle, e as DrawerDescription, b as DrawerBody } from '../../drawer-C8jNXutE.js';
|
|
15
|
+
import { n as nodeColor } from '../../sankeyColor-CQ5nkgtL.js';
|
|
16
|
+
import { T as Tooltip, c as TooltipTrigger, a as TooltipContent } from '../../tooltip-BFbYhBj1.js';
|
|
17
|
+
|
|
18
|
+
function ThemeDetailPanel({
|
|
19
|
+
entityId,
|
|
20
|
+
entityType,
|
|
21
|
+
snapshotId,
|
|
22
|
+
snapshotTotal,
|
|
23
|
+
selection,
|
|
24
|
+
onClose
|
|
25
|
+
}) {
|
|
26
|
+
const examplesContextKey = `${snapshotId}:${selection?.signalName ?? ""}:${selection?.themeId ?? ""}`;
|
|
27
|
+
const [examplesPage, setExamplesPage] = useState(() => ({ contextKey: examplesContextKey, offset: 0 }));
|
|
28
|
+
const examplesOffset = examplesPage.contextKey === examplesContextKey ? examplesPage.offset : 0;
|
|
29
|
+
const [insightTraceId, setInsightTraceId] = useState();
|
|
30
|
+
const detailQuery = useThemeDetail(
|
|
31
|
+
entityId,
|
|
32
|
+
entityType,
|
|
33
|
+
selection?.signalName ?? "goal",
|
|
34
|
+
snapshotId,
|
|
35
|
+
selection?.themeId
|
|
36
|
+
);
|
|
37
|
+
const examplesQuery = useThemeExamples(
|
|
38
|
+
entityId,
|
|
39
|
+
entityType,
|
|
40
|
+
selection?.signalName ?? "goal",
|
|
41
|
+
snapshotId,
|
|
42
|
+
selection?.themeId,
|
|
43
|
+
EXAMPLES_PAGE_SIZE,
|
|
44
|
+
examplesOffset
|
|
45
|
+
);
|
|
46
|
+
const historyQuery = useThemeHistory(
|
|
47
|
+
entityId,
|
|
48
|
+
entityType,
|
|
49
|
+
selection?.signalName ?? "goal",
|
|
50
|
+
snapshotTotal > 1 ? selection?.themeId : void 0
|
|
51
|
+
);
|
|
52
|
+
const title = detailQuery.data?.theme?.label ?? selection?.label ?? "Theme details";
|
|
53
|
+
const signalName = selection?.signalName;
|
|
54
|
+
const historyPoints = historyQuery.data ? chronologicalHistoryPoints(historyQuery.data.points) : [];
|
|
55
|
+
const oldestHistoryPoint = historyPoints[0];
|
|
56
|
+
return /* @__PURE__ */ jsx(
|
|
57
|
+
Drawer,
|
|
58
|
+
{
|
|
59
|
+
onOpenChange: (open) => {
|
|
60
|
+
if (!open) {
|
|
61
|
+
setExamplesPage({ contextKey: "", offset: 0 });
|
|
62
|
+
setInsightTraceId(void 0);
|
|
63
|
+
onClose();
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
open: selection !== void 0,
|
|
67
|
+
overlay: "none",
|
|
68
|
+
side: "right",
|
|
69
|
+
variant: "floating",
|
|
70
|
+
children: /* @__PURE__ */ jsxs(DrawerContent, { children: [
|
|
71
|
+
/* @__PURE__ */ jsxs(DrawerHeader, { className: "border-border1 border-b", children: [
|
|
72
|
+
signalName !== void 0 && /* @__PURE__ */ jsx(
|
|
73
|
+
"span",
|
|
74
|
+
{
|
|
75
|
+
className: "font-mono text-xs font-semibold tracking-widest",
|
|
76
|
+
style: { color: nodeColor(getSignalHue(signalName)) },
|
|
77
|
+
children: /* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
78
|
+
/* @__PURE__ */ jsx(TooltipTrigger, { className: "cursor-default uppercase", children: signalName }),
|
|
79
|
+
/* @__PURE__ */ jsx(TooltipContent, { children: SIGNAL_DESCRIPTIONS[signalName] })
|
|
80
|
+
] })
|
|
81
|
+
}
|
|
82
|
+
),
|
|
83
|
+
/* @__PURE__ */ jsx(DrawerTitle, { children: title }),
|
|
84
|
+
/* @__PURE__ */ jsxs(DrawerDescription, { className: "sr-only", children: [
|
|
85
|
+
"Details for the ",
|
|
86
|
+
signalName ?? "selected",
|
|
87
|
+
" theme ",
|
|
88
|
+
title
|
|
89
|
+
] })
|
|
90
|
+
] }),
|
|
91
|
+
/* @__PURE__ */ jsxs(DrawerBody, { className: "grid content-start gap-6 overflow-y-auto p-6", children: [
|
|
92
|
+
insightTraceId !== void 0 && /* @__PURE__ */ jsx(TraceInsightView, { traceId: insightTraceId, onBack: () => setInsightTraceId(void 0) }),
|
|
93
|
+
insightTraceId === void 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
94
|
+
detailQuery.isPending && /* @__PURE__ */ jsx("p", { className: "text-neutral3 text-sm", children: "Loading theme details…" }),
|
|
95
|
+
detailQuery.isError && /* @__PURE__ */ jsx("p", { className: "text-sm text-red-500", children: "Unable to load theme details." }),
|
|
96
|
+
detailQuery.data && !detailQuery.data.theme && /* @__PURE__ */ jsxs("section", { children: [
|
|
97
|
+
/* @__PURE__ */ jsx("h2", { className: "text-neutral6 text-sm font-semibold", children: "Not present in this snapshot" }),
|
|
98
|
+
/* @__PURE__ */ jsx("p", { className: "text-neutral3 mt-2 text-sm", children: "This theme has no data in the selected snapshot." })
|
|
99
|
+
] }),
|
|
100
|
+
detailQuery.data?.theme && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
101
|
+
/* @__PURE__ */ jsxs("section", { "aria-labelledby": "theme-summary-heading", children: [
|
|
102
|
+
/* @__PURE__ */ jsx("h2", { id: "theme-summary-heading", className: "text-neutral3 font-mono text-xs tracking-wider uppercase", children: "Summary" }),
|
|
103
|
+
/* @__PURE__ */ jsx("p", { className: "text-neutral5 mt-3 text-sm", children: detailQuery.data.theme.description ?? "No description available." }),
|
|
104
|
+
/* @__PURE__ */ jsx("p", { className: "text-neutral5 mt-3 font-mono text-sm tabular-nums", children: shareSentence(detailQuery.data.theme.traceCount, detailQuery.data.theme.coverage) })
|
|
105
|
+
] }),
|
|
106
|
+
/* @__PURE__ */ jsxs("section", { "aria-labelledby": "theme-examples-heading", children: [
|
|
107
|
+
/* @__PURE__ */ jsx(
|
|
108
|
+
"h2",
|
|
109
|
+
{
|
|
110
|
+
id: "theme-examples-heading",
|
|
111
|
+
className: "text-neutral3 font-mono text-xs tracking-wider uppercase",
|
|
112
|
+
children: "Examples"
|
|
113
|
+
}
|
|
114
|
+
),
|
|
115
|
+
examplesQuery.isPending && /* @__PURE__ */ jsx("p", { className: "text-neutral3 mt-3 text-sm", children: "Loading examples…" }),
|
|
116
|
+
examplesQuery.isError && /* @__PURE__ */ jsx("p", { className: "mt-3 text-sm text-red-500", children: "Unable to load examples." }),
|
|
117
|
+
examplesQuery.data && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
118
|
+
examplesQuery.data.examples.length === 0 ? /* @__PURE__ */ jsx("p", { className: "text-neutral3 mt-3 text-sm", children: "No examples in this snapshot." }) : /* @__PURE__ */ jsx("ul", { className: "mt-3 space-y-3", children: examplesQuery.data.examples.map((example) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
|
|
119
|
+
"button",
|
|
120
|
+
{
|
|
121
|
+
type: "button",
|
|
122
|
+
"aria-label": `View trace insight for ${example.signalText}`,
|
|
123
|
+
className: "border-border1 bg-surface3 text-neutral5 hover:bg-surface5 w-full cursor-pointer rounded-md border p-3 text-left text-sm",
|
|
124
|
+
onClick: () => setInsightTraceId(example.traceId),
|
|
125
|
+
children: example.signalText
|
|
126
|
+
}
|
|
127
|
+
) }, example.traceId)) }),
|
|
128
|
+
/* @__PURE__ */ jsx(
|
|
129
|
+
ExamplesPager,
|
|
130
|
+
{
|
|
131
|
+
traceCount: detailQuery.data.theme.traceCount,
|
|
132
|
+
offset: examplesOffset,
|
|
133
|
+
onOffsetChange: (offset) => setExamplesPage({ contextKey: examplesContextKey, offset })
|
|
134
|
+
}
|
|
135
|
+
)
|
|
136
|
+
] })
|
|
137
|
+
] }),
|
|
138
|
+
snapshotTotal > 1 && /* @__PURE__ */ jsxs("section", { "aria-labelledby": "theme-trend-heading", children: [
|
|
139
|
+
/* @__PURE__ */ jsx("h2", { id: "theme-trend-heading", className: "text-neutral3 font-mono text-xs tracking-wider uppercase", children: "Trend" }),
|
|
140
|
+
historyQuery.isPending && /* @__PURE__ */ jsx("p", { className: "text-neutral3 mt-3 text-sm", children: "Loading trend…" }),
|
|
141
|
+
historyQuery.isError && /* @__PURE__ */ jsx("p", { className: "mt-3 text-sm text-red-500", children: "Unable to load the trend." }),
|
|
142
|
+
oldestHistoryPoint !== void 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
143
|
+
/* @__PURE__ */ jsxs("p", { className: "text-neutral5 mt-3 text-sm", children: [
|
|
144
|
+
historyQuery.data?.nextCursor ? `Active since at least ${formatSnapshotDate(oldestHistoryPoint.startedAt)} · in ${historyPoints.length}+ snapshots` : `First seen ${formatSnapshotDate(oldestHistoryPoint.startedAt)} · in ${historyPoints.length} ${historyPoints.length === 1 ? "snapshot" : "snapshots"}`,
|
|
145
|
+
" ",
|
|
146
|
+
"· ",
|
|
147
|
+
themeTrendDirection(historyPoints)
|
|
148
|
+
] }),
|
|
149
|
+
historyPoints.length >= 2 && /* @__PURE__ */ jsx(
|
|
150
|
+
ThemeTrendChart,
|
|
151
|
+
{
|
|
152
|
+
points: historyPoints,
|
|
153
|
+
color: nodeColor(getSignalHue(signalName ?? "goal"))
|
|
154
|
+
}
|
|
155
|
+
)
|
|
156
|
+
] })
|
|
157
|
+
] })
|
|
158
|
+
] })
|
|
159
|
+
] })
|
|
160
|
+
] })
|
|
161
|
+
] })
|
|
162
|
+
}
|
|
163
|
+
);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
export { ThemeDetailPanel };
|
|
167
|
+
//# sourceMappingURL=theme-detail-panel.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme-detail-panel.es.js","sources":["../../../src/ee/signals/theme-detail-panel.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { EXAMPLES_PAGE_SIZE, ExamplesPager } from './examples-pager';\nimport { useThemeDetail, useThemeExamples, useThemeHistory } from './hooks';\nimport { getSignalHue } from './signal-colors';\nimport { formatSnapshotDate, shareSentence, SIGNAL_DESCRIPTIONS } from './signal-formatting';\nimport type { ThemeSelection } from './theme-drilldown-data';\nimport { chronologicalHistoryPoints, themeTrendDirection } from './theme-trend';\nimport { ThemeTrendChart } from './theme-trend-chart';\nimport { TraceInsightView } from './trace-insight-view';\nimport {\n Drawer,\n DrawerBody,\n DrawerContent,\n DrawerDescription,\n DrawerHeader,\n DrawerTitle,\n} from '@/ds/components/Drawer';\nimport { nodeColor } from '@/ds/components/SankeyChart';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/ds/components/Tooltip';\n\ninterface ThemeDetailPanelProps {\n entityId: string;\n entityType: string;\n snapshotId: string;\n snapshotTotal: number;\n selection: ThemeSelection | undefined;\n onClose: () => void;\n}\n\nexport function ThemeDetailPanel({\n entityId,\n entityType,\n snapshotId,\n snapshotTotal,\n selection,\n onClose,\n}: ThemeDetailPanelProps) {\n const examplesContextKey = `${snapshotId}:${selection?.signalName ?? ''}:${selection?.themeId ?? ''}`;\n const [examplesPage, setExamplesPage] = useState(() => ({ contextKey: examplesContextKey, offset: 0 }));\n const examplesOffset = examplesPage.contextKey === examplesContextKey ? examplesPage.offset : 0;\n const [insightTraceId, setInsightTraceId] = useState<string>();\n const detailQuery = useThemeDetail(\n entityId,\n entityType,\n selection?.signalName ?? 'goal',\n snapshotId,\n selection?.themeId,\n );\n const examplesQuery = useThemeExamples(\n entityId,\n entityType,\n selection?.signalName ?? 'goal',\n snapshotId,\n selection?.themeId,\n EXAMPLES_PAGE_SIZE,\n examplesOffset,\n );\n const historyQuery = useThemeHistory(\n entityId,\n entityType,\n selection?.signalName ?? 'goal',\n snapshotTotal > 1 ? selection?.themeId : undefined,\n );\n const title = detailQuery.data?.theme?.label ?? selection?.label ?? 'Theme details';\n const signalName = selection?.signalName;\n const historyPoints = historyQuery.data ? chronologicalHistoryPoints(historyQuery.data.points) : [];\n const oldestHistoryPoint = historyPoints[0];\n\n return (\n <Drawer\n onOpenChange={open => {\n if (!open) {\n setExamplesPage({ contextKey: '', offset: 0 });\n setInsightTraceId(undefined);\n onClose();\n }\n }}\n open={selection !== undefined}\n overlay=\"none\"\n side=\"right\"\n variant=\"floating\"\n >\n <DrawerContent>\n <DrawerHeader className=\"border-border1 border-b\">\n {signalName !== undefined && (\n <span\n className=\"font-mono text-xs font-semibold tracking-widest\"\n style={{ color: nodeColor(getSignalHue(signalName)) }}\n >\n <Tooltip>\n <TooltipTrigger className=\"cursor-default uppercase\">{signalName}</TooltipTrigger>\n <TooltipContent>{SIGNAL_DESCRIPTIONS[signalName]}</TooltipContent>\n </Tooltip>\n </span>\n )}\n <DrawerTitle>{title}</DrawerTitle>\n <DrawerDescription className=\"sr-only\">\n Details for the {signalName ?? 'selected'} theme {title}\n </DrawerDescription>\n </DrawerHeader>\n <DrawerBody className=\"grid content-start gap-6 overflow-y-auto p-6\">\n {insightTraceId !== undefined && (\n <TraceInsightView traceId={insightTraceId} onBack={() => setInsightTraceId(undefined)} />\n )}\n {insightTraceId === undefined && (\n <>\n {detailQuery.isPending && <p className=\"text-neutral3 text-sm\">Loading theme details…</p>}\n {detailQuery.isError && <p className=\"text-sm text-red-500\">Unable to load theme details.</p>}\n {detailQuery.data && !detailQuery.data.theme && (\n <section>\n <h2 className=\"text-neutral6 text-sm font-semibold\">Not present in this snapshot</h2>\n <p className=\"text-neutral3 mt-2 text-sm\">This theme has no data in the selected snapshot.</p>\n </section>\n )}\n {detailQuery.data?.theme && (\n <>\n <section aria-labelledby=\"theme-summary-heading\">\n <h2 id=\"theme-summary-heading\" className=\"text-neutral3 font-mono text-xs tracking-wider uppercase\">\n Summary\n </h2>\n <p className=\"text-neutral5 mt-3 text-sm\">\n {detailQuery.data.theme.description ?? 'No description available.'}\n </p>\n <p className=\"text-neutral5 mt-3 font-mono text-sm tabular-nums\">\n {shareSentence(detailQuery.data.theme.traceCount, detailQuery.data.theme.coverage)}\n </p>\n </section>\n\n <section aria-labelledby=\"theme-examples-heading\">\n <h2\n id=\"theme-examples-heading\"\n className=\"text-neutral3 font-mono text-xs tracking-wider uppercase\"\n >\n Examples\n </h2>\n {examplesQuery.isPending && <p className=\"text-neutral3 mt-3 text-sm\">Loading examples…</p>}\n {examplesQuery.isError && <p className=\"mt-3 text-sm text-red-500\">Unable to load examples.</p>}\n {examplesQuery.data && (\n <>\n {examplesQuery.data.examples.length === 0 ? (\n <p className=\"text-neutral3 mt-3 text-sm\">No examples in this snapshot.</p>\n ) : (\n <ul className=\"mt-3 space-y-3\">\n {examplesQuery.data.examples.map(example => (\n <li key={example.traceId}>\n <button\n type=\"button\"\n aria-label={`View trace insight for ${example.signalText}`}\n className=\"border-border1 bg-surface3 text-neutral5 hover:bg-surface5 w-full cursor-pointer rounded-md border p-3 text-left text-sm\"\n onClick={() => setInsightTraceId(example.traceId)}\n >\n {example.signalText}\n </button>\n </li>\n ))}\n </ul>\n )}\n <ExamplesPager\n traceCount={detailQuery.data.theme.traceCount}\n offset={examplesOffset}\n onOffsetChange={offset => setExamplesPage({ contextKey: examplesContextKey, offset })}\n />\n </>\n )}\n </section>\n\n {snapshotTotal > 1 && (\n <section aria-labelledby=\"theme-trend-heading\">\n <h2 id=\"theme-trend-heading\" className=\"text-neutral3 font-mono text-xs tracking-wider uppercase\">\n Trend\n </h2>\n {historyQuery.isPending && <p className=\"text-neutral3 mt-3 text-sm\">Loading trend…</p>}\n {historyQuery.isError && <p className=\"mt-3 text-sm text-red-500\">Unable to load the trend.</p>}\n {oldestHistoryPoint !== undefined && (\n <>\n <p className=\"text-neutral5 mt-3 text-sm\">\n {/* A nextCursor means older points exist beyond the fetched window,\n so the oldest loaded point is a lower bound, not the true origin. */}\n {historyQuery.data?.nextCursor\n ? `Active since at least ${formatSnapshotDate(oldestHistoryPoint.startedAt)} · in ${historyPoints.length}+ snapshots`\n : `First seen ${formatSnapshotDate(oldestHistoryPoint.startedAt)} · in ${historyPoints.length} ${historyPoints.length === 1 ? 'snapshot' : 'snapshots'}`}{' '}\n · {themeTrendDirection(historyPoints)}\n </p>\n {historyPoints.length >= 2 && (\n <ThemeTrendChart\n points={historyPoints}\n color={nodeColor(getSignalHue(signalName ?? 'goal'))}\n />\n )}\n </>\n )}\n </section>\n )}\n </>\n )}\n </>\n )}\n </DrawerBody>\n </DrawerContent>\n </Drawer>\n );\n}\n"],"names":[],"mappings":"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"}
|