@mastra/playground-ui 51.1.0-alpha.9 → 51.2.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +290 -0
- package/dist/{Button-BWj3opYd.cjs → Button-DA5XLUon.cjs} +2 -2
- package/dist/{Button-BWj3opYd.cjs.map → Button-DA5XLUon.cjs.map} +1 -1
- package/dist/{Button-XHy01fYR.js → Button-vr_I4iME.js} +2 -2
- package/dist/{Button-XHy01fYR.js.map → Button-vr_I4iME.js.map} +1 -1
- package/dist/{Notice-C6IkjU_x.cjs → Notice-BoT3Qi4U.cjs} +2 -2
- package/dist/{Notice-C6IkjU_x.cjs.map → Notice-BoT3Qi4U.cjs.map} +1 -1
- package/dist/{Notice-BtIu4ZoP.js → Notice-XR_HdGMF.js} +2 -2
- package/dist/{Notice-BtIu4ZoP.js.map → Notice-XR_HdGMF.js.map} +1 -1
- package/dist/{SessionExpired-C0ELbOFr.cjs → SessionExpired-h9yERVJz.cjs} +2 -2
- package/dist/{SessionExpired-C0ELbOFr.cjs.map → SessionExpired-h9yERVJz.cjs.map} +1 -1
- package/dist/{SessionExpired-BJ2GbVh1.js → SessionExpired-sUz4q0gn.js} +2 -2
- package/dist/{SessionExpired-BJ2GbVh1.js.map → SessionExpired-sUz4q0gn.js.map} +1 -1
- package/dist/{code-block-DCXZ3HKM.cjs → code-block-B1ObVVnF.cjs} +4 -4
- package/dist/{code-block-DCXZ3HKM.cjs.map → code-block-B1ObVVnF.cjs.map} +1 -1
- package/dist/{code-block-CA9sa6yS.js → code-block-CqRQwJK9.js} +4 -4
- package/dist/{code-block-CA9sa6yS.js.map → code-block-CqRQwJK9.js.map} +1 -1
- package/dist/{combobox-Cc6ePsiD.cjs → combobox-BO4NlbBt.cjs} +37 -27
- package/dist/combobox-BO4NlbBt.cjs.map +1 -0
- package/dist/{combobox-BWcXIkzo.js → combobox-BRj_27N9.js} +37 -27
- package/dist/combobox-BRj_27N9.js.map +1 -0
- package/dist/{command-BGPO-TD2.js → command-BB61PHOs.js} +2 -2
- package/dist/{command-BGPO-TD2.js.map → command-BB61PHOs.js.map} +1 -1
- package/dist/{command-BMb6p6cj.cjs → command-C24jGW8A.cjs} +2 -2
- package/dist/{command-BMb6p6cj.cjs.map → command-C24jGW8A.cjs.map} +1 -1
- package/dist/components/AlertDialog.cjs.js +1 -1
- package/dist/components/AlertDialog.es.js +1 -1
- package/dist/components/Arrival.cjs.js +26 -0
- package/dist/components/Arrival.cjs.js.map +1 -0
- package/dist/components/Arrival.d.ts +2 -0
- package/dist/components/Arrival.es.js +20 -0
- package/dist/components/Arrival.es.js.map +1 -0
- package/dist/components/Button.cjs.js +1 -1
- package/dist/components/Button.es.js +1 -1
- package/dist/components/ChatShell.cjs.js +1 -1
- package/dist/components/ChatShell.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/CodeEditor.cjs.js +1 -1
- package/dist/components/CodeEditor.es.js +1 -1
- package/dist/components/Columns.cjs.js +1 -1
- package/dist/components/Columns.es.js +1 -1
- package/dist/components/Combobox.cjs.js +1 -1
- package/dist/components/Combobox.es.js +1 -1
- package/dist/components/Command.cjs.js +1 -1
- package/dist/components/Command.es.js +1 -1
- package/dist/components/CommandPalette.cjs.js +1 -1
- package/dist/components/CommandPalette.es.js +1 -1
- package/dist/components/Comment.cjs.js +170 -0
- package/dist/components/Comment.cjs.js.map +1 -0
- package/dist/components/Comment.d.ts +2 -0
- package/dist/components/Comment.es.js +156 -0
- package/dist/components/Comment.es.js.map +1 -0
- package/dist/components/ContextMenu.cjs.js +3 -2
- package/dist/components/ContextMenu.cjs.js.map +1 -1
- package/dist/components/ContextMenu.es.js +3 -2
- 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 +2 -2
- package/dist/components/DataDetailsPanel.es.js +2 -2
- package/dist/components/DataFilter.cjs.js +2 -2
- package/dist/components/DataFilter.es.js +2 -2
- package/dist/components/DataKeysAndValues.cjs.js +1 -1
- package/dist/components/DataKeysAndValues.es.js +1 -1
- package/dist/components/DataList.cjs.js +11 -9
- package/dist/components/DataList.cjs.js.map +1 -1
- package/dist/components/DataList.es.js +10 -9
- 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 +2 -2
- package/dist/components/DateRangeTimeline.es.js +2 -2
- package/dist/components/DateTimePicker.cjs.js +4 -4
- package/dist/components/DateTimePicker.es.js +4 -4
- package/dist/components/DateTimeRangePicker.cjs.js +1 -1
- package/dist/components/DateTimeRangePicker.es.js +1 -1
- package/dist/components/Dialog.cjs.js +1 -1
- package/dist/components/Dialog.es.js +1 -1
- package/dist/components/Drawer.cjs.js +1 -1
- package/dist/components/Drawer.es.js +1 -1
- package/dist/components/DropdownMenu.cjs.js +1 -1
- package/dist/components/DropdownMenu.es.js +1 -1
- package/dist/components/EnvironmentVariablesEditor.cjs.js +9 -9
- package/dist/components/EnvironmentVariablesEditor.cjs.js.map +1 -1
- package/dist/components/EnvironmentVariablesEditor.es.js +9 -9
- package/dist/components/EnvironmentVariablesEditor.es.js.map +1 -1
- package/dist/components/ErrorBoundary.cjs.js +1 -1
- package/dist/components/ErrorBoundary.es.js +1 -1
- package/dist/components/FormFieldBlocks.cjs.js +3 -3
- package/dist/components/FormFieldBlocks.es.js +3 -3
- 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/ItemList.cjs.js +1 -1
- package/dist/components/ItemList.es.js +1 -1
- package/dist/components/JSONSchemaForm.cjs.js +3 -3
- package/dist/components/JSONSchemaForm.es.js +3 -3
- 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 +2 -2
- package/dist/components/LogsDataList.es.js +2 -2
- package/dist/components/MainSidebar.cjs.js +2 -2
- package/dist/components/MainSidebar.es.js +2 -2
- package/dist/components/MarkdownRenderer.cjs.js +66 -2
- package/dist/components/MarkdownRenderer.cjs.js.map +1 -1
- package/dist/components/MarkdownRenderer.es.js +68 -1
- package/dist/components/MarkdownRenderer.es.js.map +1 -1
- package/dist/components/MessageScroller.cjs.js +1 -1
- package/dist/components/MessageScroller.es.js +2 -2
- 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/Popover.cjs.js +1 -1
- package/dist/components/Popover.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 +4 -4
- package/dist/components/PropertyFilter.es.js +5 -5
- package/dist/components/RuleBuilder.cjs.js +2 -2
- package/dist/components/RuleBuilder.es.js +2 -2
- 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/SettingsRow.cjs.js +35 -14
- package/dist/components/SettingsRow.cjs.js.map +1 -1
- package/dist/components/SettingsRow.es.js +35 -14
- package/dist/components/SettingsRow.es.js.map +1 -1
- package/dist/components/Shimmer.cjs.js +1 -1
- package/dist/components/Shimmer.es.js +1 -1
- package/dist/components/SideDialog.cjs.js +3 -3
- package/dist/components/SideDialog.es.js +3 -3
- package/dist/components/Tabs.cjs.js +1 -1
- package/dist/components/Tabs.es.js +1 -1
- package/dist/components/ThreadList.cjs.js +1 -1
- package/dist/components/ThreadList.es.js +1 -1
- package/dist/components/ThreadRail.es.js +1 -1
- package/dist/components/Tooltip.cjs.js +1 -1
- package/dist/components/Tooltip.es.js +1 -1
- package/dist/components/Truncate.cjs.js +2 -2
- package/dist/components/Truncate.es.js +2 -2
- package/dist/components/ai/ask-user.cjs.js +1 -1
- package/dist/components/ai/ask-user.es.js +1 -1
- package/dist/components/ai/plan.cjs.js +2 -2
- package/dist/components/ai/plan.es.js +2 -2
- package/dist/components/ai/task-list.cjs.js +1 -1
- package/dist/components/ai/task-list.es.js +1 -1
- package/dist/components/ai/tool-call.cjs.js +143 -4
- package/dist/components/ai/tool-call.cjs.js.map +1 -1
- package/dist/components/ai/tool-call.es.js +141 -6
- package/dist/components/ai/tool-call.es.js.map +1 -1
- package/dist/{copy-button-7bJude5U.js → copy-button-BzjCqjVh.js} +3 -3
- package/dist/{copy-button-7bJude5U.js.map → copy-button-BzjCqjVh.js.map} +1 -1
- package/dist/{copy-button-CP3uo8ID.cjs → copy-button-D1BF_G8A.cjs} +3 -3
- package/dist/{copy-button-CP3uo8ID.cjs.map → copy-button-D1BF_G8A.cjs.map} +1 -1
- package/dist/{data-code-section-OTFxdzY9.js → data-code-section-g1jBtzwR.js} +5 -5
- package/dist/{data-code-section-OTFxdzY9.js.map → data-code-section-g1jBtzwR.js.map} +1 -1
- package/dist/{data-code-section-CM_Kz9Ka.cjs → data-code-section-sK4cZuA-.cjs} +5 -5
- package/dist/{data-code-section-CM_Kz9Ka.cjs.map → data-code-section-sK4cZuA-.cjs.map} +1 -1
- package/dist/{data-keys-and-values-BJynhd6V.js → data-keys-and-values-CHJVC-r5.js} +2 -2
- package/dist/{data-keys-and-values-BJynhd6V.js.map → data-keys-and-values-CHJVC-r5.js.map} +1 -1
- package/dist/{data-keys-and-values-sjag88jf.cjs → data-keys-and-values-D7lti5DL.cjs} +2 -2
- package/dist/{data-keys-and-values-sjag88jf.cjs.map → data-keys-and-values-D7lti5DL.cjs.map} +1 -1
- package/dist/{data-list-BH7hZM1i.js → data-list-BOI8fRuk.js} +8 -10
- package/dist/data-list-BOI8fRuk.js.map +1 -0
- package/dist/{data-list-Ct54I5vM.cjs → data-list-CCacNODd.cjs} +8 -10
- package/dist/data-list-CCacNODd.cjs.map +1 -0
- package/dist/{data-list-skeleton-BF-7wpb9.cjs → data-list-skeleton-BHBSIQHN.cjs} +8 -4
- package/dist/data-list-skeleton-BHBSIQHN.cjs.map +1 -0
- package/dist/{data-list-skeleton-DYOnJOWM.js → data-list-skeleton-DDO_OE14.js} +8 -4
- package/dist/data-list-skeleton-DDO_OE14.js.map +1 -0
- package/dist/{data-list-top-cell-ByJL1bVv.cjs → data-list-top-cell-BOXO5s7I.cjs} +59 -106
- package/dist/data-list-top-cell-BOXO5s7I.cjs.map +1 -0
- package/dist/{data-list-top-cell-C1a8If1K.js → data-list-top-cell-CC5jjv5s.js} +58 -106
- package/dist/data-list-top-cell-CC5jjv5s.js.map +1 -0
- package/dist/{data-panel-CXg4wG9w.cjs → data-panel-B3AECYLW.cjs} +8 -6
- package/dist/data-panel-B3AECYLW.cjs.map +1 -0
- package/dist/{data-panel-CDwEPudt.js → data-panel-B527Q_Zh.js} +8 -6
- package/dist/data-panel-B527Q_Zh.js.map +1 -0
- package/dist/{date-time-range-picker-Dhm_1YzQ.cjs → date-time-range-picker-BFDT_ERx.cjs} +5 -5
- package/dist/{date-time-range-picker-Dhm_1YzQ.cjs.map → date-time-range-picker-BFDT_ERx.cjs.map} +1 -1
- package/dist/{date-time-range-picker-DeCxB2MG.js → date-time-range-picker-jTRBzZDz.js} +5 -5
- package/dist/{date-time-range-picker-DeCxB2MG.js.map → date-time-range-picker-jTRBzZDz.js.map} +1 -1
- package/dist/{dialog-HucfPKBi.cjs → dialog-DecmYFeJ.cjs} +2 -2
- package/dist/{dialog-HucfPKBi.cjs.map → dialog-DecmYFeJ.cjs.map} +1 -1
- package/dist/{dialog-DpCQuXUA.js → dialog-DidyN-Jy.js} +2 -2
- package/dist/{dialog-DpCQuXUA.js.map → dialog-DidyN-Jy.js.map} +1 -1
- package/dist/domains/logs/components/log-details-view.cjs.js +2 -2
- package/dist/domains/logs/components/log-details-view.es.js +2 -2
- package/dist/domains/logs/components/logs-error-content.cjs.js +1 -1
- package/dist/domains/logs/components/logs-error-content.es.js +1 -1
- package/dist/domains/logs/components/logs-list-view.cjs.js +9 -2
- package/dist/domains/logs/components/logs-list-view.cjs.js.map +1 -1
- package/dist/domains/logs/components/logs-list-view.es.js +9 -2
- package/dist/domains/logs/components/logs-list-view.es.js.map +1 -1
- package/dist/domains/logs/components/logs-toolbar.cjs.js +1 -1
- package/dist/domains/logs/components/logs-toolbar.es.js +1 -1
- package/dist/domains/logs/components/no-logs-info.cjs.js +1 -1
- package/dist/domains/logs/components/no-logs-info.es.js +1 -1
- package/dist/domains/memory/components/flame-graph.cjs.js +1 -1
- package/dist/domains/memory/components/flame-graph.es.js +1 -1
- package/dist/domains/memory/components/memory-studio-panel.cjs.js +1 -1
- package/dist/domains/memory/components/memory-studio-panel.es.js +1 -1
- package/dist/domains/metrics/components/bar-list.cjs.js +1 -1
- package/dist/domains/metrics/components/bar-list.es.js +1 -1
- package/dist/domains/metrics/components/card-action-buttons.cjs.js +1 -1
- package/dist/domains/metrics/components/card-action-buttons.es.js +1 -1
- package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
- package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
- package/dist/domains/metrics/components/latency-card-view.cjs.js +2 -2
- package/dist/domains/metrics/components/latency-card-view.es.js +2 -2
- package/dist/domains/metrics/components/memory-card-view.cjs.js +4 -4
- package/dist/domains/metrics/components/memory-card-view.cjs.js.map +1 -1
- package/dist/domains/metrics/components/memory-card-view.es.js +4 -4
- package/dist/domains/metrics/components/memory-card-view.es.js.map +1 -1
- package/dist/domains/metrics/components/model-usage-cost-card-view.cjs.js +2 -2
- package/dist/domains/metrics/components/model-usage-cost-card-view.cjs.js.map +1 -1
- package/dist/domains/metrics/components/model-usage-cost-card-view.es.js +2 -2
- package/dist/domains/metrics/components/model-usage-cost-card-view.es.js.map +1 -1
- package/dist/domains/metrics/components/scores-card-view.cjs.js +4 -4
- package/dist/domains/metrics/components/scores-card-view.cjs.js.map +1 -1
- package/dist/domains/metrics/components/scores-card-view.es.js +4 -4
- package/dist/domains/metrics/components/scores-card-view.es.js.map +1 -1
- package/dist/domains/metrics/components/token-usage-by-agent-card-view.cjs.js +2 -2
- package/dist/domains/metrics/components/token-usage-by-agent-card-view.es.js +2 -2
- package/dist/domains/metrics/components/token-usage-timeline-card-view.cjs.js +2 -2
- package/dist/domains/metrics/components/token-usage-timeline-card-view.es.js +2 -2
- package/dist/domains/metrics/components/traces-volume-card-view.cjs.js +2 -2
- package/dist/domains/metrics/components/traces-volume-card-view.es.js +2 -2
- package/dist/domains/traces/components/no-traces-info.cjs.js +1 -23
- package/dist/domains/traces/components/no-traces-info.cjs.js.map +1 -1
- package/dist/domains/traces/components/no-traces-info.es.js +3 -25
- package/dist/domains/traces/components/no-traces-info.es.js.map +1 -1
- package/dist/domains/traces/components/span-data-panel-view.cjs.js +10 -24
- package/dist/domains/traces/components/span-data-panel-view.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-data-panel-view.es.js +10 -24
- package/dist/domains/traces/components/span-data-panel-view.es.js.map +1 -1
- package/dist/domains/traces/components/span-token-usage.cjs.js +1 -1
- package/dist/domains/traces/components/span-token-usage.es.js +1 -1
- package/dist/domains/traces/components/timeline-expand-col.cjs.js +1 -1
- package/dist/domains/traces/components/timeline-expand-col.es.js +1 -1
- package/dist/domains/traces/components/timeline-timing-col.cjs.js +2 -2
- package/dist/domains/traces/components/timeline-timing-col.es.js +2 -2
- package/dist/domains/traces/components/trace-columns-menu.cjs.js +3 -3
- package/dist/domains/traces/components/trace-columns-menu.es.js +3 -3
- package/dist/domains/traces/components/trace-data-panel-view.cjs.js +82 -33
- 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 +83 -34
- package/dist/domains/traces/components/trace-data-panel-view.es.js.map +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-status-value.cjs.js +2 -5
- package/dist/domains/traces/components/trace-status-value.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-status-value.es.js +2 -5
- package/dist/domains/traces/components/trace-status-value.es.js.map +1 -1
- package/dist/domains/traces/components/traces-error-content.cjs.js +1 -1
- package/dist/domains/traces/components/traces-error-content.es.js +1 -1
- package/dist/domains/traces/components/traces-layout.cjs.js +7 -3
- package/dist/domains/traces/components/traces-layout.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-layout.es.js +7 -3
- package/dist/domains/traces/components/traces-layout.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 +11 -4
- package/dist/domains/traces/components/traces-list-view.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-list-view.es.js +11 -4
- package/dist/domains/traces/components/traces-list-view.es.js.map +1 -1
- package/dist/domains/traces/components/traces-toolbar.cjs.js +2 -1
- package/dist/domains/traces/components/traces-toolbar.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-toolbar.es.js +2 -1
- package/dist/domains/traces/components/traces-toolbar.es.js.map +1 -1
- package/dist/domains/traces/hooks/use-trace-url-state.cjs.js +1 -1
- 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 +1 -1
- package/dist/domains/traces/hooks/use-trace-url-state.es.js.map +1 -1
- package/dist/domains/traces/types.cjs.js.map +1 -1
- package/dist/domains/traces/types.es.js.map +1 -1
- package/dist/{drawer-D-9g5Fgx.js → drawer-CjRnB5XK.js} +2 -2
- package/dist/{drawer-D-9g5Fgx.js.map → drawer-CjRnB5XK.js.map} +1 -1
- package/dist/{drawer-C_94EZS7.cjs → drawer-CnzI7hP8.cjs} +2 -2
- package/dist/{drawer-C_94EZS7.cjs.map → drawer-CnzI7hP8.cjs.map} +1 -1
- package/dist/{dropdown-menu-DCMh8P4w.js → dropdown-menu-BphqMR3z.js} +4 -3
- package/dist/dropdown-menu-BphqMR3z.js.map +1 -0
- package/dist/{dropdown-menu-BZGlERgf.cjs → dropdown-menu-kVO4guHl.cjs} +4 -3
- package/dist/dropdown-menu-kVO4guHl.cjs.map +1 -0
- package/dist/ee/signals/components/signals-empty-state.cjs.js +1 -1
- package/dist/ee/signals/components/signals-empty-state.es.js +1 -1
- package/dist/ee/signals/examples-pager.cjs.js +1 -1
- package/dist/ee/signals/examples-pager.es.js +1 -1
- package/dist/ee/signals/noise-detail-panel.cjs.js +1 -1
- package/dist/ee/signals/noise-detail-panel.es.js +1 -1
- package/dist/ee/signals/signal-delta-column.cjs.js +1 -1
- package/dist/ee/signals/signal-delta-column.es.js +1 -1
- package/dist/ee/signals/signal-lifelines.cjs.js +1 -1
- package/dist/ee/signals/signal-lifelines.es.js +1 -1
- package/dist/ee/signals/signals-error-state.cjs.js +1 -1
- package/dist/ee/signals/signals-error-state.es.js +1 -1
- package/dist/ee/signals/snapshot-timeline.cjs.js +1 -1
- package/dist/ee/signals/snapshot-timeline.es.js +1 -1
- package/dist/ee/signals/sortable-signal-headers.cjs.js +1 -1
- package/dist/ee/signals/sortable-signal-headers.es.js +1 -1
- package/dist/ee/signals/theme-detail-panel.cjs.js +2 -2
- package/dist/ee/signals/theme-detail-panel.es.js +2 -2
- package/dist/ee/signals/theme-filter-banner.cjs.js +1 -1
- package/dist/ee/signals/theme-filter-banner.es.js +1 -1
- package/dist/ee/signals/theme-trend-chart.cjs.js +1 -1
- package/dist/ee/signals/theme-trend-chart.es.js +1 -1
- package/dist/ee/signals/trace-insight-view.cjs.js +1 -1
- package/dist/ee/signals/trace-insight-view.es.js +1 -1
- package/dist/ee/signals/trace-intelligence-context.cjs.js +1 -1
- package/dist/ee/signals/trace-intelligence-context.cjs.js.map +1 -1
- package/dist/ee/signals/trace-intelligence-context.es.js +1 -1
- package/dist/ee/signals/trace-intelligence-context.es.js.map +1 -1
- package/dist/ee/signals/trace-intelligence-explainer.cjs.js +1 -1
- package/dist/ee/signals/trace-intelligence-explainer.es.js +1 -1
- package/dist/ee/signals/view-mode-tab.cjs.js +1 -1
- package/dist/ee/signals/view-mode-tab.es.js +1 -1
- package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +8 -5
- package/dist/ee/topics/components/topic-trace-summary-list.cjs.js.map +1 -1
- package/dist/ee/topics/components/topic-trace-summary-list.es.js +8 -5
- package/dist/ee/topics/components/topic-trace-summary-list.es.js.map +1 -1
- package/dist/{horizontal-bars-DHeyxqDT.js → horizontal-bars-CzZr7d01.js} +2 -2
- package/dist/{horizontal-bars-DHeyxqDT.js.map → horizontal-bars-CzZr7d01.js.map} +1 -1
- package/dist/{horizontal-bars-qf60G0xH.cjs → horizontal-bars-DuS2yR1g.cjs} +2 -2
- package/dist/{horizontal-bars-qf60G0xH.cjs.map → horizontal-bars-DuS2yR1g.cjs.map} +1 -1
- package/dist/{hover-card-Cd9QK50X.cjs → hover-card-CxmZKcFK.cjs} +3 -2
- package/dist/hover-card-CxmZKcFK.cjs.map +1 -0
- package/dist/{hover-card-Bs845QbV.js → hover-card-DeTykyEs.js} +3 -2
- package/dist/hover-card-DeTykyEs.js.map +1 -0
- package/dist/{input-group-B9RjCBAJ.cjs → input-group-4EQi2l7H.cjs} +2 -2
- package/dist/{input-group-B9RjCBAJ.cjs.map → input-group-4EQi2l7H.cjs.map} +1 -1
- package/dist/{input-group-DLUlOO5B.js → input-group-U2f3A4Ya.js} +2 -2
- package/dist/{input-group-DLUlOO5B.js.map → input-group-U2f3A4Ya.js.map} +1 -1
- package/dist/keyboard/use-keydown.cjs.js +125 -0
- package/dist/keyboard/use-keydown.cjs.js.map +1 -0
- package/dist/keyboard/use-keydown.d.ts +2 -0
- package/dist/keyboard/use-keydown.es.js +118 -0
- package/dist/keyboard/use-keydown.es.js.map +1 -0
- package/dist/{logs-data-list-DTBAev6g.js → logs-data-list-DRXJ89IZ.js} +7 -7
- package/dist/logs-data-list-DRXJ89IZ.js.map +1 -0
- package/dist/{logs-data-list-DvSidzsS.cjs → logs-data-list-Xayqbjw4.cjs} +7 -7
- package/dist/logs-data-list-Xayqbjw4.cjs.map +1 -0
- package/dist/{markdown-renderer-BQXWT1q2.cjs → markdown-renderer-BQugZq4m.cjs} +41 -78
- package/dist/markdown-renderer-BQugZq4m.cjs.map +1 -0
- package/dist/{markdown-renderer-CrCIi6au.js → markdown-renderer-LOqipQki.js} +43 -80
- package/dist/markdown-renderer-LOqipQki.js.map +1 -0
- package/dist/markdown-renderer.css +0 -18
- package/dist/{message-scroller-CMFvOewg.cjs → message-scroller-4dCGKzxE.cjs} +202 -41
- package/dist/message-scroller-4dCGKzxE.cjs.map +1 -0
- package/dist/{message-scroller-Bx6ka_Fe.js → message-scroller-CvRVVj5l.js} +203 -42
- package/dist/message-scroller-CvRVVj5l.js.map +1 -0
- package/dist/{message-scroller-context-BNIQ0Yq4.js → message-scroller-context-BF1Qo4vC.js} +2 -2
- package/dist/{message-scroller-context-BNIQ0Yq4.js.map → message-scroller-context-BF1Qo4vC.js.map} +1 -1
- package/dist/{message-scroller-hooks-DW4jIBHi.js → message-scroller-hooks-BEeE1WE6.js} +2 -2
- package/dist/{message-scroller-hooks-DW4jIBHi.js.map → message-scroller-hooks-BEeE1WE6.js.map} +1 -1
- package/dist/metrics-kpi-card-AhIw9eyu.js.map +1 -1
- package/dist/metrics-kpi-card-tAReOFYk.cjs.map +1 -1
- package/dist/{metrics-line-chart-DudirJsu.js → metrics-line-chart-DNCs_ZF3.js} +4 -3
- package/dist/metrics-line-chart-DNCs_ZF3.js.map +1 -0
- package/dist/{metrics-line-chart-B_0w522y.cjs → metrics-line-chart-j6C2H3K1.cjs} +4 -3
- package/dist/metrics-line-chart-j6C2H3K1.cjs.map +1 -0
- package/dist/{popover-DwDnnrzj.js → popover-QZXIaRzP.js} +3 -2
- package/dist/popover-QZXIaRzP.js.map +1 -0
- package/dist/{popover-CO0UtG2f.cjs → popover-jPzCxZfK.cjs} +3 -2
- package/dist/popover-jPzCxZfK.cjs.map +1 -0
- package/dist/primitives/floating.cjs.js +8 -0
- package/dist/primitives/floating.cjs.js.map +1 -0
- package/dist/primitives/floating.d.ts +2 -0
- package/dist/primitives/floating.es.js +4 -0
- package/dist/primitives/floating.es.js.map +1 -0
- package/dist/{property-filter-applied-BD0PmYxh.js → property-filter-applied-BtepC7PL.js} +5 -5
- package/dist/{property-filter-applied-BD0PmYxh.js.map → property-filter-applied-BtepC7PL.js.map} +1 -1
- package/dist/{property-filter-applied-BQmX9ASZ.cjs → property-filter-applied-DjrjP7iT.cjs} +5 -5
- package/dist/{property-filter-applied-BQmX9ASZ.cjs.map → property-filter-applied-DjrjP7iT.cjs.map} +1 -1
- package/dist/resize/panel-drawer.cjs.js +1 -1
- package/dist/resize/panel-drawer.es.js +1 -1
- package/dist/{search-field-block-CgIOC3TD.cjs → search-field-block-BqRM53jf.cjs} +3 -3
- package/dist/{search-field-block-CgIOC3TD.cjs.map → search-field-block-BqRM53jf.cjs.map} +1 -1
- package/dist/{search-field-block-DJq4O1aK.js → search-field-block-CgrC6f9t.js} +3 -3
- package/dist/{search-field-block-DJq4O1aK.js.map → search-field-block-CgrC6f9t.js.map} +1 -1
- package/dist/{select-CbYSKK0A.cjs → select-X9SZeU80.cjs} +4 -3
- package/dist/select-X9SZeU80.cjs.map +1 -0
- package/dist/{select-field-block-xUf9rcne.cjs → select-field-block-BXjwaMqJ.cjs} +2 -2
- package/dist/{select-field-block-xUf9rcne.cjs.map → select-field-block-BXjwaMqJ.cjs.map} +1 -1
- package/dist/{select-field-block-DLsLqguf.js → select-field-block-CDklwBFe.js} +2 -2
- package/dist/{select-field-block-DLsLqguf.js.map → select-field-block-CDklwBFe.js.map} +1 -1
- package/dist/{select-CQO55G6j.js → select-lVCJp6aH.js} +4 -3
- package/dist/select-lVCJp6aH.js.map +1 -0
- package/dist/shimmer-BneX5Awd.js +23 -0
- package/dist/shimmer-BneX5Awd.js.map +1 -0
- package/dist/shimmer-DnvxM4ou.cjs +25 -0
- package/dist/shimmer-DnvxM4ou.cjs.map +1 -0
- package/dist/shimmer.css +35 -10
- package/dist/src/domains/traces/components/span-data-panel-view.d.ts +3 -12
- package/dist/src/domains/traces/components/trace-data-panel-view.d.ts +22 -1
- package/dist/src/domains/traces/components/traces-layout.d.ts +3 -1
- package/dist/src/domains/traces/components/traces-toolbar.d.ts +1 -1
- package/dist/src/domains/traces/types.d.ts +1 -1
- package/dist/src/ds/components/Arrival/arrival.d.ts +23 -0
- package/dist/src/ds/components/Arrival/index.d.ts +2 -0
- package/dist/src/ds/components/Arrival/use-watched.d.ts +8 -0
- package/dist/src/ds/components/Comment/comment-composer.d.ts +12 -0
- package/dist/src/ds/components/Comment/comment-context.d.ts +3 -0
- package/dist/src/ds/components/Comment/comment.d.ts +21 -0
- package/dist/src/ds/components/Comment/comment.stories.d.ts +10 -0
- package/dist/src/ds/components/Comment/index.d.ts +5 -0
- package/dist/src/ds/components/DataList/data-list-cells.d.ts +16 -18
- package/dist/src/ds/components/DataList/data-list-root.d.ts +6 -7
- package/dist/src/ds/components/DataList/data-list-row-link.d.ts +3 -3
- package/dist/src/ds/components/DataList/data-list-row-wrapper.d.ts +2 -2
- package/dist/src/ds/components/DataList/data-list.d.ts +2 -2
- package/dist/src/ds/components/DataList/data-list.stories.d.ts +7 -1
- package/dist/src/ds/components/DataList/index.d.ts +2 -0
- package/dist/src/ds/components/DataList/shared.d.ts +18 -18
- package/dist/src/ds/components/DataList/use-data-list-keyboard.d.ts +28 -0
- package/dist/src/ds/components/DataPanel/data-panel-root.d.ts +2 -1
- package/dist/src/ds/components/MarkdownRenderer/index.d.ts +1 -0
- package/dist/src/ds/components/MarkdownRenderer/markdown-renderer.d.ts +8 -6
- package/dist/src/ds/components/MarkdownRenderer/use-reveal.d.ts +5 -1
- package/dist/src/ds/components/MarkdownRenderer/use-settled.d.ts +19 -0
- package/dist/src/ds/components/MessageScroller/message-scroller-geometry.d.ts +18 -1
- package/dist/src/ds/components/MessageScroller/message-scroller-glide.d.ts +10 -0
- package/dist/src/ds/components/MessageScroller/message-scroller-trip.d.ts +15 -0
- package/dist/src/ds/components/MessageScroller/message-scroller.d.ts +1 -1
- package/dist/src/ds/components/MetricsKpiCard/metrics-kpi-card-value.d.ts +2 -1
- package/dist/src/ds/components/MetricsLineChart/metrics-line-chart.d.ts +3 -1
- package/dist/src/ds/components/SettingsRow/settings-row.d.ts +8 -3
- package/dist/src/ds/components/SettingsRow/settings-row.stories.d.ts +1 -0
- package/dist/src/ds/components/Shimmer/shimmer.d.ts +10 -5
- package/dist/src/ds/components/ai/tool-call/index.d.ts +1 -0
- package/dist/src/ds/components/ai/tool-call/tool-call.d.ts +14 -0
- package/dist/src/ds/components/ai/tool-call/tool-presentation.d.ts +12 -0
- package/dist/src/ds/primitives/floating.d.ts +1 -0
- package/dist/src/ds/tokens/animations.d.ts +4 -0
- package/dist/src/lib/keyboard/index.d.ts +1 -0
- package/dist/src/lib/keyboard/use-keydown.d.ts +48 -0
- package/dist/style.css +76 -232
- package/dist/{tabs-tab-Cq4YR31P.cjs → tabs-tab-DudcFE6r.cjs} +2 -2
- package/dist/{tabs-tab-Cq4YR31P.cjs.map → tabs-tab-DudcFE6r.cjs.map} +1 -1
- package/dist/{tabs-tab-D5JTAehi.js → tabs-tab-mZ-Tl7-d.js} +2 -2
- package/dist/{tabs-tab-D5JTAehi.js.map → tabs-tab-mZ-Tl7-d.js.map} +1 -1
- package/dist/{text-field-block-BGlwSFYC.cjs → text-field-block-B4CvIwKh.cjs} +2 -1
- package/dist/text-field-block-B4CvIwKh.cjs.map +1 -0
- package/dist/{text-field-block-DOiM0dpY.js → text-field-block-Ddl2tJ6D.js} +2 -1
- package/dist/{text-field-block-DOiM0dpY.js.map → text-field-block-Ddl2tJ6D.js.map} +1 -1
- package/dist/{time-picker-BVutQdF5.js → time-picker-63iBILK9.js} +2 -2
- package/dist/{time-picker-BVutQdF5.js.map → time-picker-63iBILK9.js.map} +1 -1
- package/dist/{time-picker-B_MKYe5h.cjs → time-picker-CpR2IP4l.cjs} +2 -2
- package/dist/{time-picker-B_MKYe5h.cjs.map → time-picker-CpR2IP4l.cjs.map} +1 -1
- package/dist/tokens.cjs.js +4 -0
- package/dist/tokens.cjs.js.map +1 -1
- package/dist/tokens.es.js +3 -1
- package/dist/tokens.es.js.map +1 -1
- package/dist/{tooltip-BFbYhBj1.js → tooltip-CF30mRAe.js} +3 -2
- package/dist/tooltip-CF30mRAe.js.map +1 -0
- package/dist/{tooltip-CLz5PtEE.cjs → tooltip-DMOZ2oaq.cjs} +3 -2
- package/dist/tooltip-DMOZ2oaq.cjs.map +1 -0
- package/dist/{traces-data-list-Be0f5_rb.cjs → traces-data-list-BLZgf-Es.cjs} +8 -8
- package/dist/traces-data-list-BLZgf-Es.cjs.map +1 -0
- package/dist/{traces-data-list-BIRR83Ie.js → traces-data-list-DmXGwe4Q.js} +8 -8
- package/dist/traces-data-list-DmXGwe4Q.js.map +1 -0
- package/dist/use-data-list-keyboard-BzZmvqE_.js +15 -0
- package/dist/use-data-list-keyboard-BzZmvqE_.js.map +1 -0
- package/dist/use-data-list-keyboard-k5D-WlNX.cjs +17 -0
- package/dist/use-data-list-keyboard-k5D-WlNX.cjs.map +1 -0
- package/dist/use-watched-BixmYWp0.cjs +19 -0
- package/dist/use-watched-BixmYWp0.cjs.map +1 -0
- package/dist/use-watched-CG9KoWl3.js +15 -0
- package/dist/use-watched-CG9KoWl3.js.map +1 -0
- package/dist/use-watched.css +18 -0
- package/package.json +19 -9
- package/theme.css +7 -0
- package/dist/combobox-BWcXIkzo.js.map +0 -1
- package/dist/combobox-Cc6ePsiD.cjs.map +0 -1
- package/dist/data-list-BH7hZM1i.js.map +0 -1
- package/dist/data-list-Ct54I5vM.cjs.map +0 -1
- package/dist/data-list-skeleton-BF-7wpb9.cjs.map +0 -1
- package/dist/data-list-skeleton-DYOnJOWM.js.map +0 -1
- package/dist/data-list-top-cell-ByJL1bVv.cjs.map +0 -1
- package/dist/data-list-top-cell-C1a8If1K.js.map +0 -1
- package/dist/data-panel-CDwEPudt.js.map +0 -1
- package/dist/data-panel-CXg4wG9w.cjs.map +0 -1
- package/dist/dropdown-menu-BZGlERgf.cjs.map +0 -1
- package/dist/dropdown-menu-DCMh8P4w.js.map +0 -1
- package/dist/hover-card-Bs845QbV.js.map +0 -1
- package/dist/hover-card-Cd9QK50X.cjs.map +0 -1
- package/dist/logs-data-list-DTBAev6g.js.map +0 -1
- package/dist/logs-data-list-DvSidzsS.cjs.map +0 -1
- package/dist/markdown-renderer-BQXWT1q2.cjs.map +0 -1
- package/dist/markdown-renderer-CrCIi6au.js.map +0 -1
- package/dist/message-scroller-Bx6ka_Fe.js.map +0 -1
- package/dist/message-scroller-CMFvOewg.cjs.map +0 -1
- package/dist/metrics-line-chart-B_0w522y.cjs.map +0 -1
- package/dist/metrics-line-chart-DudirJsu.js.map +0 -1
- package/dist/popover-CO0UtG2f.cjs.map +0 -1
- package/dist/popover-DwDnnrzj.js.map +0 -1
- package/dist/select-CQO55G6j.js.map +0 -1
- package/dist/select-CbYSKK0A.cjs.map +0 -1
- package/dist/shimmer-CvjqSukH.js +0 -9
- package/dist/shimmer-CvjqSukH.js.map +0 -1
- package/dist/shimmer-qbZWipjT.cjs +0 -11
- package/dist/shimmer-qbZWipjT.cjs.map +0 -1
- package/dist/text-field-block-BGlwSFYC.cjs.map +0 -1
- package/dist/tooltip-BFbYhBj1.js.map +0 -1
- package/dist/tooltip-CLz5PtEE.cjs.map +0 -1
- package/dist/traces-data-list-BIRR83Ie.js.map +0 -1
- package/dist/traces-data-list-Be0f5_rb.cjs.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,295 @@
|
|
|
1
1
|
# @mastra/playground-ui
|
|
2
2
|
|
|
3
|
+
## 51.2.0-alpha.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Refreshed the DataList look: rows no longer draw separators, the sticky header and group subheaders share one lighter, theme-tuned band, and every corner uses the same radius. ([#22383](https://github.com/mastra-ai/mastra/pull/22383))
|
|
8
|
+
|
|
9
|
+
**Every row in a list is now the same height.** Row height used to be whatever the tallest cell happened to be, so a list with an actions column or a roomier cell drifted a few pixels away from the list next to it. The row owns its height now, and skeleton rows match the real ones — no jump when data lands.
|
|
10
|
+
|
|
11
|
+
**Typography follows the content.** Headers and name cells are medium weight instead of semibold, and the letter-spacing tightening is gone. IDs and timestamps left the monospace face — IDs get wider tracking to stay scannable, timestamps get tabular figures so their columns still line up.
|
|
12
|
+
|
|
13
|
+
**Row controls only appear on hover.** Selection checkboxes on unselected rows, and the new `DataList.ActionsCell`, stay hidden until you hover the row or reach it with the keyboard, so a resting list reads as content. The column keeps its width, so nothing shifts. On a touch screen, where nothing ever hovers, they stay visible.
|
|
14
|
+
|
|
15
|
+
```tsx
|
|
16
|
+
// Trailing row actions — alignment, spacing and the hover reveal come with the cell
|
|
17
|
+
<DataList.RowWrapper>
|
|
18
|
+
<DataList.RowButton colEnd={-2} onClick={open}>
|
|
19
|
+
{cells}
|
|
20
|
+
</DataList.RowButton>
|
|
21
|
+
<DataList.ActionsCell>
|
|
22
|
+
<Button variant="ghost" size="icon-xs" aria-label="Delete">
|
|
23
|
+
<Trash2 />
|
|
24
|
+
</Button>
|
|
25
|
+
</DataList.ActionsCell>
|
|
26
|
+
</DataList.RowWrapper>
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
**Breaking:** a variant, three props and a component that no longer decide anything are gone.
|
|
30
|
+
|
|
31
|
+
```tsx
|
|
32
|
+
// Before
|
|
33
|
+
<DataList columns={columns} variant="lined">
|
|
34
|
+
<DataList.RowButton flushLeft flushRight colEnd={-2}>
|
|
35
|
+
<DataList.Cell height="compact">{status}</DataList.Cell>
|
|
36
|
+
<DataList.MonoCell>{path}</DataList.MonoCell>
|
|
37
|
+
|
|
38
|
+
// After — rows are borderless, full-bleed and uniformly tall by default
|
|
39
|
+
<DataList columns={columns}>
|
|
40
|
+
<DataList.RowButton colEnd={-2}>
|
|
41
|
+
<DataList.Cell>{status}</DataList.Cell>
|
|
42
|
+
<DataList.TextCell font="mono">{path}</DataList.TextCell>
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
- `variant="lined"` existed only to draw row separators. Lists that want row banding can still ask for `variant="striped"`.
|
|
46
|
+
- `height` on cells set row height one cell at a time, which is what let rows drift apart.
|
|
47
|
+
- `flushLeft` / `flushRight` dropped a row margin that no longer exists.
|
|
48
|
+
- `DataList.MonoCell` was a cell that only changed the typeface. `DataList.TextCell font="mono"` replaces it — same rendering, one less component.
|
|
49
|
+
|
|
50
|
+
### Patch Changes
|
|
51
|
+
|
|
52
|
+
- Added a `Comment` family of compound components for text-only comment threads: `Comment`, `CommentList`, `CommentItem` (with header, author, timestamp, body and actions slots) and `CommentComposer` (input + send button). The root `variant` prop switches between `default`, a flat thread with hover-revealed per-item actions, and `embed`, the same thread on a bordered card surface with a compact composer and no per-item actions. ([#22396](https://github.com/mastra-ai/mastra/pull/22396))
|
|
53
|
+
|
|
54
|
+
- Improved the experiment page in Studio with a horizontal metadata bar showing when the run started, how long it took, the dataset it ran against, and which scorers were used ([#22377](https://github.com/mastra-ai/mastra/pull/22377))
|
|
55
|
+
|
|
56
|
+
- Added a `factory` variant to the `SettingsRow` component so settings rows can render the denser card-row layout (row padding, 12px description text) instead of only the studio spacing. ([#22375](https://github.com/mastra-ai/mastra/pull/22375))
|
|
57
|
+
|
|
58
|
+
```tsx
|
|
59
|
+
<SettingsRow variant="factory" label="Auto-approve tools" description="Run tool calls without asking">
|
|
60
|
+
<Switch checked={autoApprove} onCheckedChange={setAutoApprove} />
|
|
61
|
+
</SettingsRow>
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
- Updated dependencies [[`7176362`](https://github.com/mastra-ai/mastra/commit/717636281a3339911a05ea2cc8ae38afe4fd2cef), [`e3b796d`](https://github.com/mastra-ai/mastra/commit/e3b796d29a63f0d5c97dd815aadec40687346d70), [`49ccd14`](https://github.com/mastra-ai/mastra/commit/49ccd142268a61fb55ea75bc76287643a21f3677), [`3855b38`](https://github.com/mastra-ai/mastra/commit/3855b38c4c25af32ab8e298e148becc963abe92c)]:
|
|
65
|
+
- @mastra/core@1.63.0-alpha.0
|
|
66
|
+
- @mastra/client-js@1.42.2-alpha.0
|
|
67
|
+
- @mastra/react@1.4.7-alpha.0
|
|
68
|
+
|
|
69
|
+
## 51.1.0
|
|
70
|
+
|
|
71
|
+
### Minor Changes
|
|
72
|
+
|
|
73
|
+
- Added a `useKeydown` hook for keyboard shortcuts (single keys and modifier combos like `mod+k`) and a `useTableKeydown` hook for accessible roving-tabindex navigation in tables and lists (arrow keys, PageUp/PageDown, Home/End). ([#22284](https://github.com/mastra-ai/mastra/pull/22284))
|
|
74
|
+
|
|
75
|
+
- Improved how streaming transcripts move, and added the arrival primitives behind it. ([#22299](https://github.com/mastra-ai/mastra/pull/22299))
|
|
76
|
+
|
|
77
|
+
**Fixed**
|
|
78
|
+
|
|
79
|
+
- Words already read no longer replay their entrance when markdown rebuilds around them, and a reply born streaming animates from its very first word instead of landing as a block that fades in.
|
|
80
|
+
- The reveal clock no longer steps backwards for one frame, which unmounted a settled tool row and cut its shimmer off mid-sweep.
|
|
81
|
+
- The shimmer on running labels is a single band scaled to the element instead of a tiled pattern, and it dissolves into the text colour when the label lands instead of snapping off.
|
|
82
|
+
- `MessageScroller` follows the last message instead of the end of its box, so the reader is no longer parked on empty space below the conversation. Catch-up while following a stream is softened on the compositor, and opening a turn parks the sent message above the room reserved for its answer — the room decides how high it rests — and lets the answer grow beneath it.
|
|
83
|
+
|
|
84
|
+
**Added**
|
|
85
|
+
|
|
86
|
+
- `ArrivalScope`, `useWatched` and `Arriving`: one shared answer to "was the reader watching when this mounted", so every entrance derives from it.
|
|
87
|
+
- `useRevealedText`: the word-by-word pacing, moved out of `MarkdownRenderer` so a caller can lay tool rows and cards down in the same rhythm as the prose.
|
|
88
|
+
|
|
89
|
+
**Migration**
|
|
90
|
+
|
|
91
|
+
- `streaming` on `MarkdownRenderer` no longer paces the reveal — it only means "this text is a prefix still being written". A caller that relied on it for word-by-word pacing pairs the renderer with `useRevealedText`:
|
|
92
|
+
|
|
93
|
+
```tsx
|
|
94
|
+
// before: streaming paced the text word by word
|
|
95
|
+
<MarkdownRenderer streaming={streaming}>{text}</MarkdownRenderer>;
|
|
96
|
+
|
|
97
|
+
// after: the caller owns the pace; streaming only mends the unterminated tail
|
|
98
|
+
const shown = useRevealedText(text, streaming);
|
|
99
|
+
|
|
100
|
+
<MarkdownRenderer streaming={streaming || shown !== text}>{shown}</MarkdownRenderer>;
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
- The entrance class `mastra-markdown-arriving` is renamed to `mastra-arriving`. Anything targeting the old name — a selector, a `className` — updates to the new one, best by importing it:
|
|
104
|
+
|
|
105
|
+
```tsx
|
|
106
|
+
// before
|
|
107
|
+
<div className="mastra-markdown-arriving" />;
|
|
108
|
+
|
|
109
|
+
// after
|
|
110
|
+
import { ARRIVING_CLASS } from '@mastra/playground-ui/tokens';
|
|
111
|
+
|
|
112
|
+
<div className={ARRIVING_CLASS} />;
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
**Changed**
|
|
116
|
+
|
|
117
|
+
- `Shimmer` takes `active` and stays one element across the switch, so nothing inside it remounts when a label lands:
|
|
118
|
+
|
|
119
|
+
```tsx
|
|
120
|
+
// before: a different element per state, remounting everything inside on landing
|
|
121
|
+
const Header = status === 'running' ? Shimmer : 'span';
|
|
122
|
+
|
|
123
|
+
// after
|
|
124
|
+
<Shimmer active={status === 'running'}>{label}</Shimmer>;
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
- Added a composable tool-call component for building accessible, collapsible tool activity rows with custom icons, details, status content, and expanded results. ([#22183](https://github.com/mastra-ai/mastra/pull/22183))
|
|
128
|
+
|
|
129
|
+
```tsx
|
|
130
|
+
import { ToolCall, ToolCallContent, ToolCallTrigger } from '@mastra/playground-ui/components/ai/tool-call';
|
|
131
|
+
|
|
132
|
+
<ToolCall status="running">
|
|
133
|
+
<ToolCallTrigger>Running command</ToolCallTrigger>
|
|
134
|
+
<ToolCallContent>Command output</ToolCallContent>
|
|
135
|
+
</ToolCall>;
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### Patch Changes
|
|
139
|
+
|
|
140
|
+
- Added controlled snapshot frame selection to SankeySignals. The component now requires selectedFrameId and onFrameIdChange props, so the host application owns which timeline snapshot is displayed (for example to persist and restore it). Timeline clicks, snapshot playback, and perspective changes all report the new frame through onFrameIdChange. The playground signals overview page resolves the initial frame from the snapshot list and passes it down. ([#22187](https://github.com/mastra-ai/mastra/pull/22187))
|
|
141
|
+
|
|
142
|
+
- Improved the Traces page: trace actions (Evaluate Trace, Save as Dataset Item, Add tool mocks) now live in the trace panel header next to the collapse button, removed the empty gap above the traces list when no filters are applied, and replaced the auto-refetch icon button with a labeled "Auto refresh" checkbox (the subtraces toggle is now a "Subtraces" checkbox too). The trace panel now has Details and Scores tabs — Evaluate Trace switches to the Scores tab showing the trace's scores — and the span panel's Scoring tab was removed. The evaluate action is now labeled "Score trace", and the no-traces empty state no longer shows a documentation CTA. The standalone `/traces/:traceId` page was removed — those URLs now redirect to `/traces?traceId=...`, and all in-app links point to the query-param form. ([#22313](https://github.com/mastra-ai/mastra/pull/22313))
|
|
143
|
+
|
|
144
|
+
- Fixed popups, tooltips, and menus occasionally stretching the page and showing a second pair of scrollbars. Floating elements now use fixed positioning, so a popup that closes or outlives a window resize can no longer grow the document behind it. ([#22329](https://github.com/mastra-ai/mastra/pull/22329))
|
|
145
|
+
|
|
146
|
+
- Improved the datasets experience in Studio: creating and editing a dataset now happens on dedicated pages (wrapped in a card) with proper breadcrumbs instead of dialogs, the dataset breadcrumb links to the dataset while a separate arrow opens the dataset switcher, item comparison moved to a path-based URL and is started from a new "Compare with" section in the item side panel, item checkboxes are always visible with contextual actions consolidated into a single "{n} selected" dropdown with a destructive Delete Items entry, experiment rows open the global experiment page (the dataset-scoped experiment route was removed), and the "Run Experiment" button keeps a stable label. Also improved dataset version selection when running experiments (with an inline old-version notice next to the items search and a link-style "Return to latest" action), and dataset item creation with a spacious sidebar and larger JSON editors. ([#21910](https://github.com/mastra-ai/mastra/pull/21910))
|
|
147
|
+
|
|
148
|
+
- Added `presentTool` to the `ai/tool-call` component set: maps a tool name and its arguments to an icon, a human label, and the salient argument to surface on the row (with special handling for terminal-style tools whose command drives the expanded body). Added `ToolCallMono`, the monospace body block of an expanded call with a hover copy button, and `ToolCallPresentedHeader`, the canonical row header (icon, label, detail, failure mark, chevron) so apps no longer assemble it by hand. `ToolCallDetail` now fades in on its own when it lands inside an `ArrivalScope`. All moved from Mastra Factory so every studio surface presents tool calls the same way. ([#22364](https://github.com/mastra-ai/mastra/pull/22364))
|
|
149
|
+
|
|
150
|
+
```tsx
|
|
151
|
+
import {
|
|
152
|
+
ToolCall,
|
|
153
|
+
ToolCallContent,
|
|
154
|
+
ToolCallMono,
|
|
155
|
+
ToolCallPresentedHeader,
|
|
156
|
+
ToolCallTrigger,
|
|
157
|
+
presentTool,
|
|
158
|
+
stringifyToolValue,
|
|
159
|
+
} from '@mastra/playground-ui/components/ai/tool-call';
|
|
160
|
+
|
|
161
|
+
const { icon, label, detail } = presentTool(toolName, args);
|
|
162
|
+
|
|
163
|
+
<ToolCall status={isRunning ? 'running' : 'idle'}>
|
|
164
|
+
<ToolCallTrigger>
|
|
165
|
+
<ToolCallPresentedHeader icon={icon} label={label} detail={detail} />
|
|
166
|
+
</ToolCallTrigger>
|
|
167
|
+
<ToolCallContent>
|
|
168
|
+
<ToolCallMono copyText={stringifyToolValue(result)}>{stringifyToolValue(result)}</ToolCallMono>
|
|
169
|
+
</ToolCallContent>
|
|
170
|
+
</ToolCall>;
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
- Stop observability filter discovery from re-scanning all history on every refresh ([#22136](https://github.com/mastra-ai/mastra/pull/22136))
|
|
174
|
+
|
|
175
|
+
Discovery queries that build Studio's Traces, Logs, and Metrics filter suggestions scanned every span, metric, and log event each time the cache went stale, which grew unbounded with retained data. Refreshes are now bounded to the last 30 days by default (configurable via `observability.discovery.lookbackSeconds`, `0` restores the previous unbounded behaviour), so the planner can prune partitions instead of reading all of them. Only one process refreshes a given cache entry at a time, so running several server instances no longer multiplies the work, and Studio holds discovery results for five minutes instead of refetching on every page mount.
|
|
176
|
+
|
|
177
|
+
- Fixed code blocks stretching the page. A long line inside a fenced markdown block used to widen everything around it, pushing the layout past the window. A code block now keeps to the width it is given, and scrolls horizontally inside itself when set to `overflow="scroll"`. ([#22018](https://github.com/mastra-ai/mastra/pull/22018))
|
|
178
|
+
|
|
179
|
+
- Added keyboard navigation to interactive lists in Studio. Use ArrowUp/ArrowDown to move between rows, PageUp/PageDown to jump by page, and Home/End to reach the first or last row in agents, workflows, tools, datasets, experiments, scores, traces, logs, and other list views. ([#22288](https://github.com/mastra-ai/mastra/pull/22288))
|
|
180
|
+
|
|
181
|
+
- Hardened the fix for popups stretching the page: all floating elements now take their fixed positioning from one shared constant, and a test fails if a new component falls back to Base UI's absolute default and could reintroduce the double-scrollbar bug. ([#22331](https://github.com/mastra-ai/mastra/pull/22331))
|
|
182
|
+
|
|
183
|
+
- Fixed invisible leftover popups by upgrading Base UI to 1.7.0. Quick repeated hovers could cancel a popup's exit animation and leave it permanently mounted (mui/base-ui#5395); reopened popups could also flash at stale coordinates before repositioning. Both are fixed upstream in 1.7.0. ([#22338](https://github.com/mastra-ai/mastra/pull/22338))
|
|
184
|
+
|
|
185
|
+
- Added a score-over-time line chart above the scores table in the trace panel's Evaluations tab (formerly "Scores"), showing one line per scorer with per-scorer averages in the legend. The tab content now stretches to the panel bottom with a scrollable table card, and the trace action was renamed to "Evaluate trace". ([#22313](https://github.com/mastra-ai/mastra/pull/22313))
|
|
186
|
+
|
|
187
|
+
- Updated dependencies [[`79f04a7`](https://github.com/mastra-ai/mastra/commit/79f04a7f6c6829da541139f638f2f1d267916e08), [`65edab1`](https://github.com/mastra-ai/mastra/commit/65edab1c233d17b8f163bad12fca410d0e6f16b1), [`1e47b75`](https://github.com/mastra-ai/mastra/commit/1e47b7520cab4cfaa8daed52f17e2e6d14ff7539), [`ab20a38`](https://github.com/mastra-ai/mastra/commit/ab20a38d0275f8d85e0f3833bd87ef487bcc609f), [`fd4d5fe`](https://github.com/mastra-ai/mastra/commit/fd4d5fe4f943699b85db5e74404f190d5a6b8c2a), [`ae8790c`](https://github.com/mastra-ai/mastra/commit/ae8790c4bfaa088d2ab279d1dcc06f326b9fd109), [`2c85f42`](https://github.com/mastra-ai/mastra/commit/2c85f428e04ccd63ea31a7ec80b5b327afdad555), [`11bbeb9`](https://github.com/mastra-ai/mastra/commit/11bbeb9b108ef2264e05acefc6dafb9cbb342921), [`48ef1f1`](https://github.com/mastra-ai/mastra/commit/48ef1f1d24eedafbb07f64e659a81b52b67b8bf6), [`aa3a85d`](https://github.com/mastra-ai/mastra/commit/aa3a85daf094c683bb97efdf4b6a696d2e474af5), [`d29d06f`](https://github.com/mastra-ai/mastra/commit/d29d06fe00bbd35b4571150ea04c59d2ed783c71), [`e6516df`](https://github.com/mastra-ai/mastra/commit/e6516dfcdae4f4ac0e7971d84359a81385ee602f), [`1a485f3`](https://github.com/mastra-ai/mastra/commit/1a485f3538f5ec64d58bd8b5e1e99de0c695c87b), [`0d37487`](https://github.com/mastra-ai/mastra/commit/0d37487d9f349388a3f1cef6a536cf9dcc4b6273), [`8661d7d`](https://github.com/mastra-ai/mastra/commit/8661d7d7179f0a024456aabdd8679bcecd09ac28), [`dbbfeb8`](https://github.com/mastra-ai/mastra/commit/dbbfeb85ec949dc9ebc0755e1ad262e4f5eba8db), [`575e343`](https://github.com/mastra-ai/mastra/commit/575e343900451021d96110916497d334af7bc252), [`0b2a3d1`](https://github.com/mastra-ai/mastra/commit/0b2a3d1783875c5b97b7b36ab3d03d7360e0dde7), [`6bb5d71`](https://github.com/mastra-ai/mastra/commit/6bb5d7193fe9166b219f0fccae17db7a5ae86e65), [`3cc9d00`](https://github.com/mastra-ai/mastra/commit/3cc9d00b2b4333e0377a5e9df5eff92c17ce7630), [`cacb839`](https://github.com/mastra-ai/mastra/commit/cacb8392d9e74189b56d857290b0615f98a2683d), [`57de7d6`](https://github.com/mastra-ai/mastra/commit/57de7d644ba7146edb4e9e6111ec4fa98c3a59e9), [`c8e4cea`](https://github.com/mastra-ai/mastra/commit/c8e4ceac9a390d78c8327dff3cdb2861dd71957f), [`ed01e9a`](https://github.com/mastra-ai/mastra/commit/ed01e9a807514a904374bf687a7b8f18750f6f78), [`b47b26e`](https://github.com/mastra-ai/mastra/commit/b47b26e6fe95cb8a3482be2c5e52de157fe59d0b), [`0d37487`](https://github.com/mastra-ai/mastra/commit/0d37487d9f349388a3f1cef6a536cf9dcc4b6273), [`6bb5d71`](https://github.com/mastra-ai/mastra/commit/6bb5d7193fe9166b219f0fccae17db7a5ae86e65), [`733a537`](https://github.com/mastra-ai/mastra/commit/733a537489a858b5880b2e98809334fba895a221), [`e8e299c`](https://github.com/mastra-ai/mastra/commit/e8e299cc6abdfc39947e2fec25803493015d3882), [`edfc548`](https://github.com/mastra-ai/mastra/commit/edfc548886bc7bae17b681f8b6b41a47eb32bcd2), [`d55807c`](https://github.com/mastra-ai/mastra/commit/d55807cb9f080f3f5d1db06aca02b8fe0992507e), [`b05f486`](https://github.com/mastra-ai/mastra/commit/b05f48612984d5fe2447ea2d6cdd5c604d285b97), [`a8a4871`](https://github.com/mastra-ai/mastra/commit/a8a4871215f51da95c47129602157ce5372f634a), [`ee0c1a0`](https://github.com/mastra-ai/mastra/commit/ee0c1a097de3acebe7dfc8c136479d4cb5b5b451), [`eb9ecaa`](https://github.com/mastra-ai/mastra/commit/eb9ecaa89c36e889749e3b825cfc507ce7f7980b), [`befbfc2`](https://github.com/mastra-ai/mastra/commit/befbfc260d5ec5ece7cdb65a80e94292f428d4c9), [`4ff3ee2`](https://github.com/mastra-ai/mastra/commit/4ff3ee2bff7ed07528b4817f8f49639031c72a4d), [`9207dfa`](https://github.com/mastra-ai/mastra/commit/9207dfab8062e5fc68b751684797ff86fe0b4e70), [`5165cdc`](https://github.com/mastra-ai/mastra/commit/5165cdcdcf50e144bb8113278535196cc9b07065), [`e737014`](https://github.com/mastra-ai/mastra/commit/e737014e0fc7035759762bb5b48baef1d6c0f6a7), [`6bb5d71`](https://github.com/mastra-ai/mastra/commit/6bb5d7193fe9166b219f0fccae17db7a5ae86e65), [`f591643`](https://github.com/mastra-ai/mastra/commit/f591643becdf0be9bddce6ba1748e64bc30d77f1), [`63796ba`](https://github.com/mastra-ai/mastra/commit/63796ba0fda60253be17535e68f6bbbf1e6ffa09), [`b1ad324`](https://github.com/mastra-ai/mastra/commit/b1ad324d657f3544b0701332aef7eb10e9a36258), [`61c566d`](https://github.com/mastra-ai/mastra/commit/61c566dd2f2cde2b23ed8f139924e530d4202214), [`9a3d352`](https://github.com/mastra-ai/mastra/commit/9a3d352a5ba0c2a9e4f7a9cc4f028a393bc74306), [`c24754c`](https://github.com/mastra-ai/mastra/commit/c24754c1fb6fe144e5051e536e98c8a18b0214ac), [`12c61d2`](https://github.com/mastra-ai/mastra/commit/12c61d280c8cb208bc3c8dbcbe5dcc60cf9d1cd0), [`9c984f9`](https://github.com/mastra-ai/mastra/commit/9c984f9152c0ded45453f21cb1f517fe12f8beae), [`c46eb09`](https://github.com/mastra-ai/mastra/commit/c46eb09ce4987509af57a0ac582c61241a6dd2f1), [`9ee8120`](https://github.com/mastra-ai/mastra/commit/9ee8120ce17f76b9f617489e05a283353742690a), [`cd7683d`](https://github.com/mastra-ai/mastra/commit/cd7683d3040bc322ec6f6efb6f9c1e8e40f062a1), [`d975e92`](https://github.com/mastra-ai/mastra/commit/d975e924d4936f46c386bd3dee39c671720289f6), [`45dd6ee`](https://github.com/mastra-ai/mastra/commit/45dd6ee089bd7df0d0c98a10098e483fd388e04a), [`4e9a228`](https://github.com/mastra-ai/mastra/commit/4e9a2283d5fd6ed1b70a2751eb3dc2cbf82ada20), [`d6ce34a`](https://github.com/mastra-ai/mastra/commit/d6ce34aeceb06ddf3d595a1eed5cc74f481a46a1), [`f95f468`](https://github.com/mastra-ai/mastra/commit/f95f468cf1e7c2b924a13826494f98b8f2ccd581), [`30ed33e`](https://github.com/mastra-ai/mastra/commit/30ed33ee14084a26019aba15fceadda6d6ddefaf), [`04a815f`](https://github.com/mastra-ai/mastra/commit/04a815fc8971d29e97fcdcc5008a1eb472fc00ff), [`1cfa878`](https://github.com/mastra-ai/mastra/commit/1cfa8784d8da0dfaa0317e5048bc48b6084a5ea5), [`9a12ef3`](https://github.com/mastra-ai/mastra/commit/9a12ef3fccf3f4186db0f294f4ee1f02cf4d8db2), [`32d3583`](https://github.com/mastra-ai/mastra/commit/32d358332cb8ac2306b83b73cf3536e74dbd435e), [`7960688`](https://github.com/mastra-ai/mastra/commit/7960688828e04eaf3106e34f7758fa580257eef6), [`91ad69d`](https://github.com/mastra-ai/mastra/commit/91ad69d64994c89199b0c55399e64ed91c61df2f), [`8dc408d`](https://github.com/mastra-ai/mastra/commit/8dc408d34438f9e13297f792c11a5cfd6cf952e1), [`c92def1`](https://github.com/mastra-ai/mastra/commit/c92def10a13c822972c96f0a4ca6ffc1f4258aed), [`63041eb`](https://github.com/mastra-ai/mastra/commit/63041eb4c50b520a0a80e03d4cd6ea99f67715a0), [`c118318`](https://github.com/mastra-ai/mastra/commit/c1183181c9804303db4b511c2e2648f8b714712b), [`c5eaec5`](https://github.com/mastra-ai/mastra/commit/c5eaec5a860d80d0e3805e67db0414b87ac8cbed), [`fc07c64`](https://github.com/mastra-ai/mastra/commit/fc07c6465043e08e99193a6751a01c56ffc2e7a1), [`cced745`](https://github.com/mastra-ai/mastra/commit/cced745a056ec2225c5bc702e32d848847aa8b65), [`542dee2`](https://github.com/mastra-ai/mastra/commit/542dee254167f974ff8cbbbfc0ce10f9a2616a7b), [`3c19dce`](https://github.com/mastra-ai/mastra/commit/3c19dcef8e73062a80627a4927eae3ec11145afd), [`aca2869`](https://github.com/mastra-ai/mastra/commit/aca2869b2031982f3c4a2f52525c9be7cf123ef8), [`8dcd635`](https://github.com/mastra-ai/mastra/commit/8dcd6357f0d9557cebc727d7abc6901af6231e4f), [`a58483c`](https://github.com/mastra-ai/mastra/commit/a58483cff1a9d41fce7c931843f48cb0ac450f64), [`a58483c`](https://github.com/mastra-ai/mastra/commit/a58483cff1a9d41fce7c931843f48cb0ac450f64), [`e6f8450`](https://github.com/mastra-ai/mastra/commit/e6f845074d478527026b18d85031b23353e1d0a4), [`895e9df`](https://github.com/mastra-ai/mastra/commit/895e9dfc17d6f34299eca64e317ded9e5f5e5ef8), [`e66b2ba`](https://github.com/mastra-ai/mastra/commit/e66b2ba100db63eaeab6e21e1ea34b113f2ec781), [`3e8727e`](https://github.com/mastra-ai/mastra/commit/3e8727e11ec1a5d733acedb5c872896394be18c1)]:
|
|
188
|
+
- @mastra/core@1.62.0
|
|
189
|
+
- @mastra/client-js@1.42.1
|
|
190
|
+
- @mastra/memory@1.28.0
|
|
191
|
+
- @mastra/react@1.4.6
|
|
192
|
+
|
|
193
|
+
## 51.1.0-alpha.12
|
|
194
|
+
|
|
195
|
+
### Patch Changes
|
|
196
|
+
|
|
197
|
+
- Updated dependencies [[`48ef1f1`](https://github.com/mastra-ai/mastra/commit/48ef1f1d24eedafbb07f64e659a81b52b67b8bf6), [`63796ba`](https://github.com/mastra-ai/mastra/commit/63796ba0fda60253be17535e68f6bbbf1e6ffa09), [`3c19dce`](https://github.com/mastra-ai/mastra/commit/3c19dcef8e73062a80627a4927eae3ec11145afd)]:
|
|
198
|
+
- @mastra/core@1.62.0-alpha.12
|
|
199
|
+
- @mastra/client-js@1.42.1-alpha.12
|
|
200
|
+
- @mastra/react@1.4.6-alpha.12
|
|
201
|
+
|
|
202
|
+
## 51.1.0-alpha.11
|
|
203
|
+
|
|
204
|
+
### Minor Changes
|
|
205
|
+
|
|
206
|
+
- Improved how streaming transcripts move, and added the arrival primitives behind it. ([#22299](https://github.com/mastra-ai/mastra/pull/22299))
|
|
207
|
+
|
|
208
|
+
**Fixed**
|
|
209
|
+
|
|
210
|
+
- Words already read no longer replay their entrance when markdown rebuilds around them, and a reply born streaming animates from its very first word instead of landing as a block that fades in.
|
|
211
|
+
- The reveal clock no longer steps backwards for one frame, which unmounted a settled tool row and cut its shimmer off mid-sweep.
|
|
212
|
+
- The shimmer on running labels is a single band scaled to the element instead of a tiled pattern, and it dissolves into the text colour when the label lands instead of snapping off.
|
|
213
|
+
- `MessageScroller` follows the last message instead of the end of its box, so the reader is no longer parked on empty space below the conversation. Catch-up while following a stream is softened on the compositor, and opening a turn parks the sent message above the room reserved for its answer — the room decides how high it rests — and lets the answer grow beneath it.
|
|
214
|
+
|
|
215
|
+
**Added**
|
|
216
|
+
|
|
217
|
+
- `ArrivalScope`, `useWatched` and `Arriving`: one shared answer to "was the reader watching when this mounted", so every entrance derives from it.
|
|
218
|
+
- `useRevealedText`: the word-by-word pacing, moved out of `MarkdownRenderer` so a caller can lay tool rows and cards down in the same rhythm as the prose.
|
|
219
|
+
|
|
220
|
+
**Migration**
|
|
221
|
+
|
|
222
|
+
- `streaming` on `MarkdownRenderer` no longer paces the reveal — it only means "this text is a prefix still being written". A caller that relied on it for word-by-word pacing pairs the renderer with `useRevealedText`:
|
|
223
|
+
|
|
224
|
+
```tsx
|
|
225
|
+
// before: streaming paced the text word by word
|
|
226
|
+
<MarkdownRenderer streaming={streaming}>{text}</MarkdownRenderer>;
|
|
227
|
+
|
|
228
|
+
// after: the caller owns the pace; streaming only mends the unterminated tail
|
|
229
|
+
const shown = useRevealedText(text, streaming);
|
|
230
|
+
|
|
231
|
+
<MarkdownRenderer streaming={streaming || shown !== text}>{shown}</MarkdownRenderer>;
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
- The entrance class `mastra-markdown-arriving` is renamed to `mastra-arriving`. Anything targeting the old name — a selector, a `className` — updates to the new one, best by importing it:
|
|
235
|
+
|
|
236
|
+
```tsx
|
|
237
|
+
// before
|
|
238
|
+
<div className="mastra-markdown-arriving" />;
|
|
239
|
+
|
|
240
|
+
// after
|
|
241
|
+
import { ARRIVING_CLASS } from '@mastra/playground-ui/tokens';
|
|
242
|
+
|
|
243
|
+
<div className={ARRIVING_CLASS} />;
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
**Changed**
|
|
247
|
+
|
|
248
|
+
- `Shimmer` takes `active` and stays one element across the switch, so nothing inside it remounts when a label lands:
|
|
249
|
+
|
|
250
|
+
```tsx
|
|
251
|
+
// before: a different element per state, remounting everything inside on landing
|
|
252
|
+
const Header = status === 'running' ? Shimmer : 'span';
|
|
253
|
+
|
|
254
|
+
// after
|
|
255
|
+
<Shimmer active={status === 'running'}>{label}</Shimmer>;
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
### Patch Changes
|
|
259
|
+
|
|
260
|
+
- Improved the Traces page: trace actions (Evaluate Trace, Save as Dataset Item, Add tool mocks) now live in the trace panel header next to the collapse button, removed the empty gap above the traces list when no filters are applied, and replaced the auto-refetch icon button with a labeled "Auto refresh" checkbox (the subtraces toggle is now a "Subtraces" checkbox too). The trace panel now has Details and Scores tabs — Evaluate Trace switches to the Scores tab showing the trace's scores — and the span panel's Scoring tab was removed. The evaluate action is now labeled "Score trace", and the no-traces empty state no longer shows a documentation CTA. The standalone `/traces/:traceId` page was removed — those URLs now redirect to `/traces?traceId=...`, and all in-app links point to the query-param form. ([#22313](https://github.com/mastra-ai/mastra/pull/22313))
|
|
261
|
+
|
|
262
|
+
- Fixed popups, tooltips, and menus occasionally stretching the page and showing a second pair of scrollbars. Floating elements now use fixed positioning, so a popup that closes or outlives a window resize can no longer grow the document behind it. ([#22329](https://github.com/mastra-ai/mastra/pull/22329))
|
|
263
|
+
|
|
264
|
+
- Hardened the fix for popups stretching the page: all floating elements now take their fixed positioning from one shared constant, and a test fails if a new component falls back to Base UI's absolute default and could reintroduce the double-scrollbar bug. ([#22331](https://github.com/mastra-ai/mastra/pull/22331))
|
|
265
|
+
|
|
266
|
+
- Fixed invisible leftover popups by upgrading Base UI to 1.7.0. Quick repeated hovers could cancel a popup's exit animation and leave it permanently mounted (mui/base-ui#5395); reopened popups could also flash at stale coordinates before repositioning. Both are fixed upstream in 1.7.0. ([#22338](https://github.com/mastra-ai/mastra/pull/22338))
|
|
267
|
+
|
|
268
|
+
- Added a score-over-time line chart above the scores table in the trace panel's Evaluations tab (formerly "Scores"), showing one line per scorer with per-scorer averages in the legend. The tab content now stretches to the panel bottom with a scrollable table card, and the trace action was renamed to "Evaluate trace". ([#22313](https://github.com/mastra-ai/mastra/pull/22313))
|
|
269
|
+
|
|
270
|
+
- Updated dependencies [[`4ff3ee2`](https://github.com/mastra-ai/mastra/commit/4ff3ee2bff7ed07528b4817f8f49639031c72a4d), [`c24754c`](https://github.com/mastra-ai/mastra/commit/c24754c1fb6fe144e5051e536e98c8a18b0214ac), [`cd7683d`](https://github.com/mastra-ai/mastra/commit/cd7683d3040bc322ec6f6efb6f9c1e8e40f062a1), [`45dd6ee`](https://github.com/mastra-ai/mastra/commit/45dd6ee089bd7df0d0c98a10098e483fd388e04a), [`32d3583`](https://github.com/mastra-ai/mastra/commit/32d358332cb8ac2306b83b73cf3536e74dbd435e), [`aca2869`](https://github.com/mastra-ai/mastra/commit/aca2869b2031982f3c4a2f52525c9be7cf123ef8)]:
|
|
271
|
+
- @mastra/core@1.62.0-alpha.11
|
|
272
|
+
- @mastra/memory@1.28.0-alpha.4
|
|
273
|
+
- @mastra/client-js@1.42.1-alpha.11
|
|
274
|
+
- @mastra/react@1.4.6-alpha.11
|
|
275
|
+
|
|
276
|
+
## 51.1.0-alpha.10
|
|
277
|
+
|
|
278
|
+
### Minor Changes
|
|
279
|
+
|
|
280
|
+
- Added a `useKeydown` hook for keyboard shortcuts (single keys and modifier combos like `mod+k`) and a `useTableKeydown` hook for accessible roving-tabindex navigation in tables and lists (arrow keys, PageUp/PageDown, Home/End). ([#22284](https://github.com/mastra-ai/mastra/pull/22284))
|
|
281
|
+
|
|
282
|
+
### Patch Changes
|
|
283
|
+
|
|
284
|
+
- Improved the datasets experience in Studio: creating and editing a dataset now happens on dedicated pages (wrapped in a card) with proper breadcrumbs instead of dialogs, the dataset breadcrumb links to the dataset while a separate arrow opens the dataset switcher, item comparison moved to a path-based URL and is started from a new "Compare with" section in the item side panel, item checkboxes are always visible with contextual actions consolidated into a single "{n} selected" dropdown with a destructive Delete Items entry, experiment rows open the global experiment page (the dataset-scoped experiment route was removed), and the "Run Experiment" button keeps a stable label. Also improved dataset version selection when running experiments (with an inline old-version notice next to the items search and a link-style "Return to latest" action), and dataset item creation with a spacious sidebar and larger JSON editors. ([#21910](https://github.com/mastra-ai/mastra/pull/21910))
|
|
285
|
+
|
|
286
|
+
- Added keyboard navigation to interactive lists in Studio. Use ArrowUp/ArrowDown to move between rows, PageUp/PageDown to jump by page, and Home/End to reach the first or last row in agents, workflows, tools, datasets, experiments, scores, traces, logs, and other list views. ([#22288](https://github.com/mastra-ai/mastra/pull/22288))
|
|
287
|
+
|
|
288
|
+
- Updated dependencies [[`b05f486`](https://github.com/mastra-ai/mastra/commit/b05f48612984d5fe2447ea2d6cdd5c604d285b97), [`7960688`](https://github.com/mastra-ai/mastra/commit/7960688828e04eaf3106e34f7758fa580257eef6)]:
|
|
289
|
+
- @mastra/core@1.62.0-alpha.10
|
|
290
|
+
- @mastra/client-js@1.42.1-alpha.10
|
|
291
|
+
- @mastra/react@1.4.6-alpha.10
|
|
292
|
+
|
|
3
293
|
## 51.1.0-alpha.9
|
|
4
294
|
|
|
5
295
|
### Patch Changes
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
const jsxRuntime = require('react/jsx-runtime');
|
|
4
4
|
const index = require('./index-C-Lt4Bx_.cjs');
|
|
5
5
|
const React = require('react');
|
|
6
|
-
const tooltip = require('./tooltip-
|
|
6
|
+
const tooltip = require('./tooltip-DMOZ2oaq.cjs');
|
|
7
7
|
const icons_Icon = require('./icons/Icon.cjs.js');
|
|
8
8
|
const primitives_controlSize = require('./primitives/control-size.cjs.js');
|
|
9
9
|
const primitives_formElement = require('./primitives/form-element.cjs.js');
|
|
@@ -108,4 +108,4 @@ Button.displayName = "Button";
|
|
|
108
108
|
|
|
109
109
|
exports.Button = Button;
|
|
110
110
|
exports.buttonVariants = buttonVariants;
|
|
111
|
-
//# sourceMappingURL=Button-
|
|
111
|
+
//# sourceMappingURL=Button-DA5XLUon.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button-BWj3opYd.cjs","sources":["../src/ds/components/Button/Button.tsx"],"sourcesContent":["import { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\nimport React from 'react';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/ds/components/Tooltip';\nimport { Icon } from '@/ds/icons/Icon';\nimport { controlHeight, controlSizeClasses } from '@/ds/primitives/control-size';\nimport { controlFocusBorderVisible, sharedFormElementDisabledStyle } from '@/ds/primitives/form-element';\nimport { cn } from '@/lib/utils';\n\n// Adornments for text-mode buttons: gap between icon+label, larger radius, and SVG sizing for\n// inline `<svg>` children. Excluded from icon-mode because icon-mode wraps children in `<Icon>`\n// (so `[&>svg]` selectors don't match) and uses its own `rounded-full` (circle).\nconst TEXT_MODE_ADORNMENTS = cn(\n 'gap-[.75em] rounded-full',\n '[&>svg]:mx-[-.3em] [&>svg]:size-[1.1em]',\n '[&:hover>svg]:opacity-100 [&>svg]:opacity-50',\n '[&>svg]:transition-opacity [&>svg]:duration-normal [&>svg]:ease-out-custom',\n);\n\n// eslint-disable-next-line react-refresh/only-export-components -- exported variant helper is part of Button's public API\nexport const buttonVariants = cva(\n cn(\n 'inline-flex cursor-pointer items-center justify-center leading-0',\n 'transition-all duration-normal ease-out-custom',\n sharedFormElementDisabledStyle,\n controlFocusBorderVisible,\n ),\n {\n variants: {\n variant: {\n default:\n 'border border-border2 bg-surface3 text-neutral6 hover:bg-surface5 hover:text-neutral6 active:bg-surface6',\n primary:\n 'border border-transparent bg-neutral6 font-medium text-surface1 hover:bg-neutral6/90 active:bg-neutral6/80',\n destructive:\n 'border border-transparent bg-accent2 font-medium text-white hover:bg-accent2/90 active:bg-accent2/80',\n 'destructive-ghost':\n 'border border-transparent bg-transparent text-accent2 hover:bg-accent2/10 hover:text-accent2 active:bg-accent2/15',\n ghost:\n 'border border-transparent bg-transparent text-neutral4 hover:bg-neutral6/5 hover:text-neutral6 active:bg-neutral6/10',\n outline:\n 'border border-border1 bg-transparent text-neutral5 hover:bg-surface3 hover:text-neutral6 active:bg-surface4',\n },\n size: {\n xs: cn(controlSizeClasses.xs, 'px-[.8em]', TEXT_MODE_ADORNMENTS),\n sm: cn(controlSizeClasses.sm, 'px-[.9em]', TEXT_MODE_ADORNMENTS),\n md: cn(controlSizeClasses.md, 'px-[.9em]', TEXT_MODE_ADORNMENTS),\n lg: cn(controlSizeClasses.default, 'px-[1em]', TEXT_MODE_ADORNMENTS),\n // Icon sizes: square dimensions, fully rounded → circle. Active state inherits from variant\n // (e.g. `active:bg-surface5`) — same press feedback as text-mode for consistency.\n 'icon-xs': cn(controlHeight.xs, 'w-form-xs rounded-full'),\n 'icon-sm': cn(controlHeight.sm, 'w-form-sm rounded-full'),\n 'icon-md': cn(controlHeight.md, 'w-form-md rounded-full'),\n 'icon-lg': cn(controlHeight.lg, 'w-form-lg rounded-full'),\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n },\n);\n\n// Public types derived from cva — single source of truth. Adding a variant or size to\n// `buttonVariants` automatically updates these unions.\ntype ButtonVariantsProps = VariantProps<typeof buttonVariants>;\nexport type ButtonVariant = NonNullable<ButtonVariantsProps['variant']>;\nexport type ButtonSize = NonNullable<ButtonVariantsProps['size']>;\nexport type IconButtonSize = Extract<ButtonSize, `icon-${string}`>;\nexport type TextButtonSize = Exclude<ButtonSize, IconButtonSize>;\n\nexport interface ButtonProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children'>, ButtonVariantsProps {\n as?: React.ElementType;\n className?: string;\n href?: string;\n to?: string;\n prefetch?: boolean | null;\n children: React.ReactNode;\n tooltip?: React.ReactNode;\n target?: string;\n type?: 'button' | 'submit' | 'reset';\n onClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n}\n\n// Button's icon-* sizes don't match `<Icon>`'s own size scale (`sm | default | lg`).\nconst iconChildSizeMap: Record<IconButtonSize, 'sm' | 'default' | 'lg'> = {\n 'icon-xs': 'sm',\n 'icon-sm': 'sm',\n 'icon-md': 'default',\n 'icon-lg': 'lg',\n};\n\n// Walks React children, expanding `<></>` fragments so `isIconOnly` can inspect the real\n// elements inside. `<Button><><Icon/></></Button>` should still count as icon-only.\nfunction flattenChildren(children: React.ReactNode): React.ReactNode[] {\n const result: React.ReactNode[] = [];\n React.Children.forEach(children, child => {\n if (React.isValidElement<{ children?: React.ReactNode }>(child) && child.type === React.Fragment) {\n result.push(...flattenChildren(child.props.children));\n } else {\n result.push(child);\n }\n });\n return result;\n}\n\n// True when every child is a React element (no text/label). Used in text-mode to brighten the\n// SVG of label-less buttons so the glyph reads stronger.\nfunction isIconOnly(children: React.ReactNode): boolean {\n const flat = flattenChildren(children);\n return flat.length > 0 && flat.every(child => React.isValidElement(child));\n}\n\n// Type guard: narrows `ButtonSize` to `IconButtonSize` so consumers (e.g. `iconChildSizeMap`)\n// can index into icon-only structures without a cast.\nfunction isIconButtonSize(size: ButtonSize | null | undefined): size is IconButtonSize {\n return typeof size === 'string' && size.startsWith('icon-');\n}\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n { className, as, size, variant = 'default', disabled, children, tooltip, 'aria-label': ariaLabelProp, ...props },\n ref,\n ) => {\n const Component = as || 'button';\n const iconMode = isIconButtonSize(size);\n const resolvedSize: ButtonSize = size ?? 'md';\n const isLabelless = !iconMode && isIconOnly(children);\n\n // Icon-only buttons need an a11y label. If a string tooltip is provided, reuse it.\n const ariaLabel = ariaLabelProp ?? ((iconMode || isLabelless) && typeof tooltip === 'string' ? tooltip : undefined);\n\n const content = iconMode ? <Icon size={iconChildSizeMap[size as IconButtonSize]}>{children}</Icon> : children;\n\n const button = (\n <Component\n ref={ref}\n disabled={disabled}\n aria-label={ariaLabel}\n // Expose the variant so a parent ButtonsGroup can detect FILLED segments in CSS\n // (filled buttons have an opaque background that hides a border seam, so the group\n // paints their divider as an inset box-shadow instead — see buttons-group.tsx).\n data-variant={variant}\n className={cn(buttonVariants({ variant, size: resolvedSize }), isLabelless && '[&>svg]:opacity-75', className)}\n {...props}\n >\n {content}\n </Component>\n );\n\n if (tooltip) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent>{tooltip}</TooltipContent>\n </Tooltip>\n );\n }\n\n return button;\n },\n);\n\nButton.displayName = 'Button';\n"],"names":["cn","cva","sharedFormElementDisabledStyle","controlFocusBorderVisible","controlSizeClasses","controlHeight","tooltip","jsx","Icon","Tooltip","TooltipTrigger","TooltipContent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Button-DA5XLUon.cjs","sources":["../src/ds/components/Button/Button.tsx"],"sourcesContent":["import { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\nimport React from 'react';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/ds/components/Tooltip';\nimport { Icon } from '@/ds/icons/Icon';\nimport { controlHeight, controlSizeClasses } from '@/ds/primitives/control-size';\nimport { controlFocusBorderVisible, sharedFormElementDisabledStyle } from '@/ds/primitives/form-element';\nimport { cn } from '@/lib/utils';\n\n// Adornments for text-mode buttons: gap between icon+label, larger radius, and SVG sizing for\n// inline `<svg>` children. Excluded from icon-mode because icon-mode wraps children in `<Icon>`\n// (so `[&>svg]` selectors don't match) and uses its own `rounded-full` (circle).\nconst TEXT_MODE_ADORNMENTS = cn(\n 'gap-[.75em] rounded-full',\n '[&>svg]:mx-[-.3em] [&>svg]:size-[1.1em]',\n '[&:hover>svg]:opacity-100 [&>svg]:opacity-50',\n '[&>svg]:transition-opacity [&>svg]:duration-normal [&>svg]:ease-out-custom',\n);\n\n// eslint-disable-next-line react-refresh/only-export-components -- exported variant helper is part of Button's public API\nexport const buttonVariants = cva(\n cn(\n 'inline-flex cursor-pointer items-center justify-center leading-0',\n 'transition-all duration-normal ease-out-custom',\n sharedFormElementDisabledStyle,\n controlFocusBorderVisible,\n ),\n {\n variants: {\n variant: {\n default:\n 'border border-border2 bg-surface3 text-neutral6 hover:bg-surface5 hover:text-neutral6 active:bg-surface6',\n primary:\n 'border border-transparent bg-neutral6 font-medium text-surface1 hover:bg-neutral6/90 active:bg-neutral6/80',\n destructive:\n 'border border-transparent bg-accent2 font-medium text-white hover:bg-accent2/90 active:bg-accent2/80',\n 'destructive-ghost':\n 'border border-transparent bg-transparent text-accent2 hover:bg-accent2/10 hover:text-accent2 active:bg-accent2/15',\n ghost:\n 'border border-transparent bg-transparent text-neutral4 hover:bg-neutral6/5 hover:text-neutral6 active:bg-neutral6/10',\n outline:\n 'border border-border1 bg-transparent text-neutral5 hover:bg-surface3 hover:text-neutral6 active:bg-surface4',\n },\n size: {\n xs: cn(controlSizeClasses.xs, 'px-[.8em]', TEXT_MODE_ADORNMENTS),\n sm: cn(controlSizeClasses.sm, 'px-[.9em]', TEXT_MODE_ADORNMENTS),\n md: cn(controlSizeClasses.md, 'px-[.9em]', TEXT_MODE_ADORNMENTS),\n lg: cn(controlSizeClasses.default, 'px-[1em]', TEXT_MODE_ADORNMENTS),\n // Icon sizes: square dimensions, fully rounded → circle. Active state inherits from variant\n // (e.g. `active:bg-surface5`) — same press feedback as text-mode for consistency.\n 'icon-xs': cn(controlHeight.xs, 'w-form-xs rounded-full'),\n 'icon-sm': cn(controlHeight.sm, 'w-form-sm rounded-full'),\n 'icon-md': cn(controlHeight.md, 'w-form-md rounded-full'),\n 'icon-lg': cn(controlHeight.lg, 'w-form-lg rounded-full'),\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n },\n);\n\n// Public types derived from cva — single source of truth. Adding a variant or size to\n// `buttonVariants` automatically updates these unions.\ntype ButtonVariantsProps = VariantProps<typeof buttonVariants>;\nexport type ButtonVariant = NonNullable<ButtonVariantsProps['variant']>;\nexport type ButtonSize = NonNullable<ButtonVariantsProps['size']>;\nexport type IconButtonSize = Extract<ButtonSize, `icon-${string}`>;\nexport type TextButtonSize = Exclude<ButtonSize, IconButtonSize>;\n\nexport interface ButtonProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children'>, ButtonVariantsProps {\n as?: React.ElementType;\n className?: string;\n href?: string;\n to?: string;\n prefetch?: boolean | null;\n children: React.ReactNode;\n tooltip?: React.ReactNode;\n target?: string;\n type?: 'button' | 'submit' | 'reset';\n onClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n}\n\n// Button's icon-* sizes don't match `<Icon>`'s own size scale (`sm | default | lg`).\nconst iconChildSizeMap: Record<IconButtonSize, 'sm' | 'default' | 'lg'> = {\n 'icon-xs': 'sm',\n 'icon-sm': 'sm',\n 'icon-md': 'default',\n 'icon-lg': 'lg',\n};\n\n// Walks React children, expanding `<></>` fragments so `isIconOnly` can inspect the real\n// elements inside. `<Button><><Icon/></></Button>` should still count as icon-only.\nfunction flattenChildren(children: React.ReactNode): React.ReactNode[] {\n const result: React.ReactNode[] = [];\n React.Children.forEach(children, child => {\n if (React.isValidElement<{ children?: React.ReactNode }>(child) && child.type === React.Fragment) {\n result.push(...flattenChildren(child.props.children));\n } else {\n result.push(child);\n }\n });\n return result;\n}\n\n// True when every child is a React element (no text/label). Used in text-mode to brighten the\n// SVG of label-less buttons so the glyph reads stronger.\nfunction isIconOnly(children: React.ReactNode): boolean {\n const flat = flattenChildren(children);\n return flat.length > 0 && flat.every(child => React.isValidElement(child));\n}\n\n// Type guard: narrows `ButtonSize` to `IconButtonSize` so consumers (e.g. `iconChildSizeMap`)\n// can index into icon-only structures without a cast.\nfunction isIconButtonSize(size: ButtonSize | null | undefined): size is IconButtonSize {\n return typeof size === 'string' && size.startsWith('icon-');\n}\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n { className, as, size, variant = 'default', disabled, children, tooltip, 'aria-label': ariaLabelProp, ...props },\n ref,\n ) => {\n const Component = as || 'button';\n const iconMode = isIconButtonSize(size);\n const resolvedSize: ButtonSize = size ?? 'md';\n const isLabelless = !iconMode && isIconOnly(children);\n\n // Icon-only buttons need an a11y label. If a string tooltip is provided, reuse it.\n const ariaLabel = ariaLabelProp ?? ((iconMode || isLabelless) && typeof tooltip === 'string' ? tooltip : undefined);\n\n const content = iconMode ? <Icon size={iconChildSizeMap[size as IconButtonSize]}>{children}</Icon> : children;\n\n const button = (\n <Component\n ref={ref}\n disabled={disabled}\n aria-label={ariaLabel}\n // Expose the variant so a parent ButtonsGroup can detect FILLED segments in CSS\n // (filled buttons have an opaque background that hides a border seam, so the group\n // paints their divider as an inset box-shadow instead — see buttons-group.tsx).\n data-variant={variant}\n className={cn(buttonVariants({ variant, size: resolvedSize }), isLabelless && '[&>svg]:opacity-75', className)}\n {...props}\n >\n {content}\n </Component>\n );\n\n if (tooltip) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent>{tooltip}</TooltipContent>\n </Tooltip>\n );\n }\n\n return button;\n },\n);\n\nButton.displayName = 'Button';\n"],"names":["cn","cva","sharedFormElementDisabledStyle","controlFocusBorderVisible","controlSizeClasses","controlHeight","tooltip","jsx","Icon","Tooltip","TooltipTrigger","TooltipContent"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
2
|
import { c as cva } from './index-CSm06eOE.js';
|
|
3
3
|
import React__default from 'react';
|
|
4
|
-
import { T as Tooltip, c as TooltipTrigger, a as TooltipContent } from './tooltip-
|
|
4
|
+
import { T as Tooltip, c as TooltipTrigger, a as TooltipContent } from './tooltip-CF30mRAe.js';
|
|
5
5
|
import { Icon } from './icons/Icon.es.js';
|
|
6
6
|
import { controlHeight, controlSizeClasses } from './primitives/control-size.es.js';
|
|
7
7
|
import { controlFocusBorderVisible, sharedFormElementDisabledStyle } from './primitives/form-element.es.js';
|
|
@@ -105,4 +105,4 @@ const Button = React__default.forwardRef(
|
|
|
105
105
|
Button.displayName = "Button";
|
|
106
106
|
|
|
107
107
|
export { Button as B, buttonVariants as b };
|
|
108
|
-
//# sourceMappingURL=Button-
|
|
108
|
+
//# sourceMappingURL=Button-vr_I4iME.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button-XHy01fYR.js","sources":["../src/ds/components/Button/Button.tsx"],"sourcesContent":["import { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\nimport React from 'react';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/ds/components/Tooltip';\nimport { Icon } from '@/ds/icons/Icon';\nimport { controlHeight, controlSizeClasses } from '@/ds/primitives/control-size';\nimport { controlFocusBorderVisible, sharedFormElementDisabledStyle } from '@/ds/primitives/form-element';\nimport { cn } from '@/lib/utils';\n\n// Adornments for text-mode buttons: gap between icon+label, larger radius, and SVG sizing for\n// inline `<svg>` children. Excluded from icon-mode because icon-mode wraps children in `<Icon>`\n// (so `[&>svg]` selectors don't match) and uses its own `rounded-full` (circle).\nconst TEXT_MODE_ADORNMENTS = cn(\n 'gap-[.75em] rounded-full',\n '[&>svg]:mx-[-.3em] [&>svg]:size-[1.1em]',\n '[&:hover>svg]:opacity-100 [&>svg]:opacity-50',\n '[&>svg]:transition-opacity [&>svg]:duration-normal [&>svg]:ease-out-custom',\n);\n\n// eslint-disable-next-line react-refresh/only-export-components -- exported variant helper is part of Button's public API\nexport const buttonVariants = cva(\n cn(\n 'inline-flex cursor-pointer items-center justify-center leading-0',\n 'transition-all duration-normal ease-out-custom',\n sharedFormElementDisabledStyle,\n controlFocusBorderVisible,\n ),\n {\n variants: {\n variant: {\n default:\n 'border border-border2 bg-surface3 text-neutral6 hover:bg-surface5 hover:text-neutral6 active:bg-surface6',\n primary:\n 'border border-transparent bg-neutral6 font-medium text-surface1 hover:bg-neutral6/90 active:bg-neutral6/80',\n destructive:\n 'border border-transparent bg-accent2 font-medium text-white hover:bg-accent2/90 active:bg-accent2/80',\n 'destructive-ghost':\n 'border border-transparent bg-transparent text-accent2 hover:bg-accent2/10 hover:text-accent2 active:bg-accent2/15',\n ghost:\n 'border border-transparent bg-transparent text-neutral4 hover:bg-neutral6/5 hover:text-neutral6 active:bg-neutral6/10',\n outline:\n 'border border-border1 bg-transparent text-neutral5 hover:bg-surface3 hover:text-neutral6 active:bg-surface4',\n },\n size: {\n xs: cn(controlSizeClasses.xs, 'px-[.8em]', TEXT_MODE_ADORNMENTS),\n sm: cn(controlSizeClasses.sm, 'px-[.9em]', TEXT_MODE_ADORNMENTS),\n md: cn(controlSizeClasses.md, 'px-[.9em]', TEXT_MODE_ADORNMENTS),\n lg: cn(controlSizeClasses.default, 'px-[1em]', TEXT_MODE_ADORNMENTS),\n // Icon sizes: square dimensions, fully rounded → circle. Active state inherits from variant\n // (e.g. `active:bg-surface5`) — same press feedback as text-mode for consistency.\n 'icon-xs': cn(controlHeight.xs, 'w-form-xs rounded-full'),\n 'icon-sm': cn(controlHeight.sm, 'w-form-sm rounded-full'),\n 'icon-md': cn(controlHeight.md, 'w-form-md rounded-full'),\n 'icon-lg': cn(controlHeight.lg, 'w-form-lg rounded-full'),\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n },\n);\n\n// Public types derived from cva — single source of truth. Adding a variant or size to\n// `buttonVariants` automatically updates these unions.\ntype ButtonVariantsProps = VariantProps<typeof buttonVariants>;\nexport type ButtonVariant = NonNullable<ButtonVariantsProps['variant']>;\nexport type ButtonSize = NonNullable<ButtonVariantsProps['size']>;\nexport type IconButtonSize = Extract<ButtonSize, `icon-${string}`>;\nexport type TextButtonSize = Exclude<ButtonSize, IconButtonSize>;\n\nexport interface ButtonProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children'>, ButtonVariantsProps {\n as?: React.ElementType;\n className?: string;\n href?: string;\n to?: string;\n prefetch?: boolean | null;\n children: React.ReactNode;\n tooltip?: React.ReactNode;\n target?: string;\n type?: 'button' | 'submit' | 'reset';\n onClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n}\n\n// Button's icon-* sizes don't match `<Icon>`'s own size scale (`sm | default | lg`).\nconst iconChildSizeMap: Record<IconButtonSize, 'sm' | 'default' | 'lg'> = {\n 'icon-xs': 'sm',\n 'icon-sm': 'sm',\n 'icon-md': 'default',\n 'icon-lg': 'lg',\n};\n\n// Walks React children, expanding `<></>` fragments so `isIconOnly` can inspect the real\n// elements inside. `<Button><><Icon/></></Button>` should still count as icon-only.\nfunction flattenChildren(children: React.ReactNode): React.ReactNode[] {\n const result: React.ReactNode[] = [];\n React.Children.forEach(children, child => {\n if (React.isValidElement<{ children?: React.ReactNode }>(child) && child.type === React.Fragment) {\n result.push(...flattenChildren(child.props.children));\n } else {\n result.push(child);\n }\n });\n return result;\n}\n\n// True when every child is a React element (no text/label). Used in text-mode to brighten the\n// SVG of label-less buttons so the glyph reads stronger.\nfunction isIconOnly(children: React.ReactNode): boolean {\n const flat = flattenChildren(children);\n return flat.length > 0 && flat.every(child => React.isValidElement(child));\n}\n\n// Type guard: narrows `ButtonSize` to `IconButtonSize` so consumers (e.g. `iconChildSizeMap`)\n// can index into icon-only structures without a cast.\nfunction isIconButtonSize(size: ButtonSize | null | undefined): size is IconButtonSize {\n return typeof size === 'string' && size.startsWith('icon-');\n}\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n { className, as, size, variant = 'default', disabled, children, tooltip, 'aria-label': ariaLabelProp, ...props },\n ref,\n ) => {\n const Component = as || 'button';\n const iconMode = isIconButtonSize(size);\n const resolvedSize: ButtonSize = size ?? 'md';\n const isLabelless = !iconMode && isIconOnly(children);\n\n // Icon-only buttons need an a11y label. If a string tooltip is provided, reuse it.\n const ariaLabel = ariaLabelProp ?? ((iconMode || isLabelless) && typeof tooltip === 'string' ? tooltip : undefined);\n\n const content = iconMode ? <Icon size={iconChildSizeMap[size as IconButtonSize]}>{children}</Icon> : children;\n\n const button = (\n <Component\n ref={ref}\n disabled={disabled}\n aria-label={ariaLabel}\n // Expose the variant so a parent ButtonsGroup can detect FILLED segments in CSS\n // (filled buttons have an opaque background that hides a border seam, so the group\n // paints their divider as an inset box-shadow instead — see buttons-group.tsx).\n data-variant={variant}\n className={cn(buttonVariants({ variant, size: resolvedSize }), isLabelless && '[&>svg]:opacity-75', className)}\n {...props}\n >\n {content}\n </Component>\n );\n\n if (tooltip) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent>{tooltip}</TooltipContent>\n </Tooltip>\n );\n }\n\n return button;\n },\n);\n\nButton.displayName = 'Button';\n"],"names":["React"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Button-vr_I4iME.js","sources":["../src/ds/components/Button/Button.tsx"],"sourcesContent":["import { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\nimport React from 'react';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/ds/components/Tooltip';\nimport { Icon } from '@/ds/icons/Icon';\nimport { controlHeight, controlSizeClasses } from '@/ds/primitives/control-size';\nimport { controlFocusBorderVisible, sharedFormElementDisabledStyle } from '@/ds/primitives/form-element';\nimport { cn } from '@/lib/utils';\n\n// Adornments for text-mode buttons: gap between icon+label, larger radius, and SVG sizing for\n// inline `<svg>` children. Excluded from icon-mode because icon-mode wraps children in `<Icon>`\n// (so `[&>svg]` selectors don't match) and uses its own `rounded-full` (circle).\nconst TEXT_MODE_ADORNMENTS = cn(\n 'gap-[.75em] rounded-full',\n '[&>svg]:mx-[-.3em] [&>svg]:size-[1.1em]',\n '[&:hover>svg]:opacity-100 [&>svg]:opacity-50',\n '[&>svg]:transition-opacity [&>svg]:duration-normal [&>svg]:ease-out-custom',\n);\n\n// eslint-disable-next-line react-refresh/only-export-components -- exported variant helper is part of Button's public API\nexport const buttonVariants = cva(\n cn(\n 'inline-flex cursor-pointer items-center justify-center leading-0',\n 'transition-all duration-normal ease-out-custom',\n sharedFormElementDisabledStyle,\n controlFocusBorderVisible,\n ),\n {\n variants: {\n variant: {\n default:\n 'border border-border2 bg-surface3 text-neutral6 hover:bg-surface5 hover:text-neutral6 active:bg-surface6',\n primary:\n 'border border-transparent bg-neutral6 font-medium text-surface1 hover:bg-neutral6/90 active:bg-neutral6/80',\n destructive:\n 'border border-transparent bg-accent2 font-medium text-white hover:bg-accent2/90 active:bg-accent2/80',\n 'destructive-ghost':\n 'border border-transparent bg-transparent text-accent2 hover:bg-accent2/10 hover:text-accent2 active:bg-accent2/15',\n ghost:\n 'border border-transparent bg-transparent text-neutral4 hover:bg-neutral6/5 hover:text-neutral6 active:bg-neutral6/10',\n outline:\n 'border border-border1 bg-transparent text-neutral5 hover:bg-surface3 hover:text-neutral6 active:bg-surface4',\n },\n size: {\n xs: cn(controlSizeClasses.xs, 'px-[.8em]', TEXT_MODE_ADORNMENTS),\n sm: cn(controlSizeClasses.sm, 'px-[.9em]', TEXT_MODE_ADORNMENTS),\n md: cn(controlSizeClasses.md, 'px-[.9em]', TEXT_MODE_ADORNMENTS),\n lg: cn(controlSizeClasses.default, 'px-[1em]', TEXT_MODE_ADORNMENTS),\n // Icon sizes: square dimensions, fully rounded → circle. Active state inherits from variant\n // (e.g. `active:bg-surface5`) — same press feedback as text-mode for consistency.\n 'icon-xs': cn(controlHeight.xs, 'w-form-xs rounded-full'),\n 'icon-sm': cn(controlHeight.sm, 'w-form-sm rounded-full'),\n 'icon-md': cn(controlHeight.md, 'w-form-md rounded-full'),\n 'icon-lg': cn(controlHeight.lg, 'w-form-lg rounded-full'),\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n },\n);\n\n// Public types derived from cva — single source of truth. Adding a variant or size to\n// `buttonVariants` automatically updates these unions.\ntype ButtonVariantsProps = VariantProps<typeof buttonVariants>;\nexport type ButtonVariant = NonNullable<ButtonVariantsProps['variant']>;\nexport type ButtonSize = NonNullable<ButtonVariantsProps['size']>;\nexport type IconButtonSize = Extract<ButtonSize, `icon-${string}`>;\nexport type TextButtonSize = Exclude<ButtonSize, IconButtonSize>;\n\nexport interface ButtonProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children'>, ButtonVariantsProps {\n as?: React.ElementType;\n className?: string;\n href?: string;\n to?: string;\n prefetch?: boolean | null;\n children: React.ReactNode;\n tooltip?: React.ReactNode;\n target?: string;\n type?: 'button' | 'submit' | 'reset';\n onClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n}\n\n// Button's icon-* sizes don't match `<Icon>`'s own size scale (`sm | default | lg`).\nconst iconChildSizeMap: Record<IconButtonSize, 'sm' | 'default' | 'lg'> = {\n 'icon-xs': 'sm',\n 'icon-sm': 'sm',\n 'icon-md': 'default',\n 'icon-lg': 'lg',\n};\n\n// Walks React children, expanding `<></>` fragments so `isIconOnly` can inspect the real\n// elements inside. `<Button><><Icon/></></Button>` should still count as icon-only.\nfunction flattenChildren(children: React.ReactNode): React.ReactNode[] {\n const result: React.ReactNode[] = [];\n React.Children.forEach(children, child => {\n if (React.isValidElement<{ children?: React.ReactNode }>(child) && child.type === React.Fragment) {\n result.push(...flattenChildren(child.props.children));\n } else {\n result.push(child);\n }\n });\n return result;\n}\n\n// True when every child is a React element (no text/label). Used in text-mode to brighten the\n// SVG of label-less buttons so the glyph reads stronger.\nfunction isIconOnly(children: React.ReactNode): boolean {\n const flat = flattenChildren(children);\n return flat.length > 0 && flat.every(child => React.isValidElement(child));\n}\n\n// Type guard: narrows `ButtonSize` to `IconButtonSize` so consumers (e.g. `iconChildSizeMap`)\n// can index into icon-only structures without a cast.\nfunction isIconButtonSize(size: ButtonSize | null | undefined): size is IconButtonSize {\n return typeof size === 'string' && size.startsWith('icon-');\n}\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n { className, as, size, variant = 'default', disabled, children, tooltip, 'aria-label': ariaLabelProp, ...props },\n ref,\n ) => {\n const Component = as || 'button';\n const iconMode = isIconButtonSize(size);\n const resolvedSize: ButtonSize = size ?? 'md';\n const isLabelless = !iconMode && isIconOnly(children);\n\n // Icon-only buttons need an a11y label. If a string tooltip is provided, reuse it.\n const ariaLabel = ariaLabelProp ?? ((iconMode || isLabelless) && typeof tooltip === 'string' ? tooltip : undefined);\n\n const content = iconMode ? <Icon size={iconChildSizeMap[size as IconButtonSize]}>{children}</Icon> : children;\n\n const button = (\n <Component\n ref={ref}\n disabled={disabled}\n aria-label={ariaLabel}\n // Expose the variant so a parent ButtonsGroup can detect FILLED segments in CSS\n // (filled buttons have an opaque background that hides a border seam, so the group\n // paints their divider as an inset box-shadow instead — see buttons-group.tsx).\n data-variant={variant}\n className={cn(buttonVariants({ variant, size: resolvedSize }), isLabelless && '[&>svg]:opacity-75', className)}\n {...props}\n >\n {content}\n </Component>\n );\n\n if (tooltip) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent>{tooltip}</TooltipContent>\n </Tooltip>\n );\n }\n\n return button;\n },\n);\n\nButton.displayName = 'Button';\n"],"names":["React"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
const jsxRuntime = require('react/jsx-runtime');
|
|
4
|
-
const Button = require('./Button-
|
|
4
|
+
const Button = require('./Button-DA5XLUon.cjs');
|
|
5
5
|
const utils_cn = require('./cn-vA5sWo9W.cjs');
|
|
6
6
|
const lucideReact = require('lucide-react');
|
|
7
7
|
|
|
@@ -88,4 +88,4 @@ const Notice = Object.assign(NoticeRoot, {
|
|
|
88
88
|
});
|
|
89
89
|
|
|
90
90
|
exports.Notice = Notice;
|
|
91
|
-
//# sourceMappingURL=Notice-
|
|
91
|
+
//# sourceMappingURL=Notice-BoT3Qi4U.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Notice-
|
|
1
|
+
{"version":3,"file":"Notice-BoT3Qi4U.cjs","sources":["../src/ds/components/Notice/notice-button.tsx","../src/ds/components/Notice/notice-message.tsx","../src/ds/components/Notice/notice-root.tsx","../src/ds/components/Notice/Notice.tsx"],"sourcesContent":["import type { ButtonProps } from '../Button';\nimport { Button } from '../Button';\n\nexport function NoticeButton(props: ButtonProps) {\n return <Button size=\"sm\" variant=\"ghost\" {...props} />;\n}\n","import { cn } from '@/lib/utils';\n\nexport interface NoticeMessageProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport function NoticeMessage({ children, className }: NoticeMessageProps) {\n return <div className={cn('text-ui-md leading-ui-md', className)}>{children}</div>;\n}\n","import { FileTextIcon, InfoIcon, LightbulbIcon, OctagonAlertIcon, TriangleAlertIcon } from 'lucide-react';\nimport React from 'react';\nimport { cn } from '@/lib/utils';\n\nexport type NoticeVariant = 'warning' | 'destructive' | 'success' | 'info' | 'note';\n\nconst variantConfig: Record<NoticeVariant, { icon: React.ReactNode; classes: string }> = {\n success: {\n icon: <LightbulbIcon />,\n classes: 'bg-notice-success/20 border-notice-success/20 text-notice-success-fg',\n },\n destructive: {\n icon: <OctagonAlertIcon />,\n classes: 'bg-notice-destructive/20 border-notice-destructive/20 text-notice-destructive-fg',\n },\n warning: {\n icon: <TriangleAlertIcon />,\n classes: 'bg-notice-warning/20 border-notice-warning/20 text-notice-warning-fg',\n },\n info: {\n icon: <InfoIcon />,\n classes: 'bg-notice-info/20 border-notice-info/20 text-notice-info-fg',\n },\n note: {\n icon: <FileTextIcon />,\n classes: 'bg-notice-note border-border1 text-notice-note-fg',\n },\n};\n\nexport interface NoticeRootProps {\n variant: NoticeVariant;\n title?: React.ReactNode;\n icon?: React.ReactNode;\n action?: React.ReactNode;\n children?: React.ReactNode;\n className?: string;\n}\n\nexport function NoticeRoot({ variant, title, icon, action, children, className }: NoticeRootProps) {\n const { icon: defaultIcon, classes } = variantConfig[variant];\n const resolvedIcon = icon ?? defaultIcon;\n\n if (!title) {\n return (\n <div\n className={cn(\n '@container relative rounded-2xl border p-3 text-ui-md leading-ui-md',\n 'animate-in duration-200 fade-in-0 slide-in-from-top-2',\n classes,\n className,\n )}\n >\n <div className=\"flex flex-col gap-3 @md:flex-row @md:items-start @md:gap-2\">\n <div className=\"flex min-w-0 flex-1 items-start gap-2 [&>svg]:size-4\">\n <span className=\"flex h-[1lh] shrink-0 items-center [&>svg]:size-4\">{resolvedIcon}</span>\n {/* wrap-anywhere — messages carry URLs and tokens with no break opportunity */}\n {children && <div className=\"min-w-0 flex-1 wrap-anywhere\">{children}</div>}\n </div>\n {action && <div className=\"@md:-my-1 [&>button]:w-full @md:[&>button]:w-auto\">{action}</div>}\n </div>\n </div>\n );\n }\n\n return (\n <div\n className={cn(\n '@container relative flex flex-col gap-4 rounded-2xl border p-3',\n 'animate-in duration-200 fade-in-0 slide-in-from-top-2',\n classes,\n className,\n )}\n >\n <div className=\"flex h-4 min-w-0 items-center gap-2 [&>svg]:size-4\">\n {resolvedIcon}\n {/* truncate, not wrap — the row is 1rem tall, a wrapped title would spill out of it */}\n <span className=\"text-ui-sm truncate leading-none font-medium tracking-wide uppercase\">{title}</span>\n </div>\n {action && <div className=\"absolute top-2 right-2 hidden @md:block\">{action}</div>}\n {(children || action) && (\n <div className=\"flex min-w-0 flex-col gap-5 wrap-anywhere\">\n {children}\n {action && <div className=\"self-start @md:hidden\">{action}</div>}\n </div>\n )}\n </div>\n );\n}\n","import { NoticeButton } from './notice-button';\nimport { NoticeMessage } from './notice-message';\nimport { NoticeRoot } from './notice-root';\n\nexport { type NoticeVariant, type NoticeRootProps } from './notice-root';\nexport { type NoticeMessageProps } from './notice-message';\n\nexport const Notice = Object.assign(NoticeRoot, {\n Message: NoticeMessage,\n Button: NoticeButton,\n});\n"],"names":["Button","cn","LightbulbIcon","OctagonAlertIcon","TriangleAlertIcon","InfoIcon","FileTextIcon","jsx","jsxs"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
-
import { B as Button } from './Button-
|
|
2
|
+
import { B as Button } from './Button-vr_I4iME.js';
|
|
3
3
|
import { c as cn } from './cn-BakJzhuv.js';
|
|
4
4
|
import { FileTextIcon, InfoIcon, TriangleAlertIcon, OctagonAlertIcon, LightbulbIcon } from 'lucide-react';
|
|
5
5
|
|
|
@@ -86,4 +86,4 @@ const Notice = Object.assign(NoticeRoot, {
|
|
|
86
86
|
});
|
|
87
87
|
|
|
88
88
|
export { Notice as N };
|
|
89
|
-
//# sourceMappingURL=Notice-
|
|
89
|
+
//# sourceMappingURL=Notice-XR_HdGMF.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Notice-
|
|
1
|
+
{"version":3,"file":"Notice-XR_HdGMF.js","sources":["../src/ds/components/Notice/notice-button.tsx","../src/ds/components/Notice/notice-message.tsx","../src/ds/components/Notice/notice-root.tsx","../src/ds/components/Notice/Notice.tsx"],"sourcesContent":["import type { ButtonProps } from '../Button';\nimport { Button } from '../Button';\n\nexport function NoticeButton(props: ButtonProps) {\n return <Button size=\"sm\" variant=\"ghost\" {...props} />;\n}\n","import { cn } from '@/lib/utils';\n\nexport interface NoticeMessageProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport function NoticeMessage({ children, className }: NoticeMessageProps) {\n return <div className={cn('text-ui-md leading-ui-md', className)}>{children}</div>;\n}\n","import { FileTextIcon, InfoIcon, LightbulbIcon, OctagonAlertIcon, TriangleAlertIcon } from 'lucide-react';\nimport React from 'react';\nimport { cn } from '@/lib/utils';\n\nexport type NoticeVariant = 'warning' | 'destructive' | 'success' | 'info' | 'note';\n\nconst variantConfig: Record<NoticeVariant, { icon: React.ReactNode; classes: string }> = {\n success: {\n icon: <LightbulbIcon />,\n classes: 'bg-notice-success/20 border-notice-success/20 text-notice-success-fg',\n },\n destructive: {\n icon: <OctagonAlertIcon />,\n classes: 'bg-notice-destructive/20 border-notice-destructive/20 text-notice-destructive-fg',\n },\n warning: {\n icon: <TriangleAlertIcon />,\n classes: 'bg-notice-warning/20 border-notice-warning/20 text-notice-warning-fg',\n },\n info: {\n icon: <InfoIcon />,\n classes: 'bg-notice-info/20 border-notice-info/20 text-notice-info-fg',\n },\n note: {\n icon: <FileTextIcon />,\n classes: 'bg-notice-note border-border1 text-notice-note-fg',\n },\n};\n\nexport interface NoticeRootProps {\n variant: NoticeVariant;\n title?: React.ReactNode;\n icon?: React.ReactNode;\n action?: React.ReactNode;\n children?: React.ReactNode;\n className?: string;\n}\n\nexport function NoticeRoot({ variant, title, icon, action, children, className }: NoticeRootProps) {\n const { icon: defaultIcon, classes } = variantConfig[variant];\n const resolvedIcon = icon ?? defaultIcon;\n\n if (!title) {\n return (\n <div\n className={cn(\n '@container relative rounded-2xl border p-3 text-ui-md leading-ui-md',\n 'animate-in duration-200 fade-in-0 slide-in-from-top-2',\n classes,\n className,\n )}\n >\n <div className=\"flex flex-col gap-3 @md:flex-row @md:items-start @md:gap-2\">\n <div className=\"flex min-w-0 flex-1 items-start gap-2 [&>svg]:size-4\">\n <span className=\"flex h-[1lh] shrink-0 items-center [&>svg]:size-4\">{resolvedIcon}</span>\n {/* wrap-anywhere — messages carry URLs and tokens with no break opportunity */}\n {children && <div className=\"min-w-0 flex-1 wrap-anywhere\">{children}</div>}\n </div>\n {action && <div className=\"@md:-my-1 [&>button]:w-full @md:[&>button]:w-auto\">{action}</div>}\n </div>\n </div>\n );\n }\n\n return (\n <div\n className={cn(\n '@container relative flex flex-col gap-4 rounded-2xl border p-3',\n 'animate-in duration-200 fade-in-0 slide-in-from-top-2',\n classes,\n className,\n )}\n >\n <div className=\"flex h-4 min-w-0 items-center gap-2 [&>svg]:size-4\">\n {resolvedIcon}\n {/* truncate, not wrap — the row is 1rem tall, a wrapped title would spill out of it */}\n <span className=\"text-ui-sm truncate leading-none font-medium tracking-wide uppercase\">{title}</span>\n </div>\n {action && <div className=\"absolute top-2 right-2 hidden @md:block\">{action}</div>}\n {(children || action) && (\n <div className=\"flex min-w-0 flex-col gap-5 wrap-anywhere\">\n {children}\n {action && <div className=\"self-start @md:hidden\">{action}</div>}\n </div>\n )}\n </div>\n );\n}\n","import { NoticeButton } from './notice-button';\nimport { NoticeMessage } from './notice-message';\nimport { NoticeRoot } from './notice-root';\n\nexport { type NoticeVariant, type NoticeRootProps } from './notice-root';\nexport { type NoticeMessageProps } from './notice-message';\n\nexport const Notice = Object.assign(NoticeRoot, {\n Message: NoticeMessage,\n Button: NoticeButton,\n});\n"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ const react = require('@mastra/react');
|
|
|
5
5
|
const lucideReact = require('lucide-react');
|
|
6
6
|
const React = require('react');
|
|
7
7
|
const icons_Icon = require('./icons/Icon.cjs.js');
|
|
8
|
-
const Button = require('./Button-
|
|
8
|
+
const Button = require('./Button-DA5XLUon.cjs');
|
|
9
9
|
const EmptyState = require('./EmptyState-sff7IGrD.cjs');
|
|
10
10
|
|
|
11
11
|
function SessionExpired({ title, description, className }) {
|
|
@@ -44,4 +44,4 @@ function SessionExpired({ title, description, className }) {
|
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
exports.SessionExpired = SessionExpired;
|
|
47
|
-
//# sourceMappingURL=SessionExpired-
|
|
47
|
+
//# sourceMappingURL=SessionExpired-h9yERVJz.cjs.map
|