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
|
@@ -18,7 +18,6 @@
|
|
|
18
18
|
* favor of this package.
|
|
19
19
|
*/
|
|
20
20
|
import {
|
|
21
|
-
ActionIcon,
|
|
22
21
|
Box,
|
|
23
22
|
Collapse,
|
|
24
23
|
Group,
|
|
@@ -34,8 +33,11 @@ import {
|
|
|
34
33
|
import { useDisclosure } from '@mantine/hooks'
|
|
35
34
|
import { useEffect, useRef } from 'react'
|
|
36
35
|
import type { ReactNode } from 'react'
|
|
36
|
+
import { cx } from '../common/props'
|
|
37
|
+
import type { BasaltProps } from '../common/props'
|
|
38
|
+
import { assertRequiredProps } from '../common/validate'
|
|
37
39
|
import type { BrandConfig, SettingsMenuItem } from './index'
|
|
38
|
-
import type { SidebarBlock, SidebarItem, SidebarSection } from '
|
|
40
|
+
import type { SidebarBlock, SidebarItem, SidebarSection } from './nav-types'
|
|
39
41
|
import { NavCountBadge } from './nav-count-badge'
|
|
40
42
|
import { SidebarAccount } from './app-sidebar-account'
|
|
41
43
|
import type { AccountMenuItem, BasaltAccountProps } from './account-types'
|
|
@@ -56,15 +58,20 @@ import { VX } from '../tokens'
|
|
|
56
58
|
import { useBasaltSpacing } from '../theme'
|
|
57
59
|
import classes from './app-sidebar.module.css'
|
|
58
60
|
|
|
59
|
-
export type AppSidebarProps = {
|
|
61
|
+
export type AppSidebarProps = BasaltProps & {
|
|
60
62
|
/**
|
|
61
|
-
* Brand identity. Supplying `menu` turns the brand
|
|
63
|
+
* Brand identity. Supplying `menu` turns the header's brand into a `Name ▾` workspace switcher —
|
|
62
64
|
* the entries are the existing `AccountMenuItem` shape, so a consumer already mapping account
|
|
63
65
|
* actions needs no second vocabulary.
|
|
64
66
|
*/
|
|
65
67
|
brand: BrandConfig & { menu?: AccountMenuItem[] }
|
|
66
68
|
sections: SidebarSection[]
|
|
67
69
|
collapsed: boolean
|
|
70
|
+
/**
|
|
71
|
+
* Consumed by the HEADER's brand zone (`app-brand.tsx`), not by this component — the collapse
|
|
72
|
+
* toggle moved up there with the brand. Still declared here because it is part of the sidebar's
|
|
73
|
+
* collapse contract and `BasaltShell` feeds both halves from one place.
|
|
74
|
+
*/
|
|
68
75
|
onToggleCollapse: () => void
|
|
69
76
|
/**
|
|
70
77
|
* Footer settings-menu entries (theme switcher, devtools, …) — supplied by the consumer.
|
|
@@ -123,8 +130,7 @@ export type AppSidebarProps = {
|
|
|
123
130
|
blocks?: SidebarBlock[]
|
|
124
131
|
}
|
|
125
132
|
|
|
126
|
-
|
|
127
|
-
function IconCollapse({ collapsed }: { collapsed: boolean }) {
|
|
133
|
+
function IconGear() {
|
|
128
134
|
return (
|
|
129
135
|
<svg
|
|
130
136
|
width={18}
|
|
@@ -137,28 +143,29 @@ function IconCollapse({ collapsed }: { collapsed: boolean }) {
|
|
|
137
143
|
strokeLinejoin="round"
|
|
138
144
|
aria-hidden
|
|
139
145
|
>
|
|
140
|
-
<path d="
|
|
141
|
-
<path d="M9
|
|
142
|
-
{collapsed ? <path d="M14 9l3 3l-3 3" /> : <path d="M16 9l-3 3l3 3" />}
|
|
146
|
+
<path d="M10.325 4.317c.426 -1.756 2.924 -1.756 3.35 0a1.724 1.724 0 0 0 2.573 1.066c1.543 -.94 3.31 .826 2.37 2.37a1.724 1.724 0 0 0 1.065 2.572c1.756 .426 1.756 2.924 0 3.35a1.724 1.724 0 0 0 -1.066 2.573c.94 1.543 -.826 3.31 -2.37 2.37a1.724 1.724 0 0 0 -2.572 1.065c-.426 1.756 -2.924 1.756 -3.35 0a1.724 1.724 0 0 0 -2.573 -1.066c-1.543 .94 -3.31 -.826 -2.37 -2.37a1.724 1.724 0 0 0 -1.065 -2.572c-1.756 -.426 -1.756 -2.924 0 -3.35a1.724 1.724 0 0 0 1.066 -2.573c-.94 -1.543 .826 -3.31 2.37 -2.37c1 .608 2.296 .07 2.572 -1.065z" />
|
|
147
|
+
<path d="M9 12a3 3 0 1 0 6 0a3 3 0 0 0 -6 0" />
|
|
143
148
|
</svg>
|
|
144
149
|
)
|
|
145
150
|
}
|
|
146
151
|
|
|
147
|
-
|
|
152
|
+
/** The `SettingsMenuItem.active` glyph — no icon package, so a plain inline mark like `IconGear`
|
|
153
|
+
* above. Shared shape with `app-mobile-nav.tsx`'s own copy (that module's More sheet is a
|
|
154
|
+
* different render tree and basalt ships no icon dependency to import between them). */
|
|
155
|
+
function IconCheck() {
|
|
148
156
|
return (
|
|
149
157
|
<svg
|
|
150
|
-
width={
|
|
151
|
-
height={
|
|
158
|
+
width={14}
|
|
159
|
+
height={14}
|
|
152
160
|
viewBox="0 0 24 24"
|
|
153
161
|
fill="none"
|
|
154
162
|
stroke="currentColor"
|
|
155
|
-
strokeWidth={2}
|
|
163
|
+
strokeWidth={2.5}
|
|
156
164
|
strokeLinecap="round"
|
|
157
165
|
strokeLinejoin="round"
|
|
158
166
|
aria-hidden
|
|
159
167
|
>
|
|
160
|
-
<path d="
|
|
161
|
-
<path d="M9 12a3 3 0 1 0 6 0a3 3 0 0 0 -6 0" />
|
|
168
|
+
<path d="M5 12l5 5l10 -10" />
|
|
162
169
|
</svg>
|
|
163
170
|
)
|
|
164
171
|
}
|
|
@@ -169,54 +176,6 @@ const HOVER_CLOSE_DELAY = 200
|
|
|
169
176
|
/** `settingsMenuItems` at or under this count render as flat rows — see the prop's JSDoc. */
|
|
170
177
|
const FLAT_SETTINGS_MAX = 3
|
|
171
178
|
|
|
172
|
-
/**
|
|
173
|
-
* The brand name, and — when `brand.menu` is supplied — the workspace switcher it becomes.
|
|
174
|
-
*
|
|
175
|
-
* The entries are `AccountMenuItem`s: the shell already had exactly this row shape (label, icon,
|
|
176
|
-
* onClick, danger) for the account menu, and a second vocabulary for the same dropdown would be
|
|
177
|
-
* two things to keep in step for no gain. The chevron is inline text, not an icon dependency.
|
|
178
|
-
*/
|
|
179
|
-
function BrandName({
|
|
180
|
-
brand,
|
|
181
|
-
menuWidth,
|
|
182
|
-
}: {
|
|
183
|
-
brand: BrandConfig & { menu?: AccountMenuItem[] }
|
|
184
|
-
menuWidth: number
|
|
185
|
-
}) {
|
|
186
|
-
const label = (
|
|
187
|
-
<Text className={classes.brandName} fz={VX.text.xl} fw={550}>
|
|
188
|
-
{brand.name}
|
|
189
|
-
</Text>
|
|
190
|
-
)
|
|
191
|
-
const menu = brand.menu
|
|
192
|
-
if (menu === undefined || menu.length === 0) return label
|
|
193
|
-
|
|
194
|
-
return (
|
|
195
|
-
<Menu position="bottom-start" withArrow width={menuWidth} zIndex={500}>
|
|
196
|
-
<Menu.Target>
|
|
197
|
-
<UnstyledButton className={classes.brandButton} aria-label={`${brand.name} workspace`}>
|
|
198
|
-
{label}
|
|
199
|
-
{/* `open` is the DOWN glyph — a switcher's affordance points at its dropdown, and this is
|
|
200
|
-
the same chevron every fold in the sidebar uses rather than a second one. */}
|
|
201
|
-
<IconChevron open />
|
|
202
|
-
</UnstyledButton>
|
|
203
|
-
</Menu.Target>
|
|
204
|
-
<Menu.Dropdown>
|
|
205
|
-
{menu.map((entry) => (
|
|
206
|
-
<Menu.Item
|
|
207
|
-
key={entry.key}
|
|
208
|
-
leftSection={entry.icon}
|
|
209
|
-
{...(entry.danger === true && { color: 'red' })}
|
|
210
|
-
onClick={entry.onClick}
|
|
211
|
-
>
|
|
212
|
-
{entry.label}
|
|
213
|
-
</Menu.Item>
|
|
214
|
-
))}
|
|
215
|
-
</Menu.Dropdown>
|
|
216
|
-
</Menu>
|
|
217
|
-
)
|
|
218
|
-
}
|
|
219
|
-
|
|
220
179
|
/** True when the item or any descendant is active — drives inline child expansion. */
|
|
221
180
|
function hasActiveDescendant(item: SidebarItem): boolean {
|
|
222
181
|
if (item.active) return true
|
|
@@ -469,17 +428,24 @@ function NavItemRow({ item, collapsed }: { item: SidebarItem; collapsed: boolean
|
|
|
469
428
|
)
|
|
470
429
|
}
|
|
471
430
|
|
|
472
|
-
export function AppSidebar({
|
|
473
|
-
brand
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
431
|
+
export function AppSidebar(props: AppSidebarProps) {
|
|
432
|
+
assertRequiredProps('AppSidebar', props, ['brand'])
|
|
433
|
+
const {
|
|
434
|
+
brand,
|
|
435
|
+
sections,
|
|
436
|
+
collapsed,
|
|
437
|
+
// `onToggleCollapse` is deliberately NOT read here any more — the toggle it drives moved into
|
|
438
|
+
// the header's leading zone with the brand (`app-brand.tsx`). The prop stays on
|
|
439
|
+
// `AppSidebarProps` because it is the shell's public seam for a consumer-owned collapse, and
|
|
440
|
+
// dropping it would break every call site for no gain.
|
|
441
|
+
settingsMenuItems,
|
|
442
|
+
settingsMenu = 'auto',
|
|
443
|
+
account,
|
|
444
|
+
search,
|
|
445
|
+
blocks,
|
|
446
|
+
className,
|
|
447
|
+
style,
|
|
448
|
+
} = props
|
|
483
449
|
// Density-tracking Menu dropdown width (`SPACE_STEP.sidebarSettingsMenuWidth`) — read the ACTIVE
|
|
484
450
|
// resolved level, not the frozen level-0 constant (see that constant's own doc in
|
|
485
451
|
// `tokens/palette.ts`).
|
|
@@ -520,6 +486,7 @@ export function AppSidebar({
|
|
|
520
486
|
className={classes.footerBtn}
|
|
521
487
|
onClick={entry.onClick}
|
|
522
488
|
aria-label={entry.label}
|
|
489
|
+
aria-current={entry.active ? 'true' : undefined}
|
|
523
490
|
>
|
|
524
491
|
{/* A FIXED slot, so rows align on one icon column whether or not each ships an icon —
|
|
525
492
|
and the gear fallback is functional, not decorative: in the collapsed rail the label
|
|
@@ -532,6 +499,7 @@ export function AppSidebar({
|
|
|
532
499
|
</Text>
|
|
533
500
|
{/* The rail ring rides the FIRST row only — one progress block is one mark. */}
|
|
534
501
|
{index === 0 ? ringMark : null}
|
|
502
|
+
{entry.active ? <IconCheck /> : null}
|
|
535
503
|
</UnstyledButton>
|
|
536
504
|
))}
|
|
537
505
|
{versionLabel !== undefined && (
|
|
@@ -554,7 +522,13 @@ export function AppSidebar({
|
|
|
554
522
|
</Menu.Target>
|
|
555
523
|
<Menu.Dropdown>
|
|
556
524
|
{settingsItems.map((entry) => (
|
|
557
|
-
<Menu.Item
|
|
525
|
+
<Menu.Item
|
|
526
|
+
key={entry.key}
|
|
527
|
+
leftSection={entry.icon}
|
|
528
|
+
rightSection={entry.active ? <IconCheck /> : undefined}
|
|
529
|
+
onClick={entry.onClick}
|
|
530
|
+
aria-current={entry.active ? 'true' : undefined}
|
|
531
|
+
>
|
|
558
532
|
{entry.label}
|
|
559
533
|
</Menu.Item>
|
|
560
534
|
))}
|
|
@@ -570,36 +544,18 @@ export function AppSidebar({
|
|
|
570
544
|
)
|
|
571
545
|
|
|
572
546
|
return (
|
|
573
|
-
<Stack
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
<BrandName brand={brand} menuWidth={step.sidebarAccountMenuWidth} />
|
|
586
|
-
</Group>
|
|
587
|
-
<ActionIcon
|
|
588
|
-
variant="subtle"
|
|
589
|
-
// A numeric size, not the named `"md"` — same opt-out as `connectivity-indicator.tsx`'s
|
|
590
|
-
// toolbar icon (see that comment): this is a plain collapse-toggle icon, not a control meant
|
|
591
|
-
// to match a `size="md"` Input/Button, so it must not pick up the theme's `ActionIcon.extend`
|
|
592
|
-
// control-height override. Reproduces Mantine's own static `--ai-size-md` (28px).
|
|
593
|
-
size={28}
|
|
594
|
-
visibleFrom="sm"
|
|
595
|
-
className={classes.ghostIcon}
|
|
596
|
-
onClick={onToggleCollapse}
|
|
597
|
-
aria-label={collapsed ? 'Expand sidebar' : 'Collapse sidebar'}
|
|
598
|
-
>
|
|
599
|
-
<IconCollapse collapsed={collapsed} />
|
|
600
|
-
</ActionIcon>
|
|
601
|
-
</Group>
|
|
602
|
-
|
|
547
|
+
<Stack
|
|
548
|
+
gap={0}
|
|
549
|
+
h="100%"
|
|
550
|
+
className={cx(classes.root, className)}
|
|
551
|
+
data-collapsed={collapsed || undefined}
|
|
552
|
+
{...(style !== undefined && { style })}
|
|
553
|
+
>
|
|
554
|
+
{/* NO brand row. It moved into the header's leading zone (`app-brand.tsx`) when the shell
|
|
555
|
+
dropped `layout="alt"`: with a full-width header, an `appShellHeaderHeight` brand band
|
|
556
|
+
here painted as a second 48px row under the header seam. The column now starts with
|
|
557
|
+
`SidebarSearch` — at the same inset it always had. `brand` stays a prop because
|
|
558
|
+
`brand.version` labels the settings footer below. */}
|
|
603
559
|
{search && (
|
|
604
560
|
<div className={classes.searchSlot}>
|
|
605
561
|
<SidebarSearch {...search} collapsed={collapsed} />
|
package/src/shell/index.tsx
CHANGED
|
@@ -18,13 +18,19 @@
|
|
|
18
18
|
* `createPersistedState` (`../state`) keyed by `storageKey` — see `collapseStore`.
|
|
19
19
|
*/
|
|
20
20
|
import { AppShell, Box } from '@mantine/core'
|
|
21
|
-
import { Fragment, useMemo } from 'react'
|
|
21
|
+
import { Fragment, useCallback, useEffect, useMemo } from 'react'
|
|
22
22
|
import type { MouseEvent, ReactNode } from 'react'
|
|
23
|
+
import { registerSidebarToggle } from '../commands/shell-bridge'
|
|
24
|
+
import { cx } from '../common/props'
|
|
25
|
+
import type { BasaltProps } from '../common/props'
|
|
26
|
+
import { assertRequiredProps } from '../common/validate'
|
|
23
27
|
import { AppSidebar } from './app-sidebar'
|
|
28
|
+
import { AppBrand } from './app-brand'
|
|
24
29
|
import { MobileNav, accountRowCount } from './app-mobile-nav'
|
|
25
30
|
import { blockRowCount, projectMobileNav } from './mobile-nav-model'
|
|
26
31
|
import { AppBreadcrumbs } from './app-breadcrumbs'
|
|
27
|
-
import { PageBarOutlet, PageBarProvider, usePageKebabClaimed } from './page-bar'
|
|
32
|
+
import { PageBarBandOutlet, PageBarOutlet, PageBarProvider, usePageKebabClaimed } from './page-bar'
|
|
33
|
+
import { AsideOutlet, AsideProvider, useAsideRegion } from './page-aside'
|
|
28
34
|
import { OverflowMenu, globalActionAsBarAction, globalActionMobile } from '../controls/actions'
|
|
29
35
|
import type { GlobalAction } from '../controls/actions'
|
|
30
36
|
import type { AccountMenuItem, BasaltAccountProps } from './account-types'
|
|
@@ -35,16 +41,19 @@ import type {
|
|
|
35
41
|
SidebarBlock,
|
|
36
42
|
SidebarItem,
|
|
37
43
|
SidebarSection,
|
|
38
|
-
} from '
|
|
44
|
+
} from './nav-types'
|
|
39
45
|
import { CtlSlot, useBasaltSpacing } from '../theme'
|
|
40
46
|
import { createPersistedState } from '../state'
|
|
47
|
+
import brandClasses from './app-brand.module.css'
|
|
41
48
|
import headerClasses from './app-header.module.css'
|
|
42
|
-
import
|
|
49
|
+
import mainClasses from './app-main.module.css'
|
|
50
|
+
import asideClasses from './page-aside.module.css'
|
|
43
51
|
|
|
44
52
|
export { AppSidebar, type AppSidebarProps } from './app-sidebar'
|
|
45
|
-
export { NavCountBadge } from './nav-count-badge'
|
|
53
|
+
export { NavCountBadge, type NavCountBadgeProps } from './nav-count-badge'
|
|
46
54
|
export {
|
|
47
55
|
SidebarSearch,
|
|
56
|
+
type SidebarSearchProps,
|
|
48
57
|
type SidebarSearchConfig,
|
|
49
58
|
type SidebarSearchActions,
|
|
50
59
|
} from './sidebar-search'
|
|
@@ -67,12 +76,15 @@ export {
|
|
|
67
76
|
MOBILE_MENU_MAX_DEFAULT,
|
|
68
77
|
MOBILE_MORE_KEY,
|
|
69
78
|
} from './mobile-nav-model'
|
|
70
|
-
export { AppBreadcrumbs } from './app-breadcrumbs'
|
|
71
|
-
export { PageBar, type PageBarProps } from './page-bar'
|
|
79
|
+
export { AppBreadcrumbs, type AppBreadcrumbsProps } from './app-breadcrumbs'
|
|
80
|
+
export { PageBar, type PageBarProps, type PageBarSlot } from './page-bar'
|
|
81
|
+
export { PageAside, type PageAsideProps, type PageAsideSlot } from './page-aside'
|
|
82
|
+
export { useBreakpoint, type BreakpointName } from './use-breakpoint'
|
|
83
|
+
export { PageTitle, type PageTitleProps, type PageTitleSlot } from './page-title'
|
|
72
84
|
|
|
73
85
|
/**
|
|
74
|
-
* The shared nav vocabulary lives in `src/nav
|
|
75
|
-
* type` it without reaching into the Mantine layer. Re-exported here so `SidebarItem` /
|
|
86
|
+
* The shared nav vocabulary lives in `src/shell/nav-types.ts` so the headless router bridge can
|
|
87
|
+
* `import type` it without reaching into the Mantine layer. Re-exported here so `SidebarItem` /
|
|
76
88
|
* `SidebarSection` keep resolving straight from `basalt-ui`, exactly as before.
|
|
77
89
|
*/
|
|
78
90
|
export type {
|
|
@@ -93,7 +105,7 @@ export type {
|
|
|
93
105
|
MobileNavModel,
|
|
94
106
|
MobileNavSlot,
|
|
95
107
|
MobileNavSurface,
|
|
96
|
-
} from '
|
|
108
|
+
} from './nav-types'
|
|
97
109
|
|
|
98
110
|
/** Brand identity shown in the sidebar header (logo + name). */
|
|
99
111
|
export type BrandConfig = {
|
|
@@ -113,9 +125,13 @@ export type SettingsMenuItem = {
|
|
|
113
125
|
label: string
|
|
114
126
|
icon?: ReactNode
|
|
115
127
|
onClick?: (e: MouseEvent) => void
|
|
128
|
+
/** This entry is the current selection (e.g. the active theme radio, the open dev tool) — a
|
|
129
|
+
* trailing check glyph renders in every form (flat footer row, gear `Menu.Item`, the mobile
|
|
130
|
+
* More-sheet row) and the row carries `aria-current="true"`. */
|
|
131
|
+
active?: boolean
|
|
116
132
|
}
|
|
117
133
|
|
|
118
|
-
export type BasaltShellProps = {
|
|
134
|
+
export type BasaltShellProps = BasaltProps & {
|
|
119
135
|
/**
|
|
120
136
|
* Brand identity for the sidebar header. Supplying `menu` turns the brand row into a `Name ▾`
|
|
121
137
|
* workspace switcher — the rows are `AccountMenuItem`s, the shape the account menu already uses.
|
|
@@ -267,36 +283,36 @@ const COLLAPSE_VERSION = 1
|
|
|
267
283
|
*/
|
|
268
284
|
const collapseStores = new Map<string, () => readonly [boolean, (next: boolean) => void]>()
|
|
269
285
|
|
|
270
|
-
/**
|
|
271
|
-
* Seeds `basalt:<key>` from the raw pre-1.20.1 key once, so the switch doesn't silently re-expand
|
|
272
|
-
* every consumer's sidebar. Mantine's `useLocalStorage` wrote a bare `JSON.stringify(value)` at the
|
|
273
|
-
* un-namespaced key; only `'true'`/`'false'` are accepted, and only when the house key is empty.
|
|
274
|
-
* A one-upgrade bridge, not a supported format — delete it once no consumer predates 1.20.1.
|
|
275
|
-
*/
|
|
276
|
-
function migrateLegacyCollapse(key: string): void {
|
|
277
|
-
try {
|
|
278
|
-
if (window.localStorage.getItem(`basalt:${key}`) !== null) return
|
|
279
|
-
const legacy = window.localStorage.getItem(key)
|
|
280
|
-
if (legacy !== 'true' && legacy !== 'false') return
|
|
281
|
-
window.localStorage.setItem(
|
|
282
|
-
`basalt:${key}`,
|
|
283
|
-
JSON.stringify({ v: COLLAPSE_VERSION, value: legacy === 'true' }),
|
|
284
|
-
)
|
|
285
|
-
} catch {
|
|
286
|
-
// Storage blocked (private browsing, quota) — defaulting to expanded is a fine outcome.
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
|
|
290
286
|
function collapseStore(key: string): () => readonly [boolean, (next: boolean) => void] {
|
|
291
287
|
const cached = collapseStores.get(key)
|
|
292
288
|
if (cached) return cached
|
|
293
|
-
if (typeof window !== 'undefined') migrateLegacyCollapse(key)
|
|
294
289
|
const store = createPersistedState<boolean>({ key, version: COLLAPSE_VERSION, initial: false })
|
|
295
290
|
collapseStores.set(key, store)
|
|
296
291
|
return store
|
|
297
292
|
}
|
|
298
293
|
|
|
299
|
-
|
|
294
|
+
// The shared inset for the shell padding and the header's inline padding, so the breadcrumb's
|
|
295
|
+
// left edge and the global actions' right edge land on the card column's edges.
|
|
296
|
+
const SHELL_INSET = 'sm' as const
|
|
297
|
+
|
|
298
|
+
/**
|
|
299
|
+
* The shell's two page-level regions are providers, and both wrap the frame rather than living
|
|
300
|
+
* inside it: `PageBarProvider` owns the header portal and the single-kebab claim, `AsideProvider`
|
|
301
|
+
* owns the aside portal, the region CLAIM and the claiming page's fold state — which `ShellFrame`
|
|
302
|
+
* has to READ to size `AppShell.Aside`, so it cannot be the component that provides it.
|
|
303
|
+
*/
|
|
304
|
+
export function BasaltShell(props: BasaltShellProps) {
|
|
305
|
+
assertRequiredProps('BasaltShell', props, ['brand', 'sections'])
|
|
306
|
+
return (
|
|
307
|
+
<PageBarProvider globalActions={props.globalActions ?? []}>
|
|
308
|
+
<AsideProvider>
|
|
309
|
+
<ShellFrame {...props} />
|
|
310
|
+
</AsideProvider>
|
|
311
|
+
</PageBarProvider>
|
|
312
|
+
)
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
function ShellFrame({
|
|
300
316
|
brand,
|
|
301
317
|
sections,
|
|
302
318
|
mobileNav,
|
|
@@ -310,22 +326,34 @@ export function BasaltShell({
|
|
|
310
326
|
account,
|
|
311
327
|
search,
|
|
312
328
|
children,
|
|
329
|
+
className,
|
|
330
|
+
style,
|
|
313
331
|
}: BasaltShellProps) {
|
|
314
332
|
// The active density level's resolved spacing — the AppShell dimensions below must track it
|
|
315
333
|
// (see `SPACE_STEP_BASE`'s "shell/index.tsx" group doc in `tokens/palette.ts`): their contents
|
|
316
334
|
// (controls, the search trigger/avatar, nav labels) already track density, so a fixed literal
|
|
317
335
|
// container squeezes progressively worse as density rises.
|
|
318
336
|
const { step } = useBasaltSpacing()
|
|
337
|
+
const aside = useAsideRegion()
|
|
319
338
|
const [storedCollapsed, setStoredCollapsed] = collapseStore(storageKey)()
|
|
320
339
|
// Controlled/uncontrolled seam (item 19): an explicit `collapsed` prop overrides the internal
|
|
321
340
|
// localStorage-persisted state entirely — the consumer becomes the source of truth.
|
|
322
341
|
const isCollapseControlled = collapsedProp !== undefined
|
|
323
342
|
const collapsed = isCollapseControlled ? collapsedProp : storedCollapsed
|
|
324
|
-
const toggleCollapse = () => {
|
|
343
|
+
const toggleCollapse = useCallback(() => {
|
|
325
344
|
const next = !collapsed
|
|
326
345
|
if (!isCollapseControlled) setStoredCollapsed(next)
|
|
327
346
|
onCollapsedChange?.(next)
|
|
328
|
-
}
|
|
347
|
+
}, [collapsed, isCollapseControlled, setStoredCollapsed, onCollapsedChange])
|
|
348
|
+
// `commands/shell-bridge.ts`'s `toggleSidebar` handle — registered here so a consumer's
|
|
349
|
+
// `commands.tsx` calls it with ZERO module-scope bridge of its own, unlike argo's hand-rolled
|
|
350
|
+
// `sidebar-bridge.ts` this seeds from (see that file's own doc). Re-registered whenever
|
|
351
|
+
// `toggleCollapse` itself changes identity, so the handle always flips the CURRENT state rather
|
|
352
|
+
// than a stale closure's.
|
|
353
|
+
useEffect(() => {
|
|
354
|
+
registerSidebarToggle(toggleCollapse)
|
|
355
|
+
return () => registerSidebarToggle(null)
|
|
356
|
+
}, [toggleCollapse])
|
|
329
357
|
|
|
330
358
|
const activeCrumb = findActiveCrumb(sections)
|
|
331
359
|
// The account row, every settings entry and every mobile-reachable sidebar block render as flat
|
|
@@ -344,68 +372,126 @@ export function BasaltShell({
|
|
|
344
372
|
)
|
|
345
373
|
|
|
346
374
|
return (
|
|
347
|
-
<
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
375
|
+
<AppShell
|
|
376
|
+
h="100dvh"
|
|
377
|
+
// Mantine's DEFAULT layout, not `alt`: the header spans the full viewport width on top and
|
|
378
|
+
// the navbar/aside start underneath it at `top: var(--app-shell-header-offset)`. `alt` did
|
|
379
|
+
// the opposite — a full-height navbar with the header inset beside it — which put the top
|
|
380
|
+
// bar to the RIGHT of the sidebar instead of above it.
|
|
381
|
+
header={{
|
|
382
|
+
// ONE height at every width (law C14): nothing reserves a second mobile row any more.
|
|
383
|
+
height: step.appShellHeaderHeight,
|
|
384
|
+
}}
|
|
385
|
+
navbar={{
|
|
386
|
+
width: {
|
|
387
|
+
base: step.appShellNavbarWidth,
|
|
388
|
+
sm: collapsed ? step.appShellNavbarRailWidth : step.appShellNavbarWidth,
|
|
389
|
+
},
|
|
390
|
+
breakpoint: 'sm',
|
|
391
|
+
// No mobile sidebar drawer, ever — the bottom bar is the entire mobile nav.
|
|
392
|
+
collapsed: { mobile: true },
|
|
393
|
+
}}
|
|
394
|
+
// The aside region (`docs/ASIDE-SPEC.md` §0). It is DECLARED here on every route and costs
|
|
395
|
+
// nothing until a page mounts a `PageAside` to claim it: unclaimed it is zero-wide and
|
|
396
|
+
// `collapsed.desktop`, so `--app-shell-aside-offset` stays 0 and the main column is
|
|
397
|
+
// full-width (law C14 — an empty home renders nothing). There is no `BasaltShellProps`
|
|
398
|
+
// prop for it on purpose; the ROUTE decides, the same way it decides its page bar.
|
|
399
|
+
aside={{
|
|
400
|
+
width: aside.claimed
|
|
401
|
+
? aside.folded
|
|
402
|
+
? step.appShellAsideRailWidth
|
|
403
|
+
: step.appShellAsideWidth
|
|
404
|
+
: 0,
|
|
405
|
+
breakpoint: 'sm',
|
|
406
|
+
// Below `sm` there is no region at all — `PageAside` renders its content in the page
|
|
407
|
+
// flow instead, one node, no responsive twin (law C9).
|
|
408
|
+
collapsed: { desktop: !aside.claimed, mobile: true },
|
|
409
|
+
}}
|
|
410
|
+
// A plain number, NOT a `calc(... + env(safe-area-inset-bottom))` string: Mantine's own
|
|
411
|
+
// `.footer` rule already adds the inset to both the height and the padding (§2.7).
|
|
412
|
+
footer={{ height: { base: step.mobileNavBarHeight, sm: 0 } }}
|
|
413
|
+
padding={SHELL_INSET}
|
|
414
|
+
// `mainClasses.shell` is not decoration — see its rule for why the root has to establish a
|
|
415
|
+
// block formatting context now that Main is offset with margins.
|
|
416
|
+
className={cx(mainClasses.shell, className)}
|
|
417
|
+
{...(style !== undefined && { style })}
|
|
418
|
+
>
|
|
419
|
+
{/* Region seams (docs/DESIGN-SPEC.md §5, §8 #12): Mantine's `[data-with-border]` painted in
|
|
420
|
+
* `--vx-divider` by the theme's `AppShell.extend({ vars })`. No shell module draws a region
|
|
421
|
+
* edge; never opt a section back out of its border here. */}
|
|
422
|
+
<AppShell.Header px={SHELL_INSET}>
|
|
423
|
+
<div className={headerClasses.bar}>
|
|
424
|
+
{/* The header's LEADING ZONE — exactly `--app-shell-navbar-offset` wide, so its trailing
|
|
425
|
+
* edge lands on the sidebar|main seam and the breadcrumb after it starts on Main's own
|
|
426
|
+
* content edge. The brand lives here rather than in the sidebar because with a full-width
|
|
427
|
+
* header a sidebar brand row painted as a SECOND 48px band under the header seam; see
|
|
428
|
+
* `app-brand.tsx`. `data-collapsed` is the rail's one signal — the zone narrows with the
|
|
429
|
+
* navbar and shows the toggle alone, exactly as the sidebar's own row did. */}
|
|
430
|
+
<div className={brandClasses.zone} data-collapsed={collapsed || undefined}>
|
|
431
|
+
<AppBrand brand={brand} collapsed={collapsed} onToggleCollapse={toggleCollapse} />
|
|
376
432
|
</div>
|
|
377
|
-
|
|
433
|
+
<div className={headerClasses.lead}>
|
|
434
|
+
<AppBreadcrumbs {...activeCrumb} />
|
|
435
|
+
</div>
|
|
436
|
+
<PageBarOutlet className={headerClasses.pageBar} />
|
|
437
|
+
<HeaderGlobalActions actions={globalActions ?? []} />
|
|
438
|
+
</div>
|
|
439
|
+
</AppShell.Header>
|
|
378
440
|
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
441
|
+
<AppShell.Navbar p={0}>
|
|
442
|
+
<AppSidebar
|
|
443
|
+
brand={brand}
|
|
444
|
+
sections={sections}
|
|
445
|
+
collapsed={collapsed}
|
|
446
|
+
onToggleCollapse={toggleCollapse}
|
|
447
|
+
{...(sidebarBlocks !== undefined && { blocks: sidebarBlocks })}
|
|
448
|
+
{...(settingsMenuItems !== undefined && { settingsMenuItems })}
|
|
449
|
+
{...(settingsMenu !== undefined && { settingsMenu })}
|
|
450
|
+
{...(account !== undefined && { account })}
|
|
451
|
+
{...(search !== undefined && { search })}
|
|
452
|
+
/>
|
|
453
|
+
</AppShell.Navbar>
|
|
392
454
|
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
455
|
+
{/* The PAGE-BAR BAND — a shell-owned outlet between the header and the scrollport that
|
|
456
|
+
* `PageBar` row 2 portals into, the same mechanism row 1 uses one region up. It is written
|
|
457
|
+
* BEFORE Main because the two are the AppShell root's only in-flow children (every other
|
|
458
|
+
* region is `position: fixed`), so DOM order is column order: band, then whatever height is
|
|
459
|
+
* left. Empty, it is a zero-height, seam-less box (law C14). */}
|
|
460
|
+
<PageBarBandOutlet className={mainClasses.band} />
|
|
397
461
|
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
462
|
+
{/* MAIN IS THE SCROLLPORT (`app-main.module.css`), not the document: the scrollbar belongs
|
|
463
|
+
* on the content's own right edge, inside the aside, and every sticky offset in the package
|
|
464
|
+
* resolves against this box rather than the window. `data-basalt-scrollport` is the public
|
|
465
|
+
* handle — `scrollParentOf` (`../common`) and `MobileNav`'s scroll-to-top both resolve it —
|
|
466
|
+
* and `data-scroll-restoration-id` is the attribute TanStack Router's scroll restoration
|
|
467
|
+
* reads (`@tanstack/router-core`'s `scrollRestorationIdAttribute`), so a router-driven app
|
|
468
|
+
* restores THIS element's scrollTop instead of the window's, which no longer moves. */}
|
|
469
|
+
<AppShell.Main
|
|
470
|
+
className={mainClasses.main}
|
|
471
|
+
data-basalt-scrollport
|
|
472
|
+
data-scroll-restoration-id="basalt-main"
|
|
473
|
+
>
|
|
474
|
+
{children}
|
|
475
|
+
</AppShell.Main>
|
|
476
|
+
|
|
477
|
+
{/* The outlet is bare; the region's leading seam is the AppShell's own. An unclaimed region
|
|
478
|
+
* is zero-wide but NOT display-none — Mantine's collapsed aside keeps its border-box, so a
|
|
479
|
+
* seam would still paint as a 1px ghost at the viewport's right edge (measured on
|
|
480
|
+
* `/dashboard`). The border follows the claim, not the section (C14). */}
|
|
481
|
+
<AppShell.Aside p={0} withBorder={aside.claimed}>
|
|
482
|
+
<AsideOutlet className={asideClasses.outlet} />
|
|
483
|
+
</AppShell.Aside>
|
|
484
|
+
|
|
485
|
+
<AppShell.Footer hiddenFrom="sm" p={0}>
|
|
486
|
+
<MobileNav
|
|
487
|
+
model={model}
|
|
488
|
+
config={mobileNav}
|
|
489
|
+
{...(account !== undefined && { account })}
|
|
490
|
+
{...(settingsMenuItems !== undefined && { settingsMenuItems })}
|
|
491
|
+
{...(sidebarBlocks !== undefined && { blocks: sidebarBlocks })}
|
|
492
|
+
/>
|
|
493
|
+
</AppShell.Footer>
|
|
494
|
+
</AppShell>
|
|
409
495
|
)
|
|
410
496
|
}
|
|
411
497
|
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal — `useLayoutEffect` in the browser, `useEffect` on the server.
|
|
3
|
+
*
|
|
4
|
+
* The standard isomorphic pattern, so an SSR render never trips React's "useLayoutEffect does
|
|
5
|
+
* nothing on the server" warning. The branch reads a global that cannot change between renders, so
|
|
6
|
+
* the hook identity is stable across every render of every caller.
|
|
7
|
+
*
|
|
8
|
+
* One module rather than one `const` per file: `page-bar.tsx` and `page-aside.tsx` declared the
|
|
9
|
+
* same line with the same doc, and the second copy's doc already said "see `page-bar.tsx`'s copy".
|
|
10
|
+
* Not exported from any barrel — this is a shell-internal utility, not a published hook.
|
|
11
|
+
*/
|
|
12
|
+
import { useEffect, useLayoutEffect } from 'react'
|
|
13
|
+
|
|
14
|
+
export const useIsomorphicLayoutEffect = typeof window === 'undefined' ? useEffect : useLayoutEffect
|