@mastra/playground-ui 56.0.0 → 57.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{Button-CVewl8nT.cjs → Button-C0DBEBcJ.cjs} +12 -5
- package/dist/Button-C0DBEBcJ.cjs.map +1 -0
- package/dist/{Button-cWcBEd-G.js → Button-C9cvaVFG.js} +13 -6
- package/dist/Button-C9cvaVFG.js.map +1 -0
- package/dist/{Card-DEvGFj-Z.js → Card-B_buJ5yF.js} +3 -3
- package/dist/{Card-DEvGFj-Z.js.map → Card-B_buJ5yF.js.map} +1 -1
- package/dist/{Card-D0kFp9j9.cjs → Card-DwGasv0K.cjs} +3 -3
- package/dist/{Card-D0kFp9j9.cjs.map → Card-DwGasv0K.cjs.map} +1 -1
- package/dist/{EmptyState-UWXhBp5U.js → EmptyState-B6cyZw6m.js} +12 -6
- package/dist/EmptyState-B6cyZw6m.js.map +1 -0
- package/dist/{EmptyState-CdRjFB06.cjs → EmptyState-DiSP6UIy.cjs} +12 -6
- package/dist/EmptyState-DiSP6UIy.cjs.map +1 -0
- package/dist/ErrorState-B0839u-q.cjs +21 -0
- package/dist/ErrorState-B0839u-q.cjs.map +1 -0
- package/dist/ErrorState-HyRJdaA2.js +19 -0
- package/dist/ErrorState-HyRJdaA2.js.map +1 -0
- package/dist/Header-BVnFQlzE.js +31 -0
- package/dist/Header-BVnFQlzE.js.map +1 -0
- package/dist/Header-CGjhJ0nQ.cjs +36 -0
- package/dist/Header-CGjhJ0nQ.cjs.map +1 -0
- package/dist/{Notice-Cjti0e0j.cjs → Notice-CoFjo8O6.cjs} +3 -3
- package/dist/{Notice-Cjti0e0j.cjs.map → Notice-CoFjo8O6.cjs.map} +1 -1
- package/dist/{Notice-Ah-84yi6.js → Notice-DUdQkUqH.js} +3 -3
- package/dist/{Notice-Ah-84yi6.js.map → Notice-DUdQkUqH.js.map} +1 -1
- package/dist/{PermissionDenied-B6TSGolC.js → PermissionDenied-CTqnE57B.js} +11 -6
- package/dist/PermissionDenied-CTqnE57B.js.map +1 -0
- package/dist/{PermissionDenied-Dz5qXpQj.cjs → PermissionDenied-fdVmTjjf.cjs} +11 -6
- package/dist/PermissionDenied-fdVmTjjf.cjs.map +1 -0
- package/dist/{SessionExpired-CF0BGNo_.cjs → SessionExpired-CFGTqnU5.cjs} +5 -6
- package/dist/SessionExpired-CFGTqnU5.cjs.map +1 -0
- package/dist/{SessionExpired-Bq5LcsDu.js → SessionExpired-COK6flhT.js} +5 -6
- package/dist/SessionExpired-COK6flhT.js.map +1 -0
- package/dist/ask-user-3fufbFt8.cjs +216 -0
- package/dist/ask-user-3fufbFt8.cjs.map +1 -0
- package/dist/ask-user-CvCMHkhI.js +206 -0
- package/dist/ask-user-CvCMHkhI.js.map +1 -0
- package/dist/buttons-group-CoZP3lJt.cjs +59 -0
- package/dist/buttons-group-CoZP3lJt.cjs.map +1 -0
- package/dist/buttons-group-DsZgrZBZ.js +37 -0
- package/dist/buttons-group-DsZgrZBZ.js.map +1 -0
- package/dist/buttons-group.css +113 -22
- package/dist/{chat-notification-4OuPNhtu.js → chat-notification-BM24QnK9.js} +7 -7
- package/dist/{chat-notification-4OuPNhtu.js.map → chat-notification-BM24QnK9.js.map} +1 -1
- package/dist/{chat-notification-CPrlBwP_.cjs → chat-notification-CQlc3Z3y.cjs} +7 -7
- package/dist/{chat-notification-CPrlBwP_.cjs.map → chat-notification-CQlc3Z3y.cjs.map} +1 -1
- package/dist/{chat-signal-CG5-vy21.js → chat-signal-5gAZo10e.js} +6 -6
- package/dist/{chat-signal-CG5-vy21.js.map → chat-signal-5gAZo10e.js.map} +1 -1
- package/dist/{chat-signal-B_T2DSzo.cjs → chat-signal-CUkeTh1i.cjs} +6 -6
- package/dist/{chat-signal-B_T2DSzo.cjs.map → chat-signal-CUkeTh1i.cjs.map} +1 -1
- package/dist/{code-block-Cd4u7Bo9.cjs → code-block-D2q4w1t-.cjs} +10 -10
- package/dist/{code-block-Cd4u7Bo9.cjs.map → code-block-D2q4w1t-.cjs.map} +1 -1
- package/dist/{code-block-CSqjpBvb.js → code-block-D3BWud_S.js} +10 -10
- package/dist/{code-block-CSqjpBvb.js.map → code-block-D3BWud_S.js.map} +1 -1
- package/dist/{code-diff-C5uY-3Hz.js → code-diff-BHZTS4Zh.js} +2 -2
- package/dist/{code-diff-C5uY-3Hz.js.map → code-diff-BHZTS4Zh.js.map} +1 -1
- package/dist/{code-diff-DBtbPe9D.cjs → code-diff-CG8veSa-.cjs} +2 -2
- package/dist/{code-diff-DBtbPe9D.cjs.map → code-diff-CG8veSa-.cjs.map} +1 -1
- package/dist/{code-editor-vCt7l9Bl.js → code-editor-7wJJDE9d.js} +2 -2
- package/dist/{code-editor-vCt7l9Bl.js.map → code-editor-7wJJDE9d.js.map} +1 -1
- package/dist/{code-editor-DgY7d8kg.cjs → code-editor-Ce1FXyFV.cjs} +2 -2
- package/dist/{code-editor-DgY7d8kg.cjs.map → code-editor-Ce1FXyFV.cjs.map} +1 -1
- package/dist/{collapsible-BvrI6XnN.cjs → collapsible-BFSJouuI.cjs} +2 -2
- package/dist/{collapsible-BvrI6XnN.cjs.map → collapsible-BFSJouuI.cjs.map} +1 -1
- package/dist/{collapsible-B2uUy8w5.js → collapsible-DhhP5p1j.js} +2 -2
- package/dist/{collapsible-B2uUy8w5.js.map → collapsible-DhhP5p1j.js.map} +1 -1
- package/dist/{combobox-D7xJFZuO.js → combobox-CV-Ue388.js} +5 -5
- package/dist/combobox-CV-Ue388.js.map +1 -0
- package/dist/{combobox-BWM3VH-n.cjs → combobox-Dw3W6EHS.cjs} +6 -6
- package/dist/combobox-Dw3W6EHS.cjs.map +1 -0
- package/dist/{combobox-styles-CRebmeht.js → combobox-styles-Dgc_Jp-E.js} +3 -6
- package/dist/combobox-styles-Dgc_Jp-E.js.map +1 -0
- package/dist/{combobox-styles-DYlNNjKC.cjs → combobox-styles-ExU7SMb7.cjs} +3 -6
- package/dist/combobox-styles-ExU7SMb7.cjs.map +1 -0
- package/dist/{command-DuT06mTw.cjs → command-BJrGchxZ.cjs} +6 -6
- package/dist/{command-DuT06mTw.cjs.map → command-BJrGchxZ.cjs.map} +1 -1
- package/dist/{command-jRiL1vXM.js → command-kHnYspgO.js} +6 -6
- package/dist/{command-jRiL1vXM.js.map → command-kHnYspgO.js.map} +1 -1
- package/dist/components/ActionRow.cjs.js +38 -0
- package/dist/components/ActionRow.cjs.js.map +1 -0
- package/dist/components/ActionRow.d.ts +2 -0
- package/dist/components/ActionRow.es.js +34 -0
- package/dist/components/ActionRow.es.js.map +1 -0
- package/dist/components/AlertDialog.cjs.js +1 -1
- package/dist/components/AlertDialog.es.js +1 -1
- package/dist/components/Breadcrumb.cjs.js +1 -1
- package/dist/components/Breadcrumb.cjs.js.map +1 -1
- package/dist/components/Breadcrumb.es.js +1 -1
- package/dist/components/Breadcrumb.es.js.map +1 -1
- package/dist/components/Button.cjs.js +2 -2
- package/dist/components/Button.es.js +3 -3
- package/dist/components/ButtonsGroup.cjs.js +1 -2
- package/dist/components/ButtonsGroup.cjs.js.map +1 -1
- package/dist/components/ButtonsGroup.es.js +1 -1
- package/dist/components/Card.cjs.js +1 -1
- package/dist/components/Card.es.js +1 -1
- package/dist/components/ClampedText.cjs.js +1 -1
- package/dist/components/ClampedText.es.js +1 -1
- package/dist/components/CodeBlock.cjs.js +1 -1
- package/dist/components/CodeBlock.es.js +1 -1
- package/dist/components/CodeDiff.cjs.js +1 -1
- package/dist/components/CodeDiff.es.js +1 -1
- package/dist/components/CodeEditor.cjs.js +1 -1
- package/dist/components/CodeEditor.es.js +1 -1
- package/dist/components/Collapsible.cjs.js +1 -1
- package/dist/components/Collapsible.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 +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 +12 -12
- package/dist/components/CommandPalette.cjs.js.map +1 -1
- package/dist/components/CommandPalette.es.js +12 -12
- package/dist/components/CommandPalette.es.js.map +1 -1
- package/dist/components/Comment.cjs.js +6 -7
- package/dist/components/Comment.cjs.js.map +1 -1
- package/dist/components/Comment.es.js +5 -6
- package/dist/components/Comment.es.js.map +1 -1
- package/dist/components/Composer.cjs.js +6 -6
- package/dist/components/Composer.cjs.js.map +1 -1
- package/dist/components/Composer.es.js +6 -6
- package/dist/components/Composer.es.js.map +1 -1
- package/dist/components/ContextMenu.cjs.js +1 -6
- package/dist/components/ContextMenu.cjs.js.map +1 -1
- package/dist/components/ContextMenu.es.js +1 -6
- package/dist/components/ContextMenu.es.js.map +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 +10 -11
- package/dist/components/DataDetailsPanel.cjs.js.map +1 -1
- package/dist/components/DataDetailsPanel.es.js +10 -11
- package/dist/components/DataDetailsPanel.es.js.map +1 -1
- package/dist/components/DataFilter.cjs.js +2 -2
- package/dist/components/DataFilter.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 +8 -8
- package/dist/components/DataList.cjs.js.map +1 -1
- package/dist/components/DataList.es.js +8 -8
- 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 +6 -6
- package/dist/components/DateRangeTimeline.cjs.js.map +1 -1
- package/dist/components/DateRangeTimeline.es.js +6 -6
- package/dist/components/DateRangeTimeline.es.js.map +1 -1
- package/dist/components/DateTimePicker.cjs.js +4 -4
- package/dist/components/DateTimePicker.cjs.js.map +1 -1
- package/dist/components/DateTimePicker.es.js +4 -4
- package/dist/components/DateTimePicker.es.js.map +1 -1
- 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 +3 -3
- 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/EmptyState.cjs.js +1 -1
- package/dist/components/EmptyState.es.js +1 -1
- package/dist/components/EntityHeader.cjs.js +1 -1
- package/dist/components/EntityHeader.cjs.js.map +1 -1
- package/dist/components/EntityHeader.es.js +1 -1
- package/dist/components/EntityHeader.es.js.map +1 -1
- package/dist/components/EnvironmentVariablesEditor.cjs.js +15 -16
- package/dist/components/EnvironmentVariablesEditor.cjs.js.map +1 -1
- package/dist/components/EnvironmentVariablesEditor.es.js +9 -10
- package/dist/components/EnvironmentVariablesEditor.es.js.map +1 -1
- package/dist/components/ErrorBoundary.cjs.js +3 -3
- package/dist/components/ErrorBoundary.cjs.js.map +1 -1
- package/dist/components/ErrorBoundary.es.js +3 -3
- package/dist/components/ErrorBoundary.es.js.map +1 -1
- package/dist/components/ErrorState.cjs.js +1 -1
- package/dist/components/ErrorState.es.js +1 -1
- package/dist/components/FilterBar.cjs.js +495 -43
- package/dist/components/FilterBar.cjs.js.map +1 -1
- package/dist/components/FilterBar.es.js +495 -47
- package/dist/components/FilterBar.es.js.map +1 -1
- package/dist/components/FormFieldBlocks.cjs.js +11 -12
- package/dist/components/FormFieldBlocks.cjs.js.map +1 -1
- package/dist/components/FormFieldBlocks.es.js +4 -5
- package/dist/components/FormFieldBlocks.es.js.map +1 -1
- package/dist/components/Header.cjs.js +6 -31
- package/dist/components/Header.cjs.js.map +1 -1
- package/dist/components/Header.es.js +1 -30
- package/dist/components/Header.es.js.map +1 -1
- package/dist/components/HorizontalBars.cjs.js +1 -1
- package/dist/components/HorizontalBars.es.js +1 -1
- 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/IntegrationDialog.cjs.js +6 -6
- package/dist/components/IntegrationDialog.cjs.js.map +1 -1
- package/dist/components/IntegrationDialog.es.js +6 -6
- package/dist/components/IntegrationDialog.es.js.map +1 -1
- package/dist/components/ItemList.cjs.js +4 -4
- package/dist/components/ItemList.cjs.js.map +1 -1
- package/dist/components/ItemList.es.js +4 -4
- package/dist/components/ItemList.es.js.map +1 -1
- package/dist/components/JSONSchemaForm.cjs.js +3 -3
- package/dist/components/JSONSchemaForm.es.js +3 -3
- package/dist/components/Kbd.cjs.js +1 -1
- package/dist/components/Kbd.es.js +1 -1
- 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/LogsDataList.cjs.js +4 -2
- package/dist/components/LogsDataList.cjs.js.map +1 -1
- package/dist/components/LogsDataList.es.js +4 -2
- package/dist/components/LogsDataList.es.js.map +1 -1
- package/dist/components/MainHeader.cjs.js +3 -3
- package/dist/components/MainHeader.cjs.js.map +1 -1
- package/dist/components/MainHeader.es.js +3 -3
- package/dist/components/MainHeader.es.js.map +1 -1
- package/dist/components/MainSidebar.cjs.js +11 -125
- package/dist/components/MainSidebar.cjs.js.map +1 -1
- package/dist/components/MainSidebar.es.js +1 -120
- 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/Message.cjs.js +2 -2
- package/dist/components/Message.es.js +3 -3
- package/dist/components/MetricsCard.cjs.js +1 -1
- package/dist/components/MetricsCard.es.js +1 -1
- package/dist/components/MetricsKpiCard.cjs.js +1 -1
- package/dist/components/MetricsKpiCard.es.js +1 -1
- package/dist/components/MetricsLineChart.cjs.js +1 -1
- package/dist/components/MetricsLineChart.es.js +1 -1
- package/dist/components/Notice.cjs.js +1 -1
- package/dist/components/Notice.es.js +1 -1
- package/dist/components/PageHeader.cjs.js +1 -1
- package/dist/components/PageHeader.es.js +1 -1
- package/dist/components/PageLayout.cjs.js +30 -8
- package/dist/components/PageLayout.cjs.js.map +1 -1
- package/dist/components/PageLayout.es.js +32 -3
- package/dist/components/PageLayout.es.js.map +1 -1
- package/dist/components/PendingIndicator.cjs.js +1 -1
- package/dist/components/PendingIndicator.cjs.js.map +1 -1
- package/dist/components/PendingIndicator.es.js +1 -1
- package/dist/components/PendingIndicator.es.js.map +1 -1
- package/dist/components/PermissionDenied.cjs.js +1 -1
- package/dist/components/PermissionDenied.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 +18 -19
- package/dist/components/PropertyFilter.cjs.js.map +1 -1
- package/dist/components/PropertyFilter.es.js +21 -22
- package/dist/components/PropertyFilter.es.js.map +1 -1
- package/dist/components/RadioGroup.cjs.js +3 -56
- package/dist/components/RadioGroup.cjs.js.map +1 -1
- package/dist/components/RadioGroup.es.js +1 -39
- package/dist/components/RadioGroup.es.js.map +1 -1
- package/dist/components/RuleBuilder.cjs.js +10 -10
- package/dist/components/RuleBuilder.cjs.js.map +1 -1
- package/dist/components/RuleBuilder.es.js +10 -10
- package/dist/components/RuleBuilder.es.js.map +1 -1
- package/dist/components/SankeyChart.cjs.js +1 -1
- package/dist/components/SankeyChart.es.js +1 -1
- package/dist/components/ScatterPlotChart.cjs.js +2 -2
- package/dist/components/ScatterPlotChart.cjs.js.map +1 -1
- package/dist/components/ScatterPlotChart.es.js +2 -2
- package/dist/components/ScatterPlotChart.es.js.map +1 -1
- package/dist/components/ScrollArea.cjs.js +1 -1
- package/dist/components/ScrollArea.es.js +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/SettingsLayout.cjs.js +1 -1
- package/dist/components/SettingsLayout.es.js +1 -1
- package/dist/components/SideDialog.cjs.js +17 -10
- package/dist/components/SideDialog.cjs.js.map +1 -1
- package/dist/components/SideDialog.es.js +17 -10
- package/dist/components/SideDialog.es.js.map +1 -1
- package/dist/components/Spinner.cjs.js +1 -1
- package/dist/components/Spinner.es.js +1 -1
- package/dist/components/StatusIndicators.cjs.js +3 -3
- package/dist/components/StatusIndicators.cjs.js.map +1 -1
- package/dist/components/StatusIndicators.es.js +3 -3
- package/dist/components/StatusIndicators.es.js.map +1 -1
- package/dist/components/Steps.cjs.js +3 -3
- package/dist/components/Steps.cjs.js.map +1 -1
- package/dist/components/Steps.es.js +3 -3
- package/dist/components/Steps.es.js.map +1 -1
- package/dist/components/Tabs.cjs.js +3 -3
- package/dist/components/Tabs.es.js +3 -3
- package/dist/components/ThreadList.cjs.js +2 -2
- package/dist/components/ThreadList.cjs.js.map +1 -1
- package/dist/components/ThreadList.es.js +2 -2
- package/dist/components/ThreadList.es.js.map +1 -1
- package/dist/components/ThreadRail.cjs.js +1 -1
- package/dist/components/ThreadRail.es.js +1 -1
- package/dist/components/TokenBudget.cjs.js +1 -1
- package/dist/components/TokenBudget.cjs.js.map +1 -1
- package/dist/components/TokenBudget.es.js +1 -1
- package/dist/components/TokenBudget.es.js.map +1 -1
- package/dist/components/Tree.cjs.js +3 -3
- package/dist/components/Tree.cjs.js.map +1 -1
- package/dist/components/Tree.es.js +3 -3
- package/dist/components/Tree.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 +36 -36
- package/dist/components/Workflow.cjs.js.map +1 -1
- package/dist/components/Workflow.es.js +36 -36
- package/dist/components/Workflow.es.js.map +1 -1
- package/dist/components/ai/ask-user.cjs.js +4 -3
- package/dist/components/ai/ask-user.cjs.js.map +1 -1
- package/dist/components/ai/ask-user.es.js +1 -1
- package/dist/components/ai/chat-event.cjs.js +6 -6
- package/dist/components/ai/chat-event.cjs.js.map +1 -1
- package/dist/components/ai/chat-event.es.js +7 -7
- package/dist/components/ai/chat-event.es.js.map +1 -1
- package/dist/components/ai/plan.cjs.js +2 -2
- package/dist/components/ai/plan.es.js +2 -2
- package/dist/components/ai/task-list.cjs.js +7 -7
- package/dist/components/ai/task-list.cjs.js.map +1 -1
- package/dist/components/ai/task-list.es.js +7 -7
- package/dist/components/ai/task-list.es.js.map +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 +8 -8
- package/dist/components/ai/tool-call.cjs.js.map +1 -1
- package/dist/components/ai/tool-call.es.js +9 -9
- package/dist/components/ai/tool-call.es.js.map +1 -1
- package/dist/components/fluid-hover-highlight.cjs.js +13 -35
- package/dist/components/fluid-hover-highlight.cjs.js.map +1 -1
- package/dist/components/fluid-hover-highlight.es.js +14 -33
- package/dist/components/fluid-hover-highlight.es.js.map +1 -1
- package/dist/{composer-BUoRnMDd.cjs → composer-B_Err196.cjs} +6 -6
- package/dist/{composer-BUoRnMDd.cjs.map → composer-B_Err196.cjs.map} +1 -1
- package/dist/{composer-CEL1glw7.js → composer-DJGAoBcn.js} +6 -6
- package/dist/{composer-CEL1glw7.js.map → composer-DJGAoBcn.js.map} +1 -1
- package/dist/{copy-button-BbDBpBMl.cjs → copy-button-C5dMlWsW.cjs} +2 -2
- package/dist/{copy-button-BbDBpBMl.cjs.map → copy-button-C5dMlWsW.cjs.map} +1 -1
- package/dist/{copy-button-2cwdZ3dW.js → copy-button-C6RswD_D.js} +2 -2
- package/dist/{copy-button-2cwdZ3dW.js.map → copy-button-C6RswD_D.js.map} +1 -1
- package/dist/{data-code-section-qujvEc6j.cjs → data-code-section-B-y2WPBl.cjs} +17 -19
- package/dist/data-code-section-B-y2WPBl.cjs.map +1 -0
- package/dist/{data-code-section-DKz9Okaz.js → data-code-section-DcocgDAN.js} +17 -19
- package/dist/data-code-section-DcocgDAN.js.map +1 -0
- package/dist/{data-keys-and-values-4pYpSbqS.cjs → data-keys-and-values-BduKvvC5.cjs} +2 -2
- package/dist/{data-keys-and-values-4pYpSbqS.cjs.map → data-keys-and-values-BduKvvC5.cjs.map} +1 -1
- package/dist/{data-keys-and-values-j0NVKPOl.js → data-keys-and-values-DhC4U4Yl.js} +2 -2
- package/dist/{data-keys-and-values-j0NVKPOl.js.map → data-keys-and-values-DhC4U4Yl.js.map} +1 -1
- package/dist/{data-list-DnSdaRES.js → data-list-gN4SP7a8.js} +5 -5
- package/dist/{data-list-DnSdaRES.js.map → data-list-gN4SP7a8.js.map} +1 -1
- package/dist/{data-list-skeleton-ADXw-opu.cjs → data-list-skeleton-DYG2LLri.cjs} +2 -2
- package/dist/{data-list-skeleton-ADXw-opu.cjs.map → data-list-skeleton-DYG2LLri.cjs.map} +1 -1
- package/dist/{data-list-skeleton-D7-glFuk.js → data-list-skeleton-PXHovGLv.js} +2 -2
- package/dist/{data-list-skeleton-D7-glFuk.js.map → data-list-skeleton-PXHovGLv.js.map} +1 -1
- package/dist/{data-list-spacer-DRHNUeeP.js → data-list-spacer-D-AQzTYw.js} +3 -3
- package/dist/{data-list-spacer-DRHNUeeP.js.map → data-list-spacer-D-AQzTYw.js.map} +1 -1
- package/dist/{data-list-spacer-EWo65MrK.cjs → data-list-spacer-MpuBsXjL.cjs} +3 -3
- package/dist/{data-list-spacer-EWo65MrK.cjs.map → data-list-spacer-MpuBsXjL.cjs.map} +1 -1
- package/dist/{data-list-top-DLwt_Sv-.js → data-list-top-BTeM7hI4.js} +5 -5
- package/dist/{data-list-top-DLwt_Sv-.js.map → data-list-top-BTeM7hI4.js.map} +1 -1
- package/dist/{data-list-top-RK_yX6z8.cjs → data-list-top-DDux1Eu4.cjs} +5 -5
- package/dist/{data-list-top-RK_yX6z8.cjs.map → data-list-top-DDux1Eu4.cjs.map} +1 -1
- package/dist/{data-list-CypPKOQ_.cjs → data-list-yJm-3f2w.cjs} +5 -5
- package/dist/{data-list-CypPKOQ_.cjs.map → data-list-yJm-3f2w.cjs.map} +1 -1
- package/dist/{data-panel-CWZJKBeW.cjs → data-panel-CM3N_4M7.cjs} +9 -9
- package/dist/{data-panel-CWZJKBeW.cjs.map → data-panel-CM3N_4M7.cjs.map} +1 -1
- package/dist/{data-panel-CWjgS1Gh.js → data-panel-D3UfzCoE.js} +9 -9
- package/dist/{data-panel-CWjgS1Gh.js.map → data-panel-D3UfzCoE.js.map} +1 -1
- package/dist/{date-time-range-picker-C6hjZswK.cjs → date-time-range-picker-2Pkg-FoU.cjs} +6 -7
- package/dist/{date-time-range-picker-C6hjZswK.cjs.map → date-time-range-picker-2Pkg-FoU.cjs.map} +1 -1
- package/dist/{date-time-range-picker-BcjLbkGu.js → date-time-range-picker-DHg-fuV3.js} +5 -6
- package/dist/{date-time-range-picker-BcjLbkGu.js.map → date-time-range-picker-DHg-fuV3.js.map} +1 -1
- package/dist/{dialog-Dm33cZqt.cjs → dialog-Cyj59QsZ.cjs} +3 -3
- package/dist/{dialog-Dm33cZqt.cjs.map → dialog-Cyj59QsZ.cjs.map} +1 -1
- package/dist/{dialog-DRpMek34.js → dialog-D8fuBETk.js} +3 -3
- package/dist/{dialog-DRpMek34.js.map → dialog-D8fuBETk.js.map} +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-list.cjs.js +1 -1
- package/dist/domains/chat/attachments/composer-attachment-list.es.js +1 -1
- 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 +2 -2
- package/dist/domains/chat/components/badge-wrapper.cjs.js.map +1 -1
- package/dist/domains/chat/components/badge-wrapper.es.js +2 -2
- package/dist/domains/chat/components/badge-wrapper.es.js.map +1 -1
- package/dist/domains/chat/components/loading-badge.cjs.js +1 -1
- package/dist/domains/chat/components/loading-badge.es.js +1 -1
- package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js +4 -4
- package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js.map +1 -1
- package/dist/domains/chat/components/network-choice-metadata-dialog.es.js +4 -4
- package/dist/domains/chat/components/network-choice-metadata-dialog.es.js.map +1 -1
- package/dist/domains/chat/messages/notification-signal-notice.cjs.js +1 -1
- package/dist/domains/chat/messages/notification-signal-notice.es.js +1 -1
- package/dist/domains/chat/messages/reasoning-streaming-line.cjs.js +1 -1
- package/dist/domains/chat/messages/reasoning-streaming-line.cjs.js.map +1 -1
- package/dist/domains/chat/messages/reasoning-streaming-line.es.js +1 -1
- package/dist/domains/chat/messages/reasoning-streaming-line.es.js.map +1 -1
- package/dist/domains/chat/messages/reasoning.cjs.js +4 -4
- package/dist/domains/chat/messages/reasoning.cjs.js.map +1 -1
- package/dist/domains/chat/messages/reasoning.es.js +4 -4
- package/dist/domains/chat/messages/reasoning.es.js.map +1 -1
- package/dist/domains/chat/messages/renderers/message-text.cjs.js +2 -2
- package/dist/domains/chat/messages/renderers/message-text.es.js +2 -2
- package/dist/domains/chat/messages/renderers/status-renderers.cjs.js +1 -1
- package/dist/domains/chat/messages/renderers/status-renderers.es.js +1 -1
- package/dist/domains/chat/messages/signal-badge.cjs.js +1 -1
- package/dist/domains/chat/messages/signal-badge.es.js +1 -1
- package/dist/domains/chat/messages/system-reminder-badge.cjs.js +6 -6
- package/dist/domains/chat/messages/system-reminder-badge.cjs.js.map +1 -1
- package/dist/domains/chat/messages/system-reminder-badge.es.js +6 -6
- package/dist/domains/chat/messages/system-reminder-badge.es.js.map +1 -1
- package/dist/domains/chat/messages/tripwire-notice.cjs.js +3 -3
- package/dist/domains/chat/messages/tripwire-notice.cjs.js.map +1 -1
- package/dist/domains/chat/messages/tripwire-notice.es.js +3 -3
- package/dist/domains/chat/messages/tripwire-notice.es.js.map +1 -1
- package/dist/domains/chat/tools/badges/ask-user-badge.cjs.js +2 -2
- package/dist/domains/chat/tools/badges/ask-user-badge.cjs.js.map +1 -1
- package/dist/domains/chat/tools/badges/ask-user-badge.es.js +2 -2
- package/dist/domains/chat/tools/badges/ask-user-badge.es.js.map +1 -1
- package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js +5 -5
- package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js.map +1 -1
- package/dist/domains/chat/tools/badges/code-mode-badge.es.js +5 -5
- package/dist/domains/chat/tools/badges/code-mode-badge.es.js.map +1 -1
- package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js +29 -29
- package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js.map +1 -1
- package/dist/domains/chat/tools/badges/observation-marker-badge.es.js +29 -29
- package/dist/domains/chat/tools/badges/observation-marker-badge.es.js.map +1 -1
- package/dist/domains/chat/tools/badges/observation-renderer.cjs.js +11 -11
- package/dist/domains/chat/tools/badges/observation-renderer.cjs.js.map +1 -1
- package/dist/domains/chat/tools/badges/observation-renderer.es.js +11 -11
- package/dist/domains/chat/tools/badges/observation-renderer.es.js.map +1 -1
- package/dist/domains/chat/tools/badges/tool-approval-buttons.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/tool-approval-buttons.es.js +1 -1
- package/dist/domains/logs/components/log-details-view.cjs.js +10 -12
- package/dist/domains/logs/components/log-details-view.cjs.js.map +1 -1
- package/dist/domains/logs/components/log-details-view.es.js +10 -12
- package/dist/domains/logs/components/log-details-view.es.js.map +1 -1
- package/dist/domains/logs/components/logs-error-content.cjs.js +4 -7
- package/dist/domains/logs/components/logs-error-content.cjs.js.map +1 -1
- package/dist/domains/logs/components/logs-error-content.es.js +4 -7
- package/dist/domains/logs/components/logs-error-content.es.js.map +1 -1
- package/dist/domains/logs/components/logs-list-view.cjs.js +2 -2
- package/dist/domains/logs/components/logs-list-view.es.js +2 -2
- package/dist/domains/logs/components/logs-toolbar.cjs.js +1 -1
- package/dist/domains/logs/components/logs-toolbar.cjs.js.map +1 -1
- package/dist/domains/logs/components/logs-toolbar.es.js +1 -1
- package/dist/domains/logs/components/logs-toolbar.es.js.map +1 -1
- package/dist/domains/logs/components/no-logs-info.cjs.js +6 -6
- package/dist/domains/logs/components/no-logs-info.cjs.js.map +1 -1
- package/dist/domains/logs/components/no-logs-info.es.js +7 -7
- package/dist/domains/logs/components/no-logs-info.es.js.map +1 -1
- package/dist/domains/memory/components/flame-graph.cjs.js +19 -19
- package/dist/domains/memory/components/flame-graph.cjs.js.map +1 -1
- package/dist/domains/memory/components/flame-graph.es.js +19 -19
- package/dist/domains/memory/components/flame-graph.es.js.map +1 -1
- package/dist/domains/memory/components/memory-studio-panel.cjs.js +4 -4
- package/dist/domains/memory/components/memory-studio-panel.cjs.js.map +1 -1
- package/dist/domains/memory/components/memory-studio-panel.es.js +4 -4
- package/dist/domains/memory/components/memory-studio-panel.es.js.map +1 -1
- package/dist/domains/memory/components/observation-detail-view.cjs.js +17 -18
- package/dist/domains/memory/components/observation-detail-view.cjs.js.map +1 -1
- package/dist/domains/memory/components/observation-detail-view.es.js +17 -18
- package/dist/domains/memory/components/observation-detail-view.es.js.map +1 -1
- package/dist/domains/memory/components/thread-context-progress.cjs.js +3 -3
- package/dist/domains/memory/components/thread-context-progress.cjs.js.map +1 -1
- package/dist/domains/memory/components/thread-context-progress.es.js +3 -3
- package/dist/domains/memory/components/thread-context-progress.es.js.map +1 -1
- package/dist/domains/metrics/components/bar-list.cjs.js +9 -9
- package/dist/domains/metrics/components/bar-list.cjs.js.map +1 -1
- package/dist/domains/metrics/components/bar-list.es.js +9 -9
- package/dist/domains/metrics/components/bar-list.es.js.map +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/kpi-card-view.cjs.js +1 -1
- package/dist/domains/metrics/components/kpi-card-view.es.js +1 -1
- package/dist/domains/metrics/components/latency-card-view.cjs.js +5 -5
- package/dist/domains/metrics/components/latency-card-view.es.js +5 -5
- package/dist/domains/metrics/components/memory-card-view.cjs.js +5 -5
- package/dist/domains/metrics/components/memory-card-view.es.js +5 -5
- package/dist/domains/metrics/components/model-usage-cost-card-view.cjs.js +2 -2
- package/dist/domains/metrics/components/model-usage-cost-card-view.es.js +2 -2
- package/dist/domains/metrics/components/scores-card-view.cjs.js +6 -6
- package/dist/domains/metrics/components/scores-card-view.es.js +6 -6
- package/dist/domains/metrics/components/token-usage-by-agent-card-view.cjs.js +5 -5
- package/dist/domains/metrics/components/token-usage-by-agent-card-view.es.js +5 -5
- package/dist/domains/metrics/components/token-usage-timeline-card-view.cjs.js +5 -5
- package/dist/domains/metrics/components/token-usage-timeline-card-view.es.js +5 -5
- package/dist/domains/metrics/components/traces-volume-card-view.cjs.js +5 -5
- package/dist/domains/metrics/components/traces-volume-card-view.es.js +5 -5
- package/dist/domains/traces/components/no-traces-info.cjs.js +2 -3
- package/dist/domains/traces/components/no-traces-info.cjs.js.map +1 -1
- package/dist/domains/traces/components/no-traces-info.es.js +2 -3
- package/dist/domains/traces/components/no-traces-info.es.js.map +1 -1
- package/dist/domains/traces/components/span-data-panel-view.cjs.js +7 -7
- package/dist/domains/traces/components/span-data-panel-view.es.js +7 -7
- 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 +3 -3
- package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +3 -3
- package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +3 -3
- package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +3 -3
- package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +4 -4
- package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +4 -4
- 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 +3 -3
- package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +3 -3
- package/dist/domains/traces/components/span-payload/span-payload-section.cjs.js +4 -6
- package/dist/domains/traces/components/span-payload/span-payload-section.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-section.es.js +4 -6
- package/dist/domains/traces/components/span-payload/span-payload-section.es.js.map +1 -1
- 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-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 +4 -4
- package/dist/domains/traces/components/span-timeline-row.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-timeline-row.es.js +4 -4
- package/dist/domains/traces/components/span-timeline-row.es.js.map +1 -1
- package/dist/domains/traces/components/span-timing-hover-card.cjs.js +2 -2
- package/dist/domains/traces/components/span-timing-hover-card.es.js +2 -2
- package/dist/domains/traces/components/span-token-usage.cjs.js +5 -5
- package/dist/domains/traces/components/span-token-usage.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-token-usage.es.js +5 -5
- package/dist/domains/traces/components/span-token-usage.es.js.map +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js +2 -2
- package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js.map +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js +2 -2
- package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js.map +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-messages.cjs.js +4 -4
- package/dist/domains/traces/components/thread-trace/thread-trace-messages.es.js +4 -4
- package/dist/domains/traces/components/thread-trace/thread-trace-rail.cjs.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-rail.es.js +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.cjs.js.map +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-spans.es.js +2 -2
- package/dist/domains/traces/components/thread-trace/thread-trace-spans.es.js.map +1 -1
- package/dist/domains/traces/components/timeline-name-col.cjs.js +2 -2
- package/dist/domains/traces/components/timeline-name-col.cjs.js.map +1 -1
- package/dist/domains/traces/components/timeline-name-col.es.js +2 -2
- package/dist/domains/traces/components/timeline-name-col.es.js.map +1 -1
- package/dist/domains/traces/components/timeline-structure-sign.cjs.js +1 -1
- package/dist/domains/traces/components/timeline-structure-sign.cjs.js.map +1 -1
- package/dist/domains/traces/components/timeline-structure-sign.es.js +1 -1
- package/dist/domains/traces/components/timeline-structure-sign.es.js.map +1 -1
- package/dist/domains/traces/components/timeline-timing-col.cjs.js +2 -2
- package/dist/domains/traces/components/timeline-timing-col.cjs.js.map +1 -1
- package/dist/domains/traces/components/timeline-timing-col.es.js +2 -2
- package/dist/domains/traces/components/timeline-timing-col.es.js.map +1 -1
- package/dist/domains/traces/components/trace-columns-menu.cjs.js +8 -8
- package/dist/domains/traces/components/trace-columns-menu.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-columns-menu.es.js +6 -6
- package/dist/domains/traces/components/trace-columns-menu.es.js.map +1 -1
- package/dist/domains/traces/components/trace-data-panel-view.cjs.js +11 -13
- 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 +11 -13
- package/dist/domains/traces/components/trace-data-panel-view.es.js.map +1 -1
- package/dist/domains/traces/components/trace-id-button.cjs.js +1 -1
- package/dist/domains/traces/components/trace-id-button.es.js +1 -1
- package/dist/domains/traces/components/trace-keys-and-values.cjs.js +1 -1
- package/dist/domains/traces/components/trace-keys-and-values.es.js +1 -1
- package/dist/domains/traces/components/trace-span-timeline.cjs.js +1 -1
- package/dist/domains/traces/components/trace-span-timeline.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-span-timeline.es.js +1 -1
- package/dist/domains/traces/components/trace-span-timeline.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-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-error-content.cjs.js +3 -3
- package/dist/domains/traces/components/traces-error-content.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-error-content.es.js +3 -3
- package/dist/domains/traces/components/traces-error-content.es.js.map +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 +5 -5
- package/dist/domains/traces/components/traces-list-view.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-list-view.es.js +5 -5
- package/dist/domains/traces/components/traces-list-view.es.js.map +1 -1
- package/dist/domains/traces/components/traces-page-skeleton.cjs.js +3 -1
- package/dist/domains/traces/components/traces-page-skeleton.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-page-skeleton.es.js +3 -1
- package/dist/domains/traces/components/traces-page-skeleton.es.js.map +1 -1
- package/dist/domains/traces/hooks/use-trace-url-state.cjs.js +4 -2
- package/dist/domains/traces/hooks/use-trace-url-state.cjs.js.map +1 -1
- package/dist/domains/traces/hooks/use-trace-url-state.es.js +5 -3
- package/dist/domains/traces/hooks/use-trace-url-state.es.js.map +1 -1
- package/dist/domains/traces/trace-filters.cjs.js +92 -11
- package/dist/domains/traces/trace-filters.cjs.js.map +1 -1
- package/dist/domains/traces/trace-filters.es.js +87 -13
- package/dist/domains/traces/trace-filters.es.js.map +1 -1
- package/dist/domains/traces/trace-query-filters.cjs.js +76 -45
- package/dist/domains/traces/trace-query-filters.cjs.js.map +1 -1
- package/dist/domains/traces/trace-query-filters.es.js +76 -46
- package/dist/domains/traces/trace-query-filters.es.js.map +1 -1
- package/dist/domains/traces.cjs.js +7 -0
- package/dist/domains/traces.cjs.js.map +1 -1
- package/dist/domains/traces.es.js +2 -2
- package/dist/{drawer-BL5shtHH.cjs → drawer-9eoZbmRK.cjs} +5 -5
- package/dist/{drawer-BL5shtHH.cjs.map → drawer-9eoZbmRK.cjs.map} +1 -1
- package/dist/{drawer-Bv2DRY8E.js → drawer-DnfOugYZ.js} +5 -5
- package/dist/{drawer-Bv2DRY8E.js.map → drawer-DnfOugYZ.js.map} +1 -1
- package/dist/{dropdown-menu-DL0MzjEb.js → dropdown-menu-DpEn6HwK.js} +2 -7
- package/dist/dropdown-menu-DpEn6HwK.js.map +1 -0
- package/dist/{dropdown-menu-DNRCA4Gj.cjs → dropdown-menu-j2y37TL5.cjs} +2 -7
- package/dist/dropdown-menu-j2y37TL5.cjs.map +1 -0
- package/dist/ee/signals/components/entity-index-compact-grid.cjs.js +4 -4
- package/dist/ee/signals/components/entity-index-compact-grid.cjs.js.map +1 -1
- package/dist/ee/signals/components/entity-index-compact-grid.es.js +4 -4
- package/dist/ee/signals/components/entity-index-compact-grid.es.js.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 +34 -34
- package/dist/ee/signals/components/signals-empty-state.cjs.js.map +1 -1
- package/dist/ee/signals/components/signals-empty-state.es.js +34 -34
- package/dist/ee/signals/components/signals-empty-state.es.js.map +1 -1
- package/dist/ee/signals/components/trace-intelligence-entity-detail.cjs.js +5 -7
- 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 +5 -7
- 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 +15 -17
- 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 +16 -18
- package/dist/ee/signals/components/trace-intelligence-entity-index.es.js.map +1 -1
- package/dist/ee/signals/examples-pager.cjs.js +2 -2
- package/dist/ee/signals/examples-pager.cjs.js.map +1 -1
- package/dist/ee/signals/examples-pager.es.js +2 -2
- package/dist/ee/signals/examples-pager.es.js.map +1 -1
- package/dist/ee/signals/flow-card.cjs.js +6 -6
- package/dist/ee/signals/flow-card.cjs.js.map +1 -1
- package/dist/ee/signals/flow-card.es.js +6 -6
- package/dist/ee/signals/flow-card.es.js.map +1 -1
- package/dist/ee/signals/lifeline-row.cjs.js +4 -4
- package/dist/ee/signals/lifeline-row.cjs.js.map +1 -1
- package/dist/ee/signals/lifeline-row.es.js +4 -4
- package/dist/ee/signals/lifeline-row.es.js.map +1 -1
- package/dist/ee/signals/noise-detail-panel.cjs.js +12 -12
- package/dist/ee/signals/noise-detail-panel.cjs.js.map +1 -1
- package/dist/ee/signals/noise-detail-panel.es.js +12 -12
- package/dist/ee/signals/noise-detail-panel.es.js.map +1 -1
- package/dist/ee/signals/sankey-signals.cjs.js +6 -6
- package/dist/ee/signals/sankey-signals.cjs.js.map +1 -1
- package/dist/ee/signals/sankey-signals.es.js +6 -6
- package/dist/ee/signals/sankey-signals.es.js.map +1 -1
- package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js +13 -14
- package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js.map +1 -1
- package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +6 -7
- package/dist/ee/signals/settings/signal-definition-form-dialog.es.js.map +1 -1
- package/dist/ee/signals/settings/trace-signal-settings.cjs.js +9 -9
- package/dist/ee/signals/settings/trace-signal-settings.cjs.js.map +1 -1
- package/dist/ee/signals/settings/trace-signal-settings.es.js +9 -9
- package/dist/ee/signals/settings/trace-signal-settings.es.js.map +1 -1
- package/dist/ee/signals/signal-delta-column.cjs.js +7 -7
- package/dist/ee/signals/signal-delta-column.cjs.js.map +1 -1
- package/dist/ee/signals/signal-delta-column.es.js +7 -7
- package/dist/ee/signals/signal-delta-column.es.js.map +1 -1
- package/dist/ee/signals/signal-lifelines.cjs.js +2 -2
- package/dist/ee/signals/signal-lifelines.cjs.js.map +1 -1
- package/dist/ee/signals/signal-lifelines.es.js +2 -2
- package/dist/ee/signals/signal-lifelines.es.js.map +1 -1
- package/dist/ee/signals/signals-error-state.cjs.js +3 -3
- package/dist/ee/signals/signals-error-state.cjs.js.map +1 -1
- package/dist/ee/signals/signals-error-state.es.js +3 -3
- package/dist/ee/signals/signals-error-state.es.js.map +1 -1
- package/dist/ee/signals/signals-loading-skeleton.cjs.js +1 -1
- package/dist/ee/signals/signals-loading-skeleton.cjs.js.map +1 -1
- package/dist/ee/signals/signals-loading-skeleton.es.js +1 -1
- package/dist/ee/signals/signals-loading-skeleton.es.js.map +1 -1
- package/dist/ee/signals/snapshot-timeline.cjs.js +5 -5
- package/dist/ee/signals/snapshot-timeline.cjs.js.map +1 -1
- package/dist/ee/signals/snapshot-timeline.es.js +5 -5
- package/dist/ee/signals/snapshot-timeline.es.js.map +1 -1
- package/dist/ee/signals/sortable-signal-headers.cjs.js +1 -1
- package/dist/ee/signals/sortable-signal-headers.cjs.js.map +1 -1
- package/dist/ee/signals/sortable-signal-headers.es.js +1 -1
- package/dist/ee/signals/sortable-signal-headers.es.js.map +1 -1
- package/dist/ee/signals/theme-compare-sparkline.cjs.js +1 -1
- package/dist/ee/signals/theme-compare-sparkline.cjs.js.map +1 -1
- package/dist/ee/signals/theme-compare-sparkline.es.js +1 -1
- package/dist/ee/signals/theme-compare-sparkline.es.js.map +1 -1
- package/dist/ee/signals/theme-compare.cjs.js +5 -5
- package/dist/ee/signals/theme-compare.cjs.js.map +1 -1
- package/dist/ee/signals/theme-compare.es.js +5 -5
- package/dist/ee/signals/theme-compare.es.js.map +1 -1
- package/dist/ee/signals/theme-detail-panel.cjs.js +18 -18
- package/dist/ee/signals/theme-detail-panel.cjs.js.map +1 -1
- package/dist/ee/signals/theme-detail-panel.es.js +18 -18
- package/dist/ee/signals/theme-detail-panel.es.js.map +1 -1
- package/dist/ee/signals/theme-filter-banner.cjs.js +2 -2
- package/dist/ee/signals/theme-filter-banner.cjs.js.map +1 -1
- package/dist/ee/signals/theme-filter-banner.es.js +2 -2
- package/dist/ee/signals/theme-filter-banner.es.js.map +1 -1
- package/dist/ee/signals/theme-lifelines.cjs.js +1 -1
- package/dist/ee/signals/theme-lifelines.cjs.js.map +1 -1
- package/dist/ee/signals/theme-lifelines.es.js +1 -1
- package/dist/ee/signals/theme-lifelines.es.js.map +1 -1
- package/dist/ee/signals/theme-trend-chart.cjs.js +1 -1
- package/dist/ee/signals/theme-trend-chart.cjs.js.map +1 -1
- package/dist/ee/signals/theme-trend-chart.es.js +1 -1
- package/dist/ee/signals/theme-trend-chart.es.js.map +1 -1
- package/dist/ee/signals/trace-insight-view.cjs.js +12 -12
- package/dist/ee/signals/trace-insight-view.cjs.js.map +1 -1
- package/dist/ee/signals/trace-insight-view.es.js +12 -12
- package/dist/ee/signals/trace-insight-view.es.js.map +1 -1
- package/dist/ee/signals/trace-intelligence-explainer.cjs.js +2 -2
- package/dist/ee/signals/trace-intelligence-explainer.cjs.js.map +1 -1
- package/dist/ee/signals/trace-intelligence-explainer.es.js +2 -2
- package/dist/ee/signals/trace-intelligence-explainer.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/ee/topics/components/topics-layout.cjs.js +3 -3
- package/dist/ee/topics/components/topics-layout.cjs.js.map +1 -1
- package/dist/ee/topics/components/topics-layout.es.js +3 -3
- package/dist/ee/topics/components/topics-layout.es.js.map +1 -1
- package/dist/{field-block-Dy1IaWbv.cjs → field-error-id-6EfqmQ4C.cjs} +5 -2
- package/dist/field-error-id-6EfqmQ4C.cjs.map +1 -0
- package/dist/{field-block-DWkbNcsV.js → field-error-id-DyWx33Fu.js} +5 -3
- package/dist/field-error-id-DyWx33Fu.js.map +1 -0
- package/dist/{filter-bar-chip-BxI0NgEz.cjs → filter-bar-chip-D8O9jpCW.cjs} +300 -69
- package/dist/filter-bar-chip-D8O9jpCW.cjs.map +1 -0
- package/dist/{filter-bar-chip-C-JxWUU8.js → filter-bar-chip-DMhUPTt8.js} +297 -71
- package/dist/filter-bar-chip-DMhUPTt8.js.map +1 -0
- package/dist/filter-bar-chip.css +33 -1
- package/dist/hooks/use-fluid-hover.cjs.js +15 -9
- package/dist/hooks/use-fluid-hover.cjs.js.map +1 -1
- package/dist/hooks/use-fluid-hover.es.js +15 -9
- package/dist/hooks/use-fluid-hover.es.js.map +1 -1
- package/dist/{horizontal-bars-nyWGmQ7g.cjs → horizontal-bars-BkVi2dEb.cjs} +7 -7
- package/dist/{horizontal-bars-nyWGmQ7g.cjs.map → horizontal-bars-BkVi2dEb.cjs.map} +1 -1
- package/dist/{horizontal-bars-CksEKcCE.js → horizontal-bars-nTOFylzc.js} +7 -7
- package/dist/{horizontal-bars-CksEKcCE.js.map → horizontal-bars-nTOFylzc.js.map} +1 -1
- package/dist/{hover-card-Ch5smNcf.js → hover-card-B1-n3amu.js} +3 -3
- package/dist/{hover-card-Ch5smNcf.js.map → hover-card-B1-n3amu.js.map} +1 -1
- package/dist/{hover-card-DdHnkGcs.cjs → hover-card-DVfZ2INZ.cjs} +3 -3
- package/dist/{hover-card-DdHnkGcs.cjs.map → hover-card-DVfZ2INZ.cjs.map} +1 -1
- package/dist/icons/Icon.cjs.js +1 -1
- package/dist/icons/Icon.cjs.js.map +1 -1
- package/dist/icons/Icon.es.js +1 -1
- package/dist/icons/Icon.es.js.map +1 -1
- package/dist/{input-group-CvWwK1Vz.cjs → input-group-2yWKRuq9.cjs} +7 -5
- package/dist/input-group-2yWKRuq9.cjs.map +1 -0
- package/dist/{input-group-BEdHivvy.js → input-group-Czviwtvr.js} +8 -6
- package/dist/input-group-Czviwtvr.js.map +1 -0
- package/dist/{kbd-CINtikLh.js → kbd-BDVTQHD_.js} +2 -2
- package/dist/{kbd-CINtikLh.js.map → kbd-BDVTQHD_.js.map} +1 -1
- package/dist/{kbd-B-Z2sNvK.cjs → kbd-BptPsKP6.cjs} +2 -2
- package/dist/{kbd-B-Z2sNvK.cjs.map → kbd-BptPsKP6.cjs.map} +1 -1
- package/dist/layout/tabbed-container.cjs.js +6 -6
- package/dist/layout/tabbed-container.es.js +6 -6
- package/dist/{list-search-BTW0Neuc.js → list-search-Jm6SLN0g.js} +2 -2
- package/dist/{list-search-BTW0Neuc.js.map → list-search-Jm6SLN0g.js.map} +1 -1
- package/dist/{list-search-vyxsZMAK.cjs → list-search-s3DRIfz6.cjs} +2 -2
- package/dist/{list-search-vyxsZMAK.cjs.map → list-search-s3DRIfz6.cjs.map} +1 -1
- package/dist/{logs-data-list-BSHJPGi6.cjs → logs-data-list-C5tjRtkQ.cjs} +5 -5
- package/dist/{logs-data-list-BSHJPGi6.cjs.map → logs-data-list-C5tjRtkQ.cjs.map} +1 -1
- package/dist/{logs-data-list-CG-UgC_x.js → logs-data-list-Cl3abARp.js} +5 -5
- package/dist/{logs-data-list-CG-UgC_x.js.map → logs-data-list-Cl3abARp.js.map} +1 -1
- package/dist/{main-sidebar-link-active-DbCvKZy2.cjs → main-sidebar-BsEmFpKN.cjs} +122 -9
- package/dist/main-sidebar-BsEmFpKN.cjs.map +1 -0
- package/dist/{main-sidebar-link-active-CmDoiX6g.js → main-sidebar-C5PU7zgc.js} +123 -11
- package/dist/main-sidebar-C5PU7zgc.js.map +1 -0
- package/dist/{markdown-renderer-D8qYAU7K.cjs → markdown-renderer-C74wABzc.cjs} +6 -7
- package/dist/markdown-renderer-C74wABzc.cjs.map +1 -0
- package/dist/{markdown-renderer-B0gTm_Ea.js → markdown-renderer-DZAcPOxC.js} +6 -7
- package/dist/markdown-renderer-DZAcPOxC.js.map +1 -0
- package/dist/{message-BrwbcLPi.js → message-Cs8NW-MR.js} +2 -2
- package/dist/{message-BrwbcLPi.js.map → message-Cs8NW-MR.js.map} +1 -1
- package/dist/{message-CszposMZ.cjs → message-D9b33Pf_.cjs} +2 -2
- package/dist/{message-CszposMZ.cjs.map → message-D9b33Pf_.cjs.map} +1 -1
- package/dist/{metrics-card-BUJxiwec.cjs → metrics-card-BdWGPlnt.cjs} +8 -8
- package/dist/metrics-card-BdWGPlnt.cjs.map +1 -0
- package/dist/{metrics-card-BlBt1WHw.js → metrics-card-C5znWn69.js} +8 -8
- package/dist/metrics-card-C5znWn69.js.map +1 -0
- package/dist/{metrics-kpi-card-CBSNmtc5.js → metrics-kpi-card-CinKYTBn.js} +4 -4
- package/dist/{metrics-kpi-card-CBSNmtc5.js.map → metrics-kpi-card-CinKYTBn.js.map} +1 -1
- package/dist/{metrics-kpi-card-CgqmNcEC.cjs → metrics-kpi-card-HU17WRTT.cjs} +4 -4
- package/dist/{metrics-kpi-card-CgqmNcEC.cjs.map → metrics-kpi-card-HU17WRTT.cjs.map} +1 -1
- package/dist/{metrics-line-chart-B_sP3eiL.cjs → metrics-line-chart-0FR3SYSt.cjs} +3 -3
- package/dist/{metrics-line-chart-B_sP3eiL.cjs.map → metrics-line-chart-0FR3SYSt.cjs.map} +1 -1
- package/dist/{metrics-line-chart-DHyrDPkJ.js → metrics-line-chart-knlgw8bV.js} +3 -3
- package/dist/{metrics-line-chart-DHyrDPkJ.js.map → metrics-line-chart-knlgw8bV.js.map} +1 -1
- package/dist/new/layout/app-shell.cjs.js +23 -28
- package/dist/new/layout/app-shell.cjs.js.map +1 -1
- package/dist/new/layout/app-shell.es.js +23 -28
- package/dist/new/layout/app-shell.es.js.map +1 -1
- package/dist/new/layout/page-header.cjs.js +1 -1
- package/dist/new/layout/page-header.es.js +1 -1
- package/dist/new/settings.cjs.js +1 -1
- package/dist/new/settings.es.js +1 -1
- package/dist/new/sidebar.cjs.js +40 -40
- package/dist/new/sidebar.cjs.js.map +1 -1
- package/dist/new/sidebar.es.js +10 -10
- package/dist/new/sidebar.es.js.map +1 -1
- package/dist/{page-header-BIoUf7MA.js → page-header-CSigVThQ.js} +2 -2
- package/dist/{page-header-BIoUf7MA.js.map → page-header-CSigVThQ.js.map} +1 -1
- package/dist/{page-header-BBlPmW-T.cjs → page-header-DzEEkOca.cjs} +2 -2
- package/dist/{page-header-BBlPmW-T.cjs.map → page-header-DzEEkOca.cjs.map} +1 -1
- package/dist/primitives/control-size.cjs.js +24 -2
- package/dist/primitives/control-size.cjs.js.map +1 -1
- package/dist/primitives/control-size.es.js +5 -3
- package/dist/primitives/control-size.es.js.map +1 -1
- package/dist/primitives/fluid-menu.cjs.js +30 -18
- package/dist/primitives/fluid-menu.cjs.js.map +1 -1
- package/dist/primitives/fluid-menu.es.js +30 -18
- package/dist/primitives/fluid-menu.es.js.map +1 -1
- package/dist/primitives/form-element.cjs.js +4 -4
- package/dist/primitives/form-element.cjs.js.map +1 -1
- package/dist/primitives/form-element.es.js +4 -3
- package/dist/primitives/form-element.es.js.map +1 -1
- package/dist/primitives/menu-item.cjs.js +7 -4
- package/dist/primitives/menu-item.cjs.js.map +1 -1
- package/dist/primitives/menu-item.es.js +7 -4
- package/dist/primitives/menu-item.es.js.map +1 -1
- package/dist/primitives/trigger-button.cjs.js +1 -1
- package/dist/primitives/trigger-button.es.js +1 -1
- package/dist/{property-filter-applied-BBiUbtr0.js → property-filter-applied-C15IJHLs.js} +30 -36
- package/dist/property-filter-applied-C15IJHLs.js.map +1 -0
- package/dist/{property-filter-applied-BmxCPe2d.cjs → property-filter-applied-DtSjGypB.cjs} +30 -36
- package/dist/property-filter-applied-DtSjGypB.cjs.map +1 -0
- package/dist/radio-group-BdEPWGzi.cjs +62 -0
- package/dist/radio-group-BdEPWGzi.cjs.map +1 -0
- package/dist/radio-group-CFZXUXZ5.js +40 -0
- package/dist/radio-group-CFZXUXZ5.js.map +1 -0
- package/dist/resize/collapsible-panel.cjs.js +1 -1
- package/dist/resize/collapsible-panel.es.js +1 -1
- package/dist/resize/panel-drawer.cjs.js +1 -1
- package/dist/resize/panel-drawer.es.js +1 -1
- package/dist/{sankey-chart-Bcm9jMhe.cjs → sankey-chart-C1e0nRc3.cjs} +4 -4
- package/dist/{sankey-chart-Bcm9jMhe.cjs.map → sankey-chart-C1e0nRc3.cjs.map} +1 -1
- package/dist/{sankey-chart-CqngN2lw.js → sankey-chart-jvMXKzud.js} +4 -4
- package/dist/{sankey-chart-CqngN2lw.js.map → sankey-chart-jvMXKzud.js.map} +1 -1
- package/dist/{scroll-area-Qjf7e0Ik.cjs → scroll-area-BzOyuS8Y.cjs} +2 -2
- package/dist/{scroll-area-Qjf7e0Ik.cjs.map → scroll-area-BzOyuS8Y.cjs.map} +1 -1
- package/dist/{scroll-area-CdQ_5bLm.js → scroll-area-DyTZoISq.js} +2 -2
- package/dist/{scroll-area-CdQ_5bLm.js.map → scroll-area-DyTZoISq.js.map} +1 -1
- package/dist/{search-field-block-D0PUUCAE.cjs → search-field-block-ChXCuPrB.cjs} +9 -10
- package/dist/{search-field-block-D0PUUCAE.cjs.map → search-field-block-ChXCuPrB.cjs.map} +1 -1
- package/dist/{search-field-block-B5vUVTpl.js → search-field-block-nVeIkFXN.js} +3 -4
- package/dist/{search-field-block-B5vUVTpl.js.map → search-field-block-nVeIkFXN.js.map} +1 -1
- package/dist/{select--DXpTg0O.js → select-CDIt5aab.js} +3 -6
- package/dist/select-CDIt5aab.js.map +1 -0
- package/dist/{select-7ACAVdGX.cjs → select-CH5XO18L.cjs} +3 -6
- package/dist/select-CH5XO18L.cjs.map +1 -0
- package/dist/{select-field-block-Bu7UXI2H.js → select-field-block-BtjE0P5d.js} +3 -4
- package/dist/{select-field-block-Bu7UXI2H.js.map → select-field-block-BtjE0P5d.js.map} +1 -1
- package/dist/{select-field-block-W2u2WmN3.cjs → select-field-block-CpzMTsP6.cjs} +9 -10
- package/dist/{select-field-block-W2u2WmN3.cjs.map → select-field-block-CpzMTsP6.cjs.map} +1 -1
- package/dist/{settings-layout-NP_1dC-e.cjs → settings-layout-BGvMSClL.cjs} +2 -2
- package/dist/{settings-layout-NP_1dC-e.cjs.map → settings-layout-BGvMSClL.cjs.map} +1 -1
- package/dist/{settings-layout-C80s-D31.js → settings-layout-DA-JWqW3.js} +2 -2
- package/dist/{settings-layout-C80s-D31.js.map → settings-layout-DA-JWqW3.js.map} +1 -1
- package/dist/{span-payload-primitives-DnRsP93D.cjs → span-payload-primitives-70wznWZl.cjs} +6 -6
- package/dist/{span-payload-primitives-DnRsP93D.cjs.map → span-payload-primitives-70wznWZl.cjs.map} +1 -1
- package/dist/{span-payload-primitives-sbxk4CHC.js → span-payload-primitives-BvoMauDb.js} +6 -6
- package/dist/{span-payload-primitives-sbxk4CHC.js.map → span-payload-primitives-BvoMauDb.js.map} +1 -1
- package/dist/{spinner-CqP-NaB2.cjs → spinner-BCpN7LL9.cjs} +9 -3
- package/dist/spinner-BCpN7LL9.cjs.map +1 -0
- package/dist/{spinner-D2C2DYw8.js → spinner-ylbE0TJA.js} +9 -3
- package/dist/spinner-ylbE0TJA.js.map +1 -0
- package/dist/src/components/fluid-hover-highlight.d.ts +4 -58
- package/dist/src/domains/traces/components/traces-error-content.d.ts +2 -2
- package/dist/src/domains/traces/hooks/use-trace-url-state.d.ts +5 -3
- package/dist/src/domains/traces/trace-filters.d.ts +19 -4
- package/dist/src/domains/traces/trace-query-filters.d.ts +13 -1
- package/dist/src/ds/components/ActionRow/action-row.d.ts +9 -0
- package/dist/src/ds/components/ActionRow/action-row.stories.d.ts +8 -0
- package/dist/src/ds/components/ActionRow/index.d.ts +5 -0
- package/dist/src/ds/components/Badge/badge.stories.d.ts +0 -1
- package/dist/src/ds/components/ButtonsGroup/buttons-group.d.ts +11 -11
- package/dist/src/ds/components/ButtonsGroup/buttons-group.stories.d.ts +17 -7
- package/dist/src/ds/components/EmptyState/EmptyState.d.ts +8 -2
- package/dist/src/ds/components/EmptyState/empty-state.stories.d.ts +1 -0
- package/dist/src/ds/components/ErrorState/ErrorState.d.ts +3 -1
- package/dist/src/ds/components/ErrorState/error-state.stories.d.ts +1 -0
- package/dist/src/ds/components/FilterBar/filter-bar-advanced-chip.d.ts +10 -0
- package/dist/src/ds/components/FilterBar/filter-bar-context.d.ts +46 -9
- package/dist/src/ds/components/FilterBar/filter-bar-group-editor.d.ts +25 -0
- package/dist/src/ds/components/FilterBar/filter-bar-input.d.ts +8 -1
- package/dist/src/ds/components/FilterBar/filter-bar-option-list.d.ts +5 -0
- package/dist/src/ds/components/FilterBar/filter-bar-tree.d.ts +36 -0
- package/dist/src/ds/components/FilterBar/filter-bar.d.ts +28 -7
- package/dist/src/ds/components/FilterBar/filter-bar.stories.d.ts +3 -0
- package/dist/src/ds/components/FilterBar/index.d.ts +6 -1
- package/dist/src/ds/components/FilterBar/types.d.ts +36 -0
- package/dist/src/ds/components/FilterBar/use-settle-on-leave.d.ts +2 -0
- package/dist/src/ds/components/PageLayout/index.d.ts +1 -2
- package/dist/src/ds/components/PageLayout/page-layout.d.ts +13 -11
- package/dist/src/ds/components/PageLayout/page-layout.stories.d.ts +1 -2
- package/dist/src/ds/components/PermissionDenied/PermissionDenied.d.ts +3 -1
- package/dist/src/ds/components/PermissionDenied/permission-denied.stories.d.ts +1 -0
- package/dist/src/ds/components/SessionExpired/SessionExpired.d.ts +3 -1
- package/dist/src/ds/components/SessionExpired/session-expired.stories.d.ts +1 -0
- package/dist/src/ds/components/Spinner/spinner.d.ts +6 -3
- package/dist/src/ds/components/Spinner/spinner.stories.d.ts +1 -0
- package/dist/src/ds/components/ai/ask-user/ask-user.d.ts +13 -8
- package/dist/src/ds/new/layout/app-shell/app-shell.d.ts +2 -8
- package/dist/src/ds/new/layout/app-shell/app-shell.stories.d.ts +0 -1
- package/dist/src/ds/primitives/control-size.d.ts +3 -1
- package/dist/src/ds/primitives/fluid-menu.d.ts +8 -3
- package/dist/src/ds/primitives/form-element.d.ts +1 -2
- package/dist/src/hooks/use-fluid-hover.d.ts +7 -2
- package/dist/style.css +83 -120
- package/dist/{tabs-content-CKC4kIpH.js → tabs-content-BeFlc4E_.js} +2 -2
- package/dist/{tabs-content-CKC4kIpH.js.map → tabs-content-BeFlc4E_.js.map} +1 -1
- package/dist/{tabs-content-Bz6CZuv9.cjs → tabs-content-Cdu6HP8U.cjs} +2 -2
- package/dist/{tabs-content-Bz6CZuv9.cjs.map → tabs-content-Cdu6HP8U.cjs.map} +1 -1
- package/dist/{tabs-root-C5ABfm1F.cjs → tabs-root-BiV8irc3.cjs} +4 -4
- package/dist/{tabs-root-C5ABfm1F.cjs.map → tabs-root-BiV8irc3.cjs.map} +1 -1
- package/dist/{tabs-root-CcEQrwTM.js → tabs-root-CJ3GkDzi.js} +4 -4
- package/dist/{tabs-root-CcEQrwTM.js.map → tabs-root-CJ3GkDzi.js.map} +1 -1
- package/dist/{tabs-tab-BycF4dvx.js → tabs-tab-CoSCf5Ku.js} +2 -2
- package/dist/{tabs-tab-BycF4dvx.js.map → tabs-tab-CoSCf5Ku.js.map} +1 -1
- package/dist/{tabs-tab-DA466DbX.cjs → tabs-tab-J91Szy3Q.cjs} +2 -2
- package/dist/{tabs-tab-DA466DbX.cjs.map → tabs-tab-J91Szy3Q.cjs.map} +1 -1
- package/dist/{text-field-block-BLpLWmu8.cjs → text-field-block-BmWGMw3a.cjs} +8 -9
- package/dist/{text-field-block-BLpLWmu8.cjs.map → text-field-block-BmWGMw3a.cjs.map} +1 -1
- package/dist/{text-field-block--EUJKlY_.js → text-field-block-Cihf0IRw.js} +2 -3
- package/dist/{text-field-block--EUJKlY_.js.map → text-field-block-Cihf0IRw.js.map} +1 -1
- package/dist/{thread-rail-b-8RHNX_.cjs → thread-rail-BVpfkSyT.cjs} +6 -6
- package/dist/{thread-rail-b-8RHNX_.cjs.map → thread-rail-BVpfkSyT.cjs.map} +1 -1
- package/dist/{thread-rail-vsR5C0j4.js → thread-rail-DV89nFnn.js} +6 -6
- package/dist/{thread-rail-vsR5C0j4.js.map → thread-rail-DV89nFnn.js.map} +1 -1
- package/dist/{time-picker-Dlm-C-n4.cjs → time-picker-DXuXFGa-.cjs} +2 -2
- package/dist/{time-picker-Dlm-C-n4.cjs.map → time-picker-DXuXFGa-.cjs.map} +1 -1
- package/dist/{time-picker-DVt1ZUsS.js → time-picker-vFozGRyK.js} +2 -2
- package/dist/{time-picker-DVt1ZUsS.js.map → time-picker-vFozGRyK.js.map} +1 -1
- package/dist/{tool-approval-DB82iiRa.js → tool-approval-C11ECt4s.js} +5 -5
- package/dist/{tool-approval-DB82iiRa.js.map → tool-approval-C11ECt4s.js.map} +1 -1
- package/dist/{tool-approval-Dys524ty.cjs → tool-approval-DODxfqk7.cjs} +5 -5
- package/dist/{tool-approval-Dys524ty.cjs.map → tool-approval-DODxfqk7.cjs.map} +1 -1
- package/dist/{tool-call-K147tCug.js → tool-call-BjAGFbH-.js} +5 -5
- package/dist/{tool-call-K147tCug.js.map → tool-call-BjAGFbH-.js.map} +1 -1
- package/dist/{tool-call-CMRvRE-v.cjs → tool-call-CNBGnCmO.cjs} +5 -5
- package/dist/{tool-call-CMRvRE-v.cjs.map → tool-call-CNBGnCmO.cjs.map} +1 -1
- package/dist/{traces-data-list-CDNE9P8W.js → traces-data-list-BhKK8-wa.js} +7 -7
- package/dist/{traces-data-list-CDNE9P8W.js.map → traces-data-list-BhKK8-wa.js.map} +1 -1
- package/dist/{traces-data-list-B3q_cy6c.cjs → traces-data-list-D58cw23x.cjs} +7 -7
- package/dist/{traces-data-list-B3q_cy6c.cjs.map → traces-data-list-D58cw23x.cjs.map} +1 -1
- package/dist/types-CIPrYAzY.js +9 -0
- package/dist/types-CIPrYAzY.js.map +1 -0
- package/dist/types-Ns4ZNp-g.cjs +12 -0
- package/dist/types-Ns4ZNp-g.cjs.map +1 -0
- package/package.json +6 -7
- package/theme/surfaces.css +2 -2
- package/dist/Button-CVewl8nT.cjs.map +0 -1
- package/dist/Button-cWcBEd-G.js.map +0 -1
- package/dist/EmptyState-CdRjFB06.cjs.map +0 -1
- package/dist/EmptyState-UWXhBp5U.js.map +0 -1
- package/dist/ErrorState-B3uTRAEd.cjs +0 -16
- package/dist/ErrorState-B3uTRAEd.cjs.map +0 -1
- package/dist/ErrorState-DqRx8Dw_.js +0 -14
- package/dist/ErrorState-DqRx8Dw_.js.map +0 -1
- package/dist/PermissionDenied-B6TSGolC.js.map +0 -1
- package/dist/PermissionDenied-Dz5qXpQj.cjs.map +0 -1
- package/dist/SessionExpired-Bq5LcsDu.js.map +0 -1
- package/dist/SessionExpired-CF0BGNo_.cjs.map +0 -1
- package/dist/ask-user-CS2e6Re4.cjs +0 -147
- package/dist/ask-user-CS2e6Re4.cjs.map +0 -1
- package/dist/ask-user-gS3Y1bCc.js +0 -138
- package/dist/ask-user-gS3Y1bCc.js.map +0 -1
- package/dist/buttons-group-BiLEV_Ak.cjs +0 -101
- package/dist/buttons-group-BiLEV_Ak.cjs.map +0 -1
- package/dist/buttons-group-CaA7KAWf.js +0 -78
- package/dist/buttons-group-CaA7KAWf.js.map +0 -1
- package/dist/combobox-BWM3VH-n.cjs.map +0 -1
- package/dist/combobox-D7xJFZuO.js.map +0 -1
- package/dist/combobox-styles-CRebmeht.js.map +0 -1
- package/dist/combobox-styles-DYlNNjKC.cjs.map +0 -1
- package/dist/components/MainContent.cjs.js +0 -81
- package/dist/components/MainContent.cjs.js.map +0 -1
- package/dist/components/MainContent.d.ts +0 -2
- package/dist/components/MainContent.es.js +0 -75
- package/dist/components/MainContent.es.js.map +0 -1
- package/dist/data-code-section-DKz9Okaz.js.map +0 -1
- package/dist/data-code-section-qujvEc6j.cjs.map +0 -1
- package/dist/dropdown-menu-DL0MzjEb.js.map +0 -1
- package/dist/dropdown-menu-DNRCA4Gj.cjs.map +0 -1
- package/dist/field-block-DWkbNcsV.js.map +0 -1
- package/dist/field-block-Dy1IaWbv.cjs.map +0 -1
- package/dist/field-error-id-B3Z2Zu5y.cjs +0 -6
- package/dist/field-error-id-B3Z2Zu5y.cjs.map +0 -1
- package/dist/field-error-id-D3yg1nBh.js +0 -4
- package/dist/field-error-id-D3yg1nBh.js.map +0 -1
- package/dist/filter-bar-chip-BxI0NgEz.cjs.map +0 -1
- package/dist/filter-bar-chip-C-JxWUU8.js.map +0 -1
- package/dist/input-group-BEdHivvy.js.map +0 -1
- package/dist/input-group-CvWwK1Vz.cjs.map +0 -1
- package/dist/lib/springs.cjs.js +0 -32
- package/dist/lib/springs.cjs.js.map +0 -1
- package/dist/lib/springs.d.ts +0 -2
- package/dist/lib/springs.es.js +0 -27
- package/dist/lib/springs.es.js.map +0 -1
- package/dist/main-sidebar-link-active-CmDoiX6g.js.map +0 -1
- package/dist/main-sidebar-link-active-DbCvKZy2.cjs.map +0 -1
- package/dist/markdown-renderer-B0gTm_Ea.js.map +0 -1
- package/dist/markdown-renderer-D8qYAU7K.cjs.map +0 -1
- package/dist/metrics-card-BUJxiwec.cjs.map +0 -1
- package/dist/metrics-card-BlBt1WHw.js.map +0 -1
- package/dist/new/layout/page-shell.cjs.js +0 -34
- package/dist/new/layout/page-shell.cjs.js.map +0 -1
- package/dist/new/layout/page-shell.d.ts +0 -2
- package/dist/new/layout/page-shell.es.js +0 -30
- package/dist/new/layout/page-shell.es.js.map +0 -1
- package/dist/no-data-page-layout-DcVPjj-J.js +0 -9
- package/dist/no-data-page-layout-DcVPjj-J.js.map +0 -1
- package/dist/no-data-page-layout-Drzbg_w8.cjs +0 -11
- package/dist/no-data-page-layout-Drzbg_w8.cjs.map +0 -1
- package/dist/page-heading-context-D3yjYoJE.js +0 -9
- package/dist/page-heading-context-D3yjYoJE.js.map +0 -1
- package/dist/page-heading-context-Du-CpxAx.cjs +0 -12
- package/dist/page-heading-context-Du-CpxAx.cjs.map +0 -1
- package/dist/page-layout-C9ifD9Q8.cjs +0 -99
- package/dist/page-layout-C9ifD9Q8.cjs.map +0 -1
- package/dist/page-layout-xcM8IR-B.js +0 -97
- package/dist/page-layout-xcM8IR-B.js.map +0 -1
- package/dist/property-filter-applied-BBiUbtr0.js.map +0 -1
- package/dist/property-filter-applied-BmxCPe2d.cjs.map +0 -1
- package/dist/select--DXpTg0O.js.map +0 -1
- package/dist/select-7ACAVdGX.cjs.map +0 -1
- package/dist/spinner-CqP-NaB2.cjs.map +0 -1
- package/dist/spinner-D2C2DYw8.js.map +0 -1
- package/dist/src/ds/components/MainContent/index.d.ts +0 -1
- package/dist/src/ds/components/MainContent/main-content.d.ts +0 -21
- package/dist/src/ds/components/MainContent/main-content.stories.d.ts +0 -10
- package/dist/src/ds/components/PageLayout/no-data-page-layout.d.ts +0 -6
- package/dist/src/ds/components/PageLayout/page-heading-context.d.ts +0 -2
- package/dist/src/ds/components/PageLayout/page-layout-column.d.ts +0 -5
- package/dist/src/ds/components/PageLayout/page-layout-main-area.d.ts +0 -7
- package/dist/src/ds/components/PageLayout/page-layout-root.d.ts +0 -7
- package/dist/src/ds/components/PageLayout/page-layout-row.d.ts +0 -11
- package/dist/src/ds/components/PageLayout/page-layout-top-area.d.ts +0 -5
- package/dist/src/ds/new/layout/page-shell/index.d.ts +0 -1
- package/dist/src/ds/new/layout/page-shell/page-shell.d.ts +0 -24
- package/dist/src/ds/new/layout/page-shell/page-shell.stories.d.ts +0 -63
- package/dist/src/lib/springs.d.ts +0 -31
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flame-graph.cjs.js","sources":["../../../../src/domains/memory/components/flame-graph.tsx"],"sourcesContent":["import { RotateCcw } from 'lucide-react';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n Area,\n AreaChart,\n ComposedChart,\n ReferenceLine,\n ResponsiveContainer,\n Scatter,\n ScatterChart,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts';\n\nimport { Button } from '../../../ds/components/Button';\nimport { overlaySurfaceStyle } from '../../../ds/primitives/raised-surface';\nimport type { ExtractedOmMarker } from '../lib/extract-markers';\nimport { tToTimestampMs } from '../lib/replay-selection';\nimport type { TDomain } from '../lib/timeline';\nimport { formatTimeDisplay, tToTimestamp } from '../lib/timeline';\nimport type { MemoryMessage, OMHistoryRecord } from '../types';\nimport {\n getAreaRowYMax,\n isEventPoint,\n toActiveObservationData,\n toBufferedObservationData,\n toCombinedRowData,\n toContextData,\n toEventData,\n toMessageData,\n toSelectedT,\n} from './flame-graph-data';\n\nexport interface ZoomRange {\n left: number;\n right: number;\n}\n\ninterface FlameGraphProps {\n omRecords: OMHistoryRecord[];\n markers: ExtractedOmMarker[];\n messages: MemoryMessage[];\n tDomain: TDomain;\n observationThreshold?: number;\n reflectionThreshold?: number;\n onSelectTimestamp?: (timestamp: number | null) => void;\n /**\n * Controlled zoom range (epoch ms). When provided together with\n * `onZoomRangeChange`, the caller owns the range and the graph becomes a\n * controlled component; otherwise the range is managed internally.\n */\n zoomRange?: ZoomRange;\n onZoomRangeChange?: (range: ZoomRange) => void;\n}\n\ntype RechartsClickState = { activeLabel?: string | number } | null | undefined;\n\nconst MSG_COLOR = 'var(--color-green-500, #22c55e)';\nconst OBS_COLOR = '#f59e0b';\nconst REFLECT_COLOR = '#ec4899';\n\nfunction TimeAxis({ domain }: { domain: TDomain }) {\n const ticks = [0, 0.25, 0.5, 0.75, 1];\n return (\n <div className=\"grid grid-cols-[6rem_1fr] items-center\">\n <p className=\"text-muted-foreground border-border/50 text-meta flex items-center self-stretch border-r pl-3\">\n Time\n </p>\n <div className=\"text-muted-foreground text-meta flex justify-between px-1 py-1.5 font-mono\">\n {ticks.map(t => (\n <span key={t}>{formatTimeDisplay(tToTimestamp(t, domain))}</span>\n ))}\n </div>\n </div>\n );\n}\n\nexport function FlameTooltip({\n active,\n payload,\n domain,\n showValue,\n}: {\n active?: boolean;\n payload?: Array<{ value: unknown; name: string; payload?: { t?: number } }>;\n domain?: TDomain;\n showValue?: boolean;\n}) {\n if (!active || !payload?.length) return null;\n const t = payload[0]?.payload?.t;\n const time = domain != null && t != null ? formatTimeDisplay(tToTimestamp(t, domain)) : null;\n const visibleEntries = payload.filter(entry => entry.name !== 't' && entry.name !== 'time' && entry.value != null);\n\n if (showValue) {\n return (\n <div className={`${overlaySurfaceStyle} text-meta flex flex-col gap-0.5 rounded px-2 py-1.5 font-mono`}>\n {time && (\n <div className=\"flex items-center justify-between gap-3\">\n <span className=\"text-muted-foreground\">time</span>\n <span className=\"text-foreground\">{time}</span>\n </div>\n )}\n {visibleEntries.map(entry => (\n <div key={entry.name} className=\"flex items-center justify-between gap-3\">\n <span className=\"text-muted-foreground\">{entry.name}</span>\n <span className=\"text-foreground\">\n {typeof entry.value === 'number' ? Math.round(entry.value).toLocaleString() : String(entry.value)}\n </span>\n </div>\n ))}\n </div>\n );\n }\n\n return (\n <div className={`${overlaySurfaceStyle} text-meta rounded px-2 py-1 font-mono`}>\n {time && <span className=\"text-foreground\">{time}</span>}\n </div>\n );\n}\n\ninterface AreaRowProps {\n label: string;\n data: Array<{ t: number; [k: string]: unknown }>;\n dataKey: string;\n color: string;\n gradientId: string;\n domain: TDomain;\n zoomDomain: [number, number];\n threshold?: number;\n}\n\nfunction AreaRow({ label, data, dataKey, color, gradientId, domain, zoomDomain, threshold }: AreaRowProps) {\n const yMax = getAreaRowYMax(data, dataKey, threshold);\n\n return (\n <div className=\"border-border/50 relative grid grid-cols-[6rem_1fr] items-center border-b hover:z-10\">\n <p className=\"text-muted-foreground border-border/50 text-meta flex items-center self-stretch border-r pl-3\">\n {label}\n </p>\n <div>\n <ResponsiveContainer width=\"100%\" height={32}>\n <AreaChart data={data} margin={{ top: 0, right: 0, bottom: 0, left: 0 }}>\n <defs>\n <linearGradient id={gradientId} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor={color} stopOpacity={0.35} />\n <stop offset=\"100%\" stopColor={color} stopOpacity={0.03} />\n </linearGradient>\n </defs>\n <XAxis dataKey=\"t\" type=\"number\" domain={zoomDomain} allowDataOverflow hide />\n <YAxis type=\"number\" domain={yMax != null ? [0, yMax] : undefined} hide />\n <Tooltip\n content={<FlameTooltip domain={domain} showValue />}\n cursor={{ stroke: 'rgba(255,255,255,0.08)' }}\n />\n <Area\n type=\"linear\"\n dataKey={dataKey}\n stroke={color}\n strokeWidth={1}\n strokeOpacity={0.6}\n fill={`url(#${gradientId})`}\n isAnimationActive={false}\n />\n {threshold != null && (\n <ReferenceLine y={threshold} stroke={color} strokeDasharray=\"4 3\" strokeOpacity={0.4} />\n )}\n </AreaChart>\n </ResponsiveContainer>\n </div>\n </div>\n );\n}\n\ninterface EventRowProps {\n label: string;\n data: Array<{ t: number; event: number; [k: string]: unknown }>;\n color: string;\n height?: number;\n domain: TDomain;\n zoomDomain: [number, number];\n}\n\nfunction EventRow({ label, data, color, height = 32, domain, zoomDomain }: EventRowProps) {\n return (\n <div className=\"border-border/50 relative grid grid-cols-[6rem_1fr] items-center border-b hover:z-10\">\n <p className=\"text-muted-foreground border-border/50 text-meta flex items-center self-stretch border-r pl-3\">\n {label}\n </p>\n <div>\n <ResponsiveContainer width=\"100%\" height={height}>\n <ScatterChart margin={{ top: 0, right: 0, bottom: 0, left: 0 }}>\n <XAxis dataKey=\"t\" type=\"number\" domain={zoomDomain} allowDataOverflow hide />\n <YAxis dataKey=\"event\" type=\"number\" domain={[0, 2]} hide />\n <Tooltip content={<FlameTooltip domain={domain} />} cursor={false} />\n <Scatter\n data={data}\n fill={color}\n isAnimationActive={false}\n shape={(props: Record<string, unknown>) => {\n const cx = props.cx as number;\n return (\n <g>\n <rect x={cx - 6} y={0} width={12} height={height} fill=\"transparent\" />\n <rect x={cx - 1.5} y={0} width={3} height={height} fill={color} />\n </g>\n );\n }}\n />\n </ScatterChart>\n </ResponsiveContainer>\n </div>\n </div>\n );\n}\n\ninterface CombinedRowProps {\n label: string;\n areaData: Array<Record<string, number>>;\n areaDataKey: string;\n eventData: Array<{ t: number; event: number; [k: string]: unknown }>;\n color: string;\n gradientId: string;\n domain: TDomain;\n zoomDomain: [number, number];\n threshold?: number;\n height?: number;\n onSelectT?: (t: number) => void;\n}\n\nfunction CombinedRow({\n label,\n areaData,\n areaDataKey,\n eventData,\n color,\n gradientId,\n domain,\n zoomDomain,\n threshold,\n height = 44,\n onSelectT,\n}: CombinedRowProps) {\n const combinedData = toCombinedRowData(areaData, areaDataKey, eventData);\n\n return (\n <div className=\"border-border/50 relative grid grid-cols-[6rem_1fr] items-center border-b hover:z-10\">\n <p className=\"text-muted-foreground border-border/50 text-meta flex items-center self-stretch border-r pl-3\">\n {label}\n </p>\n <div>\n <ResponsiveContainer width=\"100%\" height={height}>\n <ComposedChart\n margin={{ top: 0, right: 0, bottom: 0, left: 0 }}\n onClick={(state: RechartsClickState) => {\n const t = toSelectedT(state?.activeLabel);\n if (t != null && onSelectT) onSelectT(t);\n }}\n className={onSelectT ? 'cursor-pointer' : undefined}\n >\n <defs>\n <linearGradient id={gradientId} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor={color} stopOpacity={0.35} />\n <stop offset=\"100%\" stopColor={color} stopOpacity={0.06} />\n </linearGradient>\n </defs>\n <XAxis dataKey=\"t\" type=\"number\" domain={zoomDomain} allowDataOverflow hide />\n <YAxis yAxisId=\"area\" dataKey={areaDataKey} type=\"number\" hide domain={[0, 'dataMax']} />\n <Tooltip content={<FlameTooltip domain={domain} showValue />} cursor={false} />\n <Area\n yAxisId=\"area\"\n data={combinedData}\n type=\"linear\"\n dataKey={areaDataKey}\n stroke={color}\n strokeWidth={1}\n strokeOpacity={0.6}\n fill={`url(#${gradientId})`}\n isAnimationActive={false}\n activeDot={{ r: 5, stroke: color, strokeWidth: 2, fill: '#0a0a0a' }}\n dot={(props: Record<string, unknown>) =>\n isEventPoint(props.payload) ? (\n <circle cx={props.cx as number} cy={props.cy as number} r={4} fill={color} />\n ) : (\n <></>\n )\n }\n />\n {threshold != null && (\n <ReferenceLine yAxisId=\"area\" y={threshold} stroke={color} strokeDasharray=\"4 3\" strokeOpacity={0.4} />\n )}\n </ComposedChart>\n </ResponsiveContainer>\n </div>\n </div>\n );\n}\n\nfunction ZoomTrack({\n tDomain,\n zoomLeft,\n zoomRight,\n onZoomLeftChange,\n onZoomRightChange,\n onReset,\n}: {\n tDomain: TDomain;\n zoomLeft: number;\n zoomRight: number;\n onZoomLeftChange: (ts: number) => void;\n onZoomRightChange: (ts: number) => void;\n onReset: () => void;\n}) {\n const trackRef = useRef<HTMLDivElement>(null);\n const dragging = useRef<'left' | 'right' | null>(null);\n\n const range = tDomain.tMax - tDomain.tMin;\n const leftPercent = range > 0 ? ((zoomLeft - tDomain.tMin) / range) * 100 : 0;\n const rightPercent = range > 0 ? ((zoomRight - tDomain.tMin) / range) * 100 : 100;\n\n const toTimestamp = useCallback(\n (clientX: number) => {\n const track = trackRef.current;\n if (!track) return null;\n const rect = track.getBoundingClientRect();\n const frac = Math.max(0, Math.min(1, (clientX - rect.left) / rect.width));\n return tDomain.tMin + frac * (tDomain.tMax - tDomain.tMin);\n },\n [tDomain.tMin, tDomain.tMax],\n );\n\n useEffect(() => {\n const onMouseMove = (e: MouseEvent) => {\n if (!dragging.current) return;\n const ts = toTimestamp(e.clientX);\n if (ts == null) return;\n if (dragging.current === 'left') {\n onZoomLeftChange(Math.min(ts, zoomRight));\n } else {\n onZoomRightChange(Math.max(ts, zoomLeft));\n }\n };\n const onMouseUp = () => {\n dragging.current = null;\n };\n window.addEventListener('mousemove', onMouseMove);\n window.addEventListener('mouseup', onMouseUp);\n return () => {\n window.removeEventListener('mousemove', onMouseMove);\n window.removeEventListener('mouseup', onMouseUp);\n };\n }, [toTimestamp, zoomLeft, zoomRight, onZoomLeftChange, onZoomRightChange]);\n\n return (\n <div className=\"border-border/50 grid grid-cols-[6rem_1fr] items-center border-b\">\n <div className=\"border-border/50 flex items-center gap-1 self-stretch border-r pl-3\">\n <p className=\"text-muted-foreground text-meta\">Zoom</p>\n <Button variant=\"ghost\" size=\"icon-sm\" aria-label=\"Reset zoom\" onClick={onReset}>\n <RotateCcw className=\"size-3\" />\n </Button>\n </div>\n <div\n ref={trackRef}\n data-zoom-track=\"\"\n className=\"relative h-6 cursor-pointer select-none\"\n onMouseDown={e => {\n const ts = toTimestamp(e.clientX);\n if (ts == null) return;\n e.preventDefault();\n const distLeft = Math.abs(ts - zoomLeft);\n const distRight = Math.abs(ts - zoomRight);\n if (distLeft <= distRight) {\n onZoomLeftChange(Math.min(ts, zoomRight));\n dragging.current = 'left';\n } else {\n onZoomRightChange(Math.max(ts, zoomLeft));\n dragging.current = 'right';\n }\n }}\n >\n <div\n data-zoom-part=\"before\"\n className=\"bg-background/60 absolute inset-y-0 left-0\"\n style={{ width: `${leftPercent}%` }}\n />\n <div\n data-zoom-part=\"band\"\n className=\"border-border/30 bg-fill-subtle absolute inset-y-0 border-y\"\n style={{ left: `${leftPercent}%`, right: `${100 - rightPercent}%` }}\n />\n <div\n data-zoom-part=\"after\"\n className=\"bg-background/60 absolute inset-y-0 right-0\"\n style={{ width: `${100 - rightPercent}%` }}\n />\n <div\n data-zoom-handle=\"left\"\n className=\"bg-foreground/50 hover:bg-foreground absolute inset-y-0 w-1 cursor-col-resize\"\n style={{ left: `${leftPercent}%`, transform: 'translateX(-50%)' }}\n onMouseDown={e => {\n e.preventDefault();\n e.stopPropagation();\n dragging.current = 'left';\n }}\n />\n <div\n data-zoom-handle=\"right\"\n className=\"bg-foreground/50 hover:bg-foreground absolute inset-y-0 w-1 cursor-col-resize\"\n style={{ left: `${rightPercent}%`, transform: 'translateX(-50%)' }}\n onMouseDown={e => {\n e.preventDefault();\n e.stopPropagation();\n dragging.current = 'right';\n }}\n />\n </div>\n </div>\n );\n}\n\nconst FALLBACK_DOMAIN: TDomain = { tMin: 0, tMax: 1 };\n\nexport function FlameGraph({\n omRecords,\n markers,\n messages,\n tDomain: tDomainProp,\n observationThreshold,\n reflectionThreshold,\n onSelectTimestamp,\n zoomRange,\n onZoomRangeChange,\n}: FlameGraphProps) {\n const domain = tDomainProp ?? FALLBACK_DOMAIN;\n\n const handleSelectT = useCallback(\n (t: number) => {\n onSelectTimestamp?.(tToTimestampMs(t, domain));\n },\n [onSelectTimestamp, domain],\n );\n\n const isControlled = zoomRange != null && onZoomRangeChange != null;\n const [internalZoomLeft, setInternalZoomLeft] = useState<number>(domain.tMin);\n const [internalZoomRight, setInternalZoomRight] = useState<number>(domain.tMax);\n\n // Reset the internal (uncontrolled) range whenever the domain changes.\n // Controlled callers own resetting via `onZoomRangeChange`.\n useEffect(() => {\n if (isControlled) return;\n setInternalZoomLeft(domain.tMin);\n setInternalZoomRight(domain.tMax);\n }, [domain.tMin, domain.tMax, isControlled]);\n\n const zoomLeft = isControlled ? zoomRange.left : internalZoomLeft;\n const zoomRight = isControlled ? zoomRange.right : internalZoomRight;\n\n const setZoomLeft = useCallback(\n (ts: number) => {\n if (isControlled) onZoomRangeChange({ left: ts, right: zoomRight });\n else setInternalZoomLeft(ts);\n },\n [isControlled, onZoomRangeChange, zoomRight],\n );\n const setZoomRight = useCallback(\n (ts: number) => {\n if (isControlled) onZoomRangeChange({ left: zoomLeft, right: ts });\n else setInternalZoomRight(ts);\n },\n [isControlled, onZoomRangeChange, zoomLeft],\n );\n\n const resetZoom = useCallback(() => {\n if (isControlled) onZoomRangeChange({ left: domain.tMin, right: domain.tMax });\n else {\n setInternalZoomLeft(domain.tMin);\n setInternalZoomRight(domain.tMax);\n }\n }, [isControlled, onZoomRangeChange, domain.tMin, domain.tMax]);\n\n const range = domain.tMax - domain.tMin;\n const zoomTLeft = range > 0 ? (zoomLeft - domain.tMin) / range : 0;\n const zoomTRight = range > 0 ? (zoomRight - domain.tMin) / range : 1;\n const zoomDomain: [number, number] = [zoomTLeft, zoomTRight];\n\n const messageData = useMemo(() => toMessageData(messages, domain), [messages, domain]);\n const contextData = useMemo(() => toContextData(omRecords, markers, domain), [omRecords, markers, domain]);\n const activeObservationData = useMemo(\n () => toActiveObservationData(omRecords, markers, domain),\n [omRecords, markers, domain],\n );\n const bufferedObservationData = useMemo(() => toBufferedObservationData(markers, domain), [markers, domain]);\n const eventData = useMemo(() => toEventData(omRecords, domain), [omRecords, domain]);\n\n const hasData =\n messageData.length > 0 || contextData.length > 0 || activeObservationData.length > 0 || eventData.length > 0;\n\n if (!hasData) return null;\n\n return (\n <div className=\"flex flex-col pr-2 pb-2 [&_.recharts-surface]:outline-none\">\n <CombinedRow\n label=\"Messages\"\n areaData={contextData}\n areaDataKey=\"pendingMessageTokens\"\n eventData={messageData}\n color={MSG_COLOR}\n gradientId=\"grad-messages\"\n domain={domain}\n zoomDomain={zoomDomain}\n threshold={observationThreshold}\n onSelectT={onSelectTimestamp ? handleSelectT : undefined}\n />\n\n <CombinedRow\n label=\"Observations\"\n areaData={activeObservationData}\n areaDataKey=\"observationTokenCount\"\n eventData={eventData}\n color={OBS_COLOR}\n gradientId=\"grad-observations\"\n domain={domain}\n zoomDomain={zoomDomain}\n threshold={reflectionThreshold}\n onSelectT={onSelectTimestamp ? handleSelectT : undefined}\n />\n\n {bufferedObservationData.length > 0 && (\n <AreaRow\n label=\"Buffered obs\"\n data={bufferedObservationData}\n dataKey=\"bufferedObservationTokenCount\"\n color={REFLECT_COLOR}\n gradientId=\"grad-buffered-obs\"\n domain={domain}\n zoomDomain={zoomDomain}\n threshold={reflectionThreshold}\n />\n )}\n\n {eventData.length > 0 && (\n <EventRow label=\"Events\" data={eventData} color={REFLECT_COLOR} domain={domain} zoomDomain={zoomDomain} />\n )}\n\n <TimeAxis domain={domain} />\n\n <ZoomTrack\n tDomain={domain}\n zoomLeft={zoomLeft}\n zoomRight={zoomRight}\n onZoomLeftChange={setZoomLeft}\n onZoomRightChange={setZoomRight}\n onReset={resetZoom}\n />\n </div>\n );\n}\n"],"names":["jsxs","jsx","formatTimeDisplay","tToTimestamp","overlaySurfaceStyle","getAreaRowYMax","ResponsiveContainer","AreaChart","XAxis","YAxis","Tooltip","Area","ReferenceLine","ScatterChart","Scatter","toCombinedRowData","ComposedChart","toSelectedT","isEventPoint","Fragment","useRef","useCallback","useEffect","Button","RotateCcw","tToTimestampMs","useState","useMemo","toMessageData","toContextData","toActiveObservationData","toBufferedObservationData","toEventData"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"flame-graph.cjs.js","sources":["../../../../src/domains/memory/components/flame-graph.tsx"],"sourcesContent":["import { RotateCcw } from 'lucide-react';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n Area,\n AreaChart,\n ComposedChart,\n ReferenceLine,\n ResponsiveContainer,\n Scatter,\n ScatterChart,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts';\n\nimport { Button } from '../../../ds/components/Button';\nimport { overlaySurfaceStyle } from '../../../ds/primitives/raised-surface';\nimport type { ExtractedOmMarker } from '../lib/extract-markers';\nimport { tToTimestampMs } from '../lib/replay-selection';\nimport type { TDomain } from '../lib/timeline';\nimport { formatTimeDisplay, tToTimestamp } from '../lib/timeline';\nimport type { MemoryMessage, OMHistoryRecord } from '../types';\nimport {\n getAreaRowYMax,\n isEventPoint,\n toActiveObservationData,\n toBufferedObservationData,\n toCombinedRowData,\n toContextData,\n toEventData,\n toMessageData,\n toSelectedT,\n} from './flame-graph-data';\n\nexport interface ZoomRange {\n left: number;\n right: number;\n}\n\ninterface FlameGraphProps {\n omRecords: OMHistoryRecord[];\n markers: ExtractedOmMarker[];\n messages: MemoryMessage[];\n tDomain: TDomain;\n observationThreshold?: number;\n reflectionThreshold?: number;\n onSelectTimestamp?: (timestamp: number | null) => void;\n /**\n * Controlled zoom range (epoch ms). When provided together with\n * `onZoomRangeChange`, the caller owns the range and the graph becomes a\n * controlled component; otherwise the range is managed internally.\n */\n zoomRange?: ZoomRange;\n onZoomRangeChange?: (range: ZoomRange) => void;\n}\n\ntype RechartsClickState = { activeLabel?: string | number } | null | undefined;\n\nconst MSG_COLOR = 'var(--color-green-500, #22c55e)';\nconst OBS_COLOR = '#f59e0b';\nconst REFLECT_COLOR = '#ec4899';\n\nfunction TimeAxis({ domain }: { domain: TDomain }) {\n const ticks = [0, 0.25, 0.5, 0.75, 1];\n return (\n <div className=\"grid grid-cols-[6rem_1fr] items-center\">\n <p className=\"flex items-center self-stretch border-r border-border/50 pl-3 text-meta text-muted-foreground\">\n Time\n </p>\n <div className=\"flex justify-between px-1 py-1.5 font-mono text-meta text-muted-foreground\">\n {ticks.map(t => (\n <span key={t}>{formatTimeDisplay(tToTimestamp(t, domain))}</span>\n ))}\n </div>\n </div>\n );\n}\n\nexport function FlameTooltip({\n active,\n payload,\n domain,\n showValue,\n}: {\n active?: boolean;\n payload?: Array<{ value: unknown; name: string; payload?: { t?: number } }>;\n domain?: TDomain;\n showValue?: boolean;\n}) {\n if (!active || !payload?.length) return null;\n const t = payload[0]?.payload?.t;\n const time = domain != null && t != null ? formatTimeDisplay(tToTimestamp(t, domain)) : null;\n const visibleEntries = payload.filter(entry => entry.name !== 't' && entry.name !== 'time' && entry.value != null);\n\n if (showValue) {\n return (\n <div className={`${overlaySurfaceStyle} flex flex-col gap-0.5 rounded px-2 py-1.5 font-mono text-meta`}>\n {time && (\n <div className=\"flex items-center justify-between gap-3\">\n <span className=\"text-muted-foreground\">time</span>\n <span className=\"text-foreground\">{time}</span>\n </div>\n )}\n {visibleEntries.map(entry => (\n <div key={entry.name} className=\"flex items-center justify-between gap-3\">\n <span className=\"text-muted-foreground\">{entry.name}</span>\n <span className=\"text-foreground\">\n {typeof entry.value === 'number' ? Math.round(entry.value).toLocaleString() : String(entry.value)}\n </span>\n </div>\n ))}\n </div>\n );\n }\n\n return (\n <div className={`${overlaySurfaceStyle} rounded px-2 py-1 font-mono text-meta`}>\n {time && <span className=\"text-foreground\">{time}</span>}\n </div>\n );\n}\n\ninterface AreaRowProps {\n label: string;\n data: Array<{ t: number; [k: string]: unknown }>;\n dataKey: string;\n color: string;\n gradientId: string;\n domain: TDomain;\n zoomDomain: [number, number];\n threshold?: number;\n}\n\nfunction AreaRow({ label, data, dataKey, color, gradientId, domain, zoomDomain, threshold }: AreaRowProps) {\n const yMax = getAreaRowYMax(data, dataKey, threshold);\n\n return (\n <div className=\"relative grid grid-cols-[6rem_1fr] items-center border-b border-border/50 hover:z-10\">\n <p className=\"flex items-center self-stretch border-r border-border/50 pl-3 text-meta text-muted-foreground\">\n {label}\n </p>\n <div>\n <ResponsiveContainer width=\"100%\" height={32}>\n <AreaChart data={data} margin={{ top: 0, right: 0, bottom: 0, left: 0 }}>\n <defs>\n <linearGradient id={gradientId} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor={color} stopOpacity={0.35} />\n <stop offset=\"100%\" stopColor={color} stopOpacity={0.03} />\n </linearGradient>\n </defs>\n <XAxis dataKey=\"t\" type=\"number\" domain={zoomDomain} allowDataOverflow hide />\n <YAxis type=\"number\" domain={yMax != null ? [0, yMax] : undefined} hide />\n <Tooltip\n content={<FlameTooltip domain={domain} showValue />}\n cursor={{ stroke: 'rgba(255,255,255,0.08)' }}\n />\n <Area\n type=\"linear\"\n dataKey={dataKey}\n stroke={color}\n strokeWidth={1}\n strokeOpacity={0.6}\n fill={`url(#${gradientId})`}\n isAnimationActive={false}\n />\n {threshold != null && (\n <ReferenceLine y={threshold} stroke={color} strokeDasharray=\"4 3\" strokeOpacity={0.4} />\n )}\n </AreaChart>\n </ResponsiveContainer>\n </div>\n </div>\n );\n}\n\ninterface EventRowProps {\n label: string;\n data: Array<{ t: number; event: number; [k: string]: unknown }>;\n color: string;\n height?: number;\n domain: TDomain;\n zoomDomain: [number, number];\n}\n\nfunction EventRow({ label, data, color, height = 32, domain, zoomDomain }: EventRowProps) {\n return (\n <div className=\"relative grid grid-cols-[6rem_1fr] items-center border-b border-border/50 hover:z-10\">\n <p className=\"flex items-center self-stretch border-r border-border/50 pl-3 text-meta text-muted-foreground\">\n {label}\n </p>\n <div>\n <ResponsiveContainer width=\"100%\" height={height}>\n <ScatterChart margin={{ top: 0, right: 0, bottom: 0, left: 0 }}>\n <XAxis dataKey=\"t\" type=\"number\" domain={zoomDomain} allowDataOverflow hide />\n <YAxis dataKey=\"event\" type=\"number\" domain={[0, 2]} hide />\n <Tooltip content={<FlameTooltip domain={domain} />} cursor={false} />\n <Scatter\n data={data}\n fill={color}\n isAnimationActive={false}\n shape={(props: Record<string, unknown>) => {\n const cx = props.cx as number;\n return (\n <g>\n <rect x={cx - 6} y={0} width={12} height={height} fill=\"transparent\" />\n <rect x={cx - 1.5} y={0} width={3} height={height} fill={color} />\n </g>\n );\n }}\n />\n </ScatterChart>\n </ResponsiveContainer>\n </div>\n </div>\n );\n}\n\ninterface CombinedRowProps {\n label: string;\n areaData: Array<Record<string, number>>;\n areaDataKey: string;\n eventData: Array<{ t: number; event: number; [k: string]: unknown }>;\n color: string;\n gradientId: string;\n domain: TDomain;\n zoomDomain: [number, number];\n threshold?: number;\n height?: number;\n onSelectT?: (t: number) => void;\n}\n\nfunction CombinedRow({\n label,\n areaData,\n areaDataKey,\n eventData,\n color,\n gradientId,\n domain,\n zoomDomain,\n threshold,\n height = 44,\n onSelectT,\n}: CombinedRowProps) {\n const combinedData = toCombinedRowData(areaData, areaDataKey, eventData);\n\n return (\n <div className=\"relative grid grid-cols-[6rem_1fr] items-center border-b border-border/50 hover:z-10\">\n <p className=\"flex items-center self-stretch border-r border-border/50 pl-3 text-meta text-muted-foreground\">\n {label}\n </p>\n <div>\n <ResponsiveContainer width=\"100%\" height={height}>\n <ComposedChart\n margin={{ top: 0, right: 0, bottom: 0, left: 0 }}\n onClick={(state: RechartsClickState) => {\n const t = toSelectedT(state?.activeLabel);\n if (t != null && onSelectT) onSelectT(t);\n }}\n className={onSelectT ? 'cursor-pointer' : undefined}\n >\n <defs>\n <linearGradient id={gradientId} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor={color} stopOpacity={0.35} />\n <stop offset=\"100%\" stopColor={color} stopOpacity={0.06} />\n </linearGradient>\n </defs>\n <XAxis dataKey=\"t\" type=\"number\" domain={zoomDomain} allowDataOverflow hide />\n <YAxis yAxisId=\"area\" dataKey={areaDataKey} type=\"number\" hide domain={[0, 'dataMax']} />\n <Tooltip content={<FlameTooltip domain={domain} showValue />} cursor={false} />\n <Area\n yAxisId=\"area\"\n data={combinedData}\n type=\"linear\"\n dataKey={areaDataKey}\n stroke={color}\n strokeWidth={1}\n strokeOpacity={0.6}\n fill={`url(#${gradientId})`}\n isAnimationActive={false}\n activeDot={{ r: 5, stroke: color, strokeWidth: 2, fill: '#0a0a0a' }}\n dot={(props: Record<string, unknown>) =>\n isEventPoint(props.payload) ? (\n <circle cx={props.cx as number} cy={props.cy as number} r={4} fill={color} />\n ) : (\n <></>\n )\n }\n />\n {threshold != null && (\n <ReferenceLine yAxisId=\"area\" y={threshold} stroke={color} strokeDasharray=\"4 3\" strokeOpacity={0.4} />\n )}\n </ComposedChart>\n </ResponsiveContainer>\n </div>\n </div>\n );\n}\n\nfunction ZoomTrack({\n tDomain,\n zoomLeft,\n zoomRight,\n onZoomLeftChange,\n onZoomRightChange,\n onReset,\n}: {\n tDomain: TDomain;\n zoomLeft: number;\n zoomRight: number;\n onZoomLeftChange: (ts: number) => void;\n onZoomRightChange: (ts: number) => void;\n onReset: () => void;\n}) {\n const trackRef = useRef<HTMLDivElement>(null);\n const dragging = useRef<'left' | 'right' | null>(null);\n\n const range = tDomain.tMax - tDomain.tMin;\n const leftPercent = range > 0 ? ((zoomLeft - tDomain.tMin) / range) * 100 : 0;\n const rightPercent = range > 0 ? ((zoomRight - tDomain.tMin) / range) * 100 : 100;\n\n const toTimestamp = useCallback(\n (clientX: number) => {\n const track = trackRef.current;\n if (!track) return null;\n const rect = track.getBoundingClientRect();\n const frac = Math.max(0, Math.min(1, (clientX - rect.left) / rect.width));\n return tDomain.tMin + frac * (tDomain.tMax - tDomain.tMin);\n },\n [tDomain.tMin, tDomain.tMax],\n );\n\n useEffect(() => {\n const onMouseMove = (e: MouseEvent) => {\n if (!dragging.current) return;\n const ts = toTimestamp(e.clientX);\n if (ts == null) return;\n if (dragging.current === 'left') {\n onZoomLeftChange(Math.min(ts, zoomRight));\n } else {\n onZoomRightChange(Math.max(ts, zoomLeft));\n }\n };\n const onMouseUp = () => {\n dragging.current = null;\n };\n window.addEventListener('mousemove', onMouseMove);\n window.addEventListener('mouseup', onMouseUp);\n return () => {\n window.removeEventListener('mousemove', onMouseMove);\n window.removeEventListener('mouseup', onMouseUp);\n };\n }, [toTimestamp, zoomLeft, zoomRight, onZoomLeftChange, onZoomRightChange]);\n\n return (\n <div className=\"grid grid-cols-[6rem_1fr] items-center border-b border-border/50\">\n <div className=\"flex items-center gap-1 self-stretch border-r border-border/50 pl-3\">\n <p className=\"text-meta text-muted-foreground\">Zoom</p>\n <Button variant=\"ghost\" size=\"icon-sm\" aria-label=\"Reset zoom\" onClick={onReset}>\n <RotateCcw className=\"size-3\" />\n </Button>\n </div>\n <div\n ref={trackRef}\n data-zoom-track=\"\"\n className=\"relative h-6 cursor-pointer select-none\"\n onMouseDown={e => {\n const ts = toTimestamp(e.clientX);\n if (ts == null) return;\n e.preventDefault();\n const distLeft = Math.abs(ts - zoomLeft);\n const distRight = Math.abs(ts - zoomRight);\n if (distLeft <= distRight) {\n onZoomLeftChange(Math.min(ts, zoomRight));\n dragging.current = 'left';\n } else {\n onZoomRightChange(Math.max(ts, zoomLeft));\n dragging.current = 'right';\n }\n }}\n >\n <div\n data-zoom-part=\"before\"\n className=\"absolute inset-y-0 left-0 bg-background/60\"\n style={{ width: `${leftPercent}%` }}\n />\n <div\n data-zoom-part=\"band\"\n className=\"absolute inset-y-0 border-y border-border/30 bg-fill-subtle\"\n style={{ left: `${leftPercent}%`, right: `${100 - rightPercent}%` }}\n />\n <div\n data-zoom-part=\"after\"\n className=\"absolute inset-y-0 right-0 bg-background/60\"\n style={{ width: `${100 - rightPercent}%` }}\n />\n <div\n data-zoom-handle=\"left\"\n className=\"absolute inset-y-0 w-1 cursor-col-resize bg-foreground/50 hover:bg-foreground\"\n style={{ left: `${leftPercent}%`, transform: 'translateX(-50%)' }}\n onMouseDown={e => {\n e.preventDefault();\n e.stopPropagation();\n dragging.current = 'left';\n }}\n />\n <div\n data-zoom-handle=\"right\"\n className=\"absolute inset-y-0 w-1 cursor-col-resize bg-foreground/50 hover:bg-foreground\"\n style={{ left: `${rightPercent}%`, transform: 'translateX(-50%)' }}\n onMouseDown={e => {\n e.preventDefault();\n e.stopPropagation();\n dragging.current = 'right';\n }}\n />\n </div>\n </div>\n );\n}\n\nconst FALLBACK_DOMAIN: TDomain = { tMin: 0, tMax: 1 };\n\nexport function FlameGraph({\n omRecords,\n markers,\n messages,\n tDomain: tDomainProp,\n observationThreshold,\n reflectionThreshold,\n onSelectTimestamp,\n zoomRange,\n onZoomRangeChange,\n}: FlameGraphProps) {\n const domain = tDomainProp ?? FALLBACK_DOMAIN;\n\n const handleSelectT = useCallback(\n (t: number) => {\n onSelectTimestamp?.(tToTimestampMs(t, domain));\n },\n [onSelectTimestamp, domain],\n );\n\n const isControlled = zoomRange != null && onZoomRangeChange != null;\n const [internalZoomLeft, setInternalZoomLeft] = useState<number>(domain.tMin);\n const [internalZoomRight, setInternalZoomRight] = useState<number>(domain.tMax);\n\n // Reset the internal (uncontrolled) range whenever the domain changes.\n // Controlled callers own resetting via `onZoomRangeChange`.\n useEffect(() => {\n if (isControlled) return;\n setInternalZoomLeft(domain.tMin);\n setInternalZoomRight(domain.tMax);\n }, [domain.tMin, domain.tMax, isControlled]);\n\n const zoomLeft = isControlled ? zoomRange.left : internalZoomLeft;\n const zoomRight = isControlled ? zoomRange.right : internalZoomRight;\n\n const setZoomLeft = useCallback(\n (ts: number) => {\n if (isControlled) onZoomRangeChange({ left: ts, right: zoomRight });\n else setInternalZoomLeft(ts);\n },\n [isControlled, onZoomRangeChange, zoomRight],\n );\n const setZoomRight = useCallback(\n (ts: number) => {\n if (isControlled) onZoomRangeChange({ left: zoomLeft, right: ts });\n else setInternalZoomRight(ts);\n },\n [isControlled, onZoomRangeChange, zoomLeft],\n );\n\n const resetZoom = useCallback(() => {\n if (isControlled) onZoomRangeChange({ left: domain.tMin, right: domain.tMax });\n else {\n setInternalZoomLeft(domain.tMin);\n setInternalZoomRight(domain.tMax);\n }\n }, [isControlled, onZoomRangeChange, domain.tMin, domain.tMax]);\n\n const range = domain.tMax - domain.tMin;\n const zoomTLeft = range > 0 ? (zoomLeft - domain.tMin) / range : 0;\n const zoomTRight = range > 0 ? (zoomRight - domain.tMin) / range : 1;\n const zoomDomain: [number, number] = [zoomTLeft, zoomTRight];\n\n const messageData = useMemo(() => toMessageData(messages, domain), [messages, domain]);\n const contextData = useMemo(() => toContextData(omRecords, markers, domain), [omRecords, markers, domain]);\n const activeObservationData = useMemo(\n () => toActiveObservationData(omRecords, markers, domain),\n [omRecords, markers, domain],\n );\n const bufferedObservationData = useMemo(() => toBufferedObservationData(markers, domain), [markers, domain]);\n const eventData = useMemo(() => toEventData(omRecords, domain), [omRecords, domain]);\n\n const hasData =\n messageData.length > 0 || contextData.length > 0 || activeObservationData.length > 0 || eventData.length > 0;\n\n if (!hasData) return null;\n\n return (\n <div className=\"flex flex-col pr-2 pb-2 [&_.recharts-surface]:outline-none\">\n <CombinedRow\n label=\"Messages\"\n areaData={contextData}\n areaDataKey=\"pendingMessageTokens\"\n eventData={messageData}\n color={MSG_COLOR}\n gradientId=\"grad-messages\"\n domain={domain}\n zoomDomain={zoomDomain}\n threshold={observationThreshold}\n onSelectT={onSelectTimestamp ? handleSelectT : undefined}\n />\n\n <CombinedRow\n label=\"Observations\"\n areaData={activeObservationData}\n areaDataKey=\"observationTokenCount\"\n eventData={eventData}\n color={OBS_COLOR}\n gradientId=\"grad-observations\"\n domain={domain}\n zoomDomain={zoomDomain}\n threshold={reflectionThreshold}\n onSelectT={onSelectTimestamp ? handleSelectT : undefined}\n />\n\n {bufferedObservationData.length > 0 && (\n <AreaRow\n label=\"Buffered obs\"\n data={bufferedObservationData}\n dataKey=\"bufferedObservationTokenCount\"\n color={REFLECT_COLOR}\n gradientId=\"grad-buffered-obs\"\n domain={domain}\n zoomDomain={zoomDomain}\n threshold={reflectionThreshold}\n />\n )}\n\n {eventData.length > 0 && (\n <EventRow label=\"Events\" data={eventData} color={REFLECT_COLOR} domain={domain} zoomDomain={zoomDomain} />\n )}\n\n <TimeAxis domain={domain} />\n\n <ZoomTrack\n tDomain={domain}\n zoomLeft={zoomLeft}\n zoomRight={zoomRight}\n onZoomLeftChange={setZoomLeft}\n onZoomRightChange={setZoomRight}\n onReset={resetZoom}\n />\n </div>\n );\n}\n"],"names":["jsxs","jsx","formatTimeDisplay","tToTimestamp","overlaySurfaceStyle","getAreaRowYMax","ResponsiveContainer","AreaChart","XAxis","YAxis","Tooltip","Area","ReferenceLine","ScatterChart","Scatter","toCombinedRowData","ComposedChart","toSelectedT","isEventPoint","Fragment","useRef","useCallback","useEffect","Button","RotateCcw","tToTimestampMs","useState","useMemo","toMessageData","toContextData","toActiveObservationData","toBufferedObservationData","toEventData"],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
|
2
2
|
import { RotateCcw } from 'lucide-react';
|
|
3
3
|
import { useCallback, useState, useEffect, useMemo, useRef } from 'react';
|
|
4
4
|
import { ResponsiveContainer, ComposedChart, XAxis, YAxis, Tooltip, Area, ReferenceLine, AreaChart, ScatterChart, Scatter } from 'recharts';
|
|
5
|
-
import { B as Button } from '../../../Button-
|
|
5
|
+
import { B as Button } from '../../../Button-C9cvaVFG.js';
|
|
6
6
|
import { overlaySurfaceStyle } from '../../../primitives/raised-surface.es.js';
|
|
7
7
|
import { tToTimestampMs } from '../lib/replay-selection.es.js';
|
|
8
8
|
import { formatTimeDisplay, tToTimestamp } from '../lib/timeline.es.js';
|
|
@@ -14,8 +14,8 @@ const REFLECT_COLOR = "#ec4899";
|
|
|
14
14
|
function TimeAxis({ domain }) {
|
|
15
15
|
const ticks = [0, 0.25, 0.5, 0.75, 1];
|
|
16
16
|
return /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-[6rem_1fr] items-center", children: [
|
|
17
|
-
/* @__PURE__ */ jsx("p", { className: "
|
|
18
|
-
/* @__PURE__ */ jsx("div", { className: "
|
|
17
|
+
/* @__PURE__ */ jsx("p", { className: "flex items-center self-stretch border-r border-border/50 pl-3 text-meta text-muted-foreground", children: "Time" }),
|
|
18
|
+
/* @__PURE__ */ jsx("div", { className: "flex justify-between px-1 py-1.5 font-mono text-meta text-muted-foreground", children: ticks.map((t) => /* @__PURE__ */ jsx("span", { children: formatTimeDisplay(tToTimestamp(t, domain)) }, t)) })
|
|
19
19
|
] });
|
|
20
20
|
}
|
|
21
21
|
function FlameTooltip({
|
|
@@ -29,7 +29,7 @@ function FlameTooltip({
|
|
|
29
29
|
const time = domain != null && t != null ? formatTimeDisplay(tToTimestamp(t, domain)) : null;
|
|
30
30
|
const visibleEntries = payload.filter((entry) => entry.name !== "t" && entry.name !== "time" && entry.value != null);
|
|
31
31
|
if (showValue) {
|
|
32
|
-
return /* @__PURE__ */ jsxs("div", { className: `${overlaySurfaceStyle}
|
|
32
|
+
return /* @__PURE__ */ jsxs("div", { className: `${overlaySurfaceStyle} flex flex-col gap-0.5 rounded px-2 py-1.5 font-mono text-meta`, children: [
|
|
33
33
|
time && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-3", children: [
|
|
34
34
|
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "time" }),
|
|
35
35
|
/* @__PURE__ */ jsx("span", { className: "text-foreground", children: time })
|
|
@@ -40,12 +40,12 @@ function FlameTooltip({
|
|
|
40
40
|
] }, entry.name))
|
|
41
41
|
] });
|
|
42
42
|
}
|
|
43
|
-
return /* @__PURE__ */ jsx("div", { className: `${overlaySurfaceStyle}
|
|
43
|
+
return /* @__PURE__ */ jsx("div", { className: `${overlaySurfaceStyle} rounded px-2 py-1 font-mono text-meta`, children: time && /* @__PURE__ */ jsx("span", { className: "text-foreground", children: time }) });
|
|
44
44
|
}
|
|
45
45
|
function AreaRow({ label, data, dataKey, color, gradientId, domain, zoomDomain, threshold }) {
|
|
46
46
|
const yMax = getAreaRowYMax(data, dataKey, threshold);
|
|
47
|
-
return /* @__PURE__ */ jsxs("div", { className: "
|
|
48
|
-
/* @__PURE__ */ jsx("p", { className: "
|
|
47
|
+
return /* @__PURE__ */ jsxs("div", { className: "relative grid grid-cols-[6rem_1fr] items-center border-b border-border/50 hover:z-10", children: [
|
|
48
|
+
/* @__PURE__ */ jsx("p", { className: "flex items-center self-stretch border-r border-border/50 pl-3 text-meta text-muted-foreground", children: label }),
|
|
49
49
|
/* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(ResponsiveContainer, { width: "100%", height: 32, children: /* @__PURE__ */ jsxs(AreaChart, { data, margin: { top: 0, right: 0, bottom: 0, left: 0 }, children: [
|
|
50
50
|
/* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsxs("linearGradient", { id: gradientId, x1: "0", y1: "0", x2: "0", y2: "1", children: [
|
|
51
51
|
/* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: color, stopOpacity: 0.35 }),
|
|
@@ -77,8 +77,8 @@ function AreaRow({ label, data, dataKey, color, gradientId, domain, zoomDomain,
|
|
|
77
77
|
] });
|
|
78
78
|
}
|
|
79
79
|
function EventRow({ label, data, color, height = 32, domain, zoomDomain }) {
|
|
80
|
-
return /* @__PURE__ */ jsxs("div", { className: "
|
|
81
|
-
/* @__PURE__ */ jsx("p", { className: "
|
|
80
|
+
return /* @__PURE__ */ jsxs("div", { className: "relative grid grid-cols-[6rem_1fr] items-center border-b border-border/50 hover:z-10", children: [
|
|
81
|
+
/* @__PURE__ */ jsx("p", { className: "flex items-center self-stretch border-r border-border/50 pl-3 text-meta text-muted-foreground", children: label }),
|
|
82
82
|
/* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(ResponsiveContainer, { width: "100%", height, children: /* @__PURE__ */ jsxs(ScatterChart, { margin: { top: 0, right: 0, bottom: 0, left: 0 }, children: [
|
|
83
83
|
/* @__PURE__ */ jsx(XAxis, { dataKey: "t", type: "number", domain: zoomDomain, allowDataOverflow: true, hide: true }),
|
|
84
84
|
/* @__PURE__ */ jsx(YAxis, { dataKey: "event", type: "number", domain: [0, 2], hide: true }),
|
|
@@ -115,8 +115,8 @@ function CombinedRow({
|
|
|
115
115
|
onSelectT
|
|
116
116
|
}) {
|
|
117
117
|
const combinedData = toCombinedRowData(areaData, areaDataKey, eventData);
|
|
118
|
-
return /* @__PURE__ */ jsxs("div", { className: "
|
|
119
|
-
/* @__PURE__ */ jsx("p", { className: "
|
|
118
|
+
return /* @__PURE__ */ jsxs("div", { className: "relative grid grid-cols-[6rem_1fr] items-center border-b border-border/50 hover:z-10", children: [
|
|
119
|
+
/* @__PURE__ */ jsx("p", { className: "flex items-center self-stretch border-r border-border/50 pl-3 text-meta text-muted-foreground", children: label }),
|
|
120
120
|
/* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(ResponsiveContainer, { width: "100%", height, children: /* @__PURE__ */ jsxs(
|
|
121
121
|
ComposedChart,
|
|
122
122
|
{
|
|
@@ -200,9 +200,9 @@ function ZoomTrack({
|
|
|
200
200
|
window.removeEventListener("mouseup", onMouseUp);
|
|
201
201
|
};
|
|
202
202
|
}, [toTimestamp, zoomLeft, zoomRight, onZoomLeftChange, onZoomRightChange]);
|
|
203
|
-
return /* @__PURE__ */ jsxs("div", { className: "
|
|
204
|
-
/* @__PURE__ */ jsxs("div", { className: "
|
|
205
|
-
/* @__PURE__ */ jsx("p", { className: "text-muted-foreground
|
|
203
|
+
return /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-[6rem_1fr] items-center border-b border-border/50", children: [
|
|
204
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1 self-stretch border-r border-border/50 pl-3", children: [
|
|
205
|
+
/* @__PURE__ */ jsx("p", { className: "text-meta text-muted-foreground", children: "Zoom" }),
|
|
206
206
|
/* @__PURE__ */ jsx(Button, { variant: "ghost", size: "icon-sm", "aria-label": "Reset zoom", onClick: onReset, children: /* @__PURE__ */ jsx(RotateCcw, { className: "size-3" }) })
|
|
207
207
|
] }),
|
|
208
208
|
/* @__PURE__ */ jsxs(
|
|
@@ -230,7 +230,7 @@ function ZoomTrack({
|
|
|
230
230
|
"div",
|
|
231
231
|
{
|
|
232
232
|
"data-zoom-part": "before",
|
|
233
|
-
className: "
|
|
233
|
+
className: "absolute inset-y-0 left-0 bg-background/60",
|
|
234
234
|
style: { width: `${leftPercent}%` }
|
|
235
235
|
}
|
|
236
236
|
),
|
|
@@ -238,7 +238,7 @@ function ZoomTrack({
|
|
|
238
238
|
"div",
|
|
239
239
|
{
|
|
240
240
|
"data-zoom-part": "band",
|
|
241
|
-
className: "border-border/30 bg-fill-subtle
|
|
241
|
+
className: "absolute inset-y-0 border-y border-border/30 bg-fill-subtle",
|
|
242
242
|
style: { left: `${leftPercent}%`, right: `${100 - rightPercent}%` }
|
|
243
243
|
}
|
|
244
244
|
),
|
|
@@ -246,7 +246,7 @@ function ZoomTrack({
|
|
|
246
246
|
"div",
|
|
247
247
|
{
|
|
248
248
|
"data-zoom-part": "after",
|
|
249
|
-
className: "
|
|
249
|
+
className: "absolute inset-y-0 right-0 bg-background/60",
|
|
250
250
|
style: { width: `${100 - rightPercent}%` }
|
|
251
251
|
}
|
|
252
252
|
),
|
|
@@ -254,7 +254,7 @@ function ZoomTrack({
|
|
|
254
254
|
"div",
|
|
255
255
|
{
|
|
256
256
|
"data-zoom-handle": "left",
|
|
257
|
-
className: "
|
|
257
|
+
className: "absolute inset-y-0 w-1 cursor-col-resize bg-foreground/50 hover:bg-foreground",
|
|
258
258
|
style: { left: `${leftPercent}%`, transform: "translateX(-50%)" },
|
|
259
259
|
onMouseDown: (e) => {
|
|
260
260
|
e.preventDefault();
|
|
@@ -267,7 +267,7 @@ function ZoomTrack({
|
|
|
267
267
|
"div",
|
|
268
268
|
{
|
|
269
269
|
"data-zoom-handle": "right",
|
|
270
|
-
className: "
|
|
270
|
+
className: "absolute inset-y-0 w-1 cursor-col-resize bg-foreground/50 hover:bg-foreground",
|
|
271
271
|
style: { left: `${rightPercent}%`, transform: "translateX(-50%)" },
|
|
272
272
|
onMouseDown: (e) => {
|
|
273
273
|
e.preventDefault();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flame-graph.es.js","sources":["../../../../src/domains/memory/components/flame-graph.tsx"],"sourcesContent":["import { RotateCcw } from 'lucide-react';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n Area,\n AreaChart,\n ComposedChart,\n ReferenceLine,\n ResponsiveContainer,\n Scatter,\n ScatterChart,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts';\n\nimport { Button } from '../../../ds/components/Button';\nimport { overlaySurfaceStyle } from '../../../ds/primitives/raised-surface';\nimport type { ExtractedOmMarker } from '../lib/extract-markers';\nimport { tToTimestampMs } from '../lib/replay-selection';\nimport type { TDomain } from '../lib/timeline';\nimport { formatTimeDisplay, tToTimestamp } from '../lib/timeline';\nimport type { MemoryMessage, OMHistoryRecord } from '../types';\nimport {\n getAreaRowYMax,\n isEventPoint,\n toActiveObservationData,\n toBufferedObservationData,\n toCombinedRowData,\n toContextData,\n toEventData,\n toMessageData,\n toSelectedT,\n} from './flame-graph-data';\n\nexport interface ZoomRange {\n left: number;\n right: number;\n}\n\ninterface FlameGraphProps {\n omRecords: OMHistoryRecord[];\n markers: ExtractedOmMarker[];\n messages: MemoryMessage[];\n tDomain: TDomain;\n observationThreshold?: number;\n reflectionThreshold?: number;\n onSelectTimestamp?: (timestamp: number | null) => void;\n /**\n * Controlled zoom range (epoch ms). When provided together with\n * `onZoomRangeChange`, the caller owns the range and the graph becomes a\n * controlled component; otherwise the range is managed internally.\n */\n zoomRange?: ZoomRange;\n onZoomRangeChange?: (range: ZoomRange) => void;\n}\n\ntype RechartsClickState = { activeLabel?: string | number } | null | undefined;\n\nconst MSG_COLOR = 'var(--color-green-500, #22c55e)';\nconst OBS_COLOR = '#f59e0b';\nconst REFLECT_COLOR = '#ec4899';\n\nfunction TimeAxis({ domain }: { domain: TDomain }) {\n const ticks = [0, 0.25, 0.5, 0.75, 1];\n return (\n <div className=\"grid grid-cols-[6rem_1fr] items-center\">\n <p className=\"text-muted-foreground border-border/50 text-meta flex items-center self-stretch border-r pl-3\">\n Time\n </p>\n <div className=\"text-muted-foreground text-meta flex justify-between px-1 py-1.5 font-mono\">\n {ticks.map(t => (\n <span key={t}>{formatTimeDisplay(tToTimestamp(t, domain))}</span>\n ))}\n </div>\n </div>\n );\n}\n\nexport function FlameTooltip({\n active,\n payload,\n domain,\n showValue,\n}: {\n active?: boolean;\n payload?: Array<{ value: unknown; name: string; payload?: { t?: number } }>;\n domain?: TDomain;\n showValue?: boolean;\n}) {\n if (!active || !payload?.length) return null;\n const t = payload[0]?.payload?.t;\n const time = domain != null && t != null ? formatTimeDisplay(tToTimestamp(t, domain)) : null;\n const visibleEntries = payload.filter(entry => entry.name !== 't' && entry.name !== 'time' && entry.value != null);\n\n if (showValue) {\n return (\n <div className={`${overlaySurfaceStyle} text-meta flex flex-col gap-0.5 rounded px-2 py-1.5 font-mono`}>\n {time && (\n <div className=\"flex items-center justify-between gap-3\">\n <span className=\"text-muted-foreground\">time</span>\n <span className=\"text-foreground\">{time}</span>\n </div>\n )}\n {visibleEntries.map(entry => (\n <div key={entry.name} className=\"flex items-center justify-between gap-3\">\n <span className=\"text-muted-foreground\">{entry.name}</span>\n <span className=\"text-foreground\">\n {typeof entry.value === 'number' ? Math.round(entry.value).toLocaleString() : String(entry.value)}\n </span>\n </div>\n ))}\n </div>\n );\n }\n\n return (\n <div className={`${overlaySurfaceStyle} text-meta rounded px-2 py-1 font-mono`}>\n {time && <span className=\"text-foreground\">{time}</span>}\n </div>\n );\n}\n\ninterface AreaRowProps {\n label: string;\n data: Array<{ t: number; [k: string]: unknown }>;\n dataKey: string;\n color: string;\n gradientId: string;\n domain: TDomain;\n zoomDomain: [number, number];\n threshold?: number;\n}\n\nfunction AreaRow({ label, data, dataKey, color, gradientId, domain, zoomDomain, threshold }: AreaRowProps) {\n const yMax = getAreaRowYMax(data, dataKey, threshold);\n\n return (\n <div className=\"border-border/50 relative grid grid-cols-[6rem_1fr] items-center border-b hover:z-10\">\n <p className=\"text-muted-foreground border-border/50 text-meta flex items-center self-stretch border-r pl-3\">\n {label}\n </p>\n <div>\n <ResponsiveContainer width=\"100%\" height={32}>\n <AreaChart data={data} margin={{ top: 0, right: 0, bottom: 0, left: 0 }}>\n <defs>\n <linearGradient id={gradientId} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor={color} stopOpacity={0.35} />\n <stop offset=\"100%\" stopColor={color} stopOpacity={0.03} />\n </linearGradient>\n </defs>\n <XAxis dataKey=\"t\" type=\"number\" domain={zoomDomain} allowDataOverflow hide />\n <YAxis type=\"number\" domain={yMax != null ? [0, yMax] : undefined} hide />\n <Tooltip\n content={<FlameTooltip domain={domain} showValue />}\n cursor={{ stroke: 'rgba(255,255,255,0.08)' }}\n />\n <Area\n type=\"linear\"\n dataKey={dataKey}\n stroke={color}\n strokeWidth={1}\n strokeOpacity={0.6}\n fill={`url(#${gradientId})`}\n isAnimationActive={false}\n />\n {threshold != null && (\n <ReferenceLine y={threshold} stroke={color} strokeDasharray=\"4 3\" strokeOpacity={0.4} />\n )}\n </AreaChart>\n </ResponsiveContainer>\n </div>\n </div>\n );\n}\n\ninterface EventRowProps {\n label: string;\n data: Array<{ t: number; event: number; [k: string]: unknown }>;\n color: string;\n height?: number;\n domain: TDomain;\n zoomDomain: [number, number];\n}\n\nfunction EventRow({ label, data, color, height = 32, domain, zoomDomain }: EventRowProps) {\n return (\n <div className=\"border-border/50 relative grid grid-cols-[6rem_1fr] items-center border-b hover:z-10\">\n <p className=\"text-muted-foreground border-border/50 text-meta flex items-center self-stretch border-r pl-3\">\n {label}\n </p>\n <div>\n <ResponsiveContainer width=\"100%\" height={height}>\n <ScatterChart margin={{ top: 0, right: 0, bottom: 0, left: 0 }}>\n <XAxis dataKey=\"t\" type=\"number\" domain={zoomDomain} allowDataOverflow hide />\n <YAxis dataKey=\"event\" type=\"number\" domain={[0, 2]} hide />\n <Tooltip content={<FlameTooltip domain={domain} />} cursor={false} />\n <Scatter\n data={data}\n fill={color}\n isAnimationActive={false}\n shape={(props: Record<string, unknown>) => {\n const cx = props.cx as number;\n return (\n <g>\n <rect x={cx - 6} y={0} width={12} height={height} fill=\"transparent\" />\n <rect x={cx - 1.5} y={0} width={3} height={height} fill={color} />\n </g>\n );\n }}\n />\n </ScatterChart>\n </ResponsiveContainer>\n </div>\n </div>\n );\n}\n\ninterface CombinedRowProps {\n label: string;\n areaData: Array<Record<string, number>>;\n areaDataKey: string;\n eventData: Array<{ t: number; event: number; [k: string]: unknown }>;\n color: string;\n gradientId: string;\n domain: TDomain;\n zoomDomain: [number, number];\n threshold?: number;\n height?: number;\n onSelectT?: (t: number) => void;\n}\n\nfunction CombinedRow({\n label,\n areaData,\n areaDataKey,\n eventData,\n color,\n gradientId,\n domain,\n zoomDomain,\n threshold,\n height = 44,\n onSelectT,\n}: CombinedRowProps) {\n const combinedData = toCombinedRowData(areaData, areaDataKey, eventData);\n\n return (\n <div className=\"border-border/50 relative grid grid-cols-[6rem_1fr] items-center border-b hover:z-10\">\n <p className=\"text-muted-foreground border-border/50 text-meta flex items-center self-stretch border-r pl-3\">\n {label}\n </p>\n <div>\n <ResponsiveContainer width=\"100%\" height={height}>\n <ComposedChart\n margin={{ top: 0, right: 0, bottom: 0, left: 0 }}\n onClick={(state: RechartsClickState) => {\n const t = toSelectedT(state?.activeLabel);\n if (t != null && onSelectT) onSelectT(t);\n }}\n className={onSelectT ? 'cursor-pointer' : undefined}\n >\n <defs>\n <linearGradient id={gradientId} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor={color} stopOpacity={0.35} />\n <stop offset=\"100%\" stopColor={color} stopOpacity={0.06} />\n </linearGradient>\n </defs>\n <XAxis dataKey=\"t\" type=\"number\" domain={zoomDomain} allowDataOverflow hide />\n <YAxis yAxisId=\"area\" dataKey={areaDataKey} type=\"number\" hide domain={[0, 'dataMax']} />\n <Tooltip content={<FlameTooltip domain={domain} showValue />} cursor={false} />\n <Area\n yAxisId=\"area\"\n data={combinedData}\n type=\"linear\"\n dataKey={areaDataKey}\n stroke={color}\n strokeWidth={1}\n strokeOpacity={0.6}\n fill={`url(#${gradientId})`}\n isAnimationActive={false}\n activeDot={{ r: 5, stroke: color, strokeWidth: 2, fill: '#0a0a0a' }}\n dot={(props: Record<string, unknown>) =>\n isEventPoint(props.payload) ? (\n <circle cx={props.cx as number} cy={props.cy as number} r={4} fill={color} />\n ) : (\n <></>\n )\n }\n />\n {threshold != null && (\n <ReferenceLine yAxisId=\"area\" y={threshold} stroke={color} strokeDasharray=\"4 3\" strokeOpacity={0.4} />\n )}\n </ComposedChart>\n </ResponsiveContainer>\n </div>\n </div>\n );\n}\n\nfunction ZoomTrack({\n tDomain,\n zoomLeft,\n zoomRight,\n onZoomLeftChange,\n onZoomRightChange,\n onReset,\n}: {\n tDomain: TDomain;\n zoomLeft: number;\n zoomRight: number;\n onZoomLeftChange: (ts: number) => void;\n onZoomRightChange: (ts: number) => void;\n onReset: () => void;\n}) {\n const trackRef = useRef<HTMLDivElement>(null);\n const dragging = useRef<'left' | 'right' | null>(null);\n\n const range = tDomain.tMax - tDomain.tMin;\n const leftPercent = range > 0 ? ((zoomLeft - tDomain.tMin) / range) * 100 : 0;\n const rightPercent = range > 0 ? ((zoomRight - tDomain.tMin) / range) * 100 : 100;\n\n const toTimestamp = useCallback(\n (clientX: number) => {\n const track = trackRef.current;\n if (!track) return null;\n const rect = track.getBoundingClientRect();\n const frac = Math.max(0, Math.min(1, (clientX - rect.left) / rect.width));\n return tDomain.tMin + frac * (tDomain.tMax - tDomain.tMin);\n },\n [tDomain.tMin, tDomain.tMax],\n );\n\n useEffect(() => {\n const onMouseMove = (e: MouseEvent) => {\n if (!dragging.current) return;\n const ts = toTimestamp(e.clientX);\n if (ts == null) return;\n if (dragging.current === 'left') {\n onZoomLeftChange(Math.min(ts, zoomRight));\n } else {\n onZoomRightChange(Math.max(ts, zoomLeft));\n }\n };\n const onMouseUp = () => {\n dragging.current = null;\n };\n window.addEventListener('mousemove', onMouseMove);\n window.addEventListener('mouseup', onMouseUp);\n return () => {\n window.removeEventListener('mousemove', onMouseMove);\n window.removeEventListener('mouseup', onMouseUp);\n };\n }, [toTimestamp, zoomLeft, zoomRight, onZoomLeftChange, onZoomRightChange]);\n\n return (\n <div className=\"border-border/50 grid grid-cols-[6rem_1fr] items-center border-b\">\n <div className=\"border-border/50 flex items-center gap-1 self-stretch border-r pl-3\">\n <p className=\"text-muted-foreground text-meta\">Zoom</p>\n <Button variant=\"ghost\" size=\"icon-sm\" aria-label=\"Reset zoom\" onClick={onReset}>\n <RotateCcw className=\"size-3\" />\n </Button>\n </div>\n <div\n ref={trackRef}\n data-zoom-track=\"\"\n className=\"relative h-6 cursor-pointer select-none\"\n onMouseDown={e => {\n const ts = toTimestamp(e.clientX);\n if (ts == null) return;\n e.preventDefault();\n const distLeft = Math.abs(ts - zoomLeft);\n const distRight = Math.abs(ts - zoomRight);\n if (distLeft <= distRight) {\n onZoomLeftChange(Math.min(ts, zoomRight));\n dragging.current = 'left';\n } else {\n onZoomRightChange(Math.max(ts, zoomLeft));\n dragging.current = 'right';\n }\n }}\n >\n <div\n data-zoom-part=\"before\"\n className=\"bg-background/60 absolute inset-y-0 left-0\"\n style={{ width: `${leftPercent}%` }}\n />\n <div\n data-zoom-part=\"band\"\n className=\"border-border/30 bg-fill-subtle absolute inset-y-0 border-y\"\n style={{ left: `${leftPercent}%`, right: `${100 - rightPercent}%` }}\n />\n <div\n data-zoom-part=\"after\"\n className=\"bg-background/60 absolute inset-y-0 right-0\"\n style={{ width: `${100 - rightPercent}%` }}\n />\n <div\n data-zoom-handle=\"left\"\n className=\"bg-foreground/50 hover:bg-foreground absolute inset-y-0 w-1 cursor-col-resize\"\n style={{ left: `${leftPercent}%`, transform: 'translateX(-50%)' }}\n onMouseDown={e => {\n e.preventDefault();\n e.stopPropagation();\n dragging.current = 'left';\n }}\n />\n <div\n data-zoom-handle=\"right\"\n className=\"bg-foreground/50 hover:bg-foreground absolute inset-y-0 w-1 cursor-col-resize\"\n style={{ left: `${rightPercent}%`, transform: 'translateX(-50%)' }}\n onMouseDown={e => {\n e.preventDefault();\n e.stopPropagation();\n dragging.current = 'right';\n }}\n />\n </div>\n </div>\n );\n}\n\nconst FALLBACK_DOMAIN: TDomain = { tMin: 0, tMax: 1 };\n\nexport function FlameGraph({\n omRecords,\n markers,\n messages,\n tDomain: tDomainProp,\n observationThreshold,\n reflectionThreshold,\n onSelectTimestamp,\n zoomRange,\n onZoomRangeChange,\n}: FlameGraphProps) {\n const domain = tDomainProp ?? FALLBACK_DOMAIN;\n\n const handleSelectT = useCallback(\n (t: number) => {\n onSelectTimestamp?.(tToTimestampMs(t, domain));\n },\n [onSelectTimestamp, domain],\n );\n\n const isControlled = zoomRange != null && onZoomRangeChange != null;\n const [internalZoomLeft, setInternalZoomLeft] = useState<number>(domain.tMin);\n const [internalZoomRight, setInternalZoomRight] = useState<number>(domain.tMax);\n\n // Reset the internal (uncontrolled) range whenever the domain changes.\n // Controlled callers own resetting via `onZoomRangeChange`.\n useEffect(() => {\n if (isControlled) return;\n setInternalZoomLeft(domain.tMin);\n setInternalZoomRight(domain.tMax);\n }, [domain.tMin, domain.tMax, isControlled]);\n\n const zoomLeft = isControlled ? zoomRange.left : internalZoomLeft;\n const zoomRight = isControlled ? zoomRange.right : internalZoomRight;\n\n const setZoomLeft = useCallback(\n (ts: number) => {\n if (isControlled) onZoomRangeChange({ left: ts, right: zoomRight });\n else setInternalZoomLeft(ts);\n },\n [isControlled, onZoomRangeChange, zoomRight],\n );\n const setZoomRight = useCallback(\n (ts: number) => {\n if (isControlled) onZoomRangeChange({ left: zoomLeft, right: ts });\n else setInternalZoomRight(ts);\n },\n [isControlled, onZoomRangeChange, zoomLeft],\n );\n\n const resetZoom = useCallback(() => {\n if (isControlled) onZoomRangeChange({ left: domain.tMin, right: domain.tMax });\n else {\n setInternalZoomLeft(domain.tMin);\n setInternalZoomRight(domain.tMax);\n }\n }, [isControlled, onZoomRangeChange, domain.tMin, domain.tMax]);\n\n const range = domain.tMax - domain.tMin;\n const zoomTLeft = range > 0 ? (zoomLeft - domain.tMin) / range : 0;\n const zoomTRight = range > 0 ? (zoomRight - domain.tMin) / range : 1;\n const zoomDomain: [number, number] = [zoomTLeft, zoomTRight];\n\n const messageData = useMemo(() => toMessageData(messages, domain), [messages, domain]);\n const contextData = useMemo(() => toContextData(omRecords, markers, domain), [omRecords, markers, domain]);\n const activeObservationData = useMemo(\n () => toActiveObservationData(omRecords, markers, domain),\n [omRecords, markers, domain],\n );\n const bufferedObservationData = useMemo(() => toBufferedObservationData(markers, domain), [markers, domain]);\n const eventData = useMemo(() => toEventData(omRecords, domain), [omRecords, domain]);\n\n const hasData =\n messageData.length > 0 || contextData.length > 0 || activeObservationData.length > 0 || eventData.length > 0;\n\n if (!hasData) return null;\n\n return (\n <div className=\"flex flex-col pr-2 pb-2 [&_.recharts-surface]:outline-none\">\n <CombinedRow\n label=\"Messages\"\n areaData={contextData}\n areaDataKey=\"pendingMessageTokens\"\n eventData={messageData}\n color={MSG_COLOR}\n gradientId=\"grad-messages\"\n domain={domain}\n zoomDomain={zoomDomain}\n threshold={observationThreshold}\n onSelectT={onSelectTimestamp ? handleSelectT : undefined}\n />\n\n <CombinedRow\n label=\"Observations\"\n areaData={activeObservationData}\n areaDataKey=\"observationTokenCount\"\n eventData={eventData}\n color={OBS_COLOR}\n gradientId=\"grad-observations\"\n domain={domain}\n zoomDomain={zoomDomain}\n threshold={reflectionThreshold}\n onSelectT={onSelectTimestamp ? handleSelectT : undefined}\n />\n\n {bufferedObservationData.length > 0 && (\n <AreaRow\n label=\"Buffered obs\"\n data={bufferedObservationData}\n dataKey=\"bufferedObservationTokenCount\"\n color={REFLECT_COLOR}\n gradientId=\"grad-buffered-obs\"\n domain={domain}\n zoomDomain={zoomDomain}\n threshold={reflectionThreshold}\n />\n )}\n\n {eventData.length > 0 && (\n <EventRow label=\"Events\" data={eventData} color={REFLECT_COLOR} domain={domain} zoomDomain={zoomDomain} />\n )}\n\n <TimeAxis domain={domain} />\n\n <ZoomTrack\n tDomain={domain}\n zoomLeft={zoomLeft}\n zoomRight={zoomRight}\n onZoomLeftChange={setZoomLeft}\n onZoomRightChange={setZoomRight}\n onReset={resetZoom}\n />\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"flame-graph.es.js","sources":["../../../../src/domains/memory/components/flame-graph.tsx"],"sourcesContent":["import { RotateCcw } from 'lucide-react';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n Area,\n AreaChart,\n ComposedChart,\n ReferenceLine,\n ResponsiveContainer,\n Scatter,\n ScatterChart,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts';\n\nimport { Button } from '../../../ds/components/Button';\nimport { overlaySurfaceStyle } from '../../../ds/primitives/raised-surface';\nimport type { ExtractedOmMarker } from '../lib/extract-markers';\nimport { tToTimestampMs } from '../lib/replay-selection';\nimport type { TDomain } from '../lib/timeline';\nimport { formatTimeDisplay, tToTimestamp } from '../lib/timeline';\nimport type { MemoryMessage, OMHistoryRecord } from '../types';\nimport {\n getAreaRowYMax,\n isEventPoint,\n toActiveObservationData,\n toBufferedObservationData,\n toCombinedRowData,\n toContextData,\n toEventData,\n toMessageData,\n toSelectedT,\n} from './flame-graph-data';\n\nexport interface ZoomRange {\n left: number;\n right: number;\n}\n\ninterface FlameGraphProps {\n omRecords: OMHistoryRecord[];\n markers: ExtractedOmMarker[];\n messages: MemoryMessage[];\n tDomain: TDomain;\n observationThreshold?: number;\n reflectionThreshold?: number;\n onSelectTimestamp?: (timestamp: number | null) => void;\n /**\n * Controlled zoom range (epoch ms). When provided together with\n * `onZoomRangeChange`, the caller owns the range and the graph becomes a\n * controlled component; otherwise the range is managed internally.\n */\n zoomRange?: ZoomRange;\n onZoomRangeChange?: (range: ZoomRange) => void;\n}\n\ntype RechartsClickState = { activeLabel?: string | number } | null | undefined;\n\nconst MSG_COLOR = 'var(--color-green-500, #22c55e)';\nconst OBS_COLOR = '#f59e0b';\nconst REFLECT_COLOR = '#ec4899';\n\nfunction TimeAxis({ domain }: { domain: TDomain }) {\n const ticks = [0, 0.25, 0.5, 0.75, 1];\n return (\n <div className=\"grid grid-cols-[6rem_1fr] items-center\">\n <p className=\"flex items-center self-stretch border-r border-border/50 pl-3 text-meta text-muted-foreground\">\n Time\n </p>\n <div className=\"flex justify-between px-1 py-1.5 font-mono text-meta text-muted-foreground\">\n {ticks.map(t => (\n <span key={t}>{formatTimeDisplay(tToTimestamp(t, domain))}</span>\n ))}\n </div>\n </div>\n );\n}\n\nexport function FlameTooltip({\n active,\n payload,\n domain,\n showValue,\n}: {\n active?: boolean;\n payload?: Array<{ value: unknown; name: string; payload?: { t?: number } }>;\n domain?: TDomain;\n showValue?: boolean;\n}) {\n if (!active || !payload?.length) return null;\n const t = payload[0]?.payload?.t;\n const time = domain != null && t != null ? formatTimeDisplay(tToTimestamp(t, domain)) : null;\n const visibleEntries = payload.filter(entry => entry.name !== 't' && entry.name !== 'time' && entry.value != null);\n\n if (showValue) {\n return (\n <div className={`${overlaySurfaceStyle} flex flex-col gap-0.5 rounded px-2 py-1.5 font-mono text-meta`}>\n {time && (\n <div className=\"flex items-center justify-between gap-3\">\n <span className=\"text-muted-foreground\">time</span>\n <span className=\"text-foreground\">{time}</span>\n </div>\n )}\n {visibleEntries.map(entry => (\n <div key={entry.name} className=\"flex items-center justify-between gap-3\">\n <span className=\"text-muted-foreground\">{entry.name}</span>\n <span className=\"text-foreground\">\n {typeof entry.value === 'number' ? Math.round(entry.value).toLocaleString() : String(entry.value)}\n </span>\n </div>\n ))}\n </div>\n );\n }\n\n return (\n <div className={`${overlaySurfaceStyle} rounded px-2 py-1 font-mono text-meta`}>\n {time && <span className=\"text-foreground\">{time}</span>}\n </div>\n );\n}\n\ninterface AreaRowProps {\n label: string;\n data: Array<{ t: number; [k: string]: unknown }>;\n dataKey: string;\n color: string;\n gradientId: string;\n domain: TDomain;\n zoomDomain: [number, number];\n threshold?: number;\n}\n\nfunction AreaRow({ label, data, dataKey, color, gradientId, domain, zoomDomain, threshold }: AreaRowProps) {\n const yMax = getAreaRowYMax(data, dataKey, threshold);\n\n return (\n <div className=\"relative grid grid-cols-[6rem_1fr] items-center border-b border-border/50 hover:z-10\">\n <p className=\"flex items-center self-stretch border-r border-border/50 pl-3 text-meta text-muted-foreground\">\n {label}\n </p>\n <div>\n <ResponsiveContainer width=\"100%\" height={32}>\n <AreaChart data={data} margin={{ top: 0, right: 0, bottom: 0, left: 0 }}>\n <defs>\n <linearGradient id={gradientId} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor={color} stopOpacity={0.35} />\n <stop offset=\"100%\" stopColor={color} stopOpacity={0.03} />\n </linearGradient>\n </defs>\n <XAxis dataKey=\"t\" type=\"number\" domain={zoomDomain} allowDataOverflow hide />\n <YAxis type=\"number\" domain={yMax != null ? [0, yMax] : undefined} hide />\n <Tooltip\n content={<FlameTooltip domain={domain} showValue />}\n cursor={{ stroke: 'rgba(255,255,255,0.08)' }}\n />\n <Area\n type=\"linear\"\n dataKey={dataKey}\n stroke={color}\n strokeWidth={1}\n strokeOpacity={0.6}\n fill={`url(#${gradientId})`}\n isAnimationActive={false}\n />\n {threshold != null && (\n <ReferenceLine y={threshold} stroke={color} strokeDasharray=\"4 3\" strokeOpacity={0.4} />\n )}\n </AreaChart>\n </ResponsiveContainer>\n </div>\n </div>\n );\n}\n\ninterface EventRowProps {\n label: string;\n data: Array<{ t: number; event: number; [k: string]: unknown }>;\n color: string;\n height?: number;\n domain: TDomain;\n zoomDomain: [number, number];\n}\n\nfunction EventRow({ label, data, color, height = 32, domain, zoomDomain }: EventRowProps) {\n return (\n <div className=\"relative grid grid-cols-[6rem_1fr] items-center border-b border-border/50 hover:z-10\">\n <p className=\"flex items-center self-stretch border-r border-border/50 pl-3 text-meta text-muted-foreground\">\n {label}\n </p>\n <div>\n <ResponsiveContainer width=\"100%\" height={height}>\n <ScatterChart margin={{ top: 0, right: 0, bottom: 0, left: 0 }}>\n <XAxis dataKey=\"t\" type=\"number\" domain={zoomDomain} allowDataOverflow hide />\n <YAxis dataKey=\"event\" type=\"number\" domain={[0, 2]} hide />\n <Tooltip content={<FlameTooltip domain={domain} />} cursor={false} />\n <Scatter\n data={data}\n fill={color}\n isAnimationActive={false}\n shape={(props: Record<string, unknown>) => {\n const cx = props.cx as number;\n return (\n <g>\n <rect x={cx - 6} y={0} width={12} height={height} fill=\"transparent\" />\n <rect x={cx - 1.5} y={0} width={3} height={height} fill={color} />\n </g>\n );\n }}\n />\n </ScatterChart>\n </ResponsiveContainer>\n </div>\n </div>\n );\n}\n\ninterface CombinedRowProps {\n label: string;\n areaData: Array<Record<string, number>>;\n areaDataKey: string;\n eventData: Array<{ t: number; event: number; [k: string]: unknown }>;\n color: string;\n gradientId: string;\n domain: TDomain;\n zoomDomain: [number, number];\n threshold?: number;\n height?: number;\n onSelectT?: (t: number) => void;\n}\n\nfunction CombinedRow({\n label,\n areaData,\n areaDataKey,\n eventData,\n color,\n gradientId,\n domain,\n zoomDomain,\n threshold,\n height = 44,\n onSelectT,\n}: CombinedRowProps) {\n const combinedData = toCombinedRowData(areaData, areaDataKey, eventData);\n\n return (\n <div className=\"relative grid grid-cols-[6rem_1fr] items-center border-b border-border/50 hover:z-10\">\n <p className=\"flex items-center self-stretch border-r border-border/50 pl-3 text-meta text-muted-foreground\">\n {label}\n </p>\n <div>\n <ResponsiveContainer width=\"100%\" height={height}>\n <ComposedChart\n margin={{ top: 0, right: 0, bottom: 0, left: 0 }}\n onClick={(state: RechartsClickState) => {\n const t = toSelectedT(state?.activeLabel);\n if (t != null && onSelectT) onSelectT(t);\n }}\n className={onSelectT ? 'cursor-pointer' : undefined}\n >\n <defs>\n <linearGradient id={gradientId} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor={color} stopOpacity={0.35} />\n <stop offset=\"100%\" stopColor={color} stopOpacity={0.06} />\n </linearGradient>\n </defs>\n <XAxis dataKey=\"t\" type=\"number\" domain={zoomDomain} allowDataOverflow hide />\n <YAxis yAxisId=\"area\" dataKey={areaDataKey} type=\"number\" hide domain={[0, 'dataMax']} />\n <Tooltip content={<FlameTooltip domain={domain} showValue />} cursor={false} />\n <Area\n yAxisId=\"area\"\n data={combinedData}\n type=\"linear\"\n dataKey={areaDataKey}\n stroke={color}\n strokeWidth={1}\n strokeOpacity={0.6}\n fill={`url(#${gradientId})`}\n isAnimationActive={false}\n activeDot={{ r: 5, stroke: color, strokeWidth: 2, fill: '#0a0a0a' }}\n dot={(props: Record<string, unknown>) =>\n isEventPoint(props.payload) ? (\n <circle cx={props.cx as number} cy={props.cy as number} r={4} fill={color} />\n ) : (\n <></>\n )\n }\n />\n {threshold != null && (\n <ReferenceLine yAxisId=\"area\" y={threshold} stroke={color} strokeDasharray=\"4 3\" strokeOpacity={0.4} />\n )}\n </ComposedChart>\n </ResponsiveContainer>\n </div>\n </div>\n );\n}\n\nfunction ZoomTrack({\n tDomain,\n zoomLeft,\n zoomRight,\n onZoomLeftChange,\n onZoomRightChange,\n onReset,\n}: {\n tDomain: TDomain;\n zoomLeft: number;\n zoomRight: number;\n onZoomLeftChange: (ts: number) => void;\n onZoomRightChange: (ts: number) => void;\n onReset: () => void;\n}) {\n const trackRef = useRef<HTMLDivElement>(null);\n const dragging = useRef<'left' | 'right' | null>(null);\n\n const range = tDomain.tMax - tDomain.tMin;\n const leftPercent = range > 0 ? ((zoomLeft - tDomain.tMin) / range) * 100 : 0;\n const rightPercent = range > 0 ? ((zoomRight - tDomain.tMin) / range) * 100 : 100;\n\n const toTimestamp = useCallback(\n (clientX: number) => {\n const track = trackRef.current;\n if (!track) return null;\n const rect = track.getBoundingClientRect();\n const frac = Math.max(0, Math.min(1, (clientX - rect.left) / rect.width));\n return tDomain.tMin + frac * (tDomain.tMax - tDomain.tMin);\n },\n [tDomain.tMin, tDomain.tMax],\n );\n\n useEffect(() => {\n const onMouseMove = (e: MouseEvent) => {\n if (!dragging.current) return;\n const ts = toTimestamp(e.clientX);\n if (ts == null) return;\n if (dragging.current === 'left') {\n onZoomLeftChange(Math.min(ts, zoomRight));\n } else {\n onZoomRightChange(Math.max(ts, zoomLeft));\n }\n };\n const onMouseUp = () => {\n dragging.current = null;\n };\n window.addEventListener('mousemove', onMouseMove);\n window.addEventListener('mouseup', onMouseUp);\n return () => {\n window.removeEventListener('mousemove', onMouseMove);\n window.removeEventListener('mouseup', onMouseUp);\n };\n }, [toTimestamp, zoomLeft, zoomRight, onZoomLeftChange, onZoomRightChange]);\n\n return (\n <div className=\"grid grid-cols-[6rem_1fr] items-center border-b border-border/50\">\n <div className=\"flex items-center gap-1 self-stretch border-r border-border/50 pl-3\">\n <p className=\"text-meta text-muted-foreground\">Zoom</p>\n <Button variant=\"ghost\" size=\"icon-sm\" aria-label=\"Reset zoom\" onClick={onReset}>\n <RotateCcw className=\"size-3\" />\n </Button>\n </div>\n <div\n ref={trackRef}\n data-zoom-track=\"\"\n className=\"relative h-6 cursor-pointer select-none\"\n onMouseDown={e => {\n const ts = toTimestamp(e.clientX);\n if (ts == null) return;\n e.preventDefault();\n const distLeft = Math.abs(ts - zoomLeft);\n const distRight = Math.abs(ts - zoomRight);\n if (distLeft <= distRight) {\n onZoomLeftChange(Math.min(ts, zoomRight));\n dragging.current = 'left';\n } else {\n onZoomRightChange(Math.max(ts, zoomLeft));\n dragging.current = 'right';\n }\n }}\n >\n <div\n data-zoom-part=\"before\"\n className=\"absolute inset-y-0 left-0 bg-background/60\"\n style={{ width: `${leftPercent}%` }}\n />\n <div\n data-zoom-part=\"band\"\n className=\"absolute inset-y-0 border-y border-border/30 bg-fill-subtle\"\n style={{ left: `${leftPercent}%`, right: `${100 - rightPercent}%` }}\n />\n <div\n data-zoom-part=\"after\"\n className=\"absolute inset-y-0 right-0 bg-background/60\"\n style={{ width: `${100 - rightPercent}%` }}\n />\n <div\n data-zoom-handle=\"left\"\n className=\"absolute inset-y-0 w-1 cursor-col-resize bg-foreground/50 hover:bg-foreground\"\n style={{ left: `${leftPercent}%`, transform: 'translateX(-50%)' }}\n onMouseDown={e => {\n e.preventDefault();\n e.stopPropagation();\n dragging.current = 'left';\n }}\n />\n <div\n data-zoom-handle=\"right\"\n className=\"absolute inset-y-0 w-1 cursor-col-resize bg-foreground/50 hover:bg-foreground\"\n style={{ left: `${rightPercent}%`, transform: 'translateX(-50%)' }}\n onMouseDown={e => {\n e.preventDefault();\n e.stopPropagation();\n dragging.current = 'right';\n }}\n />\n </div>\n </div>\n );\n}\n\nconst FALLBACK_DOMAIN: TDomain = { tMin: 0, tMax: 1 };\n\nexport function FlameGraph({\n omRecords,\n markers,\n messages,\n tDomain: tDomainProp,\n observationThreshold,\n reflectionThreshold,\n onSelectTimestamp,\n zoomRange,\n onZoomRangeChange,\n}: FlameGraphProps) {\n const domain = tDomainProp ?? FALLBACK_DOMAIN;\n\n const handleSelectT = useCallback(\n (t: number) => {\n onSelectTimestamp?.(tToTimestampMs(t, domain));\n },\n [onSelectTimestamp, domain],\n );\n\n const isControlled = zoomRange != null && onZoomRangeChange != null;\n const [internalZoomLeft, setInternalZoomLeft] = useState<number>(domain.tMin);\n const [internalZoomRight, setInternalZoomRight] = useState<number>(domain.tMax);\n\n // Reset the internal (uncontrolled) range whenever the domain changes.\n // Controlled callers own resetting via `onZoomRangeChange`.\n useEffect(() => {\n if (isControlled) return;\n setInternalZoomLeft(domain.tMin);\n setInternalZoomRight(domain.tMax);\n }, [domain.tMin, domain.tMax, isControlled]);\n\n const zoomLeft = isControlled ? zoomRange.left : internalZoomLeft;\n const zoomRight = isControlled ? zoomRange.right : internalZoomRight;\n\n const setZoomLeft = useCallback(\n (ts: number) => {\n if (isControlled) onZoomRangeChange({ left: ts, right: zoomRight });\n else setInternalZoomLeft(ts);\n },\n [isControlled, onZoomRangeChange, zoomRight],\n );\n const setZoomRight = useCallback(\n (ts: number) => {\n if (isControlled) onZoomRangeChange({ left: zoomLeft, right: ts });\n else setInternalZoomRight(ts);\n },\n [isControlled, onZoomRangeChange, zoomLeft],\n );\n\n const resetZoom = useCallback(() => {\n if (isControlled) onZoomRangeChange({ left: domain.tMin, right: domain.tMax });\n else {\n setInternalZoomLeft(domain.tMin);\n setInternalZoomRight(domain.tMax);\n }\n }, [isControlled, onZoomRangeChange, domain.tMin, domain.tMax]);\n\n const range = domain.tMax - domain.tMin;\n const zoomTLeft = range > 0 ? (zoomLeft - domain.tMin) / range : 0;\n const zoomTRight = range > 0 ? (zoomRight - domain.tMin) / range : 1;\n const zoomDomain: [number, number] = [zoomTLeft, zoomTRight];\n\n const messageData = useMemo(() => toMessageData(messages, domain), [messages, domain]);\n const contextData = useMemo(() => toContextData(omRecords, markers, domain), [omRecords, markers, domain]);\n const activeObservationData = useMemo(\n () => toActiveObservationData(omRecords, markers, domain),\n [omRecords, markers, domain],\n );\n const bufferedObservationData = useMemo(() => toBufferedObservationData(markers, domain), [markers, domain]);\n const eventData = useMemo(() => toEventData(omRecords, domain), [omRecords, domain]);\n\n const hasData =\n messageData.length > 0 || contextData.length > 0 || activeObservationData.length > 0 || eventData.length > 0;\n\n if (!hasData) return null;\n\n return (\n <div className=\"flex flex-col pr-2 pb-2 [&_.recharts-surface]:outline-none\">\n <CombinedRow\n label=\"Messages\"\n areaData={contextData}\n areaDataKey=\"pendingMessageTokens\"\n eventData={messageData}\n color={MSG_COLOR}\n gradientId=\"grad-messages\"\n domain={domain}\n zoomDomain={zoomDomain}\n threshold={observationThreshold}\n onSelectT={onSelectTimestamp ? handleSelectT : undefined}\n />\n\n <CombinedRow\n label=\"Observations\"\n areaData={activeObservationData}\n areaDataKey=\"observationTokenCount\"\n eventData={eventData}\n color={OBS_COLOR}\n gradientId=\"grad-observations\"\n domain={domain}\n zoomDomain={zoomDomain}\n threshold={reflectionThreshold}\n onSelectT={onSelectTimestamp ? handleSelectT : undefined}\n />\n\n {bufferedObservationData.length > 0 && (\n <AreaRow\n label=\"Buffered obs\"\n data={bufferedObservationData}\n dataKey=\"bufferedObservationTokenCount\"\n color={REFLECT_COLOR}\n gradientId=\"grad-buffered-obs\"\n domain={domain}\n zoomDomain={zoomDomain}\n threshold={reflectionThreshold}\n />\n )}\n\n {eventData.length > 0 && (\n <EventRow label=\"Events\" data={eventData} color={REFLECT_COLOR} domain={domain} zoomDomain={zoomDomain} />\n )}\n\n <TimeAxis domain={domain} />\n\n <ZoomTrack\n tDomain={domain}\n zoomLeft={zoomLeft}\n zoomRight={zoomRight}\n onZoomLeftChange={setZoomLeft}\n onZoomRightChange={setZoomRight}\n onReset={resetZoom}\n />\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
5
5
|
const jsxRuntime = require('react/jsx-runtime');
|
|
6
6
|
const lucideReact = require('lucide-react');
|
|
7
7
|
const React = require('react');
|
|
8
|
-
const Button = require('../../../Button-
|
|
8
|
+
const Button = require('../../../Button-C0DBEBcJ.cjs');
|
|
9
9
|
const skeleton = require('../../../skeleton-cXUjPrq9.cjs');
|
|
10
10
|
const Txt = require('../../../Txt-B4-2nLaI.cjs');
|
|
11
11
|
const icons_MemoryIcon = require('../../../icons/MemoryIcon.cjs.js');
|
|
@@ -54,9 +54,9 @@ function MemoryStudioPanel({
|
|
|
54
54
|
const manualSelectionInRange = manualOMRecordId != null && visibleRecords.some((r) => r.id === manualOMRecordId) ? manualOMRecordId : null;
|
|
55
55
|
const selectedOMRecordId = replayRecordId ?? manualSelectionInRange;
|
|
56
56
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex size-full flex-col overflow-hidden", children: [
|
|
57
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "
|
|
57
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex shrink-0 items-center gap-2 border-b border-border px-3 py-2.5", children: [
|
|
58
58
|
/* @__PURE__ */ jsxRuntime.jsx(Button.Button, { type: "button", variant: "ghost", size: "icon-sm", tooltip: "Back to memory", onClick: () => onClose?.(), children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowLeftIcon, {}) }),
|
|
59
|
-
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "
|
|
59
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex min-w-0 items-center gap-1.5 text-foreground", children: [
|
|
60
60
|
/* @__PURE__ */ jsxRuntime.jsx(icons_MemoryIcon.MemoryIcon, { className: "size-4 shrink-0" }),
|
|
61
61
|
/* @__PURE__ */ jsxRuntime.jsx(Txt.Txt, { as: "span", variant: "column", children: "Observational memory" })
|
|
62
62
|
] })
|
|
@@ -75,7 +75,7 @@ function MemoryStudioPanel({
|
|
|
75
75
|
isLoading
|
|
76
76
|
}
|
|
77
77
|
) }),
|
|
78
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-
|
|
78
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-t border-border", children: [
|
|
79
79
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
80
80
|
domains_memory_components_threadContextProgress.ThreadContextProgress,
|
|
81
81
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-studio-panel.cjs.js","sources":["../../../../src/domains/memory/components/memory-studio-panel.tsx"],"sourcesContent":["import { ArrowLeftIcon } from 'lucide-react';\nimport { useEffect, useMemo, useState } from 'react';\n\nimport { Button } from '../../../ds/components/Button';\nimport { Skeleton } from '../../../ds/components/Skeleton';\nimport { Txt } from '../../../ds/components/Txt';\nimport { MemoryIcon } from '../../../ds/icons/MemoryIcon';\nimport { extractOmMarkers } from '../lib/extract-markers';\nimport { findRecordIdAtOrBefore, getObservationTimestampMs } from '../lib/replay-selection';\nimport { getLatestThreadContextWindowState } from '../lib/thread-context-window-state';\nimport { timestampsToTDomain } from '../lib/timeline';\nimport type { MemoryMessage, OMHistoryRecord } from '../types';\nimport { FlameGraph } from './flame-graph';\nimport type { ZoomRange } from './flame-graph';\nimport { ObservationDetailView } from './observation-detail-view';\nimport { ThreadContextProgress } from './thread-context-progress';\n\nexport interface MemoryStudioPanelProps {\n messages: MemoryMessage[];\n omRecords: OMHistoryRecord[];\n isLoading?: boolean;\n onClose?: () => void;\n /** Replay cursor (ms epoch) driven by the timeline; selects the matching observation. */\n selectedTimestamp?: number | null;\n /** Fired when the flame graph timeline is clicked, surfacing the replay cursor. */\n onSelectTimestamp?: (timestamp: number | null) => void;\n /**\n * Authoritative context-window token counts/thresholds supplied by the caller\n * (e.g. derived from the OM record + live stream progress). When provided these\n * take precedence over the values re-derived from message markers, keeping this\n * panel aligned with the OM sidebar. Marker-derived values remain the fallback\n * for standalone usage.\n */\n contextWindow?: {\n messageTokens?: number;\n messageThreshold?: number;\n memoryTokens?: number;\n memoryThreshold?: number;\n };\n}\n\nexport function MemoryStudioPanel({\n messages,\n omRecords,\n isLoading = false,\n onClose,\n selectedTimestamp,\n onSelectTimestamp,\n contextWindow,\n}: MemoryStudioPanelProps) {\n const [manualOMRecordId, setManualOMRecordId] = useState<string | null>(null);\n\n const markers = useMemo(() => extractOmMarkers(messages), [messages]);\n // timestampsToTDomain already returns the unit domain for an empty list.\n const tDomain = useMemo(\n () => timestampsToTDomain(messages.map(m => new Date(m.createdAt).toISOString())),\n [messages],\n );\n const windowState = useMemo(() => getLatestThreadContextWindowState({ markers, omRecords }), [markers, omRecords]);\n\n const memoryTokens = contextWindow?.memoryTokens ?? windowState.memoryTokens;\n const memoryThreshold = contextWindow?.memoryThreshold ?? windowState.memoryThreshold;\n\n // Zoom range (epoch ms) is owned here so it can both scope the FlameGraph\n // charts and filter the observation list. It resets to the full domain\n // whenever the domain changes (mirrors the FlameGraph's own reset behaviour).\n const [zoomRange, setZoomRange] = useState<ZoomRange>({ left: tDomain.tMin, right: tDomain.tMax });\n useEffect(() => {\n setZoomRange({ left: tDomain.tMin, right: tDomain.tMax });\n }, [tDomain.tMin, tDomain.tMax]);\n\n // The full-domain case is a strict pass-through so an untouched range never\n // hides records (e.g. observations outside the message-derived domain).\n const isFullRange = zoomRange.left <= tDomain.tMin && zoomRange.right >= tDomain.tMax;\n const visibleRecords = useMemo(() => {\n if (isFullRange) return omRecords;\n return omRecords.filter(record => {\n const t = getObservationTimestampMs(record);\n return t >= zoomRange.left && t <= zoomRange.right;\n });\n }, [omRecords, isFullRange, zoomRange.left, zoomRange.right]);\n\n // Replay cursor (controlled) overrides manual history selection. Resolve it\n // against the visible records so selection stays consistent with the list.\n const replayRecordId = useMemo(\n () => (selectedTimestamp != null ? findRecordIdAtOrBefore(visibleRecords, selectedTimestamp) : null),\n [visibleRecords, selectedTimestamp],\n );\n // Ignore a manual selection that the range has filtered out, so the detail\n // view falls back to a record that is actually visible instead of an empty state.\n const manualSelectionInRange =\n manualOMRecordId != null && visibleRecords.some(r => r.id === manualOMRecordId) ? manualOMRecordId : null;\n const selectedOMRecordId = replayRecordId ?? manualSelectionInRange;\n\n return (\n <div className=\"flex size-full flex-col overflow-hidden\">\n <div className=\"border-border flex shrink-0 items-center gap-2 border-b px-3 py-2.5\">\n <Button type=\"button\" variant=\"ghost\" size=\"icon-sm\" tooltip=\"Back to memory\" onClick={() => onClose?.()}>\n <ArrowLeftIcon />\n </Button>\n <span className=\"text-foreground flex min-w-0 items-center gap-1.5\">\n <MemoryIcon className=\"size-4 shrink-0\" />\n <Txt as=\"span\" variant=\"column\">\n Observational memory\n </Txt>\n </span>\n </div>\n\n {isLoading ? (\n <div data-testid=\"memory-studio-loading\" className=\"flex flex-1 flex-col gap-3 p-4\">\n <Skeleton className=\"h-6 w-40\" />\n <Skeleton className=\"h-32 w-full\" />\n <Skeleton className=\"h-16 w-full\" />\n </div>\n ) : (\n <div className=\"grid min-h-0 flex-1 grid-rows-[1fr_auto] overflow-hidden\">\n <div className=\"flex min-h-0 flex-col overflow-hidden\">\n <ObservationDetailView\n records={visibleRecords}\n selectedRecordId={selectedOMRecordId}\n onSelectRecord={setManualOMRecordId}\n isLoading={isLoading}\n />\n </div>\n <div className=\"border-border border-t\">\n <ThreadContextProgress\n messageTokens={contextWindow?.messageTokens ?? windowState.messageTokens}\n messageThreshold={contextWindow?.messageThreshold ?? windowState.messageThreshold}\n memoryTokens={memoryTokens}\n memoryThreshold={memoryThreshold}\n memoryLabel=\"Observations\"\n />\n <FlameGraph\n omRecords={omRecords}\n markers={markers}\n messages={messages}\n tDomain={tDomain}\n onSelectTimestamp={onSelectTimestamp}\n zoomRange={zoomRange}\n onZoomRangeChange={setZoomRange}\n />\n </div>\n </div>\n )}\n </div>\n );\n}\n"],"names":["useState","useMemo","extractOmMarkers","timestampsToTDomain","getLatestThreadContextWindowState","useEffect","getObservationTimestampMs","findRecordIdAtOrBefore","jsxs","jsx","Button","ArrowLeftIcon","MemoryIcon","Txt","Skeleton","ObservationDetailView","ThreadContextProgress","FlameGraph"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"memory-studio-panel.cjs.js","sources":["../../../../src/domains/memory/components/memory-studio-panel.tsx"],"sourcesContent":["import { ArrowLeftIcon } from 'lucide-react';\nimport { useEffect, useMemo, useState } from 'react';\n\nimport { Button } from '../../../ds/components/Button';\nimport { Skeleton } from '../../../ds/components/Skeleton';\nimport { Txt } from '../../../ds/components/Txt';\nimport { MemoryIcon } from '../../../ds/icons/MemoryIcon';\nimport { extractOmMarkers } from '../lib/extract-markers';\nimport { findRecordIdAtOrBefore, getObservationTimestampMs } from '../lib/replay-selection';\nimport { getLatestThreadContextWindowState } from '../lib/thread-context-window-state';\nimport { timestampsToTDomain } from '../lib/timeline';\nimport type { MemoryMessage, OMHistoryRecord } from '../types';\nimport { FlameGraph } from './flame-graph';\nimport type { ZoomRange } from './flame-graph';\nimport { ObservationDetailView } from './observation-detail-view';\nimport { ThreadContextProgress } from './thread-context-progress';\n\nexport interface MemoryStudioPanelProps {\n messages: MemoryMessage[];\n omRecords: OMHistoryRecord[];\n isLoading?: boolean;\n onClose?: () => void;\n /** Replay cursor (ms epoch) driven by the timeline; selects the matching observation. */\n selectedTimestamp?: number | null;\n /** Fired when the flame graph timeline is clicked, surfacing the replay cursor. */\n onSelectTimestamp?: (timestamp: number | null) => void;\n /**\n * Authoritative context-window token counts/thresholds supplied by the caller\n * (e.g. derived from the OM record + live stream progress). When provided these\n * take precedence over the values re-derived from message markers, keeping this\n * panel aligned with the OM sidebar. Marker-derived values remain the fallback\n * for standalone usage.\n */\n contextWindow?: {\n messageTokens?: number;\n messageThreshold?: number;\n memoryTokens?: number;\n memoryThreshold?: number;\n };\n}\n\nexport function MemoryStudioPanel({\n messages,\n omRecords,\n isLoading = false,\n onClose,\n selectedTimestamp,\n onSelectTimestamp,\n contextWindow,\n}: MemoryStudioPanelProps) {\n const [manualOMRecordId, setManualOMRecordId] = useState<string | null>(null);\n\n const markers = useMemo(() => extractOmMarkers(messages), [messages]);\n // timestampsToTDomain already returns the unit domain for an empty list.\n const tDomain = useMemo(\n () => timestampsToTDomain(messages.map(m => new Date(m.createdAt).toISOString())),\n [messages],\n );\n const windowState = useMemo(() => getLatestThreadContextWindowState({ markers, omRecords }), [markers, omRecords]);\n\n const memoryTokens = contextWindow?.memoryTokens ?? windowState.memoryTokens;\n const memoryThreshold = contextWindow?.memoryThreshold ?? windowState.memoryThreshold;\n\n // Zoom range (epoch ms) is owned here so it can both scope the FlameGraph\n // charts and filter the observation list. It resets to the full domain\n // whenever the domain changes (mirrors the FlameGraph's own reset behaviour).\n const [zoomRange, setZoomRange] = useState<ZoomRange>({ left: tDomain.tMin, right: tDomain.tMax });\n useEffect(() => {\n setZoomRange({ left: tDomain.tMin, right: tDomain.tMax });\n }, [tDomain.tMin, tDomain.tMax]);\n\n // The full-domain case is a strict pass-through so an untouched range never\n // hides records (e.g. observations outside the message-derived domain).\n const isFullRange = zoomRange.left <= tDomain.tMin && zoomRange.right >= tDomain.tMax;\n const visibleRecords = useMemo(() => {\n if (isFullRange) return omRecords;\n return omRecords.filter(record => {\n const t = getObservationTimestampMs(record);\n return t >= zoomRange.left && t <= zoomRange.right;\n });\n }, [omRecords, isFullRange, zoomRange.left, zoomRange.right]);\n\n // Replay cursor (controlled) overrides manual history selection. Resolve it\n // against the visible records so selection stays consistent with the list.\n const replayRecordId = useMemo(\n () => (selectedTimestamp != null ? findRecordIdAtOrBefore(visibleRecords, selectedTimestamp) : null),\n [visibleRecords, selectedTimestamp],\n );\n // Ignore a manual selection that the range has filtered out, so the detail\n // view falls back to a record that is actually visible instead of an empty state.\n const manualSelectionInRange =\n manualOMRecordId != null && visibleRecords.some(r => r.id === manualOMRecordId) ? manualOMRecordId : null;\n const selectedOMRecordId = replayRecordId ?? manualSelectionInRange;\n\n return (\n <div className=\"flex size-full flex-col overflow-hidden\">\n <div className=\"flex shrink-0 items-center gap-2 border-b border-border px-3 py-2.5\">\n <Button type=\"button\" variant=\"ghost\" size=\"icon-sm\" tooltip=\"Back to memory\" onClick={() => onClose?.()}>\n <ArrowLeftIcon />\n </Button>\n <span className=\"flex min-w-0 items-center gap-1.5 text-foreground\">\n <MemoryIcon className=\"size-4 shrink-0\" />\n <Txt as=\"span\" variant=\"column\">\n Observational memory\n </Txt>\n </span>\n </div>\n\n {isLoading ? (\n <div data-testid=\"memory-studio-loading\" className=\"flex flex-1 flex-col gap-3 p-4\">\n <Skeleton className=\"h-6 w-40\" />\n <Skeleton className=\"h-32 w-full\" />\n <Skeleton className=\"h-16 w-full\" />\n </div>\n ) : (\n <div className=\"grid min-h-0 flex-1 grid-rows-[1fr_auto] overflow-hidden\">\n <div className=\"flex min-h-0 flex-col overflow-hidden\">\n <ObservationDetailView\n records={visibleRecords}\n selectedRecordId={selectedOMRecordId}\n onSelectRecord={setManualOMRecordId}\n isLoading={isLoading}\n />\n </div>\n <div className=\"border-t border-border\">\n <ThreadContextProgress\n messageTokens={contextWindow?.messageTokens ?? windowState.messageTokens}\n messageThreshold={contextWindow?.messageThreshold ?? windowState.messageThreshold}\n memoryTokens={memoryTokens}\n memoryThreshold={memoryThreshold}\n memoryLabel=\"Observations\"\n />\n <FlameGraph\n omRecords={omRecords}\n markers={markers}\n messages={messages}\n tDomain={tDomain}\n onSelectTimestamp={onSelectTimestamp}\n zoomRange={zoomRange}\n onZoomRangeChange={setZoomRange}\n />\n </div>\n </div>\n )}\n </div>\n );\n}\n"],"names":["useState","useMemo","extractOmMarkers","timestampsToTDomain","getLatestThreadContextWindowState","useEffect","getObservationTimestampMs","findRecordIdAtOrBefore","jsxs","jsx","Button","ArrowLeftIcon","MemoryIcon","Txt","Skeleton","ObservationDetailView","ThreadContextProgress","FlameGraph"],"mappings":"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"}
|