basalt-ui 1.27.0 → 1.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +28 -35
- package/CHANGELOG.md +72 -0
- package/MIGRATING.md +759 -22
- package/README.md +56 -69
- package/agent/rules/basalt-batteries.md +60 -168
- package/agent/rules/basalt-charts.md +56 -75
- package/agent/rules/basalt-controls.md +81 -87
- package/agent/rules/basalt-mantine.md +64 -98
- package/agent/rules/basalt-state.md +42 -60
- package/agent/rules/basalt-tokens.md +46 -67
- package/agent/skills/basalt-app/SKILL.md +2 -0
- package/agent/templates/CLAUDE-block.md.tpl +14 -14
- package/configs/oxlint-plugin.js +964 -33
- package/configs/oxlint-plugin.test.ts +902 -2
- package/configs/oxlint.json +6 -0
- package/dist/agent/ai-sdk-transport.d.ts.map +1 -1
- package/dist/agent/ai-sdk-transport.js +7 -4
- package/dist/agent/coalesce.d.ts.map +1 -1
- package/dist/agent/coalesce.js +2 -1
- package/dist/agent/merge.d.ts.map +1 -1
- package/dist/agent/merge.js +2 -1
- package/dist/agent/part-list.d.ts.map +1 -1
- package/dist/agent/part-list.js +2 -0
- package/dist/agent/stick-to-bottom.d.ts +3 -6
- package/dist/agent/stick-to-bottom.d.ts.map +1 -1
- package/dist/agent/stick-to-bottom.js +6 -3
- package/dist/agent/transport.d.ts +13 -2
- package/dist/agent/transport.d.ts.map +1 -1
- package/dist/agent/use-agent-thread-runs.d.ts +12 -1
- package/dist/agent/use-agent-thread-runs.d.ts.map +1 -1
- package/dist/agent/use-agent-thread-runs.js +20 -6
- package/dist/agent-chat/composer.d.ts +6 -2
- package/dist/agent-chat/composer.d.ts.map +1 -1
- package/dist/agent-chat/composer.js +49 -33
- package/dist/agent-chat/index.d.ts +1 -1
- package/dist/agent-chat/index.d.ts.map +1 -1
- package/dist/agent-chat/relative-time.d.ts +0 -9
- package/dist/agent-chat/relative-time.d.ts.map +1 -1
- package/dist/agent-chat/relative-time.js +2 -1
- package/dist/agent-chat/thread-detail-panel.d.ts +3 -2
- package/dist/agent-chat/thread-detail-panel.d.ts.map +1 -1
- package/dist/agent-chat/thread-detail-panel.js +9 -6
- package/dist/agent-chat/thread-feed-row.d.ts +32 -6
- package/dist/agent-chat/thread-feed-row.d.ts.map +1 -1
- package/dist/agent-chat/thread-feed-row.js +61 -26
- package/dist/agent-chat/thread-feed.d.ts +13 -2
- package/dist/agent-chat/thread-feed.d.ts.map +1 -1
- package/dist/agent-chat/thread-feed.js +16 -7
- package/dist/agent-chat/thread-message.d.ts +4 -3
- package/dist/agent-chat/thread-message.d.ts.map +1 -1
- package/dist/agent-chat/thread-message.js +70 -31
- package/dist/agent-chat/thread-outcome-card.d.ts +3 -2
- package/dist/agent-chat/thread-outcome-card.d.ts.map +1 -1
- package/dist/agent-chat/thread-outcome-card.js +9 -2
- package/dist/agent-chat/thread-workspace.d.ts +7 -2
- package/dist/agent-chat/thread-workspace.d.ts.map +1 -1
- package/dist/agent-chat/thread-workspace.js +62 -29
- package/dist/agent-chat/tool-chip.d.ts +3 -2
- package/dist/agent-chat/tool-chip.d.ts.map +1 -1
- package/dist/agent-chat/tool-chip.js +7 -2
- package/dist/agent-chat/virtualize.d.ts +39 -0
- package/dist/agent-chat/virtualize.d.ts.map +1 -1
- package/dist/agent-chat/virtualize.js +15 -0
- package/dist/charts/hooks/useBandPlot.d.ts.map +1 -1
- package/dist/charts/hooks/useBandPlot.js +15 -8
- package/dist/charts/index.d.ts +11 -10
- package/dist/charts/index.d.ts.map +1 -1
- package/dist/charts/index.js +53 -9
- package/dist/charts/kinds/BandStrip.d.ts +10 -7
- package/dist/charts/kinds/BandStrip.d.ts.map +1 -1
- package/dist/charts/kinds/BandStrip.js +12 -7
- package/dist/charts/kinds/Bars.d.ts +13 -9
- package/dist/charts/kinds/Bars.d.ts.map +1 -1
- package/dist/charts/kinds/Bars.js +37 -11
- package/dist/charts/kinds/Donut.d.ts +6 -5
- package/dist/charts/kinds/Donut.d.ts.map +1 -1
- package/dist/charts/kinds/Donut.js +19 -2
- package/dist/charts/kinds/DualPanel.d.ts +9 -6
- package/dist/charts/kinds/DualPanel.d.ts.map +1 -1
- package/dist/charts/kinds/DualPanel.js +37 -9
- package/dist/charts/kinds/Heatmap.d.ts +10 -6
- package/dist/charts/kinds/Heatmap.d.ts.map +1 -1
- package/dist/charts/kinds/Heatmap.js +58 -31
- package/dist/charts/kinds/MirroredBars.d.ts +6 -5
- package/dist/charts/kinds/MirroredBars.d.ts.map +1 -1
- package/dist/charts/kinds/MirroredBars.js +9 -2
- package/dist/charts/kinds/MultiLine.d.ts +11 -6
- package/dist/charts/kinds/MultiLine.d.ts.map +1 -1
- package/dist/charts/kinds/MultiLine.js +24 -15
- package/dist/charts/kinds/StackedArea.d.ts +18 -8
- package/dist/charts/kinds/StackedArea.d.ts.map +1 -1
- package/dist/charts/kinds/StackedArea.js +29 -4
- package/dist/charts/kinds/ZonedLine.d.ts +13 -11
- package/dist/charts/kinds/ZonedLine.d.ts.map +1 -1
- package/dist/charts/kinds/ZonedLine.js +33 -23
- package/dist/charts/layout/auto-margin.d.ts +65 -8
- package/dist/charts/layout/auto-margin.d.ts.map +1 -1
- package/dist/charts/layout/auto-margin.js +45 -10
- package/dist/charts/layout/log-ticks.d.ts +27 -0
- package/dist/charts/layout/log-ticks.d.ts.map +1 -0
- package/dist/charts/layout/log-ticks.js +42 -0
- package/dist/charts/primitives/Axes.d.ts +32 -4
- package/dist/charts/primitives/Axes.d.ts.map +1 -1
- package/dist/charts/primitives/Axes.js +49 -7
- package/dist/charts/primitives/CartesianChart.d.ts +45 -7
- package/dist/charts/primitives/CartesianChart.d.ts.map +1 -1
- package/dist/charts/primitives/CartesianChart.js +86 -28
- package/dist/charts/primitives/ChartCard.d.ts +45 -4
- package/dist/charts/primitives/ChartCard.d.ts.map +1 -1
- package/dist/charts/primitives/ChartCard.js +70 -21
- package/dist/charts/primitives/ChartFrame.d.ts +30 -4
- package/dist/charts/primitives/ChartFrame.d.ts.map +1 -1
- package/dist/charts/primitives/ChartFrame.js +52 -15
- package/dist/charts/primitives/ChartLegend.d.ts +13 -2
- package/dist/charts/primitives/ChartLegend.d.ts.map +1 -1
- package/dist/charts/primitives/ChartLegend.js +33 -13
- package/dist/charts/primitives/ChartPending.d.ts +85 -6
- package/dist/charts/primitives/ChartPending.d.ts.map +1 -1
- package/dist/charts/primitives/ChartPending.js +100 -6
- package/dist/charts/primitives/ChartTooltip.d.ts +7 -0
- package/dist/charts/primitives/ChartTooltip.d.ts.map +1 -1
- package/dist/charts/primitives/ChartTooltip.js +18 -5
- package/dist/charts/primitives/Crosshair.d.ts +3 -0
- package/dist/charts/primitives/Crosshair.d.ts.map +1 -1
- package/dist/charts/primitives/Crosshair.js +3 -1
- package/dist/charts/primitives/chart-frame-layout.d.ts +95 -0
- package/dist/charts/primitives/chart-frame-layout.d.ts.map +1 -0
- package/dist/charts/primitives/chart-frame-layout.js +89 -0
- package/dist/charts/primitives/chart-tier.d.ts +16 -0
- package/dist/charts/primitives/chart-tier.d.ts.map +1 -0
- package/dist/charts/primitives/chart-tier.js +20 -0
- package/dist/charts/series.d.ts +55 -1
- package/dist/charts/series.d.ts.map +1 -1
- package/dist/charts/series.js +27 -1
- package/dist/charts/sparklines/BarSparkline.d.ts +3 -3
- package/dist/charts/sparklines/BarSparkline.d.ts.map +1 -1
- package/dist/charts/sparklines/BarSparkline.js +9 -3
- package/dist/charts/sparklines/LineSparkline.d.ts +3 -3
- package/dist/charts/sparklines/LineSparkline.d.ts.map +1 -1
- package/dist/charts/sparklines/LineSparkline.js +15 -3
- package/dist/charts/sparklines/index.d.ts +2 -2
- package/dist/charts/sparklines/index.d.ts.map +1 -1
- package/dist/charts/utils/format.d.ts +7 -4
- package/dist/charts/utils/format.d.ts.map +1 -1
- package/dist/charts/utils/format.js +17 -24
- package/dist/charts/utils/ticks.d.ts +81 -2
- package/dist/charts/utils/ticks.d.ts.map +1 -1
- package/dist/charts/utils/ticks.js +54 -4
- package/dist/cli/audit-allows.d.ts +24 -0
- package/dist/cli/audit-allows.d.ts.map +1 -0
- package/dist/cli/audit-allows.js +240 -0
- package/dist/cli/check-theme.d.ts +10 -0
- package/dist/cli/check-theme.d.ts.map +1 -0
- package/dist/cli/check-theme.js +139 -0
- package/dist/cli/doctor.d.ts +47 -0
- package/dist/cli/doctor.d.ts.map +1 -0
- package/dist/cli/doctor.js +197 -0
- package/dist/cli/guard-hook.d.ts +9 -0
- package/dist/cli/guard-hook.d.ts.map +1 -0
- package/dist/cli/guard-hook.js +93 -0
- package/dist/cli/help.d.ts +9 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/help.js +53 -0
- package/dist/cli/index.d.ts +360 -270
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +85 -1901
- package/dist/cli/init.d.ts +4 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +165 -0
- package/dist/cli/sync.d.ts +43 -0
- package/dist/cli/sync.d.ts.map +1 -0
- package/dist/cli/sync.js +206 -0
- package/dist/cli/tokens-css.d.ts +51 -0
- package/dist/cli/tokens-css.d.ts.map +1 -0
- package/dist/cli/tokens-css.js +165 -0
- package/dist/commands/ShortcutsHelp.d.ts +3 -2
- package/dist/commands/ShortcutsHelp.d.ts.map +1 -1
- package/dist/commands/ShortcutsHelp.js +8 -2
- package/dist/commands/define-commands.d.ts.map +1 -1
- package/dist/commands/define-commands.js +2 -2
- package/dist/commands/define-overlays.d.ts +102 -0
- package/dist/commands/define-overlays.d.ts.map +1 -1
- package/dist/commands/define-overlays.js +102 -2
- package/dist/commands/index.d.ts +12 -2
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +9 -1
- package/dist/commands/overlays-mount.d.ts +16 -11
- package/dist/commands/overlays-mount.d.ts.map +1 -1
- package/dist/commands/overlays-mount.js +23 -14
- package/dist/commands/shell-bridge.d.ts +57 -0
- package/dist/commands/shell-bridge.d.ts.map +1 -0
- package/dist/commands/shell-bridge.js +32 -0
- package/dist/common/errors.d.ts +69 -0
- package/dist/common/errors.d.ts.map +1 -0
- package/dist/common/errors.js +64 -0
- package/dist/common/index.d.ts +17 -0
- package/dist/common/index.d.ts.map +1 -0
- package/dist/common/index.js +35 -0
- package/dist/common/is-dev.d.ts +3 -0
- package/dist/common/is-dev.d.ts.map +1 -0
- package/dist/common/is-dev.js +6 -0
- package/dist/{motion/index.d.ts → common/motion.d.ts} +1 -1
- package/dist/common/motion.d.ts.map +1 -0
- package/dist/common/props.d.ts +63 -0
- package/dist/common/props.d.ts.map +1 -0
- package/dist/common/props.js +6 -0
- package/dist/common/query-state-like.d.ts +43 -0
- package/dist/common/query-state-like.d.ts.map +1 -0
- package/dist/common/query-state-like.js +20 -0
- package/dist/common/refs.d.ts +29 -0
- package/dist/common/refs.d.ts.map +1 -0
- package/dist/common/refs.js +29 -0
- package/dist/common/scroll-parent.d.ts +23 -0
- package/dist/common/scroll-parent.d.ts.map +1 -0
- package/dist/common/scroll-parent.js +21 -0
- package/dist/common/validate.d.ts +38 -0
- package/dist/common/validate.d.ts.map +1 -0
- package/dist/common/validate.js +36 -0
- package/dist/content/article-layout.module.css +11 -4
- package/dist/content/callout.d.ts +8 -4
- package/dist/content/callout.d.ts.map +1 -1
- package/dist/content/callout.js +15 -8
- package/dist/content/guide.d.ts +5 -4
- package/dist/content/guide.d.ts.map +1 -1
- package/dist/content/guide.js +13 -4
- package/dist/content/heading-anchor.d.ts +24 -2
- package/dist/content/heading-anchor.d.ts.map +1 -1
- package/dist/content/heading-anchor.js +23 -9
- package/dist/content/index.d.ts.map +1 -1
- package/dist/content/markdown.d.ts +3 -4
- package/dist/content/markdown.d.ts.map +1 -1
- package/dist/content/markdown.js +3 -4
- package/dist/content/prose.module.css +9 -7
- package/dist/content/reading-progress.d.ts +10 -4
- package/dist/content/reading-progress.d.ts.map +1 -1
- package/dist/content/reading-progress.js +26 -10
- package/dist/content/slug.d.ts +4 -0
- package/dist/content/slug.d.ts.map +1 -1
- package/dist/content/toc.d.ts +11 -0
- package/dist/content/toc.d.ts.map +1 -1
- package/dist/content/toc.js +23 -10
- package/dist/controls/actions.d.ts +50 -7
- package/dist/controls/actions.d.ts.map +1 -1
- package/dist/controls/actions.js +39 -8
- package/dist/controls/compare-filter.d.ts +3 -2
- package/dist/controls/compare-filter.d.ts.map +1 -1
- package/dist/controls/compare-filter.js +17 -2
- package/dist/controls/control-group.d.ts +3 -3
- package/dist/controls/control-group.d.ts.map +1 -1
- package/dist/controls/control-group.js +9 -2
- package/dist/controls/controls.module.css +169 -186
- package/dist/controls/controls.module.css.d.ts +9 -11
- package/dist/controls/enum-filter.d.ts +3 -2
- package/dist/controls/enum-filter.d.ts.map +1 -1
- package/dist/controls/enum-filter.js +28 -13
- package/dist/controls/filter-context.d.ts +8 -4
- package/dist/controls/filter-context.d.ts.map +1 -1
- package/dist/controls/filter-pill.d.ts +3 -3
- package/dist/controls/filter-pill.d.ts.map +1 -1
- package/dist/controls/filter-pill.js +4 -1
- package/dist/controls/filter-set.d.ts +3 -2
- package/dist/controls/filter-set.d.ts.map +1 -1
- package/dist/controls/filter-set.js +66 -41
- package/dist/controls/filter-sheet.d.ts +20 -80
- package/dist/controls/filter-sheet.d.ts.map +1 -1
- package/dist/controls/filter-sheet.js +9 -95
- package/dist/controls/index.d.ts +2 -0
- package/dist/controls/index.d.ts.map +1 -1
- package/dist/controls/index.js +4 -0
- package/dist/controls/multi-select-filter.d.ts +18 -2
- package/dist/controls/multi-select-filter.d.ts.map +1 -1
- package/dist/controls/multi-select-filter.js +122 -20
- package/dist/controls/number-filter.d.ts +7 -5
- package/dist/controls/number-filter.d.ts.map +1 -1
- package/dist/controls/number-filter.js +40 -11
- package/dist/controls/panel-row.d.ts +132 -0
- package/dist/controls/panel-row.d.ts.map +1 -0
- package/dist/controls/panel-row.js +173 -0
- package/dist/controls/panel-row.module.css +86 -0
- package/dist/controls/panel-row.module.css.d.ts +13 -0
- package/dist/controls/range-filter.d.ts +2 -1
- package/dist/controls/range-filter.d.ts.map +1 -1
- package/dist/controls/range-filter.js +57 -35
- package/dist/controls/search-filter.d.ts +3 -2
- package/dist/controls/search-filter.d.ts.map +1 -1
- package/dist/controls/search-filter.js +25 -10
- package/dist/controls/select-filter.d.ts +2 -1
- package/dist/controls/select-filter.d.ts.map +1 -1
- package/dist/controls/select-filter.js +4 -0
- package/dist/controls/slider-control.d.ts +36 -0
- package/dist/controls/slider-control.d.ts.map +1 -0
- package/dist/controls/slider-control.js +64 -0
- package/dist/controls/sync-button.d.ts +3 -2
- package/dist/controls/sync-button.d.ts.map +1 -1
- package/dist/controls/sync-button.js +16 -3
- package/dist/controls/toggle-filter.d.ts +3 -2
- package/dist/controls/toggle-filter.d.ts.map +1 -1
- package/dist/controls/toggle-filter.js +28 -11
- package/dist/controls/view-tabs.d.ts +3 -2
- package/dist/controls/view-tabs.d.ts.map +1 -1
- package/dist/controls/view-tabs.js +43 -11
- package/dist/controls-dates/date-range-picker.d.ts +1 -1
- package/dist/controls-dates/date-range-picker.d.ts.map +1 -1
- package/dist/controls-dates/date-range-picker.js +6 -1
- package/dist/dashboard/delta-badge.d.ts +18 -6
- package/dist/dashboard/delta-badge.d.ts.map +1 -1
- package/dist/dashboard/delta-badge.js +33 -1
- package/dist/dashboard/empty-state.d.ts +8 -4
- package/dist/dashboard/empty-state.d.ts.map +1 -1
- package/dist/dashboard/empty-state.js +36 -6
- package/dist/dashboard/index.d.ts +9 -5
- package/dist/dashboard/index.d.ts.map +1 -1
- package/dist/dashboard/index.js +13 -1
- package/dist/dashboard/query-state.d.ts +39 -27
- package/dist/dashboard/query-state.d.ts.map +1 -1
- package/dist/dashboard/query-state.js +109 -58
- package/dist/dashboard/section.d.ts +58 -0
- package/dist/dashboard/section.d.ts.map +1 -0
- package/dist/dashboard/section.js +118 -0
- package/dist/{section → dashboard}/section.module.css +11 -0
- package/dist/dashboard/settings-section.d.ts +19 -9
- package/dist/dashboard/settings-section.d.ts.map +1 -1
- package/dist/dashboard/settings-section.js +75 -26
- package/dist/dashboard/stat-card.d.ts +44 -38
- package/dist/dashboard/stat-card.d.ts.map +1 -1
- package/dist/dashboard/stat-card.js +56 -43
- package/dist/dashboard/stat-card.module.css +46 -31
- package/dist/dashboard/stat-card.module.css.d.ts +1 -0
- package/dist/dashboard/stat-group.d.ts +41 -0
- package/dist/dashboard/stat-group.d.ts.map +1 -0
- package/dist/dashboard/stat-group.js +30 -0
- package/dist/dashboard/stat-group.module.css +66 -0
- package/dist/dashboard/stat-group.module.css.d.ts +8 -0
- package/dist/dashboard/widget-grid.d.ts +27 -0
- package/dist/dashboard/widget-grid.d.ts.map +1 -0
- package/dist/dashboard/widget-grid.js +41 -0
- package/dist/dashboard/widget-grid.module.css +53 -0
- package/dist/dashboard/widget-grid.module.css.d.ts +9 -0
- package/dist/dashboard/widget-header.d.ts +132 -0
- package/dist/dashboard/widget-header.d.ts.map +1 -0
- package/dist/{widget-header → dashboard}/widget-header.js +42 -27
- package/dist/{widget-header → dashboard}/widget-header.module.css +72 -7
- package/dist/data/data-table.d.ts +151 -12
- package/dist/data/data-table.d.ts.map +1 -1
- package/dist/data/data-table.js +385 -139
- package/dist/data/data-table.module.css +64 -0
- package/dist/data/data-table.module.css.d.ts +11 -0
- package/dist/data/query-branch.d.ts +28 -0
- package/dist/data/query-branch.d.ts.map +1 -0
- package/dist/data/query-branch.js +10 -0
- package/dist/data/table.d.ts +2 -2
- package/dist/data/table.d.ts.map +1 -1
- package/dist/data/table.js +2 -16
- package/dist/data/virtual-list.d.ts +65 -6
- package/dist/data/virtual-list.d.ts.map +1 -1
- package/dist/data/virtual-list.js +89 -38
- package/dist/data/virtual.d.ts +4 -4
- package/dist/data/virtual.d.ts.map +1 -1
- package/dist/dev-dock.d.ts +28 -0
- package/dist/dev-dock.d.ts.map +1 -0
- package/dist/dev-dock.js +85 -0
- package/dist/format/date.d.ts +62 -0
- package/dist/format/date.d.ts.map +1 -0
- package/dist/format/date.js +106 -0
- package/dist/format/index.d.ts +39 -0
- package/dist/format/index.d.ts.map +1 -0
- package/dist/format/index.js +54 -0
- package/dist/format/measure.d.ts +15 -0
- package/dist/format/measure.d.ts.map +1 -0
- package/dist/format/measure.js +16 -0
- package/dist/format/number.d.ts +69 -0
- package/dist/format/number.d.ts.map +1 -0
- package/dist/format/number.js +62 -0
- package/dist/format/shared.d.ts +27 -0
- package/dist/format/shared.d.ts.map +1 -0
- package/dist/format/shared.js +29 -0
- package/dist/forms/FormErrorSummary.d.ts +4 -3
- package/dist/forms/FormErrorSummary.d.ts.map +1 -1
- package/dist/forms/FormErrorSummary.js +6 -4
- package/dist/forms/create-form.d.ts +2 -2
- package/dist/forms/field.d.ts +33 -9
- package/dist/forms/field.d.ts.map +1 -1
- package/dist/forms/field.js +7 -6
- package/dist/forms/form-layout.d.ts +142 -0
- package/dist/forms/form-layout.d.ts.map +1 -0
- package/dist/forms/form-layout.js +110 -0
- package/dist/forms/form-layout.module.css +145 -0
- package/dist/forms/form-layout.module.css.d.ts +20 -0
- package/dist/forms/form-state.d.ts +42 -0
- package/dist/forms/form-state.d.ts.map +1 -0
- package/dist/forms/form-state.js +26 -0
- package/dist/forms/index.d.ts +22 -6
- package/dist/forms/index.d.ts.map +1 -1
- package/dist/forms/index.js +19 -4
- package/dist/forms/use-field-array.d.ts +60 -0
- package/dist/forms/use-field-array.d.ts.map +1 -0
- package/dist/forms/use-field-array.js +20 -0
- package/dist/forms/use-form-draft.d.ts +25 -10
- package/dist/forms/use-form-draft.d.ts.map +1 -1
- package/dist/forms/use-form-draft.js +55 -18
- package/dist/forms/use-form-submit.d.ts +88 -0
- package/dist/forms/use-form-submit.d.ts.map +1 -0
- package/dist/forms/use-form-submit.js +63 -0
- package/dist/guard/index.d.ts +2 -9
- package/dist/guard/index.d.ts.map +1 -1
- package/dist/guard/index.js +38 -28
- package/dist/guard/types.d.ts +8 -10
- package/dist/guard/types.d.ts.map +1 -1
- package/dist/index.d.ts +21 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +40 -6
- package/dist/notifications/bell.d.ts +3 -2
- package/dist/notifications/bell.d.ts.map +1 -1
- package/dist/notifications/bell.js +73 -56
- package/dist/notifications/center.d.ts +15 -4
- package/dist/notifications/center.d.ts.map +1 -1
- package/dist/notifications/center.js +5 -2
- package/dist/notifications/define-notifications.d.ts +56 -14
- package/dist/notifications/define-notifications.d.ts.map +1 -1
- package/dist/notifications/define-notifications.js +2 -1
- package/dist/notifications/index.d.ts +11 -7
- package/dist/notifications/index.d.ts.map +1 -1
- package/dist/notifications/index.js +5 -3
- package/dist/notifications/mount-guard.d.ts +8 -0
- package/dist/notifications/mount-guard.d.ts.map +1 -0
- package/dist/notifications/mount-guard.js +19 -0
- package/dist/notifications/notify.d.ts +58 -1
- package/dist/notifications/notify.d.ts.map +1 -1
- package/dist/notifications/notify.js +46 -2
- package/dist/notifications/store.d.ts +7 -0
- package/dist/notifications/store.d.ts.map +1 -1
- package/dist/provider/connectivity-indicator.d.ts +13 -0
- package/dist/provider/connectivity-indicator.d.ts.map +1 -0
- package/dist/{connectivity → provider}/connectivity-indicator.js +3 -1
- package/dist/{connectivity → provider}/connectivity-provider.d.ts +1 -1
- package/dist/provider/connectivity-provider.d.ts.map +1 -0
- package/dist/{connectivity → provider}/connectivity-provider.js +4 -1
- package/dist/{connectivity/types.d.ts → provider/connectivity-types.d.ts} +3 -3
- package/dist/provider/connectivity-types.d.ts.map +1 -0
- package/dist/provider/error-fallback.module.css +21 -0
- package/dist/provider/error-fallback.module.css.d.ts +9 -0
- package/dist/provider/index.d.ts +29 -13
- package/dist/provider/index.d.ts.map +1 -1
- package/dist/provider/index.js +82 -34
- package/dist/provider/lab-theme.d.ts.map +1 -1
- package/dist/provider/lab-theme.js +2 -1
- package/dist/provider/use-connectivity.d.ts +3 -0
- package/dist/provider/use-connectivity.d.ts.map +1 -0
- package/dist/query-client.d.ts +63 -0
- package/dist/query-client.d.ts.map +1 -0
- package/dist/query-client.js +33 -0
- package/dist/{query/devtools.d.ts → query-devtools.d.ts} +2 -2
- package/dist/query-devtools.d.ts.map +1 -0
- package/dist/{query/devtools.js → query-devtools.js} +1 -0
- package/dist/register.d.ts +17 -3
- package/dist/register.d.ts.map +1 -1
- package/dist/router-tanstack/index.d.ts +4 -7
- package/dist/router-tanstack/index.d.ts.map +1 -1
- package/dist/router-tanstack/index.js +1 -9
- package/dist/router-tanstack/nav.d.ts +1 -1
- package/dist/router-tanstack/nav.d.ts.map +1 -1
- package/dist/router-tanstack/search-store.d.ts +3 -6
- package/dist/router-tanstack/search-store.d.ts.map +1 -1
- package/dist/router-tanstack/search-store.js +1 -1
- package/dist/router-tanstack/use-nav.d.ts +1 -1
- package/dist/router-tanstack/use-nav.d.ts.map +1 -1
- package/dist/router-tanstack/use-nav.js +1 -1
- package/dist/shell/account-types.d.ts +5 -2
- package/dist/shell/account-types.d.ts.map +1 -1
- package/dist/shell/app-brand.d.ts +13 -0
- package/dist/shell/app-brand.d.ts.map +1 -0
- package/dist/shell/app-brand.js +94 -0
- package/dist/shell/app-brand.module.css +109 -0
- package/dist/shell/app-brand.module.css.d.ts +14 -0
- package/dist/shell/app-breadcrumbs.d.ts +5 -3
- package/dist/shell/app-breadcrumbs.d.ts.map +1 -1
- package/dist/shell/app-breadcrumbs.js +33 -22
- package/dist/shell/app-header.module.css +10 -5
- package/dist/shell/app-main.module.css +118 -0
- package/dist/shell/app-main.module.css.d.ts +11 -0
- package/dist/shell/app-mobile-nav.d.ts +4 -3
- package/dist/shell/app-mobile-nav.d.ts.map +1 -1
- package/dist/shell/app-mobile-nav.js +53 -17
- package/dist/shell/app-mobile-nav.module.css +48 -27
- package/dist/shell/app-mobile-nav.module.css.d.ts +0 -1
- package/dist/shell/app-sidebar-account.d.ts +2 -1
- package/dist/shell/app-sidebar-account.d.ts.map +1 -1
- package/dist/shell/app-sidebar-account.js +57 -22
- package/dist/shell/app-sidebar.d.ts +10 -4
- package/dist/shell/app-sidebar.d.ts.map +1 -1
- package/dist/shell/app-sidebar.js +78 -103
- package/dist/shell/app-sidebar.module.css +63 -96
- package/dist/shell/app-sidebar.module.css.d.ts +0 -5
- package/dist/shell/index.d.ts +24 -10
- package/dist/shell/index.d.ts.map +1 -1
- package/dist/shell/index.js +60 -29
- package/dist/shell/isomorphic-layout-effect.d.ts +14 -0
- package/dist/shell/isomorphic-layout-effect.d.ts.map +1 -0
- package/dist/shell/isomorphic-layout-effect.js +5 -0
- package/dist/shell/mobile-nav-model.d.ts +1 -1
- package/dist/shell/mobile-nav-model.d.ts.map +1 -1
- package/dist/shell/mobile-nav-model.js +27 -6
- package/dist/shell/nav-count-badge.d.ts +5 -3
- package/dist/shell/nav-count-badge.d.ts.map +1 -1
- package/dist/shell/nav-count-badge.js +3 -1
- package/dist/{nav/types.d.ts → shell/nav-types.d.ts} +16 -7
- package/dist/shell/nav-types.d.ts.map +1 -0
- package/dist/shell/page-aside.d.ts +43 -0
- package/dist/shell/page-aside.d.ts.map +1 -0
- package/dist/shell/page-aside.js +175 -0
- package/dist/shell/page-aside.module.css +174 -0
- package/dist/shell/page-aside.module.css.d.ts +14 -0
- package/dist/shell/page-bar.d.ts +55 -15
- package/dist/shell/page-bar.d.ts.map +1 -1
- package/dist/shell/page-bar.js +130 -41
- package/dist/shell/page-bar.module.css +107 -13
- package/dist/shell/page-bar.module.css.d.ts +4 -1
- package/dist/shell/page-title.d.ts +14 -0
- package/dist/shell/page-title.d.ts.map +1 -0
- package/dist/shell/page-title.js +25 -0
- package/dist/shell/page-title.module.css +33 -0
- package/dist/shell/page-title.module.css.d.ts +11 -0
- package/dist/shell/sidebar-block-model.d.ts +1 -1
- package/dist/shell/sidebar-block-model.d.ts.map +1 -1
- package/dist/shell/sidebar-blocks.d.ts +1 -1
- package/dist/shell/sidebar-blocks.d.ts.map +1 -1
- package/dist/shell/sidebar-search.d.ts +4 -2
- package/dist/shell/sidebar-search.d.ts.map +1 -1
- package/dist/shell/sidebar-search.js +9 -4
- package/dist/shell/sidebar-search.module.css +1 -1
- package/dist/shell/use-breakpoint.d.ts +11 -0
- package/dist/shell/use-breakpoint.d.ts.map +1 -0
- package/dist/shell/use-breakpoint.js +33 -0
- package/dist/state/fields.d.ts +26 -22
- package/dist/state/fields.d.ts.map +1 -1
- package/dist/state/fields.js +19 -18
- package/dist/state/persisted-or-local.d.ts +9 -0
- package/dist/state/persisted-or-local.d.ts.map +1 -0
- package/dist/state/persisted-or-local.js +24 -0
- package/dist/state.d.ts +1 -1
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +2 -6
- package/dist/styles.css +36 -0
- package/dist/surfaces.d.ts +25 -47
- package/dist/surfaces.d.ts.map +1 -1
- package/dist/surfaces.js +72 -55
- package/dist/theme/ctl-theme.d.ts.map +1 -1
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js +102 -17
- package/dist/theme/nav-link.module.css +37 -26
- package/dist/theme/segmented-control.module.css +22 -0
- package/dist/theme/segmented-control.module.css.d.ts +1 -0
- package/dist/theme/theme-toggle.d.ts +9 -0
- package/dist/theme/theme-toggle.d.ts.map +1 -0
- package/dist/{theme-toggle/index.js → theme/theme-toggle.js} +9 -3
- package/dist/theme-lab/boot.d.ts +66 -0
- package/dist/theme-lab/boot.d.ts.map +1 -0
- package/dist/theme-lab/boot.js +82 -0
- package/dist/theme-lab/index.d.ts +4 -43
- package/dist/theme-lab/index.d.ts.map +1 -1
- package/dist/theme-lab/index.js +9 -69
- package/dist/tokens/index.d.ts +43 -0
- package/dist/tokens/index.d.ts.map +1 -1
- package/dist/tokens/index.js +45 -6
- package/dist/tokens/palette.d.ts +57 -25
- package/dist/tokens/palette.d.ts.map +1 -1
- package/dist/tokens/palette.js +44 -15
- package/dist/tokens.css +5 -5
- package/llms.txt +11 -26
- package/package.json +54 -34
- package/src/agent/ai-sdk-transport.ts +11 -4
- package/src/agent/coalesce.ts +2 -1
- package/src/agent/merge.ts +2 -1
- package/src/agent/part-list.tsx +2 -0
- package/src/agent/stick-to-bottom.tsx +9 -11
- package/src/agent/transport.ts +15 -2
- package/src/agent/use-agent-thread-runs.ts +65 -15
- package/src/agent-chat/composer.tsx +124 -103
- package/src/agent-chat/index.ts +6 -4
- package/src/agent-chat/relative-time.ts +2 -1
- package/src/agent-chat/thread-detail-panel.tsx +10 -6
- package/src/agent-chat/thread-feed-row.tsx +117 -34
- package/src/agent-chat/thread-feed.tsx +59 -27
- package/src/agent-chat/thread-message.tsx +48 -13
- package/src/agent-chat/thread-outcome-card.tsx +9 -1
- package/src/agent-chat/thread-workspace.tsx +72 -33
- package/src/agent-chat/tool-chip.tsx +8 -2
- package/src/agent-chat/virtualize.ts +48 -0
- package/src/charts/hooks/useBandPlot.ts +26 -8
- package/src/charts/index.ts +46 -14
- package/src/charts/kinds/BandStrip.tsx +36 -14
- package/src/charts/kinds/Bars.tsx +68 -20
- package/src/charts/kinds/Donut.tsx +30 -3
- package/src/charts/kinds/DualPanel.tsx +60 -13
- package/src/charts/kinds/Heatmap.tsx +90 -33
- package/src/charts/kinds/MirroredBars.tsx +21 -3
- package/src/charts/kinds/MultiLine.tsx +61 -18
- package/src/charts/kinds/StackedArea.tsx +77 -6
- package/src/charts/kinds/ZonedLine.tsx +72 -35
- package/src/charts/layout/auto-margin.ts +134 -21
- package/src/charts/layout/log-ticks.ts +90 -0
- package/src/charts/primitives/Axes.tsx +82 -5
- package/src/charts/primitives/CartesianChart.tsx +194 -41
- package/src/charts/primitives/ChartCard.tsx +111 -27
- package/src/charts/primitives/ChartFrame.tsx +111 -26
- package/src/charts/primitives/ChartLegend.tsx +43 -13
- package/src/charts/primitives/ChartPending.tsx +194 -10
- package/src/charts/primitives/ChartTooltip.tsx +37 -5
- package/src/charts/primitives/Crosshair.tsx +6 -3
- package/src/charts/primitives/chart-frame-layout.ts +212 -0
- package/src/charts/primitives/chart-tier.tsx +37 -0
- package/src/charts/series.ts +77 -1
- package/src/charts/sparklines/BarSparkline.tsx +11 -3
- package/src/charts/sparklines/LineSparkline.tsx +18 -4
- package/src/charts/sparklines/index.ts +2 -2
- package/src/charts/utils/format.ts +19 -27
- package/src/charts/utils/ticks.ts +149 -4
- package/src/cli/audit-allows.ts +371 -0
- package/src/cli/check-theme.ts +197 -0
- package/src/cli/doctor.ts +331 -0
- package/src/cli/guard-hook.ts +115 -0
- package/src/cli/help.ts +101 -0
- package/src/cli/index.ts +269 -3434
- package/src/cli/init.ts +247 -0
- package/src/cli/sync.ts +324 -0
- package/src/cli/tokens-css.ts +252 -0
- package/src/commands/ShortcutsHelp.tsx +10 -3
- package/src/commands/define-commands.ts +2 -2
- package/src/commands/define-overlays.ts +216 -1
- package/src/commands/index.ts +22 -1
- package/src/commands/overlays-mount.tsx +63 -31
- package/src/commands/shell-bridge.ts +86 -0
- package/src/common/errors.ts +143 -0
- package/src/common/index.ts +23 -0
- package/src/common/is-dev.ts +4 -0
- package/src/common/props.ts +71 -0
- package/src/common/query-state-like.ts +64 -0
- package/src/common/refs.ts +58 -0
- package/src/common/scroll-parent.ts +42 -0
- package/src/common/validate.ts +94 -0
- package/src/content/article-layout.module.css +11 -4
- package/src/content/callout.tsx +13 -7
- package/src/content/guide.tsx +14 -4
- package/src/content/heading-anchor.tsx +14 -3
- package/src/content/index.ts +2 -0
- package/src/content/markdown.tsx +6 -8
- package/src/content/prose.module.css +9 -7
- package/src/content/reading-progress.tsx +40 -15
- package/src/content/slug.ts +4 -0
- package/src/content/toc.tsx +47 -10
- package/src/controls/actions.tsx +90 -10
- package/src/controls/compare-filter.tsx +20 -3
- package/src/controls/control-group.tsx +11 -4
- package/src/controls/controls.module.css +169 -186
- package/src/controls/controls.module.css.d.ts +9 -11
- package/src/controls/enum-filter.tsx +32 -16
- package/src/controls/filter-context.tsx +14 -6
- package/src/controls/filter-pill.tsx +6 -3
- package/src/controls/filter-set.tsx +32 -13
- package/src/controls/filter-sheet.tsx +44 -194
- package/src/controls/index.ts +7 -0
- package/src/controls/multi-select-filter.tsx +177 -27
- package/src/controls/number-filter.tsx +61 -23
- package/src/controls/panel-row.module.css +86 -0
- package/src/controls/panel-row.module.css.d.ts +13 -0
- package/src/controls/panel-row.tsx +392 -0
- package/src/controls/range-filter.tsx +76 -39
- package/src/controls/search-filter.tsx +30 -12
- package/src/controls/select-filter.tsx +11 -1
- package/src/controls/slider-control.tsx +159 -0
- package/src/controls/sync-button.tsx +13 -3
- package/src/controls/toggle-filter.tsx +36 -16
- package/src/controls/view-tabs.tsx +63 -11
- package/src/controls-dates/date-range-picker.tsx +8 -1
- package/src/dashboard/delta-badge.tsx +75 -4
- package/src/dashboard/empty-state.tsx +67 -24
- package/src/dashboard/index.ts +24 -3
- package/src/dashboard/query-state.tsx +142 -85
- package/src/{section → dashboard}/section.module.css +11 -0
- package/src/dashboard/section.tsx +287 -0
- package/src/dashboard/settings-section.tsx +88 -32
- package/src/dashboard/stat-card.module.css +46 -31
- package/src/dashboard/stat-card.module.css.d.ts +1 -0
- package/src/dashboard/stat-card.tsx +186 -128
- package/src/dashboard/stat-group.module.css +66 -0
- package/src/dashboard/stat-group.module.css.d.ts +8 -0
- package/src/dashboard/stat-group.tsx +74 -0
- package/src/dashboard/widget-grid.module.css +53 -0
- package/src/dashboard/widget-grid.module.css.d.ts +9 -0
- package/src/dashboard/widget-grid.tsx +127 -0
- package/src/{widget-header → dashboard}/widget-header.module.css +72 -7
- package/src/dashboard/widget-header.tsx +292 -0
- package/src/data/data-table.module.css +64 -0
- package/src/data/data-table.module.css.d.ts +11 -0
- package/src/data/data-table.tsx +921 -348
- package/src/data/query-branch.ts +53 -0
- package/src/data/table.ts +9 -23
- package/src/data/virtual-list.tsx +190 -56
- package/src/data/virtual.ts +8 -4
- package/src/dev-dock.tsx +159 -0
- package/src/format/date.ts +184 -0
- package/src/format/index.ts +69 -0
- package/src/format/measure.ts +31 -0
- package/src/format/number.ts +129 -0
- package/src/format/shared.ts +63 -0
- package/src/forms/FormErrorSummary.tsx +13 -6
- package/src/forms/create-form.ts +2 -2
- package/src/forms/field.ts +42 -13
- package/src/forms/form-layout.module.css +145 -0
- package/src/forms/form-layout.module.css.d.ts +20 -0
- package/src/forms/form-layout.tsx +305 -0
- package/src/forms/form-state.tsx +94 -0
- package/src/forms/index.ts +37 -7
- package/src/forms/use-field-array.ts +94 -0
- package/src/forms/use-form-draft.ts +145 -53
- package/src/forms/use-form-submit.ts +199 -0
- package/src/guard/index.ts +99 -70
- package/src/guard/types.ts +7 -10
- package/src/index.ts +92 -19
- package/src/notifications/bell.tsx +18 -4
- package/src/notifications/center.tsx +18 -5
- package/src/notifications/define-notifications.ts +64 -18
- package/src/notifications/index.ts +17 -8
- package/src/notifications/mount-guard.ts +39 -0
- package/src/notifications/notify.tsx +122 -3
- package/src/notifications/store.ts +7 -0
- package/src/{connectivity → provider}/connectivity-indicator.tsx +7 -2
- package/src/{connectivity → provider}/connectivity-provider.tsx +5 -2
- package/src/{connectivity/types.ts → provider/connectivity-types.ts} +5 -2
- package/src/provider/error-fallback.module.css +21 -0
- package/src/provider/error-fallback.module.css.d.ts +9 -0
- package/src/provider/index.tsx +116 -28
- package/src/provider/lab-theme.ts +2 -1
- package/src/{connectivity → provider}/use-connectivity.ts +4 -3
- package/src/query-client.ts +100 -0
- package/src/{query/devtools.tsx → query-devtools.tsx} +6 -4
- package/src/register.ts +20 -4
- package/src/router-tanstack/index.ts +4 -15
- package/src/router-tanstack/nav.ts +1 -1
- package/src/router-tanstack/search-store.ts +6 -14
- package/src/router-tanstack/use-nav.ts +19 -14
- package/src/shell/account-types.ts +5 -2
- package/src/shell/app-brand.module.css +109 -0
- package/src/shell/app-brand.module.css.d.ts +14 -0
- package/src/shell/app-brand.tsx +140 -0
- package/src/shell/app-breadcrumbs.tsx +20 -10
- package/src/shell/app-header.module.css +10 -5
- package/src/shell/app-main.module.css +118 -0
- package/src/shell/app-main.module.css.d.ts +11 -0
- package/src/shell/app-mobile-nav.module.css +48 -27
- package/src/shell/app-mobile-nav.module.css.d.ts +0 -1
- package/src/shell/app-mobile-nav.tsx +71 -12
- package/src/shell/app-sidebar-account.tsx +29 -6
- package/src/shell/app-sidebar.module.css +63 -96
- package/src/shell/app-sidebar.module.css.d.ts +0 -5
- package/src/shell/app-sidebar.tsx +61 -105
- package/src/shell/index.tsx +179 -93
- package/src/shell/isomorphic-layout-effect.ts +14 -0
- package/src/shell/mobile-nav-model.ts +67 -11
- package/src/shell/nav-count-badge.tsx +6 -1
- package/src/{nav/types.ts → shell/nav-types.ts} +15 -6
- package/src/shell/page-aside.module.css +174 -0
- package/src/shell/page-aside.module.css.d.ts +14 -0
- package/src/shell/page-aside.tsx +327 -0
- package/src/shell/page-bar.module.css +107 -13
- package/src/shell/page-bar.module.css.d.ts +4 -1
- package/src/shell/page-bar.tsx +294 -94
- package/src/shell/page-title.module.css +33 -0
- package/src/shell/page-title.module.css.d.ts +11 -0
- package/src/shell/page-title.tsx +57 -0
- package/src/shell/sidebar-block-model.ts +1 -1
- package/src/shell/sidebar-blocks.tsx +1 -1
- package/src/shell/sidebar-search.module.css +1 -1
- package/src/shell/sidebar-search.tsx +13 -4
- package/src/shell/use-breakpoint.ts +73 -0
- package/src/state/fields.ts +50 -53
- package/src/state/persisted-or-local.ts +50 -0
- package/src/state.ts +0 -9
- package/src/styles.css +36 -0
- package/src/surfaces.ts +72 -57
- package/src/theme/ctl-theme.tsx +10 -0
- package/src/theme/index.ts +136 -16
- package/src/theme/nav-link.module.css +37 -26
- package/src/theme/segmented-control.module.css +22 -0
- package/src/theme/segmented-control.module.css.d.ts +1 -0
- package/src/{theme-toggle/index.tsx → theme/theme-toggle.tsx} +11 -4
- package/src/theme-lab/boot.ts +140 -0
- package/src/theme-lab/index.tsx +21 -112
- package/src/tokens/index.ts +60 -6
- package/src/tokens/palette.ts +70 -30
- package/dist/agent/adapter.test.d.ts +0 -2
- package/dist/agent/adapter.test.d.ts.map +0 -1
- package/dist/agent/ai-sdk-transport.test.d.ts +0 -2
- package/dist/agent/ai-sdk-transport.test.d.ts.map +0 -1
- package/dist/agent/coalesce.test.d.ts +0 -2
- package/dist/agent/coalesce.test.d.ts.map +0 -1
- package/dist/agent/foreign.test.d.ts +0 -2
- package/dist/agent/foreign.test.d.ts.map +0 -1
- package/dist/agent/id.test.d.ts +0 -2
- package/dist/agent/id.test.d.ts.map +0 -1
- package/dist/agent/merge.test.d.ts +0 -2
- package/dist/agent/merge.test.d.ts.map +0 -1
- package/dist/agent/part-list.test.d.ts +0 -2
- package/dist/agent/part-list.test.d.ts.map +0 -1
- package/dist/agent/parts.test.d.ts +0 -2
- package/dist/agent/parts.test.d.ts.map +0 -1
- package/dist/agent/thread.test.d.ts +0 -2
- package/dist/agent/thread.test.d.ts.map +0 -1
- package/dist/agent/transport.test.d.ts +0 -2
- package/dist/agent/transport.test.d.ts.map +0 -1
- package/dist/agent/use-agent-stream.test.d.ts +0 -2
- package/dist/agent/use-agent-stream.test.d.ts.map +0 -1
- package/dist/agent/use-agent-thread-runs.foreign.test.d.ts +0 -2
- package/dist/agent/use-agent-thread-runs.foreign.test.d.ts.map +0 -1
- package/dist/agent/use-agent-thread-runs.resume.test.d.ts +0 -2
- package/dist/agent/use-agent-thread-runs.resume.test.d.ts.map +0 -1
- package/dist/agent/use-agent-thread-runs.test.d.ts +0 -2
- package/dist/agent/use-agent-thread-runs.test.d.ts.map +0 -1
- package/dist/agent/use-agent-thread-runs.wedge.test.d.ts +0 -2
- package/dist/agent/use-agent-thread-runs.wedge.test.d.ts.map +0 -1
- package/dist/agent-chat/composer.test.d.ts +0 -2
- package/dist/agent-chat/composer.test.d.ts.map +0 -1
- package/dist/agent-chat/relative-time.test.d.ts +0 -2
- package/dist/agent-chat/relative-time.test.d.ts.map +0 -1
- package/dist/agent-chat/thread-feed-row.test.d.ts +0 -2
- package/dist/agent-chat/thread-feed-row.test.d.ts.map +0 -1
- package/dist/agent-chat/thread-feed.test.d.ts +0 -2
- package/dist/agent-chat/thread-feed.test.d.ts.map +0 -1
- package/dist/agent-chat/thread-message.test.d.ts +0 -2
- package/dist/agent-chat/thread-message.test.d.ts.map +0 -1
- package/dist/agent-chat/thread-workspace.test.d.ts +0 -2
- package/dist/agent-chat/thread-workspace.test.d.ts.map +0 -1
- package/dist/agent-chat/tool-chip.test.d.ts +0 -2
- package/dist/agent-chat/tool-chip.test.d.ts.map +0 -1
- package/dist/agent-chat/virtualize.type-guard.test.d.ts +0 -2
- package/dist/agent-chat/virtualize.type-guard.test.d.ts.map +0 -1
- package/dist/charts/cursor/resolve.test.d.ts +0 -2
- package/dist/charts/cursor/resolve.test.d.ts.map +0 -1
- package/dist/charts/cursor/store.test.d.ts +0 -2
- package/dist/charts/cursor/store.test.d.ts.map +0 -1
- package/dist/charts/kinds/BandStrip.test.d.ts +0 -2
- package/dist/charts/kinds/BandStrip.test.d.ts.map +0 -1
- package/dist/charts/kinds/Bars.test.d.ts +0 -2
- package/dist/charts/kinds/Bars.test.d.ts.map +0 -1
- package/dist/charts/kinds/DualPanel.test.d.ts +0 -2
- package/dist/charts/kinds/DualPanel.test.d.ts.map +0 -1
- package/dist/charts/kinds/MirroredBars.test.d.ts +0 -2
- package/dist/charts/kinds/MirroredBars.test.d.ts.map +0 -1
- package/dist/charts/kinds/MultiLine.test.d.ts +0 -2
- package/dist/charts/kinds/MultiLine.test.d.ts.map +0 -1
- package/dist/charts/kinds/StackedArea.test.d.ts +0 -2
- package/dist/charts/kinds/StackedArea.test.d.ts.map +0 -1
- package/dist/charts/kinds/ZonedLine.test.d.ts +0 -2
- package/dist/charts/kinds/ZonedLine.test.d.ts.map +0 -1
- package/dist/charts/layout/auto-margin.test.d.ts +0 -2
- package/dist/charts/layout/auto-margin.test.d.ts.map +0 -1
- package/dist/charts/primitives/CartesianChart.test.d.ts +0 -2
- package/dist/charts/primitives/CartesianChart.test.d.ts.map +0 -1
- package/dist/charts/primitives/ChartCard.test.d.ts +0 -2
- package/dist/charts/primitives/ChartCard.test.d.ts.map +0 -1
- package/dist/charts/primitives/ChartFrame.test.d.ts +0 -2
- package/dist/charts/primitives/ChartFrame.test.d.ts.map +0 -1
- package/dist/charts/primitives/ChartLegend.test.d.ts +0 -2
- package/dist/charts/primitives/ChartLegend.test.d.ts.map +0 -1
- package/dist/charts/primitives/ChartTooltip.test.d.ts +0 -2
- package/dist/charts/primitives/ChartTooltip.test.d.ts.map +0 -1
- package/dist/charts/primitives/XZoneRects.test.d.ts +0 -2
- package/dist/charts/primitives/XZoneRects.test.d.ts.map +0 -1
- package/dist/charts/series.test.d.ts +0 -2
- package/dist/charts/series.test.d.ts.map +0 -1
- package/dist/charts/utils/domain.test.d.ts +0 -2
- package/dist/charts/utils/domain.test.d.ts.map +0 -1
- package/dist/charts/utils/measure-text.test.d.ts +0 -2
- package/dist/charts/utils/measure-text.test.d.ts.map +0 -1
- package/dist/cli/check-coverage.test.d.ts +0 -2
- package/dist/cli/check-coverage.test.d.ts.map +0 -1
- package/dist/cli/check-theme.test.d.ts +0 -2
- package/dist/cli/check-theme.test.d.ts.map +0 -1
- package/dist/cli/help.test.d.ts +0 -2
- package/dist/cli/help.test.d.ts.map +0 -1
- package/dist/cli/init-sync.test.d.ts +0 -2
- package/dist/cli/init-sync.test.d.ts.map +0 -1
- package/dist/cli/placement-engine.test.d.ts +0 -2
- package/dist/cli/placement-engine.test.d.ts.map +0 -1
- package/dist/cli/shipped-versions.test.d.ts +0 -2
- package/dist/cli/shipped-versions.test.d.ts.map +0 -1
- package/dist/cli/tarball-parity.test.d.ts +0 -2
- package/dist/cli/tarball-parity.test.d.ts.map +0 -1
- package/dist/cli/template-format.test.d.ts +0 -2
- package/dist/cli/template-format.test.d.ts.map +0 -1
- package/dist/cli/template-ledger.test.d.ts +0 -2
- package/dist/cli/template-ledger.test.d.ts.map +0 -1
- package/dist/cli/tokens-css.test.d.ts +0 -2
- package/dist/cli/tokens-css.test.d.ts.map +0 -1
- package/dist/cli/toolchain-wiring.test.d.ts +0 -2
- package/dist/cli/toolchain-wiring.test.d.ts.map +0 -1
- package/dist/cli/waiver-audit.test.d.ts +0 -2
- package/dist/cli/waiver-audit.test.d.ts.map +0 -1
- package/dist/connectivity/connectivity-indicator.d.ts +0 -11
- package/dist/connectivity/connectivity-indicator.d.ts.map +0 -1
- package/dist/connectivity/connectivity-provider.d.ts.map +0 -1
- package/dist/connectivity/index.d.ts +0 -13
- package/dist/connectivity/index.d.ts.map +0 -1
- package/dist/connectivity/index.js +0 -8
- package/dist/connectivity/types.d.ts.map +0 -1
- package/dist/connectivity/use-connectivity.d.ts +0 -3
- package/dist/connectivity/use-connectivity.d.ts.map +0 -1
- package/dist/content/article-actions.test.d.ts +0 -2
- package/dist/content/article-actions.test.d.ts.map +0 -1
- package/dist/content/article-model.test.d.ts +0 -2
- package/dist/content/article-model.test.d.ts.map +0 -1
- package/dist/content/block-split.test.d.ts +0 -2
- package/dist/content/block-split.test.d.ts.map +0 -1
- package/dist/content/heading-components.test.d.ts +0 -2
- package/dist/content/heading-components.test.d.ts.map +0 -1
- package/dist/content/markdown.test.d.ts +0 -2
- package/dist/content/markdown.test.d.ts.map +0 -1
- package/dist/content/prose.module.css.test.d.ts +0 -2
- package/dist/content/prose.module.css.test.d.ts.map +0 -1
- package/dist/content/sanitize.test.d.ts +0 -2
- package/dist/content/sanitize.test.d.ts.map +0 -1
- package/dist/content/slug.test.d.ts +0 -2
- package/dist/content/slug.test.d.ts.map +0 -1
- package/dist/controls/actions.test.d.ts +0 -2
- package/dist/controls/actions.test.d.ts.map +0 -1
- package/dist/controls/actions.type-guard.test.d.ts +0 -2
- package/dist/controls/actions.type-guard.test.d.ts.map +0 -1
- package/dist/controls/control-group.test.d.ts +0 -2
- package/dist/controls/control-group.test.d.ts.map +0 -1
- package/dist/controls/controls.router.test.d.ts +0 -2
- package/dist/controls/controls.router.test.d.ts.map +0 -1
- package/dist/controls/filter-set.test.d.ts +0 -2
- package/dist/controls/filter-set.test.d.ts.map +0 -1
- package/dist/controls/peer-boundary.test.d.ts +0 -2
- package/dist/controls/peer-boundary.test.d.ts.map +0 -1
- package/dist/controls/props-contract.test.d.ts +0 -2
- package/dist/controls/props-contract.test.d.ts.map +0 -1
- package/dist/controls/range-filter.type-guard.test.d.ts +0 -2
- package/dist/controls/range-filter.type-guard.test.d.ts.map +0 -1
- package/dist/controls/sync-button.test.d.ts +0 -2
- package/dist/controls/sync-button.test.d.ts.map +0 -1
- package/dist/dashboard/query-state.test.d.ts +0 -2
- package/dist/dashboard/query-state.test.d.ts.map +0 -1
- package/dist/dashboard/settings-section.test.d.ts +0 -2
- package/dist/dashboard/settings-section.test.d.ts.map +0 -1
- package/dist/dashboard/stat-card.test.d.ts +0 -2
- package/dist/dashboard/stat-card.test.d.ts.map +0 -1
- package/dist/data/data-table.test.d.ts +0 -2
- package/dist/data/data-table.test.d.ts.map +0 -1
- package/dist/data/index.d.ts +0 -38
- package/dist/data/index.d.ts.map +0 -1
- package/dist/data/index.js +0 -2
- package/dist/guard/check-source.test.d.ts +0 -2
- package/dist/guard/check-source.test.d.ts.map +0 -1
- package/dist/guard/grace.test.d.ts +0 -20
- package/dist/guard/grace.test.d.ts.map +0 -1
- package/dist/guard/guard-hook.test.d.ts +0 -2
- package/dist/guard/guard-hook.test.d.ts.map +0 -1
- package/dist/motion/index.d.ts.map +0 -1
- package/dist/nav/types.d.ts.map +0 -1
- package/dist/notifications/overlay.d.ts +0 -20
- package/dist/notifications/overlay.d.ts.map +0 -1
- package/dist/notifications/overlay.js +0 -12
- package/dist/provider/index.test.d.ts +0 -2
- package/dist/provider/index.test.d.ts.map +0 -1
- package/dist/provider/lab-theme.test.d.ts +0 -2
- package/dist/provider/lab-theme.test.d.ts.map +0 -1
- package/dist/query/devtools.d.ts.map +0 -1
- package/dist/query/error-message.d.ts +0 -41
- package/dist/query/error-message.d.ts.map +0 -1
- package/dist/query/error-message.js +0 -30
- package/dist/query/error-message.test.d.ts +0 -2
- package/dist/query/error-message.test.d.ts.map +0 -1
- package/dist/query/index.d.ts +0 -47
- package/dist/query/index.d.ts.map +0 -1
- package/dist/query/index.js +0 -56
- package/dist/router-tanstack/field.d.ts +0 -14
- package/dist/router-tanstack/field.d.ts.map +0 -1
- package/dist/router-tanstack/field.js +0 -4
- package/dist/router-tanstack/multi-search-param-store.d.ts +0 -43
- package/dist/router-tanstack/multi-search-param-store.d.ts.map +0 -1
- package/dist/router-tanstack/multi-search-param-store.js +0 -30
- package/dist/router-tanstack/multi-search-param-store.test.d.ts +0 -2
- package/dist/router-tanstack/multi-search-param-store.test.d.ts.map +0 -1
- package/dist/router-tanstack/nav.test.d.ts +0 -2
- package/dist/router-tanstack/nav.test.d.ts.map +0 -1
- package/dist/router-tanstack/search-param-store.d.ts +0 -42
- package/dist/router-tanstack/search-param-store.d.ts.map +0 -1
- package/dist/router-tanstack/search-param-store.js +0 -25
- package/dist/router-tanstack/search-param-store.test.d.ts +0 -2
- package/dist/router-tanstack/search-param-store.test.d.ts.map +0 -1
- package/dist/router-tanstack/search-store.router.test.d.ts +0 -2
- package/dist/router-tanstack/search-store.router.test.d.ts.map +0 -1
- package/dist/router-tanstack/search-store.test.d.ts +0 -2
- package/dist/router-tanstack/search-store.test.d.ts.map +0 -1
- package/dist/router-tanstack/use-nav.test.d.ts +0 -2
- package/dist/router-tanstack/use-nav.test.d.ts.map +0 -1
- package/dist/section/index.d.ts +0 -2
- package/dist/section/index.d.ts.map +0 -1
- package/dist/section/index.js +0 -4
- package/dist/section/section.d.ts +0 -24
- package/dist/section/section.d.ts.map +0 -1
- package/dist/section/section.js +0 -126
- package/dist/section/section.test.d.ts +0 -2
- package/dist/section/section.test.d.ts.map +0 -1
- package/dist/shell/app-mobile-nav.test.d.ts +0 -2
- package/dist/shell/app-mobile-nav.test.d.ts.map +0 -1
- package/dist/shell/app-sidebar.test.d.ts +0 -2
- package/dist/shell/app-sidebar.test.d.ts.map +0 -1
- package/dist/shell/index.test.d.ts +0 -2
- package/dist/shell/index.test.d.ts.map +0 -1
- package/dist/shell/mobile-nav-model.test.d.ts +0 -2
- package/dist/shell/mobile-nav-model.test.d.ts.map +0 -1
- package/dist/shell/page-bar.test.d.ts +0 -2
- package/dist/shell/page-bar.test.d.ts.map +0 -1
- package/dist/state/fields.test.d.ts +0 -2
- package/dist/state/fields.test.d.ts.map +0 -1
- package/dist/state/persisted.test.d.ts +0 -2
- package/dist/state/persisted.test.d.ts.map +0 -1
- package/dist/styles.floor.test.d.ts +0 -2
- package/dist/styles.floor.test.d.ts.map +0 -1
- package/dist/theme/border-coverage.test.d.ts +0 -18
- package/dist/theme/border-coverage.test.d.ts.map +0 -1
- package/dist/theme/contrast.test.d.ts +0 -2
- package/dist/theme/contrast.test.d.ts.map +0 -1
- package/dist/theme/ctl-theme.test.d.ts +0 -2
- package/dist/theme/ctl-theme.test.d.ts.map +0 -1
- package/dist/theme/ctl-tier-coverage.test.d.ts +0 -2
- package/dist/theme/ctl-tier-coverage.test.d.ts.map +0 -1
- package/dist/theme/density-option.test.d.ts +0 -2
- package/dist/theme/density-option.test.d.ts.map +0 -1
- package/dist/theme/density-relations.test.d.ts +0 -2
- package/dist/theme/density-relations.test.d.ts.map +0 -1
- package/dist/theme/derive-theme.test.d.ts +0 -2
- package/dist/theme/derive-theme.test.d.ts.map +0 -1
- package/dist/theme/divider-law.test.d.ts +0 -2
- package/dist/theme/divider-law.test.d.ts.map +0 -1
- package/dist/theme/fonts-option.test.d.ts +0 -2
- package/dist/theme/fonts-option.test.d.ts.map +0 -1
- package/dist/theme/icon-slot.test.d.ts +0 -2
- package/dist/theme/icon-slot.test.d.ts.map +0 -1
- package/dist/theme/layout-rhythm-css.test.d.ts +0 -2
- package/dist/theme/layout-rhythm-css.test.d.ts.map +0 -1
- package/dist/theme/radius-option.test.d.ts +0 -2
- package/dist/theme/radius-option.test.d.ts.map +0 -1
- package/dist/theme/radius.test.d.ts +0 -2
- package/dist/theme/radius.test.d.ts.map +0 -1
- package/dist/theme/shadow-surfaces.test.d.ts +0 -26
- package/dist/theme/shadow-surfaces.test.d.ts.map +0 -1
- package/dist/theme/spacing.test.d.ts +0 -2
- package/dist/theme/spacing.test.d.ts.map +0 -1
- package/dist/theme/use-basalt-spacing.test.d.ts +0 -2
- package/dist/theme/use-basalt-spacing.test.d.ts.map +0 -1
- package/dist/theme-lab/derive-controls.test.d.ts +0 -2
- package/dist/theme-lab/derive-controls.test.d.ts.map +0 -1
- package/dist/theme-lab/derive-state.test.d.ts +0 -2
- package/dist/theme-lab/derive-state.test.d.ts.map +0 -1
- package/dist/theme-lab/theme-lab.test.d.ts +0 -2
- package/dist/theme-lab/theme-lab.test.d.ts.map +0 -1
- package/dist/theme-toggle/index.d.ts +0 -8
- package/dist/theme-toggle/index.d.ts.map +0 -1
- package/dist/tokens/build-fonts-css.test.d.ts +0 -2
- package/dist/tokens/build-fonts-css.test.d.ts.map +0 -1
- package/dist/tokens/build-radius-css.test.d.ts +0 -2
- package/dist/tokens/build-radius-css.test.d.ts.map +0 -1
- package/dist/tokens/chart-margin.test.d.ts +0 -2
- package/dist/tokens/chart-margin.test.d.ts.map +0 -1
- package/dist/tokens/density.test.d.ts +0 -2
- package/dist/tokens/density.test.d.ts.map +0 -1
- package/dist/tokens/derive-radius.test.d.ts +0 -2
- package/dist/tokens/derive-radius.test.d.ts.map +0 -1
- package/dist/tokens/derive.test.d.ts +0 -2
- package/dist/tokens/derive.test.d.ts.map +0 -1
- package/dist/tokens/palette.test.d.ts +0 -2
- package/dist/tokens/palette.test.d.ts.map +0 -1
- package/dist/tokens/text-scale.test.d.ts +0 -2
- package/dist/tokens/text-scale.test.d.ts.map +0 -1
- package/dist/vite-color-mix.test.d.ts +0 -2
- package/dist/vite-color-mix.test.d.ts.map +0 -1
- package/dist/vite.test.d.ts +0 -2
- package/dist/vite.test.d.ts.map +0 -1
- package/dist/widget-header/delta-badge.d.ts +0 -13
- package/dist/widget-header/delta-badge.d.ts.map +0 -1
- package/dist/widget-header/delta-badge.js +0 -29
- package/dist/widget-header/delta-badge.test.d.ts +0 -2
- package/dist/widget-header/delta-badge.test.d.ts.map +0 -1
- package/dist/widget-header/index.d.ts +0 -3
- package/dist/widget-header/index.d.ts.map +0 -1
- package/dist/widget-header/index.js +0 -6
- package/dist/widget-header/no-mantine.test.d.ts +0 -2
- package/dist/widget-header/no-mantine.test.d.ts.map +0 -1
- package/dist/widget-header/widget-header.d.ts +0 -67
- package/dist/widget-header/widget-header.d.ts.map +0 -1
- package/dist/widget-header/widget-header.test.d.ts +0 -2
- package/dist/widget-header/widget-header.test.d.ts.map +0 -1
- package/src/agent/adapter.test.ts +0 -1640
- package/src/agent/ai-sdk-transport.test.ts +0 -658
- package/src/agent/coalesce.test.ts +0 -387
- package/src/agent/foreign.test.ts +0 -51
- package/src/agent/id.test.ts +0 -169
- package/src/agent/merge.test.ts +0 -206
- package/src/agent/part-list.test.tsx +0 -112
- package/src/agent/parts.test.ts +0 -720
- package/src/agent/thread.test.ts +0 -220
- package/src/agent/transport.test.ts +0 -70
- package/src/agent/use-agent-stream.test.tsx +0 -287
- package/src/agent/use-agent-thread-runs.foreign.test.tsx +0 -138
- package/src/agent/use-agent-thread-runs.resume.test.tsx +0 -294
- package/src/agent/use-agent-thread-runs.test.tsx +0 -1120
- package/src/agent/use-agent-thread-runs.wedge.test.tsx +0 -387
- package/src/agent-chat/composer.test.tsx +0 -924
- package/src/agent-chat/relative-time.test.ts +0 -95
- package/src/agent-chat/thread-feed-row.test.tsx +0 -510
- package/src/agent-chat/thread-feed.test.tsx +0 -241
- package/src/agent-chat/thread-message.test.tsx +0 -1285
- package/src/agent-chat/thread-workspace.test.tsx +0 -169
- package/src/agent-chat/tool-chip.test.tsx +0 -139
- package/src/agent-chat/virtualize.type-guard.test.ts +0 -49
- package/src/charts/cursor/resolve.test.ts +0 -151
- package/src/charts/cursor/store.test.ts +0 -64
- package/src/charts/kinds/BandStrip.test.tsx +0 -282
- package/src/charts/kinds/Bars.test.tsx +0 -183
- package/src/charts/kinds/DualPanel.test.tsx +0 -527
- package/src/charts/kinds/MirroredBars.test.tsx +0 -232
- package/src/charts/kinds/MultiLine.test.tsx +0 -218
- package/src/charts/kinds/StackedArea.test.tsx +0 -114
- package/src/charts/kinds/ZonedLine.test.tsx +0 -147
- package/src/charts/layout/auto-margin.test.ts +0 -42
- package/src/charts/primitives/CartesianChart.test.tsx +0 -647
- package/src/charts/primitives/ChartCard.test.tsx +0 -66
- package/src/charts/primitives/ChartFrame.test.tsx +0 -142
- package/src/charts/primitives/ChartLegend.test.tsx +0 -78
- package/src/charts/primitives/ChartTooltip.test.tsx +0 -44
- package/src/charts/primitives/XZoneRects.test.tsx +0 -123
- package/src/charts/series.test.ts +0 -112
- package/src/charts/utils/domain.test.ts +0 -54
- package/src/charts/utils/measure-text.test.ts +0 -36
- package/src/cli/check-coverage.test.ts +0 -297
- package/src/cli/check-theme.test.ts +0 -837
- package/src/cli/help.test.ts +0 -170
- package/src/cli/init-sync.test.ts +0 -343
- package/src/cli/placement-engine.test.ts +0 -298
- package/src/cli/shipped-versions.test.ts +0 -83
- package/src/cli/tarball-parity.test.ts +0 -44
- package/src/cli/template-format.test.ts +0 -64
- package/src/cli/template-ledger.test.ts +0 -219
- package/src/cli/tokens-css.test.ts +0 -249
- package/src/cli/toolchain-wiring.test.ts +0 -1358
- package/src/cli/waiver-audit.test.ts +0 -215
- package/src/connectivity/index.ts +0 -18
- package/src/content/article-actions.test.ts +0 -78
- package/src/content/article-model.test.ts +0 -119
- package/src/content/block-split.test.ts +0 -75
- package/src/content/heading-components.test.tsx +0 -65
- package/src/content/markdown.test.tsx +0 -603
- package/src/content/prose.module.css.test.ts +0 -39
- package/src/content/sanitize.test.ts +0 -659
- package/src/content/slug.test.ts +0 -62
- package/src/controls/actions.test.tsx +0 -252
- package/src/controls/actions.type-guard.test.ts +0 -63
- package/src/controls/control-group.test.tsx +0 -229
- package/src/controls/controls.router.test.tsx +0 -1053
- package/src/controls/filter-set.test.tsx +0 -472
- package/src/controls/peer-boundary.test.ts +0 -85
- package/src/controls/props-contract.test.tsx +0 -137
- package/src/controls/range-filter.type-guard.test.tsx +0 -122
- package/src/controls/sync-button.test.tsx +0 -183
- package/src/dashboard/query-state.test.tsx +0 -152
- package/src/dashboard/settings-section.test.tsx +0 -56
- package/src/dashboard/stat-card.test.tsx +0 -385
- package/src/data/data-table.test.tsx +0 -434
- package/src/data/index.ts +0 -41
- package/src/guard/check-source.test.ts +0 -3388
- package/src/guard/grace.test.ts +0 -158
- package/src/guard/guard-hook.test.ts +0 -203
- package/src/notifications/overlay.tsx +0 -64
- package/src/provider/index.test.tsx +0 -101
- package/src/provider/lab-theme.test.ts +0 -147
- package/src/query/error-message.test.ts +0 -67
- package/src/query/error-message.ts +0 -70
- package/src/query/index.ts +0 -97
- package/src/router-tanstack/field.ts +0 -35
- package/src/router-tanstack/multi-search-param-store.test.ts +0 -124
- package/src/router-tanstack/multi-search-param-store.ts +0 -106
- package/src/router-tanstack/nav.test.ts +0 -111
- package/src/router-tanstack/search-param-store.test.ts +0 -135
- package/src/router-tanstack/search-param-store.ts +0 -100
- package/src/router-tanstack/search-store.router.test.tsx +0 -882
- package/src/router-tanstack/search-store.test.ts +0 -578
- package/src/router-tanstack/use-nav.test.tsx +0 -187
- package/src/section/index.ts +0 -1
- package/src/section/section.test.tsx +0 -204
- package/src/section/section.tsx +0 -220
- package/src/shell/app-mobile-nav.test.tsx +0 -403
- package/src/shell/app-sidebar.test.tsx +0 -509
- package/src/shell/index.test.tsx +0 -428
- package/src/shell/mobile-nav-model.test.ts +0 -517
- package/src/shell/page-bar.test.tsx +0 -316
- package/src/state/fields.test.tsx +0 -512
- package/src/state/persisted.test.ts +0 -91
- package/src/styles.floor.test.ts +0 -36
- package/src/theme/border-coverage.test.ts +0 -272
- package/src/theme/contrast.test.ts +0 -354
- package/src/theme/ctl-theme.test.tsx +0 -275
- package/src/theme/ctl-tier-coverage.test.ts +0 -170
- package/src/theme/density-option.test.ts +0 -96
- package/src/theme/density-relations.test.ts +0 -506
- package/src/theme/derive-theme.test.ts +0 -101
- package/src/theme/divider-law.test.ts +0 -259
- package/src/theme/fonts-option.test.ts +0 -75
- package/src/theme/icon-slot.test.tsx +0 -275
- package/src/theme/layout-rhythm-css.test.ts +0 -72
- package/src/theme/radius-option.test.ts +0 -86
- package/src/theme/radius.test.ts +0 -142
- package/src/theme/shadow-surfaces.test.ts +0 -488
- package/src/theme/spacing.test.ts +0 -495
- package/src/theme/use-basalt-spacing.test.tsx +0 -55
- package/src/theme-lab/derive-controls.test.ts +0 -94
- package/src/theme-lab/derive-state.test.ts +0 -71
- package/src/theme-lab/theme-lab.test.ts +0 -46
- package/src/tokens/build-fonts-css.test.ts +0 -52
- package/src/tokens/build-radius-css.test.ts +0 -25
- package/src/tokens/chart-margin.test.ts +0 -39
- package/src/tokens/density.test.ts +0 -259
- package/src/tokens/derive-radius.test.ts +0 -62
- package/src/tokens/derive.test.ts +0 -30
- package/src/tokens/palette.test.ts +0 -114
- package/src/tokens/text-scale.test.ts +0 -51
- package/src/vite-color-mix.test.ts +0 -46
- package/src/vite.test.ts +0 -423
- package/src/widget-header/delta-badge.test.tsx +0 -60
- package/src/widget-header/delta-badge.tsx +0 -57
- package/src/widget-header/index.ts +0 -2
- package/src/widget-header/no-mantine.test.ts +0 -33
- package/src/widget-header/widget-header.test.tsx +0 -187
- package/src/widget-header/widget-header.tsx +0 -213
- /package/dist/{motion/index.js → common/motion.js} +0 -0
- /package/dist/{section → dashboard}/section.module.css.d.ts +0 -0
- /package/dist/{widget-header → dashboard}/widget-header.module.css.d.ts +0 -0
- /package/dist/{connectivity/types.js → provider/connectivity-types.js} +0 -0
- /package/dist/{connectivity → provider}/use-connectivity.js +0 -0
- /package/dist/{nav/types.js → shell/nav-types.js} +0 -0
- /package/src/{motion/index.ts → common/motion.ts} +0 -0
- /package/src/{section → dashboard}/section.module.css.d.ts +0 -0
- /package/src/{widget-header → dashboard}/widget-header.module.css.d.ts +0 -0
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Internal to `agent-chat/` — not part of the public barrel.
|
|
9
9
|
*/
|
|
10
|
+
import { isDev } from '../common/is-dev'
|
|
10
11
|
|
|
11
12
|
const RELATIVE_TIME_FORMAT = new Intl.RelativeTimeFormat('en', { numeric: 'auto' })
|
|
12
13
|
|
|
@@ -40,7 +41,7 @@ const RELATIVE_TIME_UNITS: readonly {
|
|
|
40
41
|
*/
|
|
41
42
|
export function formatRelativeTime(timestamp: number): string {
|
|
42
43
|
if (!Number.isFinite(timestamp)) {
|
|
43
|
-
if (
|
|
44
|
+
if (isDev()) {
|
|
44
45
|
console.warn(
|
|
45
46
|
`[basalt] formatRelativeTime: non-finite timestamp ${String(timestamp)} — rendering empty string`,
|
|
46
47
|
)
|
|
@@ -26,7 +26,9 @@ import { motion } from 'motion/react'
|
|
|
26
26
|
import type { JSX } from 'react'
|
|
27
27
|
import type { AgentPart, AgentThread, StreamStatus } from '../agent'
|
|
28
28
|
import { BasaltStickToBottom } from '../agent'
|
|
29
|
-
import {
|
|
29
|
+
import { cx } from '../common/props'
|
|
30
|
+
import type { BasaltProps } from '../common/props'
|
|
31
|
+
import { MOTION_SPRING } from '../common/motion'
|
|
30
32
|
import { Composer } from './composer'
|
|
31
33
|
import { ThreadTranscript } from './thread-message'
|
|
32
34
|
import { VX } from '../tokens'
|
|
@@ -45,9 +47,9 @@ function CloseGlyph(): JSX.Element {
|
|
|
45
47
|
)
|
|
46
48
|
}
|
|
47
49
|
|
|
48
|
-
function EmptyPanel(): JSX.Element {
|
|
50
|
+
function EmptyPanel({ className, style }: BasaltProps): JSX.Element {
|
|
49
51
|
return (
|
|
50
|
-
<Box p="xl" style={{ height: '100%' }}>
|
|
52
|
+
<Box p="xl" className={cx(className)} style={{ height: '100%', ...style }}>
|
|
51
53
|
<Stack align="center" justify="center" gap={4} h="100%">
|
|
52
54
|
<Text fw={550} style={{ fontFamily: 'var(--basalt-font-head)', fontStretch: '88%' }}>
|
|
53
55
|
No thread selected
|
|
@@ -73,7 +75,7 @@ function threadLabel(thread: AgentThread): string {
|
|
|
73
75
|
return text.length > 0 ? text : 'Untitled'
|
|
74
76
|
}
|
|
75
77
|
|
|
76
|
-
export type ThreadDetailPanelProps = {
|
|
78
|
+
export type ThreadDetailPanelProps = BasaltProps & {
|
|
77
79
|
/** The open thread, or null when nothing is selected (renders an empty-state hint). */
|
|
78
80
|
readonly thread: AgentThread | null
|
|
79
81
|
/** The live (in-flight) assistant turn's parts for this thread, if a run is streaming. */
|
|
@@ -105,15 +107,17 @@ export function ThreadDetailPanel({
|
|
|
105
107
|
onStop,
|
|
106
108
|
onClose,
|
|
107
109
|
onRetry,
|
|
110
|
+
className,
|
|
111
|
+
style,
|
|
108
112
|
}: ThreadDetailPanelProps): JSX.Element {
|
|
109
113
|
const reduceMotion = useReducedMotion()
|
|
110
114
|
|
|
111
|
-
if (thread === null) return <EmptyPanel />
|
|
115
|
+
if (thread === null) return <EmptyPanel className={className} style={style} />
|
|
112
116
|
|
|
113
117
|
const streaming = runStatus === 'streaming'
|
|
114
118
|
|
|
115
119
|
const panel = (
|
|
116
|
-
<Flex direction="column" h="100%">
|
|
120
|
+
<Flex direction="column" h="100%" className={cx(className)} style={style}>
|
|
117
121
|
<Flex p="sm" align="center" justify="space-between">
|
|
118
122
|
<Text
|
|
119
123
|
fw={550}
|
|
@@ -33,24 +33,29 @@
|
|
|
33
33
|
* />
|
|
34
34
|
*/
|
|
35
35
|
import { Box, Group, Stack, Text, UnstyledButton } from '@mantine/core'
|
|
36
|
-
import type { JSX } from 'react'
|
|
36
|
+
import type { JSX, ReactNode } from 'react'
|
|
37
37
|
import { useState } from 'react'
|
|
38
38
|
import type {
|
|
39
39
|
AgentThread,
|
|
40
|
+
ChatMessage,
|
|
40
41
|
ForeignPart,
|
|
41
42
|
PartRenderer,
|
|
42
43
|
PartRenderers,
|
|
43
44
|
StreamStatus,
|
|
44
45
|
TranscriptPart,
|
|
45
46
|
} from '../agent'
|
|
47
|
+
import { BasaltStickToBottom } from '../agent'
|
|
48
|
+
import { cx } from '../common/props'
|
|
49
|
+
import type { BasaltProps, SlotStylesProps } from '../common/props'
|
|
50
|
+
import { assertRequiredProps } from '../common/validate'
|
|
46
51
|
import { VX } from '../tokens'
|
|
47
52
|
import type { ComposerProps, ComposerSubmit } from './composer'
|
|
48
53
|
import { Composer } from './composer'
|
|
49
54
|
import type { MessageAffordances } from './message-affordances'
|
|
50
55
|
import { formatRelativeTime } from './relative-time'
|
|
51
56
|
import { ThreadTranscript } from './thread-message'
|
|
52
|
-
import {
|
|
53
|
-
import type { VirtualizeProps } from './virtualize'
|
|
57
|
+
import { resolveRowHeight } from './virtualize'
|
|
58
|
+
import type { RowHeightProps, VirtualizeProps } from './virtualize'
|
|
54
59
|
|
|
55
60
|
/** A minimal, dependency-free chevron — rotates 90deg when expanded (same inline-svg idiom as
|
|
56
61
|
* `composer.tsx`'s `SendGlyph`/`StopGlyph`: no icon-library dependency for a one-off glyph). */
|
|
@@ -79,6 +84,15 @@ function ChevronGlyph({ expanded }: { expanded: boolean }): JSX.Element {
|
|
|
79
84
|
)
|
|
80
85
|
}
|
|
81
86
|
|
|
87
|
+
// Card idiom (docs/DESIGN-SPEC.md §5) — static across every row, so it stays a module-level
|
|
88
|
+
// constant rather than a per-render literal, letting the no-override case keep a stable reference.
|
|
89
|
+
const CARD_STYLE = {
|
|
90
|
+
borderRadius: VX.radiusCard,
|
|
91
|
+
boxShadow: VX.shadowCard,
|
|
92
|
+
backgroundColor: VX.surface.panel,
|
|
93
|
+
overflow: 'hidden',
|
|
94
|
+
} as const
|
|
95
|
+
|
|
82
96
|
type ThreadFeedRowBase = {
|
|
83
97
|
/**
|
|
84
98
|
* The thread this row projects. Typed against `AgentThread<TranscriptPart>` — not the plain,
|
|
@@ -94,6 +108,30 @@ type ThreadFeedRowBase = {
|
|
|
94
108
|
readonly expanded: boolean
|
|
95
109
|
/** Called with the thread's id when the header is clicked/activated. */
|
|
96
110
|
readonly onToggle: (id: string) => void
|
|
111
|
+
/**
|
|
112
|
+
* Header title override. Falls back to `thread.outcome?.title ?? 'Untitled thread'` (today's
|
|
113
|
+
* behavior, unchanged) when omitted. For a server-titled thread whose title is never distilled
|
|
114
|
+
* into a basalt `AgentOutcome` (argo's hermes-chat S4 — title/summary/type/pin are server-owned
|
|
115
|
+
* and never guessed client-side), pass it directly instead of forcing an outcome shape onto data
|
|
116
|
+
* that never had one.
|
|
117
|
+
*/
|
|
118
|
+
readonly title?: string
|
|
119
|
+
/** Header summary override, same fallback rule as `title` (`thread.outcome?.summary ?? ''`). */
|
|
120
|
+
readonly summary?: string
|
|
121
|
+
/** Rendered at the START of the header row, before the title/summary stack — a pin icon, a type
|
|
122
|
+
* badge (argo's hermes-chat S5). Absent by default; renders nothing extra when omitted. */
|
|
123
|
+
readonly headerLeft?: ReactNode
|
|
124
|
+
/** Rendered at the END of the header row, before the timestamp and chevron — a collapsed-only
|
|
125
|
+
* streaming indicator (argo's hermes-chat S5). Absent by default; renders nothing extra when
|
|
126
|
+
* omitted. */
|
|
127
|
+
readonly headerRight?: ReactNode
|
|
128
|
+
/**
|
|
129
|
+
* Overrides the transcript source: when provided, the row renders THESE messages instead of
|
|
130
|
+
* reading `thread.messages` directly (argo's hermes-chat S6 — the confirmed transcript is an
|
|
131
|
+
* optimistic-overlay MERGE over the store's messages, not the store's messages verbatim).
|
|
132
|
+
* Defaults to `thread.messages`.
|
|
133
|
+
*/
|
|
134
|
+
readonly messages?: readonly ChatMessage<TranscriptPart>[]
|
|
97
135
|
/** The live (in-flight) assistant turn's parts, when a run is streaming for this thread. */
|
|
98
136
|
readonly liveParts?: readonly TranscriptPart[]
|
|
99
137
|
/** The live run's status — drives the in-progress indicator on the live block. */
|
|
@@ -125,16 +163,29 @@ type ThreadFeedRowBase = {
|
|
|
125
163
|
* `virtualize`/`height` are forwarded straight to the row's `ThreadTranscript`, carrying the same
|
|
126
164
|
* union guard: an inline row holding a very long thread can window it, and doing so REQUIRES a
|
|
127
165
|
* `height` (the transcript then owns a fixed-height scroll node inside the expanded body, instead
|
|
128
|
-
* of the body growing to the thread's full length).
|
|
129
|
-
*
|
|
166
|
+
* of the body growing to the thread's full length). `height` alone (no `virtualize`) is B3's
|
|
167
|
+
* bounded-but-not-virtualized mode — see `RowHeightProps`'s own doc. Omit both and the row's
|
|
168
|
+
* transcript is content-sized, as before.
|
|
130
169
|
*/
|
|
131
|
-
export type ThreadFeedRowProps = ThreadFeedRowBase &
|
|
170
|
+
export type ThreadFeedRowProps = ThreadFeedRowBase &
|
|
171
|
+
RowHeightProps &
|
|
172
|
+
SlotStylesProps<'root' | 'header' | 'body'> &
|
|
173
|
+
BasaltProps
|
|
174
|
+
|
|
175
|
+
/** The row header's title: the `title` prop override, else the resolved outcome title, else a
|
|
176
|
+
* plain placeholder — this row never falls back to scanning the first user message the way
|
|
177
|
+
* `ThreadOutcomeCard`'s `promptOf` does, since an inline row's own expanded transcript already
|
|
178
|
+
* shows that prompt a scroll away. */
|
|
179
|
+
function rowTitle(thread: AgentThread<TranscriptPart>, titleOverride: string | undefined): string {
|
|
180
|
+
return titleOverride ?? thread.outcome?.title ?? 'Untitled thread'
|
|
181
|
+
}
|
|
132
182
|
|
|
133
|
-
/** The row header's
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
183
|
+
/** The row header's summary: the `summary` prop override, else the resolved outcome summary. */
|
|
184
|
+
function rowSummary(
|
|
185
|
+
thread: AgentThread<TranscriptPart>,
|
|
186
|
+
summaryOverride: string | undefined,
|
|
187
|
+
): string {
|
|
188
|
+
return summaryOverride ?? thread.outcome?.summary ?? ''
|
|
138
189
|
}
|
|
139
190
|
|
|
140
191
|
/**
|
|
@@ -150,6 +201,11 @@ export function ThreadFeedRow(props: ThreadFeedRowProps): JSX.Element {
|
|
|
150
201
|
thread,
|
|
151
202
|
expanded,
|
|
152
203
|
onToggle,
|
|
204
|
+
title,
|
|
205
|
+
summary: summaryOverride,
|
|
206
|
+
headerLeft,
|
|
207
|
+
headerRight,
|
|
208
|
+
messages,
|
|
153
209
|
liveParts,
|
|
154
210
|
liveStatus,
|
|
155
211
|
renderers,
|
|
@@ -159,13 +215,21 @@ export function ThreadFeedRow(props: ThreadFeedRowProps): JSX.Element {
|
|
|
159
215
|
onSend,
|
|
160
216
|
onStop,
|
|
161
217
|
composerProps,
|
|
218
|
+
classNames,
|
|
219
|
+
className,
|
|
220
|
+
style,
|
|
162
221
|
} = props
|
|
222
|
+
assertRequiredProps('ThreadFeedRow', { thread }, ['thread'])
|
|
163
223
|
|
|
164
224
|
// Resolved through the shared narrowing point rather than by destructuring `virtualize`/`height`
|
|
165
|
-
// apart — see `
|
|
166
|
-
|
|
225
|
+
// apart — see `resolveRowHeight`'s doc for why the two must be read together, and why it is a
|
|
226
|
+
// three-way (virtualized / bounded / content-sized) resolve rather than `resolveVirtualize`'s
|
|
227
|
+
// binary one (B3 adds the 'bounded' branch).
|
|
228
|
+
const rowHeight = resolveRowHeight(props)
|
|
167
229
|
const virtualizeProps: VirtualizeProps =
|
|
168
|
-
|
|
230
|
+
rowHeight.kind === 'virtualized'
|
|
231
|
+
? { virtualize: rowHeight.virtualize.options, height: rowHeight.virtualize.height }
|
|
232
|
+
: {}
|
|
169
233
|
|
|
170
234
|
// Lazy-mount + keep-mounted: flips true on the row's first expand and never resets. Everything
|
|
171
235
|
// below this line renders — once — the first time `expanded` becomes true, and stays in the tree
|
|
@@ -182,7 +246,9 @@ export function ThreadFeedRow(props: ThreadFeedRowProps): JSX.Element {
|
|
|
182
246
|
setHasOpened(true)
|
|
183
247
|
}
|
|
184
248
|
|
|
185
|
-
const
|
|
249
|
+
const resolvedTitle = rowTitle(thread, title)
|
|
250
|
+
const resolvedSummary = rowSummary(thread, summaryOverride)
|
|
251
|
+
const transcriptMessages = messages ?? thread.messages
|
|
186
252
|
|
|
187
253
|
// The composer half of `liveStatus`: `Composer` only shows its Stop action and gates the
|
|
188
254
|
// textarea when it is TOLD a run is streaming (`composer.tsx`'s `showStop`/`inputDisabled`) — it
|
|
@@ -190,25 +256,37 @@ export function ThreadFeedRow(props: ThreadFeedRowProps): JSX.Element {
|
|
|
190
256
|
// Stop never rendered and a second turn could still be typed into a live thread.
|
|
191
257
|
const streaming = liveStatus === 'streaming'
|
|
192
258
|
|
|
259
|
+
const transcript = (
|
|
260
|
+
<ThreadTranscript
|
|
261
|
+
messages={transcriptMessages}
|
|
262
|
+
{...(liveParts !== undefined ? { liveParts } : {})}
|
|
263
|
+
{...(liveStatus !== undefined ? { liveStatus } : {})}
|
|
264
|
+
{...(renderers !== undefined ? { renderers } : {})}
|
|
265
|
+
{...(fallbackRenderer !== undefined ? { fallbackRenderer } : {})}
|
|
266
|
+
{...(affordances !== undefined ? { affordances } : {})}
|
|
267
|
+
{...(groupConsecutive !== undefined ? { groupConsecutive } : {})}
|
|
268
|
+
{...virtualizeProps}
|
|
269
|
+
/>
|
|
270
|
+
)
|
|
271
|
+
|
|
193
272
|
return (
|
|
194
273
|
<Box
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
backgroundColor: VX.surface.panel,
|
|
199
|
-
overflow: 'hidden',
|
|
200
|
-
}}
|
|
274
|
+
className={cx(classNames?.root, className)}
|
|
275
|
+
style={style ? { ...CARD_STYLE, ...style } : CARD_STYLE}
|
|
276
|
+
data-expanded={expanded}
|
|
201
277
|
>
|
|
202
278
|
<UnstyledButton
|
|
203
279
|
onClick={() => onToggle(thread.id)}
|
|
204
280
|
w="100%"
|
|
205
281
|
aria-expanded={expanded}
|
|
282
|
+
{...(classNames?.header !== undefined && { className: classNames.header })}
|
|
206
283
|
style={{
|
|
207
284
|
display: 'block',
|
|
208
285
|
padding: 'var(--mantine-spacing-xs) var(--mantine-spacing-sm)',
|
|
209
286
|
}}
|
|
210
287
|
>
|
|
211
288
|
<Group justify="space-between" gap="xs" wrap="nowrap" align="center">
|
|
289
|
+
{headerLeft}
|
|
212
290
|
<Stack gap={2} style={{ flex: 1, minWidth: 0 }}>
|
|
213
291
|
<Text
|
|
214
292
|
fw={550}
|
|
@@ -219,14 +297,15 @@ export function ThreadFeedRow(props: ThreadFeedRowProps): JSX.Element {
|
|
|
219
297
|
fontStretch: '88%',
|
|
220
298
|
}}
|
|
221
299
|
>
|
|
222
|
-
{
|
|
300
|
+
{resolvedTitle}
|
|
223
301
|
</Text>
|
|
224
|
-
{
|
|
302
|
+
{resolvedSummary.length > 0 && (
|
|
225
303
|
<Text size="xs" c="dimmed" lineClamp={1}>
|
|
226
|
-
{
|
|
304
|
+
{resolvedSummary}
|
|
227
305
|
</Text>
|
|
228
306
|
)}
|
|
229
307
|
</Stack>
|
|
308
|
+
{headerRight}
|
|
230
309
|
<Text
|
|
231
310
|
style={{
|
|
232
311
|
fontFamily: 'var(--basalt-font-mono)',
|
|
@@ -243,6 +322,7 @@ export function ThreadFeedRow(props: ThreadFeedRowProps): JSX.Element {
|
|
|
243
322
|
{hasOpened && (
|
|
244
323
|
<Box
|
|
245
324
|
data-testid="thread-feed-row-body"
|
|
325
|
+
{...(classNames?.body !== undefined && { className: classNames.body })}
|
|
246
326
|
style={{
|
|
247
327
|
display: expanded ? 'block' : 'none',
|
|
248
328
|
padding: 'var(--mantine-spacing-sm)',
|
|
@@ -250,16 +330,19 @@ export function ThreadFeedRow(props: ThreadFeedRowProps): JSX.Element {
|
|
|
250
330
|
}}
|
|
251
331
|
>
|
|
252
332
|
<Stack gap="sm">
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
333
|
+
{rowHeight.kind === 'bounded' ? (
|
|
334
|
+
<BasaltStickToBottom
|
|
335
|
+
style={{
|
|
336
|
+
height: rowHeight.height,
|
|
337
|
+
// theme-allow raw-scroll-container — BasaltStickToBottom owns this scroll node (see stick-to-bottom.tsx).
|
|
338
|
+
overflowY: 'auto',
|
|
339
|
+
}}
|
|
340
|
+
>
|
|
341
|
+
{transcript}
|
|
342
|
+
</BasaltStickToBottom>
|
|
343
|
+
) : (
|
|
344
|
+
transcript
|
|
345
|
+
)}
|
|
263
346
|
<Composer
|
|
264
347
|
onSubmit={onSend}
|
|
265
348
|
streaming={streaming}
|
|
@@ -23,7 +23,11 @@ import { AnimatePresence, motion } from 'motion/react'
|
|
|
23
23
|
import type { JSX, ReactNode } from 'react'
|
|
24
24
|
import { useEffect, useState } from 'react'
|
|
25
25
|
import type { AgentThread } from '../agent'
|
|
26
|
-
import {
|
|
26
|
+
import { BasaltStickToBottom } from '../agent'
|
|
27
|
+
import { cx } from '../common/props'
|
|
28
|
+
import type { BasaltProps } from '../common/props'
|
|
29
|
+
import { assertRequiredProps } from '../common/validate'
|
|
30
|
+
import { MOTION_SPRING } from '../common/motion'
|
|
27
31
|
import type { ComposerSubmit } from './composer'
|
|
28
32
|
import { ThreadFeedRow } from './thread-feed-row'
|
|
29
33
|
import { ThreadOutcomeCard } from './thread-outcome-card'
|
|
@@ -33,7 +37,7 @@ import { ThreadOutcomeCard } from './thread-outcome-card'
|
|
|
33
37
|
* `onSend`'s doc for why an inert composer beats a live one that eats input. */
|
|
34
38
|
function noopSend(): void {}
|
|
35
39
|
|
|
36
|
-
export type ThreadFeedProps = {
|
|
40
|
+
export type ThreadFeedProps = BasaltProps & {
|
|
37
41
|
readonly threads: AgentThread[]
|
|
38
42
|
/** The currently open thread id, or null when none is selected. */
|
|
39
43
|
readonly activeId: string | null
|
|
@@ -66,6 +70,16 @@ export type ThreadFeedProps = {
|
|
|
66
70
|
* (`onStop`/`liveParts`/`liveStatus`) the built-in `'inline'` row doesn't expose; see `variant`
|
|
67
71
|
* and `onSend`. */
|
|
68
72
|
readonly renderRow?: (thread: AgentThread) => ReactNode
|
|
73
|
+
/**
|
|
74
|
+
* Scroll anchor. `'start'` (default) is today's top-anchored `ScrollArea` feed, unchanged.
|
|
75
|
+
* `'end'` anchors the feed's growth to the BOTTOM instead — a `BasaltStickToBottom` scroll node
|
|
76
|
+
* (auto-follows the live turn, same container `ThreadDetailPanel` uses) rather than `ScrollArea`,
|
|
77
|
+
* with the row stack `justify`-ed to the end and grown to the full height so a short feed still
|
|
78
|
+
* sits at the bottom rather than floating at the top. This is what a bottom-anchored chat feed
|
|
79
|
+
* (argo's hermes-chat S15 — oldest→newest top→bottom, pinned last, `renderRow`-driven) needs
|
|
80
|
+
* instead of hand-rolling its own scroll shell around `renderRow`.
|
|
81
|
+
*/
|
|
82
|
+
readonly anchor?: 'start' | 'end'
|
|
69
83
|
}
|
|
70
84
|
|
|
71
85
|
function defaultRow(
|
|
@@ -113,7 +127,11 @@ export function ThreadFeed({
|
|
|
113
127
|
variant = 'outcome',
|
|
114
128
|
onSend,
|
|
115
129
|
renderRow,
|
|
130
|
+
anchor = 'start',
|
|
131
|
+
className,
|
|
132
|
+
style,
|
|
116
133
|
}: ThreadFeedProps): JSX.Element {
|
|
134
|
+
assertRequiredProps('ThreadFeed', { threads }, ['threads'])
|
|
117
135
|
const reduceMotion = useReducedMotion()
|
|
118
136
|
|
|
119
137
|
// The inline row's own manual-collapse override — see `ThreadFeedProps.variant`'s doc. Only ever
|
|
@@ -147,36 +165,50 @@ export function ThreadFeed({
|
|
|
147
165
|
? renderRow(thread)
|
|
148
166
|
: defaultRow(thread, variant, activeId, collapsedId, handleInlineToggle, onSelect, onSend)
|
|
149
167
|
|
|
150
|
-
|
|
168
|
+
// B5: `anchor="end"` grows the stack to the full scroll height and pins its content to the
|
|
169
|
+
// bottom, so a feed with only a couple of threads still sits flush against the composer instead
|
|
170
|
+
// of floating at the top of an otherwise-empty ScrollArea.
|
|
171
|
+
const stackAnchorProps = anchor === 'end' ? { justify: 'flex-end' as const, mih: '100%' } : {}
|
|
172
|
+
|
|
173
|
+
const list = reduceMotion ? (
|
|
174
|
+
<Stack gap="sm" p="sm" {...stackAnchorProps}>
|
|
175
|
+
{threads.map((thread) => (
|
|
176
|
+
<Box key={thread.id}>{rowFor(thread)}</Box>
|
|
177
|
+
))}
|
|
178
|
+
</Stack>
|
|
179
|
+
) : (
|
|
180
|
+
<Stack gap="sm" p="sm" {...stackAnchorProps}>
|
|
181
|
+
<AnimatePresence mode="popLayout" initial={false}>
|
|
182
|
+
{threads.map((thread) => (
|
|
183
|
+
<motion.div
|
|
184
|
+
key={thread.id}
|
|
185
|
+
layout
|
|
186
|
+
initial={{ opacity: 0, y: -8 }}
|
|
187
|
+
animate={{ opacity: 1, y: 0 }}
|
|
188
|
+
exit={{ opacity: 0, scale: 0.97 }}
|
|
189
|
+
transition={MOTION_SPRING}
|
|
190
|
+
>
|
|
191
|
+
{rowFor(thread)}
|
|
192
|
+
</motion.div>
|
|
193
|
+
))}
|
|
194
|
+
</AnimatePresence>
|
|
195
|
+
</Stack>
|
|
196
|
+
)
|
|
197
|
+
|
|
198
|
+
// `anchor="end"`: a `BasaltStickToBottom` scroll node instead of `ScrollArea` — it owns an
|
|
199
|
+
// initial scroll-to-end on mount and auto-follows appended content (the live turn), which a
|
|
200
|
+
// plain `ScrollArea` has no notion of.
|
|
201
|
+
if (anchor === 'end') {
|
|
151
202
|
return (
|
|
152
|
-
<
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
<Box key={thread.id}>{rowFor(thread)}</Box>
|
|
156
|
-
))}
|
|
157
|
-
</Stack>
|
|
158
|
-
</ScrollArea>
|
|
203
|
+
<BasaltStickToBottom className={cx(className)} style={{ height: '100%', ...style }}>
|
|
204
|
+
{list}
|
|
205
|
+
</BasaltStickToBottom>
|
|
159
206
|
)
|
|
160
207
|
}
|
|
161
208
|
|
|
162
209
|
return (
|
|
163
|
-
<ScrollArea style={{ height: '100%' }}>
|
|
164
|
-
|
|
165
|
-
<AnimatePresence mode="popLayout" initial={false}>
|
|
166
|
-
{threads.map((thread) => (
|
|
167
|
-
<motion.div
|
|
168
|
-
key={thread.id}
|
|
169
|
-
layout
|
|
170
|
-
initial={{ opacity: 0, y: -8 }}
|
|
171
|
-
animate={{ opacity: 1, y: 0 }}
|
|
172
|
-
exit={{ opacity: 0, scale: 0.97 }}
|
|
173
|
-
transition={MOTION_SPRING}
|
|
174
|
-
>
|
|
175
|
-
{rowFor(thread)}
|
|
176
|
-
</motion.div>
|
|
177
|
-
))}
|
|
178
|
-
</AnimatePresence>
|
|
179
|
-
</Stack>
|
|
210
|
+
<ScrollArea className={cx(className)} style={{ height: '100%', ...style }}>
|
|
211
|
+
{list}
|
|
180
212
|
</ScrollArea>
|
|
181
213
|
)
|
|
182
214
|
}
|
|
@@ -48,6 +48,9 @@ import type {
|
|
|
48
48
|
TranscriptPart,
|
|
49
49
|
} from '../agent'
|
|
50
50
|
import { coalesceParts, narrowAgentPart, PartList } from '../agent'
|
|
51
|
+
import { cx } from '../common/props'
|
|
52
|
+
import type { BasaltProps } from '../common/props'
|
|
53
|
+
import { assertRequiredProps } from '../common/validate'
|
|
51
54
|
import { Markdown } from '../content/markdown'
|
|
52
55
|
import { CopyAction } from '../content/copy-action'
|
|
53
56
|
import { VX } from '../tokens'
|
|
@@ -57,6 +60,7 @@ import { formatRelativeTime } from './relative-time'
|
|
|
57
60
|
import { ToolChip } from './tool-chip'
|
|
58
61
|
import { resolveVirtualize } from './virtualize'
|
|
59
62
|
import type { VirtualizeOptions, VirtualizeProps } from './virtualize'
|
|
63
|
+
import { isDev } from '../common/is-dev'
|
|
60
64
|
|
|
61
65
|
/** The mono, uppercase, letter-spaced micro-label idiom (docs/DESIGN-SPEC.md §3) — shared by the
|
|
62
66
|
* transcript's role labels and the reasoning/tool-call headers below. */
|
|
@@ -185,10 +189,11 @@ function UnknownPartChip({ part }: { part: ForeignPart }): JSX.Element {
|
|
|
185
189
|
)
|
|
186
190
|
}
|
|
187
191
|
|
|
188
|
-
/** Consulted only when `ThreadTranscript` gets no `fallbackRenderer` prop. `
|
|
189
|
-
* (not `import.meta.env` — basalt-ui bans it)
|
|
192
|
+
/** Consulted only when `ThreadTranscript` gets no `fallbackRenderer` prop. `isDev()` reads
|
|
193
|
+
* `process.env.NODE_ENV` (not `import.meta.env` — basalt-ui bans it) INSIDE the render so tests can
|
|
194
|
+
* flip it. */
|
|
190
195
|
const DEFAULT_FALLBACK_RENDERER: PartRenderer<ForeignPart> = ({ part }) =>
|
|
191
|
-
|
|
196
|
+
isDev() ? <UnknownPartChip part={part} /> : null
|
|
192
197
|
|
|
193
198
|
// ── Part resolution — the three-step order that is the whole design ───────────
|
|
194
199
|
//
|
|
@@ -544,6 +549,7 @@ function areMessageBlockPropsEqual(prev: MessageBlockProps, next: MessageBlockPr
|
|
|
544
549
|
}
|
|
545
550
|
|
|
546
551
|
const MessageBlock = memo(MessageBlockImpl, areMessageBlockPropsEqual)
|
|
552
|
+
MessageBlock.displayName = 'MessageBlock'
|
|
547
553
|
|
|
548
554
|
// ── Virtualization (AGENT-CHAT-SPEC.md §9) ─────────────────────────────────────
|
|
549
555
|
//
|
|
@@ -594,7 +600,7 @@ type TranscriptRow = {
|
|
|
594
600
|
readonly node: JSX.Element
|
|
595
601
|
}
|
|
596
602
|
|
|
597
|
-
type VirtualizedTranscriptProps = {
|
|
603
|
+
type VirtualizedTranscriptProps = BasaltProps & {
|
|
598
604
|
readonly rows: readonly TranscriptRow[]
|
|
599
605
|
readonly height: number | string
|
|
600
606
|
readonly overscan: number
|
|
@@ -613,10 +619,15 @@ type VirtualizedTranscriptProps = {
|
|
|
613
619
|
* settle a genuine unmount/remount of every rendered row, re-firing each row's effects once and
|
|
614
620
|
* risking hitting a message mid-stream during the resolve window.
|
|
615
621
|
*/
|
|
616
|
-
function NonVirtualizedRows({
|
|
622
|
+
function NonVirtualizedRows({
|
|
623
|
+
rows,
|
|
624
|
+
height,
|
|
625
|
+
className,
|
|
626
|
+
style,
|
|
627
|
+
}: VirtualizedTranscriptProps): JSX.Element {
|
|
617
628
|
return (
|
|
618
629
|
// theme-allow raw-scroll-container — degrade target owns its own scroll node, same as the real virtualizer below.
|
|
619
|
-
<Box style={{ height, overflow: 'auto' }}>
|
|
630
|
+
<Box className={cx(className)} style={{ height, overflow: 'auto', ...style }}>
|
|
620
631
|
<Stack gap="sm">
|
|
621
632
|
{rows.map((row) => (
|
|
622
633
|
<Fragment key={row.key}>{row.node}</Fragment>
|
|
@@ -834,6 +845,8 @@ const LazyVirtualizedRows = lazy(() =>
|
|
|
834
845
|
overscan,
|
|
835
846
|
estimateSize,
|
|
836
847
|
initialScroll,
|
|
848
|
+
className,
|
|
849
|
+
style,
|
|
837
850
|
}: VirtualizedTranscriptProps): JSX.Element {
|
|
838
851
|
const parentRef = useRef<HTMLDivElement>(null)
|
|
839
852
|
const initialScrollStateRef = useRef<InitialScrollState>({
|
|
@@ -895,8 +908,12 @@ const LazyVirtualizedRows = lazy(() =>
|
|
|
895
908
|
})
|
|
896
909
|
|
|
897
910
|
return (
|
|
898
|
-
|
|
899
|
-
|
|
911
|
+
<Box
|
|
912
|
+
ref={parentRef}
|
|
913
|
+
className={cx(className)}
|
|
914
|
+
// theme-allow raw-scroll-container — TanStack Virtual measures/scrolls this element (never nest in BasaltStickToBottom, see ./virtualize).
|
|
915
|
+
style={{ height, overflow: 'auto', ...style }}
|
|
916
|
+
>
|
|
900
917
|
<Box style={{ height: virtualizer.getTotalSize(), position: 'relative' }}>
|
|
901
918
|
{virtualizer.getVirtualItems().map((virtualItem) => {
|
|
902
919
|
const row = rows[virtualItem.index]
|
|
@@ -929,6 +946,7 @@ const LazyVirtualizedRows = lazy(() =>
|
|
|
929
946
|
})
|
|
930
947
|
.catch(() => ({ default: NonVirtualizedRows })),
|
|
931
948
|
)
|
|
949
|
+
Object.assign(LazyVirtualizedRows, { displayName: 'LazyVirtualizedRows' })
|
|
932
950
|
|
|
933
951
|
/**
|
|
934
952
|
* Lightweight `Suspense` fallback for `VirtualizedTranscript` — shown only for the one tick the
|
|
@@ -937,14 +955,26 @@ const LazyVirtualizedRows = lazy(() =>
|
|
|
937
955
|
* unmount/remount of the whole transcript. An empty, correctly-sized scroll pane avoids a layout
|
|
938
956
|
* flash without paying that cost — it settles state before any row has meaningfully mounted.
|
|
939
957
|
*/
|
|
940
|
-
function VirtualizeSuspenseFallback({
|
|
958
|
+
function VirtualizeSuspenseFallback({
|
|
959
|
+
height,
|
|
960
|
+
className,
|
|
961
|
+
style,
|
|
962
|
+
}: BasaltProps & { readonly height: number | string }): JSX.Element {
|
|
941
963
|
// theme-allow raw-scroll-container — placeholder owns its own scroll node, matching the real virtualizer's shape.
|
|
942
|
-
return <Box style={{ height, overflow: 'auto' }} />
|
|
964
|
+
return <Box className={cx(className)} style={{ height, overflow: 'auto', ...style }} />
|
|
943
965
|
}
|
|
944
966
|
|
|
945
967
|
function VirtualizedTranscript(props: VirtualizedTranscriptProps): JSX.Element {
|
|
946
968
|
return (
|
|
947
|
-
<Suspense
|
|
969
|
+
<Suspense
|
|
970
|
+
fallback={
|
|
971
|
+
<VirtualizeSuspenseFallback
|
|
972
|
+
height={props.height}
|
|
973
|
+
{...(props.className !== undefined && { className: props.className })}
|
|
974
|
+
{...(props.style !== undefined && { style: props.style })}
|
|
975
|
+
/>
|
|
976
|
+
}
|
|
977
|
+
>
|
|
948
978
|
<LazyVirtualizedRows {...props} />
|
|
949
979
|
</Suspense>
|
|
950
980
|
)
|
|
@@ -954,7 +984,7 @@ function VirtualizedTranscript(props: VirtualizedTranscriptProps): JSX.Element {
|
|
|
954
984
|
|
|
955
985
|
const EMPTY_RENDERERS: PartRenderers = {}
|
|
956
986
|
|
|
957
|
-
type ThreadTranscriptBase = {
|
|
987
|
+
type ThreadTranscriptBase = BasaltProps & {
|
|
958
988
|
/** Settled messages for the thread, oldest first. */
|
|
959
989
|
readonly messages: readonly ChatMessage<TranscriptPart>[]
|
|
960
990
|
/** The live (in-flight) assistant turn's parts, when a run is streaming for this thread. */
|
|
@@ -1050,7 +1080,10 @@ export function ThreadTranscript(props: ThreadTranscriptProps): JSX.Element {
|
|
|
1050
1080
|
fallbackRenderer = DEFAULT_FALLBACK_RENDERER,
|
|
1051
1081
|
affordances: affordancesProp,
|
|
1052
1082
|
groupConsecutive = true,
|
|
1083
|
+
className,
|
|
1084
|
+
style,
|
|
1053
1085
|
} = props
|
|
1086
|
+
assertRequiredProps('ThreadTranscript', { messages }, ['messages'])
|
|
1054
1087
|
const virtualized = resolveVirtualize(props)
|
|
1055
1088
|
|
|
1056
1089
|
// Mirrors PartList's own `useMemo` (part-list.tsx:290) — avoids rebuilding the renderer
|
|
@@ -1166,12 +1199,14 @@ export function ThreadTranscript(props: ThreadTranscriptProps): JSX.Element {
|
|
|
1166
1199
|
overscan={virtualized.options.overscan ?? DEFAULT_VIRTUALIZE_OVERSCAN}
|
|
1167
1200
|
estimateSize={virtualized.options.estimateSize ?? DEFAULT_VIRTUALIZE_ESTIMATE_SIZE}
|
|
1168
1201
|
initialScroll={virtualized.options.initialScroll ?? DEFAULT_VIRTUALIZE_INITIAL_SCROLL}
|
|
1202
|
+
{...(className !== undefined && { className })}
|
|
1203
|
+
{...(style !== undefined && { style })}
|
|
1169
1204
|
/>
|
|
1170
1205
|
)
|
|
1171
1206
|
}
|
|
1172
1207
|
|
|
1173
1208
|
return (
|
|
1174
|
-
<Stack gap="sm">
|
|
1209
|
+
<Stack gap="sm" className={cx(className)} {...(style !== undefined && { style })}>
|
|
1175
1210
|
{rows.map((row) => (
|
|
1176
1211
|
<Fragment key={row.key}>{row.node}</Fragment>
|
|
1177
1212
|
))}
|
|
@@ -22,6 +22,9 @@ import { Badge, Group, Skeleton, Stack, Text, UnstyledButton } from '@mantine/co
|
|
|
22
22
|
import { useHover } from '@mantine/hooks'
|
|
23
23
|
import type { JSX } from 'react'
|
|
24
24
|
import type { AgentThread, ThreadStatus } from '../agent'
|
|
25
|
+
import { assertRequiredProps } from '../common/validate'
|
|
26
|
+
import { cx } from '../common/props'
|
|
27
|
+
import type { BasaltProps } from '../common/props'
|
|
25
28
|
import { alpha, VX } from '../tokens'
|
|
26
29
|
import { formatRelativeTime } from './relative-time'
|
|
27
30
|
|
|
@@ -118,7 +121,7 @@ function OutcomeBody({ thread }: { thread: AgentThread }): JSX.Element {
|
|
|
118
121
|
|
|
119
122
|
// ── ThreadOutcomeCard ─────────────────────────────────────────────────────────
|
|
120
123
|
|
|
121
|
-
export type ThreadOutcomeCardProps = {
|
|
124
|
+
export type ThreadOutcomeCardProps = BasaltProps & {
|
|
122
125
|
readonly thread: AgentThread
|
|
123
126
|
/** Whether this row is the active/open thread — applies a subtle highlight. */
|
|
124
127
|
readonly selected: boolean
|
|
@@ -138,7 +141,10 @@ export function ThreadOutcomeCard({
|
|
|
138
141
|
thread,
|
|
139
142
|
selected,
|
|
140
143
|
onSelect,
|
|
144
|
+
className,
|
|
145
|
+
style,
|
|
141
146
|
}: ThreadOutcomeCardProps): JSX.Element {
|
|
147
|
+
assertRequiredProps('ThreadOutcomeCard', { thread }, ['thread'])
|
|
142
148
|
const { hovered, ref } = useHover<HTMLButtonElement>()
|
|
143
149
|
const isPreviewing =
|
|
144
150
|
thread.outcome === null && (thread.status === 'pending' || thread.status === 'streaming')
|
|
@@ -157,6 +163,7 @@ export function ThreadOutcomeCard({
|
|
|
157
163
|
ref={ref}
|
|
158
164
|
onClick={onSelect}
|
|
159
165
|
w="100%"
|
|
166
|
+
className={cx(className)}
|
|
160
167
|
style={{
|
|
161
168
|
display: 'block',
|
|
162
169
|
padding: 'var(--mantine-spacing-xs) var(--mantine-spacing-sm)',
|
|
@@ -164,6 +171,7 @@ export function ThreadOutcomeCard({
|
|
|
164
171
|
boxShadow: VX.shadowCard,
|
|
165
172
|
backgroundColor: background,
|
|
166
173
|
transition: 'background-color 120ms ease',
|
|
174
|
+
...style,
|
|
167
175
|
}}
|
|
168
176
|
>
|
|
169
177
|
{isPreviewing ? <OutcomeSkeleton /> : <OutcomeBody thread={thread} />}
|