@mastra/playground-ui 56.0.0-alpha.11 → 56.0.0-alpha.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -16
- package/dist/{Badge-B9oOuqif.cjs → Badge-BEeYtjmv.cjs} +10 -10
- package/dist/Badge-BEeYtjmv.cjs.map +1 -0
- package/dist/{Badge-apYorT0C.js → Badge-TD55_qZJ.js} +10 -10
- package/dist/Badge-TD55_qZJ.js.map +1 -0
- package/dist/{Button-CSmXdQ09.cjs → Button-DVIyS81j.cjs} +32 -40
- package/dist/Button-DVIyS81j.cjs.map +1 -0
- package/dist/{Button-CtuSHFtc.js → Button-agleFztW.js} +33 -41
- package/dist/Button-agleFztW.js.map +1 -0
- package/dist/{Card-CGCdI-3T.cjs → Card-D0kFp9j9.cjs} +18 -40
- package/dist/Card-D0kFp9j9.cjs.map +1 -0
- package/dist/{Card-BAAZQk25.js → Card-DEvGFj-Z.js} +18 -40
- package/dist/Card-DEvGFj-Z.js.map +1 -0
- package/dist/CommandPalette.css +9 -10
- package/dist/{EmptyState-BATNa-KF.cjs → EmptyState-CdRjFB06.cjs} +4 -4
- package/dist/EmptyState-CdRjFB06.cjs.map +1 -0
- package/dist/{EmptyState-DDlpBodA.js → EmptyState-UWXhBp5U.js} +4 -4
- package/dist/EmptyState-UWXhBp5U.js.map +1 -0
- package/dist/{ErrorState-B8vYPznf.cjs → ErrorState-B3uTRAEd.cjs} +3 -3
- package/dist/ErrorState-B3uTRAEd.cjs.map +1 -0
- package/dist/{ErrorState-B0Xrya2q.js → ErrorState-DqRx8Dw_.js} +3 -3
- package/dist/ErrorState-DqRx8Dw_.js.map +1 -0
- package/dist/{Notice-BHq_w0In.js → Notice-BF_RLqRI.js} +7 -7
- package/dist/Notice-BF_RLqRI.js.map +1 -0
- package/dist/{Notice-CafEiN9-.cjs → Notice-DUb2QQqy.cjs} +7 -7
- package/dist/Notice-DUb2QQqy.cjs.map +1 -0
- package/dist/{PermissionDenied-DZuE_x-W.js → PermissionDenied-B6TSGolC.js} +2 -2
- package/dist/{PermissionDenied-DZuE_x-W.js.map → PermissionDenied-B6TSGolC.js.map} +1 -1
- package/dist/{PermissionDenied-DVOCySnP.cjs → PermissionDenied-Dz5qXpQj.cjs} +2 -2
- package/dist/{PermissionDenied-DVOCySnP.cjs.map → PermissionDenied-Dz5qXpQj.cjs.map} +1 -1
- package/dist/{SessionExpired-IADGiLju.cjs → SessionExpired-B78l_tOk.cjs} +3 -3
- package/dist/{SessionExpired-IADGiLju.cjs.map → SessionExpired-B78l_tOk.cjs.map} +1 -1
- package/dist/{SessionExpired-sGC5jmPm.js → SessionExpired-DA_8v9dG.js} +3 -3
- package/dist/{SessionExpired-sGC5jmPm.js.map → SessionExpired-DA_8v9dG.js.map} +1 -1
- package/dist/Txt-B4-2nLaI.cjs +38 -0
- package/dist/Txt-B4-2nLaI.cjs.map +1 -0
- package/dist/Txt-DTh3Pa_a.js +36 -0
- package/dist/Txt-DTh3Pa_a.js.map +1 -0
- package/dist/{activity-zhaJLxDI.js → activity-B8TfxRNU.js} +2 -2
- package/dist/{activity-zhaJLxDI.js.map → activity-B8TfxRNU.js.map} +1 -1
- package/dist/{activity-C0X6Awhz.cjs → activity-BYMLNb0G.cjs} +2 -2
- package/dist/{activity-C0X6Awhz.cjs.map → activity-BYMLNb0G.cjs.map} +1 -1
- package/dist/activity.css +1 -1
- package/dist/{arrival-DJoAYW8H.cjs → arrival-BWQZUZFQ.cjs} +2 -2
- package/dist/{arrival-DJoAYW8H.cjs.map → arrival-BWQZUZFQ.cjs.map} +1 -1
- package/dist/{arrival-DZ_vZuza.js → arrival-RmSek4Iq.js} +2 -2
- package/dist/{arrival-DZ_vZuza.js.map → arrival-RmSek4Iq.js.map} +1 -1
- package/dist/{ask-user-M4Iso-dV.cjs → ask-user-C5diGv0c.cjs} +13 -13
- package/dist/ask-user-C5diGv0c.cjs.map +1 -0
- package/dist/{ask-user-B-bQks8m.js → ask-user-ee6b86WU.js} +13 -13
- package/dist/ask-user-ee6b86WU.js.map +1 -0
- package/dist/buttons-group-BiLEV_Ak.cjs +101 -0
- package/dist/buttons-group-BiLEV_Ak.cjs.map +1 -0
- package/dist/buttons-group-CaA7KAWf.js +78 -0
- package/dist/buttons-group-CaA7KAWf.js.map +1 -0
- package/dist/buttons-group.css +135 -0
- package/dist/chart-tooltip-84fl_3Wc.js +17 -0
- package/dist/chart-tooltip-84fl_3Wc.js.map +1 -0
- package/dist/chart-tooltip-DX6vs_Tc.cjs +19 -0
- package/dist/chart-tooltip-DX6vs_Tc.cjs.map +1 -0
- package/dist/{chat-notification-D7J8goLv.js → chat-notification-DKNF9o7j.js} +13 -13
- package/dist/chat-notification-DKNF9o7j.js.map +1 -0
- package/dist/{chat-notification-CkJAwiut.cjs → chat-notification-No7KdZVI.cjs} +13 -13
- package/dist/chat-notification-No7KdZVI.cjs.map +1 -0
- package/dist/{chat-signal-CvrzAwZU.cjs → chat-signal-B9ZJxqiZ.cjs} +10 -10
- package/dist/chat-signal-B9ZJxqiZ.cjs.map +1 -0
- package/dist/{chat-signal-zDrInrSG.js → chat-signal-B_O242yq.js} +10 -10
- package/dist/chat-signal-B_O242yq.js.map +1 -0
- package/dist/{checkbox-CJHHWM9_.cjs → checkbox-CI8JtZKS.cjs} +8 -18
- package/dist/checkbox-CI8JtZKS.cjs.map +1 -0
- package/dist/{checkbox-KmGlavo7.js → checkbox-CQedzgsi.js} +7 -17
- package/dist/checkbox-CQedzgsi.js.map +1 -0
- package/dist/{cn-BmQQRqRs.js → cn-65Adrsfj.js} +12 -17
- package/dist/{cn-BmQQRqRs.js.map → cn-65Adrsfj.js.map} +1 -1
- package/dist/{cn-DqcFobIY.cjs → cn-DG0X1KEP.cjs} +15 -20
- package/dist/{cn-DqcFobIY.cjs.map → cn-DG0X1KEP.cjs.map} +1 -1
- package/dist/{code-block-BxYbxSJA.js → code-block-DbgRM3Ro.js} +13 -13
- package/dist/code-block-DbgRM3Ro.js.map +1 -0
- package/dist/{code-block-CV2DTAQC.cjs → code-block-l_rQQ-Mu.cjs} +13 -13
- package/dist/code-block-l_rQQ-Mu.cjs.map +1 -0
- package/dist/{code-diff-CRzg0c6L.js → code-diff-C5uY-3Hz.js} +17 -14
- package/dist/code-diff-C5uY-3Hz.js.map +1 -0
- package/dist/{code-diff-pMNj9cR8.cjs → code-diff-DBtbPe9D.cjs} +17 -14
- package/dist/code-diff-DBtbPe9D.cjs.map +1 -0
- package/dist/{code-editor-DpiAzxSV.cjs → code-editor-BHpoJo39.cjs} +51 -51
- package/dist/code-editor-BHpoJo39.cjs.map +1 -0
- package/dist/{code-editor-C6UdXg6f.js → code-editor-CeutyCc8.js} +51 -51
- package/dist/code-editor-CeutyCc8.js.map +1 -0
- package/dist/{collapsible-LYtqJXDJ.js → collapsible-B2uUy8w5.js} +2 -2
- package/dist/{collapsible-LYtqJXDJ.js.map → collapsible-B2uUy8w5.js.map} +1 -1
- package/dist/{collapsible-Ca7Zl4uS.cjs → collapsible-BvrI6XnN.cjs} +2 -2
- package/dist/{collapsible-Ca7Zl4uS.cjs.map → collapsible-BvrI6XnN.cjs.map} +1 -1
- package/dist/{combobox-CIITIsRR.cjs → combobox-CEgIDTDA.cjs} +44 -48
- package/dist/{combobox-CIITIsRR.cjs.map → combobox-CEgIDTDA.cjs.map} +1 -1
- package/dist/{combobox-DJtldKXc.js → combobox-DnodbNa3.js} +44 -48
- package/dist/{combobox-DJtldKXc.js.map → combobox-DnodbNa3.js.map} +1 -1
- package/dist/{combobox-styles-DtJtHdDL.js → combobox-styles-Bls2RyUc.js} +9 -9
- package/dist/combobox-styles-Bls2RyUc.js.map +1 -0
- package/dist/{combobox-styles-BqX8XbIZ.cjs → combobox-styles-Dbc8PEdI.cjs} +9 -9
- package/dist/combobox-styles-Dbc8PEdI.cjs.map +1 -0
- package/dist/{command-ClU0BWYV.js → command-BLMEEXd9.js} +14 -20
- package/dist/command-BLMEEXd9.js.map +1 -0
- package/dist/{command-CG-xBOWo.cjs → command-Dy4jkRmw.cjs} +14 -20
- package/dist/command-Dy4jkRmw.cjs.map +1 -0
- package/dist/components/Activity.cjs.js +1 -1
- package/dist/components/Activity.es.js +1 -1
- package/dist/components/AlertDialog.cjs.js +9 -7
- package/dist/components/AlertDialog.cjs.js.map +1 -1
- package/dist/components/AlertDialog.es.js +9 -7
- package/dist/components/AlertDialog.es.js.map +1 -1
- package/dist/components/Arrival.cjs.js +1 -1
- package/dist/components/Arrival.es.js +1 -1
- package/dist/components/Avatar.cjs.js +9 -8
- package/dist/components/Avatar.cjs.js.map +1 -1
- package/dist/components/Avatar.es.js +10 -9
- package/dist/components/Avatar.es.js.map +1 -1
- package/dist/components/Badge.cjs.js +1 -1
- package/dist/components/Badge.es.js +1 -1
- package/dist/components/BrandLoader.cjs.js +1 -1
- package/dist/components/BrandLoader.es.js +1 -1
- package/dist/components/Breadcrumb.cjs.js +8 -7
- package/dist/components/Breadcrumb.cjs.js.map +1 -1
- package/dist/components/Breadcrumb.es.js +9 -8
- package/dist/components/Breadcrumb.es.js.map +1 -1
- package/dist/components/Button.cjs.js +2 -2
- package/dist/components/Button.es.js +3 -3
- package/dist/components/ButtonsGroup.cjs.js +1 -2
- package/dist/components/ButtonsGroup.cjs.js.map +1 -1
- package/dist/components/ButtonsGroup.es.js +1 -1
- package/dist/components/Card.cjs.js +1 -1
- package/dist/components/Card.es.js +1 -1
- package/dist/components/ChartTooltip.cjs.js +10 -0
- package/dist/components/ChartTooltip.cjs.js.map +1 -0
- package/dist/components/ChartTooltip.d.ts +2 -0
- package/dist/components/ChartTooltip.es.js +2 -0
- package/dist/components/ChartTooltip.es.js.map +1 -0
- package/dist/components/ChatShell.cjs.js +4 -4
- package/dist/components/ChatShell.cjs.js.map +1 -1
- package/dist/components/ChatShell.es.js +4 -4
- package/dist/components/ChatShell.es.js.map +1 -1
- package/dist/components/Checkbox.cjs.js +1 -1
- package/dist/components/Checkbox.es.js +1 -1
- package/dist/components/ClampedText.cjs.js +4 -4
- package/dist/components/ClampedText.cjs.js.map +1 -1
- package/dist/components/ClampedText.es.js +4 -4
- package/dist/components/ClampedText.es.js.map +1 -1
- package/dist/components/CodeBlock.cjs.js +1 -1
- package/dist/components/CodeBlock.es.js +1 -1
- package/dist/components/CodeDiff.cjs.js +1 -1
- package/dist/components/CodeDiff.es.js +1 -1
- package/dist/components/CodeEditor.cjs.js +1 -1
- package/dist/components/CodeEditor.es.js +1 -1
- package/dist/components/Collapsible.cjs.js +1 -1
- package/dist/components/Collapsible.es.js +1 -1
- package/dist/components/Columns.cjs.js +4 -4
- package/dist/components/Columns.cjs.js.map +1 -1
- package/dist/components/Columns.es.js +4 -4
- package/dist/components/Columns.es.js.map +1 -1
- package/dist/components/Combobox.cjs.js +2 -2
- package/dist/components/Combobox.es.js +2 -2
- package/dist/components/Command.cjs.js +1 -1
- package/dist/components/Command.es.js +1 -1
- package/dist/components/CommandPalette.cjs.js +50 -23
- package/dist/components/CommandPalette.cjs.js.map +1 -1
- package/dist/components/CommandPalette.es.js +50 -23
- package/dist/components/CommandPalette.es.js.map +1 -1
- package/dist/components/Comment.cjs.js +31 -35
- package/dist/components/Comment.cjs.js.map +1 -1
- package/dist/components/Comment.es.js +31 -35
- package/dist/components/Comment.es.js.map +1 -1
- package/dist/components/Composer.cjs.js +8 -8
- package/dist/components/Composer.cjs.js.map +1 -1
- package/dist/components/Composer.es.js +8 -8
- package/dist/components/Composer.es.js.map +1 -1
- package/dist/components/ContextMenu.cjs.js +2 -2
- package/dist/components/ContextMenu.cjs.js.map +1 -1
- package/dist/components/ContextMenu.es.js +2 -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 +39 -29
- package/dist/components/DataDetailsPanel.cjs.js.map +1 -1
- package/dist/components/DataDetailsPanel.es.js +39 -29
- package/dist/components/DataDetailsPanel.es.js.map +1 -1
- package/dist/components/DataFilter.cjs.js +5 -5
- package/dist/components/DataFilter.cjs.js.map +1 -1
- package/dist/components/DataFilter.es.js +5 -5
- package/dist/components/DataFilter.es.js.map +1 -1
- package/dist/components/DataKeysAndValues.cjs.js +1 -1
- package/dist/components/DataKeysAndValues.es.js +1 -1
- package/dist/components/DataList.cjs.js +11 -10
- package/dist/components/DataList.cjs.js.map +1 -1
- package/dist/components/DataList.es.js +11 -10
- 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 +25 -22
- package/dist/components/DateRangeTimeline.cjs.js.map +1 -1
- package/dist/components/DateRangeTimeline.es.js +25 -22
- package/dist/components/DateRangeTimeline.es.js.map +1 -1
- package/dist/components/DateTimePicker.cjs.js +7 -7
- package/dist/components/DateTimePicker.cjs.js.map +1 -1
- package/dist/components/DateTimePicker.es.js +7 -7
- package/dist/components/DateTimePicker.es.js.map +1 -1
- package/dist/components/DateTimeRangePicker.cjs.js +1 -1
- package/dist/components/DateTimeRangePicker.es.js +1 -1
- package/dist/components/Dialog.cjs.js +4 -4
- package/dist/components/Dialog.cjs.js.map +1 -1
- package/dist/components/Dialog.es.js +5 -5
- package/dist/components/Dialog.es.js.map +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/EmptyState.cjs.js +1 -1
- package/dist/components/EmptyState.es.js +1 -1
- package/dist/components/Entity.cjs.js +8 -6
- package/dist/components/Entity.cjs.js.map +1 -1
- package/dist/components/Entity.es.js +8 -6
- package/dist/components/Entity.es.js.map +1 -1
- package/dist/components/EntityHeader.cjs.js +3 -3
- package/dist/components/EntityHeader.cjs.js.map +1 -1
- package/dist/components/EntityHeader.es.js +3 -3
- package/dist/components/EntityHeader.es.js.map +1 -1
- package/dist/components/Entry.cjs.js +2 -2
- package/dist/components/Entry.cjs.js.map +1 -1
- package/dist/components/Entry.es.js +2 -2
- package/dist/components/Entry.es.js.map +1 -1
- package/dist/components/EnvironmentVariablesEditor.cjs.js +16 -16
- package/dist/components/EnvironmentVariablesEditor.cjs.js.map +1 -1
- package/dist/components/EnvironmentVariablesEditor.es.js +16 -16
- package/dist/components/EnvironmentVariablesEditor.es.js.map +1 -1
- package/dist/components/ErrorBoundary.cjs.js +10 -9
- package/dist/components/ErrorBoundary.cjs.js.map +1 -1
- package/dist/components/ErrorBoundary.es.js +10 -9
- package/dist/components/ErrorBoundary.es.js.map +1 -1
- package/dist/components/ErrorState.cjs.js +1 -1
- package/dist/components/ErrorState.es.js +1 -1
- package/dist/components/FilterBar.cjs.js +15 -15
- package/dist/components/FilterBar.cjs.js.map +1 -1
- package/dist/components/FilterBar.es.js +16 -16
- package/dist/components/FilterBar.es.js.map +1 -1
- package/dist/components/FormFieldBlocks.cjs.js +6 -6
- package/dist/components/FormFieldBlocks.es.js +6 -6
- package/dist/components/Header.cjs.js +4 -4
- package/dist/components/Header.cjs.js.map +1 -1
- package/dist/components/Header.es.js +4 -4
- package/dist/components/Header.es.js.map +1 -1
- package/dist/components/HorizontalBars.cjs.js +1 -1
- package/dist/components/HorizontalBars.es.js +1 -1
- package/dist/components/HoverCard.cjs.js +1 -1
- package/dist/components/HoverCard.es.js +1 -1
- package/dist/components/Input.cjs.js +1 -1
- package/dist/components/Input.es.js +1 -1
- package/dist/components/InputGroup.cjs.js +1 -1
- package/dist/components/InputGroup.es.js +1 -1
- package/dist/components/IntegrationDialog.cjs.js +8 -8
- package/dist/components/IntegrationDialog.cjs.js.map +1 -1
- package/dist/components/IntegrationDialog.es.js +8 -8
- package/dist/components/IntegrationDialog.es.js.map +1 -1
- package/dist/components/ItemList.cjs.js +24 -21
- package/dist/components/ItemList.cjs.js.map +1 -1
- package/dist/components/ItemList.es.js +24 -21
- package/dist/components/ItemList.es.js.map +1 -1
- package/dist/components/JSONSchemaForm.cjs.js +14 -14
- package/dist/components/JSONSchemaForm.cjs.js.map +1 -1
- package/dist/components/JSONSchemaForm.es.js +14 -14
- package/dist/components/JSONSchemaForm.es.js.map +1 -1
- package/dist/components/Kbd.cjs.js +1 -1
- package/dist/components/Kbd.es.js +1 -1
- package/dist/components/KeyValueList.cjs.js +8 -8
- package/dist/components/KeyValueList.cjs.js.map +1 -1
- package/dist/components/KeyValueList.es.js +8 -8
- package/dist/components/KeyValueList.es.js.map +1 -1
- package/dist/components/Label.cjs.js +1 -1
- package/dist/components/Label.es.js +1 -1
- package/dist/components/ListSearch.cjs.js +1 -1
- package/dist/components/ListSearch.es.js +1 -1
- package/dist/components/Logo.cjs.js +1 -1
- package/dist/components/Logo.es.js +1 -1
- package/dist/components/LogsDataList.cjs.js +2 -2
- package/dist/components/LogsDataList.es.js +2 -2
- package/dist/components/MainContent.cjs.js +1 -1
- package/dist/components/MainContent.es.js +1 -1
- package/dist/components/MainHeader.cjs.js +13 -14
- package/dist/components/MainHeader.cjs.js.map +1 -1
- package/dist/components/MainHeader.es.js +13 -14
- package/dist/components/MainHeader.es.js.map +1 -1
- package/dist/components/MainSidebar.cjs.js +11 -125
- package/dist/components/MainSidebar.cjs.js.map +1 -1
- package/dist/components/MainSidebar.es.js +1 -120
- package/dist/components/MainSidebar.es.js.map +1 -1
- package/dist/components/MarkdownRenderer.cjs.js +1 -1
- package/dist/components/MarkdownRenderer.es.js +1 -1
- package/dist/components/Message.cjs.js +3 -3
- package/dist/components/Message.cjs.js.map +1 -1
- package/dist/components/Message.es.js +4 -4
- package/dist/components/Message.es.js.map +1 -1
- package/dist/components/MessageScroller.cjs.js +1 -1
- package/dist/components/MessageScroller.es.js +1 -1
- package/dist/components/MetricsCard.cjs.js +1 -1
- package/dist/components/MetricsCard.es.js +1 -1
- package/dist/components/MetricsFlexGrid.cjs.js +1 -1
- package/dist/components/MetricsFlexGrid.es.js +1 -1
- package/dist/components/MetricsKpiCard.cjs.js +1 -1
- package/dist/components/MetricsKpiCard.es.js +1 -1
- package/dist/components/MetricsLineChart.cjs.js +1 -1
- package/dist/components/MetricsLineChart.es.js +1 -1
- package/dist/components/Notice.cjs.js +1 -1
- package/dist/components/Notice.es.js +1 -1
- package/dist/components/PageHeader.cjs.js +1 -1
- package/dist/components/PageHeader.es.js +1 -1
- package/dist/components/PageLayout.cjs.js +2 -2
- package/dist/components/PageLayout.es.js +2 -2
- package/dist/components/PendingIndicator.cjs.js +2 -2
- package/dist/components/PendingIndicator.cjs.js.map +1 -1
- package/dist/components/PendingIndicator.es.js +2 -2
- package/dist/components/PendingIndicator.es.js.map +1 -1
- package/dist/components/PermissionDenied.cjs.js +1 -1
- package/dist/components/PermissionDenied.es.js +1 -1
- package/dist/components/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 +10 -8
- package/dist/components/PropertyFilter.cjs.js.map +1 -1
- package/dist/components/PropertyFilter.es.js +11 -9
- package/dist/components/PropertyFilter.es.js.map +1 -1
- package/dist/components/PullRequestIcon.cjs.js +2 -2
- package/dist/components/PullRequestIcon.cjs.js.map +1 -1
- package/dist/components/PullRequestIcon.es.js +2 -2
- package/dist/components/PullRequestIcon.es.js.map +1 -1
- package/dist/components/RadioGroup.cjs.js +3 -18
- package/dist/components/RadioGroup.cjs.js.map +1 -1
- package/dist/components/RadioGroup.es.js +3 -18
- package/dist/components/RadioGroup.es.js.map +1 -1
- package/dist/components/RuleBuilder.cjs.js +28 -22
- package/dist/components/RuleBuilder.cjs.js.map +1 -1
- package/dist/components/RuleBuilder.es.js +28 -22
- package/dist/components/RuleBuilder.es.js.map +1 -1
- package/dist/components/SankeyChart.cjs.js +1 -1
- package/dist/components/SankeyChart.es.js +1 -1
- package/dist/components/ScatterPlotChart.cjs.js +21 -14
- package/dist/components/ScatterPlotChart.cjs.js.map +1 -1
- package/dist/components/ScatterPlotChart.es.js +19 -12
- package/dist/components/ScatterPlotChart.es.js.map +1 -1
- package/dist/components/ScrollArea.cjs.js +1 -1
- package/dist/components/ScrollArea.es.js +1 -1
- package/dist/components/Section.cjs.js +1 -1
- package/dist/components/Section.es.js +1 -1
- package/dist/components/SectionCard.cjs.js +5 -16
- package/dist/components/SectionCard.cjs.js.map +1 -1
- package/dist/components/SectionCard.es.js +5 -16
- package/dist/components/SectionCard.es.js.map +1 -1
- package/dist/components/Sections.cjs.js +1 -1
- package/dist/components/Sections.es.js +1 -1
- package/dist/components/Select.cjs.js +1 -1
- package/dist/components/Select.es.js +1 -1
- package/dist/components/SessionExpired.cjs.js +1 -1
- package/dist/components/SessionExpired.es.js +1 -1
- package/dist/components/SettingsLayout.cjs.js +1 -1
- package/dist/components/SettingsLayout.es.js +1 -1
- package/dist/components/SettingsRow.cjs.js +1 -1
- package/dist/components/SettingsRow.es.js +1 -1
- package/dist/components/Shimmer.cjs.js +1 -1
- package/dist/components/Shimmer.es.js +1 -1
- package/dist/components/SideDialog.cjs.js +30 -26
- package/dist/components/SideDialog.cjs.js.map +1 -1
- package/dist/components/SideDialog.es.js +30 -26
- package/dist/components/SideDialog.es.js.map +1 -1
- package/dist/components/Skeleton.cjs.js +1 -1
- package/dist/components/Skeleton.es.js +1 -1
- package/dist/components/Slider.cjs.js +1 -1
- package/dist/components/Slider.es.js +1 -1
- package/dist/components/Spinner.cjs.js +1 -1
- package/dist/components/Spinner.es.js +1 -1
- package/dist/components/StatusIndicators.cjs.js +9 -9
- package/dist/components/StatusIndicators.cjs.js.map +1 -1
- package/dist/components/StatusIndicators.es.js +9 -9
- package/dist/components/StatusIndicators.es.js.map +1 -1
- package/dist/components/Steps.cjs.js +14 -16
- package/dist/components/Steps.cjs.js.map +1 -1
- package/dist/components/Steps.es.js +14 -16
- package/dist/components/Steps.es.js.map +1 -1
- package/dist/components/Switch.cjs.js +1 -1
- package/dist/components/Switch.es.js +1 -1
- package/dist/components/Table.cjs.js +13 -21
- package/dist/components/Table.cjs.js.map +1 -1
- package/dist/components/Table.es.js +13 -21
- package/dist/components/Table.es.js.map +1 -1
- package/dist/components/Tabs.cjs.js +3 -3
- package/dist/components/Tabs.es.js +3 -3
- package/dist/components/Text.cjs.js +1 -1
- package/dist/components/Text.es.js +1 -1
- package/dist/components/Textarea.cjs.js +1 -1
- package/dist/components/Textarea.es.js +1 -1
- package/dist/components/ThemeToggle.cjs.js +8 -6
- package/dist/components/ThemeToggle.cjs.js.map +1 -1
- package/dist/components/ThemeToggle.es.js +8 -6
- package/dist/components/ThemeToggle.es.js.map +1 -1
- package/dist/components/ThreadList.cjs.js +8 -7
- package/dist/components/ThreadList.cjs.js.map +1 -1
- package/dist/components/ThreadList.es.js +8 -7
- package/dist/components/ThreadList.es.js.map +1 -1
- package/dist/components/ThreadRail.cjs.js +1 -1
- package/dist/components/ThreadRail.es.js +1 -1
- package/dist/components/Toaster.cjs.js +1 -1
- package/dist/components/Toaster.es.js +1 -1
- package/dist/components/TokenBudget.cjs.js +9 -9
- package/dist/components/TokenBudget.cjs.js.map +1 -1
- package/dist/components/TokenBudget.es.js +9 -9
- package/dist/components/TokenBudget.es.js.map +1 -1
- package/dist/components/Tooltip.cjs.js +1 -1
- package/dist/components/Tooltip.es.js +1 -1
- package/dist/components/Tree.cjs.js +9 -9
- package/dist/components/Tree.cjs.js.map +1 -1
- package/dist/components/Tree.es.js +9 -9
- package/dist/components/Tree.es.js.map +1 -1
- package/dist/components/Truncate.cjs.js +4 -4
- package/dist/components/Truncate.es.js +4 -4
- package/dist/components/Txt.cjs.js +1 -1
- package/dist/components/Txt.es.js +1 -1
- package/dist/components/Workflow.cjs.js +85 -69
- package/dist/components/Workflow.cjs.js.map +1 -1
- package/dist/components/Workflow.es.js +85 -69
- package/dist/components/Workflow.es.js.map +1 -1
- package/dist/components/ai/ask-user.cjs.js +1 -1
- package/dist/components/ai/ask-user.es.js +1 -1
- package/dist/components/ai/chat-event.cjs.js +9 -9
- package/dist/components/ai/chat-event.cjs.js.map +1 -1
- package/dist/components/ai/chat-event.es.js +10 -10
- package/dist/components/ai/chat-event.es.js.map +1 -1
- package/dist/components/ai/plan.cjs.js +15 -14
- package/dist/components/ai/plan.cjs.js.map +1 -1
- package/dist/components/ai/plan.es.js +15 -14
- package/dist/components/ai/plan.es.js.map +1 -1
- package/dist/components/ai/task-list.cjs.js +11 -10
- package/dist/components/ai/task-list.cjs.js.map +1 -1
- package/dist/components/ai/task-list.es.js +11 -10
- package/dist/components/ai/task-list.es.js.map +1 -1
- package/dist/components/ai/tool-approval.cjs.js +1 -1
- package/dist/components/ai/tool-approval.es.js +1 -1
- package/dist/components/ai/tool-call.cjs.js +15 -15
- package/dist/components/ai/tool-call.cjs.js.map +1 -1
- package/dist/components/ai/tool-call.es.js +16 -16
- package/dist/components/ai/tool-call.es.js.map +1 -1
- package/dist/components/fluid-hover-highlight.cjs.js +1 -1
- package/dist/components/fluid-hover-highlight.es.js +1 -1
- package/dist/{composer-ColBQeZQ.cjs → composer-BUoRnMDd.cjs} +5 -5
- package/dist/composer-BUoRnMDd.cjs.map +1 -0
- package/dist/{composer-DNFPD4wR.js → composer-CEL1glw7.js} +5 -5
- package/dist/composer-CEL1glw7.js.map +1 -0
- package/dist/composer.css +6 -6
- package/dist/{copy-button-8qsRUApf.js → copy-button-BxNWVtnz.js} +2 -2
- package/dist/{copy-button-8qsRUApf.js.map → copy-button-BxNWVtnz.js.map} +1 -1
- package/dist/{copy-button-CLHQia-u.cjs → copy-button-su26CWWS.cjs} +2 -2
- package/dist/{copy-button-CLHQia-u.cjs.map → copy-button-su26CWWS.cjs.map} +1 -1
- package/dist/{data-code-section-DGAvbKcL.cjs → data-code-section-C79eJrNt.cjs} +45 -26
- package/dist/data-code-section-C79eJrNt.cjs.map +1 -0
- package/dist/{data-code-section-DgiGQ4bu.js → data-code-section-x6I6mFsV.js} +45 -26
- package/dist/data-code-section-x6I6mFsV.js.map +1 -0
- package/dist/{data-keys-and-values-RhYgnv14.cjs → data-keys-and-values-4pYpSbqS.cjs} +10 -8
- package/dist/data-keys-and-values-4pYpSbqS.cjs.map +1 -0
- package/dist/{data-keys-and-values-Bj-Ai6IU.js → data-keys-and-values-j0NVKPOl.js} +10 -8
- package/dist/data-keys-and-values-j0NVKPOl.js.map +1 -0
- package/dist/{data-list-CcPJ3wcC.js → data-list-BE4apku9.js} +11 -69
- package/dist/data-list-BE4apku9.js.map +1 -0
- package/dist/{data-list-BpYV-2Bj.cjs → data-list-BXCisJ9F.cjs} +11 -69
- package/dist/data-list-BXCisJ9F.cjs.map +1 -0
- package/dist/{data-list-skeleton-D0iW1xFo.js → data-list-skeleton-B9EqADoL.js} +3 -3
- package/dist/{data-list-skeleton-D0iW1xFo.js.map → data-list-skeleton-B9EqADoL.js.map} +1 -1
- package/dist/{data-list-skeleton-DnTMoMyR.cjs → data-list-skeleton-E0K7lsAD.cjs} +3 -3
- package/dist/{data-list-skeleton-DnTMoMyR.cjs.map → data-list-skeleton-E0K7lsAD.cjs.map} +1 -1
- package/dist/{data-list-spacer-Ckmvj2AQ.js → data-list-spacer-Cgj-yf8o.js} +66 -8
- package/dist/data-list-spacer-Cgj-yf8o.js.map +1 -0
- package/dist/{data-list-spacer-DkhJEYvX.cjs → data-list-spacer-ChBSgrnx.cjs} +65 -6
- package/dist/data-list-spacer-ChBSgrnx.cjs.map +1 -0
- package/dist/{data-list-top-Bjn3dbrS.cjs → data-list-top-7ORSYWkO.cjs} +31 -30
- package/dist/data-list-top-7ORSYWkO.cjs.map +1 -0
- package/dist/{data-list-top-DSxMTI-3.js → data-list-top-Blq8TZiA.js} +32 -31
- package/dist/data-list-top-Blq8TZiA.js.map +1 -0
- package/dist/{data-panel-D2A2fowo.js → data-panel-CO2ri-7M.js} +20 -19
- package/dist/data-panel-CO2ri-7M.js.map +1 -0
- package/dist/{data-panel-BtWRQbBH.cjs → data-panel-C_XMiBEd.cjs} +19 -18
- package/dist/data-panel-C_XMiBEd.cjs.map +1 -0
- package/dist/{data-panel-section-heading-DTa_yYct.js → data-panel-section-heading-CXD1skJD.js} +3 -3
- package/dist/{data-panel-section-heading-DTa_yYct.js.map → data-panel-section-heading-CXD1skJD.js.map} +1 -1
- package/dist/{data-panel-section-heading-A1-hf-oM.cjs → data-panel-section-heading-V86Awzqg.cjs} +3 -3
- package/dist/{data-panel-section-heading-A1-hf-oM.cjs.map → data-panel-section-heading-V86Awzqg.cjs.map} +1 -1
- package/dist/{date-picker-BgjIY11K.js → date-picker-DgWTsiJ7.js} +20 -13
- package/dist/date-picker-DgWTsiJ7.js.map +1 -0
- package/dist/{date-picker-DLgPL4k5.cjs → date-picker-dRZF8frf.cjs} +20 -13
- package/dist/date-picker-dRZF8frf.cjs.map +1 -0
- package/dist/{date-time-range-picker-Cd2ElMjR.cjs → date-time-range-picker-BZGCrW3b.cjs} +11 -11
- package/dist/date-time-range-picker-BZGCrW3b.cjs.map +1 -0
- package/dist/{date-time-range-picker-rUNfmZXE.js → date-time-range-picker-BpAA2qJC.js} +11 -11
- package/dist/date-time-range-picker-BpAA2qJC.js.map +1 -0
- package/dist/{dialog-CRa50pTt.js → dialog-CBUf3_Jx.js} +16 -18
- package/dist/dialog-CBUf3_Jx.js.map +1 -0
- package/dist/{dialog-0XUJ6qpV.cjs → dialog-DNPUAqZd.cjs} +16 -18
- package/dist/dialog-DNPUAqZd.cjs.map +1 -0
- package/dist/domains/chat/attachments/attachment-preview-dialog.cjs.js +2 -2
- package/dist/domains/chat/attachments/attachment-preview-dialog.es.js +2 -2
- package/dist/domains/chat/attachments/composer-attachment-list.cjs.js +2 -2
- package/dist/domains/chat/attachments/composer-attachment-list.es.js +2 -2
- package/dist/domains/chat/attachments/composer-attachment.cjs.js +5 -4
- package/dist/domains/chat/attachments/composer-attachment.cjs.js.map +1 -1
- package/dist/domains/chat/attachments/composer-attachment.es.js +5 -4
- package/dist/domains/chat/attachments/composer-attachment.es.js.map +1 -1
- package/dist/domains/chat/components/badge-wrapper.cjs.js +2 -2
- package/dist/domains/chat/components/badge-wrapper.es.js +2 -2
- package/dist/domains/chat/components/loading-badge.cjs.js +2 -2
- package/dist/domains/chat/components/loading-badge.es.js +2 -2
- package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js +8 -8
- package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js.map +1 -1
- package/dist/domains/chat/components/network-choice-metadata-dialog.es.js +8 -8
- package/dist/domains/chat/components/network-choice-metadata-dialog.es.js.map +1 -1
- package/dist/domains/chat/components/section-label.cjs.js +2 -2
- package/dist/domains/chat/components/section-label.cjs.js.map +1 -1
- package/dist/domains/chat/components/section-label.es.js +2 -2
- package/dist/domains/chat/components/section-label.es.js.map +1 -1
- package/dist/domains/chat/messages/notification-signal-notice.cjs.js +1 -1
- package/dist/domains/chat/messages/notification-signal-notice.es.js +1 -1
- package/dist/domains/chat/messages/reasoning-streaming-line.cjs.js +5 -4
- package/dist/domains/chat/messages/reasoning-streaming-line.cjs.js.map +1 -1
- package/dist/domains/chat/messages/reasoning-streaming-line.es.js +5 -4
- package/dist/domains/chat/messages/reasoning-streaming-line.es.js.map +1 -1
- package/dist/domains/chat/messages/reasoning.cjs.js +8 -29
- package/dist/domains/chat/messages/reasoning.cjs.js.map +1 -1
- package/dist/domains/chat/messages/reasoning.es.js +9 -30
- package/dist/domains/chat/messages/reasoning.es.js.map +1 -1
- package/dist/domains/chat/messages/renderers/message-text.cjs.js +4 -4
- package/dist/domains/chat/messages/renderers/message-text.es.js +4 -4
- package/dist/domains/chat/messages/renderers/status-renderers.cjs.js +1 -1
- package/dist/domains/chat/messages/renderers/status-renderers.es.js +1 -1
- package/dist/domains/chat/messages/signal-badge.cjs.js +1 -1
- package/dist/domains/chat/messages/signal-badge.es.js +1 -1
- package/dist/domains/chat/messages/system-reminder-badge.cjs.js +7 -7
- package/dist/domains/chat/messages/system-reminder-badge.cjs.js.map +1 -1
- package/dist/domains/chat/messages/system-reminder-badge.es.js +7 -7
- package/dist/domains/chat/messages/system-reminder-badge.es.js.map +1 -1
- package/dist/domains/chat/messages/tripwire-notice.cjs.js +4 -4
- package/dist/domains/chat/messages/tripwire-notice.cjs.js.map +1 -1
- package/dist/domains/chat/messages/tripwire-notice.es.js +4 -4
- package/dist/domains/chat/messages/tripwire-notice.es.js.map +1 -1
- package/dist/domains/chat/tools/badges/ask-user-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/ask-user-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js +5 -5
- package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js.map +1 -1
- package/dist/domains/chat/tools/badges/code-mode-badge.es.js +5 -5
- package/dist/domains/chat/tools/badges/code-mode-badge.es.js.map +1 -1
- package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js +36 -36
- package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js.map +1 -1
- package/dist/domains/chat/tools/badges/observation-marker-badge.es.js +36 -36
- package/dist/domains/chat/tools/badges/observation-marker-badge.es.js.map +1 -1
- package/dist/domains/chat/tools/badges/observation-renderer.cjs.js +14 -14
- package/dist/domains/chat/tools/badges/observation-renderer.cjs.js.map +1 -1
- package/dist/domains/chat/tools/badges/observation-renderer.es.js +14 -14
- package/dist/domains/chat/tools/badges/observation-renderer.es.js.map +1 -1
- package/dist/domains/chat/tools/badges/tool-approval-buttons.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/tool-approval-buttons.es.js +1 -1
- package/dist/domains/logs/components/log-details-view.cjs.js +11 -11
- package/dist/domains/logs/components/log-details-view.cjs.js.map +1 -1
- package/dist/domains/logs/components/log-details-view.es.js +11 -11
- package/dist/domains/logs/components/log-details-view.es.js.map +1 -1
- package/dist/domains/logs/components/logs-error-content.cjs.js +4 -4
- package/dist/domains/logs/components/logs-error-content.es.js +4 -4
- package/dist/domains/logs/components/logs-layout.cjs.js +1 -1
- package/dist/domains/logs/components/logs-layout.es.js +1 -1
- package/dist/domains/logs/components/logs-list-view.cjs.js +6 -4
- package/dist/domains/logs/components/logs-list-view.cjs.js.map +1 -1
- package/dist/domains/logs/components/logs-list-view.es.js +6 -4
- package/dist/domains/logs/components/logs-list-view.es.js.map +1 -1
- package/dist/domains/logs/components/logs-toolbar.cjs.js +2 -2
- package/dist/domains/logs/components/logs-toolbar.es.js +2 -2
- package/dist/domains/logs/components/no-logs-info.cjs.js +2 -2
- package/dist/domains/logs/components/no-logs-info.es.js +2 -2
- package/dist/domains/logs/hooks/use-logs-filter-persistence.cjs.js +1 -1
- package/dist/domains/logs/hooks/use-logs-filter-persistence.es.js +1 -1
- package/dist/domains/logs/hooks/use-logs.cjs.js +7 -3
- package/dist/domains/logs/hooks/use-logs.cjs.js.map +1 -1
- package/dist/domains/logs/hooks/use-logs.es.js +7 -3
- package/dist/domains/logs/hooks/use-logs.es.js.map +1 -1
- package/dist/domains/memory/components/flame-graph.cjs.js +22 -21
- package/dist/domains/memory/components/flame-graph.cjs.js.map +1 -1
- package/dist/domains/memory/components/flame-graph.es.js +22 -21
- package/dist/domains/memory/components/flame-graph.es.js.map +1 -1
- package/dist/domains/memory/components/memory-studio-panel.cjs.js +6 -6
- package/dist/domains/memory/components/memory-studio-panel.cjs.js.map +1 -1
- package/dist/domains/memory/components/memory-studio-panel.es.js +6 -6
- package/dist/domains/memory/components/memory-studio-panel.es.js.map +1 -1
- package/dist/domains/memory/components/observation-detail-view.cjs.js +23 -23
- package/dist/domains/memory/components/observation-detail-view.cjs.js.map +1 -1
- package/dist/domains/memory/components/observation-detail-view.es.js +23 -23
- package/dist/domains/memory/components/observation-detail-view.es.js.map +1 -1
- package/dist/domains/memory/components/thread-context-progress.cjs.js +5 -5
- package/dist/domains/memory/components/thread-context-progress.cjs.js.map +1 -1
- package/dist/domains/memory/components/thread-context-progress.es.js +5 -5
- package/dist/domains/memory/components/thread-context-progress.es.js.map +1 -1
- package/dist/domains/metrics/components/bar-list.cjs.js +10 -10
- package/dist/domains/metrics/components/bar-list.cjs.js.map +1 -1
- package/dist/domains/metrics/components/bar-list.es.js +10 -10
- package/dist/domains/metrics/components/bar-list.es.js.map +1 -1
- package/dist/domains/metrics/components/card-action-buttons.cjs.js +1 -1
- package/dist/domains/metrics/components/card-action-buttons.es.js +1 -1
- package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
- package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
- package/dist/domains/metrics/components/kpi-card-view.cjs.js +1 -1
- package/dist/domains/metrics/components/kpi-card-view.es.js +1 -1
- package/dist/domains/metrics/components/latency-card-view.cjs.js +5 -5
- package/dist/domains/metrics/components/latency-card-view.es.js +5 -5
- package/dist/domains/metrics/components/memory-card-view.cjs.js +7 -7
- package/dist/domains/metrics/components/memory-card-view.cjs.js.map +1 -1
- package/dist/domains/metrics/components/memory-card-view.es.js +7 -7
- package/dist/domains/metrics/components/memory-card-view.es.js.map +1 -1
- package/dist/domains/metrics/components/metrics-utils.cjs.js +8 -11
- package/dist/domains/metrics/components/metrics-utils.cjs.js.map +1 -1
- package/dist/domains/metrics/components/metrics-utils.es.js +8 -11
- package/dist/domains/metrics/components/metrics-utils.es.js.map +1 -1
- package/dist/domains/metrics/components/model-usage-cost-card-view.cjs.js +3 -3
- 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 +3 -3
- 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 +7 -7
- package/dist/domains/metrics/components/scores-card-view.cjs.js.map +1 -1
- package/dist/domains/metrics/components/scores-card-view.es.js +7 -7
- 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 +5 -5
- package/dist/domains/metrics/components/token-usage-by-agent-card-view.es.js +5 -5
- package/dist/domains/metrics/components/token-usage-timeline-card-view.cjs.js +5 -5
- package/dist/domains/metrics/components/token-usage-timeline-card-view.es.js +5 -5
- package/dist/domains/metrics/components/traces-volume-card-view.cjs.js +5 -5
- package/dist/domains/metrics/components/traces-volume-card-view.es.js +5 -5
- package/dist/domains/traces/components/no-traces-info.cjs.js +1 -1
- package/dist/domains/traces/components/no-traces-info.es.js +1 -1
- package/dist/domains/traces/components/shared.cjs.js +11 -11
- package/dist/domains/traces/components/shared.cjs.js.map +1 -1
- package/dist/domains/traces/components/shared.es.js +11 -11
- package/dist/domains/traces/components/shared.es.js.map +1 -1
- package/dist/domains/traces/components/span-data-panel-view.cjs.js +8 -8
- package/dist/domains/traces/components/span-data-panel-view.es.js +8 -8
- package/dist/domains/traces/components/span-details-view.cjs.js +1 -1
- package/dist/domains/traces/components/span-details-view.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +3 -3
- package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +3 -3
- package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +4 -4
- package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +4 -4
- package/dist/domains/traces/components/span-payload/span-input-renderers.es.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +6 -15
- package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +6 -15
- package/dist/domains/traces/components/span-payload/span-output-renderers.es.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-json.cjs.js +4 -2
- package/dist/domains/traces/components/span-payload/span-payload-json.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-json.es.js +4 -2
- package/dist/domains/traces/components/span-payload/span-payload-json.es.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +3 -3
- package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +3 -3
- package/dist/domains/traces/components/span-payload/span-payload-section.cjs.js +7 -7
- package/dist/domains/traces/components/span-payload/span-payload-section.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-section.es.js +7 -7
- package/dist/domains/traces/components/span-payload/span-payload-section.es.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +2 -2
- package/dist/domains/traces/components/span-summary-description.cjs.js +1 -1
- package/dist/domains/traces/components/span-summary-description.es.js +1 -1
- package/dist/domains/traces/components/span-timeline-row.cjs.js +9 -9
- package/dist/domains/traces/components/span-timeline-row.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-timeline-row.es.js +9 -9
- package/dist/domains/traces/components/span-timeline-row.es.js.map +1 -1
- package/dist/domains/traces/components/span-timing-hover-card.cjs.js +4 -4
- package/dist/domains/traces/components/span-timing-hover-card.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-timing-hover-card.es.js +4 -4
- package/dist/domains/traces/components/span-timing-hover-card.es.js.map +1 -1
- package/dist/domains/traces/components/span-token-usage.cjs.js +39 -45
- package/dist/domains/traces/components/span-token-usage.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-token-usage.es.js +39 -45
- package/dist/domains/traces/components/span-token-usage.es.js.map +1 -1
- package/dist/domains/traces/components/span-type-legend.cjs.js +1 -1
- package/dist/domains/traces/components/span-type-legend.es.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js +3 -3
- package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js.map +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js +3 -3
- package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js.map +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-list.cjs.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-list.es.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-messages.cjs.js +7 -7
- package/dist/domains/traces/components/thread-trace/thread-trace-messages.cjs.js.map +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-messages.es.js +7 -7
- package/dist/domains/traces/components/thread-trace/thread-trace-messages.es.js.map +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-rail.cjs.js +2 -2
- package/dist/domains/traces/components/thread-trace/thread-trace-rail.es.js +2 -2
- package/dist/domains/traces/components/thread-trace/thread-trace-root.cjs.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-root.es.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-row.cjs.js +2 -2
- package/dist/domains/traces/components/thread-trace/thread-trace-row.cjs.js.map +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-row.es.js +2 -2
- package/dist/domains/traces/components/thread-trace/thread-trace-row.es.js.map +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-span-panel.cjs.js +2 -2
- package/dist/domains/traces/components/thread-trace/thread-trace-span-panel.cjs.js.map +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-span-panel.es.js +2 -2
- package/dist/domains/traces/components/thread-trace/thread-trace-span-panel.es.js.map +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-spans.cjs.js +3 -3
- package/dist/domains/traces/components/thread-trace/thread-trace-spans.cjs.js.map +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-spans.es.js +3 -3
- package/dist/domains/traces/components/thread-trace/thread-trace-spans.es.js.map +1 -1
- package/dist/domains/traces/components/timeline-name-col.cjs.js +9 -12
- package/dist/domains/traces/components/timeline-name-col.cjs.js.map +1 -1
- package/dist/domains/traces/components/timeline-name-col.es.js +9 -12
- package/dist/domains/traces/components/timeline-name-col.es.js.map +1 -1
- package/dist/domains/traces/components/timeline-structure-sign.cjs.js +3 -3
- package/dist/domains/traces/components/timeline-structure-sign.cjs.js.map +1 -1
- package/dist/domains/traces/components/timeline-structure-sign.es.js +3 -3
- package/dist/domains/traces/components/timeline-structure-sign.es.js.map +1 -1
- package/dist/domains/traces/components/timeline-timing-col.cjs.js +7 -7
- package/dist/domains/traces/components/timeline-timing-col.cjs.js.map +1 -1
- package/dist/domains/traces/components/timeline-timing-col.es.js +7 -7
- package/dist/domains/traces/components/timeline-timing-col.es.js.map +1 -1
- package/dist/domains/traces/components/trace-columns-menu.cjs.js +7 -7
- package/dist/domains/traces/components/trace-columns-menu.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-columns-menu.es.js +7 -7
- package/dist/domains/traces/components/trace-columns-menu.es.js.map +1 -1
- package/dist/domains/traces/components/trace-data-panel-view.cjs.js +17 -17
- 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 +17 -17
- package/dist/domains/traces/components/trace-data-panel-view.es.js.map +1 -1
- package/dist/domains/traces/components/trace-id-button.cjs.js +1 -1
- package/dist/domains/traces/components/trace-id-button.es.js +1 -1
- package/dist/domains/traces/components/trace-keys-and-values.cjs.js +2 -2
- package/dist/domains/traces/components/trace-keys-and-values.es.js +2 -2
- package/dist/domains/traces/components/trace-span-timeline.cjs.js +1 -1
- package/dist/domains/traces/components/trace-span-timeline.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-span-timeline.es.js +1 -1
- package/dist/domains/traces/components/trace-span-timeline.es.js.map +1 -1
- package/dist/domains/traces/components/trace-span-tree-skeleton.cjs.js +2 -2
- package/dist/domains/traces/components/trace-span-tree-skeleton.es.js +2 -2
- package/dist/domains/traces/components/trace-span-tree.cjs.js +1 -1
- package/dist/domains/traces/components/trace-span-tree.es.js +1 -1
- package/dist/domains/traces/components/trace-status-value.cjs.js +1 -1
- package/dist/domains/traces/components/trace-status-value.es.js +1 -1
- package/dist/domains/traces/components/trace-summary-description.cjs.js +1 -1
- package/dist/domains/traces/components/trace-summary-description.es.js +1 -1
- package/dist/domains/traces/components/trace-time-range-chip.cjs.js +5 -12
- package/dist/domains/traces/components/trace-time-range-chip.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-time-range-chip.es.js +5 -12
- package/dist/domains/traces/components/trace-time-range-chip.es.js.map +1 -1
- package/dist/domains/traces/components/traces-error-content.cjs.js +3 -3
- package/dist/domains/traces/components/traces-error-content.es.js +3 -3
- 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-adapter.cjs.js +3 -1
- package/dist/domains/traces/components/traces-list-view-adapter.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-list-view-adapter.es.js +3 -1
- package/dist/domains/traces/components/traces-list-view-adapter.es.js.map +1 -1
- package/dist/domains/traces/components/traces-list-view.cjs.js +10 -9
- package/dist/domains/traces/components/traces-list-view.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-list-view.es.js +10 -9
- package/dist/domains/traces/components/traces-list-view.es.js.map +1 -1
- package/dist/domains/traces/components/traces-page-skeleton.cjs.js +4 -4
- package/dist/domains/traces/components/traces-page-skeleton.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-page-skeleton.es.js +4 -4
- package/dist/domains/traces/components/traces-page-skeleton.es.js.map +1 -1
- package/dist/domains/traces/hooks/use-download-trace-json.cjs.js +1 -1
- package/dist/domains/traces/hooks/use-download-trace-json.es.js +1 -1
- package/dist/domains/traces/hooks/use-trace-query.cjs.js.map +1 -1
- package/dist/domains/traces/hooks/use-trace-query.es.js.map +1 -1
- package/dist/domains/traces/trace-list-columns.cjs.js +12 -5
- package/dist/domains/traces/trace-list-columns.cjs.js.map +1 -1
- package/dist/domains/traces/trace-list-columns.es.js +12 -6
- package/dist/domains/traces/trace-list-columns.es.js.map +1 -1
- package/dist/{drawer-BxR90K5s.cjs → drawer-DG930Rfb.cjs} +12 -10
- package/dist/drawer-DG930Rfb.cjs.map +1 -0
- package/dist/{drawer-BsstUUG0.js → drawer-DIg20A3w.js} +12 -10
- package/dist/drawer-DIg20A3w.js.map +1 -0
- package/dist/{dropdown-menu-Rb1BFYCV.js → dropdown-menu-DL0MzjEb.js} +4 -4
- package/dist/dropdown-menu-DL0MzjEb.js.map +1 -0
- package/dist/{dropdown-menu-DC74vW0L.cjs → dropdown-menu-DNRCA4Gj.cjs} +4 -4
- package/dist/dropdown-menu-DNRCA4Gj.cjs.map +1 -0
- package/dist/ee/signals/components/entity-index-compact-grid.cjs.js +11 -12
- package/dist/ee/signals/components/entity-index-compact-grid.cjs.js.map +1 -1
- package/dist/ee/signals/components/entity-index-compact-grid.es.js +11 -12
- package/dist/ee/signals/components/entity-index-compact-grid.es.js.map +1 -1
- package/dist/ee/signals/components/entity-index-list.cjs.js +2 -2
- package/dist/ee/signals/components/entity-index-list.es.js +2 -2
- package/dist/ee/signals/components/signals-empty-state.cjs.js +51 -46
- package/dist/ee/signals/components/signals-empty-state.cjs.js.map +1 -1
- package/dist/ee/signals/components/signals-empty-state.es.js +51 -46
- package/dist/ee/signals/components/signals-empty-state.es.js.map +1 -1
- package/dist/ee/signals/components/trace-intelligence-entity-detail.cjs.js +2 -2
- package/dist/ee/signals/components/trace-intelligence-entity-detail.es.js +2 -2
- package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +12 -12
- package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js.map +1 -1
- package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +12 -12
- package/dist/ee/signals/components/trace-intelligence-entity-index.es.js.map +1 -1
- package/dist/ee/signals/examples-pager.cjs.js +2 -2
- package/dist/ee/signals/examples-pager.cjs.js.map +1 -1
- package/dist/ee/signals/examples-pager.es.js +2 -2
- package/dist/ee/signals/examples-pager.es.js.map +1 -1
- package/dist/ee/signals/flow-card.cjs.js +7 -7
- package/dist/ee/signals/flow-card.cjs.js.map +1 -1
- package/dist/ee/signals/flow-card.es.js +7 -7
- package/dist/ee/signals/flow-card.es.js.map +1 -1
- package/dist/ee/signals/lifeline-point.cjs.js +3 -2
- package/dist/ee/signals/lifeline-point.cjs.js.map +1 -1
- package/dist/ee/signals/lifeline-point.es.js +3 -2
- package/dist/ee/signals/lifeline-point.es.js.map +1 -1
- package/dist/ee/signals/lifeline-row.cjs.js +11 -4
- package/dist/ee/signals/lifeline-row.cjs.js.map +1 -1
- package/dist/ee/signals/lifeline-row.es.js +11 -4
- package/dist/ee/signals/lifeline-row.es.js.map +1 -1
- package/dist/ee/signals/noise-detail-panel.cjs.js +17 -12
- package/dist/ee/signals/noise-detail-panel.cjs.js.map +1 -1
- package/dist/ee/signals/noise-detail-panel.es.js +17 -12
- package/dist/ee/signals/noise-detail-panel.es.js.map +1 -1
- package/dist/ee/signals/sankey-signals.cjs.js +5 -5
- package/dist/ee/signals/sankey-signals.cjs.js.map +1 -1
- package/dist/ee/signals/sankey-signals.es.js +5 -5
- package/dist/ee/signals/sankey-signals.es.js.map +1 -1
- package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js +8 -8
- package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js.map +1 -1
- package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +8 -8
- package/dist/ee/signals/settings/signal-definition-form-dialog.es.js.map +1 -1
- package/dist/ee/signals/settings/trace-signal-settings.cjs.js +15 -15
- package/dist/ee/signals/settings/trace-signal-settings.cjs.js.map +1 -1
- package/dist/ee/signals/settings/trace-signal-settings.es.js +15 -15
- package/dist/ee/signals/settings/trace-signal-settings.es.js.map +1 -1
- package/dist/ee/signals/signal-delta-column.cjs.js +8 -8
- package/dist/ee/signals/signal-delta-column.cjs.js.map +1 -1
- package/dist/ee/signals/signal-delta-column.es.js +8 -8
- package/dist/ee/signals/signal-delta-column.es.js.map +1 -1
- package/dist/ee/signals/signal-lifelines.cjs.js +3 -3
- package/dist/ee/signals/signal-lifelines.cjs.js.map +1 -1
- package/dist/ee/signals/signal-lifelines.es.js +3 -3
- package/dist/ee/signals/signal-lifelines.es.js.map +1 -1
- package/dist/ee/signals/signals-error-state.cjs.js +4 -4
- package/dist/ee/signals/signals-error-state.cjs.js.map +1 -1
- package/dist/ee/signals/signals-error-state.es.js +4 -4
- package/dist/ee/signals/signals-error-state.es.js.map +1 -1
- package/dist/ee/signals/signals-loading-skeleton.cjs.js +2 -2
- package/dist/ee/signals/signals-loading-skeleton.cjs.js.map +1 -1
- package/dist/ee/signals/signals-loading-skeleton.es.js +2 -2
- package/dist/ee/signals/signals-loading-skeleton.es.js.map +1 -1
- package/dist/ee/signals/snapshot-timeline.cjs.js +5 -5
- package/dist/ee/signals/snapshot-timeline.cjs.js.map +1 -1
- package/dist/ee/signals/snapshot-timeline.es.js +5 -5
- package/dist/ee/signals/snapshot-timeline.es.js.map +1 -1
- package/dist/ee/signals/sortable-signal-headers.cjs.js +12 -4
- package/dist/ee/signals/sortable-signal-headers.cjs.js.map +1 -1
- package/dist/ee/signals/sortable-signal-headers.es.js +12 -4
- package/dist/ee/signals/sortable-signal-headers.es.js.map +1 -1
- package/dist/ee/signals/theme-compare-sparkline.cjs.js +1 -1
- package/dist/ee/signals/theme-compare-sparkline.cjs.js.map +1 -1
- package/dist/ee/signals/theme-compare-sparkline.es.js +1 -1
- package/dist/ee/signals/theme-compare-sparkline.es.js.map +1 -1
- package/dist/ee/signals/theme-compare.cjs.js +5 -5
- package/dist/ee/signals/theme-compare.cjs.js.map +1 -1
- package/dist/ee/signals/theme-compare.es.js +5 -5
- package/dist/ee/signals/theme-compare.es.js.map +1 -1
- package/dist/ee/signals/theme-detail-panel.cjs.js +25 -20
- package/dist/ee/signals/theme-detail-panel.cjs.js.map +1 -1
- package/dist/ee/signals/theme-detail-panel.es.js +25 -20
- package/dist/ee/signals/theme-detail-panel.es.js.map +1 -1
- package/dist/ee/signals/theme-filter-banner.cjs.js +3 -3
- package/dist/ee/signals/theme-filter-banner.cjs.js.map +1 -1
- package/dist/ee/signals/theme-filter-banner.es.js +3 -3
- package/dist/ee/signals/theme-filter-banner.es.js.map +1 -1
- package/dist/ee/signals/theme-lifelines.cjs.js +1 -1
- package/dist/ee/signals/theme-lifelines.cjs.js.map +1 -1
- package/dist/ee/signals/theme-lifelines.es.js +1 -1
- package/dist/ee/signals/theme-lifelines.es.js.map +1 -1
- package/dist/ee/signals/theme-trend-chart.cjs.js +2 -2
- package/dist/ee/signals/theme-trend-chart.cjs.js.map +1 -1
- package/dist/ee/signals/theme-trend-chart.es.js +2 -2
- package/dist/ee/signals/theme-trend-chart.es.js.map +1 -1
- package/dist/ee/signals/trace-insight-view.cjs.js +18 -16
- package/dist/ee/signals/trace-insight-view.cjs.js.map +1 -1
- package/dist/ee/signals/trace-insight-view.es.js +18 -16
- package/dist/ee/signals/trace-insight-view.es.js.map +1 -1
- package/dist/ee/signals/trace-intelligence-explainer.cjs.js +8 -5
- package/dist/ee/signals/trace-intelligence-explainer.cjs.js.map +1 -1
- package/dist/ee/signals/trace-intelligence-explainer.es.js +8 -5
- package/dist/ee/signals/trace-intelligence-explainer.es.js.map +1 -1
- package/dist/ee/signals/view-mode-tab.cjs.js +4 -4
- package/dist/ee/signals/view-mode-tab.cjs.js.map +1 -1
- package/dist/ee/signals/view-mode-tab.es.js +4 -4
- package/dist/ee/signals/view-mode-tab.es.js.map +1 -1
- package/dist/ee/topics/components/topic-trace-details-panel.cjs.js +1 -1
- package/dist/ee/topics/components/topic-trace-details-panel.es.js +1 -1
- package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +4 -4
- 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 +4 -4
- package/dist/ee/topics/components/topic-trace-summary-list.es.js.map +1 -1
- package/dist/ee/topics/components/topics-layout.cjs.js +2 -2
- package/dist/ee/topics/components/topics-layout.cjs.js.map +1 -1
- package/dist/ee/topics/components/topics-layout.es.js +2 -2
- package/dist/ee/topics/components/topics-layout.es.js.map +1 -1
- package/dist/{field-block-Cux0sH4A.js → field-block-DWkbNcsV.js} +9 -10
- package/dist/field-block-DWkbNcsV.js.map +1 -0
- package/dist/{field-block-DjOm7woP.cjs → field-block-Dy1IaWbv.cjs} +10 -11
- package/dist/field-block-Dy1IaWbv.cjs.map +1 -0
- package/dist/{filter-bar-chip-sj0_hRnm.cjs → filter-bar-chip-C-cZ8evS.cjs} +98 -42
- package/dist/filter-bar-chip-C-cZ8evS.cjs.map +1 -0
- package/dist/{filter-bar-chip-Ccl98EC3.js → filter-bar-chip-CPVNrPFJ.js} +98 -43
- package/dist/filter-bar-chip-CPVNrPFJ.js.map +1 -0
- package/dist/filter-bar-chip.css +32 -1
- package/dist/hooks/use-copy-to-clipboard.cjs.js +1 -1
- package/dist/hooks/use-copy-to-clipboard.es.js +1 -1
- package/dist/{horizontal-bars-D-PcG5lk.js → horizontal-bars-CksEKcCE.js} +10 -10
- package/dist/horizontal-bars-CksEKcCE.js.map +1 -0
- package/dist/{horizontal-bars--3zbYCLD.cjs → horizontal-bars-nyWGmQ7g.cjs} +10 -10
- package/dist/horizontal-bars-nyWGmQ7g.cjs.map +1 -0
- package/dist/{hover-card-ec6-g-jY.js → hover-card-Ch5smNcf.js} +5 -4
- package/dist/hover-card-Ch5smNcf.js.map +1 -0
- package/dist/{hover-card-BA6yafQ4.cjs → hover-card-DdHnkGcs.cjs} +6 -5
- package/dist/hover-card-DdHnkGcs.cjs.map +1 -0
- package/dist/icons/Icon.cjs.js +9 -8
- package/dist/icons/Icon.cjs.js.map +1 -1
- package/dist/icons/Icon.es.js +9 -9
- package/dist/icons/Icon.es.js.map +1 -1
- package/dist/{index-DklEHic9.cjs → index-C-fBJhpb.cjs} +2 -2
- package/dist/{index-DklEHic9.cjs.map → index-C-fBJhpb.cjs.map} +1 -1
- package/dist/{index-BtcX2880.js → index-Dubp6Qv4.js} +2 -2
- package/dist/{index-BtcX2880.js.map → index-Dubp6Qv4.js.map} +1 -1
- package/dist/{input-CnCDgkcF.js → input-B1RysHyq.js} +10 -20
- package/dist/input-B1RysHyq.js.map +1 -0
- package/dist/{input-CIrPZ-h_.cjs → input-CDLMprJS.cjs} +10 -20
- package/dist/input-CDLMprJS.cjs.map +1 -0
- package/dist/{input-group-Cjcx7BFu.js → input-group-BkqYi1zD.js} +37 -60
- package/dist/input-group-BkqYi1zD.js.map +1 -0
- package/dist/{input-group-B2OeERmc.cjs → input-group-Dmw07QvU.cjs} +37 -60
- package/dist/input-group-Dmw07QvU.cjs.map +1 -0
- package/dist/kbd-B-Z2sNvK.cjs +29 -0
- package/dist/kbd-B-Z2sNvK.cjs.map +1 -0
- package/dist/kbd-CINtikLh.js +27 -0
- package/dist/kbd-CINtikLh.js.map +1 -0
- package/dist/{label-zAZieYjS.cjs → label-DfAhywj_.cjs} +10 -5
- package/dist/label-DfAhywj_.cjs.map +1 -0
- package/dist/label-Dxsz0dFs.js +18 -0
- package/dist/label-Dxsz0dFs.js.map +1 -0
- package/dist/layout/tabbed-container.cjs.js +10 -10
- package/dist/layout/tabbed-container.cjs.js.map +1 -1
- package/dist/layout/tabbed-container.es.js +10 -10
- package/dist/layout/tabbed-container.es.js.map +1 -1
- package/dist/{list-search-CGCOTZp-.cjs → list-search-CrFaELKt.cjs} +2 -2
- package/dist/{list-search-CGCOTZp-.cjs.map → list-search-CrFaELKt.cjs.map} +1 -1
- package/dist/{list-search-Ct_tMzsl.js → list-search-DXvoGx18.js} +2 -2
- package/dist/{list-search-Ct_tMzsl.js.map → list-search-DXvoGx18.js.map} +1 -1
- package/dist/{logs-data-list-Ixf3-LUC.cjs → logs-data-list-ByDIA9Ph.cjs} +13 -12
- package/dist/logs-data-list-ByDIA9Ph.cjs.map +1 -0
- package/dist/{logs-data-list-DpjwD0cx.js → logs-data-list-Cl_vyyL7.js} +13 -12
- package/dist/logs-data-list-Cl_vyyL7.js.map +1 -0
- package/dist/{main-sidebar-link-active-BdR1g6As.cjs → main-sidebar-7MkUMmEB.cjs} +173 -44
- package/dist/main-sidebar-7MkUMmEB.cjs.map +1 -0
- package/dist/{main-sidebar-link-active-C5KQFLny.js → main-sidebar-CqZDFNCx.js} +174 -46
- package/dist/main-sidebar-CqZDFNCx.js.map +1 -0
- package/dist/{markdown-renderer-o3r77XBU.js → markdown-renderer-KkFyG3bm.js} +10 -10
- package/dist/markdown-renderer-KkFyG3bm.js.map +1 -0
- package/dist/{markdown-renderer-DcBAdWTo.cjs → markdown-renderer-xeeqngMs.cjs} +10 -10
- package/dist/markdown-renderer-xeeqngMs.cjs.map +1 -0
- package/dist/markdown-renderer.css +20 -20
- package/dist/{message-DFPYEfGS.js → message-BrwbcLPi.js} +6 -6
- package/dist/message-BrwbcLPi.js.map +1 -0
- package/dist/{message-D-oFS9ys.cjs → message-CszposMZ.cjs} +6 -6
- package/dist/message-CszposMZ.cjs.map +1 -0
- package/dist/{message-scroller-DM_Jzo-m.cjs → message-scroller-c22pIucB.cjs} +5 -3
- package/dist/message-scroller-c22pIucB.cjs.map +1 -0
- package/dist/{message-scroller-gXNPrq77.js → message-scroller-v1kQVq2v.js} +5 -3
- package/dist/message-scroller-v1kQVq2v.js.map +1 -0
- package/dist/{metrics-card-DVYWilBf.cjs → metrics-card-BUJxiwec.cjs} +13 -13
- package/dist/metrics-card-BUJxiwec.cjs.map +1 -0
- package/dist/{metrics-card-SKimEVN0.js → metrics-card-BlBt1WHw.js} +13 -13
- package/dist/metrics-card-BlBt1WHw.js.map +1 -0
- package/dist/{metrics-kpi-card-CaQWWytJ.js → metrics-kpi-card-CBSNmtc5.js} +13 -13
- package/dist/metrics-kpi-card-CBSNmtc5.js.map +1 -0
- package/dist/{metrics-kpi-card-Cnb19DyU.cjs → metrics-kpi-card-CgqmNcEC.cjs} +13 -13
- package/dist/metrics-kpi-card-CgqmNcEC.cjs.map +1 -0
- package/dist/{metrics-line-chart-ZrbaUENW.cjs → metrics-line-chart-B_sP3eiL.cjs} +11 -11
- package/dist/metrics-line-chart-B_sP3eiL.cjs.map +1 -0
- package/dist/{metrics-line-chart-D9aGUvEA.js → metrics-line-chart-DHyrDPkJ.js} +11 -11
- package/dist/metrics-line-chart-DHyrDPkJ.js.map +1 -0
- package/dist/new/layout/app-shell.cjs.js +4 -2
- package/dist/new/layout/app-shell.cjs.js.map +1 -1
- package/dist/new/layout/app-shell.es.js +4 -2
- package/dist/new/layout/app-shell.es.js.map +1 -1
- package/dist/new/layout/page-header.cjs.js +1 -1
- package/dist/new/layout/page-header.es.js +1 -1
- package/dist/new/layout/page-shell.cjs.js +2 -2
- package/dist/new/layout/page-shell.es.js +2 -2
- package/dist/new/settings.cjs.js +9 -19
- package/dist/new/settings.cjs.js.map +1 -1
- package/dist/new/settings.es.js +9 -19
- package/dist/new/settings.es.js.map +1 -1
- package/dist/new/sidebar.cjs.js +51 -56
- package/dist/new/sidebar.cjs.js.map +1 -1
- package/dist/new/sidebar.es.js +23 -28
- package/dist/new/sidebar.es.js.map +1 -1
- package/dist/{no-data-page-layout-Dx2DFSVx.js → no-data-page-layout-DcVPjj-J.js} +2 -2
- package/dist/{no-data-page-layout-Dx2DFSVx.js.map → no-data-page-layout-DcVPjj-J.js.map} +1 -1
- package/dist/{no-data-page-layout-Bg5eWSSO.cjs → no-data-page-layout-Drzbg_w8.cjs} +2 -2
- package/dist/{no-data-page-layout-Bg5eWSSO.cjs.map → no-data-page-layout-Drzbg_w8.cjs.map} +1 -1
- package/dist/{page-header-DLK7rmUu.cjs → page-header-BBlPmW-T.cjs} +9 -16
- package/dist/page-header-BBlPmW-T.cjs.map +1 -0
- package/dist/{page-header-BrlCjxu9.js → page-header-BIoUf7MA.js} +9 -16
- package/dist/page-header-BIoUf7MA.js.map +1 -0
- package/dist/{page-layout-CQuxdhtN.cjs → page-layout-C9ifD9Q8.cjs} +3 -3
- package/dist/{page-layout-CQuxdhtN.cjs.map → page-layout-C9ifD9Q8.cjs.map} +1 -1
- package/dist/{page-layout-CbfwyXpu.js → page-layout-xcM8IR-B.js} +3 -3
- package/dist/{page-layout-CbfwyXpu.js.map → page-layout-xcM8IR-B.js.map} +1 -1
- package/dist/{popover-DxOaFlBL.js → popover-Dg70UGyn.js} +5 -3
- package/dist/popover-Dg70UGyn.js.map +1 -0
- package/dist/{popover-ef-lHX_5.cjs → popover-lBqKiPtp.cjs} +5 -3
- package/dist/popover-lBqKiPtp.cjs.map +1 -0
- package/dist/primitives/control-size.cjs.js +10 -19
- package/dist/primitives/control-size.cjs.js.map +1 -1
- package/dist/primitives/control-size.es.js +11 -19
- package/dist/primitives/control-size.es.js.map +1 -1
- package/dist/primitives/fluid-menu.cjs.js +2 -2
- package/dist/primitives/fluid-menu.cjs.js.map +1 -1
- package/dist/primitives/fluid-menu.es.js +2 -2
- package/dist/primitives/fluid-menu.es.js.map +1 -1
- package/dist/primitives/form-element.cjs.js +11 -11
- package/dist/primitives/form-element.cjs.js.map +1 -1
- package/dist/primitives/form-element.es.js +11 -9
- package/dist/primitives/form-element.es.js.map +1 -1
- package/dist/primitives/menu-item.cjs.js +17 -11
- package/dist/primitives/menu-item.cjs.js.map +1 -1
- package/dist/primitives/menu-item.es.js +17 -11
- package/dist/primitives/menu-item.es.js.map +1 -1
- package/dist/primitives/raised-surface.cjs.js +16 -0
- package/dist/primitives/raised-surface.cjs.js.map +1 -0
- package/dist/primitives/raised-surface.d.ts +2 -0
- package/dist/primitives/raised-surface.es.js +8 -0
- package/dist/primitives/raised-surface.es.js.map +1 -0
- package/dist/primitives/resize-handle-indicator.cjs.js +4 -4
- package/dist/primitives/resize-handle-indicator.cjs.js.map +1 -1
- package/dist/primitives/resize-handle-indicator.es.js +4 -4
- package/dist/primitives/resize-handle-indicator.es.js.map +1 -1
- package/dist/primitives/selection-control.cjs.js +22 -0
- package/dist/primitives/selection-control.cjs.js.map +1 -0
- package/dist/primitives/selection-control.d.ts +2 -0
- package/dist/primitives/selection-control.es.js +18 -0
- package/dist/primitives/selection-control.es.js.map +1 -0
- package/dist/primitives/transitions.cjs.js +2 -0
- package/dist/primitives/transitions.cjs.js.map +1 -1
- package/dist/primitives/transitions.es.js +2 -1
- package/dist/primitives/transitions.es.js.map +1 -1
- package/dist/primitives/trigger-button.cjs.js +2 -2
- package/dist/primitives/trigger-button.es.js +2 -2
- package/dist/primitives/typography.cjs.js +10 -0
- package/dist/primitives/typography.cjs.js.map +1 -0
- package/dist/primitives/typography.d.ts +2 -0
- package/dist/primitives/typography.es.js +5 -0
- package/dist/primitives/typography.es.js.map +1 -0
- package/dist/{property-filter-applied-2t-Zr99O.js → property-filter-applied-BfM9AX00.js} +13 -14
- package/dist/property-filter-applied-BfM9AX00.js.map +1 -0
- package/dist/{property-filter-applied-DNpFjgMo.cjs → property-filter-applied-BxkotOba.cjs} +13 -14
- package/dist/property-filter-applied-BxkotOba.cjs.map +1 -0
- package/dist/resize/collapsible-panel.cjs.js +4 -4
- package/dist/resize/collapsible-panel.cjs.js.map +1 -1
- package/dist/resize/collapsible-panel.es.js +4 -4
- package/dist/resize/collapsible-panel.es.js.map +1 -1
- package/dist/resize/panel-drawer.cjs.js +2 -2
- package/dist/resize/panel-drawer.es.js +2 -2
- package/dist/resize/panel-group.cjs.js +1 -1
- package/dist/resize/panel-group.es.js +1 -1
- package/dist/resize/panel-icon-button.cjs.js +6 -3
- package/dist/resize/panel-icon-button.cjs.js.map +1 -1
- package/dist/resize/panel-icon-button.es.js +6 -3
- package/dist/resize/panel-icon-button.es.js.map +1 -1
- package/dist/resize/separator.cjs.js +2 -2
- package/dist/resize/separator.cjs.js.map +1 -1
- package/dist/resize/separator.es.js +2 -2
- package/dist/resize/separator.es.js.map +1 -1
- package/dist/{sankey-chart-DScBR9J9.cjs → sankey-chart-Bcm9jMhe.cjs} +13 -13
- package/dist/sankey-chart-Bcm9jMhe.cjs.map +1 -0
- package/dist/{sankey-chart-vzMdmjDh.js → sankey-chart-CqngN2lw.js} +11 -11
- package/dist/sankey-chart-CqngN2lw.js.map +1 -0
- package/dist/{scroll-area-Dg3ZGWGD.js → scroll-area-CdQ_5bLm.js} +9 -5
- package/dist/scroll-area-CdQ_5bLm.js.map +1 -0
- package/dist/{scroll-area--2s53dO8.cjs → scroll-area-Qjf7e0Ik.cjs} +9 -5
- package/dist/scroll-area-Qjf7e0Ik.cjs.map +1 -0
- package/dist/{search-field-block-CM0Bis7B.cjs → search-field-block-U22dR7V-.cjs} +7 -13
- package/dist/search-field-block-U22dR7V-.cjs.map +1 -0
- package/dist/{search-field-block-764t308O.js → search-field-block-pvOqVsER.js} +7 -13
- package/dist/search-field-block-pvOqVsER.js.map +1 -0
- package/dist/{section-pgcWt9QF.js → section-B9OLuEq3.js} +9 -9
- package/dist/section-B9OLuEq3.js.map +1 -0
- package/dist/{section-CCyCDMyN.cjs → section-CTihfzmc.cjs} +9 -9
- package/dist/section-CTihfzmc.cjs.map +1 -0
- package/dist/{select-DC9zOO73.js → select-DcgJB2Nb.js} +4 -4
- package/dist/select-DcgJB2Nb.js.map +1 -0
- package/dist/{select-DLnQFIXX.cjs → select-EjhuSovD.cjs} +4 -4
- package/dist/select-EjhuSovD.cjs.map +1 -0
- package/dist/{select-field-block-BX3jnxRI.cjs → select-field-block-DZx-xwiQ.cjs} +3 -3
- package/dist/{select-field-block-BX3jnxRI.cjs.map → select-field-block-DZx-xwiQ.cjs.map} +1 -1
- package/dist/{select-field-block-PkC_K5Or.js → select-field-block-DmsUPy6r.js} +3 -3
- package/dist/{select-field-block-PkC_K5Or.js.map → select-field-block-DmsUPy6r.js.map} +1 -1
- package/dist/settings-container-3_Yu2aCY.cjs +33 -0
- package/dist/settings-container-3_Yu2aCY.cjs.map +1 -0
- package/dist/settings-container-T53heJKd.js +30 -0
- package/dist/settings-container-T53heJKd.js.map +1 -0
- package/dist/{settings-layout-Ui7D-mOv.js → settings-layout-C80s-D31.js} +5 -13
- package/dist/settings-layout-C80s-D31.js.map +1 -0
- package/dist/{settings-layout-PhGU7ZqL.cjs → settings-layout-NP_1dC-e.cjs} +5 -13
- package/dist/settings-layout-NP_1dC-e.cjs.map +1 -0
- package/dist/{settings-row-CHTzPVkn.js → settings-row-B2IekRyH.js} +6 -8
- package/dist/settings-row-B2IekRyH.js.map +1 -0
- package/dist/{settings-row-gt26LmUP.cjs → settings-row-BoAuUUuH.cjs} +7 -9
- package/dist/settings-row-BoAuUUuH.cjs.map +1 -0
- package/dist/{shimmer-DQTF-DV8.js → shimmer-BN7Dzm37.js} +2 -2
- package/dist/{shimmer-DQTF-DV8.js.map → shimmer-BN7Dzm37.js.map} +1 -1
- package/dist/{shimmer-DREEO5ZI.cjs → shimmer-DbSkqomT.cjs} +2 -2
- package/dist/{shimmer-DREEO5ZI.cjs.map → shimmer-DbSkqomT.cjs.map} +1 -1
- package/dist/{skeleton-4D6A-D9t.js → skeleton-BsRAXyh5.js} +4 -4
- package/dist/skeleton-BsRAXyh5.js.map +1 -0
- package/dist/{skeleton-CkUppQmt.cjs → skeleton-cXUjPrq9.cjs} +4 -4
- package/dist/skeleton-cXUjPrq9.cjs.map +1 -0
- package/dist/{slider-BfOspnBa.cjs → slider-C-Fda4HC.cjs} +7 -7
- package/dist/slider-C-Fda4HC.cjs.map +1 -0
- package/dist/{slider-BL4HPHsj.js → slider-MM3K0Pyv.js} +7 -7
- package/dist/slider-MM3K0Pyv.js.map +1 -0
- package/dist/sort/sort-by.cjs.js +44 -0
- package/dist/sort/sort-by.cjs.js.map +1 -0
- package/dist/sort/sort-by.d.ts +2 -0
- package/dist/sort/sort-by.es.js +39 -0
- package/dist/sort/sort-by.es.js.map +1 -0
- package/dist/sort/use-url-sort.cjs.js +52 -0
- package/dist/sort/use-url-sort.cjs.js.map +1 -0
- package/dist/sort/use-url-sort.d.ts +2 -0
- package/dist/sort/use-url-sort.es.js +45 -0
- package/dist/sort/use-url-sort.es.js.map +1 -0
- package/dist/{span-payload-primitives-CtNMvVrq.cjs → span-payload-primitives-BIMDrpC_.cjs} +7 -7
- package/dist/span-payload-primitives-BIMDrpC_.cjs.map +1 -0
- package/dist/{span-payload-primitives-D8AZ1lMI.js → span-payload-primitives-CuRMo0PF.js} +7 -7
- package/dist/span-payload-primitives-CuRMo0PF.js.map +1 -0
- package/dist/{spinner-DSLa_M-f.cjs → spinner-CqP-NaB2.cjs} +3 -3
- package/dist/{spinner-DSLa_M-f.cjs.map → spinner-CqP-NaB2.cjs.map} +1 -1
- package/dist/{spinner-DZDJDnYs.js → spinner-D2C2DYw8.js} +3 -3
- package/dist/{spinner-DZDJDnYs.js.map → spinner-D2C2DYw8.js.map} +1 -1
- package/dist/src/domains/logs/components/logs-list-view.d.ts +5 -1
- package/dist/src/domains/logs/hooks/use-logs.d.ts +2 -0
- package/dist/src/domains/metrics/components/metrics-utils.d.ts +8 -11
- package/dist/src/domains/traces/components/trace-time-range-chip.stories.d.ts +7 -0
- package/dist/src/domains/traces/components/traces-list-view.d.ts +5 -1
- package/dist/src/domains/traces/hooks/use-trace-query.d.ts +2 -2
- package/dist/src/domains/traces/hooks/use-trace-spans.d.ts +16 -16
- package/dist/src/domains/traces/trace-list-columns.d.ts +4 -1
- package/dist/src/ds/components/Button/Button.d.ts +1 -1
- package/dist/src/ds/components/ButtonsGroup/buttons-group.d.ts +1 -10
- package/dist/src/ds/components/ButtonsGroup/buttons-group.stories.d.ts +14 -3
- package/dist/src/ds/components/Card/Card.d.ts +3 -5
- package/dist/src/ds/components/Card/card.stories.d.ts +1 -1
- package/dist/src/ds/components/ChartTooltip/chart-tooltip.d.ts +11 -0
- package/dist/src/ds/components/ChartTooltip/index.d.ts +1 -0
- package/dist/src/ds/components/ChatShell/chat-shell.d.ts +4 -2
- package/dist/src/ds/components/Combobox/combobox-styles.d.ts +4 -7
- package/dist/src/ds/components/DataKeysAndValues/shared.d.ts +1 -1
- package/dist/src/ds/components/DataList/ScoresDataList/scores-data-list.d.ts +2 -0
- package/dist/src/ds/components/DataList/TracesDataList/traces-data-list-cells.d.ts +2 -3
- package/dist/src/ds/components/DataList/TracesDataList/traces-data-list.d.ts +4 -2
- package/dist/src/ds/components/DataList/data-list-cells.d.ts +1 -1
- package/dist/src/ds/components/DataList/data-list-root.d.ts +3 -2
- package/dist/src/ds/components/DataList/data-list-sortable-top-cell.d.ts +4 -4
- package/dist/src/ds/components/DataList/data-list.d.ts +2 -1
- package/dist/src/ds/components/DataList/shared.d.ts +12 -8
- package/dist/src/ds/components/Dialog/dialog-context.d.ts +3 -4
- package/dist/src/ds/components/FilterBar/filter-bar-chip.d.ts +2 -0
- package/dist/src/ds/components/FilterBar/filter-bar-context.d.ts +4 -0
- package/dist/src/ds/components/Input/input.d.ts +4 -4
- package/dist/src/ds/components/Input/input.stories.d.ts +0 -1
- package/dist/src/ds/components/InputGroup/input-group.d.ts +2 -12
- package/dist/src/ds/components/InputGroup/input-group.stories.d.ts +1 -1
- package/dist/src/ds/components/Kbd/kbd.d.ts +1 -2
- package/dist/src/ds/components/Kbd/kbd.stories.d.ts +1 -2
- package/dist/src/ds/components/LogsDataList/logs-data-list.d.ts +2 -0
- package/dist/src/ds/components/MainHeader/main-header-title.d.ts +1 -2
- package/dist/src/ds/components/MainSidebar/main-sidebar-nav-item-classes.d.ts +1 -1
- package/dist/src/ds/components/MainSidebar/main-sidebar-nav-link.d.ts +1 -0
- package/dist/src/ds/components/Tabs/tabs-list.d.ts +3 -14
- package/dist/src/ds/components/Textarea/textarea.d.ts +4 -4
- package/dist/src/ds/components/ThemeToggle/theme-toggle.d.ts +2 -2
- package/dist/src/ds/components/Txt/Txt.d.ts +8 -15
- package/dist/src/ds/components/Txt/txt.stories.d.ts +6 -17
- package/dist/src/ds/icons/Icon.d.ts +3 -1
- package/dist/src/ds/new/layout/page-header/page-header-title.d.ts +1 -3
- package/dist/src/ds/new/layout/page-header/page-header.d.ts +1 -1
- package/dist/src/ds/new/layout/page-header/page-header.stories.d.ts +1 -9
- package/dist/src/ds/primitives/control-size.d.ts +1 -2
- package/dist/src/ds/primitives/fluid-menu.d.ts +4 -4
- package/dist/src/ds/primitives/form-element.d.ts +5 -7
- package/dist/src/ds/primitives/menu-item.d.ts +3 -3
- package/dist/src/ds/primitives/raised-surface.d.ts +50 -0
- package/dist/src/ds/primitives/selection-control.d.ts +1 -0
- package/dist/src/ds/primitives/transitions.d.ts +1 -0
- package/dist/src/ds/primitives/typography.d.ts +11 -0
- package/dist/src/ds/tokens/animations.d.ts +6 -7
- package/dist/src/ds/tokens/colors.d.ts +54 -18
- package/dist/src/ds/tokens/elevation-foundations.stories.d.ts +5 -0
- package/dist/src/ds/tokens/fonts.d.ts +3 -25
- package/dist/src/ds/tokens/foundations-layout.d.ts +29 -0
- package/dist/src/ds/tokens/index.d.ts +0 -1
- package/dist/src/ds/tokens/motion-foundations.stories.d.ts +5 -0
- package/dist/src/ds/tokens/shadows.d.ts +3 -13
- package/dist/src/ds/tokens/shape-foundations.stories.d.ts +5 -0
- package/dist/src/ds/tokens/sizes.d.ts +7 -8
- package/dist/src/ds/tokens/status-foundations.stories.d.ts +5 -0
- package/dist/src/ds/tokens/surface-foundations.stories.d.ts +5 -0
- package/dist/src/ds/tokens/utilities-foundations.stories.d.ts +5 -0
- package/dist/src/lib/sort/sort-by.d.ts +16 -0
- package/dist/src/lib/sort/use-url-sort.d.ts +24 -0
- package/dist/style.css +2024 -3041
- package/dist/{switch-DTkX34ow.cjs → switch-6125Oajw.cjs} +8 -9
- package/dist/switch-6125Oajw.cjs.map +1 -0
- package/dist/{switch-C-F_a7Rn.js → switch-CE9jTpUG.js} +8 -9
- package/dist/switch-CE9jTpUG.js.map +1 -0
- package/dist/tabbed-container.css +11 -11
- package/dist/{tabs-content-U0kQ6J2D.cjs → tabs-content-6SFe92z6.cjs} +3 -3
- package/dist/{tabs-content-U0kQ6J2D.cjs.map → tabs-content-6SFe92z6.cjs.map} +1 -1
- package/dist/{tabs-content-B6Mu3V8y.js → tabs-content-z1aXT_w5.js} +3 -3
- package/dist/{tabs-content-B6Mu3V8y.js.map → tabs-content-z1aXT_w5.js.map} +1 -1
- package/dist/{tabs-root-BAgoQQm2.js → tabs-root-CnHbrFPS.js} +15 -28
- package/dist/tabs-root-CnHbrFPS.js.map +1 -0
- package/dist/{tabs-root-C5bSRgUs.cjs → tabs-root-ZUM5Dt9l.cjs} +15 -28
- package/dist/tabs-root-ZUM5Dt9l.cjs.map +1 -0
- package/dist/tabs-root.css +18 -31
- package/dist/{tabs-tab-8Vs3pg_2.js → tabs-tab-C6i-J-Si.js} +9 -9
- package/dist/tabs-tab-C6i-J-Si.js.map +1 -0
- package/dist/{tabs-tab-D0SLrzpI.cjs → tabs-tab-CU9lUzll.cjs} +8 -8
- package/dist/tabs-tab-CU9lUzll.cjs.map +1 -0
- package/dist/{text-field-block-CNd5Bqs1.js → text-field-block--EUJKlY_.js} +3 -3
- package/dist/{text-field-block-CNd5Bqs1.js.map → text-field-block--EUJKlY_.js.map} +1 -1
- package/dist/{text-field-block-CSZe0Vot.cjs → text-field-block-BLpLWmu8.cjs} +3 -3
- package/dist/{text-field-block-CSZe0Vot.cjs.map → text-field-block-BLpLWmu8.cjs.map} +1 -1
- package/dist/{textarea-a0YUaWAE.cjs → textarea-5b6XcMrq.cjs} +13 -25
- package/dist/textarea-5b6XcMrq.cjs.map +1 -0
- package/dist/textarea-DdnzLrI9.js +58 -0
- package/dist/textarea-DdnzLrI9.js.map +1 -0
- package/dist/{thread-rail-CCq8JEFt.cjs → thread-rail-b-8RHNX_.cjs} +15 -13
- package/dist/thread-rail-b-8RHNX_.cjs.map +1 -0
- package/dist/{thread-rail-BYdHzcdu.js → thread-rail-vsR5C0j4.js} +15 -13
- package/dist/thread-rail-vsR5C0j4.js.map +1 -0
- package/dist/{time-picker-Cyy7wieX.js → time-picker-BQ87J_y2.js} +3 -3
- package/dist/{time-picker-Cyy7wieX.js.map → time-picker-BQ87J_y2.js.map} +1 -1
- package/dist/{time-picker-CmtAmyxF.cjs → time-picker-CbcubTrW.cjs} +3 -3
- package/dist/{time-picker-CmtAmyxF.cjs.map → time-picker-CbcubTrW.cjs.map} +1 -1
- package/dist/{toast-UQejBqqw.js → toast-c5kCpyWt.js} +2 -2
- package/dist/{toast-UQejBqqw.js.map → toast-c5kCpyWt.js.map} +1 -1
- package/dist/{toast-DP1G6ANZ.cjs → toast-nm-fM7BR.cjs} +2 -2
- package/dist/{toast-DP1G6ANZ.cjs.map → toast-nm-fM7BR.cjs.map} +1 -1
- package/dist/toast.css +12 -12
- package/dist/tokens.cjs.js +145 -22
- package/dist/tokens.cjs.js.map +1 -1
- package/dist/tokens.es.js +136 -11
- package/dist/tokens.es.js.map +1 -1
- package/dist/{tool-approval-Bt6adekD.cjs → tool-approval-CORubTlp.cjs} +5 -5
- package/dist/tool-approval-CORubTlp.cjs.map +1 -0
- package/dist/{tool-approval-DkgA6p5Z.js → tool-approval-DJ2p2jhM.js} +5 -5
- package/dist/tool-approval-DJ2p2jhM.js.map +1 -0
- package/dist/{tool-call-CWW2DjX-.cjs → tool-call-BK8UwMne.cjs} +18 -17
- package/dist/tool-call-BK8UwMne.cjs.map +1 -0
- package/dist/{tool-call-CKOawYbR.js → tool-call-C2cs_MjY.js} +18 -17
- package/dist/tool-call-C2cs_MjY.js.map +1 -0
- package/dist/{tooltip-Chz35pft.js → tooltip-BrDiP0RI.js} +11 -10
- package/dist/tooltip-BrDiP0RI.js.map +1 -0
- package/dist/{tooltip-DTIMvO8I.cjs → tooltip-FvWL16Xn.cjs} +12 -11
- package/dist/tooltip-FvWL16Xn.cjs.map +1 -0
- package/dist/{traces-data-list-BfE5e8C_.cjs → traces-data-list-W-1qLSh8.cjs} +38 -28
- package/dist/traces-data-list-W-1qLSh8.cjs.map +1 -0
- package/dist/{traces-data-list-Dfz9qD1_.js → traces-data-list-v-W-HgcM.js} +40 -30
- package/dist/traces-data-list-v-W-HgcM.js.map +1 -0
- package/dist/use-text-highlight.css +1 -1
- package/dist/utils/cn.cjs.js +1 -1
- package/dist/utils/cn.es.js +1 -1
- package/dist/utils/toast.cjs.js +1 -1
- package/dist/utils/toast.es.js +1 -1
- package/package.json +18 -9
- package/theme/colors.css +155 -0
- package/theme/data-viz.css +59 -0
- package/theme/motion.css +38 -0
- package/theme/scale.css +42 -0
- package/theme/status.css +96 -0
- package/theme/surfaces.css +166 -0
- package/theme/typography.css +74 -0
- package/theme.css +30 -586
- package/dist/Badge-B9oOuqif.cjs.map +0 -1
- package/dist/Badge-apYorT0C.js.map +0 -1
- package/dist/Button-CSmXdQ09.cjs.map +0 -1
- package/dist/Button-CtuSHFtc.js.map +0 -1
- package/dist/Card-BAAZQk25.js.map +0 -1
- package/dist/Card-CGCdI-3T.cjs.map +0 -1
- package/dist/EmptyState-BATNa-KF.cjs.map +0 -1
- package/dist/EmptyState-DDlpBodA.js.map +0 -1
- package/dist/ErrorState-B0Xrya2q.js.map +0 -1
- package/dist/ErrorState-B8vYPznf.cjs.map +0 -1
- package/dist/Notice-BHq_w0In.js.map +0 -1
- package/dist/Notice-CafEiN9-.cjs.map +0 -1
- package/dist/Txt-Dy6h8r0i.cjs +0 -30
- package/dist/Txt-Dy6h8r0i.cjs.map +0 -1
- package/dist/Txt-vsOCKfz7.js +0 -28
- package/dist/Txt-vsOCKfz7.js.map +0 -1
- package/dist/ask-user-B-bQks8m.js.map +0 -1
- package/dist/ask-user-M4Iso-dV.cjs.map +0 -1
- package/dist/buttons-group-BB5gHR9g.cjs +0 -186
- package/dist/buttons-group-BB5gHR9g.cjs.map +0 -1
- package/dist/buttons-group-C37zBBBT.js +0 -162
- package/dist/buttons-group-C37zBBBT.js.map +0 -1
- package/dist/chat-notification-CkJAwiut.cjs.map +0 -1
- package/dist/chat-notification-D7J8goLv.js.map +0 -1
- package/dist/chat-signal-CvrzAwZU.cjs.map +0 -1
- package/dist/chat-signal-zDrInrSG.js.map +0 -1
- package/dist/checkbox-CJHHWM9_.cjs.map +0 -1
- package/dist/checkbox-KmGlavo7.js.map +0 -1
- package/dist/code-block-BxYbxSJA.js.map +0 -1
- package/dist/code-block-CV2DTAQC.cjs.map +0 -1
- package/dist/code-diff-CRzg0c6L.js.map +0 -1
- package/dist/code-diff-pMNj9cR8.cjs.map +0 -1
- package/dist/code-editor-C6UdXg6f.js.map +0 -1
- package/dist/code-editor-DpiAzxSV.cjs.map +0 -1
- package/dist/combobox-styles-BqX8XbIZ.cjs.map +0 -1
- package/dist/combobox-styles-DtJtHdDL.js.map +0 -1
- package/dist/command-CG-xBOWo.cjs.map +0 -1
- package/dist/command-ClU0BWYV.js.map +0 -1
- package/dist/components/DashboardCard.cjs.js +0 -10
- package/dist/components/DashboardCard.cjs.js.map +0 -1
- package/dist/components/DashboardCard.d.ts +0 -2
- package/dist/components/DashboardCard.es.js +0 -2
- package/dist/components/DashboardCard.es.js.map +0 -1
- package/dist/composer-ColBQeZQ.cjs.map +0 -1
- package/dist/composer-DNFPD4wR.js.map +0 -1
- package/dist/dashboard-card-CLJWnMx0.js +0 -9
- package/dist/dashboard-card-CLJWnMx0.js.map +0 -1
- package/dist/dashboard-card-DqXDKeKM.cjs +0 -11
- package/dist/dashboard-card-DqXDKeKM.cjs.map +0 -1
- package/dist/data-code-section-DGAvbKcL.cjs.map +0 -1
- package/dist/data-code-section-DgiGQ4bu.js.map +0 -1
- package/dist/data-keys-and-values-Bj-Ai6IU.js.map +0 -1
- package/dist/data-keys-and-values-RhYgnv14.cjs.map +0 -1
- package/dist/data-list-BpYV-2Bj.cjs.map +0 -1
- package/dist/data-list-CcPJ3wcC.js.map +0 -1
- package/dist/data-list-spacer-Ckmvj2AQ.js.map +0 -1
- package/dist/data-list-spacer-DkhJEYvX.cjs.map +0 -1
- package/dist/data-list-top-Bjn3dbrS.cjs.map +0 -1
- package/dist/data-list-top-DSxMTI-3.js.map +0 -1
- package/dist/data-panel-BtWRQbBH.cjs.map +0 -1
- package/dist/data-panel-D2A2fowo.js.map +0 -1
- package/dist/date-picker-BgjIY11K.js.map +0 -1
- package/dist/date-picker-DLgPL4k5.cjs.map +0 -1
- package/dist/date-time-range-picker-Cd2ElMjR.cjs.map +0 -1
- package/dist/date-time-range-picker-rUNfmZXE.js.map +0 -1
- package/dist/dialog-0XUJ6qpV.cjs.map +0 -1
- package/dist/dialog-CRa50pTt.js.map +0 -1
- package/dist/drawer-BsstUUG0.js.map +0 -1
- package/dist/drawer-BxR90K5s.cjs.map +0 -1
- package/dist/dropdown-menu-DC74vW0L.cjs.map +0 -1
- package/dist/dropdown-menu-Rb1BFYCV.js.map +0 -1
- package/dist/field-block-Cux0sH4A.js.map +0 -1
- package/dist/field-block-DjOm7woP.cjs.map +0 -1
- package/dist/filter-bar-chip-Ccl98EC3.js.map +0 -1
- package/dist/filter-bar-chip-sj0_hRnm.cjs.map +0 -1
- package/dist/fonts-BD38FYaQ.js +0 -51
- package/dist/fonts-BD38FYaQ.js.map +0 -1
- package/dist/fonts-DxgDxyKF.cjs +0 -56
- package/dist/fonts-DxgDxyKF.cjs.map +0 -1
- package/dist/horizontal-bars--3zbYCLD.cjs.map +0 -1
- package/dist/horizontal-bars-D-PcG5lk.js.map +0 -1
- package/dist/hover-card-BA6yafQ4.cjs.map +0 -1
- package/dist/hover-card-ec6-g-jY.js.map +0 -1
- package/dist/input-CIrPZ-h_.cjs.map +0 -1
- package/dist/input-CnCDgkcF.js.map +0 -1
- package/dist/input-group-B2OeERmc.cjs.map +0 -1
- package/dist/input-group-Cjcx7BFu.js.map +0 -1
- package/dist/kbd-DfPfG2tF.js +0 -32
- package/dist/kbd-DfPfG2tF.js.map +0 -1
- package/dist/kbd-oFN7OUs5.cjs +0 -34
- package/dist/kbd-oFN7OUs5.cjs.map +0 -1
- package/dist/label-Cup1NBr6.js +0 -13
- package/dist/label-Cup1NBr6.js.map +0 -1
- package/dist/label-zAZieYjS.cjs.map +0 -1
- package/dist/logs-data-list-DpjwD0cx.js.map +0 -1
- package/dist/logs-data-list-Ixf3-LUC.cjs.map +0 -1
- package/dist/main-sidebar-link-active-BdR1g6As.cjs.map +0 -1
- package/dist/main-sidebar-link-active-C5KQFLny.js.map +0 -1
- package/dist/markdown-renderer-DcBAdWTo.cjs.map +0 -1
- package/dist/markdown-renderer-o3r77XBU.js.map +0 -1
- package/dist/message-D-oFS9ys.cjs.map +0 -1
- package/dist/message-DFPYEfGS.js.map +0 -1
- package/dist/message-scroller-DM_Jzo-m.cjs.map +0 -1
- package/dist/message-scroller-gXNPrq77.js.map +0 -1
- package/dist/metrics-card-DVYWilBf.cjs.map +0 -1
- package/dist/metrics-card-SKimEVN0.js.map +0 -1
- package/dist/metrics-kpi-card-CaQWWytJ.js.map +0 -1
- package/dist/metrics-kpi-card-Cnb19DyU.cjs.map +0 -1
- package/dist/metrics-line-chart-D9aGUvEA.js.map +0 -1
- package/dist/metrics-line-chart-ZrbaUENW.cjs.map +0 -1
- package/dist/new-theme.css +0 -23
- package/dist/page-header-BrlCjxu9.js.map +0 -1
- package/dist/page-header-DLK7rmUu.cjs.map +0 -1
- package/dist/popover-DxOaFlBL.js.map +0 -1
- package/dist/popover-ef-lHX_5.cjs.map +0 -1
- package/dist/property-filter-applied-2t-Zr99O.js.map +0 -1
- package/dist/property-filter-applied-DNpFjgMo.cjs.map +0 -1
- package/dist/sankey-chart-DScBR9J9.cjs.map +0 -1
- package/dist/sankey-chart-vzMdmjDh.js.map +0 -1
- package/dist/scroll-area--2s53dO8.cjs.map +0 -1
- package/dist/scroll-area-Dg3ZGWGD.js.map +0 -1
- package/dist/search-field-block-764t308O.js.map +0 -1
- package/dist/search-field-block-CM0Bis7B.cjs.map +0 -1
- package/dist/section-CCyCDMyN.cjs.map +0 -1
- package/dist/section-pgcWt9QF.js.map +0 -1
- package/dist/select-DC9zOO73.js.map +0 -1
- package/dist/select-DLnQFIXX.cjs.map +0 -1
- package/dist/settings-container-B_MAYTy4.cjs +0 -30
- package/dist/settings-container-B_MAYTy4.cjs.map +0 -1
- package/dist/settings-container-ErO-hjRc.js +0 -27
- package/dist/settings-container-ErO-hjRc.js.map +0 -1
- package/dist/settings-layout-PhGU7ZqL.cjs.map +0 -1
- package/dist/settings-layout-Ui7D-mOv.js.map +0 -1
- package/dist/settings-row-CHTzPVkn.js.map +0 -1
- package/dist/settings-row-gt26LmUP.cjs.map +0 -1
- package/dist/skeleton-4D6A-D9t.js.map +0 -1
- package/dist/skeleton-CkUppQmt.cjs.map +0 -1
- package/dist/slider-BL4HPHsj.js.map +0 -1
- package/dist/slider-BfOspnBa.cjs.map +0 -1
- package/dist/spacings-CDCmPtL5.cjs +0 -183
- package/dist/spacings-CDCmPtL5.cjs.map +0 -1
- package/dist/spacings-CaAIP6VM.js +0 -175
- package/dist/spacings-CaAIP6VM.js.map +0 -1
- package/dist/span-payload-primitives-CtNMvVrq.cjs.map +0 -1
- package/dist/span-payload-primitives-D8AZ1lMI.js.map +0 -1
- package/dist/src/ds/components/DashboardCard/dashboard-card.d.ts +0 -6
- package/dist/src/ds/components/DashboardCard/dashboard-card.stories.d.ts +0 -9
- package/dist/src/ds/components/DashboardCard/index.d.ts +0 -1
- package/dist/src/ds/components/PageHeader/page-header-description.d.ts +0 -5
- package/dist/src/ds/components/PageHeader/page-header-root.d.ts +0 -22
- package/dist/src/ds/components/PageHeader/page-header-title.d.ts +0 -6
- package/dist/src/ds/components/PageHeader/page-header.d.ts +0 -2
- package/dist/src/ds/tokens/spacings.d.ts +0 -38
- package/dist/src/ds/tokens/tokens.stories.d.ts +0 -12
- package/dist/switch-C-F_a7Rn.js.map +0 -1
- package/dist/switch-DTkX34ow.cjs.map +0 -1
- package/dist/tabs-root-BAgoQQm2.js.map +0 -1
- package/dist/tabs-root-C5bSRgUs.cjs.map +0 -1
- package/dist/tabs-tab-8Vs3pg_2.js.map +0 -1
- package/dist/tabs-tab-D0SLrzpI.cjs.map +0 -1
- package/dist/textarea-Cm6seLTh.js +0 -70
- package/dist/textarea-Cm6seLTh.js.map +0 -1
- package/dist/textarea-a0YUaWAE.cjs.map +0 -1
- package/dist/thread-rail-BYdHzcdu.js.map +0 -1
- package/dist/thread-rail-CCq8JEFt.cjs.map +0 -1
- package/dist/tool-approval-Bt6adekD.cjs.map +0 -1
- package/dist/tool-approval-DkgA6p5Z.js.map +0 -1
- package/dist/tool-call-CKOawYbR.js.map +0 -1
- package/dist/tool-call-CWW2DjX-.cjs.map +0 -1
- package/dist/tooltip-Chz35pft.js.map +0 -1
- package/dist/tooltip-DTIMvO8I.cjs.map +0 -1
- package/dist/traces-data-list-BfE5e8C_.cjs.map +0 -1
- package/dist/traces-data-list-Dfz9qD1_.js.map +0 -1
- package/new-theme.css +0 -23
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"main-sidebar-link-active-C5KQFLny.js","sources":["../src/ds/components/MainSidebar/main-sidebar-context.ts","../src/ds/components/MainSidebar/main-sidebar-mobile-trigger.tsx","../src/ds/components/MainSidebar/main-sidebar-nav.tsx","../src/ds/components/MainSidebar/main-sidebar-nav-label.tsx","../src/ds/components/MainSidebar/main-sidebar-nav-item-classes.ts","../src/ds/components/MainSidebar/main-sidebar-nav-link.tsx","../src/ds/components/MainSidebar/main-sidebar-nav-list.tsx","../src/ds/components/MainSidebar/main-sidebar-nav-section.tsx","../src/ds/components/MainSidebar/main-sidebar-nav-separator.tsx","../src/ds/components/MainSidebar/main-sidebar-root.tsx","../src/ds/components/MainSidebar/main-sidebar-trigger.tsx","../src/ds/components/MainSidebar/main-sidebar-provider.tsx","../src/ds/components/MainSidebar/main-sidebar-link-active.ts"],"sourcesContent":["import React from 'react';\nimport type { LinkComponent } from '@/ds/types/link-component';\n\nexport type SidebarState = 'default' | 'collapsed';\n\ntype MainSidebarContextValue = {\n state: SidebarState;\n desktopState: SidebarState;\n width: number;\n minWidth: number;\n maxWidth: number;\n collapseBelow: number;\n collapsedWidth: number;\n isMobile: boolean;\n openMobile: boolean;\n mobileTriggerRef: React.RefObject<HTMLButtonElement | null>;\n setOpenMobile: (open: boolean) => void;\n setMobileDrawerPresent: (present: boolean) => void;\n toggleSidebar: () => void;\n setWidth: (width: number) => void;\n collapse: () => void;\n expand: () => void;\n commit: () => void;\n setGestureActive: (active: boolean) => void;\n LinkComponent?: LinkComponent;\n};\n\n// Split: drawer open-state lives in its own context so navigation rows\n// do not re-render when the mobile drawer toggles.\nexport type MobileDrawerContextValue = {\n openMobile: boolean;\n mobileTriggerRef: React.RefObject<HTMLButtonElement | null>;\n setOpenMobile: (open: boolean) => void;\n setMobileDrawerPresent: (present: boolean) => void;\n};\n\nexport type MainSidebarStateContextValue = Omit<\n MainSidebarContextValue,\n 'openMobile' | 'mobileTriggerRef' | 'setOpenMobile' | 'setMobileDrawerPresent'\n>;\n\nexport const MainSidebarContext = React.createContext<MainSidebarStateContextValue | null>(null);\nexport const MobileDrawerContext = React.createContext<MobileDrawerContextValue | null>(null);\n\n/** Reads sidebar state and actions without subscribing to mobile drawer state. */\nexport function useMaybeSidebarState(): MainSidebarStateContextValue | null {\n return React.useContext(MainSidebarContext);\n}\n\nexport function useMainSidebar(): MainSidebarContextValue {\n const ctx = React.useContext(MainSidebarContext);\n const drawer = React.useContext(MobileDrawerContext);\n if (!ctx || !drawer) {\n throw new Error('useMainSidebar must be used within a MainSidebarProvider.');\n }\n return { ...ctx, ...drawer };\n}\n\nexport function useMaybeSidebar(): MainSidebarContextValue | null {\n const ctx = React.useContext(MainSidebarContext);\n const drawer = React.useContext(MobileDrawerContext);\n if (!ctx || !drawer) return null;\n return { ...ctx, ...drawer };\n}\n\n/** Reads only mobile drawer state. Cheap — no re-renders on sidebar resize. */\nexport function useMobileDrawer(): MobileDrawerContextValue {\n const drawer = React.useContext(MobileDrawerContext);\n if (!drawer) throw new Error('useMobileDrawer must be used within a MainSidebarProvider.');\n return drawer;\n}\n","import { MenuIcon } from 'lucide-react';\nimport type { ComponentPropsWithoutRef } from 'react';\nimport { useMainSidebar } from './main-sidebar-context';\nimport { cn } from '@/lib/utils';\n\nexport type MainSidebarMobileTriggerProps = ComponentPropsWithoutRef<'button'> & {\n icon?: React.ReactNode;\n};\n\nexport function MainSidebarMobileTrigger({\n className,\n icon,\n 'aria-label': ariaLabel = 'Open navigation menu',\n onClick,\n ...props\n}: MainSidebarMobileTriggerProps) {\n const { isMobile, mobileTriggerRef, setOpenMobile } = useMainSidebar();\n return (\n <button\n ref={mobileTriggerRef}\n type=\"button\"\n aria-label={ariaLabel}\n aria-hidden={!isMobile}\n tabIndex={isMobile ? 0 : -1}\n data-mobile-only\n {...props}\n onClick={event => {\n onClick?.(event);\n if (!event.defaultPrevented) setOpenMobile(true);\n }}\n className={cn(\n 'new-theme inline-flex size-10 items-center justify-center rounded-md',\n // compound selector, not `in-*` — its `:where()` ties with a consumer's later `.inline-flex`\n \"[[data-sidebar-mobile='false']_&]:hidden\",\n \"[[data-sidebar-mobile-present='true']_&]:invisible\",\n 'text-muted-foreground hover:bg-sidebar-accent hover:text-foreground',\n 'focus-visible:ring-1 focus-visible:ring-accent1 focus-visible:outline-hidden',\n className,\n )}\n >\n {icon ?? <MenuIcon className=\"size-5\" />}\n </button>\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\nimport { ScrollArea } from '@/ds/components/ScrollArea';\nimport { cn } from '@/lib/utils';\n\nexport type MainSidebarNavProps = ComponentPropsWithoutRef<'nav'>;\n\nexport function MainSidebarNav({\n 'aria-label': ariaLabel = 'Main',\n children,\n className,\n ...props\n}: MainSidebarNavProps) {\n return (\n <nav aria-label={ariaLabel} className={cn('flex min-h-0 flex-1 flex-col', className)} {...props}>\n <ScrollArea className=\"min-h-0 flex-1\" viewPortClassName=\"px-0.5\">\n {children}\n </ScrollArea>\n </nav>\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\nimport type { SidebarState } from './main-sidebar-context';\nimport { useMaybeSidebarState } from './main-sidebar-context';\nimport { VisuallyHidden } from '@/ds/primitives/visually-hidden';\nimport { cn } from '@/lib/utils';\n\nexport type MainSidebarNavLabelProps = ComponentPropsWithoutRef<'span'> & {\n /** Override sidebar state. Defaults to context, then `'default'`. */\n state?: SidebarState;\n};\n\n/**\n * Label slot for `MainSidebar.NavLink` rows.\n *\n * Auto-hides via `VisuallyHidden` when the sidebar is collapsed (icon-only row),\n * so screen readers still announce the label without it leaking outside the\n * 28px collapsed item. Handles single-line truncation when expanded.\n *\n * Required for custom `render` and legacy `asChild` consumers — the default\n * `link={...}` path wraps the name internally, but custom elements bring their\n * own children, so the label needs to opt into the collapse-aware rendering.\n */\nexport function MainSidebarNavLabel({ children, className, state: stateProp, ...rest }: MainSidebarNavLabelProps) {\n const ctx = useMaybeSidebarState();\n const state: SidebarState = stateProp ?? ctx?.state ?? 'default';\n if (state === 'collapsed') {\n return <VisuallyHidden>{children}</VisuallyHidden>;\n }\n return (\n <span {...rest} className={cn('min-w-0 flex-1 truncate text-left font-[450]', className)}>\n {children}\n </span>\n );\n}\n","import { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\nimport { cn } from '@/lib/utils';\n\nconst navItemVariants = cva('flex min-w-0 cursor-pointer items-center rounded-lg whitespace-nowrap', {\n variants: {\n size: {\n default: 'h-8 text-ui-md',\n sm: 'h-7 text-ui-sm',\n lg: 'h-9 text-ui-md',\n },\n },\n defaultVariants: {\n size: 'sm',\n },\n});\n\ntype NavItemVariantProps = VariantProps<typeof navItemVariants>;\n\nexport type MainSidebarNavItemSize = NonNullable<NavItemVariantProps['size']>;\n\ntype NavRowSurfaceOptions = {\n isActive?: boolean;\n isFeatured?: boolean;\n};\n\ntype NavItemLayoutOptions = {\n isCollapsed?: boolean;\n level?: number;\n size?: MainSidebarNavItemSize;\n};\n\ntype ItemStyleOptions = NavRowSurfaceOptions & NavItemLayoutOptions;\n\nconst nestedExpandedItemClasses = (level: number) => {\n if (level <= 0) return 'gap-2 py-1 px-3';\n if (level === 1) return 'gap-2 py-1 pr-3 pl-8 text-ui-sm h-8';\n if (level === 2) return 'gap-2 py-1 pr-3 pl-10 text-ui-sm h-8';\n return 'gap-2 py-1 pr-3 pl-12 text-ui-sm h-8';\n};\n\nconst idleSurface = cn(\n 'rounded-lg text-muted-foreground [&_svg]:text-muted-foreground/70',\n 'hover:bg-sidebar-accent hover:text-foreground [&:hover_svg]:text-foreground',\n);\n\nconst activeSurface =\n 'bg-selected text-foreground hover:bg-selected hover:text-foreground [&_svg]:text-foreground [&:hover_svg]:text-foreground';\n\nconst featuredSurface = cn(\n 'my-2 border border-accent1/30 bg-accent1Dark text-accent1 hover:bg-accent1Darker hover:text-accent1',\n 'dark:border-transparent dark:bg-accent1 dark:text-black dark:hover:bg-accent1/90 dark:hover:text-black',\n '[&_svg]:text-accent1 dark:[&_svg]:text-black/75 [&:hover_svg]:text-accent1 dark:[&:hover_svg]:text-black',\n);\n\nexport const navRowSurfaceClasses = ({ isActive, isFeatured }: NavRowSurfaceOptions) =>\n cn(idleSurface, isActive && activeSurface, isFeatured && featuredSurface);\n\nexport const navItemLayoutClasses = ({ isCollapsed, level = 0, size }: NavItemLayoutOptions) =>\n cn(\n navItemVariants({ size }),\n 'w-full justify-start transition-[padding,gap,background-color,color] duration-slow ease-out-custom motion-reduce:transition-none',\n '[&_svg]:size-4 [&_svg]:shrink-0 [&_svg]:transition-colors [&_svg]:duration-normal motion-reduce:[&_svg]:transition-none',\n 'focus-visible:shadow-focus-ring focus-visible:ring-1 focus-visible:ring-accent1 focus-visible:outline-hidden',\n !isCollapsed && nestedExpandedItemClasses(level),\n isCollapsed && 'gap-0 px-[13.5px] py-0',\n );\n\nexport const navItemClasses = ({ isActive, isCollapsed, isFeatured, level, size }: ItemStyleOptions = {}) =>\n cn(\n navItemLayoutClasses({ isCollapsed, level, size }),\n navRowSurfaceClasses({ isActive, isFeatured }),\n isCollapsed && !isActive && '[&_svg]:text-muted-foreground',\n );\n","import React from 'react';\nimport type { ComponentProps } from 'react';\nimport type { SidebarState } from './main-sidebar-context';\nimport { useMaybeSidebarState } from './main-sidebar-context';\nimport { navItemClasses, navItemLayoutClasses, navRowSurfaceClasses } from './main-sidebar-nav-item-classes';\nimport type { MainSidebarNavItemSize } from './main-sidebar-nav-item-classes';\nimport { MainSidebarNavLabel } from './main-sidebar-nav-label';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/ds/components/Tooltip';\nimport type { LinkComponent } from '@/ds/types/link-component';\nimport { cn } from '@/lib/utils';\n\nexport type NavLink = {\n name: string;\n url: string;\n icon?: React.ReactNode;\n children?: NavLink[];\n isActive?: boolean;\n variant?: 'default' | 'featured';\n tooltipMsg?: string;\n /** @deprecated Prefer nested `children`; accepted for callers still rendering manual sublinks. */\n indent?: boolean;\n};\n\nexport type MainSidebarNavLinkProps = Omit<ComponentProps<'li'>, 'children'> & {\n link?: NavLink;\n isActive?: boolean;\n state?: SidebarState;\n children?: React.ReactNode;\n size?: MainSidebarNavItemSize;\n render?: React.ReactElement<SlottedNavChildProps>;\n action?: React.ReactNode;\n LinkComponent?: LinkComponent;\n level?: number;\n subItems?: React.ReactNode;\n /**\n * When true, render `children` as the interactive element.\n * Use for `<button>` items or custom router Links. Item classes are forwarded\n * to the slotted element. `link.url` and `LinkComponent` are ignored; other\n * `link` presentation fields still apply when supplied.\n *\n * @deprecated Prefer typed render composition for new APIs; this legacy\n * slotted prop will be migrated separately.\n */\n asChild?: boolean;\n};\n\ntype SlottedNavChildProps = {\n className?: string;\n};\n\nexport function MainSidebarNavLink({\n link,\n state: stateProp,\n children,\n isActive,\n size,\n render,\n action,\n className,\n LinkComponent: LinkProp,\n level: levelProp,\n subItems,\n asChild = false,\n ...props\n}: MainSidebarNavLinkProps) {\n if (render && asChild) {\n throw new Error('MainSidebarNavLink accepts either `render` or `asChild`, not both.');\n }\n\n const ctx = useMaybeSidebarState();\n const state: SidebarState = stateProp ?? ctx?.state ?? 'default';\n const Link: LinkComponent = LinkProp ?? ctx?.LinkComponent ?? 'a';\n const isCollapsed = state === 'collapsed';\n const isFeatured = link?.variant === 'featured';\n const level = levelProp ?? (link?.indent ? 1 : 0);\n const rowAction = isCollapsed ? undefined : action;\n\n const itemClassName = rowAction\n ? cn(navItemLayoutClasses({ level, size }), 'flex-1 pr-1')\n : navItemClasses({ isActive, isCollapsed, isFeatured, level, size });\n\n return (\n <li {...props} className={cn('relative flex min-w-0 flex-col', className)}>\n <NavRowBody action={rowAction} surfaceClassName={navRowSurfaceClasses({ isActive, isFeatured })}>\n <NavRowTooltip label={navTooltipLabel(link, isCollapsed)}>\n {navInteractiveRow({ render, asChild, children, link, state, Link, className: itemClassName })}\n </NavRowTooltip>\n </NavRowBody>\n {!isCollapsed && subItems}\n </li>\n );\n}\n\nfunction navInteractiveRow({\n render,\n asChild,\n children,\n link,\n state,\n Link,\n className,\n}: {\n render?: React.ReactElement<SlottedNavChildProps>;\n asChild: boolean;\n children?: React.ReactNode;\n link?: NavLink;\n state: SidebarState;\n Link: LinkComponent;\n className: string;\n}) {\n if (render) return React.cloneElement(render, { className: cn(className, render.props.className) });\n\n if (asChild) {\n if (!React.isValidElement<SlottedNavChildProps>(children)) {\n throw new Error(\n 'MainSidebarNavLink requires a valid React element child when `asChild` is true so it can apply `SlottedNavChildProps` and merge `itemClassName`.',\n );\n }\n\n return React.cloneElement(children, { className: cn(className, children.props.className) });\n }\n\n if (!link) return children;\n\n const externalParams = /^(https?:)?\\/\\//.test(link.url) ? { target: '_blank', rel: 'noreferrer' } : {};\n\n return (\n <Link href={link.url} {...externalParams} className={className}>\n {link.icon}\n <MainSidebarNavLabel state={state}>{link.name}</MainSidebarNavLabel>\n {children}\n </Link>\n );\n}\n\nfunction navTooltipLabel(link: NavLink | undefined, isCollapsed: boolean) {\n if (!link) return undefined;\n if (link.tooltipMsg) return isCollapsed ? `${link.name} | ${link.tooltipMsg}` : link.tooltipMsg;\n return isCollapsed ? link.name : undefined;\n}\n\nfunction NavRowTooltip({ label, children }: { label?: string; children: React.ReactNode }) {\n if (!React.isValidElement(children)) return children;\n\n return (\n <Tooltip disabled={!label}>\n <TooltipTrigger render={children} />\n {label ? (\n <TooltipContent side=\"right\" align=\"center\" sideOffset={16}>\n {label}\n </TooltipContent>\n ) : null}\n </Tooltip>\n );\n}\n\nfunction NavRowBody({\n action,\n surfaceClassName,\n children,\n}: {\n action?: React.ReactNode;\n surfaceClassName: string;\n children: React.ReactNode;\n}) {\n if (!action) return children;\n\n return (\n <div className={cn('flex min-w-0 items-center pr-1', surfaceClassName)}>\n {children}\n {action}\n </div>\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport type MainSidebarNavListProps = ComponentPropsWithoutRef<'ul'>;\n\nexport function MainSidebarNavList({ className, children, ...props }: MainSidebarNavListProps) {\n return (\n <ul className={cn('grid grid-cols-[minmax(0,1fr)] content-center items-start gap-0.5', className)} {...props}>\n {children}\n </ul>\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\nimport type { NavLink } from './main-sidebar-nav-link';\nimport { cn } from '@/lib/utils';\n\nexport type NavSection = {\n key: string;\n title?: string;\n href?: string;\n links: NavLink[];\n separator?: boolean;\n isHeaderActive?: boolean;\n};\n\nexport type MainSidebarNavSectionProps = ComponentPropsWithoutRef<'section'>;\n\nexport function MainSidebarNavSection({ className, children, ...props }: MainSidebarNavSectionProps) {\n return (\n <section className={cn('relative grid grid-cols-[minmax(0,1fr)] content-center items-start', className)} {...props}>\n {children}\n </section>\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport type MainSidebarNavSeparatorProps = ComponentPropsWithoutRef<'div'>;\n\nexport function MainSidebarNavSeparator({ className, ...props }: MainSidebarNavSeparatorProps) {\n return (\n <div\n role=\"separator\"\n aria-orientation=\"horizontal\"\n className={cn(\n 'relative min-h-5',\n '[&:after]:absolute [&:after]:inset-x-3 [&:after]:top-1/2 [&:after]:block [&:after]:h-0 [&:after]:border-t [&:after]:border-border [&:after]:content-[\"\"]',\n className,\n )}\n {...props}\n />\n );\n}\n","import '../../../../new-theme.css';\nimport { MenuIcon } from 'lucide-react';\nimport { useCallback, useEffect, useRef } from 'react';\nimport type { KeyboardEvent as ReactKeyboardEvent, PointerEvent as ReactPointerEvent } from 'react';\nimport { useMainSidebar } from './main-sidebar-context';\nimport { Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerTitle } from '@/ds/components/Drawer';\nimport { ResizeHandleIndicator } from '@/ds/primitives/resize-handle-indicator';\nimport { VisuallyHidden } from '@/ds/primitives/visually-hidden';\nimport { cn } from '@/lib/utils';\n\nexport type MainSidebarRootProps = {\n children: React.ReactNode;\n className?: string;\n mobileMode?: 'drawer' | 'takeover';\n};\n\nconst KEYBOARD_STEP = 10;\nconst DRAG_THRESHOLD = 5;\n\nexport function MainSidebarRoot({ children, className, mobileMode = 'drawer' }: MainSidebarRootProps) {\n const {\n state,\n width,\n minWidth,\n maxWidth,\n collapseBelow,\n collapsedWidth,\n isMobile,\n openMobile,\n mobileTriggerRef,\n setOpenMobile,\n setMobileDrawerPresent,\n setWidth,\n collapse,\n expand,\n commit,\n toggleSidebar,\n setGestureActive,\n } = useMainSidebar();\n const isCollapsed = state === 'collapsed';\n const isHidden = isCollapsed && collapsedWidth === 0;\n\n const draggedRef = useRef(false);\n const dragCleanupRef = useRef<(() => void) | null>(null);\n\n useEffect(() => {\n return () => {\n dragCleanupRef.current?.();\n dragCleanupRef.current = null;\n };\n }, []);\n\n const onPointerDown = useCallback(\n (event: ReactPointerEvent<HTMLDivElement>) => {\n if (event.button !== 0) return;\n event.preventDefault();\n\n draggedRef.current = false;\n setGestureActive(true);\n\n const startX = event.clientX;\n const handle = event.currentTarget;\n const pointerId = event.pointerId;\n\n try {\n handle.setPointerCapture(pointerId);\n } catch {\n // The pointer may have ended before capture.\n }\n\n const sidebarEl = handle.parentElement;\n const sidebarLeft = sidebarEl ? sidebarEl.getBoundingClientRect().left : 0;\n\n const prevCursor = document.body.style.cursor;\n const prevUserSelect = document.body.style.userSelect;\n\n const onMove = (ev: PointerEvent) => {\n if (ev.pointerId !== pointerId) return;\n const dx = ev.clientX - startX;\n if (!draggedRef.current) {\n if (Math.abs(dx) <= DRAG_THRESHOLD) return;\n draggedRef.current = true;\n document.body.style.cursor = 'col-resize';\n document.body.style.userSelect = 'none';\n }\n\n const cursorWidth = ev.clientX - sidebarLeft;\n\n if (collapseBelow > 0 && cursorWidth < collapseBelow) {\n collapse();\n return;\n }\n expand();\n setWidth(cursorWidth);\n };\n const cleanup = (ev?: PointerEvent) => {\n if (ev && ev.pointerId !== pointerId) return;\n window.removeEventListener('pointermove', onMove);\n window.removeEventListener('pointerup', cleanup);\n window.removeEventListener('pointercancel', cleanup);\n document.body.style.cursor = prevCursor;\n document.body.style.userSelect = prevUserSelect;\n setGestureActive(false);\n commit();\n dragCleanupRef.current = null;\n };\n dragCleanupRef.current = () => cleanup();\n window.addEventListener('pointermove', onMove);\n window.addEventListener('pointerup', cleanup);\n window.addEventListener('pointercancel', cleanup);\n },\n [collapseBelow, setWidth, expand, collapse, commit, setGestureActive],\n );\n\n const onClick = useCallback(() => {\n if (draggedRef.current) {\n draggedRef.current = false;\n return;\n }\n toggleSidebar();\n }, [toggleSidebar]);\n\n const onKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLDivElement>) => {\n switch (event.key) {\n case 'Enter':\n case ' ': {\n event.preventDefault();\n toggleSidebar();\n return;\n }\n case 'ArrowLeft': {\n event.preventDefault();\n if (isCollapsed) return;\n setWidth(width - KEYBOARD_STEP);\n commit();\n return;\n }\n case 'ArrowRight': {\n event.preventDefault();\n if (isCollapsed) {\n expand();\n commit();\n return;\n }\n setWidth(width + KEYBOARD_STEP);\n commit();\n return;\n }\n case 'Home': {\n event.preventDefault();\n expand();\n setWidth(minWidth);\n commit();\n return;\n }\n case 'End': {\n event.preventDefault();\n expand();\n setWidth(maxWidth);\n commit();\n return;\n }\n }\n },\n [isCollapsed, width, minWidth, maxWidth, setWidth, expand, commit, toggleSidebar],\n );\n\n // Client-side routers preventDefault but should still close the drawer.\n const closeOnAnchor = useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n if (!(event.target instanceof Element)) return;\n const anchor = event.target.closest<HTMLAnchorElement>('a');\n if (!anchor || !anchor.hasAttribute('href')) return;\n\n if (event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return;\n\n if (anchor.target === '_blank' || anchor.hasAttribute('download')) return;\n setOpenMobile(false);\n },\n [setOpenMobile],\n );\n\n if (isMobile) {\n return (\n <Drawer\n side=\"left\"\n open={openMobile}\n onOpenChange={setOpenMobile}\n onOpenChangeComplete={open => {\n if (!open) setMobileDrawerPresent(false);\n }}\n >\n <DrawerContent\n data-mobile-mode={mobileMode}\n finalFocus={mobileTriggerRef}\n showCloseButton={mobileMode === 'drawer'}\n className={cn(\n 'new-theme border-0 bg-sidebar text-foreground',\n mobileMode === 'takeover'\n ? 'w-[calc(100%-3.5rem)] max-w-none overflow-visible rounded-l-none rounded-r-3xl pt-[env(safe-area-inset-top)] pb-[env(safe-area-inset-bottom)] shadow-xl'\n : 'w-3/4 max-w-(--sidebar-width-mobile) overflow-hidden rounded-none shadow-xl',\n className,\n )}\n >\n {mobileMode === 'takeover' ? (\n <DrawerClose asChild>\n <button\n type=\"button\"\n aria-label=\"Close\"\n className=\"group duration-fast absolute top-2 -right-12 z-10 inline-flex size-11 touch-manipulation items-center justify-center transition-opacity group-data-[ending-style]/popup:opacity-0 focus-visible:outline-hidden motion-reduce:duration-0\"\n >\n <span className=\"border-border bg-card/95 text-muted-foreground group-hover:bg-card group-hover:text-foreground group-focus-visible:ring-accent1 inline-flex size-9 items-center justify-center rounded-full border shadow-lg backdrop-blur-sm group-focus-visible:ring-1\">\n <MenuIcon className=\"size-4\" />\n </span>\n </button>\n </DrawerClose>\n ) : null}\n <VisuallyHidden asChild>\n <DrawerTitle>Navigation</DrawerTitle>\n </VisuallyHidden>\n <VisuallyHidden asChild>\n <DrawerDescription>Primary site navigation drawer</DrawerDescription>\n </VisuallyHidden>\n <div\n onClick={closeOnAnchor}\n className={cn(\n 'flex h-full min-h-0 flex-col overflow-hidden py-2',\n mobileMode === 'takeover' ? 'px-4' : 'px-3',\n )}\n >\n {children}\n </div>\n </DrawerContent>\n </Drawer>\n );\n }\n\n const currentWidth = isCollapsed ? collapsedWidth : width;\n return (\n <div\n className={cn(\n 'new-theme sidebar-layout group/sidebar t-resize relative min-h-0 shrink-0 self-stretch bg-sidebar text-foreground',\n 'w-(--sidebar-width)',\n 'in-data-[sidebar-gesture=active]:transition-none',\n className,\n\n isHidden && 'border-r-0 border-transparent',\n )}\n >\n <div\n className={cn(\n 'flex h-full min-h-0 flex-col overflow-hidden',\n 'transition-opacity duration-200 motion-reduce:transition-none',\n 'px-2',\n isHidden && 'pointer-events-none px-0 opacity-0',\n )}\n >\n {children}\n </div>\n\n <div\n role=\"separator\"\n aria-orientation=\"vertical\"\n\n aria-valuenow={isCollapsed ? undefined : currentWidth}\n aria-valuemin={isCollapsed ? undefined : minWidth}\n aria-valuemax={isCollapsed ? undefined : maxWidth}\n aria-valuetext={isCollapsed ? 'collapsed' : `${currentWidth} pixels`}\n aria-label={`Resize sidebar. Arrow keys to resize, Enter to ${isCollapsed ? 'expand' : 'collapse'}.`}\n tabIndex={0}\n onPointerDown={onPointerDown}\n onClick={onClick}\n onKeyDown={onKeyDown}\n className={cn(\n 'group absolute top-0 -right-1 z-10 h-full w-2 cursor-col-resize touch-none',\n 'flex items-center justify-center',\n 'focus-visible:outline-hidden',\n )}\n >\n <ResizeHandleIndicator\n className={cn(\n 'via-foreground/30 group-hover:opacity-100',\n 'group-focus-visible:via-accent1 group-focus-visible:opacity-100',\n 'in-data-[sidebar-gesture=active]:via-foreground/45 in-data-[sidebar-gesture=active]:opacity-100',\n )}\n />\n </div>\n </div>\n );\n}\n","import { PanelRightIcon } from 'lucide-react';\nimport type { ComponentPropsWithoutRef } from 'react';\nimport { useMainSidebar } from './main-sidebar-context';\nimport { Kbd } from '@/ds/components/Kbd';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/ds/components/Tooltip';\nimport { cn } from '@/lib/utils';\n\nexport type MainSidebarTriggerProps = ComponentPropsWithoutRef<'button'>;\n\nexport function MainSidebarTrigger({ className, onClick, ...props }: MainSidebarTriggerProps) {\n const { desktopState, toggleSidebar } = useMainSidebar();\n const isCollapsed = desktopState === 'collapsed';\n\n return (\n <Tooltip>\n <TooltipTrigger\n render={\n <button\n type=\"button\"\n aria-label=\"Toggle sidebar\"\n aria-expanded={!isCollapsed}\n {...props}\n onClick={event => {\n onClick?.(event);\n if (!event.defaultPrevented) toggleSidebar();\n }}\n className={cn(\n 'flex items-center justify-center rounded-md text-muted-foreground',\n 'size-7',\n isCollapsed ? 'mx-auto' : 'ml-auto',\n 'hover:bg-sidebar-accent hover:text-foreground',\n 'transition-colors duration-normal ease-out-custom motion-reduce:transition-none',\n 'focus-visible:shadow-focus-ring focus-visible:ring-1 focus-visible:ring-accent1 focus-visible:outline-hidden',\n '[&_svg]:size-4 [&_svg]:text-muted-foreground [&_svg]:transition-transform [&_svg]:duration-slow [&_svg]:ease-out-custom motion-reduce:[&_svg]:transition-none [&:hover_svg]:text-foreground',\n className,\n )}\n >\n <PanelRightIcon\n className={cn({\n 'rotate-180': isCollapsed,\n })}\n />\n </button>\n }\n />\n\n <TooltipContent>\n <span className=\"inline-flex items-center gap-1.5\">\n Toggle Sidebar\n <Kbd size=\"xs\" className=\"border-border bg-muted text-muted-foreground\">\n [\n </Kbd>\n </span>\n </TooltipContent>\n </Tooltip>\n );\n}\n","import React from 'react';\nimport type { CSSProperties } from 'react';\nimport {\n MainSidebarContext,\n MobileDrawerContext,\n type MobileDrawerContextValue,\n type SidebarState,\n} from './main-sidebar-context';\nimport type { LinkComponent } from '@/ds/types/link-component';\n\nconst SIDEBAR_STATE_KEY = 'sidebar:state';\nconst SIDEBAR_WIDTH_KEY = 'sidebar:width';\n\nconst SIDEBAR_WIDTH_VAR = '--sidebar-width';\n\ntype InitialSidebarState = {\n state: SidebarState;\n width: number;\n};\n\ntype SidebarScopeStyle = CSSProperties & {\n '--sidebar-width': string;\n '--sidebar-width-mobile': string;\n};\n\nexport type MainSidebarProviderProps = {\n children: React.ReactNode;\n /** Initial state before localStorage hydrates. Defaults to `'default'`. */\n defaultState?: SidebarState;\n /** Default expanded width in px. Defaults to `240`. */\n defaultWidth?: number;\n /** Minimum draggable width in px. Defaults to `200`. */\n minWidth?: number;\n /** Maximum draggable width in px. Defaults to `480`. */\n maxWidth?: number;\n /** Drag below this value snaps the sidebar closed. Defaults to `minWidth` (snap to collapsed when dragged below the expanded minimum). Pass `0` to disable snap. */\n collapseBelow?: number;\n /** Width in px when collapsed. Defaults to `64`. Set to `0` for fully hidden. */\n collapsedWidth?: number;\n /** Disable the global ⌘B / Ctrl+B toggle shortcut. Defaults to `true` so browser shortcuts are preserved. */\n disableKeyboardShortcut?: boolean;\n /** Scope-key for localStorage. Allows multiple independent sidebars per app. */\n storageKey?: string;\n /** Mobile breakpoint in px (max-width). Below this, sidebar renders as a drawer. Defaults to `1024`. */\n mobileBreakpoint?: number;\n /** Drawer max-width on mobile in px. Actual width is `min(75vw, mobileWidth)`. Defaults to `360`. */\n mobileWidth?: number;\n /** Default LinkComponent injected into NavLink/NavHeader. Falls back to plain `<a>` if omitted. */\n LinkComponent?: LinkComponent;\n};\n\nconst clamp = (v: number, lo: number, hi: number) => Math.min(hi, Math.max(lo, v));\n\nconst useIsoLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\n\nexport function MainSidebarProvider({\n children,\n defaultState = 'default',\n defaultWidth = 240,\n minWidth = 200,\n maxWidth = 480,\n collapseBelow,\n collapsedWidth = 64,\n disableKeyboardShortcut = true,\n storageKey,\n mobileBreakpoint = 1024,\n mobileWidth = 360,\n LinkComponent,\n}: MainSidebarProviderProps) {\n // Normalize props so bad inputs (defaultWidth < minWidth, min > max, etc.) never produce a broken layout.\n const safeMin = Math.max(0, Math.min(minWidth, maxWidth));\n const safeMax = Math.max(safeMin, maxWidth);\n const safeCollapsed = Math.max(0, Math.min(collapsedWidth, safeMax));\n const safeDefault = clamp(defaultWidth, safeMin, safeMax);\n // Default snap-zone = minWidth: dragging below the expanded min snaps to collapsed,\n // since below min the sidebar cannot render its expanded layout anyway.\n // Pass `collapseBelow={0}` to disable snap.\n const safeCollapseBelow = collapseBelow ?? safeMin;\n\n const stateStorageKey = storageKey ? `${storageKey}:${SIDEBAR_STATE_KEY}` : SIDEBAR_STATE_KEY;\n const widthStorageKey = storageKey ? `${storageKey}:${SIDEBAR_WIDTH_KEY}` : SIDEBAR_WIDTH_KEY;\n\n // Hydrate synchronously from localStorage so first paint is already at the correct width.\n // Falls back to clamped defaults during SSR or when storage is unavailable.\n const readInitial = (): InitialSidebarState => {\n if (typeof window === 'undefined') return { state: defaultState, width: safeDefault };\n try {\n let nextState: SidebarState = defaultState;\n let nextWidth = safeDefault;\n const storedState = window.localStorage.getItem(stateStorageKey);\n if (storedState === 'collapsed' || storedState === 'default') nextState = storedState;\n const storedWidth = window.localStorage.getItem(widthStorageKey);\n if (storedWidth !== null) {\n const parsed = Number(storedWidth);\n if (Number.isFinite(parsed)) nextWidth = clamp(parsed, safeMin, safeMax);\n }\n return { state: nextState, width: nextWidth };\n } catch {\n return { state: defaultState, width: safeDefault };\n }\n };\n const initialRef = React.useRef<InitialSidebarState | null>(null);\n if (initialRef.current === null) initialRef.current = readInitial();\n const initial = initialRef.current;\n\n const [state, setState] = React.useState<SidebarState>(initial.state);\n const [width, setWidthState] = React.useState<number>(initial.width);\n const [isMobile, setIsMobile] = React.useState(false);\n const [openMobile, setOpenMobileState] = React.useState(false);\n const [mobileDrawerPresent, setMobileDrawerPresent] = React.useState(false);\n const openMobileRef = React.useRef(false);\n const mobileTriggerRef = React.useRef<HTMLButtonElement | null>(null);\n const widthRef = React.useRef<number>(initial.width);\n const stateRef = React.useRef<SidebarState>(initial.state);\n stateRef.current = state;\n\n const scopeRef = React.useRef<HTMLDivElement | null>(null);\n\n // Watch viewport for mobile breakpoint.\n React.useEffect(() => {\n if (typeof window === 'undefined') return;\n const mq = window.matchMedia(`(max-width: ${mobileBreakpoint - 1}px)`);\n const update = () => setIsMobile(mq.matches);\n update();\n mq.addEventListener('change', update);\n return () => mq.removeEventListener('change', update);\n }, [mobileBreakpoint]);\n\n const setOpenMobile = React.useCallback((open: boolean) => {\n openMobileRef.current = open;\n if (open) setMobileDrawerPresent(true);\n setOpenMobileState(open);\n }, []);\n\n // Close mobile drawer when crossing back to desktop.\n React.useEffect(() => {\n if (!isMobile && openMobile) {\n setOpenMobile(false);\n setMobileDrawerPresent(false);\n }\n }, [isMobile, openMobile, setOpenMobile]);\n\n const writeCssVar = React.useCallback((px: number) => {\n const el = scopeRef.current;\n if (el) el.style.setProperty(SIDEBAR_WIDTH_VAR, `${px}px`);\n }, []);\n\n // Keep the CSS var in sync with collapsed state transitions.\n useIsoLayoutEffect(() => {\n writeCssVar(state === 'collapsed' ? safeCollapsed : widthRef.current);\n }, [state, safeCollapsed, writeCssVar]);\n\n const persistState = React.useCallback(\n (next: SidebarState) => {\n try {\n window.localStorage.setItem(stateStorageKey, next);\n } catch {}\n },\n [stateStorageKey],\n );\n\n const toggleSidebar = React.useCallback(() => {\n if (isMobile) {\n setOpenMobile(!openMobileRef.current);\n return;\n }\n setState(prev => {\n const next = prev === 'default' ? 'collapsed' : 'default';\n // Sync ref so a synchronous follow-up `commit()` (e.g. keyboard handler)\n // persists the new state instead of the stale render-time value.\n stateRef.current = next;\n persistState(next);\n return next;\n });\n }, [isMobile, persistState, setOpenMobile]);\n\n const setWidth = React.useCallback(\n (next: number) => {\n const clamped = clamp(next, safeMin, safeMax);\n widthRef.current = clamped;\n writeCssVar(clamped);\n },\n [safeMin, safeMax, writeCssVar],\n );\n\n const collapse = React.useCallback(() => {\n stateRef.current = 'collapsed';\n persistState('collapsed');\n setState('collapsed');\n }, [persistState]);\n const expand = React.useCallback(() => {\n stateRef.current = 'default';\n persistState('default');\n setState('default');\n }, [persistState]);\n\n const commit = React.useCallback(() => {\n setWidthState(widthRef.current);\n try {\n window.localStorage.setItem(stateStorageKey, stateRef.current);\n window.localStorage.setItem(widthStorageKey, String(widthRef.current));\n } catch {}\n }, [stateStorageKey, widthStorageKey]);\n\n const setGestureActive = React.useCallback((active: boolean) => {\n const el = scopeRef.current;\n if (!el) return;\n if (active) el.setAttribute('data-sidebar-gesture', 'active');\n else el.removeAttribute('data-sidebar-gesture');\n }, []);\n\n // Global ⌘B / Ctrl+B toggle. Skip when typing.\n React.useEffect(() => {\n if (disableKeyboardShortcut) return;\n const onKeyDown = (ev: KeyboardEvent) => {\n // `code` is layout-independent — works on non-Latin keyboards.\n if (ev.code !== 'KeyB') return;\n if (!(ev.metaKey || ev.ctrlKey)) return;\n if (ev.altKey || ev.shiftKey) return;\n if (ev.target instanceof HTMLElement) {\n const tag = ev.target.tagName;\n if (tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT') return;\n if (ev.target.isContentEditable) return;\n }\n ev.preventDefault();\n toggleSidebar();\n };\n window.addEventListener('keydown', onKeyDown);\n return () => window.removeEventListener('keydown', onKeyDown);\n }, [disableKeyboardShortcut, toggleSidebar]);\n\n const effectiveState: SidebarState = isMobile ? 'default' : state;\n\n const contextValue = React.useMemo(\n () => ({\n state: effectiveState,\n desktopState: state,\n width,\n minWidth: safeMin,\n maxWidth: safeMax,\n collapseBelow: safeCollapseBelow,\n collapsedWidth: safeCollapsed,\n isMobile,\n toggleSidebar,\n setWidth,\n collapse,\n expand,\n commit,\n setGestureActive,\n LinkComponent,\n }),\n [\n effectiveState,\n state,\n width,\n safeMin,\n safeMax,\n safeCollapseBelow,\n safeCollapsed,\n isMobile,\n toggleSidebar,\n setWidth,\n collapse,\n expand,\n commit,\n setGestureActive,\n LinkComponent,\n ],\n );\n\n const drawerValue = React.useMemo<MobileDrawerContextValue>(\n () => ({ openMobile, mobileTriggerRef, setOpenMobile, setMobileDrawerPresent }),\n [openMobile, setOpenMobile],\n );\n\n // CSS var owned exclusively by writeCssVar (single source of truth).\n // SSR seeds the initial value here; post-mount writeCssVar takes over.\n const scopeStyle: SidebarScopeStyle = {\n [SIDEBAR_WIDTH_VAR]: `${initial.state === 'collapsed' ? safeCollapsed : initial.width}px`,\n '--sidebar-width-mobile': `${mobileWidth}px`,\n display: 'contents',\n };\n\n return (\n <div\n ref={scopeRef}\n data-sidebar-scope\n data-sidebar-state={state}\n data-sidebar-mobile={isMobile ? 'true' : 'false'}\n data-sidebar-mobile-present={mobileDrawerPresent ? 'true' : 'false'}\n style={scopeStyle}\n suppressHydrationWarning\n >\n <MainSidebarContext.Provider value={contextValue}>\n <MobileDrawerContext.Provider value={drawerValue}>{children}</MobileDrawerContext.Provider>\n </MainSidebarContext.Provider>\n </div>\n );\n}\n","import type { NavLink } from './main-sidebar-nav-link';\n\n/**\n * Strict active-path match with sibling-exclusion.\n * - `pathname === link.url` or starts with `link.url + '/'`\n * - Not active if any sibling link has a longer matching url (prevents `/a` lighting while `/a/b` matches).\n */\nexport function getIsLinkActive(link: NavLink, pathname: string, siblings: NavLink[] = []): boolean {\n const matches = (url: string) => pathname === url || pathname.startsWith(url + '/');\n const flattenLinks = (links: NavLink[]): NavLink[] =>\n links.flatMap(item => [item, ...flattenLinks(item.children ?? [])]);\n\n if (!matches(link.url)) return false;\n const competingLinks = [...flattenLinks(link.children ?? []), ...flattenLinks(siblings)];\n return !competingLinks.some(\n other => other.url !== link.url && other.url.length > link.url.length && matches(other.url),\n );\n}\n"],"names":["React"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"markdown-renderer-DcBAdWTo.cjs","sources":["../src/ds/components/MarkdownRenderer/arriving.ts","../src/ds/components/MarkdownRenderer/blocks.ts","../src/ds/components/MarkdownRenderer/table-csv.ts","../src/ds/components/MarkdownRenderer/markdown-table.tsx","../src/ds/components/MarkdownRenderer/table-markdown.ts","../src/ds/components/MarkdownRenderer/use-settled.ts","../src/ds/components/MarkdownRenderer/markdown-renderer.tsx"],"sourcesContent":["import type { ExtraProps } from 'react-markdown';\n\nimport { ARRIVING_CLASS } from '@/ds/tokens';\n\nimport '@/ds/components/Arrival/arrival.css';\n\ntype MarkdownElement = NonNullable<ExtraProps['node']>;\ntype MarkdownChild = MarkdownElement['children'][number];\n\n/** Fades whole: a fence renders through `CodeBlock`, and inline code carries a background. */\nconst UNBROKEN = new Set(['pre', 'code']);\n\nconst wrap = (value: string, arriving: boolean): MarkdownChild => ({\n type: 'element',\n tagName: 'span',\n properties: arriving ? { className: [ARRIVING_CLASS] } : {},\n children: [{ type: 'text', value }],\n});\n\nfunction markArriving(node: MarkdownElement): void {\n const classes = node.properties.className;\n\n node.properties.className = Array.isArray(classes) ? [...classes, ARRIVING_CLASS] : [ARRIVING_CLASS];\n}\n\nfunction rebuild(nodes: MarkdownChild[], arriving: () => boolean): MarkdownChild[] {\n const out: MarkdownChild[] = [];\n\n for (const node of nodes) {\n if (node.type === 'text') {\n for (const piece of node.value.match(/\\S+|\\s+/g) ?? []) {\n if (/\\S/.test(piece)) out.push(wrap(piece, arriving()));\n else out.push({ type: 'text', value: piece });\n }\n\n continue;\n }\n\n out.push(node);\n\n if (node.type !== 'element') continue;\n\n if (!UNBROKEN.has(node.tagName)) node.children = rebuild(node.children, arriving);\n else if (arriving()) markArriving(node);\n }\n\n return out;\n}\n\n/**\n * Gives every word of a block an element of its own, and the entrance class to\n * those past the first `settled` — the words that were not on screen yet when\n * the reader joined this reply.\n *\n * Every word, not just the arriving ones: react-markdown parses afresh on each\n * landing and React matches the children it already mounted by position, so a\n * wrapper that came and went would land where a bare text node used to be and\n * remount half the paragraph, replaying entrances that had long finished.\n * Wrapping the lot keeps every position fixed — a new word only ever appends —\n * and a word never gains the class it did not mount with, so nothing replays.\n */\nexport function rehypeArriving(settled: number) {\n return function attach() {\n return (tree: { children: MarkdownChild[] }) => {\n let word = 0;\n\n tree.children = rebuild(tree.children, () => word++ >= settled);\n };\n };\n}\n","const FENCE_OPEN = /^ {0,3}(`{3,}|~{3,})/;\nconst FENCE_CLOSE = /^ {0,3}(`{3,}|~{3,})[ \\t]*$/;\nconst LIST_ITEM = /^ {0,3}(?:[-*+]|\\d{1,9}[.)])(?:[ \\t]|$)/;\nconst INDENTED = /^(?:\\t| {2,})/;\nconst DEFINITION = /^ {0,3}\\[[^\\]]+\\]:/;\n\nfunction fenceOpenedBy(line: string): string | undefined {\n return FENCE_OPEN.exec(line)?.[1];\n}\n\n// Both are runs of one character, so `startsWith` is \"same marker, at least as long\".\nfunction closesFence(line: string, marker: string): boolean {\n return FENCE_CLOSE.exec(line)?.[1]?.startsWith(marker) ?? false;\n}\n\nfunction startsBlock(line: string, inList: boolean): boolean {\n if (INDENTED.test(line)) return false;\n\n return !(inList && LIST_ITEM.test(line));\n}\n\n/**\n * Cuts markdown into top-level blocks so a growing reply re-parses its last\n * block instead of all of them. Rejoining the result returns the input, and\n * every block renders as it would have inside the whole.\n *\n * Each rule only ever merges: over-merging costs a re-parse, while cutting a\n * construct in two changes what it renders as. Link reference and footnote\n * definitions resolve across blank lines, which no line-level rule can see, so\n * reaching one outside a fence abandons the split for the whole text.\n */\nexport function splitBlocks(markdown: string): string[] {\n const lines = markdown.split('\\n');\n const starts = [0];\n let fence: string | undefined;\n let started = false;\n let broken = false;\n let inList = false;\n\n for (const [index, line] of lines.entries()) {\n if (fence) {\n if (closesFence(line, fence)) fence = undefined;\n continue;\n }\n\n if (line.trim() === '') {\n broken = started;\n continue;\n }\n\n if (DEFINITION.test(line)) return [markdown];\n\n if (broken && startsBlock(line, inList)) {\n starts.push(index);\n started = false;\n }\n\n if (!started) inList = LIST_ITEM.test(line);\n\n started = true;\n broken = false;\n fence = fenceOpenedBy(line);\n }\n\n return starts.map((start, position) => {\n const end = starts[position + 1];\n const block = lines.slice(start, end ?? lines.length).join('\\n');\n\n return end === undefined ? block : `${block}\\n`;\n });\n}\n","function spreadsheetCell(value: string): string {\n // Quoting alone does not stop spreadsheet apps from evaluating formulas.\n const numeric = /^[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?$/i.test(value.trim());\n const formula = /^[\\s\\uFEFF]*[=+\\-@=+-@]/u.test(value);\n const controlPrefix = /^[\\t\\r\\n]/.test(value);\n const safe = controlPrefix || (formula && !numeric) ? `'${value}` : value;\n return `\"${safe.replaceAll('\"', '\"\"')}\"`;\n}\n\nexport function tableToCsv(rows: string[][]): string {\n return rows.map(row => row.map(spreadsheetCell).join(',')).join('\\r\\n');\n}\n\nexport function downloadTableCsv(csv: string): void {\n const blob = new Blob(['\\uFEFF', csv], { type: 'text/csv;charset=utf-8' });\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement('a');\n anchor.href = url;\n anchor.download = 'table.csv';\n document.body.appendChild(anchor);\n anchor.click();\n anchor.remove();\n URL.revokeObjectURL(url);\n}\n","import { CheckIcon, ChevronDownIcon, CopyIcon, DownloadIcon } from 'lucide-react';\nimport type { ComponentProps } from 'react';\nimport type { ExtraProps } from 'react-markdown';\nimport { downloadTableCsv } from './table-csv';\nimport { Button } from '@/ds/components/Button';\nimport { ButtonsGroup } from '@/ds/components/ButtonsGroup';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu';\nimport { useCopyToClipboard } from '@/hooks/use-copy-to-clipboard';\n\nexport function MarkdownTable({ node, children }: ComponentProps<'table'> & ExtraProps) {\n const markdown = node?.properties.tableMarkdown;\n const csv = node?.properties.tableCsv;\n const { isCopied, copyToClipboard } = useCopyToClipboard({ copyMessage: 'Copied table markdown' });\n\n return (\n <div className=\"my-3 w-fit max-w-full min-w-0\">\n <div className=\"flex justify-end\">\n <ButtonsGroup spacing=\"close\" aria-label=\"Table actions\">\n <Button\n type=\"button\"\n size=\"xs\"\n variant=\"ghost\"\n disabled={typeof markdown !== 'string'}\n onClick={() => {\n if (typeof markdown === 'string') copyToClipboard(markdown);\n }}\n aria-label=\"Copy table as markdown\"\n >\n {isCopied ? <CheckIcon /> : <CopyIcon />}\n {isCopied ? 'Copied!' : 'Copy table as markdown'}\n </Button>\n <DropdownMenu>\n <DropdownMenu.Trigger\n disabled={typeof csv !== 'string'}\n render={\n <Button type=\"button\" size=\"icon-xs\" variant=\"ghost\" aria-label=\"More table options\">\n <ChevronDownIcon />\n </Button>\n }\n />\n <DropdownMenu.Content align=\"end\" size=\"sm\" className=\"w-max min-w-0\">\n <DropdownMenu.Item\n size=\"sm\"\n onClick={() => {\n if (typeof csv === 'string') downloadTableCsv(csv);\n }}\n >\n <DownloadIcon />\n Download CSV\n </DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu>\n </ButtonsGroup>\n </div>\n <div className=\"max-w-full overflow-x-auto\">\n <table className=\"table min-w-full\">{children}</table>\n </div>\n </div>\n );\n}\n","import type { Definition, FootnoteDefinition, Nodes, Root, Table } from 'mdast';\nimport { gfmToMarkdown } from 'mdast-util-gfm';\nimport { toMarkdown } from 'mdast-util-to-markdown';\nimport { tableToCsv } from './table-csv';\n\nfunction cellText(node: Nodes): string {\n if (node.type === 'footnoteReference') return `[^${node.label ?? node.identifier}]`;\n if ('value' in node) return node.value;\n if (node.type === 'image' || node.type === 'imageReference') return node.alt ?? '';\n return 'children' in node ? node.children.map(cellText).join('') : '';\n}\n\nfunction walk(node: Nodes, visit: (node: Nodes) => void): void {\n visit(node);\n if ('children' in node) node.children.forEach(child => walk(child, visit));\n}\n\nconst SERIALIZE_OPTIONS = { extensions: [gfmToMarkdown()] };\n\n/** Capture table exports before rehype replaces text with animation spans. */\nexport function remarkTableMarkdown() {\n return (tree: Root, file: { value: unknown }) => {\n const source = String(file.value);\n const definitions = new Map<string, Definition | FootnoteDefinition>();\n const tables: Table[] = [];\n walk(tree, node => {\n if (node.type === 'definition' || node.type === 'footnoteDefinition') {\n const key = `${node.type}:${node.identifier}`;\n if (!definitions.has(key)) definitions.set(key, node);\n }\n if (node.type === 'table') tables.push(node);\n });\n\n const lines = source.split(/\\r\\n|\\r|\\n/);\n for (const table of tables) {\n const header = table.children[0];\n if (!header?.position) continue;\n const rows = table.children.map(row => {\n const start = row.position?.start.offset;\n const end = row.position?.end.offset;\n return start === undefined || end === undefined ? undefined : source.slice(start, end);\n });\n // Only offer exports when the parser supplied the original row locations.\n if (!rows.every(row => row !== undefined)) continue;\n // Row positions exclude list/blockquote prefixes. The delimiter has no AST node.\n const delimiter = lines[header.position.start.line]?.replace(/^[\\t >]*/, '');\n if (delimiter === undefined) continue;\n const markdown = [rows[0], delimiter, ...rows.slice(1)];\n const used = new Set<string>();\n const collectReference = (node: Nodes) => {\n if (node.type === 'linkReference' || node.type === 'imageReference') {\n used.add(`definition:${node.identifier}`);\n } else if (node.type === 'footnoteReference') {\n used.add(`footnoteDefinition:${node.identifier}`);\n }\n };\n walk(table, collectReference);\n // Visiting appended definitions also collects links/footnotes they depend on.\n // The set prevents duplicates and cycles, including self-referencing footnotes.\n for (const key of used) {\n const definition = definitions.get(key);\n if (!definition) continue;\n markdown.push('', toMarkdown(definition, SERIALIZE_OPTIONS).trimEnd());\n walk(definition, collectReference);\n }\n const cells = table.children.map(row =>\n Array.from({ length: header.children.length }, (_, index) => {\n const cell = row.children[index];\n return cell ? cellText(cell) : '';\n }),\n );\n table.data = {\n ...table.data,\n hProperties: {\n ...table.data?.hProperties,\n tableMarkdown: markdown.join('\\n'),\n tableCsv: tableToCsv(cells),\n },\n };\n }\n };\n}\n","import { useEffect, useRef, useState } from 'react';\n\nimport { useWatched } from '@/ds/components/Arrival';\nimport { ARRIVING_MS } from '@/ds/tokens';\n\ninterface Landing {\n words: number;\n at: number;\n}\n\n/**\n * How many of a reply's words have been on screen long enough that their entrance is over.\n *\n * The entrance plays on whatever mounts carrying the class, so it replays every time a\n * word's element is rebuilt — and markdown rebuilds a growing tail constantly: a `-`\n * turns a paragraph into a list item, a closing `**` splits it around a `<strong>`, the\n * stream ends and the mend comes off. Each of those swaps the element a settled word\n * lives in, which is what makes a word already read fade in again.\n *\n * Ageing them out is the whole answer: a word carries the class only while it is new,\n * so however often the tail is rebuilt, only what is genuinely arriving animates.\n *\n * What counts as new at mount is not this hook's call. A reply the reader was handed\n * is already there, and a block that mounts complete — a card's output, an expanded\n * body — enters with its container. Only a passage born streaming under the reader's\n * eyes is new from its first word: the reveal often lands several words in its first\n * commit, and they enter like every word after them.\n */\nexport function useSettledWords(words: number, streaming: boolean): number {\n const watched = useWatched();\n const [settled, setSettled] = useState(() => (watched && streaming ? 0 : words));\n const landings = useRef<Landing[]>([]);\n const recorded = useRef(settled);\n\n useEffect(() => {\n if (recorded.current !== words) {\n landings.current.push({ words, at: performance.now() });\n recorded.current = words;\n }\n\n const waiting = landings.current[0];\n if (!waiting) return;\n\n const timer = setTimeout(\n () => {\n landings.current.shift();\n setSettled(waiting.words);\n },\n Math.max(0, waiting.at + ARRIVING_MS - performance.now()),\n );\n\n return () => clearTimeout(timer);\n }, [settled, words]);\n\n // A shorter reply replacing the one on screen settles at once: nothing of it is new.\n return Math.min(settled, words);\n}\n","import { memo, useMemo } from 'react';\nimport type { MouseEvent, MouseEventHandler, ReactNode } from 'react';\nimport Markdown from 'react-markdown';\nimport type { Components, ExtraProps, Options } from 'react-markdown';\nimport remarkGfm from 'remark-gfm';\nimport remend from 'remend';\n\nimport { rehypeArriving } from './arriving';\nimport { splitBlocks } from './blocks';\nimport { MarkdownTable } from './markdown-table';\nimport { remarkTableMarkdown } from './table-markdown';\nimport { useSettledWords } from './use-settled';\nimport { CodeBlock } from '@/ds/components/CodeBlock';\nimport { cn } from '@/lib/utils';\n\nimport './markdown-renderer.css';\n\nexport type MarkdownExternalLinkTarget = 'tab' | 'window';\n\nexport interface MarkdownRendererProps {\n children: string;\n className?: string;\n externalLinkTarget?: MarkdownExternalLinkTarget;\n /** The text is a prefix of one still being written: close the markers the stream has not reached. */\n streaming?: boolean;\n /** Opt in to table copy/download controls; disabled while this text is streaming. */\n tableActions?: boolean;\n}\n\n/**\n * Renders a markdown string. Agent output can carry attacker-influenced text\n * (file contents, tool output, web pages): react-markdown escapes raw HTML and\n * drops dangerous link schemes, so nothing here reaches the DOM as markup.\n *\n * react-markdown re-parses on every render, and a streaming reply re-renders\n * its whole transcript on every delta. Memoizing spares the settled messages;\n * rendering block by block — streaming or not — spares every block of the live\n * one but the last, and lets a reply settle without remounting what is already\n * on screen.\n *\n * The text is drawn as given: pacing a stream is `useRevealedText`, and belongs to\n * whoever owns the whole of what is being laid down — a reply is prose, tool rows\n * and cards, and they have to arrive in the order they were written. Only what\n * lands after the reader joined plays an entrance, and only while it is still new:\n * a reply opened part-written is already there, and fading in what someone is\n * halfway through reading would be both a lie and a screenful of animations at\n * once.\n */\nexport const MarkdownRenderer = memo(function MarkdownRenderer({\n children,\n className,\n externalLinkTarget = 'tab',\n streaming = false,\n tableActions = false,\n}: MarkdownRendererProps) {\n const shown = decodeEscapedNewlines(children);\n const blocks = useMemo(() => splitBlocks(shown), [shown]);\n const last = blocks.length - 1;\n const components = (tableActions ? TABLE_COMPONENTS : DEFAULT_COMPONENTS)[externalLinkTarget];\n\n const spans = wordSpans(blocks);\n const settled = useSettledWords(spans.at(-1)?.end ?? 0, streaming);\n\n // A block whose words have all finished their entrance has nothing left to play,\n // which is what `undefined` says: leave it as plain text, no spans at all.\n const settledWords = (span: WordSpan | undefined): number | undefined =>\n !span || settled >= span.end ? undefined : Math.max(0, settled - span.start);\n\n const tail = blocks[last] ?? '';\n const mended = useMemo(() => (streaming ? remend(tail, REMEND_OPTIONS) : tail), [streaming, tail]);\n\n return (\n <div className={cn('mastra-markdown', className)}>\n {blocks.map((block, index) => (\n <MarkdownBlock\n key={index}\n content={index === last ? mended : block}\n settledWords={settledWords(spans[index])}\n components={components}\n streaming={streaming}\n tableActions={tableActions}\n />\n ))}\n </div>\n );\n});\n\n/** Keyed by position at the call site: a content key remounts on every character. */\nconst MarkdownBlock = memo(function MarkdownBlock({\n components,\n content,\n settledWords,\n streaming,\n tableActions,\n}: {\n components: Components;\n content: string;\n settledWords?: number;\n streaming: boolean;\n tableActions: boolean;\n}) {\n const rehypePlugins = useMemo(\n () => (settledWords === undefined ? SETTLED : [rehypeArriving(settledWords)]),\n [settledWords],\n );\n\n return (\n <Markdown\n remarkPlugins={tableActions && !streaming ? COPYABLE_REMARK_PLUGINS : REMARK_PLUGINS}\n rehypePlugins={rehypePlugins}\n components={components}\n >\n {content}\n </Markdown>\n );\n});\n\nconst SETTLED: Options['rehypePlugins'] = [];\n\ninterface WordSpan {\n start: number;\n end: number;\n}\n\n/**\n * Where each block's words fall in the reply's own count, so one settled count covers\n * them all. Counting the source counts its markers too, so the boundary only ever errs\n * towards leaving a word unanimated.\n */\nfunction wordSpans(blocks: string[]): WordSpan[] {\n let read = 0;\n\n return blocks.map(block => {\n const span = { start: read, end: read + countWords(block) };\n read = span.end;\n\n return span;\n });\n}\n\nfunction countWords(text: string): number {\n return text.match(/\\S+/g)?.length ?? 0;\n}\n\n// Agent networks emit their text with literal `\\n`. Only unescape when the text\n// has no real newline, otherwise a `\"a\\nb\"` inside a code fence gets shredded.\nfunction decodeEscapedNewlines(text: string): string {\n return text.includes('\\n') ? text : text.replace(/\\\\n/g, '\\n');\n}\n\ntype MarkdownNode = NonNullable<ExtraProps['node']>;\n\nfunction languageOf(node: MarkdownNode): string | undefined {\n const classNames = node.properties.className;\n if (!Array.isArray(classNames)) return undefined;\n\n const language = classNames.find(entry => typeof entry === 'string' && entry.startsWith('language-'));\n return typeof language === 'string' ? language.slice('language-'.length) : undefined;\n}\n\nfunction fencedCode(node: MarkdownNode | undefined): { code: string; language?: string } | undefined {\n const child = node?.children.find(entry => entry.type === 'element' && entry.tagName === 'code');\n if (child?.type !== 'element') return undefined;\n\n const code = child.children.map(entry => (entry.type === 'text' ? entry.value : '')).join('');\n return { code: code.replace(/\\n$/, ''), language: languageOf(child) };\n}\n\nfunction MarkdownCodeBlock({\n node,\n children,\n className,\n}: {\n node?: MarkdownNode;\n children?: ReactNode;\n className?: string;\n}) {\n const fenced = fencedCode(node);\n if (!fenced) return <pre className={className}>{children}</pre>;\n\n return (\n <CodeBlock\n code={fenced.code}\n lang={fenced.language}\n overflow=\"scroll\"\n className={cn('my-3 bg-surface1', className)}\n copyMessage=\"Copied code to clipboard\"\n />\n );\n}\n\nconst POPUP_WINDOW_FEATURES = 'popup=yes,width=720,height=800,resizable=yes,scrollbars=yes';\n\nfunction isPlainLeftClick(event: MouseEvent): boolean {\n return event.button === 0 && !event.metaKey && !event.ctrlKey && !event.shiftKey && !event.altKey;\n}\n\nfunction markdownLink(externalLinkTarget: MarkdownExternalLinkTarget): NonNullable<Components['a']> {\n return function MarkdownLink({ href, title, children }) {\n const isExternal = /^https?:\\/\\//i.test(href ?? '');\n\n const openInPopup: MouseEventHandler<HTMLAnchorElement> = event => {\n if (!isExternal || externalLinkTarget !== 'window' || !isPlainLeftClick(event)) return;\n\n const popup = window.open(href, '_blank', POPUP_WINDOW_FEATURES);\n if (!popup) return;\n\n popup.opener = null;\n event.preventDefault();\n };\n\n return (\n <a\n href={href}\n title={title}\n onClick={openInPopup}\n target={isExternal ? '_blank' : undefined}\n rel={isExternal ? 'noopener noreferrer' : undefined}\n >\n {children}\n </a>\n );\n };\n}\n\nconst REMARK_PLUGINS = [remarkGfm];\nconst COPYABLE_REMARK_PLUGINS = [remarkGfm, remarkTableMarkdown];\n\n// Links stay text until their URL lands: remend's placeholder href would render\n// a live anchor to nowhere. No math is rendered here, so pairing `$$` would only\n// turn one literal into another.\nconst REMEND_OPTIONS = { katex: false, linkMode: 'text-only' } as const;\n\n// Elements are listed one by one: react-markdown also passes its `node`, which\n// React would forward to the DOM as a stray attribute. Everything else is\n// styled from markdown-renderer.css.\nconst COMPONENTS: Components = {\n pre: MarkdownCodeBlock,\n a: markdownLink('tab'),\n};\n\nconst WINDOW_COMPONENTS: Components = {\n ...COMPONENTS,\n a: markdownLink('window'),\n};\n\nconst DEFAULT_COMPONENTS = { tab: COMPONENTS, window: WINDOW_COMPONENTS };\nconst TABLE_COMPONENTS = {\n tab: { ...COMPONENTS, table: MarkdownTable },\n window: { ...WINDOW_COMPONENTS, table: MarkdownTable },\n};\n"],"names":["ARRIVING_CLASS","useCopyToClipboard","jsxs","jsx","ButtonsGroup","Button","CheckIcon","CopyIcon","DropdownMenu","ChevronDownIcon","DownloadIcon","gfmToMarkdown","toMarkdown","useWatched","useState","useRef","useEffect","ARRIVING_MS","memo","MarkdownRenderer","useMemo","cn","MarkdownBlock","CodeBlock"],"mappings":";;;;;;;;;;;;;;;;;;;AAUA,MAAM,2BAAW,IAAI,GAAA,CAAI,CAAC,KAAA,EAAO,MAAM,CAAC,CAAA;AAExC,MAAM,IAAA,GAAO,CAAC,KAAA,EAAe,QAAA,MAAsC;AAAA,EACjE,IAAA,EAAM,SAAA;AAAA,EACN,OAAA,EAAS,MAAA;AAAA,EACT,UAAA,EAAY,WAAW,EAAE,SAAA,EAAW,CAACA,qBAAc,CAAA,KAAM,EAAC;AAAA,EAC1D,UAAU,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAO;AACpC,CAAA,CAAA;AAEA,SAAS,aAAa,IAAA,EAA6B;AACjD,EAAA,MAAM,OAAA,GAAU,KAAK,UAAA,CAAW,SAAA;AAEhC,EAAA,IAAA,CAAK,UAAA,CAAW,SAAA,GAAY,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,GAAI,CAAC,GAAG,OAAA,EAASA,qBAAc,CAAA,GAAI,CAACA,qBAAc,CAAA;AACrG;AAEA,SAAS,OAAA,CAAQ,OAAwB,QAAA,EAA0C;AACjF,EAAA,MAAM,MAAuB,EAAC;AAE9B,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAQ;AACxB,MAAA,KAAA,MAAW,SAAS,IAAA,CAAK,KAAA,CAAM,MAAM,UAAU,CAAA,IAAK,EAAC,EAAG;AACtD,QAAA,IAAI,IAAA,CAAK,IAAA,CAAK,KAAK,CAAA,EAAG,GAAA,CAAI,KAAK,IAAA,CAAK,KAAA,EAAO,QAAA,EAAU,CAAC,CAAA;AAAA,iBAC7C,IAAA,CAAK,EAAE,MAAM,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,MAC9C;AAEA,MAAA;AAAA,IACF;AAEA,IAAA,GAAA,CAAI,KAAK,IAAI,CAAA;AAEb,IAAA,IAAI,IAAA,CAAK,SAAS,SAAA,EAAW;AAE7B,IAAA,IAAI,CAAC,QAAA,CAAS,GAAA,CAAI,IAAA,CAAK,OAAO,CAAA,EAAG,IAAA,CAAK,QAAA,GAAW,OAAA,CAAQ,IAAA,CAAK,QAAA,EAAU,QAAQ,CAAA;AAAA,SAAA,IACvE,QAAA,EAAS,EAAG,YAAA,CAAa,IAAI,CAAA;AAAA,EACxC;AAEA,EAAA,OAAO,GAAA;AACT;AAcO,SAAS,eAAe,OAAA,EAAiB;AAC9C,EAAA,OAAO,SAAS,MAAA,GAAS;AACvB,IAAA,OAAO,CAAC,IAAA,KAAwC;AAC9C,MAAA,IAAI,IAAA,GAAO,CAAA;AAEX,MAAA,IAAA,CAAK,WAAW,OAAA,CAAQ,IAAA,CAAK,QAAA,EAAU,MAAM,UAAU,OAAO,CAAA;AAAA,IAChE,CAAA;AAAA,EACF,CAAA;AACF;;ACrEA,MAAM,UAAA,GAAa,sBAAA;AACnB,MAAM,WAAA,GAAc,6BAAA;AACpB,MAAM,SAAA,GAAY,yCAAA;AAClB,MAAM,QAAA,GAAW,eAAA;AACjB,MAAM,UAAA,GAAa,oBAAA;AAEnB,SAAS,cAAc,IAAA,EAAkC;AACvD,EAAA,OAAO,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA,GAAI,CAAC,CAAA;AAClC;AAGA,SAAS,WAAA,CAAY,MAAc,MAAA,EAAyB;AAC1D,EAAA,OAAO,WAAA,CAAY,KAAK,IAAI,CAAA,GAAI,CAAC,CAAA,EAAG,UAAA,CAAW,MAAM,CAAA,IAAK,KAAA;AAC5D;AAEA,SAAS,WAAA,CAAY,MAAc,MAAA,EAA0B;AAC3D,EAAA,IAAI,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,EAAG,OAAO,KAAA;AAEhC,EAAA,OAAO,EAAE,MAAA,IAAU,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA,CAAA;AACxC;AAYO,SAAS,YAAY,QAAA,EAA4B;AACtD,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA;AACjC,EAAA,MAAM,MAAA,GAAS,CAAC,CAAC,CAAA;AACjB,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI,OAAA,GAAU,KAAA;AACd,EAAA,IAAI,MAAA,GAAS,KAAA;AACb,EAAA,IAAI,MAAA,GAAS,KAAA;AAEb,EAAA,KAAA,MAAW,CAAC,KAAA,EAAO,IAAI,CAAA,IAAK,KAAA,CAAM,SAAQ,EAAG;AAC3C,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,IAAI,WAAA,CAAY,IAAA,EAAM,KAAK,CAAA,EAAG,KAAA,GAAQ,MAAA;AACtC,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,IAAA,CAAK,IAAA,EAAK,KAAM,EAAA,EAAI;AACtB,MAAA,MAAA,GAAS,OAAA;AACT,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,WAAW,IAAA,CAAK,IAAI,CAAA,EAAG,OAAO,CAAC,QAAQ,CAAA;AAE3C,IAAA,IAAI,MAAA,IAAU,WAAA,CAAY,IAAA,EAAM,MAAM,CAAA,EAAG;AACvC,MAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AACjB,MAAA,OAAA,GAAU,KAAA;AAAA,IACZ;AAEA,IAAA,IAAI,CAAC,OAAA,EAAS,MAAA,GAAS,SAAA,CAAU,KAAK,IAAI,CAAA;AAE1C,IAAA,OAAA,GAAU,IAAA;AACV,IAAA,MAAA,GAAS,KAAA;AACT,IAAA,KAAA,GAAQ,cAAc,IAAI,CAAA;AAAA,EAC5B;AAEA,EAAA,OAAO,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,EAAO,QAAA,KAAa;AACrC,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,QAAA,GAAW,CAAC,CAAA;AAC/B,IAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,CAAM,KAAA,EAAO,OAAO,KAAA,CAAM,MAAM,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAE/D,IAAA,OAAO,GAAA,KAAQ,MAAA,GAAY,KAAA,GAAQ,CAAA,EAAG,KAAK;AAAA,CAAA;AAAA,EAC7C,CAAC,CAAA;AACH;;ACtEA,SAAS,gBAAgB,KAAA,EAAuB;AAE9C,EAAA,MAAM,OAAA,GAAU,+CAAA,CAAgD,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA;AACjF,EAAA,MAAM,OAAA,GAAU,0BAAA,CAA2B,IAAA,CAAK,KAAK,CAAA;AACrD,EAAA,MAAM,aAAA,GAAgB,WAAA,CAAY,IAAA,CAAK,KAAK,CAAA;AAC5C,EAAA,MAAM,OAAO,aAAA,IAAkB,OAAA,IAAW,CAAC,OAAA,GAAW,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,GAAK,KAAA;AACpE,EAAA,OAAO,CAAA,CAAA,EAAI,IAAA,CAAK,UAAA,CAAW,GAAA,EAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AACvC;AAEO,SAAS,WAAW,IAAA,EAA0B;AACnD,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAA,GAAA,KAAO,GAAA,CAAI,GAAA,CAAI,eAAe,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA,CAAE,IAAA,CAAK,MAAM,CAAA;AACxE;AAEO,SAAS,iBAAiB,GAAA,EAAmB;AAClD,EAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,CAAC,QAAA,EAAU,GAAG,CAAA,EAAG,EAAE,IAAA,EAAM,wBAAA,EAA0B,CAAA;AACzE,EAAA,MAAM,GAAA,GAAM,GAAA,CAAI,eAAA,CAAgB,IAAI,CAAA;AACpC,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,aAAA,CAAc,GAAG,CAAA;AACzC,EAAA,MAAA,CAAO,IAAA,GAAO,GAAA;AACd,EAAA,MAAA,CAAO,QAAA,GAAW,WAAA;AAClB,EAAA,QAAA,CAAS,IAAA,CAAK,YAAY,MAAM,CAAA;AAChC,EAAA,MAAA,CAAO,KAAA,EAAM;AACb,EAAA,MAAA,CAAO,MAAA,EAAO;AACd,EAAA,GAAA,CAAI,gBAAgB,GAAG,CAAA;AACzB;;ACdO,SAAS,aAAA,CAAc,EAAE,IAAA,EAAM,QAAA,EAAS,EAAyC;AACtF,EAAA,MAAM,QAAA,GAAW,MAAM,UAAA,CAAW,aAAA;AAClC,EAAA,MAAM,GAAA,GAAM,MAAM,UAAA,CAAW,QAAA;AAC7B,EAAA,MAAM,EAAE,UAAU,eAAA,EAAgB,GAAIC,4CAAmB,EAAE,WAAA,EAAa,yBAAyB,CAAA;AAEjG,EAAA,uBACEC,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BAAA,EACb,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,KAAA,EAAA,EAAI,WAAU,kBAAA,EACb,QAAA,kBAAAD,eAAA,CAACE,6BAAa,OAAA,EAAQ,OAAA,EAAQ,cAAW,eAAA,EACvC,QAAA,EAAA;AAAA,sBAAAF,eAAA;AAAA,QAACG,aAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,IAAA,EAAK,IAAA;AAAA,UACL,OAAA,EAAQ,OAAA;AAAA,UACR,QAAA,EAAU,OAAO,QAAA,KAAa,QAAA;AAAA,UAC9B,SAAS,MAAM;AACb,YAAA,IAAI,OAAO,QAAA,KAAa,QAAA,EAAU,eAAA,CAAgB,QAAQ,CAAA;AAAA,UAC5D,CAAA;AAAA,UACA,YAAA,EAAW,wBAAA;AAAA,UAEV,QAAA,EAAA;AAAA,YAAA,QAAA,mBAAWF,cAAA,CAACG,qBAAA,EAAA,EAAU,CAAA,mBAAKH,cAAA,CAACI,oBAAA,EAAA,EAAS,CAAA;AAAA,YACrC,WAAW,SAAA,GAAY;AAAA;AAAA;AAAA,OAC1B;AAAA,sCACCC,yBAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAL,cAAA;AAAA,UAACK,yBAAA,CAAa,OAAA;AAAA,UAAb;AAAA,YACC,QAAA,EAAU,OAAO,GAAA,KAAQ,QAAA;AAAA,YACzB,MAAA,kBACEL,cAAA,CAACE,aAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,IAAA,EAAK,SAAA,EAAU,OAAA,EAAQ,OAAA,EAAQ,YAAA,EAAW,oBAAA,EAC9D,QAAA,kBAAAF,cAAA,CAACM,+BAAgB,CAAA,EACnB;AAAA;AAAA,SAEJ;AAAA,wBACAN,cAAA,CAACK,0BAAa,OAAA,EAAb,EAAqB,OAAM,KAAA,EAAM,IAAA,EAAK,IAAA,EAAK,SAAA,EAAU,eAAA,EACpD,QAAA,kBAAAN,eAAA;AAAA,UAACM,yBAAA,CAAa,IAAA;AAAA,UAAb;AAAA,YACC,IAAA,EAAK,IAAA;AAAA,YACL,SAAS,MAAM;AACb,cAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,EAAU,gBAAA,CAAiB,GAAG,CAAA;AAAA,YACnD,CAAA;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAAL,cAAA,CAACO,wBAAA,EAAA,EAAa,CAAA;AAAA,cAAE;AAAA;AAAA;AAAA,SAElB,EACF;AAAA,OAAA,EACF;AAAA,KAAA,EACF,CAAA,EACF,CAAA;AAAA,oBACAP,cAAA,CAAC,SAAI,SAAA,EAAU,4BAAA,EACb,yCAAC,OAAA,EAAA,EAAM,SAAA,EAAU,kBAAA,EAAoB,QAAA,EAAS,CAAA,EAChD;AAAA,GAAA,EACF,CAAA;AAEJ;;ACtDA,SAAS,SAAS,IAAA,EAAqB;AACrC,EAAA,IAAI,IAAA,CAAK,SAAS,mBAAA,EAAqB,OAAO,KAAK,IAAA,CAAK,KAAA,IAAS,KAAK,UAAU,CAAA,CAAA,CAAA;AAChF,EAAA,IAAI,OAAA,IAAW,IAAA,EAAM,OAAO,IAAA,CAAK,KAAA;AACjC,EAAA,IAAI,IAAA,CAAK,SAAS,OAAA,IAAW,IAAA,CAAK,SAAS,gBAAA,EAAkB,OAAO,KAAK,GAAA,IAAO,EAAA;AAChF,EAAA,OAAO,UAAA,IAAc,OAAO,IAAA,CAAK,QAAA,CAAS,IAAI,QAAQ,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA,GAAI,EAAA;AACrE;AAEA,SAAS,IAAA,CAAK,MAAa,KAAA,EAAoC;AAC7D,EAAA,KAAA,CAAM,IAAI,CAAA;AACV,EAAA,IAAI,UAAA,IAAc,MAAM,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA,KAAA,KAAS,IAAA,CAAK,KAAA,EAAO,KAAK,CAAC,CAAA;AAC3E;AAEA,MAAM,oBAAoB,EAAE,UAAA,EAAY,CAACQ,0BAAA,EAAe,CAAA,EAAE;AAGnD,SAAS,mBAAA,GAAsB;AACpC,EAAA,OAAO,CAAC,MAAY,IAAA,KAA6B;AAC/C,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA;AAChC,IAAA,MAAM,WAAA,uBAAkB,GAAA,EAA6C;AACrE,IAAA,MAAM,SAAkB,EAAC;AACzB,IAAA,IAAA,CAAK,MAAM,CAAA,IAAA,KAAQ;AACjB,MAAA,IAAI,IAAA,CAAK,IAAA,KAAS,YAAA,IAAgB,IAAA,CAAK,SAAS,oBAAA,EAAsB;AACpE,QAAA,MAAM,MAAM,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,CAAA,EAAI,KAAK,UAAU,CAAA,CAAA;AAC3C,QAAA,IAAI,CAAC,YAAY,GAAA,CAAI,GAAG,GAAG,WAAA,CAAY,GAAA,CAAI,KAAK,IAAI,CAAA;AAAA,MACtD;AACA,MAAA,IAAI,IAAA,CAAK,IAAA,KAAS,OAAA,EAAS,MAAA,CAAO,KAAK,IAAI,CAAA;AAAA,IAC7C,CAAC,CAAA;AAED,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,YAAY,CAAA;AACvC,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,QAAA,CAAS,CAAC,CAAA;AAC/B,MAAA,IAAI,CAAC,QAAQ,QAAA,EAAU;AACvB,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,QAAA,CAAS,GAAA,CAAI,CAAA,GAAA,KAAO;AACrC,QAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,QAAA,EAAU,KAAA,CAAM,MAAA;AAClC,QAAA,MAAM,GAAA,GAAM,GAAA,CAAI,QAAA,EAAU,GAAA,CAAI,MAAA;AAC9B,QAAA,OAAO,KAAA,KAAU,UAAa,GAAA,KAAQ,MAAA,GAAY,SAAY,MAAA,CAAO,KAAA,CAAM,OAAO,GAAG,CAAA;AAAA,MACvF,CAAC,CAAA;AAED,MAAA,IAAI,CAAC,IAAA,CAAK,KAAA,CAAM,CAAA,GAAA,KAAO,GAAA,KAAQ,MAAS,CAAA,EAAG;AAE3C,MAAA,MAAM,SAAA,GAAY,MAAM,MAAA,CAAO,QAAA,CAAS,MAAM,IAAI,CAAA,EAAG,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAA;AAC3E,MAAA,IAAI,cAAc,MAAA,EAAW;AAC7B,MAAA,MAAM,QAAA,GAAW,CAAC,IAAA,CAAK,CAAC,CAAA,EAAG,WAAW,GAAG,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA;AACtD,MAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,MAAA,MAAM,gBAAA,GAAmB,CAAC,IAAA,KAAgB;AACxC,QAAA,IAAI,IAAA,CAAK,IAAA,KAAS,eAAA,IAAmB,IAAA,CAAK,SAAS,gBAAA,EAAkB;AACnE,UAAA,IAAA,CAAK,GAAA,CAAI,CAAA,WAAA,EAAc,IAAA,CAAK,UAAU,CAAA,CAAE,CAAA;AAAA,QAC1C,CAAA,MAAA,IAAW,IAAA,CAAK,IAAA,KAAS,mBAAA,EAAqB;AAC5C,UAAA,IAAA,CAAK,GAAA,CAAI,CAAA,mBAAA,EAAsB,IAAA,CAAK,UAAU,CAAA,CAAE,CAAA;AAAA,QAClD;AAAA,MACF,CAAA;AACA,MAAA,IAAA,CAAK,OAAO,gBAAgB,CAAA;AAG5B,MAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,QAAA,MAAM,UAAA,GAAa,WAAA,CAAY,GAAA,CAAI,GAAG,CAAA;AACtC,QAAA,IAAI,CAAC,UAAA,EAAY;AACjB,QAAA,QAAA,CAAS,KAAK,EAAA,EAAIC,8BAAA,CAAW,YAAY,iBAAiB,CAAA,CAAE,SAAS,CAAA;AACrE,QAAA,IAAA,CAAK,YAAY,gBAAgB,CAAA;AAAA,MACnC;AACA,MAAA,MAAM,KAAA,GAAQ,MAAM,QAAA,CAAS,GAAA;AAAA,QAAI,CAAA,GAAA,KAC/B,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,MAAA,CAAO,QAAA,CAAS,MAAA,EAAO,EAAG,CAAC,CAAA,EAAG,KAAA,KAAU;AAC3D,UAAA,MAAM,IAAA,GAAO,GAAA,CAAI,QAAA,CAAS,KAAK,CAAA;AAC/B,UAAA,OAAO,IAAA,GAAO,QAAA,CAAS,IAAI,CAAA,GAAI,EAAA;AAAA,QACjC,CAAC;AAAA,OACH;AACA,MAAA,KAAA,CAAM,IAAA,GAAO;AAAA,QACX,GAAG,KAAA,CAAM,IAAA;AAAA,QACT,WAAA,EAAa;AAAA,UACX,GAAG,MAAM,IAAA,EAAM,WAAA;AAAA,UACf,aAAA,EAAe,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AAAA,UACjC,QAAA,EAAU,WAAW,KAAK;AAAA;AAC5B,OACF;AAAA,IACF;AAAA,EACF,CAAA;AACF;;ACrDO,SAAS,eAAA,CAAgB,OAAe,SAAA,EAA4B;AACzE,EAAA,MAAM,UAAUC,qBAAA,EAAW;AAC3B,EAAA,MAAM,CAAC,SAAS,UAAU,CAAA,GAAIC,eAAS,MAAO,OAAA,IAAW,SAAA,GAAY,CAAA,GAAI,KAAM,CAAA;AAC/E,EAAA,MAAM,QAAA,GAAWC,YAAA,CAAkB,EAAE,CAAA;AACrC,EAAA,MAAM,QAAA,GAAWA,aAAO,OAAO,CAAA;AAE/B,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,QAAA,CAAS,YAAY,KAAA,EAAO;AAC9B,MAAA,QAAA,CAAS,OAAA,CAAQ,KAAK,EAAE,KAAA,EAAO,IAAI,WAAA,CAAY,GAAA,IAAO,CAAA;AACtD,MAAA,QAAA,CAAS,OAAA,GAAU,KAAA;AAAA,IACrB;AAEA,IAAA,MAAM,OAAA,GAAU,QAAA,CAAS,OAAA,CAAQ,CAAC,CAAA;AAClC,IAAA,IAAI,CAAC,OAAA,EAAS;AAEd,IAAA,MAAM,KAAA,GAAQ,UAAA;AAAA,MACZ,MAAM;AACJ,QAAA,QAAA,CAAS,QAAQ,KAAA,EAAM;AACvB,QAAA,UAAA,CAAW,QAAQ,KAAK,CAAA;AAAA,MAC1B,CAAA;AAAA,MACA,IAAA,CAAK,IAAI,CAAA,EAAG,OAAA,CAAQ,KAAKC,kBAAA,GAAc,WAAA,CAAY,KAAK;AAAA,KAC1D;AAEA,IAAA,OAAO,MAAM,aAAa,KAAK,CAAA;AAAA,EACjC,CAAA,EAAG,CAAC,OAAA,EAAS,KAAK,CAAC,CAAA;AAGnB,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,KAAK,CAAA;AAChC;;ACRO,MAAM,gBAAA,GAAmBC,UAAA,CAAK,SAASC,iBAAAA,CAAiB;AAAA,EAC7D,QAAA;AAAA,EACA,SAAA;AAAA,EACA,kBAAA,GAAqB,KAAA;AAAA,EACrB,SAAA,GAAY,KAAA;AAAA,EACZ,YAAA,GAAe;AACjB,CAAA,EAA0B;AACxB,EAAA,MAAM,KAAA,GAAQ,sBAAsB,QAAQ,CAAA;AAC5C,EAAA,MAAM,MAAA,GAASC,cAAQ,MAAM,WAAA,CAAY,KAAK,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AACxD,EAAA,MAAM,IAAA,GAAO,OAAO,MAAA,GAAS,CAAA;AAC7B,EAAA,MAAM,UAAA,GAAA,CAAc,YAAA,GAAe,gBAAA,GAAmB,kBAAA,EAAoB,kBAAkB,CAAA;AAE5F,EAAA,MAAM,KAAA,GAAQ,UAAU,MAAM,CAAA;AAC9B,EAAA,MAAM,OAAA,GAAU,gBAAgB,KAAA,CAAM,EAAA,CAAG,EAAE,CAAA,EAAG,GAAA,IAAO,GAAG,SAAS,CAAA;AAIjE,EAAA,MAAM,YAAA,GAAe,CAAC,IAAA,KACpB,CAAC,QAAQ,OAAA,IAAW,IAAA,CAAK,GAAA,GAAM,MAAA,GAAY,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,OAAA,GAAU,KAAK,KAAK,CAAA;AAE7E,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAI,CAAA,IAAK,EAAA;AAC7B,EAAA,MAAM,MAAA,GAASA,aAAA,CAAQ,MAAO,SAAA,GAAY,MAAA,CAAO,IAAA,EAAM,cAAc,CAAA,GAAI,IAAA,EAAO,CAAC,SAAA,EAAW,IAAI,CAAC,CAAA;AAEjG,EAAA,uBACEjB,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWkB,WAAA,CAAG,iBAAA,EAAmB,SAAS,CAAA,EAC5C,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,EAAO,KAAA,qBAClBlB,cAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MAEC,OAAA,EAAS,KAAA,KAAU,IAAA,GAAO,MAAA,GAAS,KAAA;AAAA,MACnC,YAAA,EAAc,YAAA,CAAa,KAAA,CAAM,KAAK,CAAC,CAAA;AAAA,MACvC,UAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KAAA;AAAA,IALK;AAAA,GAOR,CAAA,EACH,CAAA;AAEJ,CAAC;AAGD,MAAM,aAAA,GAAgBe,UAAA,CAAK,SAASI,cAAAA,CAAc;AAAA,EAChD,UAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAMG;AACD,EAAA,MAAM,aAAA,GAAgBF,aAAA;AAAA,IACpB,MAAO,YAAA,KAAiB,MAAA,GAAY,UAAU,CAAC,cAAA,CAAe,YAAY,CAAC,CAAA;AAAA,IAC3E,CAAC,YAAY;AAAA,GACf;AAEA,EAAA,uBACEjB,cAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,aAAA,EAAe,YAAA,IAAgB,CAAC,SAAA,GAAY,uBAAA,GAA0B,cAAA;AAAA,MACtE,aAAA;AAAA,MACA,UAAA;AAAA,MAEC,QAAA,EAAA;AAAA;AAAA,GACH;AAEJ,CAAC,CAAA;AAED,MAAM,UAAoC,EAAC;AAY3C,SAAS,UAAU,MAAA,EAA8B;AAC/C,EAAA,IAAI,IAAA,GAAO,CAAA;AAEX,EAAA,OAAO,MAAA,CAAO,IAAI,CAAA,KAAA,KAAS;AACzB,IAAA,MAAM,IAAA,GAAO,EAAE,KAAA,EAAO,IAAA,EAAM,KAAK,IAAA,GAAO,UAAA,CAAW,KAAK,CAAA,EAAE;AAC1D,IAAA,IAAA,GAAO,IAAA,CAAK,GAAA;AAEZ,IAAA,OAAO,IAAA;AAAA,EACT,CAAC,CAAA;AACH;AAEA,SAAS,WAAW,IAAA,EAAsB;AACxC,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA,EAAG,MAAA,IAAU,CAAA;AACvC;AAIA,SAAS,sBAAsB,IAAA,EAAsB;AACnD,EAAA,OAAO,IAAA,CAAK,SAAS,IAAI,CAAA,GAAI,OAAO,IAAA,CAAK,OAAA,CAAQ,QAAQ,IAAI,CAAA;AAC/D;AAIA,SAAS,WAAW,IAAA,EAAwC;AAC1D,EAAA,MAAM,UAAA,GAAa,KAAK,UAAA,CAAW,SAAA;AACnC,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,UAAU,GAAG,OAAO,MAAA;AAEvC,EAAA,MAAM,QAAA,GAAW,UAAA,CAAW,IAAA,CAAK,CAAA,KAAA,KAAS,OAAO,UAAU,QAAA,IAAY,KAAA,CAAM,UAAA,CAAW,WAAW,CAAC,CAAA;AACpG,EAAA,OAAO,OAAO,QAAA,KAAa,QAAA,GAAW,SAAS,KAAA,CAAM,WAAA,CAAY,MAAM,CAAA,GAAI,MAAA;AAC7E;AAEA,SAAS,WAAW,IAAA,EAAiF;AACnG,EAAA,MAAM,KAAA,GAAQ,IAAA,EAAM,QAAA,CAAS,IAAA,CAAK,CAAA,KAAA,KAAS,MAAM,IAAA,KAAS,SAAA,IAAa,KAAA,CAAM,OAAA,KAAY,MAAM,CAAA;AAC/F,EAAA,IAAI,KAAA,EAAO,IAAA,KAAS,SAAA,EAAW,OAAO,MAAA;AAEtC,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,QAAA,CAAS,GAAA,CAAI,CAAA,KAAA,KAAU,KAAA,CAAM,IAAA,KAAS,MAAA,GAAS,KAAA,CAAM,KAAA,GAAQ,EAAG,CAAA,CAAE,KAAK,EAAE,CAAA;AAC5F,EAAA,OAAO,EAAE,IAAA,EAAM,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA,EAAG,QAAA,EAAU,UAAA,CAAW,KAAK,CAAA,EAAE;AACtE;AAEA,SAAS,iBAAA,CAAkB;AAAA,EACzB,IAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,MAAM,MAAA,GAAS,WAAW,IAAI,CAAA;AAC9B,EAAA,IAAI,CAAC,MAAA,EAAQ,uBAAOA,cAAA,CAAC,KAAA,EAAA,EAAI,WAAuB,QAAA,EAAS,CAAA;AAEzD,EAAA,uBACEA,cAAA;AAAA,IAACoB,mBAAA;AAAA,IAAA;AAAA,MACC,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,MAAM,MAAA,CAAO,QAAA;AAAA,MACb,QAAA,EAAS,QAAA;AAAA,MACT,SAAA,EAAWF,WAAA,CAAG,kBAAA,EAAoB,SAAS,CAAA;AAAA,MAC3C,WAAA,EAAY;AAAA;AAAA,GACd;AAEJ;AAEA,MAAM,qBAAA,GAAwB,6DAAA;AAE9B,SAAS,iBAAiB,KAAA,EAA4B;AACpD,EAAA,OAAO,KAAA,CAAM,MAAA,KAAW,CAAA,IAAK,CAAC,KAAA,CAAM,OAAA,IAAW,CAAC,KAAA,CAAM,OAAA,IAAW,CAAC,KAAA,CAAM,QAAA,IAAY,CAAC,KAAA,CAAM,MAAA;AAC7F;AAEA,SAAS,aAAa,kBAAA,EAA8E;AAClG,EAAA,OAAO,SAAS,YAAA,CAAa,EAAE,IAAA,EAAM,KAAA,EAAO,UAAS,EAAG;AACtD,IAAA,MAAM,UAAA,GAAa,eAAA,CAAgB,IAAA,CAAK,IAAA,IAAQ,EAAE,CAAA;AAElD,IAAA,MAAM,cAAoD,CAAA,KAAA,KAAS;AACjE,MAAA,IAAI,CAAC,UAAA,IAAc,kBAAA,KAAuB,YAAY,CAAC,gBAAA,CAAiB,KAAK,CAAA,EAAG;AAEhF,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,IAAA,EAAM,UAAU,qBAAqB,CAAA;AAC/D,MAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,MAAA,KAAA,CAAM,MAAA,GAAS,IAAA;AACf,MAAA,KAAA,CAAM,cAAA,EAAe;AAAA,IACvB,CAAA;AAEA,IAAA,uBACElB,cAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QACC,IAAA;AAAA,QACA,KAAA;AAAA,QACA,OAAA,EAAS,WAAA;AAAA,QACT,MAAA,EAAQ,aAAa,QAAA,GAAW,MAAA;AAAA,QAChC,GAAA,EAAK,aAAa,qBAAA,GAAwB,MAAA;AAAA,QAEzC;AAAA;AAAA,KACH;AAAA,EAEJ,CAAA;AACF;AAEA,MAAM,cAAA,GAAiB,CAAC,SAAS,CAAA;AACjC,MAAM,uBAAA,GAA0B,CAAC,SAAA,EAAW,mBAAmB,CAAA;AAK/D,MAAM,cAAA,GAAiB,EAAE,KAAA,EAAO,KAAA,EAAO,UAAU,WAAA,EAAY;AAK7D,MAAM,UAAA,GAAyB;AAAA,EAC7B,GAAA,EAAK,iBAAA;AAAA,EACL,CAAA,EAAG,aAAa,KAAK;AACvB,CAAA;AAEA,MAAM,iBAAA,GAAgC;AAAA,EACpC,GAAG,UAAA;AAAA,EACH,CAAA,EAAG,aAAa,QAAQ;AAC1B,CAAA;AAEA,MAAM,kBAAA,GAAqB,EAAE,GAAA,EAAK,UAAA,EAAY,QAAQ,iBAAA,EAAkB;AACxE,MAAM,gBAAA,GAAmB;AAAA,EACvB,GAAA,EAAK,EAAE,GAAG,UAAA,EAAY,OAAO,aAAA,EAAc;AAAA,EAC3C,MAAA,EAAQ,EAAE,GAAG,iBAAA,EAAmB,OAAO,aAAA;AACzC,CAAA;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"markdown-renderer-o3r77XBU.js","sources":["../src/ds/components/MarkdownRenderer/arriving.ts","../src/ds/components/MarkdownRenderer/blocks.ts","../src/ds/components/MarkdownRenderer/table-csv.ts","../src/ds/components/MarkdownRenderer/markdown-table.tsx","../src/ds/components/MarkdownRenderer/table-markdown.ts","../src/ds/components/MarkdownRenderer/use-settled.ts","../src/ds/components/MarkdownRenderer/markdown-renderer.tsx"],"sourcesContent":["import type { ExtraProps } from 'react-markdown';\n\nimport { ARRIVING_CLASS } from '@/ds/tokens';\n\nimport '@/ds/components/Arrival/arrival.css';\n\ntype MarkdownElement = NonNullable<ExtraProps['node']>;\ntype MarkdownChild = MarkdownElement['children'][number];\n\n/** Fades whole: a fence renders through `CodeBlock`, and inline code carries a background. */\nconst UNBROKEN = new Set(['pre', 'code']);\n\nconst wrap = (value: string, arriving: boolean): MarkdownChild => ({\n type: 'element',\n tagName: 'span',\n properties: arriving ? { className: [ARRIVING_CLASS] } : {},\n children: [{ type: 'text', value }],\n});\n\nfunction markArriving(node: MarkdownElement): void {\n const classes = node.properties.className;\n\n node.properties.className = Array.isArray(classes) ? [...classes, ARRIVING_CLASS] : [ARRIVING_CLASS];\n}\n\nfunction rebuild(nodes: MarkdownChild[], arriving: () => boolean): MarkdownChild[] {\n const out: MarkdownChild[] = [];\n\n for (const node of nodes) {\n if (node.type === 'text') {\n for (const piece of node.value.match(/\\S+|\\s+/g) ?? []) {\n if (/\\S/.test(piece)) out.push(wrap(piece, arriving()));\n else out.push({ type: 'text', value: piece });\n }\n\n continue;\n }\n\n out.push(node);\n\n if (node.type !== 'element') continue;\n\n if (!UNBROKEN.has(node.tagName)) node.children = rebuild(node.children, arriving);\n else if (arriving()) markArriving(node);\n }\n\n return out;\n}\n\n/**\n * Gives every word of a block an element of its own, and the entrance class to\n * those past the first `settled` — the words that were not on screen yet when\n * the reader joined this reply.\n *\n * Every word, not just the arriving ones: react-markdown parses afresh on each\n * landing and React matches the children it already mounted by position, so a\n * wrapper that came and went would land where a bare text node used to be and\n * remount half the paragraph, replaying entrances that had long finished.\n * Wrapping the lot keeps every position fixed — a new word only ever appends —\n * and a word never gains the class it did not mount with, so nothing replays.\n */\nexport function rehypeArriving(settled: number) {\n return function attach() {\n return (tree: { children: MarkdownChild[] }) => {\n let word = 0;\n\n tree.children = rebuild(tree.children, () => word++ >= settled);\n };\n };\n}\n","const FENCE_OPEN = /^ {0,3}(`{3,}|~{3,})/;\nconst FENCE_CLOSE = /^ {0,3}(`{3,}|~{3,})[ \\t]*$/;\nconst LIST_ITEM = /^ {0,3}(?:[-*+]|\\d{1,9}[.)])(?:[ \\t]|$)/;\nconst INDENTED = /^(?:\\t| {2,})/;\nconst DEFINITION = /^ {0,3}\\[[^\\]]+\\]:/;\n\nfunction fenceOpenedBy(line: string): string | undefined {\n return FENCE_OPEN.exec(line)?.[1];\n}\n\n// Both are runs of one character, so `startsWith` is \"same marker, at least as long\".\nfunction closesFence(line: string, marker: string): boolean {\n return FENCE_CLOSE.exec(line)?.[1]?.startsWith(marker) ?? false;\n}\n\nfunction startsBlock(line: string, inList: boolean): boolean {\n if (INDENTED.test(line)) return false;\n\n return !(inList && LIST_ITEM.test(line));\n}\n\n/**\n * Cuts markdown into top-level blocks so a growing reply re-parses its last\n * block instead of all of them. Rejoining the result returns the input, and\n * every block renders as it would have inside the whole.\n *\n * Each rule only ever merges: over-merging costs a re-parse, while cutting a\n * construct in two changes what it renders as. Link reference and footnote\n * definitions resolve across blank lines, which no line-level rule can see, so\n * reaching one outside a fence abandons the split for the whole text.\n */\nexport function splitBlocks(markdown: string): string[] {\n const lines = markdown.split('\\n');\n const starts = [0];\n let fence: string | undefined;\n let started = false;\n let broken = false;\n let inList = false;\n\n for (const [index, line] of lines.entries()) {\n if (fence) {\n if (closesFence(line, fence)) fence = undefined;\n continue;\n }\n\n if (line.trim() === '') {\n broken = started;\n continue;\n }\n\n if (DEFINITION.test(line)) return [markdown];\n\n if (broken && startsBlock(line, inList)) {\n starts.push(index);\n started = false;\n }\n\n if (!started) inList = LIST_ITEM.test(line);\n\n started = true;\n broken = false;\n fence = fenceOpenedBy(line);\n }\n\n return starts.map((start, position) => {\n const end = starts[position + 1];\n const block = lines.slice(start, end ?? lines.length).join('\\n');\n\n return end === undefined ? block : `${block}\\n`;\n });\n}\n","function spreadsheetCell(value: string): string {\n // Quoting alone does not stop spreadsheet apps from evaluating formulas.\n const numeric = /^[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?$/i.test(value.trim());\n const formula = /^[\\s\\uFEFF]*[=+\\-@=+-@]/u.test(value);\n const controlPrefix = /^[\\t\\r\\n]/.test(value);\n const safe = controlPrefix || (formula && !numeric) ? `'${value}` : value;\n return `\"${safe.replaceAll('\"', '\"\"')}\"`;\n}\n\nexport function tableToCsv(rows: string[][]): string {\n return rows.map(row => row.map(spreadsheetCell).join(',')).join('\\r\\n');\n}\n\nexport function downloadTableCsv(csv: string): void {\n const blob = new Blob(['\\uFEFF', csv], { type: 'text/csv;charset=utf-8' });\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement('a');\n anchor.href = url;\n anchor.download = 'table.csv';\n document.body.appendChild(anchor);\n anchor.click();\n anchor.remove();\n URL.revokeObjectURL(url);\n}\n","import { CheckIcon, ChevronDownIcon, CopyIcon, DownloadIcon } from 'lucide-react';\nimport type { ComponentProps } from 'react';\nimport type { ExtraProps } from 'react-markdown';\nimport { downloadTableCsv } from './table-csv';\nimport { Button } from '@/ds/components/Button';\nimport { ButtonsGroup } from '@/ds/components/ButtonsGroup';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu';\nimport { useCopyToClipboard } from '@/hooks/use-copy-to-clipboard';\n\nexport function MarkdownTable({ node, children }: ComponentProps<'table'> & ExtraProps) {\n const markdown = node?.properties.tableMarkdown;\n const csv = node?.properties.tableCsv;\n const { isCopied, copyToClipboard } = useCopyToClipboard({ copyMessage: 'Copied table markdown' });\n\n return (\n <div className=\"my-3 w-fit max-w-full min-w-0\">\n <div className=\"flex justify-end\">\n <ButtonsGroup spacing=\"close\" aria-label=\"Table actions\">\n <Button\n type=\"button\"\n size=\"xs\"\n variant=\"ghost\"\n disabled={typeof markdown !== 'string'}\n onClick={() => {\n if (typeof markdown === 'string') copyToClipboard(markdown);\n }}\n aria-label=\"Copy table as markdown\"\n >\n {isCopied ? <CheckIcon /> : <CopyIcon />}\n {isCopied ? 'Copied!' : 'Copy table as markdown'}\n </Button>\n <DropdownMenu>\n <DropdownMenu.Trigger\n disabled={typeof csv !== 'string'}\n render={\n <Button type=\"button\" size=\"icon-xs\" variant=\"ghost\" aria-label=\"More table options\">\n <ChevronDownIcon />\n </Button>\n }\n />\n <DropdownMenu.Content align=\"end\" size=\"sm\" className=\"w-max min-w-0\">\n <DropdownMenu.Item\n size=\"sm\"\n onClick={() => {\n if (typeof csv === 'string') downloadTableCsv(csv);\n }}\n >\n <DownloadIcon />\n Download CSV\n </DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu>\n </ButtonsGroup>\n </div>\n <div className=\"max-w-full overflow-x-auto\">\n <table className=\"table min-w-full\">{children}</table>\n </div>\n </div>\n );\n}\n","import type { Definition, FootnoteDefinition, Nodes, Root, Table } from 'mdast';\nimport { gfmToMarkdown } from 'mdast-util-gfm';\nimport { toMarkdown } from 'mdast-util-to-markdown';\nimport { tableToCsv } from './table-csv';\n\nfunction cellText(node: Nodes): string {\n if (node.type === 'footnoteReference') return `[^${node.label ?? node.identifier}]`;\n if ('value' in node) return node.value;\n if (node.type === 'image' || node.type === 'imageReference') return node.alt ?? '';\n return 'children' in node ? node.children.map(cellText).join('') : '';\n}\n\nfunction walk(node: Nodes, visit: (node: Nodes) => void): void {\n visit(node);\n if ('children' in node) node.children.forEach(child => walk(child, visit));\n}\n\nconst SERIALIZE_OPTIONS = { extensions: [gfmToMarkdown()] };\n\n/** Capture table exports before rehype replaces text with animation spans. */\nexport function remarkTableMarkdown() {\n return (tree: Root, file: { value: unknown }) => {\n const source = String(file.value);\n const definitions = new Map<string, Definition | FootnoteDefinition>();\n const tables: Table[] = [];\n walk(tree, node => {\n if (node.type === 'definition' || node.type === 'footnoteDefinition') {\n const key = `${node.type}:${node.identifier}`;\n if (!definitions.has(key)) definitions.set(key, node);\n }\n if (node.type === 'table') tables.push(node);\n });\n\n const lines = source.split(/\\r\\n|\\r|\\n/);\n for (const table of tables) {\n const header = table.children[0];\n if (!header?.position) continue;\n const rows = table.children.map(row => {\n const start = row.position?.start.offset;\n const end = row.position?.end.offset;\n return start === undefined || end === undefined ? undefined : source.slice(start, end);\n });\n // Only offer exports when the parser supplied the original row locations.\n if (!rows.every(row => row !== undefined)) continue;\n // Row positions exclude list/blockquote prefixes. The delimiter has no AST node.\n const delimiter = lines[header.position.start.line]?.replace(/^[\\t >]*/, '');\n if (delimiter === undefined) continue;\n const markdown = [rows[0], delimiter, ...rows.slice(1)];\n const used = new Set<string>();\n const collectReference = (node: Nodes) => {\n if (node.type === 'linkReference' || node.type === 'imageReference') {\n used.add(`definition:${node.identifier}`);\n } else if (node.type === 'footnoteReference') {\n used.add(`footnoteDefinition:${node.identifier}`);\n }\n };\n walk(table, collectReference);\n // Visiting appended definitions also collects links/footnotes they depend on.\n // The set prevents duplicates and cycles, including self-referencing footnotes.\n for (const key of used) {\n const definition = definitions.get(key);\n if (!definition) continue;\n markdown.push('', toMarkdown(definition, SERIALIZE_OPTIONS).trimEnd());\n walk(definition, collectReference);\n }\n const cells = table.children.map(row =>\n Array.from({ length: header.children.length }, (_, index) => {\n const cell = row.children[index];\n return cell ? cellText(cell) : '';\n }),\n );\n table.data = {\n ...table.data,\n hProperties: {\n ...table.data?.hProperties,\n tableMarkdown: markdown.join('\\n'),\n tableCsv: tableToCsv(cells),\n },\n };\n }\n };\n}\n","import { useEffect, useRef, useState } from 'react';\n\nimport { useWatched } from '@/ds/components/Arrival';\nimport { ARRIVING_MS } from '@/ds/tokens';\n\ninterface Landing {\n words: number;\n at: number;\n}\n\n/**\n * How many of a reply's words have been on screen long enough that their entrance is over.\n *\n * The entrance plays on whatever mounts carrying the class, so it replays every time a\n * word's element is rebuilt — and markdown rebuilds a growing tail constantly: a `-`\n * turns a paragraph into a list item, a closing `**` splits it around a `<strong>`, the\n * stream ends and the mend comes off. Each of those swaps the element a settled word\n * lives in, which is what makes a word already read fade in again.\n *\n * Ageing them out is the whole answer: a word carries the class only while it is new,\n * so however often the tail is rebuilt, only what is genuinely arriving animates.\n *\n * What counts as new at mount is not this hook's call. A reply the reader was handed\n * is already there, and a block that mounts complete — a card's output, an expanded\n * body — enters with its container. Only a passage born streaming under the reader's\n * eyes is new from its first word: the reveal often lands several words in its first\n * commit, and they enter like every word after them.\n */\nexport function useSettledWords(words: number, streaming: boolean): number {\n const watched = useWatched();\n const [settled, setSettled] = useState(() => (watched && streaming ? 0 : words));\n const landings = useRef<Landing[]>([]);\n const recorded = useRef(settled);\n\n useEffect(() => {\n if (recorded.current !== words) {\n landings.current.push({ words, at: performance.now() });\n recorded.current = words;\n }\n\n const waiting = landings.current[0];\n if (!waiting) return;\n\n const timer = setTimeout(\n () => {\n landings.current.shift();\n setSettled(waiting.words);\n },\n Math.max(0, waiting.at + ARRIVING_MS - performance.now()),\n );\n\n return () => clearTimeout(timer);\n }, [settled, words]);\n\n // A shorter reply replacing the one on screen settles at once: nothing of it is new.\n return Math.min(settled, words);\n}\n","import { memo, useMemo } from 'react';\nimport type { MouseEvent, MouseEventHandler, ReactNode } from 'react';\nimport Markdown from 'react-markdown';\nimport type { Components, ExtraProps, Options } from 'react-markdown';\nimport remarkGfm from 'remark-gfm';\nimport remend from 'remend';\n\nimport { rehypeArriving } from './arriving';\nimport { splitBlocks } from './blocks';\nimport { MarkdownTable } from './markdown-table';\nimport { remarkTableMarkdown } from './table-markdown';\nimport { useSettledWords } from './use-settled';\nimport { CodeBlock } from '@/ds/components/CodeBlock';\nimport { cn } from '@/lib/utils';\n\nimport './markdown-renderer.css';\n\nexport type MarkdownExternalLinkTarget = 'tab' | 'window';\n\nexport interface MarkdownRendererProps {\n children: string;\n className?: string;\n externalLinkTarget?: MarkdownExternalLinkTarget;\n /** The text is a prefix of one still being written: close the markers the stream has not reached. */\n streaming?: boolean;\n /** Opt in to table copy/download controls; disabled while this text is streaming. */\n tableActions?: boolean;\n}\n\n/**\n * Renders a markdown string. Agent output can carry attacker-influenced text\n * (file contents, tool output, web pages): react-markdown escapes raw HTML and\n * drops dangerous link schemes, so nothing here reaches the DOM as markup.\n *\n * react-markdown re-parses on every render, and a streaming reply re-renders\n * its whole transcript on every delta. Memoizing spares the settled messages;\n * rendering block by block — streaming or not — spares every block of the live\n * one but the last, and lets a reply settle without remounting what is already\n * on screen.\n *\n * The text is drawn as given: pacing a stream is `useRevealedText`, and belongs to\n * whoever owns the whole of what is being laid down — a reply is prose, tool rows\n * and cards, and they have to arrive in the order they were written. Only what\n * lands after the reader joined plays an entrance, and only while it is still new:\n * a reply opened part-written is already there, and fading in what someone is\n * halfway through reading would be both a lie and a screenful of animations at\n * once.\n */\nexport const MarkdownRenderer = memo(function MarkdownRenderer({\n children,\n className,\n externalLinkTarget = 'tab',\n streaming = false,\n tableActions = false,\n}: MarkdownRendererProps) {\n const shown = decodeEscapedNewlines(children);\n const blocks = useMemo(() => splitBlocks(shown), [shown]);\n const last = blocks.length - 1;\n const components = (tableActions ? TABLE_COMPONENTS : DEFAULT_COMPONENTS)[externalLinkTarget];\n\n const spans = wordSpans(blocks);\n const settled = useSettledWords(spans.at(-1)?.end ?? 0, streaming);\n\n // A block whose words have all finished their entrance has nothing left to play,\n // which is what `undefined` says: leave it as plain text, no spans at all.\n const settledWords = (span: WordSpan | undefined): number | undefined =>\n !span || settled >= span.end ? undefined : Math.max(0, settled - span.start);\n\n const tail = blocks[last] ?? '';\n const mended = useMemo(() => (streaming ? remend(tail, REMEND_OPTIONS) : tail), [streaming, tail]);\n\n return (\n <div className={cn('mastra-markdown', className)}>\n {blocks.map((block, index) => (\n <MarkdownBlock\n key={index}\n content={index === last ? mended : block}\n settledWords={settledWords(spans[index])}\n components={components}\n streaming={streaming}\n tableActions={tableActions}\n />\n ))}\n </div>\n );\n});\n\n/** Keyed by position at the call site: a content key remounts on every character. */\nconst MarkdownBlock = memo(function MarkdownBlock({\n components,\n content,\n settledWords,\n streaming,\n tableActions,\n}: {\n components: Components;\n content: string;\n settledWords?: number;\n streaming: boolean;\n tableActions: boolean;\n}) {\n const rehypePlugins = useMemo(\n () => (settledWords === undefined ? SETTLED : [rehypeArriving(settledWords)]),\n [settledWords],\n );\n\n return (\n <Markdown\n remarkPlugins={tableActions && !streaming ? COPYABLE_REMARK_PLUGINS : REMARK_PLUGINS}\n rehypePlugins={rehypePlugins}\n components={components}\n >\n {content}\n </Markdown>\n );\n});\n\nconst SETTLED: Options['rehypePlugins'] = [];\n\ninterface WordSpan {\n start: number;\n end: number;\n}\n\n/**\n * Where each block's words fall in the reply's own count, so one settled count covers\n * them all. Counting the source counts its markers too, so the boundary only ever errs\n * towards leaving a word unanimated.\n */\nfunction wordSpans(blocks: string[]): WordSpan[] {\n let read = 0;\n\n return blocks.map(block => {\n const span = { start: read, end: read + countWords(block) };\n read = span.end;\n\n return span;\n });\n}\n\nfunction countWords(text: string): number {\n return text.match(/\\S+/g)?.length ?? 0;\n}\n\n// Agent networks emit their text with literal `\\n`. Only unescape when the text\n// has no real newline, otherwise a `\"a\\nb\"` inside a code fence gets shredded.\nfunction decodeEscapedNewlines(text: string): string {\n return text.includes('\\n') ? text : text.replace(/\\\\n/g, '\\n');\n}\n\ntype MarkdownNode = NonNullable<ExtraProps['node']>;\n\nfunction languageOf(node: MarkdownNode): string | undefined {\n const classNames = node.properties.className;\n if (!Array.isArray(classNames)) return undefined;\n\n const language = classNames.find(entry => typeof entry === 'string' && entry.startsWith('language-'));\n return typeof language === 'string' ? language.slice('language-'.length) : undefined;\n}\n\nfunction fencedCode(node: MarkdownNode | undefined): { code: string; language?: string } | undefined {\n const child = node?.children.find(entry => entry.type === 'element' && entry.tagName === 'code');\n if (child?.type !== 'element') return undefined;\n\n const code = child.children.map(entry => (entry.type === 'text' ? entry.value : '')).join('');\n return { code: code.replace(/\\n$/, ''), language: languageOf(child) };\n}\n\nfunction MarkdownCodeBlock({\n node,\n children,\n className,\n}: {\n node?: MarkdownNode;\n children?: ReactNode;\n className?: string;\n}) {\n const fenced = fencedCode(node);\n if (!fenced) return <pre className={className}>{children}</pre>;\n\n return (\n <CodeBlock\n code={fenced.code}\n lang={fenced.language}\n overflow=\"scroll\"\n className={cn('my-3 bg-surface1', className)}\n copyMessage=\"Copied code to clipboard\"\n />\n );\n}\n\nconst POPUP_WINDOW_FEATURES = 'popup=yes,width=720,height=800,resizable=yes,scrollbars=yes';\n\nfunction isPlainLeftClick(event: MouseEvent): boolean {\n return event.button === 0 && !event.metaKey && !event.ctrlKey && !event.shiftKey && !event.altKey;\n}\n\nfunction markdownLink(externalLinkTarget: MarkdownExternalLinkTarget): NonNullable<Components['a']> {\n return function MarkdownLink({ href, title, children }) {\n const isExternal = /^https?:\\/\\//i.test(href ?? '');\n\n const openInPopup: MouseEventHandler<HTMLAnchorElement> = event => {\n if (!isExternal || externalLinkTarget !== 'window' || !isPlainLeftClick(event)) return;\n\n const popup = window.open(href, '_blank', POPUP_WINDOW_FEATURES);\n if (!popup) return;\n\n popup.opener = null;\n event.preventDefault();\n };\n\n return (\n <a\n href={href}\n title={title}\n onClick={openInPopup}\n target={isExternal ? '_blank' : undefined}\n rel={isExternal ? 'noopener noreferrer' : undefined}\n >\n {children}\n </a>\n );\n };\n}\n\nconst REMARK_PLUGINS = [remarkGfm];\nconst COPYABLE_REMARK_PLUGINS = [remarkGfm, remarkTableMarkdown];\n\n// Links stay text until their URL lands: remend's placeholder href would render\n// a live anchor to nowhere. No math is rendered here, so pairing `$$` would only\n// turn one literal into another.\nconst REMEND_OPTIONS = { katex: false, linkMode: 'text-only' } as const;\n\n// Elements are listed one by one: react-markdown also passes its `node`, which\n// React would forward to the DOM as a stray attribute. Everything else is\n// styled from markdown-renderer.css.\nconst COMPONENTS: Components = {\n pre: MarkdownCodeBlock,\n a: markdownLink('tab'),\n};\n\nconst WINDOW_COMPONENTS: Components = {\n ...COMPONENTS,\n a: markdownLink('window'),\n};\n\nconst DEFAULT_COMPONENTS = { tab: COMPONENTS, window: WINDOW_COMPONENTS };\nconst TABLE_COMPONENTS = {\n tab: { ...COMPONENTS, table: MarkdownTable },\n window: { ...WINDOW_COMPONENTS, table: MarkdownTable },\n};\n"],"names":["MarkdownRenderer","MarkdownBlock"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"message-D-oFS9ys.cjs","sources":["../src/ds/components/Message/message.tsx"],"sourcesContent":["import type { ComponentProps, ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface MessageProps extends ComponentProps<'div'> {\n from: 'user' | 'assistant';\n avatar?: ReactNode;\n footer?: ReactNode;\n pending?: boolean;\n}\n\nexport function Message({ from, avatar, footer, pending, children, className, ...props }: MessageProps) {\n const isUser = from === 'user';\n\n return (\n <div\n {...props}\n data-slot=\"message\"\n data-from={from}\n data-message-pending={pending || undefined}\n className={cn(\n 'group/message max-w-full min-w-0',\n isUser && 'my-3 ml-auto flex w-fit max-w-[70%] items-start gap-2',\n !isUser && footer && 'mb-3',\n className,\n )}\n >\n {avatar}\n <div className={cn('min-w-0', isUser && 'flex flex-col items-end')}>\n <div\n data-slot=\"message-content\"\n className={cn(\n 'max-w-full min-w-0 text-ui-md leading-ui-md break-words',\n isUser && 'rounded-xl border border-transparent bg-neutral6/5 px-4 py-2 text-text1',\n isUser && pending && 'border-dashed border-border1',\n !isUser && footer && '[&>:last-child]:mb-0',\n )}\n >\n {children}\n </div>\n {footer && <div className=\"mt-1 max-w-full\">{footer}</div>}\n </div>\n </div>\n );\n}\n\nexport interface MessageActionsProps extends ComponentProps<'div'> {\n visibility?: 'hover' | 'always';\n}\n\nexport function MessageActions({ visibility = 'hover', children, className, ...props }: MessageActionsProps) {\n return (\n <div\n {...props}\n data-slot=\"message-actions\"\n className={cn(\n 'flex flex-wrap items-center gap-1 group-data-[from=user]/message:flex-row-reverse',\n 'motion-safe:transition-opacity [&_button]:pointer-coarse:min-h-11 [&_button]:pointer-coarse:min-w-11',\n visibility === 'hover' &&\n 'group-focus-within/message:opacity-100 group-hover/message:opacity-100 pointer-fine:opacity-0',\n className,\n )}\n >\n {children}\n </div>\n );\n}\n\nexport function MessageMetadata({ className, ...props }: ComponentProps<'span'>) {\n return <span {...props} className={cn('text-icon3 inline-flex items-center gap-1 text-ui-xs', className)} />;\n}\n"],"names":["jsxs","cn","jsx"],"mappings":";;;;;AAUO,SAAS,OAAA,CAAQ,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAA,EAAQ,SAAS,QAAA,EAAU,SAAA,EAAW,GAAG,KAAA,EAAM,EAAiB;AACtG,EAAA,MAAM,SAAS,IAAA,KAAS,MAAA;AAExB,EAAA,uBACEA,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,WAAA,EAAU,SAAA;AAAA,MACV,WAAA,EAAW,IAAA;AAAA,MACX,wBAAsB,OAAA,IAAW,MAAA;AAAA,MACjC,SAAA,EAAWC,WAAA;AAAA,QACT,kCAAA;AAAA,QACA,MAAA,IAAU,uDAAA;AAAA,QACV,CAAC,UAAU,MAAA,IAAU,MAAA;AAAA,QACrB;AAAA,OACF;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,MAAA;AAAA,wCACA,KAAA,EAAA,EAAI,SAAA,EAAWA,YAAG,SAAA,EAAW,MAAA,IAAU,yBAAyB,CAAA,EAC/D,QAAA,EAAA;AAAA,0BAAAC,cAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,WAAA,EAAU,iBAAA;AAAA,cACV,SAAA,EAAWD,WAAA;AAAA,gBACT,yDAAA;AAAA,gBACA,MAAA,IAAU,yEAAA;AAAA,gBACV,UAAU,OAAA,IAAW,8BAAA;AAAA,gBACrB,CAAC,UAAU,MAAA,IAAU;AAAA,eACvB;AAAA,cAEC;AAAA;AAAA,WACH;AAAA,UACC,MAAA,oBAAUC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAmB,QAAA,EAAA,MAAA,EAAO;AAAA,SAAA,EACtD;AAAA;AAAA;AAAA,GACF;AAEJ;AAMO,SAAS,cAAA,CAAe,EAAE,UAAA,GAAa,OAAA,EAAS,UAAU,SAAA,EAAW,GAAG,OAAM,EAAwB;AAC3G,EAAA,uBACEA,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,WAAA,EAAU,iBAAA;AAAA,MACV,SAAA,EAAWD,WAAA;AAAA,QACT,mFAAA;AAAA,QACA,sGAAA;AAAA,QACA,eAAe,OAAA,IACb,+FAAA;AAAA,QACF;AAAA,OACF;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ;AAEO,SAAS,eAAA,CAAgB,EAAE,SAAA,EAAW,GAAG,OAAM,EAA2B;AAC/E,EAAA,uBAAOC,cAAA,CAAC,UAAM,GAAG,KAAA,EAAO,WAAWD,WAAA,CAAG,sDAAA,EAAwD,SAAS,CAAA,EAAG,CAAA;AAC5G;;;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"message-DFPYEfGS.js","sources":["../src/ds/components/Message/message.tsx"],"sourcesContent":["import type { ComponentProps, ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface MessageProps extends ComponentProps<'div'> {\n from: 'user' | 'assistant';\n avatar?: ReactNode;\n footer?: ReactNode;\n pending?: boolean;\n}\n\nexport function Message({ from, avatar, footer, pending, children, className, ...props }: MessageProps) {\n const isUser = from === 'user';\n\n return (\n <div\n {...props}\n data-slot=\"message\"\n data-from={from}\n data-message-pending={pending || undefined}\n className={cn(\n 'group/message max-w-full min-w-0',\n isUser && 'my-3 ml-auto flex w-fit max-w-[70%] items-start gap-2',\n !isUser && footer && 'mb-3',\n className,\n )}\n >\n {avatar}\n <div className={cn('min-w-0', isUser && 'flex flex-col items-end')}>\n <div\n data-slot=\"message-content\"\n className={cn(\n 'max-w-full min-w-0 text-ui-md leading-ui-md break-words',\n isUser && 'rounded-xl border border-transparent bg-neutral6/5 px-4 py-2 text-text1',\n isUser && pending && 'border-dashed border-border1',\n !isUser && footer && '[&>:last-child]:mb-0',\n )}\n >\n {children}\n </div>\n {footer && <div className=\"mt-1 max-w-full\">{footer}</div>}\n </div>\n </div>\n );\n}\n\nexport interface MessageActionsProps extends ComponentProps<'div'> {\n visibility?: 'hover' | 'always';\n}\n\nexport function MessageActions({ visibility = 'hover', children, className, ...props }: MessageActionsProps) {\n return (\n <div\n {...props}\n data-slot=\"message-actions\"\n className={cn(\n 'flex flex-wrap items-center gap-1 group-data-[from=user]/message:flex-row-reverse',\n 'motion-safe:transition-opacity [&_button]:pointer-coarse:min-h-11 [&_button]:pointer-coarse:min-w-11',\n visibility === 'hover' &&\n 'group-focus-within/message:opacity-100 group-hover/message:opacity-100 pointer-fine:opacity-0',\n className,\n )}\n >\n {children}\n </div>\n );\n}\n\nexport function MessageMetadata({ className, ...props }: ComponentProps<'span'>) {\n return <span {...props} className={cn('text-icon3 inline-flex items-center gap-1 text-ui-xs', className)} />;\n}\n"],"names":[],"mappings":";;;AAUO,SAAS,OAAA,CAAQ,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAA,EAAQ,SAAS,QAAA,EAAU,SAAA,EAAW,GAAG,KAAA,EAAM,EAAiB;AACtG,EAAA,MAAM,SAAS,IAAA,KAAS,MAAA;AAExB,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,WAAA,EAAU,SAAA;AAAA,MACV,WAAA,EAAW,IAAA;AAAA,MACX,wBAAsB,OAAA,IAAW,MAAA;AAAA,MACjC,SAAA,EAAW,EAAA;AAAA,QACT,kCAAA;AAAA,QACA,MAAA,IAAU,uDAAA;AAAA,QACV,CAAC,UAAU,MAAA,IAAU,MAAA;AAAA,QACrB;AAAA,OACF;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,MAAA;AAAA,6BACA,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,SAAA,EAAW,MAAA,IAAU,yBAAyB,CAAA,EAC/D,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,WAAA,EAAU,iBAAA;AAAA,cACV,SAAA,EAAW,EAAA;AAAA,gBACT,yDAAA;AAAA,gBACA,MAAA,IAAU,yEAAA;AAAA,gBACV,UAAU,OAAA,IAAW,8BAAA;AAAA,gBACrB,CAAC,UAAU,MAAA,IAAU;AAAA,eACvB;AAAA,cAEC;AAAA;AAAA,WACH;AAAA,UACC,MAAA,oBAAU,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAmB,QAAA,EAAA,MAAA,EAAO;AAAA,SAAA,EACtD;AAAA;AAAA;AAAA,GACF;AAEJ;AAMO,SAAS,cAAA,CAAe,EAAE,UAAA,GAAa,OAAA,EAAS,UAAU,SAAA,EAAW,GAAG,OAAM,EAAwB;AAC3G,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,WAAA,EAAU,iBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,mFAAA;AAAA,QACA,sGAAA;AAAA,QACA,eAAe,OAAA,IACb,+FAAA;AAAA,QACF;AAAA,OACF;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ;AAEO,SAAS,eAAA,CAAgB,EAAE,SAAA,EAAW,GAAG,OAAM,EAA2B;AAC/E,EAAA,uBAAO,GAAA,CAAC,UAAM,GAAG,KAAA,EAAO,WAAW,EAAA,CAAG,sDAAA,EAAwD,SAAS,CAAA,EAAG,CAAA;AAC5G;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"message-scroller-DM_Jzo-m.cjs","sources":["../src/ds/components/MessageScroller/message-scroller-geometry.ts","../src/ds/components/MessageScroller/message-scroller-glide.ts","../src/ds/components/MessageScroller/message-scroller-trip.ts","../src/ds/components/MessageScroller/message-scroller.tsx"],"sourcesContent":["import type { MessageScrollerScrollAlign } from './message-scroller-context';\n\n/**\n * Geometry behind the scroller: how far to scroll for a given alignment, and\n * which anchored message the reader is currently on. Split out from the\n * component so each rule can be reasoned about — and tested — on its own.\n */\n\n/** A message the scroller tracks, and whether a turn is anchored to it. */\nexport type MessageScrollerItemRecord = {\n element: HTMLElement;\n scrollAnchor: boolean;\n};\n\n/** Sub-pixel slack, so a message resting exactly on the anchor line still counts. */\nexport const VISIBILITY_EPSILON = 0.5;\n\nexport const getContentPadding = (contentElement: HTMLElement | null) => {\n if (!contentElement) return { start: 0, end: 0 };\n const styles = window.getComputedStyle(contentElement);\n return {\n start: Number.parseFloat(styles.paddingBlockStart || styles.paddingTop) || 0,\n end: Number.parseFloat(styles.paddingBlockEnd || styles.paddingBottom) || 0,\n };\n};\n\nexport const getMaxScroll = (viewportElement: HTMLElement) =>\n Math.max(0, viewportElement.scrollHeight - viewportElement.clientHeight);\n\nexport const getRelativeTop = (element: HTMLElement, viewportElement: HTMLElement) => {\n const elementRect = element.getBoundingClientRect();\n const viewportRect = viewportElement.getBoundingClientRect();\n return elementRect.top - viewportRect.top + viewportElement.scrollTop;\n};\n\nexport const getScrollTarget = ({\n align,\n contentElement,\n element,\n scrollMargin,\n viewportElement,\n}: {\n align: MessageScrollerScrollAlign;\n /** The padding framing the transcript lives here, however deep the rows nest. */\n contentElement: HTMLElement | null;\n element: HTMLElement;\n scrollMargin: number;\n viewportElement: HTMLElement;\n}) => {\n const contentPadding = getContentPadding(contentElement);\n const elementTop = getRelativeTop(element, viewportElement);\n const elementHeight = element.getBoundingClientRect().height;\n const visibleHeight = Math.max(0, viewportElement.clientHeight - contentPadding.start - contentPadding.end);\n\n if (align === 'center') return elementTop - contentPadding.start - (visibleHeight - elementHeight) / 2 - scrollMargin;\n if (align === 'end')\n return elementTop - viewportElement.clientHeight + elementHeight + contentPadding.end + scrollMargin;\n\n if (align === 'nearest') {\n const elementBottom = elementTop + elementHeight;\n const viewportTop = viewportElement.scrollTop + contentPadding.start;\n const viewportBottom = viewportElement.scrollTop + viewportElement.clientHeight - contentPadding.end;\n if (elementTop >= viewportTop && elementBottom <= viewportBottom) return viewportElement.scrollTop;\n return elementTop < viewportTop\n ? elementTop - contentPadding.start - scrollMargin\n : elementBottom - viewportElement.clientHeight + contentPadding.end + scrollMargin;\n }\n\n return elementTop - contentPadding.start - scrollMargin;\n};\n\n/**\n * Where the reader must sit for the last row to rest at the end of the view.\n *\n * Not the end of the scroll: a chat reserves room under a live turn so a reply\n * grows into empty space, and docks its composer in the flow. Both sit below the\n * last row, so scrolling to the end of the box carries that row — and the message\n * that opened the turn — out of the view above. Reading it from the rows means no\n * one has to publish a height for anyone else to subtract.\n */\nexport const getFollowTarget = ({\n contentElement,\n items,\n viewportElement,\n}: {\n contentElement: HTMLElement | null;\n items: Array<readonly [string, MessageScrollerItemRecord]>;\n viewportElement: HTMLElement;\n}) => {\n const end = getMaxScroll(viewportElement);\n const lastRow = items.at(-1)?.[1].element;\n if (!lastRow || !contentElement) return end;\n\n const contentBottom = getRelativeTop(contentElement, viewportElement) + contentElement.getBoundingClientRect().height;\n const belowContent = Math.max(0, viewportElement.scrollHeight - contentBottom);\n const rowBottom = getRelativeTop(lastRow, viewportElement) + lastRow.getBoundingClientRect().height;\n\n return Math.min(end, Math.max(0, rowBottom + belowContent - viewportElement.clientHeight));\n};\n\nexport const getCurrentAnchorId = ({\n fallbackAnchorId,\n items,\n scrollMargin,\n scrollPreviousItemPeek,\n visibleMessageIds,\n viewportElement,\n}: {\n fallbackAnchorId: string | undefined;\n items: Array<readonly [string, MessageScrollerItemRecord]>;\n scrollMargin: number;\n scrollPreviousItemPeek: number;\n visibleMessageIds: Set<string>;\n viewportElement: HTMLElement;\n}) => {\n const anchorLine = viewportElement.getBoundingClientRect().top + scrollMargin + scrollPreviousItemPeek;\n const anchors = items.filter(([, item]) => item.scrollAnchor);\n let anchoredAboveViewport: string | undefined;\n\n for (const [messageId, item] of anchors) {\n if (item.element.getBoundingClientRect().top <= anchorLine + VISIBILITY_EPSILON) {\n anchoredAboveViewport = messageId;\n }\n }\n\n if (anchoredAboveViewport) return anchoredAboveViewport;\n return anchors.find(([messageId]) => visibleMessageIds.has(messageId))?.[0] ?? fallbackAnchorId;\n};\n","/** Longest single growth worth smoothing. Past it the move is one the reader asked for. */\nconst GLIDE_MAX = 240;\nconst GLIDE_MS = 220;\nconst GLIDE_EASE = 'cubic-bezier(0.33, 1, 0.68, 1)';\n\nfunction currentOffset(element: HTMLElement): number {\n if (typeof DOMMatrixReadOnly === 'undefined') return 0;\n const { transform } = getComputedStyle(element);\n if (!transform || transform === 'none') return 0;\n return new DOMMatrixReadOnly(transform).m42;\n}\n\nconst travels = new WeakMap<HTMLElement, AbortController>();\n\nfunction release(element: HTMLElement): void {\n travels.get(element)?.abort();\n travels.delete(element);\n element.style.transition = '';\n element.style.transform = '';\n}\n\nfunction calm(): boolean {\n if (typeof window === 'undefined' || !window.matchMedia) return false;\n return window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n\n/**\n * Hides a scroll that has already happened. The end is pinned instantly, as it must\n * be, then the content is put back where the reader last saw it and travels to zero\n * on the compositor — so a reply growing a line at a time reads as one movement\n * rather than a snap per wrapped line.\n *\n * Transform, not layout: `scrollHeight` never changes, so nothing here can feed the\n * resize that called it. A line landing mid-travel only adds to the distance left.\n */\nexport function glideContent(element: HTMLElement | null, delta: number): void {\n if (!element || delta <= 0 || calm()) return;\n\n const offset = currentOffset(element) + delta;\n if (offset > GLIDE_MAX) {\n release(element);\n return;\n }\n\n element.style.transition = 'none';\n element.style.transform = `translateY(${offset}px)`;\n // Commit the displaced position, or the browser only ever sees the settled one.\n void element.offsetHeight;\n element.style.transition = `transform ${GLIDE_MS}ms ${GLIDE_EASE}`;\n element.style.transform = 'translateY(0)';\n // A settled transform would leave the content a containing block for anything\n // fixed inside it, so the styles come off once the travel is spent. Descendants'\n // transitions bubble here too, so only the content's own settle counts.\n travels.get(element)?.abort();\n const travel = new AbortController();\n travels.set(element, travel);\n const settle = (event: TransitionEvent) => {\n if (event.target !== element) return;\n if (currentOffset(element) === 0) release(element);\n };\n element.addEventListener('transitionend', settle, { signal: travel.signal });\n element.addEventListener('transitioncancel', settle, { signal: travel.signal });\n}\n","import { VISIBILITY_EPSILON } from './message-scroller-geometry';\n\n/** One designed curve for the one scripted trip: fast liftoff, long settle. */\nconst TRIP_MS = 560;\n/** How long past its clock a trip may chase a destination the layout hasn't released yet. */\nconst TRIP_OVERTIME_MS = 240;\n\nconst easeOutQuint = (t: number) => 1 - (1 - t) ** 5;\n\nexport type TripEndReason = 'arrived' | 'interrupted' | 'expired';\n\nexport interface TripAnimation {\n cancel: () => void;\n}\n\n/**\n * Drives the viewport to a destination the way a transition would, not the way\n * `scrollTo({ behavior: 'smooth' })` does: the destination is re-read every frame,\n * so a layout still settling under the trip — the reserved room opening beneath a\n * new turn — bends the path instead of restarting the curve. Writes are clamped by\n * the browser, so until the room has opened far enough the trip simply rides the\n * end of the box down.\n *\n * The reader keeps the last word: a scroll position this trip didn't write ends it.\n */\nexport function startTrip(\n viewportElement: HTMLElement,\n getTarget: () => number | undefined,\n onEnd: (reason: TripEndReason) => void,\n): TripAnimation {\n const reduceMotion =\n typeof window.matchMedia === 'function' && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n const duration = reduceMotion ? 0 : TRIP_MS;\n const startedAt = performance.now();\n const from = viewportElement.scrollTop;\n let lastWritten = from;\n let frame = 0;\n let ended = false;\n\n const end = (reason: TripEndReason) => {\n ended = true;\n onEnd(reason);\n };\n\n const step = () => {\n if (Math.abs(viewportElement.scrollTop - lastWritten) > 1) return end('interrupted');\n const target = getTarget();\n if (target === undefined) return end('expired');\n const elapsed = performance.now() - startedAt;\n const progress = duration === 0 ? 1 : Math.min(1, elapsed / duration);\n viewportElement.scrollTop = from + (target - from) * easeOutQuint(progress);\n lastWritten = viewportElement.scrollTop;\n if (progress === 1 && Math.abs(lastWritten - target) <= VISIBILITY_EPSILON) return end('arrived');\n if (elapsed >= duration + TRIP_OVERTIME_MS) return end('expired');\n frame = window.requestAnimationFrame(step);\n };\n\n frame = window.requestAnimationFrame(step);\n\n return {\n cancel: () => {\n if (ended) return;\n ended = true;\n window.cancelAnimationFrame(frame);\n },\n };\n}\n","import { ArrowDownIcon } from 'lucide-react';\nimport * as React from 'react';\n\nimport {\n AUTO_SCROLL_ATTACH_THRESHOLD,\n DEFAULT_REACH_START_THRESHOLD,\n DEFAULT_SCROLL_EDGE_THRESHOLD,\n DEFAULT_SCROLL_MARGIN,\n DEFAULT_SCROLL_PREVIOUS_ITEM_PEEK,\n DEFAULT_SCROLLABLE,\n DEFAULT_VISIBILITY,\n MessageScrollerActionsContext,\n MessageScrollerScrollableContext,\n MessageScrollerVisibilityContext,\n useRequiredMessageScrollerActionsContext,\n useRequiredMessageScrollerScrollableContext,\n} from './message-scroller-context';\nimport type {\n MessageScrollerActionsContextValue,\n MessageScrollerButtonDirection,\n MessageScrollerDefaultScrollPosition,\n MessageScrollerScrollAlign,\n MessageScrollerScrollOptions,\n MessageScrollerScrollable,\n MessageScrollerVisibility,\n} from './message-scroller-context';\n\nimport {\n VISIBILITY_EPSILON,\n getCurrentAnchorId,\n getFollowTarget,\n getMaxScroll,\n getScrollTarget,\n} from './message-scroller-geometry';\nimport type { MessageScrollerItemRecord } from './message-scroller-geometry';\nimport { glideContent } from './message-scroller-glide';\nimport { startTrip } from './message-scroller-trip';\nimport type { TripAnimation } from './message-scroller-trip';\n\nimport { cn } from '@/lib/utils';\n\nexport type {\n MessageScrollerButtonDirection,\n MessageScrollerDefaultScrollPosition,\n MessageScrollerScrollAlign,\n MessageScrollerScrollOptions,\n MessageScrollerScrollable,\n MessageScrollerVisibility,\n} from './message-scroller-context';\n\nconst mergeRefs =\n <TElement,>(...refs: Array<React.Ref<TElement> | undefined>) =>\n (element: TElement | null) => {\n refs.forEach(ref => {\n if (!ref) return;\n if (typeof ref === 'function') {\n ref(element);\n return;\n }\n ref.current = element;\n });\n };\n\nconst scrollableMatches = (left: MessageScrollerScrollable, right: MessageScrollerScrollable) =>\n left.start === right.start && left.end === right.end;\n\nconst visibilityMatches = (left: MessageScrollerVisibility, right: MessageScrollerVisibility) =>\n left.currentAnchorId === right.currentAnchorId &&\n left.visibleMessageIds.length === right.visibleMessageIds.length &&\n left.visibleMessageIds.every((messageId, index) => messageId === right.visibleMessageIds[index]);\n\nconst orderItemsByDocumentPosition = (items: Array<readonly [string, MessageScrollerItemRecord]>) =>\n items.sort(([, left], [, right]) => {\n const position = left.element.compareDocumentPosition(right.element);\n if (position & Node.DOCUMENT_POSITION_FOLLOWING) return -1;\n if (position & Node.DOCUMENT_POSITION_PRECEDING) return 1;\n return 0;\n });\n\nconst scrollViewportTo = (viewportElement: HTMLElement, top: number, behavior: ScrollBehavior) => {\n if (typeof viewportElement.scrollTo === 'function') {\n viewportElement.scrollTo({ top, behavior });\n return;\n }\n\n viewportElement.scrollTop = top;\n};\n\nconst scheduleScrollSync = (callback: () => void) => {\n if (typeof window.requestAnimationFrame === 'function') {\n window.requestAnimationFrame(callback);\n return;\n }\n\n window.setTimeout(callback, 0);\n};\n\nexport interface MessageScrollerProviderProps {\n /** Carry the reader with the stream, re-attaching on a new turn. Off still parks a new turn, without following the reply. */\n autoScroll?: boolean;\n children?: React.ReactNode;\n defaultScrollPosition?: MessageScrollerDefaultScrollPosition;\n /** Called when the reader scrolls near the start — where older history is loaded. */\n onReachStart?: () => void;\n /** Hold the reading position when older items are added above the current ones. */\n preserveScrollOnPrepend?: boolean;\n reachStartThreshold?: number;\n scrollEdgeThreshold?: number;\n scrollMargin?: number;\n scrollPreviousItemPeek?: number;\n}\n\nexport function MessageScrollerProvider({\n autoScroll = false,\n children,\n defaultScrollPosition = 'end',\n onReachStart,\n preserveScrollOnPrepend = false,\n reachStartThreshold = DEFAULT_REACH_START_THRESHOLD,\n scrollEdgeThreshold = DEFAULT_SCROLL_EDGE_THRESHOLD,\n scrollMargin = DEFAULT_SCROLL_MARGIN,\n scrollPreviousItemPeek = DEFAULT_SCROLL_PREVIOUS_ITEM_PEEK,\n}: MessageScrollerProviderProps) {\n const itemsRef = React.useRef<Map<string, MessageScrollerItemRecord> | null>(null);\n itemsRef.current ??= new Map<string, MessageScrollerItemRecord>();\n const itemsRegistry = itemsRef.current;\n // Rebuilt on register/unregister only — scroll runs this too often to sort per event.\n const orderedItemsRef = React.useRef<Array<readonly [string, MessageScrollerItemRecord]> | null>(null);\n const visibleMessageIdsRef = React.useRef<Set<string> | null>(null);\n visibleMessageIdsRef.current ??= new Set<string>();\n const intersectingMessageIds = visibleMessageIdsRef.current;\n const [itemsVersion, setItemsVersion] = React.useState(0);\n const [rootElement, setRootElement] = React.useState<HTMLDivElement | null>(null);\n const [viewportElement, setViewportElement] = React.useState<HTMLDivElement | null>(null);\n const [contentElement, setContentElement] = React.useState<HTMLDivElement | null>(null);\n const defaultScrollAppliedRef = React.useRef(false);\n const deferDefaultScrollRef = React.useRef(false);\n const defaultScrollScheduledRef = React.useRef(false);\n const seenAnchorIdsRef = React.useRef<Set<string> | null>(null);\n seenAnchorIdsRef.current ??= new Set<string>();\n const seenAnchorIds = seenAnchorIdsRef.current;\n // Message ID reconciliation keeps the row element while replacing its ID.\n const seenAnchorElementsRef = React.useRef<WeakSet<HTMLElement> | null>(null);\n seenAnchorElementsRef.current ??= new WeakSet<HTMLElement>();\n const seenAnchorElements = seenAnchorElementsRef.current;\n const turnAnchoringArmedRef = React.useRef(false);\n const [scrollable, setScrollable] = React.useState<MessageScrollerScrollable>(DEFAULT_SCROLLABLE);\n const [visibility, setVisibility] = React.useState<MessageScrollerVisibility>(DEFAULT_VISIBILITY);\n const atEndRef = React.useRef(true);\n // Attachment is a mode, not a measurement: a growing reply moves the end away\n // without the reader having moved, so only the reader detaches it.\n const followingRef = React.useRef(true);\n // A smooth trip in flight, remembered by destination — the end of the stream, or\n // the anchor a new turn parks at. Sampled mid-flight it reads as a reader who\n // left, so it suspends detachment; a position going backwards calls it off.\n const tripRef = React.useRef<'end' | { anchorId: string } | null>(null);\n // The frame loop behind an anchor trip. Owns clearing its trip: it alone can\n // tell the reader taking over from its own writes landing.\n const tripAnimationRef = React.useRef<TripAnimation | null>(null);\n const lastScrollTopRef = React.useRef(0);\n // Only a reader moving backwards asks for older history: a mount sitting at\n // scrollTop 0 before the default scroll lands has not moved.\n const reachStartArmedRef = React.useRef(false);\n const reachStartFiredRef = React.useRef(false);\n const prependAnchorRef = React.useRef<{ scrollHeight: number; scrollTop: number } | null>(null);\n const firstItemIdRef = React.useRef<string | undefined>(undefined);\n // Off notifyScroll's deps on purpose: consumers pass it inline, and a fresh\n // identity per render would republish the actions context to every consumer.\n const onReachStartRef = React.useRef(onReachStart);\n React.useEffect(() => {\n onReachStartRef.current = onReachStart;\n }, [onReachStart]);\n\n const publishScrollable = React.useCallback(\n (nextScrollable: MessageScrollerScrollable) => {\n const scrollableValue = [nextScrollable.start && 'start', nextScrollable.end && 'end'].filter(Boolean).join(' ');\n\n for (const element of [rootElement, viewportElement]) {\n if (!element) continue;\n if (scrollableValue) {\n element.setAttribute('data-scrollable', scrollableValue);\n } else {\n element.removeAttribute('data-scrollable');\n }\n }\n\n setScrollable(current => (scrollableMatches(current, nextScrollable) ? current : nextScrollable));\n },\n [rootElement, viewportElement],\n );\n\n const publishVisibility = React.useCallback((nextVisibility: MessageScrollerVisibility) => {\n setVisibility(current => (visibilityMatches(current, nextVisibility) ? current : nextVisibility));\n }, []);\n\n // Registration is mount order, not document order, once history is prepended.\n const getOrderedItems = React.useCallback(() => {\n orderedItemsRef.current ??= orderItemsByDocumentPosition(Array.from(itemsRegistry.entries()));\n return orderedItemsRef.current;\n }, [itemsRegistry]);\n\n // The one definition of \"the end\" — following it, resting at it, offering the trip\n // back to it. Everything below the last row (reserved room, the docked composer)\n // is room to grow into, never somewhere to scroll.\n const followTarget = React.useCallback(() => {\n if (!viewportElement) return 0;\n\n return getFollowTarget({ contentElement, items: getOrderedItems(), viewportElement });\n }, [contentElement, getOrderedItems, viewportElement]);\n\n const anchorTripTarget = React.useCallback(\n (anchorId: string) => {\n const item = itemsRegistry.get(anchorId);\n if (!item || !viewportElement) return undefined;\n return Math.max(\n 0,\n getScrollTarget({ align: 'start', contentElement, element: item.element, scrollMargin, viewportElement }),\n );\n },\n [contentElement, itemsRegistry, scrollMargin, viewportElement],\n );\n\n // The motion's destination, never the decision's: the room under a fresh turn is\n // still opening when the trip starts — on a short thread the box has not even\n // grown yet — so the cap is re-read per frame and the trip rides the end of the\n // box until the opened room decides where the message rests.\n const parkTripTarget = React.useCallback(\n (anchorId: string) => {\n const target = anchorTripTarget(anchorId);\n if (target === undefined || !viewportElement) return target;\n return Math.min(target, getMaxScroll(viewportElement));\n },\n [anchorTripTarget, viewportElement],\n );\n\n const cancelTripAnimation = React.useCallback(() => {\n tripAnimationRef.current?.cancel();\n tripAnimationRef.current = null;\n }, []);\n\n const updateScrollable = React.useCallback(\n ({ fromScroll = false }: { fromScroll?: boolean } = {}) => {\n if (!viewportElement) {\n atEndRef.current = true;\n publishScrollable(DEFAULT_SCROLLABLE);\n return false;\n }\n\n const { scrollTop } = viewportElement;\n const remainingScroll = followTarget() - scrollTop;\n const wentBack = scrollTop < lastScrollTopRef.current;\n atEndRef.current = remainingScroll < AUTO_SCROLL_ATTACH_THRESHOLD;\n if (tripRef.current === 'end' && (wentBack || atEndRef.current)) tripRef.current = null;\n lastScrollTopRef.current = scrollTop;\n // Scrolling back is the only way out of the stream, the end the only way back in:\n // a position merely left behind by a growing reply is us chasing it, not them leaving.\n if (fromScroll && tripRef.current === null && (wentBack || atEndRef.current)) {\n followingRef.current = atEndRef.current;\n }\n\n publishScrollable({\n start: scrollTop > scrollEdgeThreshold,\n end: remainingScroll > scrollEdgeThreshold && !(autoScroll && followingRef.current),\n });\n\n return wentBack;\n },\n [autoScroll, followTarget, publishScrollable, scrollEdgeThreshold, viewportElement],\n );\n\n const getLastAnchorId = React.useCallback(\n () =>\n getOrderedItems()\n .filter(([, item]) => item.scrollAnchor)\n .at(-1)?.[0],\n [getOrderedItems],\n );\n\n const updateVisibility = React.useCallback(() => {\n const items = getOrderedItems();\n const fallbackAnchorId = getLastAnchorId() ?? items.at(-1)?.[0];\n\n if (items.length === 0) {\n publishVisibility(DEFAULT_VISIBILITY);\n return;\n }\n\n if (!viewportElement) {\n publishVisibility({\n currentAnchorId: fallbackAnchorId,\n visibleMessageIds: fallbackAnchorId ? [fallbackAnchorId] : [],\n });\n return;\n }\n\n const viewportRect = viewportElement.getBoundingClientRect();\n const visibleMessageIds = new Set<string>();\n\n if (typeof IntersectionObserver === 'undefined') {\n const visibilityTop = viewportRect.top + scrollMargin + scrollPreviousItemPeek;\n items.forEach(([messageId, item]) => {\n const rect = item.element.getBoundingClientRect();\n if (rect.bottom > visibilityTop && rect.top < viewportRect.bottom) visibleMessageIds.add(messageId);\n });\n } else {\n intersectingMessageIds.forEach(messageId => visibleMessageIds.add(messageId));\n }\n\n const orderedVisibleMessageIds = items.flatMap(([messageId]) =>\n visibleMessageIds.has(messageId) ? [messageId] : [],\n );\n\n publishVisibility({\n currentAnchorId: getCurrentAnchorId({\n fallbackAnchorId,\n items,\n scrollMargin,\n scrollPreviousItemPeek,\n visibleMessageIds,\n viewportElement,\n }),\n visibleMessageIds:\n orderedVisibleMessageIds.length > 0 ? orderedVisibleMessageIds : fallbackAnchorId ? [fallbackAnchorId] : [],\n });\n }, [\n getLastAnchorId,\n getOrderedItems,\n intersectingMessageIds,\n publishVisibility,\n scrollMargin,\n scrollPreviousItemPeek,\n viewportElement,\n ]);\n\n const syncAfterScroll = React.useCallback(() => {\n updateScrollable();\n updateVisibility();\n }, [updateScrollable, updateVisibility]);\n\n const notifyScroll = React.useCallback(() => {\n const wasScrollable = Boolean(viewportElement && viewportElement.scrollHeight > viewportElement.clientHeight);\n const readerWentBack = updateScrollable({ fromScroll: true });\n updateVisibility();\n if (!viewportElement) return;\n\n if (readerWentBack && wasScrollable) reachStartArmedRef.current = true;\n\n if (!reachStartArmedRef.current) return;\n if (!wasScrollable) return;\n if (viewportElement.scrollTop > reachStartThreshold) {\n reachStartFiredRef.current = false;\n return;\n }\n // One request per trip to the start: staying there must not queue a second.\n if (reachStartFiredRef.current) return;\n if (!onReachStartRef.current) return;\n\n reachStartFiredRef.current = true;\n if (preserveScrollOnPrepend) {\n prependAnchorRef.current = {\n scrollHeight: viewportElement.scrollHeight,\n scrollTop: viewportElement.scrollTop,\n };\n }\n onReachStartRef.current();\n }, [preserveScrollOnPrepend, reachStartThreshold, updateScrollable, updateVisibility, viewportElement]);\n\n const scrollToElement = React.useCallback(\n (\n element: HTMLElement,\n {\n align = 'start',\n behavior = 'auto',\n scrollMargin: optionScrollMargin = scrollMargin,\n }: MessageScrollerScrollOptions = {},\n ) => {\n if (!viewportElement || !contentElement?.contains(element)) return false;\n\n const nextScrollTop = Math.max(\n 0,\n getScrollTarget({ align, contentElement, element, scrollMargin: optionScrollMargin, viewportElement }),\n );\n\n if (Math.abs(viewportElement.scrollTop - nextScrollTop) <= VISIBILITY_EPSILON) {\n scrollViewportTo(viewportElement, nextScrollTop, 'auto');\n syncAfterScroll();\n return true;\n }\n\n scrollViewportTo(viewportElement, nextScrollTop, behavior);\n scheduleScrollSync(syncAfterScroll);\n return true;\n },\n [contentElement, scrollMargin, syncAfterScroll, viewportElement],\n );\n\n const scrollToStart = React.useCallback(\n ({ behavior = 'auto' }: MessageScrollerScrollOptions = {}) => {\n if (!viewportElement) return false;\n cancelTripAnimation();\n tripRef.current = null;\n scrollViewportTo(viewportElement, 0, behavior);\n scheduleScrollSync(syncAfterScroll);\n return true;\n },\n [cancelTripAnimation, syncAfterScroll, viewportElement],\n );\n\n const scrollToEnd = React.useCallback(\n ({ behavior = 'auto' }: MessageScrollerScrollOptions = {}) => {\n if (!viewportElement) return false;\n cancelTripAnimation();\n followingRef.current = true;\n tripRef.current = behavior === 'smooth' ? 'end' : null;\n scrollViewportTo(viewportElement, followTarget(), behavior);\n // Published now, not next frame: a button that hears about the trip late flashes.\n syncAfterScroll();\n scheduleScrollSync(syncAfterScroll);\n return true;\n },\n [cancelTripAnimation, followTarget, syncAfterScroll, viewportElement],\n );\n\n const scrollToMessage = React.useCallback(\n (messageId: string, options?: MessageScrollerScrollOptions) => {\n const item = itemsRegistry.get(messageId);\n if (!item) return false;\n return scrollToElement(item.element, options);\n },\n [itemsRegistry, scrollToElement],\n );\n\n // A reply grows into the room its turn reserved and moves nothing: only once the\n // last row would fall past the end of the view is there anything to follow, and\n // then by exactly what it overflowed — pinned instantly, glided on the compositor.\n const notifyContentResize = React.useCallback(() => {\n const trip = tripRef.current;\n const onAnchorTrip = trip !== null && trip !== 'end';\n // An anchor trip re-reads its destination every frame, so a layout settling\n // under it — the reserved room opening — bends its path without help from here.\n if (!onAnchorTrip && autoScroll && defaultScrollAppliedRef.current && followingRef.current && viewportElement) {\n const overflow = followTarget() - viewportElement.scrollTop;\n if (overflow > VISIBILITY_EPSILON) {\n // A trip already in flight is retargeted rather than cut short; only the\n // instant catch-up needs the glide to read as one movement.\n const travelling = trip === 'end';\n scrollViewportTo(viewportElement, followTarget(), travelling ? 'smooth' : 'auto');\n if (!travelling) glideContent(contentElement, overflow);\n }\n }\n syncAfterScroll();\n }, [autoScroll, contentElement, followTarget, syncAfterScroll, viewportElement]);\n\n const registerItem = React.useCallback(\n (messageId: string, element: HTMLElement, scrollAnchor: boolean) => {\n itemsRegistry.set(messageId, { element, scrollAnchor });\n orderedItemsRef.current = null;\n setItemsVersion(version => version + 1);\n\n return () => {\n const current = itemsRegistry.get(messageId);\n if (current?.element !== element) return;\n itemsRegistry.delete(messageId);\n intersectingMessageIds.delete(messageId);\n orderedItemsRef.current = null;\n setItemsVersion(version => version + 1);\n };\n },\n [intersectingMessageIds, itemsRegistry],\n );\n\n React.useEffect(() => {\n if (!contentElement || !viewportElement || typeof IntersectionObserver === 'undefined') {\n updateVisibility();\n return undefined;\n }\n\n const messageIdByElement = new Map<Element, string>();\n for (const [messageId, item] of itemsRegistry) {\n messageIdByElement.set(item.element, messageId);\n }\n\n const observer = new IntersectionObserver(\n entries => {\n for (const entry of entries) {\n const messageId = messageIdByElement.get(entry.target);\n if (!messageId) continue;\n if (entry.isIntersecting) {\n intersectingMessageIds.add(messageId);\n } else {\n intersectingMessageIds.delete(messageId);\n }\n }\n updateVisibility();\n },\n {\n root: viewportElement,\n rootMargin: `${-(scrollMargin + scrollPreviousItemPeek)}px 0px 0px 0px`,\n threshold: [0, 0.01, 0.5, 1],\n },\n );\n\n for (const [, item] of itemsRegistry) observer.observe(item.element);\n updateVisibility();\n\n return () => observer.disconnect();\n }, [\n contentElement,\n intersectingMessageIds,\n itemsRegistry,\n itemsVersion,\n scrollMargin,\n scrollPreviousItemPeek,\n updateVisibility,\n viewportElement,\n ]);\n\n React.useEffect(() => {\n if (!viewportElement || typeof ResizeObserver === 'undefined') return undefined;\n const observer = new ResizeObserver(syncAfterScroll);\n observer.observe(viewportElement);\n return () => observer.disconnect();\n }, [syncAfterScroll, viewportElement]);\n\n React.useLayoutEffect(() => {\n updateScrollable();\n updateVisibility();\n }, [itemsVersion, updateScrollable, updateVisibility]);\n\n React.useLayoutEffect(() => {\n if (defaultScrollAppliedRef.current || !viewportElement) return undefined;\n if (itemsRegistry.size === 0) {\n deferDefaultScrollRef.current = true;\n return undefined;\n }\n\n const applyDefaultScroll = () => {\n const lastAnchorId = getLastAnchorId();\n // Where a thread opens decides whether it starts attached: a restored reading\n // position has the stream below it. `scrollToEnd` takes this back when it lands.\n followingRef.current = false;\n let didScroll = false;\n if (defaultScrollPosition === 'start') {\n didScroll = scrollToStart({ behavior: 'auto' });\n } else if (defaultScrollPosition === 'last-anchor') {\n didScroll = lastAnchorId\n ? scrollToMessage(lastAnchorId, { align: 'start', behavior: 'auto' })\n : scrollToEnd({ behavior: 'auto' });\n } else {\n didScroll = scrollToEnd({ behavior: 'auto' });\n }\n\n if (!didScroll) return;\n defaultScrollAppliedRef.current = true;\n // Settling is what arms turn anchoring: the rows the transcript opened with\n // are recorded as read here, and on a settled thread the next anchor to\n // register is the send itself — an arming left to a later anchoring pass\n // would be eaten by that send instead of parking it.\n for (const [messageId, item] of getOrderedItems()) {\n if (!item.scrollAnchor) continue;\n seenAnchorIds.add(messageId);\n seenAnchorElements.add(item.element);\n }\n turnAnchoringArmedRef.current = true;\n };\n\n if (!deferDefaultScrollRef.current) {\n applyDefaultScroll();\n return undefined;\n }\n if (defaultScrollScheduledRef.current) return undefined;\n\n defaultScrollScheduledRef.current = true;\n let cancelled = false;\n scheduleScrollSync(() => {\n scheduleScrollSync(() => {\n defaultScrollScheduledRef.current = false;\n if (!cancelled && !defaultScrollAppliedRef.current) applyDefaultScroll();\n });\n });\n return () => {\n cancelled = true;\n defaultScrollScheduledRef.current = false;\n };\n }, [\n defaultScrollPosition,\n getLastAnchorId,\n getOrderedItems,\n itemsRegistry,\n itemsVersion,\n scrollToEnd,\n scrollToMessage,\n scrollToStart,\n seenAnchorElements,\n seenAnchorIds,\n viewportElement,\n ]);\n\n // A turn opening is the one scripted scroll of a conversation: it carries the\n // reader to the message they just sent and parks it as high as the room the turn\n // reserves under it allows. The answer then grows into that room and moves\n // nothing at all — following only takes over once it outgrows the room.\n React.useLayoutEffect(() => {\n const lastAnchorId = getLastAnchorId();\n const lastAnchor = lastAnchorId ? itemsRegistry.get(lastAnchorId) : undefined;\n const opensTurn =\n turnAnchoringArmedRef.current &&\n lastAnchorId !== undefined &&\n lastAnchor !== undefined &&\n !seenAnchorIds.has(lastAnchorId) &&\n !seenAnchorElements.has(lastAnchor.element);\n\n for (const [messageId, item] of getOrderedItems()) {\n if (!item.scrollAnchor) continue;\n seenAnchorIds.add(messageId);\n seenAnchorElements.add(item.element);\n }\n turnAnchoringArmedRef.current = defaultScrollAppliedRef.current;\n\n if (opensTurn && lastAnchorId) {\n if (autoScroll) followingRef.current = true;\n cancelTripAnimation();\n const target = viewportElement ? anchorTripTarget(lastAnchorId) : undefined;\n // A turn opening at the top of the transcript — the first message of a fresh\n // thread — is already parked: no trip, and nothing moves.\n if (\n target === undefined ||\n !viewportElement ||\n Math.abs(target - viewportElement.scrollTop) <= VISIBILITY_EPSILON\n ) {\n tripRef.current = null;\n } else {\n tripRef.current = { anchorId: lastAnchorId };\n tripAnimationRef.current = startTrip(\n viewportElement,\n () => parkTripTarget(lastAnchorId),\n reason => {\n tripAnimationRef.current = null;\n tripRef.current = null;\n if (reason === 'interrupted') followingRef.current = atEndRef.current;\n syncAfterScroll();\n },\n );\n }\n // Published now: the reader just re-attached, and a button that hears late flashes.\n syncAfterScroll();\n return;\n }\n\n // Rows landing outside a turn — restored history, a notice — still belong to a\n // reader riding the stream, and reach them without a second animation. A trip\n // to an anchor keeps the viewport; a parked reader has new rows growing into\n // the room above the fold, with nothing below to catch up to.\n if (!autoScroll || !defaultScrollAppliedRef.current || !followingRef.current) return;\n if (tripRef.current !== null && tripRef.current !== 'end') return;\n if (viewportElement && followTarget() - viewportElement.scrollTop <= VISIBILITY_EPSILON) return;\n scrollToEnd({ behavior: tripRef.current === 'end' ? 'smooth' : 'auto' });\n }, [\n anchorTripTarget,\n autoScroll,\n cancelTripAnimation,\n followTarget,\n getLastAnchorId,\n getOrderedItems,\n itemsRegistry,\n itemsVersion,\n parkTripTarget,\n scrollToEnd,\n seenAnchorElements,\n seenAnchorIds,\n syncAfterScroll,\n viewportElement,\n ]);\n\n // A viewport going away mid-trip strands the frame loop on a detached element.\n React.useEffect(\n () => () => {\n cancelTripAnimation();\n tripRef.current = null;\n },\n [cancelTripAnimation, viewportElement],\n );\n\n // Older items land above the reader and shove their position down. A prepend is\n // told from an append by the first item's id, then undone by offsetting\n // scrollTop by however much taller the content got.\n React.useLayoutEffect(() => {\n const previousFirstItemId = firstItemIdRef.current;\n // From the DOM, not the registry: prepended items register last, so registry\n // order stops matching reading order.\n const firstItemId = contentElement?.querySelector<HTMLElement>('[data-slot=\"message-scroller-item\"]')?.dataset\n .messageId;\n firstItemIdRef.current = firstItemId;\n\n const anchor = prependAnchorRef.current;\n prependAnchorRef.current = null;\n if (!anchor || !viewportElement || firstItemId === previousFirstItemId) return;\n\n reachStartFiredRef.current = false;\n const grownBy = viewportElement.scrollHeight - anchor.scrollHeight;\n if (grownBy > 0) viewportElement.scrollTop = anchor.scrollTop + grownBy;\n }, [contentElement, itemsVersion, viewportElement]);\n\n const actionsContextValue = React.useMemo<MessageScrollerActionsContextValue>(\n () => ({\n notifyContentResize,\n notifyScroll,\n registerItem,\n scrollToEnd,\n scrollToMessage,\n scrollToStart,\n setContentElement,\n setRootElement,\n setViewportElement,\n syncAfterScroll,\n }),\n [notifyContentResize, notifyScroll, registerItem, scrollToEnd, scrollToMessage, scrollToStart, syncAfterScroll],\n );\n\n const scrollableContextValue = React.useMemo<MessageScrollerScrollable>(\n () => ({\n end: scrollable.end,\n start: scrollable.start,\n }),\n [scrollable.end, scrollable.start],\n );\n\n const visibilityContextValue = React.useMemo<MessageScrollerVisibility>(\n () => ({\n currentAnchorId: visibility.currentAnchorId,\n visibleMessageIds: visibility.visibleMessageIds,\n }),\n [visibility.currentAnchorId, visibility.visibleMessageIds],\n );\n\n return (\n <MessageScrollerActionsContext.Provider value={actionsContextValue}>\n <MessageScrollerScrollableContext.Provider value={scrollableContextValue}>\n <MessageScrollerVisibilityContext.Provider value={visibilityContextValue}>\n {children}\n </MessageScrollerVisibilityContext.Provider>\n </MessageScrollerScrollableContext.Provider>\n </MessageScrollerActionsContext.Provider>\n );\n}\n\nexport type MessageScrollerProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport const MessageScroller = React.forwardRef<HTMLDivElement, MessageScrollerProps>(\n ({ className, ...props }, ref) => {\n const { setRootElement } = useRequiredMessageScrollerActionsContext('MessageScroller');\n return (\n <div\n ref={mergeRefs(setRootElement, ref)}\n data-slot=\"message-scroller\"\n className={cn('group/message-scroller relative flex size-full min-h-0 flex-col overflow-hidden', className)}\n {...props}\n />\n );\n },\n);\nMessageScroller.displayName = 'MessageScroller';\n\nexport type MessageScrollerViewportProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport const MessageScrollerViewport = React.forwardRef<HTMLDivElement, MessageScrollerViewportProps>(\n ({ className, onScroll, role, tabIndex, ...props }, ref) => {\n const { setViewportElement, notifyScroll } = useRequiredMessageScrollerActionsContext('MessageScrollerViewport');\n const viewportRef = React.useMemo(() => mergeRefs(setViewportElement, ref), [ref, setViewportElement]);\n\n return (\n <div\n ref={viewportRef}\n role={role ?? 'region'}\n tabIndex={tabIndex ?? 0}\n data-slot=\"message-scroller-viewport\"\n className={cn(\n // Size container so consumers can size the room under a live turn in cqh.\n '[container-type:size] size-full min-h-0 min-w-0 overflow-y-auto overscroll-contain',\n 'data-autoscrolling:scrollbar-thumb-transparent data-autoscrolling:scrollbar-track-transparent',\n className,\n )}\n onScroll={event => {\n notifyScroll();\n onScroll?.(event);\n }}\n {...props}\n />\n );\n },\n);\nMessageScrollerViewport.displayName = 'MessageScrollerViewport';\n\nexport type MessageScrollerContentProps = React.HTMLAttributes<HTMLDivElement> & {\n spacerClassName?: string;\n};\n\nexport const MessageScrollerContent = React.forwardRef<HTMLDivElement, MessageScrollerContentProps>(\n ({ children, className, spacerClassName, role, 'aria-relevant': ariaRelevant = 'additions', ...props }, ref) => {\n const { setContentElement, notifyContentResize, syncAfterScroll } =\n useRequiredMessageScrollerActionsContext('MessageScrollerContent');\n const [contentElement, setLocalContentElement] = React.useState<HTMLDivElement | null>(null);\n\n const contentRef = React.useMemo(\n () => mergeRefs<HTMLDivElement>(setContentElement, setLocalContentElement, ref),\n [ref, setContentElement],\n );\n\n React.useLayoutEffect(() => {\n syncAfterScroll();\n }, [syncAfterScroll]);\n\n React.useEffect(() => {\n if (!contentElement || typeof MutationObserver === 'undefined') return undefined;\n const observer = new MutationObserver(notifyContentResize);\n observer.observe(contentElement, { childList: true, subtree: false });\n return () => observer.disconnect();\n }, [contentElement, notifyContentResize]);\n\n React.useEffect(() => {\n if (!contentElement || typeof ResizeObserver === 'undefined') return undefined;\n const observer = new ResizeObserver(notifyContentResize);\n observer.observe(contentElement);\n return () => observer.disconnect();\n }, [contentElement, notifyContentResize]);\n\n return (\n <div\n ref={contentRef}\n role={role ?? 'log'}\n aria-relevant={ariaRelevant}\n data-slot=\"message-scroller-content\"\n className={cn('flex h-max min-h-full flex-col gap-6', className)}\n {...props}\n >\n {children}\n <div aria-hidden=\"true\" data-message-scroller-spacer=\"\" hidden className={spacerClassName} />\n </div>\n );\n },\n);\nMessageScrollerContent.displayName = 'MessageScrollerContent';\n\nexport type MessageScrollerItemProps = React.HTMLAttributes<HTMLDivElement> & {\n messageId?: string;\n scrollAnchor?: boolean;\n};\n\nexport const MessageScrollerItem = React.forwardRef<HTMLDivElement, MessageScrollerItemProps>(\n ({ className, messageId, scrollAnchor = false, ...props }, ref) => {\n // Optional, unlike the other slots: the same row renderer is reused outside a\n // scroller (draft pages, previews), where there is simply nothing to register.\n const registerItem = React.useContext(MessageScrollerActionsContext)?.registerItem;\n const unregisterRef = React.useRef<(() => void) | undefined>(undefined);\n const itemRef = React.useCallback(\n (element: HTMLDivElement | null) => {\n unregisterRef.current?.();\n unregisterRef.current = undefined;\n mergeRefs(ref)(element);\n\n if (!element || !messageId || !registerItem) return;\n unregisterRef.current = registerItem(messageId, element, scrollAnchor);\n },\n [messageId, ref, registerItem, scrollAnchor],\n );\n\n return (\n <div\n ref={itemRef}\n data-slot=\"message-scroller-item\"\n data-message-id={messageId}\n data-scroll-anchor={scrollAnchor ? 'true' : 'false'}\n className={cn('min-w-0 shrink-0 [contain-intrinsic-size:auto_10rem] [content-visibility:auto]', className)}\n {...props}\n />\n );\n },\n);\nMessageScrollerItem.displayName = 'MessageScrollerItem';\n\nexport type MessageScrollerButtonProps = Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children'> & {\n behavior?: ScrollBehavior;\n children?: React.ReactNode;\n direction?: MessageScrollerButtonDirection;\n};\n\nexport const MessageScrollerButton = React.forwardRef<HTMLButtonElement, MessageScrollerButtonProps>(\n (\n { behavior = 'smooth', direction = 'end', className, children, onClick, tabIndex, type = 'button', ...props },\n ref,\n ) => {\n const { scrollToEnd, scrollToStart } = useRequiredMessageScrollerActionsContext('MessageScrollerButton');\n const { start, end } = useRequiredMessageScrollerScrollableContext('MessageScrollerButton');\n const active = direction === 'start' ? start : end;\n\n return (\n <button\n ref={ref}\n type={type}\n {...props}\n data-slot=\"message-scroller-button\"\n data-active={active ? 'true' : 'false'}\n data-direction={direction}\n tabIndex={active ? tabIndex : -1}\n className={cn(\n 'absolute inset-s-1/2 inline-flex min-h-5 min-w-7 -translate-x-1/2 items-center justify-center rounded-full border border-border1 bg-surface3 text-foreground shadow-[0_1px_2px_-1px_oklch(0%_0_0deg/10%),0_8px_20px_-12px_oklch(0%_0_0deg/25%)] transition-[translate,scale,opacity] duration-200 hover:bg-surface4 data-[active=false]:pointer-events-none data-[active=false]:scale-95 data-[active=false]:opacity-0 data-[active=false]:duration-400 data-[active=false]:ease-[cubic-bezier(0.7,0,0.84,0)] data-[active=true]:translate-y-0 data-[active=true]:scale-100 data-[active=true]:opacity-100 data-[active=true]:ease-[cubic-bezier(0.23,1,0.32,1)] data-[direction=end]:bottom-4 data-[direction=end]:data-[active=false]:translate-y-full data-[direction=start]:top-4 data-[direction=start]:data-[active=false]:-translate-y-full rtl:translate-x-1/2 data-[direction=start]:[&_svg]:rotate-180',\n className,\n )}\n onClick={event => {\n if (!active) return;\n onClick?.(event);\n if (event.defaultPrevented) return;\n event.currentTarget.blur();\n if (direction === 'start') {\n scrollToStart({ behavior });\n } else {\n scrollToEnd({ behavior });\n }\n }}\n >\n {children ?? (\n <>\n <ArrowDownIcon className=\"size-4\" aria-hidden />\n <span className=\"sr-only\">{direction === 'end' ? 'Scroll to end' : 'Scroll to start'}</span>\n </>\n )}\n </button>\n );\n },\n);\nMessageScrollerButton.displayName = 'MessageScrollerButton';\n"],"names":["DEFAULT_REACH_START_THRESHOLD","DEFAULT_SCROLL_EDGE_THRESHOLD","DEFAULT_SCROLL_MARGIN","DEFAULT_SCROLL_PREVIOUS_ITEM_PEEK","React","DEFAULT_SCROLLABLE","DEFAULT_VISIBILITY","AUTO_SCROLL_ATTACH_THRESHOLD","jsx","MessageScrollerActionsContext","MessageScrollerScrollableContext","MessageScrollerVisibilityContext","useRequiredMessageScrollerActionsContext","cn","jsxs","useRequiredMessageScrollerScrollableContext","Fragment","ArrowDownIcon"],"mappings":"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"}
|