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
package/src/guard/grace.test.ts
DELETED
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The C16 version gate (`docs/CONTROLS-SPEC.md` §1): a `GRACE_PERIOD_KINDS` entry fails the build
|
|
3
|
-
* once `package.json`'s version reaches its `promote`, and every entry must declare `since` before
|
|
4
|
-
* `promote`. This is the mechanism that replaces the honor system — deleting an entry used to be
|
|
5
|
-
* the ONLY enforcement of "warn for one minor", and nothing checked that anyone had (D4:
|
|
6
|
-
* `docs/archive/CONTROLS-SYNTHESIS.md`). Five kinds landed together in the round-4 guard minor and sat
|
|
7
|
-
* at `warn` for five minors before this test existed.
|
|
8
|
-
*
|
|
9
|
-
* `assertGraceLedger` is tested directly against synthetic entries below rather than only through
|
|
10
|
-
* the real ledger: every pre-existing entry promoted or moved to `PLUGIN_RULE_ADVISORY`'s guard-side
|
|
11
|
-
* sibling, and an `it.each` over the empty ledger that left behind ran zero assertions, which proved
|
|
12
|
-
* nothing about the gate actually firing. The ledger carries ONE wave-6 control kind at 1.27.0 —
|
|
13
|
-
* `raw-selection-control`, re-dated to `promote: '1.28.0'` with its AST twin
|
|
14
|
-
* `basalt/control-outside-home` (`in-body-page-title` promoted on schedule and its entry is gone) —
|
|
15
|
-
* and the real-ledger check below runs against it.
|
|
16
|
-
*
|
|
17
|
-
* This gate measures the version already PUBLISHED, so it can only go red after the release that
|
|
18
|
-
* shipped a due entry. `scripts/check-grace.ts` is the other end — `scripts/release.sh` runs it
|
|
19
|
-
* against the version the dry run computed, before the release is cut.
|
|
20
|
-
*
|
|
21
|
-
* Excluded from tsc (tsconfig exclude: src/**\/*.test.ts), run via `bun test`.
|
|
22
|
-
*/
|
|
23
|
-
import { describe, expect, it } from 'bun:test'
|
|
24
|
-
import { readFileSync } from 'node:fs'
|
|
25
|
-
import { resolve } from 'node:path'
|
|
26
|
-
import { GRACE_PERIOD_KINDS } from './index'
|
|
27
|
-
|
|
28
|
-
const PACKAGE_JSON_PATH = resolve(import.meta.dirname, '..', '..', 'package.json')
|
|
29
|
-
const CURRENT_VERSION = (JSON.parse(readFileSync(PACKAGE_JSON_PATH, 'utf8')) as { version: string })
|
|
30
|
-
.version
|
|
31
|
-
|
|
32
|
-
type GraceEntry = { since: string; promote: string; why: string }
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Tiny local semver compare — no dependency. Assumes plain `x.y.z`, no pre-release identifiers
|
|
36
|
-
* (basalt-ui bans majors and ships no pre-releases). Returns negative when `a` sorts before `b`,
|
|
37
|
-
* positive when after, zero when equal. Compares each component numerically, not lexically, so
|
|
38
|
-
* `'1.9.0' < '1.10.0'` and `'1.3.0' < '1.26.0'` — a string compare would get both backwards.
|
|
39
|
-
*/
|
|
40
|
-
export function compareSemver(a: string, b: string): number {
|
|
41
|
-
const partsA = a.split('.').map(Number)
|
|
42
|
-
const partsB = b.split('.').map(Number)
|
|
43
|
-
for (let i = 0; i < 3; i++) {
|
|
44
|
-
const diff = (partsA[i] ?? 0) - (partsB[i] ?? 0)
|
|
45
|
-
if (diff !== 0) return diff > 0 ? 1 : -1
|
|
46
|
-
}
|
|
47
|
-
return 0
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* The C16 gate itself, extracted so it can be exercised against a synthetic ledger as well as the
|
|
52
|
-
* real one. Throws naming the first offending entry when either invariant breaks: `since` must
|
|
53
|
-
* precede `promote` for every entry, and no entry's `promote` may be `<=` the given `version`.
|
|
54
|
-
*/
|
|
55
|
-
export function assertGraceLedger(ledger: Record<string, GraceEntry>, version: string): void {
|
|
56
|
-
for (const [id, entry] of Object.entries(ledger)) {
|
|
57
|
-
if (compareSemver(entry.since, entry.promote) >= 0) {
|
|
58
|
-
throw new Error(
|
|
59
|
-
`${id}: \`since\` (${entry.since}) must be before \`promote\` (${entry.promote}).`,
|
|
60
|
-
)
|
|
61
|
-
}
|
|
62
|
-
if (compareSemver(version, entry.promote) >= 0) {
|
|
63
|
-
throw new Error(
|
|
64
|
-
`${id}: package.json is at ${version}, which has reached its promote version ` +
|
|
65
|
-
`${entry.promote} — promote to error or extend \`promote\` with a reason.`,
|
|
66
|
-
)
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
describe('compareSemver', () => {
|
|
72
|
-
it('orders multi-digit components numerically, not lexically', () => {
|
|
73
|
-
expect(compareSemver('1.9.0', '1.10.0')).toBeLessThan(0)
|
|
74
|
-
expect(compareSemver('1.10.0', '1.9.0')).toBeGreaterThan(0)
|
|
75
|
-
expect(compareSemver('1.3.0', '1.26.0')).toBeLessThan(0)
|
|
76
|
-
expect(compareSemver('1.26.0', '1.3.0')).toBeGreaterThan(0)
|
|
77
|
-
})
|
|
78
|
-
|
|
79
|
-
it('treats equal versions as equal', () => {
|
|
80
|
-
expect(compareSemver('1.25.0', '1.25.0')).toBe(0)
|
|
81
|
-
})
|
|
82
|
-
})
|
|
83
|
-
|
|
84
|
-
describe('assertGraceLedger', () => {
|
|
85
|
-
it('does not throw on a well-formed entry not yet due', () => {
|
|
86
|
-
const ledger = { 'fake-kind': { since: '1.0.0', promote: '2.0.0', why: 'synthetic' } }
|
|
87
|
-
expect(() => assertGraceLedger(ledger, '1.25.0')).not.toThrow()
|
|
88
|
-
})
|
|
89
|
-
|
|
90
|
-
it('throws once the given version reaches promote', () => {
|
|
91
|
-
const ledger = { 'fake-kind': { since: '1.0.0', promote: '1.25.0', why: 'synthetic' } }
|
|
92
|
-
expect(() => assertGraceLedger(ledger, '1.25.0')).toThrow(/fake-kind/)
|
|
93
|
-
})
|
|
94
|
-
|
|
95
|
-
it('throws once the given version is past promote', () => {
|
|
96
|
-
const ledger = { 'fake-kind': { since: '1.0.0', promote: '1.9.0', why: 'synthetic' } }
|
|
97
|
-
expect(() => assertGraceLedger(ledger, '1.10.0')).toThrow(/fake-kind/)
|
|
98
|
-
})
|
|
99
|
-
|
|
100
|
-
it('throws when since does not precede promote', () => {
|
|
101
|
-
const ledger = { 'fake-kind': { since: '1.5.0', promote: '1.5.0', why: 'synthetic' } }
|
|
102
|
-
expect(() => assertGraceLedger(ledger, '1.0.0')).toThrow(/since/)
|
|
103
|
-
})
|
|
104
|
-
})
|
|
105
|
-
|
|
106
|
-
describe('GRACE_PERIOD_KINDS — version gate (C16)', () => {
|
|
107
|
-
it('the real ledger passes the gate against the real package version', () => {
|
|
108
|
-
expect(() =>
|
|
109
|
-
assertGraceLedger(GRACE_PERIOD_KINDS as Record<string, GraceEntry>, CURRENT_VERSION),
|
|
110
|
-
).not.toThrow()
|
|
111
|
-
})
|
|
112
|
-
})
|
|
113
|
-
|
|
114
|
-
// ── the release-time half: scripts/check-grace.ts ────────────────────────────
|
|
115
|
-
// Exercised as a PROCESS, because that is how `scripts/release.sh` consumes it — the exit code is
|
|
116
|
-
// the whole interface, and a script that printed the right words with status 0 would gate nothing.
|
|
117
|
-
|
|
118
|
-
const CHECK_GRACE = resolve(import.meta.dirname, '..', '..', 'scripts', 'check-grace.ts')
|
|
119
|
-
|
|
120
|
-
function runCheckGrace(...args: string[]): { code: number; stderr: string; stdout: string } {
|
|
121
|
-
const result = Bun.spawnSync(['bun', CHECK_GRACE, ...args])
|
|
122
|
-
return {
|
|
123
|
-
code: result.exitCode,
|
|
124
|
-
stderr: result.stderr.toString(),
|
|
125
|
-
stdout: result.stdout.toString(),
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
describe('scripts/check-grace.ts', () => {
|
|
130
|
-
it('passes for a version below every promote', () => {
|
|
131
|
-
const { code, stdout } = runCheckGrace('1.0.0')
|
|
132
|
-
expect([code, stdout.includes('clear of all')]).toEqual([0, true])
|
|
133
|
-
})
|
|
134
|
-
|
|
135
|
-
it('refuses a version that has reached a promote, naming the entries', () => {
|
|
136
|
-
const { code, stderr } = runCheckGrace('9.9.9')
|
|
137
|
-
expect(code).toBe(1)
|
|
138
|
-
expect(stderr).toContain('raw-selection-control')
|
|
139
|
-
expect(stderr).toContain('basalt/control-outside-home')
|
|
140
|
-
})
|
|
141
|
-
|
|
142
|
-
// 1.27.0 promoted five of the six wave-6 plugin rules and one of the two guard kinds; what is
|
|
143
|
-
// LEFT is the C1 pair (`raw-selection-control` + `basalt/control-outside-home`), re-dated to
|
|
144
|
-
// 1.28.0 against a measurement rather than a hunch — see either entry's `why`. So the release
|
|
145
|
-
// this file used to refuse now passes, and the refusal moved with the pair.
|
|
146
|
-
it('passes 1.27.0 — the five entries due there promoted', () => {
|
|
147
|
-
expect(runCheckGrace('1.27.0').code).toBe(0)
|
|
148
|
-
})
|
|
149
|
-
|
|
150
|
-
it('refuses the version the remaining C1 pair is due in (1.28.0)', () => {
|
|
151
|
-
expect(runCheckGrace('1.28.0').code).toBe(1)
|
|
152
|
-
})
|
|
153
|
-
|
|
154
|
-
it('exits 2 on a missing or malformed version rather than passing vacuously', () => {
|
|
155
|
-
expect(runCheckGrace().code).toBe(2)
|
|
156
|
-
expect(runCheckGrace('not-a-version').code).toBe(2)
|
|
157
|
-
})
|
|
158
|
-
})
|
|
@@ -1,203 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests for the PreToolUse hook adapter helpers.
|
|
3
|
-
* Exercises extractHookTarget and evaluateGuardHook directly — no process spawn needed.
|
|
4
|
-
*/
|
|
5
|
-
import { describe, expect, it } from 'bun:test'
|
|
6
|
-
import { DEFAULT_GUARD_CONFIG } from './index'
|
|
7
|
-
import { evaluateGuardHook, extractHookTarget } from './guard-hook'
|
|
8
|
-
|
|
9
|
-
// ── extractHookTarget ─────────────────────────────────────────────────────────
|
|
10
|
-
|
|
11
|
-
describe('extractHookTarget', () => {
|
|
12
|
-
it('returns null for a non-object payload', () => {
|
|
13
|
-
expect(extractHookTarget(null)).toBeNull()
|
|
14
|
-
expect(extractHookTarget('string')).toBeNull()
|
|
15
|
-
expect(extractHookTarget(42)).toBeNull()
|
|
16
|
-
})
|
|
17
|
-
|
|
18
|
-
it('returns null for a non-Write/Edit/MultiEdit tool', () => {
|
|
19
|
-
expect(extractHookTarget({ tool_name: 'Bash', tool_input: { command: 'ls' } })).toBeNull()
|
|
20
|
-
})
|
|
21
|
-
|
|
22
|
-
it('extracts a Write payload with file_text', () => {
|
|
23
|
-
const result = extractHookTarget({
|
|
24
|
-
tool_name: 'Write',
|
|
25
|
-
tool_input: { file_path: 'src/Foo.tsx', file_text: 'const x = 1' },
|
|
26
|
-
})
|
|
27
|
-
expect(result).toEqual({ relPath: 'src/Foo.tsx', text: 'const x = 1' })
|
|
28
|
-
})
|
|
29
|
-
|
|
30
|
-
it('extracts a Write payload with content (fallback field)', () => {
|
|
31
|
-
const result = extractHookTarget({
|
|
32
|
-
tool_name: 'Write',
|
|
33
|
-
tool_input: { file_path: 'src/Bar.tsx', content: 'const y = 2' },
|
|
34
|
-
})
|
|
35
|
-
expect(result).toEqual({ relPath: 'src/Bar.tsx', text: 'const y = 2' })
|
|
36
|
-
})
|
|
37
|
-
|
|
38
|
-
it('extracts an Edit payload with new_string', () => {
|
|
39
|
-
const result = extractHookTarget({
|
|
40
|
-
tool_name: 'Edit',
|
|
41
|
-
tool_input: { file_path: 'src/A.tsx', new_string: 'const z = 3' },
|
|
42
|
-
})
|
|
43
|
-
expect(result).toEqual({ relPath: 'src/A.tsx', text: 'const z = 3' })
|
|
44
|
-
})
|
|
45
|
-
|
|
46
|
-
it('returns null for Edit without new_string', () => {
|
|
47
|
-
expect(
|
|
48
|
-
extractHookTarget({ tool_name: 'Edit', tool_input: { file_path: 'src/A.tsx' } }),
|
|
49
|
-
).toBeNull()
|
|
50
|
-
})
|
|
51
|
-
|
|
52
|
-
it('extracts a MultiEdit payload concatenating new_string entries', () => {
|
|
53
|
-
const result = extractHookTarget({
|
|
54
|
-
tool_name: 'MultiEdit',
|
|
55
|
-
tool_input: {
|
|
56
|
-
file_path: 'src/M.tsx',
|
|
57
|
-
edits: [{ new_string: 'part one' }, { new_string: 'part two' }],
|
|
58
|
-
},
|
|
59
|
-
})
|
|
60
|
-
expect(result).toEqual({ relPath: 'src/M.tsx', text: 'part one\npart two' })
|
|
61
|
-
})
|
|
62
|
-
|
|
63
|
-
it('extracts a MultiEdit payload accepting new_text as the alternate field name', () => {
|
|
64
|
-
const result = extractHookTarget({
|
|
65
|
-
tool_name: 'MultiEdit',
|
|
66
|
-
tool_input: {
|
|
67
|
-
file_path: 'src/N.tsx',
|
|
68
|
-
edits: [{ new_text: 'via new_text' }],
|
|
69
|
-
},
|
|
70
|
-
})
|
|
71
|
-
expect(result).toEqual({ relPath: 'src/N.tsx', text: 'via new_text' })
|
|
72
|
-
})
|
|
73
|
-
})
|
|
74
|
-
|
|
75
|
-
// ── evaluateGuardHook ─────────────────────────────────────────────────────────
|
|
76
|
-
|
|
77
|
-
describe('evaluateGuardHook', () => {
|
|
78
|
-
it('allows a Write payload with clean content', () => {
|
|
79
|
-
const result = evaluateGuardHook(
|
|
80
|
-
{
|
|
81
|
-
tool_name: 'Write',
|
|
82
|
-
tool_input: {
|
|
83
|
-
file_path: 'src/apps/dashboard/src/Clean.tsx',
|
|
84
|
-
file_text: 'const x = VX.surface.panel',
|
|
85
|
-
},
|
|
86
|
-
},
|
|
87
|
-
DEFAULT_GUARD_CONFIG,
|
|
88
|
-
)
|
|
89
|
-
expect(result.permissionDecision).toBe('allow')
|
|
90
|
-
expect(result.reason).toBeUndefined()
|
|
91
|
-
})
|
|
92
|
-
|
|
93
|
-
it('denies a Write payload containing a raw hex literal', () => {
|
|
94
|
-
const result = evaluateGuardHook(
|
|
95
|
-
{
|
|
96
|
-
tool_name: 'Write',
|
|
97
|
-
tool_input: {
|
|
98
|
-
file_path: 'src/Dashboard.tsx',
|
|
99
|
-
file_text: "const c = '#abc123'",
|
|
100
|
-
},
|
|
101
|
-
},
|
|
102
|
-
DEFAULT_GUARD_CONFIG,
|
|
103
|
-
)
|
|
104
|
-
expect(result.permissionDecision).toBe('deny')
|
|
105
|
-
expect(result.reason).toBeDefined()
|
|
106
|
-
expect(result.reason).toContain('raw-hex')
|
|
107
|
-
expect(result.reason).toContain('#abc123')
|
|
108
|
-
})
|
|
109
|
-
|
|
110
|
-
it('allows a non-file-writing tool (Bash)', () => {
|
|
111
|
-
const result = evaluateGuardHook(
|
|
112
|
-
{ tool_name: 'Bash', tool_input: { command: 'ls' } },
|
|
113
|
-
DEFAULT_GUARD_CONFIG,
|
|
114
|
-
)
|
|
115
|
-
expect(result.permissionDecision).toBe('allow')
|
|
116
|
-
})
|
|
117
|
-
|
|
118
|
-
it('allows an unparseable (null) payload', () => {
|
|
119
|
-
const result = evaluateGuardHook(null, DEFAULT_GUARD_CONFIG)
|
|
120
|
-
expect(result.permissionDecision).toBe('allow')
|
|
121
|
-
})
|
|
122
|
-
|
|
123
|
-
it('deny reason includes the file path and violation count', () => {
|
|
124
|
-
const result = evaluateGuardHook(
|
|
125
|
-
{
|
|
126
|
-
tool_name: 'Write',
|
|
127
|
-
tool_input: {
|
|
128
|
-
file_path: 'src/Page.tsx',
|
|
129
|
-
file_text: "const c = '#ff0000'\nconst d = '#00ff00'",
|
|
130
|
-
},
|
|
131
|
-
},
|
|
132
|
-
DEFAULT_GUARD_CONFIG,
|
|
133
|
-
)
|
|
134
|
-
expect(result.permissionDecision).toBe('deny')
|
|
135
|
-
expect(result.reason).toContain('src/Page.tsx')
|
|
136
|
-
expect(result.reason).toContain('2 off-palette')
|
|
137
|
-
})
|
|
138
|
-
|
|
139
|
-
it('allows an Edit payload with no violations', () => {
|
|
140
|
-
const result = evaluateGuardHook(
|
|
141
|
-
{
|
|
142
|
-
tool_name: 'Edit',
|
|
143
|
-
tool_input: { file_path: 'src/X.tsx', new_string: 'const ok = true' },
|
|
144
|
-
},
|
|
145
|
-
DEFAULT_GUARD_CONFIG,
|
|
146
|
-
)
|
|
147
|
-
expect(result.permissionDecision).toBe('allow')
|
|
148
|
-
})
|
|
149
|
-
|
|
150
|
-
it('allows an out-of-scope file even with violations (isInScope returns false)', () => {
|
|
151
|
-
const result = evaluateGuardHook(
|
|
152
|
-
{
|
|
153
|
-
tool_name: 'Write',
|
|
154
|
-
tool_input: { file_path: 'src/theme/palette.ts', file_text: "const c = '#abc123'" },
|
|
155
|
-
},
|
|
156
|
-
DEFAULT_GUARD_CONFIG,
|
|
157
|
-
{ isInScope: () => false },
|
|
158
|
-
)
|
|
159
|
-
expect(result.permissionDecision).toBe('allow')
|
|
160
|
-
})
|
|
161
|
-
|
|
162
|
-
it('denies an in-scope file with violations (isInScope returns true)', () => {
|
|
163
|
-
const result = evaluateGuardHook(
|
|
164
|
-
{
|
|
165
|
-
tool_name: 'Write',
|
|
166
|
-
tool_input: { file_path: 'src/Page.tsx', file_text: "const c = '#abc123'" },
|
|
167
|
-
},
|
|
168
|
-
DEFAULT_GUARD_CONFIG,
|
|
169
|
-
{ isInScope: () => true },
|
|
170
|
-
)
|
|
171
|
-
expect(result.permissionDecision).toBe('deny')
|
|
172
|
-
})
|
|
173
|
-
|
|
174
|
-
it('allows a write whose only findings are warnings', () => {
|
|
175
|
-
// A grace-minor kind must not block an edit, or the grace period would be the STRICTEST gate
|
|
176
|
-
// in the toolchain: CI green, hook refusing the write.
|
|
177
|
-
const result = evaluateGuardHook(
|
|
178
|
-
{
|
|
179
|
-
tool_name: 'Write',
|
|
180
|
-
tool_input: { file_path: 'src/Page.tsx', file_text: "const c = '#abc123'" },
|
|
181
|
-
},
|
|
182
|
-
{ ...DEFAULT_GUARD_CONFIG, severity: { 'raw-hex': 'warn' } },
|
|
183
|
-
)
|
|
184
|
-
expect(result.permissionDecision).toBe('allow')
|
|
185
|
-
})
|
|
186
|
-
|
|
187
|
-
it('denies on the error when a payload mixes warn and error kinds, listing only the error', () => {
|
|
188
|
-
const result = evaluateGuardHook(
|
|
189
|
-
{
|
|
190
|
-
tool_name: 'Write',
|
|
191
|
-
tool_input: {
|
|
192
|
-
file_path: 'src/Page.tsx',
|
|
193
|
-
file_text: "const C = () => <div style={{ color: '#abc123', gap: 12 }} />",
|
|
194
|
-
},
|
|
195
|
-
},
|
|
196
|
-
{ ...DEFAULT_GUARD_CONFIG, severity: { 'raw-hex': 'warn' } },
|
|
197
|
-
)
|
|
198
|
-
expect(result.permissionDecision).toBe('deny')
|
|
199
|
-
expect(result.reason).toContain('inline-spacing')
|
|
200
|
-
// The warn-tier kind is absent from the deny reason — it is not what blocked the write.
|
|
201
|
-
expect(result.reason).not.toContain('raw-hex')
|
|
202
|
-
})
|
|
203
|
-
})
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* BasaltNotifications — thin wrapper around Mantine `<Notifications />` with basalt defaults.
|
|
3
|
-
*
|
|
4
|
-
* Mount this inside BasaltProvider (typically in main.tsx, after BasaltProvider):
|
|
5
|
-
*
|
|
6
|
-
* ```tsx
|
|
7
|
-
* <BasaltProvider ...>
|
|
8
|
-
* <BasaltNotifications />
|
|
9
|
-
* <App />
|
|
10
|
-
* </BasaltProvider>
|
|
11
|
-
* ```
|
|
12
|
-
*
|
|
13
|
-
* It is NOT auto-mounted from BasaltProvider to keep @mantine/notifications out of the root barrel.
|
|
14
|
-
* This is an opt-in component — only add it when the app uses the notifications battery.
|
|
15
|
-
*
|
|
16
|
-
* NOTE: The composable `<BasaltOverlays>` (which will bundle notifications + modals + commands
|
|
17
|
-
* into a single mount point) arrives with the ./commands battery. For now, mount
|
|
18
|
-
* `<BasaltNotifications />` directly.
|
|
19
|
-
*
|
|
20
|
-
* @example
|
|
21
|
-
* import { BasaltNotifications } from 'basalt-ui/notifications'
|
|
22
|
-
* import { BasaltProvider } from 'basalt-ui'
|
|
23
|
-
*
|
|
24
|
-
* createRoot(root).render(
|
|
25
|
-
* <BasaltProvider>
|
|
26
|
-
* <BasaltNotifications />
|
|
27
|
-
* <App />
|
|
28
|
-
* </BasaltProvider>
|
|
29
|
-
* )
|
|
30
|
-
*/
|
|
31
|
-
import { Notifications } from '@mantine/notifications'
|
|
32
|
-
|
|
33
|
-
export type BasaltNotificationsProps = {
|
|
34
|
-
/** Toast position. Default: 'bottom-right'. */
|
|
35
|
-
position?:
|
|
36
|
-
| 'top-left'
|
|
37
|
-
| 'top-right'
|
|
38
|
-
| 'top-center'
|
|
39
|
-
| 'bottom-left'
|
|
40
|
-
| 'bottom-right'
|
|
41
|
-
| 'bottom-center'
|
|
42
|
-
/** Auto-close delay (ms). Default: 4000. */
|
|
43
|
-
autoClose?: number | false
|
|
44
|
-
/** Max visible toasts. Default: 5. */
|
|
45
|
-
limit?: number
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Mounts the Mantine Notifications overlay with basalt defaults.
|
|
50
|
-
* Render ONE instance per app — typically inside BasaltProvider, before the router.
|
|
51
|
-
*
|
|
52
|
-
* @example
|
|
53
|
-
* <BasaltProvider>
|
|
54
|
-
* <BasaltNotifications position="bottom-right" limit={5} />
|
|
55
|
-
* <RouterProvider router={router} />
|
|
56
|
-
* </BasaltProvider>
|
|
57
|
-
*/
|
|
58
|
-
export function BasaltNotifications({
|
|
59
|
-
position = 'bottom-right',
|
|
60
|
-
autoClose = 4000,
|
|
61
|
-
limit = 5,
|
|
62
|
-
}: BasaltNotificationsProps) {
|
|
63
|
-
return <Notifications position={position} autoClose={autoClose} limit={limit} />
|
|
64
|
-
}
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `composeInjectedCss` — the CSS-cascade ORDER of the four override blocks `BasaltBridge` injects.
|
|
3
|
-
* `buildPaletteCss`/`buildFontsCss`/`buildRadiusCss`/`buildDensityCss` all emit a bare `:root { ... }`
|
|
4
|
-
* block, so they tie on selector specificity; only document order decides which declaration a
|
|
5
|
-
* browser actually paints when two blocks declare the same `--vx-*`/`--basalt-font-*` var. Reordering
|
|
6
|
-
* the array `composeInjectedCss` concatenates silently breaks the density/radius/fonts knobs with
|
|
7
|
-
* every OTHER existing test still green (each builder's own test only checks its OWN isolated
|
|
8
|
-
* output) — this file is the one place that ordering itself is under test (Fix 5 / B5).
|
|
9
|
-
*
|
|
10
|
-
* The `BasaltBridge density wiring` block below covers the layer `composeInjectedCss` alone can't:
|
|
11
|
-
* that `BasaltBridge` (not just the pure `composeInjectedCss` helper) actually reads
|
|
12
|
-
* `theme.other.basaltDensity` off the RUNNING theme and feeds it through `buildDensityCss` into the
|
|
13
|
-
* injected `<style>`, end to end from `createBasaltTheme(undefined, { density })`. A DOM harness now
|
|
14
|
-
* exists (`tests/setup/dom.ts`, preloaded via the root `bunfig.toml`) — this suite still uses
|
|
15
|
-
* `react-dom/server`'s `renderToStaticMarkup` deliberately, since the injected `<style>` is plain
|
|
16
|
-
* text content on server-rendered markup, not something that needs a live DOM to assert on.
|
|
17
|
-
* Converting this to mount through the DOM harness would only be worth it if a future assertion here
|
|
18
|
-
* needed live DOM behavior (event handling, layout, effects) rather than the static markup string.
|
|
19
|
-
*/
|
|
20
|
-
import { describe, expect, test } from 'bun:test'
|
|
21
|
-
import { renderToStaticMarkup } from 'react-dom/server'
|
|
22
|
-
import { BasaltProvider, composeInjectedCss } from './index'
|
|
23
|
-
import { createBasaltTheme } from '../theme'
|
|
24
|
-
import { buildDensityCss, buildFontsCss, buildPaletteCss, buildRadiusCss } from '../tokens'
|
|
25
|
-
import { deriveRadius, deriveSpacing } from '../tokens/palette'
|
|
26
|
-
|
|
27
|
-
describe('composeInjectedCss orders overrides so density/radius/fonts win the cascade over the base palette', () => {
|
|
28
|
-
test('density block is textually LAST in the composed string — same :root selector, so document order decides', () => {
|
|
29
|
-
const base = buildPaletteCss()
|
|
30
|
-
const densityCss = buildDensityCss(deriveSpacing(3))
|
|
31
|
-
const composed = composeInjectedCss(base, '', '', densityCss)
|
|
32
|
-
expect(composed.indexOf(densityCss)).toBeGreaterThan(composed.indexOf(base))
|
|
33
|
-
})
|
|
34
|
-
|
|
35
|
-
test('a real declaration resolves to the LAST occurrence in composed order — the actual mechanism a browser cascade uses, not just index order', () => {
|
|
36
|
-
// base emits --vx-space-row-inset-x: 10px (level 0); density (level 3) overrides it to 13px.
|
|
37
|
-
const base = buildPaletteCss()
|
|
38
|
-
const densityCss = buildDensityCss(deriveSpacing(3))
|
|
39
|
-
const composed = composeInjectedCss(base, '', '', densityCss)
|
|
40
|
-
const matches = [...composed.matchAll(/--vx-space-row-inset-x: (\d+)px;/g)].map((m) => m[1])
|
|
41
|
-
expect(matches).toEqual(['10', '13'])
|
|
42
|
-
})
|
|
43
|
-
|
|
44
|
-
test('radius overrides resolve to their retuned value at the end of the composed string too', () => {
|
|
45
|
-
const base = buildPaletteCss()
|
|
46
|
-
const radiusCss = buildRadiusCss(deriveRadius(3))
|
|
47
|
-
const composed = composeInjectedCss(base, '', radiusCss, '')
|
|
48
|
-
const matches = [...composed.matchAll(/--vx-radius-card: (\d+)px;/g)].map((m) => m[1])
|
|
49
|
-
expect(matches.at(-1)).toBe(String(deriveRadius(3).card))
|
|
50
|
-
expect(matches.at(-1)).not.toBe(String(deriveRadius(0).card))
|
|
51
|
-
})
|
|
52
|
-
|
|
53
|
-
test('fonts overrides land at the end of the composed string too (base emits no --basalt-font-* at all)', () => {
|
|
54
|
-
const base = buildPaletteCss()
|
|
55
|
-
const fontsCss = buildFontsCss({ sans: 'CustomFont, sans-serif' })
|
|
56
|
-
const composed = composeInjectedCss(base, fontsCss, '', '')
|
|
57
|
-
expect(base).not.toContain('--basalt-font-sans')
|
|
58
|
-
expect(composed.trim().endsWith(fontsCss.trim())).toBe(true)
|
|
59
|
-
})
|
|
60
|
-
|
|
61
|
-
test('regression proof: reversing the order (the exact defect this file guards against) flips which value wins', () => {
|
|
62
|
-
const base = buildPaletteCss()
|
|
63
|
-
const densityCss = buildDensityCss(deriveSpacing(3))
|
|
64
|
-
// The OLD/broken shape this order could silently regress to — density concatenated BEFORE base.
|
|
65
|
-
const brokenComposed = [densityCss, base].filter(Boolean).join('\n')
|
|
66
|
-
const matches = [...brokenComposed.matchAll(/--vx-space-row-inset-x: (\d+)px;/g)].map(
|
|
67
|
-
(m) => m[1],
|
|
68
|
-
)
|
|
69
|
-
// Base now wins over density (LAST occurrence is the un-retuned 10, not 13) — the exact silent
|
|
70
|
-
// breakage `composeInjectedCss`'s fixed order exists to prevent.
|
|
71
|
-
expect(matches.at(-1)).toBe('10')
|
|
72
|
-
})
|
|
73
|
-
})
|
|
74
|
-
|
|
75
|
-
describe('BasaltBridge reads theme.other.basaltDensity and injects it end to end', () => {
|
|
76
|
-
test('a non-default density option lands its buildDensityCss output in the rendered <style>', () => {
|
|
77
|
-
const html = renderToStaticMarkup(
|
|
78
|
-
<BasaltProvider theme={createBasaltTheme(undefined, { density: -2 })}>
|
|
79
|
-
<div>content</div>
|
|
80
|
-
</BasaltProvider>,
|
|
81
|
-
)
|
|
82
|
-
// Fails if `BasaltBridge` stops reading `theme.other.basaltDensity` (e.g. reads a different key,
|
|
83
|
-
// or never passes it to `buildDensityCss`) — the exact retuned block would then be absent.
|
|
84
|
-
expect(html).toContain(buildDensityCss(deriveSpacing(-2)))
|
|
85
|
-
})
|
|
86
|
-
|
|
87
|
-
test('the default (level-0) theme injects no density override block at all', () => {
|
|
88
|
-
const html = renderToStaticMarkup(
|
|
89
|
-
<BasaltProvider theme={createBasaltTheme()}>
|
|
90
|
-
<div>content</div>
|
|
91
|
-
</BasaltProvider>,
|
|
92
|
-
)
|
|
93
|
-
// Fails if `BasaltBridge` injects a density block even when `theme.other.basaltDensity` is unset
|
|
94
|
-
// (`createBasaltTheme()`'s default path never sets it — `density-option.test.ts`). The BASE
|
|
95
|
-
// palette CSS already emits `--vx-space-row-inset-x` once (`frameworkDerived`'s own
|
|
96
|
-
// `DEFAULT_SPACE_VALUES` decls) — a stray SECOND occurrence is the signature of an unwanted
|
|
97
|
-
// density override block getting appended on top of it.
|
|
98
|
-
expect(html).not.toContain(buildDensityCss(deriveSpacing(-2)))
|
|
99
|
-
expect(html.split('--vx-space-row-inset-x').length - 1).toBe(1)
|
|
100
|
-
})
|
|
101
|
-
})
|
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The theme lab's theme-OBJECT seam (`./lab-theme.ts`).
|
|
3
|
-
*
|
|
4
|
-
* The lab used to apply a config through a `<style>` tag alone, which can only move CSS custom
|
|
5
|
-
* properties — so the Radius/Density sliders moved the CSS-module-styled surfaces and left
|
|
6
|
-
* `theme.radius`/`theme.spacing` and every numeric `defaultProps` frozen at level 0. Two things have
|
|
7
|
-
* to hold for the tool to be honest, and both are asserted here:
|
|
8
|
-
*
|
|
9
|
-
* 1. The delta an active override contributes really carries the theme-object numbers (`radius`,
|
|
10
|
-
* `spacing`, the `defaultProps` `buildTheme` bakes in), so they follow the sliders.
|
|
11
|
-
* 2. It carries NOTHING ELSE — no function-valued field (fresh closure per `buildTheme` call, would
|
|
12
|
-
* clobber a consumer's own `vars`/`classNames`), and no field the config doesn't actually move.
|
|
13
|
-
* That second half is what lets the delta be merged LAST, over a consumer theme, without eating
|
|
14
|
-
* the consumer's overrides.
|
|
15
|
-
*
|
|
16
|
-
* Expected values are read from `deriveRadius`/`deriveSpacing` rather than hardcoded — the LAW is
|
|
17
|
-
* locked by `theme/radius.test.ts` + `theme/spacing.test.ts`; what this file locks is that the law's
|
|
18
|
-
* output reaches the theme object the provider hands to `MantineProvider`.
|
|
19
|
-
*/
|
|
20
|
-
import { describe, expect, test } from 'bun:test'
|
|
21
|
-
import { applyLabOverride, themeOverrideDelta } from './lab-theme'
|
|
22
|
-
import { baseTheme, createBasaltTheme } from '../theme'
|
|
23
|
-
import { pxRem } from '../tokens'
|
|
24
|
-
import { DEFAULT_DERIVE_CONFIG } from '../tokens/derive'
|
|
25
|
-
import { deriveRadius, deriveSpacing } from '../tokens/palette'
|
|
26
|
-
import type { DeriveOverride } from '../theme-lab/derive-state'
|
|
27
|
-
|
|
28
|
-
const at = (radiusLevel: number, densityLevel: number): DeriveOverride => ({
|
|
29
|
-
config: DEFAULT_DERIVE_CONFIG,
|
|
30
|
-
radiusLevel,
|
|
31
|
-
densityLevel,
|
|
32
|
-
})
|
|
33
|
-
|
|
34
|
-
/** Read a dotted path out of a partial theme without a cast at every assertion. */
|
|
35
|
-
const pick = (theme: unknown, path: string): unknown =>
|
|
36
|
-
path.split('.').reduce<unknown>((acc, key) => {
|
|
37
|
-
if (acc === null || typeof acc !== 'object') return undefined
|
|
38
|
-
return (acc as Record<string, unknown>)[key]
|
|
39
|
-
}, theme)
|
|
40
|
-
|
|
41
|
-
describe('themeOverrideDelta', () => {
|
|
42
|
-
test('a theme against itself yields an empty override', () => {
|
|
43
|
-
expect(themeOverrideDelta(baseTheme, baseTheme)).toEqual({})
|
|
44
|
-
})
|
|
45
|
-
|
|
46
|
-
test('two independently built default themes still yield an empty override', () => {
|
|
47
|
-
// The guard against a false-positive delta: `buildTheme` allocates fresh `vars`/`classNames`
|
|
48
|
-
// closures every call, so a reference-comparing diff would report dozens of changed fields for
|
|
49
|
-
// two configs that are in fact identical — and then clobber them on every consumer.
|
|
50
|
-
expect(themeOverrideDelta(createBasaltTheme(), createBasaltTheme())).toEqual({})
|
|
51
|
-
})
|
|
52
|
-
|
|
53
|
-
test('never carries a function-valued field', () => {
|
|
54
|
-
const delta = themeOverrideDelta(baseTheme, createBasaltTheme(undefined, { radius: -2 }))
|
|
55
|
-
const functions: string[] = []
|
|
56
|
-
const walk = (node: unknown, path: string): void => {
|
|
57
|
-
if (typeof node === 'function') functions.push(path)
|
|
58
|
-
if (node === null || typeof node !== 'object' || Array.isArray(node)) return
|
|
59
|
-
for (const [key, value] of Object.entries(node)) walk(value, path ? `${path}.${key}` : key)
|
|
60
|
-
}
|
|
61
|
-
walk(delta, '')
|
|
62
|
-
expect(functions).toEqual([])
|
|
63
|
-
})
|
|
64
|
-
})
|
|
65
|
-
|
|
66
|
-
describe('a radius override reaches the theme object', () => {
|
|
67
|
-
const delta = themeOverrideDelta(baseTheme, createBasaltTheme(undefined, { radius: -2 }))
|
|
68
|
-
const radius = deriveRadius(-2)
|
|
69
|
-
|
|
70
|
-
test('the Mantine radius scale moves', () => {
|
|
71
|
-
expect(pick(delta, 'radius.md')).toBe(pxRem(radius.ctrl))
|
|
72
|
-
})
|
|
73
|
-
|
|
74
|
-
test("Badge's numeric defaultProps radius moves — the case a <style> tag can never reach", () => {
|
|
75
|
-
expect(pick(delta, 'components.Badge.defaultProps.radius')).toBe(radius.ctrl)
|
|
76
|
-
})
|
|
77
|
-
|
|
78
|
-
test('the floating tier moves with it (Tooltip/Popover/Modal/Notification)', () => {
|
|
79
|
-
expect(pick(delta, 'components.Tooltip.defaultProps.radius')).toBe(radius.floating)
|
|
80
|
-
expect(pick(delta, 'components.Popover.defaultProps.radius')).toBe(radius.floating)
|
|
81
|
-
expect(pick(delta, 'components.Modal.defaultProps.radius')).toBe(radius.floating)
|
|
82
|
-
expect(pick(delta, 'components.Notification.defaultProps.radius')).toBe(radius.floating)
|
|
83
|
-
})
|
|
84
|
-
|
|
85
|
-
test('Card/Paper are NOT in it — they read var(--vx-radius-card), so the CSS half owns them', () => {
|
|
86
|
-
expect(pick(delta, 'components.Card')).toBeUndefined()
|
|
87
|
-
expect(pick(delta, 'components.Paper')).toBeUndefined()
|
|
88
|
-
})
|
|
89
|
-
|
|
90
|
-
test('the resolved values ride along for the provider to inject as CSS', () => {
|
|
91
|
-
expect(pick(delta, 'other.basaltRadius')).toEqual(radius)
|
|
92
|
-
})
|
|
93
|
-
|
|
94
|
-
test('spacing is untouched — a radius level moves radius only', () => {
|
|
95
|
-
expect(pick(delta, 'spacing')).toBeUndefined()
|
|
96
|
-
expect(pick(delta, 'other.basaltDensity')).toBeUndefined()
|
|
97
|
-
})
|
|
98
|
-
})
|
|
99
|
-
|
|
100
|
-
describe('a density override reaches the theme object', () => {
|
|
101
|
-
const delta = themeOverrideDelta(baseTheme, createBasaltTheme(undefined, { density: -1 }))
|
|
102
|
-
const spacing = deriveSpacing(-1)
|
|
103
|
-
|
|
104
|
-
test("theme.spacing moves — every p='md' / gap='sm' in the app follows", () => {
|
|
105
|
-
expect(pick(delta, 'spacing.md')).toBe(pxRem(spacing.scale.md))
|
|
106
|
-
})
|
|
107
|
-
|
|
108
|
-
test("Timeline's bulletSize and Progress's size move", () => {
|
|
109
|
-
expect(pick(delta, 'components.Timeline.defaultProps.bulletSize')).toBe(
|
|
110
|
-
spacing.step.timelineBullet,
|
|
111
|
-
)
|
|
112
|
-
expect(pick(delta, 'components.Progress.defaultProps.size')).toBe(spacing.step.progressBarSize)
|
|
113
|
-
})
|
|
114
|
-
|
|
115
|
-
test('the resolved values ride along for the provider to inject as CSS', () => {
|
|
116
|
-
expect(pick(delta, 'other.basaltDensity')).toEqual(spacing)
|
|
117
|
-
})
|
|
118
|
-
})
|
|
119
|
-
|
|
120
|
-
describe('applyLabOverride', () => {
|
|
121
|
-
test('no override → the consumer theme merged onto the base, exactly as before', () => {
|
|
122
|
-
expect(applyLabOverride(undefined, null)).toBe(baseTheme)
|
|
123
|
-
expect(applyLabOverride({ primaryColor: 'teal' }, null)).toEqual(
|
|
124
|
-
createBasaltTheme({ primaryColor: 'teal' }),
|
|
125
|
-
)
|
|
126
|
-
})
|
|
127
|
-
|
|
128
|
-
test('an override at level 0 with the default palette changes nothing', () => {
|
|
129
|
-
expect(applyLabOverride(undefined, at(0, 0))).toEqual(baseTheme)
|
|
130
|
-
})
|
|
131
|
-
|
|
132
|
-
test('the override wins over a consumer theme that bakes in level-0 numbers', () => {
|
|
133
|
-
// The documented mount is `theme={createBasaltTheme()}` — a COMPLETE theme carrying every
|
|
134
|
-
// level-0 number. Merged last (which is `BasaltProvider`'s contract) it would clobber the lab
|
|
135
|
-
// right back to level 0; the delta is what out-cascades it.
|
|
136
|
-
const resolved = applyLabOverride(createBasaltTheme(), at(-2, -1))
|
|
137
|
-
expect(pick(resolved, 'components.Badge.defaultProps.radius')).toBe(deriveRadius(-2).ctrl)
|
|
138
|
-
expect(pick(resolved, 'spacing.md')).toBe(pxRem(deriveSpacing(-1).scale.md))
|
|
139
|
-
})
|
|
140
|
-
|
|
141
|
-
test("a consumer's own unrelated overrides survive the override", () => {
|
|
142
|
-
const resolved = applyLabOverride({ primaryColor: 'teal', other: { myFlag: true } }, at(-2, -1))
|
|
143
|
-
expect(pick(resolved, 'primaryColor')).toBe('teal')
|
|
144
|
-
expect(pick(resolved, 'other.myFlag')).toBe(true)
|
|
145
|
-
expect(pick(resolved, 'components.Badge.defaultProps.radius')).toBe(deriveRadius(-2).ctrl)
|
|
146
|
-
})
|
|
147
|
-
})
|