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
|
@@ -1,506 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Cross-level RELATION tests for the density knob — the audit that drove the Fix 1-7 pass in this
|
|
3
|
-
* commit found the knob correct only at level 0 because every prior test was a level-0 snapshot, not
|
|
4
|
-
* a relation that has to hold at every level. These loop over the full accepted range instead of
|
|
5
|
-
* spot-checking one or two levels, so a future edit that reintroduces one of the audited defects
|
|
6
|
-
* fails here regardless of which level it breaks first.
|
|
7
|
-
*
|
|
8
|
-
* `ALL_LEVELS` is derived from {@link DENSITY_LEVEL_RANGE} (`deriveSpacing`'s accepted `[-3, 3]`
|
|
9
|
-
* range, narrowed from `[-5, 5]` by Fix 7 in this same commit — see `deriveSpacing`'s JSDoc in
|
|
10
|
-
* `../tokens/palette` for why) rather than a hardcoded literal, so a future range change is picked
|
|
11
|
-
* up here automatically instead of silently narrowing this file's own coverage. `ALL_RADIUS_LEVELS`
|
|
12
|
-
* is the same derivation off {@link RADIUS_LEVEL_RANGE} — `deriveRadius` still accepts the wider
|
|
13
|
-
* `[-5, 5]`, so the radius-only relation test below (Fix 3) samples MORE points than the density
|
|
14
|
-
* tests, every one of them a real, valid radius level.
|
|
15
|
-
*/
|
|
16
|
-
import { DEFAULT_THEME, mergeMantineTheme } from '@mantine/core'
|
|
17
|
-
import type { MantineTheme } from '@mantine/core'
|
|
18
|
-
import { describe, expect, test } from 'bun:test'
|
|
19
|
-
import { VX } from '../tokens'
|
|
20
|
-
import {
|
|
21
|
-
DENSITY_LEVEL_RANGE,
|
|
22
|
-
RADIUS_LEVEL_RANGE,
|
|
23
|
-
deriveRadius,
|
|
24
|
-
deriveSpacing,
|
|
25
|
-
scaleSpace,
|
|
26
|
-
SPACE,
|
|
27
|
-
SPACE_FIXED,
|
|
28
|
-
SPACE_SCALE,
|
|
29
|
-
SPACE_STEP,
|
|
30
|
-
} from '../tokens/palette'
|
|
31
|
-
import { baseTheme } from './index'
|
|
32
|
-
|
|
33
|
-
const theme: MantineTheme = mergeMantineTheme(DEFAULT_THEME, baseTheme)
|
|
34
|
-
const ALL_LEVELS = Array.from(
|
|
35
|
-
{ length: DENSITY_LEVEL_RANGE.max - DENSITY_LEVEL_RANGE.min + 1 },
|
|
36
|
-
(_, i) => DENSITY_LEVEL_RANGE.min + i,
|
|
37
|
-
)
|
|
38
|
-
const ALL_RADIUS_LEVELS = Array.from(
|
|
39
|
-
{ length: RADIUS_LEVEL_RANGE.max - RADIUS_LEVEL_RANGE.min + 1 },
|
|
40
|
-
(_, i) => RADIUS_LEVEL_RANGE.min + i,
|
|
41
|
-
)
|
|
42
|
-
|
|
43
|
-
/** Flatten `deriveSpacing(level)`'s anchors + scale + step into one numeric record — `rowLineHeight`
|
|
44
|
-
* is excluded (it is additive, not routed through `scaleSpace`, and always moves, which would
|
|
45
|
-
* inflate a change ratio and can never be "frozen"). Used by the "Fix 7" resolution-honesty block. */
|
|
46
|
-
function flattenSpacing(level: number): Record<string, number> {
|
|
47
|
-
const { anchors, scale, step } = deriveSpacing(level)
|
|
48
|
-
return { ...anchors, ...scale, ...step }
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
describe('Fix 1 — input height, button height, and ActionIcon size never drift', () => {
|
|
52
|
-
test('every level: controlHeight AND inputHeight resolve to the exact scaled anchor, not merely to each other', () => {
|
|
53
|
-
// The old form of this test (`controlHeight === inputHeight`) is true BY CONSTRUCTION — both
|
|
54
|
-
// keys hold the literal same `CONTROL_HEIGHT_BASE` and are scaled by the SAME deterministic
|
|
55
|
-
// `scaleSpace(value, level, multiplier)` call, so they can never disagree regardless of what the
|
|
56
|
-
// multiplier law actually computes. Assert each against its own hardcoded expected value instead
|
|
57
|
-
// — this bites on a change to `CONTROL_HEIGHT_BASE`, the multiplier law, OR a divergence between
|
|
58
|
-
// the two keys, none of which the old form could catch.
|
|
59
|
-
const expected: Record<number, number> = {
|
|
60
|
-
[-3]: 29,
|
|
61
|
-
[-2]: 34,
|
|
62
|
-
[-1]: 38,
|
|
63
|
-
0: 42,
|
|
64
|
-
1: 46,
|
|
65
|
-
2: 50,
|
|
66
|
-
3: 55,
|
|
67
|
-
}
|
|
68
|
-
for (const level of ALL_LEVELS) {
|
|
69
|
-
const { anchors } = deriveSpacing(level)
|
|
70
|
-
const expectedHeight = expected[level]
|
|
71
|
-
if (expectedHeight === undefined) throw new Error(`no expected height for level ${level}`)
|
|
72
|
-
expect(anchors.inputHeight).toBe(expectedHeight)
|
|
73
|
-
expect(anchors.controlHeight).toBe(expectedHeight)
|
|
74
|
-
}
|
|
75
|
-
})
|
|
76
|
-
|
|
77
|
-
test('every level: Input/Button/ActionIcon vars() resolve to the SAME calc() shape at size=md', () => {
|
|
78
|
-
// The three overrides read different CSS custom properties (`--vx-space-input-height` vs.
|
|
79
|
-
// `--vx-space-control-height`) but the same anchor, so their `calc(...)` bodies differ only in
|
|
80
|
-
// var NAME, never in the numeric anchor they carry.
|
|
81
|
-
const inputVars = baseTheme.components?.['Input']?.vars
|
|
82
|
-
const buttonVars = baseTheme.components?.['Button']?.vars
|
|
83
|
-
const actionIconVars = baseTheme.components?.['ActionIcon']?.vars
|
|
84
|
-
const inputResult = inputVars?.(theme, { size: 'md' } as never, {} as never)
|
|
85
|
-
const buttonResult = buttonVars?.(theme, { size: 'md' } as never, {} as never)
|
|
86
|
-
const actionIconResult = actionIconVars?.(theme, { size: 'md' } as never, {} as never)
|
|
87
|
-
expect(inputResult?.wrapper?.['--input-height']).toBe(
|
|
88
|
-
'calc(var(--vx-space-input-height) * var(--mantine-scale))',
|
|
89
|
-
)
|
|
90
|
-
expect(buttonResult?.root?.['--button-height']).toBe(
|
|
91
|
-
'calc(var(--vx-space-control-height) * var(--mantine-scale))',
|
|
92
|
-
)
|
|
93
|
-
expect(actionIconResult?.root?.['--ai-size']).toBe(
|
|
94
|
-
'calc(var(--vx-space-control-height) * var(--mantine-scale))',
|
|
95
|
-
)
|
|
96
|
-
})
|
|
97
|
-
})
|
|
98
|
-
|
|
99
|
-
describe('Fix 2 — the 4px stack rhythm holds its 2:1 pairs at every level', () => {
|
|
100
|
-
test('stackXl = 2 * stackMd, stackLg = 2 * stackSm, and every step is its documented multiple of stackXs', () => {
|
|
101
|
-
for (const level of ALL_LEVELS) {
|
|
102
|
-
const { anchors } = deriveSpacing(level)
|
|
103
|
-
expect(anchors.stackXl).toBe(2 * anchors.stackMd)
|
|
104
|
-
expect(anchors.stackLg).toBe(2 * anchors.stackSm)
|
|
105
|
-
// The DOCUMENTED law (`deriveSpacing`'s JSDoc): stackSm/stackMd/stackLg/stackXl are exactly
|
|
106
|
-
// 2x/3x/4x/6x stackXs. A real equality against that documented multiple — not a `% === 0`
|
|
107
|
-
// divisibility check, which the two ratio assertions above already guarantee for free (any
|
|
108
|
-
// value that IS `stackXs * N` trivially divides `stackXs`) and so adds zero independent
|
|
109
|
-
// coverage on top of them.
|
|
110
|
-
expect(anchors.stackSm).toBe(2 * anchors.stackXs)
|
|
111
|
-
expect(anchors.stackMd).toBe(3 * anchors.stackXs)
|
|
112
|
-
expect(anchors.stackLg).toBe(4 * anchors.stackXs)
|
|
113
|
-
expect(anchors.stackXl).toBe(6 * anchors.stackXs)
|
|
114
|
-
}
|
|
115
|
-
})
|
|
116
|
-
})
|
|
117
|
-
|
|
118
|
-
describe('Fix 3 — SegmentedControl concentricity holds at every RADIUS level', () => {
|
|
119
|
-
test('RADIUS.card === RADIUS_STEP.tight + segmentedTrackInset, every RADIUS level (the full [-5, 5] range, not the narrower density range)', () => {
|
|
120
|
-
for (const level of ALL_RADIUS_LEVELS) {
|
|
121
|
-
const radius = deriveRadius(level)
|
|
122
|
-
expect(radius.card).toBe(radius.tight + SPACE_FIXED.segmentedTrackInset)
|
|
123
|
-
}
|
|
124
|
-
})
|
|
125
|
-
|
|
126
|
-
test('at the radius floor (-5), tight is clamped exactly to 0 while card is not — the closest the accepted range gets to breaking concentricity', () => {
|
|
127
|
-
const radius = deriveRadius(RADIUS_LEVEL_RANGE.min)
|
|
128
|
-
expect(radius.tight).toBe(0) // clampRadius(ctrl - 1) = clampRadius((6 - 5) - 1) = clampRadius(0)
|
|
129
|
-
expect(radius.card).toBe(2) // clampRadius(7 - 5) = 2, still positive — the clamp doesn't engage
|
|
130
|
-
// Concentricity holds here only because `ctrl - 1` landed EXACTLY on the clamp floor (0), not
|
|
131
|
-
// below it: one level further down (out of the accepted range) would clamp `tight` to 0 while
|
|
132
|
-
// `card` kept falling, breaking `card === tight + 2` — which is exactly why the range stops here.
|
|
133
|
-
expect(radius.card).toBe(radius.tight + SPACE_FIXED.segmentedTrackInset)
|
|
134
|
-
})
|
|
135
|
-
|
|
136
|
-
test("segmentedTrackInset never moves with density — it's a SPACE_FIXED constant, not part of deriveSpacing's step output at ANY level", () => {
|
|
137
|
-
// Claim 1 (the constant itself): the shipped value.
|
|
138
|
-
expect(SPACE_FIXED.segmentedTrackInset).toBe(2)
|
|
139
|
-
// Claim 2 (deriveSpacing has no such key any more): a bare `.toBe(2)` on the constant alone would
|
|
140
|
-
// still pass even if `segmentedTrackInset` were ALSO reintroduced into `SPACE_STEP_BASE` at a
|
|
141
|
-
// level-0 value of 2 — it would just happen to coincide there. Assert its actual absence from
|
|
142
|
-
// `step` at every level instead, which a reintroduction WOULD break immediately.
|
|
143
|
-
for (const level of ALL_LEVELS) {
|
|
144
|
-
expect(deriveSpacing(level).step).not.toHaveProperty('segmentedTrackInset')
|
|
145
|
-
}
|
|
146
|
-
})
|
|
147
|
-
})
|
|
148
|
-
|
|
149
|
-
describe('Fix 4 — every interactive target clears the WCAG 2.5.8 24px floor at every level', () => {
|
|
150
|
-
test('sidebar search trigger (and its collapsed rail ActionIcon, which reads the same value)', () => {
|
|
151
|
-
for (const level of ALL_LEVELS) {
|
|
152
|
-
expect(deriveSpacing(level).step.sidebarSearchTriggerHeight).toBeGreaterThanOrEqual(24)
|
|
153
|
-
}
|
|
154
|
-
})
|
|
155
|
-
|
|
156
|
-
test('a NavLink/Menu row (2 * rowInsetY padding + rowLineHeight * the fixed md text step)', () => {
|
|
157
|
-
for (const level of ALL_LEVELS) {
|
|
158
|
-
const { anchors, rowLineHeight } = deriveSpacing(level)
|
|
159
|
-
const rowHeight = 2 * anchors.rowInsetY + rowLineHeight * VX.text.md
|
|
160
|
-
expect(rowHeight).toBeGreaterThanOrEqual(24)
|
|
161
|
-
}
|
|
162
|
-
})
|
|
163
|
-
|
|
164
|
-
test('the page bar row (pageBarRowHeight — the mobile header actions row it replaced is gone)', () => {
|
|
165
|
-
for (const level of ALL_LEVELS) {
|
|
166
|
-
expect(deriveSpacing(level).step.pageBarRowHeight).toBeGreaterThanOrEqual(24)
|
|
167
|
-
}
|
|
168
|
-
})
|
|
169
|
-
|
|
170
|
-
// The mobile bar's own two targets clear a HIGHER bar than WCAG 2.5.8's 24px: a thumb on a phone
|
|
171
|
-
// is not a mouse pointer, so `deriveSpacing` floors them at Apple HIG 44pt / WCAG 2.5.5 AAA
|
|
172
|
-
// instead. Without those floors the 1 + 0.1*level multiplier takes 56 -> 39 and 44 -> 31 at level
|
|
173
|
-
// -3 — both under even the 24px floor the rest of this block asserts.
|
|
174
|
-
test('the mobile nav bar height never drops below its own 48px floor', () => {
|
|
175
|
-
for (const level of ALL_LEVELS) {
|
|
176
|
-
expect(deriveSpacing(level).step.mobileNavBarHeight).toBeGreaterThanOrEqual(48)
|
|
177
|
-
}
|
|
178
|
-
})
|
|
179
|
-
|
|
180
|
-
test('a mobile nav menu/sheet row never drops below its own 44px floor', () => {
|
|
181
|
-
for (const level of ALL_LEVELS) {
|
|
182
|
-
expect(deriveSpacing(level).step.mobileNavRowHeight).toBeGreaterThanOrEqual(44)
|
|
183
|
-
}
|
|
184
|
-
})
|
|
185
|
-
|
|
186
|
-
// `sheetRowHeight`'s own doc calls it "same floor family as `mobileNavRowHeight`" — same touch-only
|
|
187
|
-
// surface (the `Filters (n)` drawer, the mobile kebab sheet), same Apple HIG 44pt / WCAG 2.5.5 AAA
|
|
188
|
-
// floor, so it must clear it at every level too, not just coincidentally at level 0.
|
|
189
|
-
test('a Filters/kebab sheet row never drops below its own 44px floor', () => {
|
|
190
|
-
for (const level of ALL_LEVELS) {
|
|
191
|
-
expect(deriveSpacing(level).step.sheetRowHeight).toBeGreaterThanOrEqual(44)
|
|
192
|
-
}
|
|
193
|
-
})
|
|
194
|
-
|
|
195
|
-
test('the resolved control/input height (size="md" Button/ActionIcon/Input) clears the floor too', () => {
|
|
196
|
-
for (const level of ALL_LEVELS) {
|
|
197
|
-
const { anchors } = deriveSpacing(level)
|
|
198
|
-
expect(anchors.controlHeight).toBeGreaterThanOrEqual(24)
|
|
199
|
-
expect(anchors.inputHeight).toBeGreaterThanOrEqual(24)
|
|
200
|
-
}
|
|
201
|
-
})
|
|
202
|
-
|
|
203
|
-
// C15 (`docs/CONTROLS-SPEC.md` §5): "every touch target inside a home is ≥36px below `sm` (floor
|
|
204
|
-
// 30 at density −3)". Without the floor the 1 + 0.1*level multiplier takes 36 -> 25 at level -3,
|
|
205
|
-
// well under even the 24px WCAG floor above.
|
|
206
|
-
test('touchControlHeight never drops below its own 30px floor (C15)', () => {
|
|
207
|
-
for (const level of ALL_LEVELS) {
|
|
208
|
-
expect(deriveSpacing(level).anchors.touchControlHeight).toBeGreaterThanOrEqual(30)
|
|
209
|
-
}
|
|
210
|
-
expect(deriveSpacing(-3).anchors.touchControlHeight).toBe(30)
|
|
211
|
-
})
|
|
212
|
-
|
|
213
|
-
test('the remaining controls-tier anchors clear their own floors at every level', () => {
|
|
214
|
-
for (const level of ALL_LEVELS) {
|
|
215
|
-
const { anchors } = deriveSpacing(level)
|
|
216
|
-
expect(anchors.controlHeightTag).toBeGreaterThanOrEqual(18)
|
|
217
|
-
expect(anchors.controlHeightWidget).toBeGreaterThanOrEqual(22)
|
|
218
|
-
expect(anchors.controlHeightCtl).toBeGreaterThanOrEqual(28)
|
|
219
|
-
}
|
|
220
|
-
})
|
|
221
|
-
})
|
|
222
|
-
|
|
223
|
-
describe('Fix 5 — scaleSpace floors a sub-1 base at 1 (the inverted-clamp regression)', () => {
|
|
224
|
-
test('a base below 1 that would round to 0 floors at 1 instead', () => {
|
|
225
|
-
// round(0.5 * 0.35) = round(0.175) = 0 without the unconditional floor — the exact regression
|
|
226
|
-
// the old `value >= 1 ? ... : scaled` guard let through (see `scaleSpace`'s doc).
|
|
227
|
-
expect(scaleSpace(0.5, -5, 0.35)).toBe(1)
|
|
228
|
-
})
|
|
229
|
-
|
|
230
|
-
test('a base below 1 at level 0 still returns verbatim (bypasses scaling entirely)', () => {
|
|
231
|
-
expect(scaleSpace(0.5, 0, 1)).toBe(0.5)
|
|
232
|
-
})
|
|
233
|
-
})
|
|
234
|
-
|
|
235
|
-
/**
|
|
236
|
-
* Faithful reconstruction of the pre-Fix-7 law: IDENTICAL structural shape to the current
|
|
237
|
-
* `deriveSpacing` (shared stack-unit rebuild, the WCAG floor, the sticky-clearance derivation) —
|
|
238
|
-
* ONLY the multiplier coefficient (0.1 -> 0.06) and the accepted range ([-3,3] -> [-5,5]) revert,
|
|
239
|
-
* exactly the regression the "Fix 7" resolution-floor block below exists to catch.
|
|
240
|
-
*/
|
|
241
|
-
function oldLawFlatten(level: number): Record<string, number> {
|
|
242
|
-
const multiplier = 1 + 0.06 * level
|
|
243
|
-
const anchors: Record<string, number> = {}
|
|
244
|
-
for (const [k, v] of Object.entries(SPACE)) anchors[k] = scaleSpace(v, level, multiplier)
|
|
245
|
-
const stackUnit = scaleSpace(4, level, multiplier)
|
|
246
|
-
anchors['stackXs'] = stackUnit
|
|
247
|
-
anchors['stackSm'] = stackUnit * 2
|
|
248
|
-
anchors['stackMd'] = stackUnit * 3
|
|
249
|
-
anchors['stackLg'] = stackUnit * 4
|
|
250
|
-
anchors['stackXl'] = stackUnit * 6
|
|
251
|
-
const scale: Record<string, number> = {}
|
|
252
|
-
for (const [k, v] of Object.entries(SPACE_SCALE)) scale[k] = scaleSpace(v, level, multiplier)
|
|
253
|
-
const step: Record<string, number> = {}
|
|
254
|
-
for (const [k, v] of Object.entries(SPACE_STEP)) {
|
|
255
|
-
if (k === 'stickyHeaderClearance') continue
|
|
256
|
-
step[k] = scaleSpace(v, level, multiplier)
|
|
257
|
-
}
|
|
258
|
-
step['sidebarSearchTriggerHeight'] = Math.max(24, step['sidebarSearchTriggerHeight']!)
|
|
259
|
-
step['mobileNavBarHeight'] = Math.max(48, step['mobileNavBarHeight']!)
|
|
260
|
-
step['mobileNavRowHeight'] = Math.max(44, step['mobileNavRowHeight']!)
|
|
261
|
-
step['sheetRowHeight'] = Math.max(44, step['sheetRowHeight']!)
|
|
262
|
-
step['stickyHeaderClearance'] = step['appShellHeaderHeight']! + anchors['stackMd']!
|
|
263
|
-
return { ...anchors, ...scale, ...step }
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
describe("Fix 7 — the knob's resolution is honest at every notch", () => {
|
|
267
|
-
test('adjacent-notch resolution floor: more than 70% of the flattened spacing set changes at every step', () => {
|
|
268
|
-
for (let i = 0; i < ALL_LEVELS.length - 1; i++) {
|
|
269
|
-
const a = flattenSpacing(ALL_LEVELS[i]!)
|
|
270
|
-
const b = flattenSpacing(ALL_LEVELS[i + 1]!)
|
|
271
|
-
const keys = Object.keys(a)
|
|
272
|
-
const changed = keys.filter((k) => a[k] !== b[k]).length
|
|
273
|
-
// Observed minimum under the current 0.1/±3 law is ~0.759 (level -3 -> -2) — the 0.7 floor
|
|
274
|
-
// leaves a small margin for legitimate retuning while still catching the regression the next
|
|
275
|
-
// test proves it catches.
|
|
276
|
-
expect(changed / keys.length).toBeGreaterThan(0.7)
|
|
277
|
-
}
|
|
278
|
-
})
|
|
279
|
-
|
|
280
|
-
test('regression proof: the OLD 0.06/±5 law fails the SAME 0.7 floor — confirms the floor above actually bites', () => {
|
|
281
|
-
// Run here, not merely claimed, so a future edit to the CURRENT law can't silently make this
|
|
282
|
-
// proof stale without failing too — see `oldLawFlatten`'s own doc above.
|
|
283
|
-
const oldLawLevels = [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]
|
|
284
|
-
let minRatio = 1
|
|
285
|
-
for (let i = 0; i < oldLawLevels.length - 1; i++) {
|
|
286
|
-
const a = oldLawFlatten(oldLawLevels[i]!)
|
|
287
|
-
const b = oldLawFlatten(oldLawLevels[i + 1]!)
|
|
288
|
-
const keys = Object.keys(a)
|
|
289
|
-
const changed = keys.filter((k) => a[k] !== b[k]).length
|
|
290
|
-
minRatio = Math.min(minRatio, changed / keys.length)
|
|
291
|
-
}
|
|
292
|
-
// Observed: ~0.491 (level -4 -> -3 and level 3 -> 4), well under the 0.7 floor above — the old
|
|
293
|
-
// law's dead zone this whole fix replaced.
|
|
294
|
-
expect(minRatio).toBeLessThan(0.7)
|
|
295
|
-
})
|
|
296
|
-
|
|
297
|
-
test('frozen-vs-baseline ceiling: fewer than 27 of the ~129 values equal their level-0 value at any non-zero level', () => {
|
|
298
|
-
// Measured under the 0.1/±3 law: worst case is 25 (at level −1) — down from 43 under the old
|
|
299
|
-
// 0.06/±5 law. It is 25 rather than 24 because `mobileNavTabInsetY` (base 2) joined the set:
|
|
300
|
-
// a base that small rounds back to itself at ±1 and ±2 under any multiplier this law can
|
|
301
|
-
// produce, exactly as `mobileNavTabGap` (base 3) already did. That is the rounding law, not a
|
|
302
|
-
// resolution regression — the ceiling of 27 keeps the same margin over the measured worst case
|
|
303
|
-
// while still catching a future step reduction that reintroduces the real dead zone.
|
|
304
|
-
const baseline = flattenSpacing(0)
|
|
305
|
-
const keys = Object.keys(baseline)
|
|
306
|
-
for (const level of ALL_LEVELS) {
|
|
307
|
-
if (level === 0) continue
|
|
308
|
-
const values = flattenSpacing(level)
|
|
309
|
-
const frozen = keys.filter((k) => values[k] === baseline[k]).length
|
|
310
|
-
expect(frozen).toBeLessThan(27)
|
|
311
|
-
}
|
|
312
|
-
})
|
|
313
|
-
|
|
314
|
-
test('monotonicity: every flattened value is non-decreasing across adjacent levels', () => {
|
|
315
|
-
for (let i = 0; i < ALL_LEVELS.length - 1; i++) {
|
|
316
|
-
const a = flattenSpacing(ALL_LEVELS[i]!)
|
|
317
|
-
const b = flattenSpacing(ALL_LEVELS[i + 1]!)
|
|
318
|
-
for (const key of Object.keys(a)) {
|
|
319
|
-
expect(b[key]!).toBeGreaterThanOrEqual(a[key]!)
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
})
|
|
323
|
-
|
|
324
|
-
test('endpoint preservation: deriveSpacing(±3) reproduces the exact value set the old deriveSpacing(±5) produced', () => {
|
|
325
|
-
expect(deriveSpacing(-3).anchors.inputHeight).toBe(29)
|
|
326
|
-
expect(deriveSpacing(3).anchors.inputHeight).toBe(55)
|
|
327
|
-
expect(deriveSpacing(-3).anchors.rowInsetX).toBe(7)
|
|
328
|
-
expect(deriveSpacing(3).anchors.rowInsetX).toBe(13)
|
|
329
|
-
// `stickyHeaderClearance` is EXCLUDED here on purpose — since it now DERIVES from the AppShell
|
|
330
|
-
// header instead of scaling off an independent base (see `deriveSpacing`'s doc, third bullet),
|
|
331
|
-
// it never reproduced the old ±5 envelope to
|
|
332
|
-
// begin with; its own law is asserted by the dedicated describe block in `tokens/density.test.ts`
|
|
333
|
-
// (specific low/zero/high values) AND by the "Fix 8" describe block below in this same file
|
|
334
|
-
// (the generic `clearance = header + anchors.stackMd` relation, looped over every level).
|
|
335
|
-
expect(deriveSpacing(-3).rowLineHeight).toBe(1.25)
|
|
336
|
-
expect(deriveSpacing(3).rowLineHeight).toBe(1.45)
|
|
337
|
-
})
|
|
338
|
-
})
|
|
339
|
-
|
|
340
|
-
describe('Fix 8 — the sticky-header clearance clears the AppShell header, exactly', () => {
|
|
341
|
-
test('clearance = appShellHeaderHeight + stackMd, exactly, at every level', () => {
|
|
342
|
-
for (const level of ALL_LEVELS) {
|
|
343
|
-
const { step, anchors } = deriveSpacing(level)
|
|
344
|
-
expect(step.stickyHeaderClearance).toBe(step.appShellHeaderHeight + anchors.stackMd)
|
|
345
|
-
}
|
|
346
|
-
})
|
|
347
|
-
|
|
348
|
-
// The "mobile clearance = appShellHeaderMobileHeight + stackMd" and "mobile exceeds desktop" tests
|
|
349
|
-
// that used to sit here are DELETED, not renamed: since 1.26.0 the AppShell header is ONE 48px row
|
|
350
|
-
// at every viewport (law C14, `docs/CONTROLS-SPEC.md` §2.1), so `stickyHeaderClearanceMobile` and
|
|
351
|
-
// the `appShellHeaderMobileHeight` it derived from no longer exist to assert anything about.
|
|
352
|
-
|
|
353
|
-
// The "both breathing-room margins (clearance minus own header) are monotonically non-decreasing"
|
|
354
|
-
// check used to live here as its own test — deleted, not merely renamed: the two tests above this
|
|
355
|
-
// one already assert `clearance = header + anchors.stackMd` EXACTLY at every level, so
|
|
356
|
-
// `clearance - header` is identically `anchors.stackMd` — its monotonicity adds no coverage beyond
|
|
357
|
-
// what "Fix 7"'s global "every flattened value is non-decreasing across adjacent levels" test
|
|
358
|
-
// already guarantees (`stackMd` is one of the flattened anchors that test loops over). A bug this
|
|
359
|
-
// block could catch independently of both of those would have to leave `clearance - header`
|
|
360
|
-
// non-monotonic while `clearance = header + stackMd` still holds exactly and `stackMd` itself still
|
|
361
|
-
// stays monotonic — impossible by substitution.
|
|
362
|
-
})
|
|
363
|
-
|
|
364
|
-
describe('Fix 6 — BasaltShell AppShell dimensions track density', () => {
|
|
365
|
-
test('desktop header always holds a size="md" control', () => {
|
|
366
|
-
for (const level of ALL_LEVELS) {
|
|
367
|
-
const { step, anchors } = deriveSpacing(level)
|
|
368
|
-
expect(step.appShellHeaderHeight).toBeGreaterThanOrEqual(anchors.controlHeight)
|
|
369
|
-
}
|
|
370
|
-
})
|
|
371
|
-
|
|
372
|
-
test('the collapsed rail content box (rail width minus its own row inset) stays positive', () => {
|
|
373
|
-
for (const level of ALL_LEVELS) {
|
|
374
|
-
const { step, anchors } = deriveSpacing(level)
|
|
375
|
-
expect(step.appShellNavbarRailWidth - 2 * anchors.rowInsetX).toBeGreaterThan(0)
|
|
376
|
-
}
|
|
377
|
-
})
|
|
378
|
-
|
|
379
|
-
test('the header is ONE row at every viewport, and it holds a touch target below sm', () => {
|
|
380
|
-
// The invariant this replaced was a BUDGET: `appShellHeaderMobileHeight` was a documented SUM
|
|
381
|
-
// (row 1 + `SPACE_SCALE.sm` + `appHeaderMobileActionsHeight`), so row 1 was whatever the total
|
|
382
|
-
// left over, and raising an addend without raising the total silently ate the target-size margin
|
|
383
|
-
// — which is exactly what the component-roominess retune did (`SPACE_SCALE.sm` 12 -> 13 drove
|
|
384
|
-
// level -3 to 22px, flush against Mantine's 22px `--ai-size-sm` floor).
|
|
385
|
-
//
|
|
386
|
-
// 1.26.0 deletes the sum instead of re-tuning it: `PageBar` folds the page's overflow into a
|
|
387
|
-
// kebab and moves filters/tabs into the page flow, so there is no second mobile row to reserve
|
|
388
|
-
// (law C14) and the header is `appShellHeaderHeight` at EVERY width. Row 1's budget is therefore
|
|
389
|
-
// the whole header, and the thing worth asserting is what law C15 actually promises — that a
|
|
390
|
-
// `touchControlHeight` target fits inside it below `sm`.
|
|
391
|
-
for (const level of ALL_LEVELS) {
|
|
392
|
-
const { step, anchors } = deriveSpacing(level)
|
|
393
|
-
expect(step.appShellHeaderHeight).toBeGreaterThanOrEqual(anchors.touchControlHeight)
|
|
394
|
-
expect(anchors.touchControlHeight).toBeGreaterThanOrEqual(anchors.controlHeightCtl)
|
|
395
|
-
}
|
|
396
|
-
})
|
|
397
|
-
|
|
398
|
-
test('the header row is monotonically non-decreasing across levels', () => {
|
|
399
|
-
const heights = ALL_LEVELS.map((level) => deriveSpacing(level).step.appShellHeaderHeight)
|
|
400
|
-
for (let i = 1; i < heights.length; i++) {
|
|
401
|
-
expect(heights[i]).toBeGreaterThanOrEqual(heights[i - 1]!)
|
|
402
|
-
}
|
|
403
|
-
})
|
|
404
|
-
|
|
405
|
-
test('the collapsed-rail content box is monotonically non-decreasing across levels', () => {
|
|
406
|
-
const boxes = ALL_LEVELS.map((level) => {
|
|
407
|
-
const { step, anchors } = deriveSpacing(level)
|
|
408
|
-
return step.appShellNavbarRailWidth - 2 * anchors.rowInsetX
|
|
409
|
-
})
|
|
410
|
-
for (let i = 1; i < boxes.length; i++) {
|
|
411
|
-
expect(boxes[i]).toBeGreaterThanOrEqual(boxes[i - 1]!)
|
|
412
|
-
}
|
|
413
|
-
})
|
|
414
|
-
|
|
415
|
-
test('the navbar label column never shrinks as density rises', () => {
|
|
416
|
-
const columns = ALL_LEVELS.map((level) => {
|
|
417
|
-
const { step, anchors } = deriveSpacing(level)
|
|
418
|
-
return step.appShellNavbarWidth - (4 * anchors.rowInsetX + step.navIconGap)
|
|
419
|
-
})
|
|
420
|
-
for (let i = 1; i < columns.length; i++) {
|
|
421
|
-
expect(columns[i]).toBeGreaterThanOrEqual(columns[i - 1]!)
|
|
422
|
-
}
|
|
423
|
-
})
|
|
424
|
-
|
|
425
|
-
// The "header/rail 48-coincidence at level 0" check that used to live here is deleted, not
|
|
426
|
-
// rewritten: it asserted `appShellHeaderHeight === appShellNavbarRailWidth` at level 0, which is
|
|
427
|
-
// true BY CONSTRUCTION (both `SPACE_STEP_BASE` entries hold the literal same base, 48, and are
|
|
428
|
-
// mapped through the same deterministic `scaleSpace` call) and stays true at every OTHER level for
|
|
429
|
-
// the identical reason — no value-based assertion can distinguish "these two happen to share a
|
|
430
|
-
// base" (a coincidence) from "one is derived from the other" (a law) without mutating the source,
|
|
431
|
-
// which is out of scope for a value-level test. The actual claim (they are two INDEPENDENT
|
|
432
|
-
// `SPACE_STEP_BASE` entries, not one derived from the other) is already documented at the source —
|
|
433
|
-
// see `appShellHeaderHeight`'s own JSDoc in `tokens/palette.ts`.
|
|
434
|
-
|
|
435
|
-
test('the footer stays a structural literal — no density-tracking entry for it, and the sm:0 landmine stays fenced', () => {
|
|
436
|
-
for (const level of ALL_LEVELS) {
|
|
437
|
-
expect(deriveSpacing(level).step).not.toHaveProperty('appShellFooterHeight')
|
|
438
|
-
}
|
|
439
|
-
// `scaleSpace(0, level, m)` floors at 1 for any non-zero level — this is why `shell/index.tsx`'s
|
|
440
|
-
// `footer.sm` stays a literal 0, never routed through the density law (it would paint a 1px
|
|
441
|
-
// desktop footer strip at every non-zero level).
|
|
442
|
-
expect(scaleSpace(0, -5, 0.7)).toBe(1)
|
|
443
|
-
expect(scaleSpace(0, 5, 1.3)).toBe(1)
|
|
444
|
-
})
|
|
445
|
-
})
|
|
446
|
-
|
|
447
|
-
describe('Fix 9 — the Mantine spacing scale keeps its strict xs < sm < md < lg < xl ordering at every level', () => {
|
|
448
|
-
test('every level: the five scale stops are strictly increasing, never tying or inverting', () => {
|
|
449
|
-
// Every consumer `p=`/`m=`/`gap=` prop app-wide resolves through this scale, and its five stops
|
|
450
|
-
// are independently rounded (unlike the anchor group's shared-unit stack rhythm) — a retune plus
|
|
451
|
-
// rounding could tie or invert two adjacent stops with nothing else in this file catching it.
|
|
452
|
-
for (const level of ALL_LEVELS) {
|
|
453
|
-
const { scale } = deriveSpacing(level)
|
|
454
|
-
expect(scale.xs).toBeLessThan(scale.sm)
|
|
455
|
-
expect(scale.sm).toBeLessThan(scale.md)
|
|
456
|
-
expect(scale.md).toBeLessThan(scale.lg)
|
|
457
|
-
expect(scale.lg).toBeLessThan(scale.xl)
|
|
458
|
-
}
|
|
459
|
-
})
|
|
460
|
-
})
|
|
461
|
-
|
|
462
|
-
describe('Fix 10 — ctl SegmentedControl matches the ctl Button/Input box at every level, not a fixed 30px', () => {
|
|
463
|
-
// `SegmentedControl.extend`'s function-form `styles` only sets a label `minHeight` when
|
|
464
|
-
// `props.size === 'ctl'` — everything else (`sm`/`md` in a form) must fall through untouched.
|
|
465
|
-
const stylesFn = baseTheme.components?.['SegmentedControl']?.styles as
|
|
466
|
-
| ((t: MantineTheme, props: { size?: string }, ctx: never) => Record<string, unknown>)
|
|
467
|
-
| undefined
|
|
468
|
-
|
|
469
|
-
test('a non-ctl size (e.g. the form default) gets no label override', () => {
|
|
470
|
-
const result = stylesFn?.(theme, { size: 'md' }, {} as never)
|
|
471
|
-
expect(
|
|
472
|
-
(result?.['label'] as Record<string, unknown> | undefined)?.['minHeight'],
|
|
473
|
-
).toBeUndefined()
|
|
474
|
-
})
|
|
475
|
-
|
|
476
|
-
test("size='ctl' gets an inline-flex, vertically centred label — Mantine's label is `display: block`, so a bare minHeight alone would leave the text top-aligned", () => {
|
|
477
|
-
const result = stylesFn?.(theme, { size: 'ctl' }, {} as never)
|
|
478
|
-
const label = result?.['label'] as Record<string, unknown> | undefined
|
|
479
|
-
expect(label?.['display']).toBe('inline-flex')
|
|
480
|
-
expect(label?.['alignItems']).toBe('center')
|
|
481
|
-
})
|
|
482
|
-
|
|
483
|
-
test('the label minHeight formula, plus the root track padding on both sides, reconstructs EXACTLY the same scaled expression as `--button-height-ctl` — the algebraic identity that makes the two controls the same height at every density level, not just level 0', () => {
|
|
484
|
-
const result = stylesFn?.(theme, { size: 'ctl' }, {} as never)
|
|
485
|
-
const label = result?.['label'] as Record<string, unknown> | undefined
|
|
486
|
-
const minHeight = label?.['minHeight']
|
|
487
|
-
expect(typeof minHeight).toBe('string')
|
|
488
|
-
const rootPadding = 2 * SPACE_FIXED.segmentedTrackInset
|
|
489
|
-
expect(minHeight).toBe(
|
|
490
|
-
`calc(var(--vx-space-control-height-ctl) * var(--mantine-scale) - ${rootPadding}px)`,
|
|
491
|
-
)
|
|
492
|
-
// `--button-height-ctl` (`ctlSizeVars` in theme/index.ts) is the un-subtracted form — adding the
|
|
493
|
-
// root's own `2 * segmentedTrackInset` padding back to the label's minHeight must reproduce it,
|
|
494
|
-
// for every level, since neither term is level-dependent (the level only changes the CSS var's
|
|
495
|
-
// RESOLVED value at paint time, never this formula).
|
|
496
|
-
for (const level of ALL_LEVELS) {
|
|
497
|
-
// `anchors.controlHeightCtl` is the JS-side value `--vx-space-control-height-ctl` resolves to
|
|
498
|
-
// at this level (scale = 1, the JS-derivation default) — substituting it into both formulas
|
|
499
|
-
// must land on the same total.
|
|
500
|
-
const { anchors } = deriveSpacing(level)
|
|
501
|
-
const labelHeight = anchors.controlHeightCtl - rootPadding
|
|
502
|
-
const totalHeight = labelHeight + rootPadding
|
|
503
|
-
expect(totalHeight).toBe(anchors.controlHeightCtl)
|
|
504
|
-
}
|
|
505
|
-
})
|
|
506
|
-
})
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `createBasaltTheme`'s `{ derive }` option — the graduation of the six-knob derive config into a
|
|
3
|
-
* first-class consumer API. Two invariants:
|
|
4
|
-
*
|
|
5
|
-
* 1. The DEFAULT path (no `options`, or a `derive` that resolves back to
|
|
6
|
-
* `DEFAULT_DERIVE_CONFIG`) stays byte-identical to the pre-baked static palette — zero extra
|
|
7
|
-
* derivation work, and `theme.other.basaltDerive` stays unset (the provider's "or is absent"
|
|
8
|
-
* tolerance).
|
|
9
|
-
* 2. A NON-default config lands the fully-resolved `DeriveConfig` on `theme.other.basaltDerive`
|
|
10
|
-
* (so `BasaltProvider` can inject the matching stylesheet) and produces `--vx-*` CSS that
|
|
11
|
-
* differs from the shipped default.
|
|
12
|
-
*/
|
|
13
|
-
import { describe, expect, test } from 'bun:test'
|
|
14
|
-
import { buildPaletteCss } from '../tokens'
|
|
15
|
-
import { DEFAULT_DERIVE_CONFIG, resolveDeriveConfig } from '../tokens/derive'
|
|
16
|
-
import { buildPaletteData } from '../tokens/palette'
|
|
17
|
-
import { createBasaltTheme } from './index'
|
|
18
|
-
|
|
19
|
-
describe('the default derive config stays on the static path', () => {
|
|
20
|
-
test('createBasaltTheme() carries no theme.other.basaltDerive', () => {
|
|
21
|
-
expect(createBasaltTheme().other?.['basaltDerive']).toBeUndefined()
|
|
22
|
-
})
|
|
23
|
-
|
|
24
|
-
test('createBasaltTheme(undefined, {}) resolves to the same default', () => {
|
|
25
|
-
expect(createBasaltTheme(undefined, {}).other?.['basaltDerive']).toBeUndefined()
|
|
26
|
-
})
|
|
27
|
-
|
|
28
|
-
test('a derive option that resolves back to the default also carries no basaltDerive', () => {
|
|
29
|
-
const theme = createBasaltTheme(undefined, { derive: { ...DEFAULT_DERIVE_CONFIG } })
|
|
30
|
-
expect(theme.other?.['basaltDerive']).toBeUndefined()
|
|
31
|
-
})
|
|
32
|
-
|
|
33
|
-
test('the default palette CSS is byte-identical to the static path', () => {
|
|
34
|
-
expect(buildPaletteCss(undefined, buildPaletteData(DEFAULT_DERIVE_CONFIG))).toBe(
|
|
35
|
-
buildPaletteCss(),
|
|
36
|
-
)
|
|
37
|
-
})
|
|
38
|
-
})
|
|
39
|
-
|
|
40
|
-
describe('a non-default derive config graduates onto the theme', () => {
|
|
41
|
-
const partial = { accent: '#16a34a' }
|
|
42
|
-
const theme = createBasaltTheme(undefined, { derive: partial })
|
|
43
|
-
|
|
44
|
-
test('the resolved config lands on theme.other.basaltDerive', () => {
|
|
45
|
-
expect(theme.other?.['basaltDerive']).toEqual(resolveDeriveConfig(partial))
|
|
46
|
-
})
|
|
47
|
-
|
|
48
|
-
test('its palette CSS differs from the shipped default', () => {
|
|
49
|
-
const resolved = resolveDeriveConfig(partial)
|
|
50
|
-
const customCss = buildPaletteCss(undefined, buildPaletteData(resolved))
|
|
51
|
-
expect(customCss).not.toBe(buildPaletteCss())
|
|
52
|
-
})
|
|
53
|
-
|
|
54
|
-
test('the accent fill in theme.colors.blue follows the custom seed', () => {
|
|
55
|
-
const resolved = resolveDeriveConfig(partial)
|
|
56
|
-
const data = buildPaletteData(resolved)
|
|
57
|
-
const blue = theme.colors?.['blue']
|
|
58
|
-
expect(blue?.[6]).toBe(data.ACCENT.accentFill.light)
|
|
59
|
-
})
|
|
60
|
-
})
|
|
61
|
-
|
|
62
|
-
describe('consumer overrides still win on top of a derive config', () => {
|
|
63
|
-
test('an explicit override merges onto the derived theme', () => {
|
|
64
|
-
const theme = createBasaltTheme({ primaryColor: 'green' }, { derive: { accent: '#16a34a' } })
|
|
65
|
-
expect(theme.primaryColor).toBe('green')
|
|
66
|
-
expect(theme.other?.['basaltDerive']).toEqual(resolveDeriveConfig({ accent: '#16a34a' }))
|
|
67
|
-
})
|
|
68
|
-
})
|
|
69
|
-
|
|
70
|
-
describe('a non-default derive config yields a dark tuple that tracks its own derived data', () => {
|
|
71
|
-
// `accent` alone doesn't move the dark tuple (it's built from INK/SURFACE, which key off
|
|
72
|
-
// `neutral` + `darkLevel`, not the accent seed) — vary `darkLevel` so the tuple's surface-based
|
|
73
|
-
// stops (border/hover/panel/body) actually diverge from the shipped default's.
|
|
74
|
-
const partial = { darkLevel: 3 }
|
|
75
|
-
const resolved = resolveDeriveConfig(partial)
|
|
76
|
-
const data = buildPaletteData(resolved)
|
|
77
|
-
const theme = createBasaltTheme(undefined, { derive: partial })
|
|
78
|
-
|
|
79
|
-
test('theme.colors.dark follows the derived data', () => {
|
|
80
|
-
expect(theme.colors?.['dark']?.[0]).toBe(data.INK.ink.dark)
|
|
81
|
-
expect(theme.colors?.['dark']?.[7]).toBe(data.SURFACE.bg.dark)
|
|
82
|
-
})
|
|
83
|
-
|
|
84
|
-
test("a non-default config yields a dark tuple that differs from the DEFAULT theme's", () => {
|
|
85
|
-
expect(theme.colors?.['dark']).not.toEqual(createBasaltTheme().colors?.['dark'])
|
|
86
|
-
})
|
|
87
|
-
})
|
|
88
|
-
|
|
89
|
-
describe('a malformed accent seed throws through createBasaltTheme', () => {
|
|
90
|
-
test('rejects a non-hex color name', () => {
|
|
91
|
-
expect(() => createBasaltTheme(undefined, { derive: { accent: 'red' } })).toThrow()
|
|
92
|
-
})
|
|
93
|
-
|
|
94
|
-
test('rejects a truncated hex', () => {
|
|
95
|
-
expect(() => createBasaltTheme(undefined, { derive: { accent: '#12' } })).toThrow()
|
|
96
|
-
})
|
|
97
|
-
|
|
98
|
-
test('rejects a non-hex-digit hex', () => {
|
|
99
|
-
expect(() => createBasaltTheme(undefined, { derive: { accent: '#zzzzzz' } })).toThrow()
|
|
100
|
-
})
|
|
101
|
-
})
|