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
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `tokens:css` / `fonts:css` — split out of `src/cli/index.ts` (C2) so the dispatcher file holds
|
|
3
|
+
* routing only. Imports its shared plumbing (`readFrameworkVersion`, `packageRoot`, `readSource`,
|
|
4
|
+
* `readIfExists`) back from `./index`, this package's shared CLI helpers.
|
|
5
|
+
*/
|
|
6
|
+
import { mkdirSync, writeFileSync } from 'node:fs'
|
|
7
|
+
import { dirname, isAbsolute, relative, resolve } from 'node:path'
|
|
8
|
+
|
|
9
|
+
import { GENERATED_HEADER_LINE } from '../guard'
|
|
10
|
+
import { buildPaletteCss } from '../tokens'
|
|
11
|
+
import { packageRoot, readFrameworkVersion, readIfExists, readSource } from './index'
|
|
12
|
+
|
|
13
|
+
/** Read the value that follows a `--flag` in an argv slice; `undefined` when absent or terminal. */
|
|
14
|
+
function flagValue(flags: string[], name: string): string | undefined {
|
|
15
|
+
const i = flags.indexOf(name)
|
|
16
|
+
if (i === -1) return undefined
|
|
17
|
+
const value = flags[i + 1]
|
|
18
|
+
return value === undefined || value.startsWith('--') ? undefined : value
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* The generated-file header: the canonical marker line (imported from the guard, which owns it),
|
|
23
|
+
* then the version + invocation that produced the file.
|
|
24
|
+
*
|
|
25
|
+
* Both lines are load-bearing, not decoration — `checkSource` only exempts a stylesheet whose line
|
|
26
|
+
* 1 is the marker verbatim AND whose line 2 parses as this provenance line. Reword either half and
|
|
27
|
+
* basalt starts reporting its own output again (116 findings in rollhook's token sheet).
|
|
28
|
+
*/
|
|
29
|
+
function generatedHeader(version: string, command: string, flags: string[]): string {
|
|
30
|
+
const shown = flags.filter((f) => f !== '--check')
|
|
31
|
+
const invocation = shown.length === 0 ? command : `${command} ${shown.join(' ')}`
|
|
32
|
+
return `${GENERATED_HEADER_LINE}\n/* basalt-ui ${version} — \`basalt-ui ${invocation}\` */\n`
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Space- and number-normalize the argument list of a legacy color function so the emitted file
|
|
37
|
+
* survives a normal repo's formatter.
|
|
38
|
+
*
|
|
39
|
+
* This is FORMATTING ONLY and deliberately the CLI's single deviation from "print exactly what
|
|
40
|
+
* `buildPaletteCss` returned": `rgba(255,255,255,0.6)` and `rgba(255, 255, 255, 0.6)` are the same
|
|
41
|
+
* colour, the shipped palette emits the first form on the dark side and the second on the light
|
|
42
|
+
* side, and a consumer committing the output ate a lint-ignore entry for the difference. The token
|
|
43
|
+
* VALUES are untouched — nothing here can change what basalt's tokens are.
|
|
44
|
+
*
|
|
45
|
+
* Trailing zeros go the same way and for the same reason: prettier rewrites `0.10` → `0.1`, so the
|
|
46
|
+
* two `rgba(28, 25, 23, 0.10)` alphas in the light shadow tokens were the whole reason the one
|
|
47
|
+
* framework-free consumer still could not lint its committed sheet — `--fix` and `tokens:css
|
|
48
|
+
* --check` disagreed forever, and the lint-ignore entry survived two releases. Only a bare decimal
|
|
49
|
+
* literal is touched (never a `%`, a `var()` or a unit), and `0.10`/`0.1` are the same number.
|
|
50
|
+
*
|
|
51
|
+
* Exported for tests, so the expectation can be computed rather than restated.
|
|
52
|
+
*/
|
|
53
|
+
export function normalizeColorFunctions(css: string): string {
|
|
54
|
+
return css.replace(/\b(rgba?|hsla?)\(([^()]*)\)/g, (_match, fn: string, args: string) => {
|
|
55
|
+
const parts = args.split(',').map((part) => normalizeCssNumber(part.trim()))
|
|
56
|
+
return `${fn}(${parts.join(', ')})`
|
|
57
|
+
})
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/** `0.10` → `0.1`, `1.0` → `1`; anything that is not a bare decimal literal is returned verbatim. */
|
|
61
|
+
function normalizeCssNumber(arg: string): string {
|
|
62
|
+
if (!/^\d+\.\d+$/.test(arg)) return arg
|
|
63
|
+
return arg.replace(/\.?0+$/, '')
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/** A scheme-class emission uses this sentinel attribute, then rewrites it to a class selector. */
|
|
67
|
+
const SCHEME_CLASS_SENTINEL = 'data-basalt-scheme-class'
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Write (or drift-check) a generated stylesheet. `--check` makes no writes and exits 1 when the
|
|
71
|
+
* file on disk differs from what would be emitted — the CI gate for a committed `tokens:css`
|
|
72
|
+
* artifact, mirroring `sync --check`. Without `--out` the content goes to stdout unchanged.
|
|
73
|
+
*/
|
|
74
|
+
function emitGeneratedCss(content: string, flags: string[], cwd: string, command: string): number {
|
|
75
|
+
const out = flagValue(flags, '--out')
|
|
76
|
+
const check = flags.includes('--check')
|
|
77
|
+
if (out === undefined) {
|
|
78
|
+
if (check) {
|
|
79
|
+
console.error(
|
|
80
|
+
`${command}: --check needs --out <path> — there is nothing to compare stdout to.`,
|
|
81
|
+
)
|
|
82
|
+
return 1
|
|
83
|
+
}
|
|
84
|
+
process.stdout.write(content)
|
|
85
|
+
return 0
|
|
86
|
+
}
|
|
87
|
+
const target = isAbsolute(out) ? out : resolve(cwd, out)
|
|
88
|
+
const shown = relative(cwd, target) || target
|
|
89
|
+
if (check) {
|
|
90
|
+
const onDisk = readIfExists(target)
|
|
91
|
+
if (onDisk === null) {
|
|
92
|
+
console.error(
|
|
93
|
+
`✖ ${command} --check: ${shown} does not exist — run without --check to write it.`,
|
|
94
|
+
)
|
|
95
|
+
return 1
|
|
96
|
+
}
|
|
97
|
+
if (onDisk === content) {
|
|
98
|
+
console.log(`✓ ${command} --check: ${shown} is up to date.`)
|
|
99
|
+
return 0
|
|
100
|
+
}
|
|
101
|
+
const diskLines = onDisk.split('\n')
|
|
102
|
+
const wantLines = content.split('\n')
|
|
103
|
+
console.error(
|
|
104
|
+
`✖ ${command} --check: ${shown} differs from what \`basalt-ui ${command}\` emits today ` +
|
|
105
|
+
`(on disk ${diskLines.length} lines, emitted ${wantLines.length}) — re-run the same ` +
|
|
106
|
+
'command without --check and commit the result. A basalt-ui release moves the ' +
|
|
107
|
+
'`@generated` header line, so this is byte-exact — expect a no-op commit on every upgrade ' +
|
|
108
|
+
'that ships a committed generated sheet.',
|
|
109
|
+
)
|
|
110
|
+
return 1
|
|
111
|
+
}
|
|
112
|
+
mkdirSync(dirname(target), { recursive: true })
|
|
113
|
+
writeFileSync(target, content)
|
|
114
|
+
console.log(`wrote ${content.split('\n').length} lines → ${shown}`)
|
|
115
|
+
return 0
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* tokens:css — emit the `--vx-*` stylesheet, optionally retargeted.
|
|
120
|
+
*
|
|
121
|
+
* The escape hatch from installing anything: a static site runs this once (`bunx basalt-ui
|
|
122
|
+
* tokens:css --selector-attribute data-theme --out src/tokens.css`) and consumes basalt's token
|
|
123
|
+
* system as plain CSS, with no package in its dependency tree at all. `basalt-ui/tokens.css` is the
|
|
124
|
+
* same artifact for a consumer that does install; this command exists for the ones that shouldn't
|
|
125
|
+
* have to just to change a selector.
|
|
126
|
+
*
|
|
127
|
+
* It parses flags and calls `buildPaletteCss` for the token VALUES — the CLI and the API must not
|
|
128
|
+
* be able to disagree about what basalt's tokens are. What it adds is strictly file framing for an
|
|
129
|
+
* artifact a consumer COMMITS: the `@generated` header (the guard's skip marker), a trailing
|
|
130
|
+
* newline, and `rgba()` argument spacing. All three were reported by the one framework-free
|
|
131
|
+
* consumer as the reasons the output could not simply be committed.
|
|
132
|
+
*/
|
|
133
|
+
export function tokensCss(flags: string[], cwd: string = process.cwd()): number {
|
|
134
|
+
const attribute = flagValue(flags, '--selector-attribute')
|
|
135
|
+
const schemeClass = flagValue(flags, '--selector-class')
|
|
136
|
+
const lightClass = flagValue(flags, '--light-class')
|
|
137
|
+
const darkValue = flagValue(flags, '--dark-value')
|
|
138
|
+
const lightValue = flagValue(flags, '--light-value')
|
|
139
|
+
const defaultScheme = flagValue(flags, '--default-scheme')
|
|
140
|
+
|
|
141
|
+
const only = flagValue(flags, '--only')
|
|
142
|
+
|
|
143
|
+
if (defaultScheme !== undefined && !['dark', 'light', 'none'].includes(defaultScheme)) {
|
|
144
|
+
console.error(
|
|
145
|
+
`tokens:css: --default-scheme must be dark, light or none (got '${defaultScheme}')`,
|
|
146
|
+
)
|
|
147
|
+
return 1
|
|
148
|
+
}
|
|
149
|
+
if (only !== undefined && !['core', 'all'].includes(only)) {
|
|
150
|
+
console.error(`tokens:css: --only must be core or all (got '${only}')`)
|
|
151
|
+
return 1
|
|
152
|
+
}
|
|
153
|
+
if (schemeClass !== undefined && attribute !== undefined) {
|
|
154
|
+
console.error(
|
|
155
|
+
'tokens:css: --selector-class and --selector-attribute are alternatives — pass one.',
|
|
156
|
+
)
|
|
157
|
+
return 1
|
|
158
|
+
}
|
|
159
|
+
if (schemeClass !== undefined && /[^\w-]/.test(schemeClass)) {
|
|
160
|
+
console.error(
|
|
161
|
+
`tokens:css: --selector-class must be a plain CSS class name (got '${schemeClass}')`,
|
|
162
|
+
)
|
|
163
|
+
return 1
|
|
164
|
+
}
|
|
165
|
+
if (lightClass !== undefined && /[^\w-]/.test(lightClass)) {
|
|
166
|
+
console.error(`tokens:css: --light-class must be a plain CSS class name (got '${lightClass}')`)
|
|
167
|
+
return 1
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// A class selector is Tailwind's universal dark convention (`<html class="dark">`) and was
|
|
171
|
+
// reachable before only by parking dark on the bare `:root` via --default-scheme. `buildPaletteCss`
|
|
172
|
+
// emits attribute selectors, so the class form is produced by emitting against a sentinel
|
|
173
|
+
// attribute this CLI chose itself and rewriting exactly those selectors — a rewrite of strings
|
|
174
|
+
// the command generated deterministically, never of a token value.
|
|
175
|
+
const resolvedDarkValue = schemeClass !== undefined ? schemeClass : darkValue
|
|
176
|
+
const resolvedLightValue = schemeClass !== undefined ? (lightClass ?? 'light') : lightValue
|
|
177
|
+
const resolvedAttribute = schemeClass !== undefined ? SCHEME_CLASS_SENTINEL : attribute
|
|
178
|
+
|
|
179
|
+
const scheme = {
|
|
180
|
+
...(resolvedAttribute === undefined ? {} : { attribute: resolvedAttribute }),
|
|
181
|
+
...(resolvedDarkValue === undefined ? {} : { darkValue: resolvedDarkValue }),
|
|
182
|
+
...(resolvedLightValue === undefined ? {} : { lightValue: resolvedLightValue }),
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
let css = buildPaletteCss({
|
|
186
|
+
...(Object.keys(scheme).length === 0 ? {} : { scheme }),
|
|
187
|
+
...(defaultScheme === undefined
|
|
188
|
+
? {}
|
|
189
|
+
: { defaultScheme: defaultScheme as 'dark' | 'light' | 'none' }),
|
|
190
|
+
...(flags.includes('--media-fallback') ? { mediaFallback: true } : {}),
|
|
191
|
+
...(only === undefined ? {} : { only: only as 'core' | 'all' }),
|
|
192
|
+
// The tokens-only consumer is exactly the one who writes these names by hand, so they are also
|
|
193
|
+
// the one who wants the deprecated camelCase aliases gone — and this command is their only
|
|
194
|
+
// entry point. Without the flag the CLI and the API could disagree about what basalt's tokens
|
|
195
|
+
// are, which is the one thing this command is documented never to allow.
|
|
196
|
+
...(flags.includes('--no-legacy-aliases') ? { legacyAliases: false } : {}),
|
|
197
|
+
})
|
|
198
|
+
|
|
199
|
+
if (schemeClass !== undefined) {
|
|
200
|
+
css = css.replace(
|
|
201
|
+
new RegExp(`\\[${SCHEME_CLASS_SENTINEL}='([\\w-]+)'\\]`, 'g'),
|
|
202
|
+
(_match, value: string) => `.${value}`,
|
|
203
|
+
)
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
const version = readFrameworkVersion(packageRoot())
|
|
207
|
+
const content = `${generatedHeader(version, 'tokens:css', flags)}${normalizeColorFunctions(css)}\n`
|
|
208
|
+
return emitGeneratedCss(content, flags, cwd, 'tokens:css')
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/** Every `--basalt-font-*` declaration in the shipped stylesheet, in source order. */
|
|
212
|
+
function readShippedFontDecls(pkgRoot: string): { name: string; value: string }[] {
|
|
213
|
+
const css = readSource(pkgRoot, 'dist/styles.css') ?? readSource(pkgRoot, 'src/styles.css')
|
|
214
|
+
if (css === null) return []
|
|
215
|
+
const decls: { name: string; value: string }[] = []
|
|
216
|
+
for (const match of css.matchAll(/(--basalt-font[\w-]*)\s*:\s*([^;]+);/g)) {
|
|
217
|
+
decls.push({
|
|
218
|
+
name: match[1] as string,
|
|
219
|
+
value: (match[2] as string).replace(/\s+/g, ' ').trim(),
|
|
220
|
+
})
|
|
221
|
+
}
|
|
222
|
+
return decls
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* fonts:css — emit the shipped `--basalt-font-*` stacks as plain CSS.
|
|
227
|
+
*
|
|
228
|
+
* The typeface half of the framework-free route, which had no supported path at all: `tokens.css`
|
|
229
|
+
* emits no font vars, `styles.css` is the one place the defaults live and a framework-free consumer
|
|
230
|
+
* is told not to import it, and `buildFontsCss` returns `''` unless the caller already knows the
|
|
231
|
+
* stacks. The one non-Mantine consumer lost its font identity entirely and hardcoded the stacks —
|
|
232
|
+
* which the theme guard then flagged as `raw-font-family`.
|
|
233
|
+
*
|
|
234
|
+
* The declarations are READ from the shipped stylesheet rather than restated here, so this command
|
|
235
|
+
* and `basalt-ui/styles.css` can never name different typefaces. Note the fonts themselves are
|
|
236
|
+
* `@fontsource-variable/*` packages: without them the stacks fall through to their own system
|
|
237
|
+
* fallbacks, which is the intended framework-free behaviour.
|
|
238
|
+
*/
|
|
239
|
+
export function fontsCss(flags: string[], cwd: string = process.cwd()): number {
|
|
240
|
+
const pkgRoot = packageRoot()
|
|
241
|
+
const decls = readShippedFontDecls(pkgRoot)
|
|
242
|
+
if (decls.length === 0) {
|
|
243
|
+
console.error(
|
|
244
|
+
'fonts:css: could not read the shipped font stacks from styles.css — this is a packaging ' +
|
|
245
|
+
'bug in basalt-ui, not a config error.',
|
|
246
|
+
)
|
|
247
|
+
return 1
|
|
248
|
+
}
|
|
249
|
+
const body = `:root {\n${decls.map((d) => ` ${d.name}: ${d.value};`).join('\n')}\n}\n`
|
|
250
|
+
const header = generatedHeader(readFrameworkVersion(pkgRoot), 'fonts:css', flags)
|
|
251
|
+
return emitGeneratedCss(`${header}${body}`, flags, cwd, 'fonts:css')
|
|
252
|
+
}
|
|
@@ -19,13 +19,15 @@
|
|
|
19
19
|
*/
|
|
20
20
|
import { useEffect, useState } from 'react'
|
|
21
21
|
import { Box, Group, Kbd, Stack, Text, Title } from '@mantine/core'
|
|
22
|
+
import type { BasaltProps } from '../common/props'
|
|
23
|
+
import { cx } from '../common/props'
|
|
22
24
|
import { toShortcutList } from './projectors'
|
|
23
25
|
import { detectMac, parseShortcut } from './shortcut-format'
|
|
24
26
|
import { VX } from '../tokens'
|
|
25
27
|
|
|
26
28
|
// ── ShortcutsHelpProps ────────────────────────────────────────────────────────
|
|
27
29
|
|
|
28
|
-
export type ShortcutsHelpProps = {
|
|
30
|
+
export type ShortcutsHelpProps = BasaltProps & {
|
|
29
31
|
/** Section title. Default: 'Keyboard shortcuts'. */
|
|
30
32
|
title?: string
|
|
31
33
|
/** Max-width passthrough (Mantine style prop). */
|
|
@@ -69,7 +71,12 @@ function ShortcutRow({
|
|
|
69
71
|
* @example
|
|
70
72
|
* <ShortcutsHelp title="Keyboard shortcuts" />
|
|
71
73
|
*/
|
|
72
|
-
export function ShortcutsHelp({
|
|
74
|
+
export function ShortcutsHelp({
|
|
75
|
+
title = 'Keyboard shortcuts',
|
|
76
|
+
maw,
|
|
77
|
+
className,
|
|
78
|
+
style,
|
|
79
|
+
}: ShortcutsHelpProps) {
|
|
73
80
|
// Default false — SSR and first client render produce non-mac glyphs (no hydration mismatch).
|
|
74
81
|
// Post-mount effect flips to true on macOS, triggering a single client-only re-render.
|
|
75
82
|
const [isMac, setIsMac] = useState(false)
|
|
@@ -94,7 +101,7 @@ export function ShortcutsHelp({ title = 'Keyboard shortcuts', maw }: ShortcutsHe
|
|
|
94
101
|
}
|
|
95
102
|
|
|
96
103
|
return (
|
|
97
|
-
<Box maw={maw}>
|
|
104
|
+
<Box maw={maw} className={cx(className)} {...(style !== undefined && { style })}>
|
|
98
105
|
<Title order={5} mb="sm">
|
|
99
106
|
{title}
|
|
100
107
|
</Title>
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
*/
|
|
25
25
|
import type { ReactNode } from 'react'
|
|
26
26
|
import type { Slot } from '../register'
|
|
27
|
+
import { isDev } from '../common/is-dev'
|
|
27
28
|
|
|
28
29
|
// ── Context ───────────────────────────────────────────────────────────────────
|
|
29
30
|
|
|
@@ -171,8 +172,7 @@ export function defineCommand(cmd: Command): Command {
|
|
|
171
172
|
export function runCommand(id: CommandId, ctx?: CommandRunContext): void | Promise<void> {
|
|
172
173
|
const cmd = activeCommands[id as string]
|
|
173
174
|
if (cmd === undefined) {
|
|
174
|
-
if (
|
|
175
|
-
console.warn(`[basalt] runCommand: no command registered for "${id}"`)
|
|
175
|
+
if (isDev()) console.warn(`[basalt] runCommand: no command registered for "${id}"`)
|
|
176
176
|
return
|
|
177
177
|
}
|
|
178
178
|
return cmd.run(ctx)
|
|
@@ -26,7 +26,10 @@
|
|
|
26
26
|
* overlays.open('nonexistent', {}) // ✗ tsc error
|
|
27
27
|
*/
|
|
28
28
|
import type { ReactNode } from 'react'
|
|
29
|
+
import { useEffect } from 'react'
|
|
30
|
+
import { missingLayer } from '../common/errors'
|
|
29
31
|
import type { Slot } from '../register'
|
|
32
|
+
import { isDev } from '../common/is-dev'
|
|
30
33
|
|
|
31
34
|
// ── Lazy @mantine/modals resolution ───────────────────────────────────────────
|
|
32
35
|
// @mantine/modals is an OPTIONAL peer — never imported at module evaluation time, so importing
|
|
@@ -43,6 +46,60 @@ function loadModals(): Promise<ModalsSingleton | undefined> {
|
|
|
43
46
|
return modalsPromise
|
|
44
47
|
}
|
|
45
48
|
|
|
49
|
+
// ── Modals-layer availability ─────────────────────────────────────────────────
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* How many `ModalsProvider`s are live right now — a COUNTER, not a flag, for the same reason
|
|
53
|
+
* `notifications/mount-guard.ts` counts: two overlapping mounts are normal (a route swap mounts the
|
|
54
|
+
* next `BasaltOverlays` before unmounting the previous one), and a last-write-wins boolean reports
|
|
55
|
+
* the teardown of the OLD one as "no layer" while the new one is serving.
|
|
56
|
+
*
|
|
57
|
+
* It is the availability test `overlays.confirm` runs, because `@mantine/modals`' imperative API is
|
|
58
|
+
* a window event bus: with nothing subscribed the dialog never appears and the promise never
|
|
59
|
+
* settles. The previous version read `BasaltOverlays`' own `modals` flag instead, which refused the
|
|
60
|
+
* call whenever a mounted shell passed `modals={false}` — even though the consumer had mounted their
|
|
61
|
+
* own `<ModalsProvider>`, which is the very remedy the error message names.
|
|
62
|
+
*/
|
|
63
|
+
let mountedModalsProviders = 0
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Declare that a `@mantine/modals` `<ModalsProvider>` is mounted and serving, and get back the
|
|
67
|
+
* function that retracts it. `BasaltOverlays` calls this for its own provider; a consumer mounting
|
|
68
|
+
* the provider THEMSELVES (with `<BasaltOverlays modals={false} />`, or with no `BasaltOverlays` at
|
|
69
|
+
* all) calls it too, or `overlays.confirm` cannot tell their provider from no provider and rejects.
|
|
70
|
+
*
|
|
71
|
+
* There is no way to detect the provider from outside React — its context is only readable through
|
|
72
|
+
* `useModals()`, and `confirm` is an imperative call with no component to read it from. So the
|
|
73
|
+
* registration is explicit.
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* useEffect(() => registerModalsProvider(), [])
|
|
77
|
+
* // …beside your own <ModalsProvider> mount.
|
|
78
|
+
*/
|
|
79
|
+
export function registerModalsProvider(): () => void {
|
|
80
|
+
mountedModalsProviders++
|
|
81
|
+
let released = false
|
|
82
|
+
return () => {
|
|
83
|
+
// Idempotent: an effect cleanup React runs twice (StrictMode remount) must not drive the count
|
|
84
|
+
// below the number of providers actually on screen.
|
|
85
|
+
if (released) return
|
|
86
|
+
released = true
|
|
87
|
+
mountedModalsProviders--
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Internal — `BasaltOverlays` registers its OWN lazy `ModalsProvider` here, and only when it
|
|
93
|
+
* actually renders one. Deliberately NOT on the `./commands` barrel (internal wiring only, same as
|
|
94
|
+
* `notifications/mount-guard`); the consumer-facing half is {@link registerModalsProvider}.
|
|
95
|
+
*/
|
|
96
|
+
export function useModalsLayer(enabled: boolean): void {
|
|
97
|
+
useEffect(() => {
|
|
98
|
+
if (!enabled) return
|
|
99
|
+
return registerModalsProvider()
|
|
100
|
+
}, [enabled])
|
|
101
|
+
}
|
|
102
|
+
|
|
46
103
|
// ── Overlay + OverlayMap ──────────────────────────────────────────────────────
|
|
47
104
|
|
|
48
105
|
/**
|
|
@@ -138,6 +195,143 @@ export function defineOverlay<P = Record<string, unknown>>(overlay: Overlay<P>):
|
|
|
138
195
|
return overlay
|
|
139
196
|
}
|
|
140
197
|
|
|
198
|
+
// ── confirm ───────────────────────────────────────────────────────────────────
|
|
199
|
+
|
|
200
|
+
/** Options for {@link overlays.confirm} — a two-button dialog that resolves to the answer. */
|
|
201
|
+
export type ConfirmOptions = {
|
|
202
|
+
/** Dialog title — the question itself ("Delete photo.jpg?"), not a category. */
|
|
203
|
+
title: ReactNode
|
|
204
|
+
/** Optional body under the title. A plain string is fine; a ReactNode renders as-is. */
|
|
205
|
+
body?: ReactNode
|
|
206
|
+
/** Confirm button label. Default: 'Confirm'. */
|
|
207
|
+
confirmLabel?: string
|
|
208
|
+
/** Cancel button label. Default: 'Cancel'. */
|
|
209
|
+
cancelLabel?: string
|
|
210
|
+
/** Paint the confirm button in the destructive tone (the theme's derived `red` family). */
|
|
211
|
+
danger?: boolean
|
|
212
|
+
/** Runs once, before the promise resolves `true`. */
|
|
213
|
+
onConfirm: () => void
|
|
214
|
+
/** Runs once on cancel, escape, click-outside or the close button — every non-confirm exit. */
|
|
215
|
+
onCancel?: () => void
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/** Options for {@link overlays.confirmDelete} — the delete idiom over {@link ConfirmOptions}. */
|
|
219
|
+
export type ConfirmDeleteOptions = {
|
|
220
|
+
/**
|
|
221
|
+
* The singular noun for what is being deleted — `'item'`, `'photo'`, `'API key'`. Pluralised by
|
|
222
|
+
* appending `s` when `count` is not 1; a noun that does not pluralise that way calls
|
|
223
|
+
* {@link overlays.confirm} directly with its own title.
|
|
224
|
+
*/
|
|
225
|
+
subject: string
|
|
226
|
+
/** How many. Default: 1. */
|
|
227
|
+
count?: number
|
|
228
|
+
/** Runs once, before the promise resolves `true`. */
|
|
229
|
+
onConfirm: () => void
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* Open a confirm dialog and resolve to the user's answer — `true` on confirm, `false` on every
|
|
234
|
+
* other exit (cancel, escape, click-outside, the close button). `onConfirm`/`onCancel` fire exactly
|
|
235
|
+
* once each at most, before the promise settles.
|
|
236
|
+
*
|
|
237
|
+
* Rejects with a named `[basalt]` error when the modals layer cannot serve the dialog — the
|
|
238
|
+
* `@mantine/modals` peer is absent, or no `ModalsProvider` is registered as live (see
|
|
239
|
+
* {@link registerModalsProvider}). Both would otherwise leave the promise pending forever: the
|
|
240
|
+
* imperative API is a window event bus with nothing subscribed.
|
|
241
|
+
*
|
|
242
|
+
* @example
|
|
243
|
+
* if (await overlays.confirm({ title: 'Discard draft?', onConfirm: () => reset() })) navigate('/')
|
|
244
|
+
*
|
|
245
|
+
* @example
|
|
246
|
+
* await overlays.confirm({
|
|
247
|
+
* title: 'Revoke access?',
|
|
248
|
+
* body: 'The key stops working immediately.',
|
|
249
|
+
* confirmLabel: 'Revoke',
|
|
250
|
+
* danger: true,
|
|
251
|
+
* onConfirm: () => revoke(),
|
|
252
|
+
* })
|
|
253
|
+
*/
|
|
254
|
+
async function confirm(options: ConfirmOptions): Promise<boolean> {
|
|
255
|
+
const {
|
|
256
|
+
title,
|
|
257
|
+
body,
|
|
258
|
+
confirmLabel = 'Confirm',
|
|
259
|
+
cancelLabel = 'Cancel',
|
|
260
|
+
danger = false,
|
|
261
|
+
onConfirm,
|
|
262
|
+
onCancel,
|
|
263
|
+
} = options
|
|
264
|
+
|
|
265
|
+
const modals = await loadModals()
|
|
266
|
+
if (modals === undefined) {
|
|
267
|
+
throw new Error(
|
|
268
|
+
missingLayer(
|
|
269
|
+
'overlays.confirm',
|
|
270
|
+
'@mantine/modals',
|
|
271
|
+
'install the @mantine/modals peer and mount <BasaltOverlays>',
|
|
272
|
+
),
|
|
273
|
+
)
|
|
274
|
+
}
|
|
275
|
+
if (mountedModalsProviders === 0) {
|
|
276
|
+
throw new Error(
|
|
277
|
+
missingLayer(
|
|
278
|
+
'overlays.confirm',
|
|
279
|
+
'a mounted <ModalsProvider>',
|
|
280
|
+
'drop `modals={false}` from <BasaltOverlays>, or mount <ModalsProvider> yourself and call ' +
|
|
281
|
+
'registerModalsProvider() from an effect for as long as it is up',
|
|
282
|
+
),
|
|
283
|
+
)
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
return new Promise<boolean>((resolve) => {
|
|
287
|
+
// Mantine fires onCancel AND onClose on the cancel button, and onClose alone on escape /
|
|
288
|
+
// click-outside / the X — so the answer is settled once here and every later edge is a no-op.
|
|
289
|
+
let settled = false
|
|
290
|
+
const settle = (confirmed: boolean): void => {
|
|
291
|
+
if (settled) return
|
|
292
|
+
settled = true
|
|
293
|
+
try {
|
|
294
|
+
if (confirmed) onConfirm()
|
|
295
|
+
else onCancel?.()
|
|
296
|
+
} finally {
|
|
297
|
+
resolve(confirmed)
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
modals.openConfirmModal({
|
|
302
|
+
title,
|
|
303
|
+
...(body !== undefined && { children: body }),
|
|
304
|
+
labels: { confirm: confirmLabel, cancel: cancelLabel },
|
|
305
|
+
// The destructive tone is the theme's `red` family (derived from the palette, bound to the
|
|
306
|
+
// --vx-* status tokens by cssVariablesResolver) — never a raw color.
|
|
307
|
+
...(danger && { confirmProps: { color: 'red' } }),
|
|
308
|
+
onConfirm: () => settle(true),
|
|
309
|
+
onCancel: () => settle(false),
|
|
310
|
+
onClose: () => settle(false),
|
|
311
|
+
})
|
|
312
|
+
})
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
/**
|
|
316
|
+
* The delete confirmation every app writes — `confirm` with the destructive tone, the `Delete`
|
|
317
|
+
* label and a counted title already filled in.
|
|
318
|
+
*
|
|
319
|
+
* @example
|
|
320
|
+
* overlays.confirmDelete({ subject: 'item', count: 3, onConfirm: () => removeSelected() })
|
|
321
|
+
* // → "Delete 3 items?"
|
|
322
|
+
*/
|
|
323
|
+
function confirmDelete(options: ConfirmDeleteOptions): Promise<boolean> {
|
|
324
|
+
const { subject, count = 1, onConfirm } = options
|
|
325
|
+
const what = count === 1 ? subject : `${count} ${subject}s`
|
|
326
|
+
return confirm({
|
|
327
|
+
title: `Delete ${what}?`,
|
|
328
|
+
body: 'This cannot be undone.',
|
|
329
|
+
confirmLabel: 'Delete',
|
|
330
|
+
danger: true,
|
|
331
|
+
onConfirm,
|
|
332
|
+
})
|
|
333
|
+
}
|
|
334
|
+
|
|
141
335
|
// ── overlays controller ───────────────────────────────────────────────────────
|
|
142
336
|
|
|
143
337
|
/**
|
|
@@ -155,8 +349,13 @@ type OverlayProps<K extends OverlayKey> = Overlays extends { [_K in K]: Overlay<
|
|
|
155
349
|
* quick-edit panels). For shareable/back-button/refreshable overlays use route masks via
|
|
156
350
|
* ./router-tanstack.
|
|
157
351
|
*
|
|
352
|
+
* `open` needs a REGISTERED overlay; `confirm`/`confirmDelete` need none — they are the two-button
|
|
353
|
+
* dialog every app was hand-writing as a registry entry.
|
|
354
|
+
*
|
|
158
355
|
* @example
|
|
159
356
|
* overlays.open('confirm:delete', { name: 'photo.jpg' })
|
|
357
|
+
* await overlays.confirm({ title: 'Discard draft?', danger: true, onConfirm: () => reset() })
|
|
358
|
+
* overlays.confirmDelete({ subject: 'item', count: 3, onConfirm: () => removeSelected() })
|
|
160
359
|
* overlays.close()
|
|
161
360
|
*/
|
|
162
361
|
export const overlays = {
|
|
@@ -173,7 +372,7 @@ export const overlays = {
|
|
|
173
372
|
open<K extends OverlayKey>(key: K, props: OverlayProps<K>): void {
|
|
174
373
|
const spec = activeOverlays[key as string]
|
|
175
374
|
if (spec === undefined) {
|
|
176
|
-
if (
|
|
375
|
+
if (isDev())
|
|
177
376
|
console.warn(`[basalt] overlays.open: no overlay registered for "${String(key)}"`)
|
|
178
377
|
return
|
|
179
378
|
}
|
|
@@ -185,6 +384,22 @@ export const overlays = {
|
|
|
185
384
|
)
|
|
186
385
|
},
|
|
187
386
|
|
|
387
|
+
/**
|
|
388
|
+
* Open a confirm dialog and resolve to the answer — see {@link confirm}.
|
|
389
|
+
*
|
|
390
|
+
* @example
|
|
391
|
+
* const ok = await overlays.confirm({ title: 'Discard draft?', onConfirm: () => reset() })
|
|
392
|
+
*/
|
|
393
|
+
confirm,
|
|
394
|
+
|
|
395
|
+
/**
|
|
396
|
+
* The one-line delete idiom over {@link confirm} — see {@link confirmDelete}.
|
|
397
|
+
*
|
|
398
|
+
* @example
|
|
399
|
+
* overlays.confirmDelete({ subject: 'item', count: 3, onConfirm: () => removeSelected() })
|
|
400
|
+
*/
|
|
401
|
+
confirmDelete,
|
|
402
|
+
|
|
188
403
|
/**
|
|
189
404
|
* Close all open overlays (delegates to modals.closeAll()).
|
|
190
405
|
*
|
package/src/commands/index.ts
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* interface BasaltRegister { commands: typeof COMMANDS }
|
|
20
20
|
* }
|
|
21
21
|
*
|
|
22
|
-
* // main.tsx — mount composable overlays
|
|
22
|
+
* // main.tsx — mount composable overlays:
|
|
23
23
|
* import { BasaltOverlays } from 'basalt-ui/commands'
|
|
24
24
|
* import '@mantine/spotlight/styles.layer.css'
|
|
25
25
|
* <BasaltProvider><BasaltOverlays><App /></BasaltOverlays></BasaltProvider>
|
|
@@ -28,6 +28,15 @@
|
|
|
28
28
|
* import { runCommand } from 'basalt-ui/commands'
|
|
29
29
|
* runCommand('file:save')
|
|
30
30
|
*
|
|
31
|
+
* // usage.ts — the registry-free confirm dialog:
|
|
32
|
+
* import { overlays } from 'basalt-ui/commands'
|
|
33
|
+
* const ok = await overlays.confirm({ title: 'Discard draft?', onConfirm: () => reset() })
|
|
34
|
+
* overlays.confirmDelete({ subject: 'item', count: 3, onConfirm: () => removeSelected() })
|
|
35
|
+
*
|
|
36
|
+
* // Mounting ModalsProvider yourself instead of letting <BasaltOverlays> do it:
|
|
37
|
+
* import { registerModalsProvider } from 'basalt-ui/commands'
|
|
38
|
+
* useEffect(() => registerModalsProvider(), [])
|
|
39
|
+
*
|
|
31
40
|
* // Open/close Spotlight programmatically:
|
|
32
41
|
* import { openSpotlight, closeSpotlight } from 'basalt-ui/commands'
|
|
33
42
|
* openSpotlight()
|
|
@@ -49,9 +58,12 @@ export {
|
|
|
49
58
|
defineOverlays,
|
|
50
59
|
defineOverlay,
|
|
51
60
|
overlays,
|
|
61
|
+
registerModalsProvider,
|
|
52
62
|
type Overlay,
|
|
53
63
|
type OverlayMap,
|
|
54
64
|
type OverlayKey,
|
|
65
|
+
type ConfirmOptions,
|
|
66
|
+
type ConfirmDeleteOptions,
|
|
55
67
|
} from './define-overlays'
|
|
56
68
|
|
|
57
69
|
// ── Projectors ────────────────────────────────────────────────────────────────
|
|
@@ -67,6 +79,15 @@ export {
|
|
|
67
79
|
type HotkeyBinding,
|
|
68
80
|
} from './projectors'
|
|
69
81
|
|
|
82
|
+
// ── Imperative shell handles (setColorScheme/toggleSidebar) ──────────────────
|
|
83
|
+
export {
|
|
84
|
+
setColorScheme,
|
|
85
|
+
toggleSidebar,
|
|
86
|
+
type ColorScheme,
|
|
87
|
+
type ColorSchemeSetter,
|
|
88
|
+
type SidebarToggle,
|
|
89
|
+
} from './shell-bridge'
|
|
90
|
+
|
|
70
91
|
// ── Shortcut format utils ─────────────────────────────────────────────────────
|
|
71
92
|
export { parseShortcut, detectMac, formatShortcutDisplay } from './shortcut-format'
|
|
72
93
|
|