basalt-ui 1.26.0 → 1.28.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 +23 -23
- package/CHANGELOG.md +67 -0
- package/MIGRATING.md +896 -37
- package/README.md +33 -3
- package/agent/rules/basalt-batteries.md +25 -10
- package/agent/rules/basalt-controls.md +73 -43
- package/agent/rules/basalt-mantine.md +17 -6
- package/agent/rules/basalt-state.md +5 -0
- package/agent/rules/basalt-tokens.md +1 -1
- package/configs/oxlint-plugin.js +1286 -73
- package/configs/oxlint-plugin.test.ts +1338 -29
- package/configs/oxlint.json +12 -5
- 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-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/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 +8 -5
- package/dist/agent-chat/thread-feed-row.d.ts +2 -1
- package/dist/agent-chat/thread-feed-row.d.ts.map +1 -1
- package/dist/agent-chat/thread-feed-row.js +92 -92
- package/dist/agent-chat/thread-feed.d.ts +3 -2
- package/dist/agent-chat/thread-feed.d.ts.map +1 -1
- package/dist/agent-chat/thread-feed.js +8 -3
- 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/charts/hooks/useBandPlot.d.ts.map +1 -1
- package/dist/charts/hooks/useBandPlot.js +15 -8
- package/dist/charts/index.d.ts +8 -7
- package/dist/charts/index.d.ts.map +1 -1
- package/dist/charts/index.js +45 -5
- 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 +12 -6
- 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 +6 -5
- package/dist/charts/kinds/DualPanel.d.ts.map +1 -1
- package/dist/charts/kinds/DualPanel.js +36 -8
- 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 +12 -8
- 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 +11 -2
- package/dist/charts/primitives/Axes.d.ts.map +1 -1
- package/dist/charts/primitives/Axes.js +15 -5
- 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 +27 -2
- package/dist/charts/primitives/ChartCard.d.ts.map +1 -1
- package/dist/charts/primitives/ChartCard.js +37 -17
- 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 +45 -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 +77 -4
- 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 +92 -2
- package/dist/charts/utils/format.d.ts.map +1 -1
- package/dist/charts/utils/format.js +64 -1
- 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/index.d.ts.map +1 -1
- package/dist/cli/index.js +2 -2
- 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 +10 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +3 -1
- package/dist/commands/overlays-mount.d.ts +13 -6
- package/dist/commands/overlays-mount.d.ts.map +1 -1
- package/dist/commands/overlays-mount.js +23 -14
- package/dist/common/errors.d.ts +34 -0
- package/dist/common/errors.d.ts.map +1 -0
- package/dist/common/errors.js +36 -0
- package/dist/common/index.d.ts +15 -0
- package/dist/common/index.d.ts.map +1 -0
- package/dist/common/index.js +29 -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/connectivity/connectivity-indicator.d.ts +3 -1
- package/dist/connectivity/connectivity-indicator.d.ts.map +1 -1
- package/dist/connectivity/connectivity-indicator.js +3 -1
- package/dist/connectivity/connectivity-provider.d.ts.map +1 -1
- package/dist/connectivity/connectivity-provider.js +4 -1
- package/dist/connectivity/index.d.ts +1 -0
- package/dist/connectivity/index.d.ts.map +1 -1
- package/dist/connectivity/types.d.ts +2 -2
- package/dist/connectivity/types.d.ts.map +1 -1
- package/dist/connectivity/use-connectivity.d.ts.map +1 -1
- 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.map +1 -1
- package/dist/content/markdown.js +2 -0
- 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 +49 -6
- 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 +13 -3
- package/dist/controls/enum-filter.d.ts.map +1 -1
- package/dist/controls/enum-filter.js +32 -15
- package/dist/controls/filter-context.d.ts +15 -6
- 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 +3 -0
- package/dist/controls/index.d.ts.map +1 -1
- package/dist/controls/index.js +6 -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 +124 -22
- package/dist/controls/number-filter.d.ts +28 -0
- package/dist/controls/number-filter.d.ts.map +1 -0
- package/dist/controls/number-filter.js +172 -0
- 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 +20 -5
- package/dist/controls/range-filter.d.ts.map +1 -1
- package/dist/controls/range-filter.js +75 -38
- 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 +26 -11
- 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 +29 -12
- 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 +5 -1
- package/dist/dashboard/delta-badge.d.ts.map +1 -1
- package/dist/dashboard/empty-state.d.ts +10 -3
- package/dist/dashboard/empty-state.d.ts.map +1 -1
- package/dist/dashboard/empty-state.js +37 -6
- package/dist/dashboard/index.d.ts +6 -4
- package/dist/dashboard/index.d.ts.map +1 -1
- package/dist/dashboard/index.js +10 -2
- package/dist/dashboard/query-state.d.ts +48 -27
- package/dist/dashboard/query-state.d.ts.map +1 -1
- package/dist/dashboard/query-state.js +111 -57
- 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 +74 -25
- package/dist/dashboard/stat-card.d.ts +76 -19
- package/dist/dashboard/stat-card.d.ts.map +1 -1
- package/dist/dashboard/stat-card.js +78 -38
- package/dist/dashboard/stat-card.module.css +112 -26
- package/dist/dashboard/stat-card.module.css.d.ts +5 -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/data/data-table.d.ts +151 -12
- package/dist/data/data-table.d.ts.map +1 -1
- package/dist/data/data-table.js +392 -138
- package/dist/data/data-table.module.css +64 -0
- package/dist/data/data-table.module.css.d.ts +11 -0
- package/dist/data/index.d.ts +2 -2
- package/dist/data/index.d.ts.map +1 -1
- package/dist/data/index.js +24 -2
- 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/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 +1 -1
- package/dist/data/virtual.d.ts.map +1 -1
- 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 +46 -6
- package/dist/forms/field.d.ts.map +1 -1
- package/dist/forms/field.js +10 -5
- 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 -3
- 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 +1 -1
- package/dist/guard/index.d.ts.map +1 -1
- package/dist/guard/index.js +27 -11
- package/dist/index.d.ts +10 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +44 -4
- package/dist/nav/types.d.ts +15 -6
- package/dist/nav/types.d.ts.map +1 -1
- 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 +6 -2
- package/dist/notifications/index.d.ts.map +1 -1
- package/dist/notifications/index.js +5 -1
- 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/overlay.d.ts.map +1 -1
- package/dist/notifications/overlay.js +2 -0
- package/dist/notifications/store.d.ts +7 -0
- package/dist/notifications/store.d.ts.map +1 -1
- package/dist/provider/index.d.ts +37 -5
- package/dist/provider/index.d.ts.map +1 -1
- package/dist/provider/index.js +66 -28
- package/dist/provider/lab-theme.d.ts.map +1 -1
- package/dist/provider/lab-theme.js +2 -1
- package/dist/query/devtools.d.ts.map +1 -1
- package/dist/query/devtools.js +1 -0
- package/dist/router-tanstack/field.d.ts +1 -1
- package/dist/router-tanstack/field.d.ts.map +1 -1
- package/dist/router-tanstack/index.d.ts +1 -1
- package/dist/router-tanstack/index.d.ts.map +1 -1
- package/dist/router-tanstack/search-store.d.ts +4 -1
- package/dist/router-tanstack/search-store.d.ts.map +1 -1
- package/dist/router-tanstack/search-store.js +92 -8
- package/dist/router-tanstack/use-nav.d.ts.map +1 -1
- package/dist/router-tanstack/use-nav.js +1 -1
- package/dist/section/index.d.ts +1 -1
- package/dist/section/index.d.ts.map +1 -1
- package/dist/section/section.d.ts +36 -2
- package/dist/section/section.d.ts.map +1 -1
- package/dist/section/section.js +49 -57
- package/dist/section/section.module.css +11 -0
- 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 +4 -2
- 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 +107 -0
- package/dist/shell/app-main.module.css.d.ts +11 -0
- package/dist/shell/app-mobile-nav.d.ts +3 -2
- package/dist/shell/app-mobile-nav.d.ts.map +1 -1
- package/dist/shell/app-mobile-nav.js +29 -15
- 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 +9 -3
- package/dist/shell/app-sidebar.d.ts.map +1 -1
- package/dist/shell/app-sidebar.js +55 -109
- package/dist/shell/app-sidebar.module.css +53 -96
- package/dist/shell/app-sidebar.module.css.d.ts +0 -5
- package/dist/shell/index.d.ts +14 -6
- package/dist/shell/index.d.ts.map +1 -1
- package/dist/shell/index.js +47 -12
- 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.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/shell/page-aside.d.ts +43 -0
- package/dist/shell/page-aside.d.ts.map +1 -0
- package/dist/shell/page-aside.js +202 -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/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/state/fields.d.ts +227 -34
- package/dist/state/fields.d.ts.map +1 -1
- package/dist/state/fields.js +77 -30
- 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/persisted.d.ts +12 -0
- package/dist/state/persisted.d.ts.map +1 -1
- package/dist/state/persisted.js +36 -18
- package/dist/state.d.ts +1 -1
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +2 -6
- package/dist/surfaces.d.ts +12 -11
- package/dist/surfaces.d.ts.map +1 -1
- package/dist/surfaces.js +43 -12
- 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-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/theme-toggle/index.d.ts +3 -2
- package/dist/theme-toggle/index.d.ts.map +1 -1
- package/dist/theme-toggle/index.js +8 -2
- package/dist/tokens/index.d.ts +42 -0
- package/dist/tokens/index.d.ts.map +1 -1
- package/dist/tokens/index.js +35 -6
- package/dist/tokens/palette.d.ts +45 -25
- package/dist/tokens/palette.d.ts.map +1 -1
- package/dist/tokens/palette.js +31 -14
- package/dist/tokens.css +4 -5
- package/dist/utils/is-dev.d.ts +3 -0
- package/dist/utils/is-dev.d.ts.map +1 -0
- package/dist/utils/is-dev.js +6 -0
- package/dist/widget-header/delta-badge.d.ts +7 -1
- package/dist/widget-header/delta-badge.d.ts.map +1 -1
- package/dist/widget-header/delta-badge.js +8 -1
- package/dist/widget-header/index.d.ts +2 -2
- package/dist/widget-header/index.d.ts.map +1 -1
- package/dist/widget-header/index.js +3 -1
- package/dist/widget-header/widget-header.d.ts +99 -4
- package/dist/widget-header/widget-header.d.ts.map +1 -1
- package/dist/widget-header/widget-header.js +45 -18
- package/dist/widget-header/widget-header.module.css +87 -7
- package/dist/widget-header/widget-header.module.css.d.ts +1 -0
- package/llms.txt +6 -6
- package/package.json +49 -25
- 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-chat/composer.tsx +124 -103
- package/src/agent-chat/relative-time.ts +2 -1
- package/src/agent-chat/thread-detail-panel.tsx +9 -5
- package/src/agent-chat/thread-feed-row.tsx +17 -9
- package/src/agent-chat/thread-feed.tsx +9 -3
- 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/charts/hooks/useBandPlot.ts +26 -8
- package/src/charts/index.ts +39 -4
- package/src/charts/kinds/BandStrip.tsx +36 -14
- package/src/charts/kinds/Bars.tsx +67 -16
- package/src/charts/kinds/Donut.tsx +30 -3
- package/src/charts/kinds/DualPanel.tsx +56 -10
- 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 +71 -31
- package/src/charts/layout/auto-margin.ts +134 -21
- package/src/charts/layout/log-ticks.ts +90 -0
- package/src/charts/primitives/Axes.tsx +33 -5
- package/src/charts/primitives/CartesianChart.tsx +194 -41
- package/src/charts/primitives/ChartCard.tsx +66 -25
- package/src/charts/primitives/ChartFrame.tsx +107 -26
- package/src/charts/primitives/ChartLegend.tsx +43 -13
- package/src/charts/primitives/ChartPending.tsx +185 -7
- 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 +163 -2
- package/src/charts/utils/ticks.ts +149 -4
- package/src/cli/index.ts +8 -3
- 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 +12 -0
- package/src/commands/overlays-mount.tsx +60 -26
- package/src/common/errors.ts +73 -0
- package/src/common/index.ts +21 -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/connectivity/connectivity-indicator.tsx +6 -1
- package/src/connectivity/connectivity-provider.tsx +4 -1
- package/src/connectivity/index.ts +1 -0
- package/src/connectivity/types.ts +5 -2
- package/src/connectivity/use-connectivity.ts +3 -2
- 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 +2 -0
- 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 +89 -9
- 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 +46 -19
- package/src/controls/filter-context.tsx +21 -8
- 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 +8 -0
- package/src/controls/multi-select-filter.tsx +179 -29
- package/src/controls/number-filter.tsx +329 -0
- 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 +133 -43
- package/src/controls/search-filter.tsx +31 -13
- 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 +37 -17
- package/src/controls/view-tabs.tsx +63 -11
- package/src/controls-dates/date-range-picker.tsx +8 -1
- package/src/dashboard/delta-badge.tsx +5 -1
- package/src/dashboard/empty-state.tsx +72 -25
- package/src/dashboard/index.ts +19 -2
- package/src/dashboard/query-state.tsx +154 -84
- package/src/dashboard/settings-section.tsx +87 -31
- package/src/dashboard/stat-card.module.css +112 -26
- package/src/dashboard/stat-card.module.css.d.ts +5 -0
- package/src/dashboard/stat-card.tsx +207 -68
- 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/data/data-table.module.css +64 -0
- package/src/data/data-table.module.css.d.ts +11 -0
- package/src/data/data-table.tsx +927 -346
- package/src/data/index.ts +30 -2
- package/src/data/query-branch.ts +53 -0
- package/src/data/table.ts +5 -0
- package/src/data/virtual-list.tsx +189 -55
- package/src/data/virtual.ts +5 -1
- package/src/forms/FormErrorSummary.tsx +13 -6
- package/src/forms/create-form.ts +2 -2
- package/src/forms/field.ts +60 -11
- 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 +38 -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 +91 -23
- package/src/index.ts +79 -10
- package/src/nav/types.ts +15 -6
- 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 +12 -1
- package/src/notifications/mount-guard.ts +41 -0
- package/src/notifications/notify.tsx +122 -3
- package/src/notifications/overlay.tsx +2 -0
- package/src/notifications/store.ts +7 -0
- package/src/provider/index.tsx +101 -13
- package/src/provider/lab-theme.ts +2 -1
- package/src/query/devtools.tsx +1 -0
- package/src/router-tanstack/field.ts +5 -0
- package/src/router-tanstack/index.ts +4 -0
- package/src/router-tanstack/search-store.ts +171 -12
- package/src/router-tanstack/use-nav.ts +18 -13
- package/src/section/index.ts +1 -1
- package/src/section/section.module.css +11 -0
- package/src/section/section.tsx +163 -96
- 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 +19 -9
- package/src/shell/app-header.module.css +10 -5
- package/src/shell/app-main.module.css +107 -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 +43 -11
- package/src/shell/app-sidebar-account.tsx +29 -6
- package/src/shell/app-sidebar.module.css +53 -96
- package/src/shell/app-sidebar.module.css.d.ts +0 -5
- package/src/shell/app-sidebar.tsx +40 -113
- package/src/shell/index.tsx +156 -65
- package/src/shell/isomorphic-layout-effect.ts +14 -0
- package/src/shell/mobile-nav-model.ts +66 -10
- package/src/shell/nav-count-badge.tsx +6 -1
- 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 +377 -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/sidebar-search.module.css +1 -1
- package/src/shell/sidebar-search.tsx +13 -4
- package/src/state/fields.ts +360 -69
- package/src/state/persisted-or-local.ts +50 -0
- package/src/state/persisted.ts +76 -26
- package/src/state.ts +4 -7
- package/src/surfaces.ts +43 -12
- package/src/theme/ctl-theme.tsx +10 -0
- package/src/theme/index.ts +129 -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-lab/boot.ts +140 -0
- package/src/theme-lab/index.tsx +21 -112
- package/src/theme-toggle/index.tsx +10 -3
- package/src/tokens/index.ts +50 -6
- package/src/tokens/palette.ts +58 -30
- package/src/utils/is-dev.ts +4 -0
- package/src/widget-header/delta-badge.tsx +25 -5
- package/src/widget-header/index.ts +10 -2
- package/src/widget-header/widget-header.module.css +87 -7
- package/src/widget-header/widget-header.module.css.d.ts +1 -0
- package/src/widget-header/widget-header.tsx +166 -42
- 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/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/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/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/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/error-message.test.d.ts +0 -2
- package/dist/query/error-message.test.d.ts.map +0 -1
- 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.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/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/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/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.test.d.ts +0 -2
- package/dist/widget-header/delta-badge.test.d.ts.map +0 -1
- 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.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/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 -637
- 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 -106
- 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 -154
- package/src/data/data-table.test.tsx +0 -434
- package/src/guard/check-source.test.ts +0 -3355
- package/src/guard/grace.test.ts +0 -149
- package/src/guard/guard-hook.test.ts +0 -203
- 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/router-tanstack/multi-search-param-store.test.ts +0 -124
- 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-store.router.test.tsx +0 -661
- package/src/router-tanstack/search-store.test.ts +0 -418
- package/src/router-tanstack/use-nav.test.tsx +0 -187
- package/src/section/section.test.tsx +0 -204
- 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 -258
- 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/no-mantine.test.ts +0 -33
- package/src/widget-header/widget-header.test.tsx +0 -187
|
@@ -1,275 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `CtlSlot`/`CTL_THEME` — proves the `size="ctl"` default reaches a bare `<Button>` dropped into
|
|
3
|
-
* the slot with NO prop at the call site, and that the tier stays scoped to the slot (a sibling
|
|
4
|
-
* `<Button>` outside `<CtlSlot>` never resolves the `-ctl` var).
|
|
5
|
-
*
|
|
6
|
-
* `data-size`/the inline `style` custom-property string are Mantine's own render output — verified
|
|
7
|
-
* directly against a real render (`@testing-library/react`, `tests/setup/dom.ts`'s jsdom harness),
|
|
8
|
-
* not asserted from memory. jsdom does not compute the CSS cascade, so this can only prove the
|
|
9
|
-
* INLINE var REFERENCE Mantine's `varsResolver` emits (`--button-height: var(--button-height-ctl)`)
|
|
10
|
-
* — not the resolved pixel value, which is `cssVariablesResolver`'s and `spaceDecls`'s job
|
|
11
|
-
* (covered by `spacing.test.ts`/`density.test.ts`).
|
|
12
|
-
*
|
|
13
|
-
* Outside `<CtlSlot>`, `<Button>` resolves to Mantine's own native default, NOT basalt's `md` —
|
|
14
|
-
* verified against `theme/index.ts`'s `Button.extend`: unlike Input/TextInput/NumberInput/
|
|
15
|
-
* PasswordInput/Select/Textarea, basalt sets no `defaultProps.size` for Button/ActionIcon at all,
|
|
16
|
-
* so an un-sized Button carries no `data-size` attribute and no `--button-height` inline var
|
|
17
|
-
* (Mantine's own CSS stylesheet default takes over). The test below asserts the accurate,
|
|
18
|
-
* verified claim — the tier does not leak past the slot — rather than a `size="md"` claim Button
|
|
19
|
-
* was never given.
|
|
20
|
-
*/
|
|
21
|
-
import { ActionIcon, Button, Checkbox, MantineProvider, Radio, Switch } from '@mantine/core'
|
|
22
|
-
import { act, fireEvent, render, screen } from '@testing-library/react'
|
|
23
|
-
import { describe, expect, test } from 'bun:test'
|
|
24
|
-
import { FilterPill } from '../controls/filter-pill'
|
|
25
|
-
import { StatCard } from '../dashboard/stat-card'
|
|
26
|
-
import { baseTheme } from './index'
|
|
27
|
-
import { CTL_THEME, CtlSlot } from './ctl-theme'
|
|
28
|
-
|
|
29
|
-
describe('CtlSlot', () => {
|
|
30
|
-
test('a bare Button inside CtlSlot resolves the ctl tier with no size prop', () => {
|
|
31
|
-
const { container } = render(
|
|
32
|
-
<MantineProvider theme={baseTheme}>
|
|
33
|
-
<CtlSlot>
|
|
34
|
-
<Button>Save</Button>
|
|
35
|
-
</CtlSlot>
|
|
36
|
-
</MantineProvider>,
|
|
37
|
-
)
|
|
38
|
-
const button = container.querySelector('button')
|
|
39
|
-
expect(button?.getAttribute('data-size')).toBe('ctl')
|
|
40
|
-
expect(button?.style.getPropertyValue('--button-height')).toBe('var(--button-height-ctl)')
|
|
41
|
-
expect(button?.style.getPropertyValue('--button-padding-x')).toBe('var(--button-padding-x-ctl)')
|
|
42
|
-
})
|
|
43
|
-
|
|
44
|
-
test('the wrapper carries the data-basalt-tier marker and stays out of flow', () => {
|
|
45
|
-
const { container } = render(
|
|
46
|
-
<MantineProvider theme={baseTheme}>
|
|
47
|
-
<CtlSlot>
|
|
48
|
-
<Button>Save</Button>
|
|
49
|
-
</CtlSlot>
|
|
50
|
-
</MantineProvider>,
|
|
51
|
-
)
|
|
52
|
-
const wrapper = container.querySelector('[data-basalt-tier]')
|
|
53
|
-
expect(wrapper?.getAttribute('data-basalt-tier')).toBe('ctl')
|
|
54
|
-
expect((wrapper as HTMLElement | null)?.style.display).toBe('contents')
|
|
55
|
-
})
|
|
56
|
-
|
|
57
|
-
test('a Button outside CtlSlot never resolves the ctl tier', () => {
|
|
58
|
-
const { container } = render(
|
|
59
|
-
<MantineProvider theme={baseTheme}>
|
|
60
|
-
<Button>Save</Button>
|
|
61
|
-
</MantineProvider>,
|
|
62
|
-
)
|
|
63
|
-
const button = container.querySelector('button')
|
|
64
|
-
expect(button?.getAttribute('data-size')).not.toBe('ctl')
|
|
65
|
-
expect(button?.style.getPropertyValue('--button-height')).not.toBe('var(--button-height-ctl)')
|
|
66
|
-
})
|
|
67
|
-
|
|
68
|
-
test('CTL_THEME sets defaultProps.size "ctl" for every documented component', () => {
|
|
69
|
-
const names = [
|
|
70
|
-
'Button',
|
|
71
|
-
'ActionIcon',
|
|
72
|
-
'Input',
|
|
73
|
-
'TextInput',
|
|
74
|
-
'Select',
|
|
75
|
-
'MultiSelect',
|
|
76
|
-
'SegmentedControl',
|
|
77
|
-
'NativeSelect',
|
|
78
|
-
'Radio',
|
|
79
|
-
'RadioGroup',
|
|
80
|
-
'Checkbox',
|
|
81
|
-
'CheckboxGroup',
|
|
82
|
-
'Switch',
|
|
83
|
-
'SwitchGroup',
|
|
84
|
-
] as const
|
|
85
|
-
for (const name of names) {
|
|
86
|
-
expect(CTL_THEME.components?.[name]?.defaultProps?.['size']).toBe('ctl')
|
|
87
|
-
}
|
|
88
|
-
})
|
|
89
|
-
})
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* Radio/Checkbox/Switch at the tier, and the portal question that had to be settled before the
|
|
93
|
-
* defaults could be trusted: a filter's popover body and the mobile sheet are rendered
|
|
94
|
-
* `withinPortal`, so they are NOT DOM descendants of the `<CtlSlot>` wrapper — but a React portal
|
|
95
|
-
* preserves the React tree, and `MantineThemeProvider` is React context. So the tier DOES reach them,
|
|
96
|
-
* and no second `CtlSlot` inside `Popover.Dropdown`/`Drawer` is needed. These tests are what makes
|
|
97
|
-
* that a checked fact rather than a reasoned one.
|
|
98
|
-
*/
|
|
99
|
-
describe('the toggle family at the ctl tier', () => {
|
|
100
|
-
test('a bare Radio inside CtlSlot resolves the ctl indicator box', () => {
|
|
101
|
-
const { container } = render(
|
|
102
|
-
<MantineProvider theme={baseTheme}>
|
|
103
|
-
<CtlSlot>
|
|
104
|
-
<Radio value="a" label="Previous period" />
|
|
105
|
-
</CtlSlot>
|
|
106
|
-
</MantineProvider>,
|
|
107
|
-
)
|
|
108
|
-
const root = container.querySelector('.mantine-Radio-root')
|
|
109
|
-
expect(root?.getAttribute('style')).toContain('--radio-size: var(--radio-size-ctl)')
|
|
110
|
-
expect(root?.getAttribute('style')).toContain('--radio-icon-size: var(--radio-icon-size-ctl)')
|
|
111
|
-
})
|
|
112
|
-
|
|
113
|
-
test('a bare Checkbox inside CtlSlot resolves the ctl indicator box', () => {
|
|
114
|
-
const { container } = render(
|
|
115
|
-
<MantineProvider theme={baseTheme}>
|
|
116
|
-
<CtlSlot>
|
|
117
|
-
<Checkbox value="a" label="Web" />
|
|
118
|
-
</CtlSlot>
|
|
119
|
-
</MantineProvider>,
|
|
120
|
-
)
|
|
121
|
-
expect(container.querySelector('.mantine-Checkbox-root')?.getAttribute('style')).toContain(
|
|
122
|
-
'--checkbox-size: var(--checkbox-size-ctl)',
|
|
123
|
-
)
|
|
124
|
-
})
|
|
125
|
-
|
|
126
|
-
test('a bare Switch inside CtlSlot resolves all five of its ctl vars', () => {
|
|
127
|
-
const { container } = render(
|
|
128
|
-
<MantineProvider theme={baseTheme}>
|
|
129
|
-
<CtlSlot>
|
|
130
|
-
<Switch label="Errors only" />
|
|
131
|
-
</CtlSlot>
|
|
132
|
-
</MantineProvider>,
|
|
133
|
-
)
|
|
134
|
-
const style = container.querySelector('.mantine-Switch-root')?.getAttribute('style') ?? ''
|
|
135
|
-
for (const prefix of [
|
|
136
|
-
'switch-height',
|
|
137
|
-
'switch-width',
|
|
138
|
-
'switch-thumb-size',
|
|
139
|
-
'switch-label-font-size',
|
|
140
|
-
'switch-track-label-padding',
|
|
141
|
-
]) {
|
|
142
|
-
expect(style).toContain(`--${prefix}: var(--${prefix}-ctl)`)
|
|
143
|
-
}
|
|
144
|
-
})
|
|
145
|
-
|
|
146
|
-
test('a Radio outside CtlSlot keeps Mantine’s own default — the tier does not leak', () => {
|
|
147
|
-
const { container } = render(
|
|
148
|
-
<MantineProvider theme={baseTheme}>
|
|
149
|
-
<Radio value="a" label="Previous period" />
|
|
150
|
-
</MantineProvider>,
|
|
151
|
-
)
|
|
152
|
-
expect(
|
|
153
|
-
container.querySelector('.mantine-Radio-root')?.getAttribute('style') ?? '',
|
|
154
|
-
).not.toContain('var(--radio-size-ctl)')
|
|
155
|
-
})
|
|
156
|
-
|
|
157
|
-
test('a PORTALED popover body inherits the tier — React context crosses a portal', async () => {
|
|
158
|
-
render(
|
|
159
|
-
<MantineProvider theme={baseTheme}>
|
|
160
|
-
<CtlSlot>
|
|
161
|
-
<FilterPill label="No comparison">
|
|
162
|
-
<Radio.Group value="previous">
|
|
163
|
-
<Radio value="previous" label="Previous period" />
|
|
164
|
-
</Radio.Group>
|
|
165
|
-
</FilterPill>
|
|
166
|
-
</CtlSlot>
|
|
167
|
-
</MantineProvider>,
|
|
168
|
-
)
|
|
169
|
-
await act(async () => {
|
|
170
|
-
fireEvent.click(screen.getByRole('button', { name: 'No comparison' }))
|
|
171
|
-
})
|
|
172
|
-
// The dropdown is a portal at document.body — deliberately queried off `document`, not the
|
|
173
|
-
// render container, because being outside the container is the whole point of the test.
|
|
174
|
-
const root = document.querySelector('.mantine-Popover-dropdown .mantine-Radio-root')
|
|
175
|
-
expect(root).not.toBeNull()
|
|
176
|
-
expect(root?.getAttribute('style')).toContain('--radio-size: var(--radio-size-ctl)')
|
|
177
|
-
})
|
|
178
|
-
})
|
|
179
|
-
|
|
180
|
-
/**
|
|
181
|
-
* `tier="widget"` — the 24px ActionIcon step a `WidgetHeader tier="widget"` header row can hold.
|
|
182
|
-
*
|
|
183
|
-
* The bug: `StatCard` wrapped its `actions` slot in a plain `<CtlSlot>`, so a bare `ActionIcon`
|
|
184
|
-
* resolved to the 30px `ctl` tier inside a 28px header row (`--vx-space-widget-header-height`) and
|
|
185
|
-
* grew it to 30. Measured in Chrome on the playground's dashboard at 390px, two KPI cards in the
|
|
186
|
-
* same grid row: the one WITH a kebab put its hero value at y=164, the one without at y=162 — the
|
|
187
|
-
* whole card, and every number in it, 2px out of line because of a slot's tier.
|
|
188
|
-
*/
|
|
189
|
-
describe('CtlSlot tier="widget"', () => {
|
|
190
|
-
test('a bare ActionIcon resolves the 24px icon step, not the 30px ctl one', () => {
|
|
191
|
-
const { container } = render(
|
|
192
|
-
<MantineProvider theme={baseTheme}>
|
|
193
|
-
<CtlSlot tier="widget">
|
|
194
|
-
<ActionIcon variant="subtle" aria-label="Card actions">
|
|
195
|
-
<span />
|
|
196
|
-
</ActionIcon>
|
|
197
|
-
</CtlSlot>
|
|
198
|
-
</MantineProvider>,
|
|
199
|
-
)
|
|
200
|
-
const button = container.querySelector('button')
|
|
201
|
-
expect(button?.getAttribute('data-size')).toBe('icon')
|
|
202
|
-
// `--ai-size-icon` reads `--vx-space-control-height-widget` (24px) in `ctlSizeVars()`, so the
|
|
203
|
-
// tier tracks the density knob like every other control height.
|
|
204
|
-
expect(button?.style.getPropertyValue('--ai-size')).toBe('var(--ai-size-icon)')
|
|
205
|
-
})
|
|
206
|
-
|
|
207
|
-
test('the marker is the TIER name, the same one ChartCard writes by hand', () => {
|
|
208
|
-
const { container } = render(
|
|
209
|
-
<MantineProvider theme={baseTheme}>
|
|
210
|
-
<CtlSlot tier="widget">
|
|
211
|
-
<span />
|
|
212
|
-
</CtlSlot>
|
|
213
|
-
</MantineProvider>,
|
|
214
|
-
)
|
|
215
|
-
expect(container.querySelector('[data-basalt-tier]')?.getAttribute('data-basalt-tier')).toBe(
|
|
216
|
-
'widget',
|
|
217
|
-
)
|
|
218
|
-
})
|
|
219
|
-
|
|
220
|
-
test('the default is still `ctl` — no call site had to change', () => {
|
|
221
|
-
const { container } = render(
|
|
222
|
-
<MantineProvider theme={baseTheme}>
|
|
223
|
-
<CtlSlot>
|
|
224
|
-
<ActionIcon variant="subtle" aria-label="Sync">
|
|
225
|
-
<span />
|
|
226
|
-
</ActionIcon>
|
|
227
|
-
</CtlSlot>
|
|
228
|
-
</MantineProvider>,
|
|
229
|
-
)
|
|
230
|
-
expect(container.querySelector('button')?.getAttribute('data-size')).toBe('ctl')
|
|
231
|
-
expect(container.querySelector('[data-basalt-tier]')?.getAttribute('data-basalt-tier')).toBe(
|
|
232
|
-
'ctl',
|
|
233
|
-
)
|
|
234
|
-
})
|
|
235
|
-
|
|
236
|
-
test('the widget tier is ActionIcon-only — a Button in it keeps whatever it had', () => {
|
|
237
|
-
// Only `--ai-size-icon` exists at this step (`theme/index.ts`'s `ctlSizeVars`). Defaulting a
|
|
238
|
-
// Button to `size="icon"` would resolve `--button-height: var(--button-height-icon)` to nothing
|
|
239
|
-
// and paint a zero-height button — the exact `-xs`-var failure `ctlSizeVars`' doc records.
|
|
240
|
-
const { container } = render(
|
|
241
|
-
<MantineProvider theme={baseTheme}>
|
|
242
|
-
<CtlSlot tier="widget">
|
|
243
|
-
<Button>Save</Button>
|
|
244
|
-
</CtlSlot>
|
|
245
|
-
</MantineProvider>,
|
|
246
|
-
)
|
|
247
|
-
expect(container.querySelector('button')?.getAttribute('data-size')).not.toBe('icon')
|
|
248
|
-
})
|
|
249
|
-
})
|
|
250
|
-
|
|
251
|
-
/**
|
|
252
|
-
* `StatCard`'s own slot — the regression guard on the call site, not just on the mechanism. A
|
|
253
|
-
* `<CtlSlot>` here (the default tier) is what shipped, and nothing else in the suite would have
|
|
254
|
-
* caught it.
|
|
255
|
-
*/
|
|
256
|
-
describe('StatCard mounts its actions slot at the widget tier', () => {
|
|
257
|
-
test('a raw ActionIcon in `actions` lands on the 24px step', () => {
|
|
258
|
-
const { container } = render(
|
|
259
|
-
<MantineProvider theme={baseTheme}>
|
|
260
|
-
<StatCard
|
|
261
|
-
title="Total sales"
|
|
262
|
-
value="$1294.9k"
|
|
263
|
-
actions={
|
|
264
|
-
<ActionIcon variant="subtle" aria-label="Card actions">
|
|
265
|
-
<span />
|
|
266
|
-
</ActionIcon>
|
|
267
|
-
}
|
|
268
|
-
/>
|
|
269
|
-
</MantineProvider>,
|
|
270
|
-
)
|
|
271
|
-
const slot = container.querySelector('[data-basalt-tier]')
|
|
272
|
-
expect(slot?.getAttribute('data-basalt-tier')).toBe('widget')
|
|
273
|
-
expect(container.querySelector('button')?.getAttribute('data-size')).toBe('icon')
|
|
274
|
-
})
|
|
275
|
-
})
|
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The ctl-tier coverage gate (`docs/CONTROLS-SPEC.md` §5) — greps every `getSize(size, '<prefix>')`
|
|
3
|
-
* / `getFontSize(size)` call in the INSTALLED `@mantine/core` source for the TWELVE components the
|
|
4
|
-
* tier covers (Button, ActionIcon, Input, SegmentedControl, Combobox, Select, MultiSelect,
|
|
5
|
-
* TextInput, Menu — the nine the spec names — plus Radio, Checkbox and Switch) and asserts
|
|
6
|
-
* `cssVariablesResolver`'s `variables` block declares a `-ctl` var for every distinct prefix found —
|
|
7
|
-
* so a missing var (the `--button-padding-x-ctl` the spec's own text calls out as "every draft
|
|
8
|
-
* omitted") fails the build instead of silently rendering at 0px/undefined.
|
|
9
|
-
*
|
|
10
|
-
* Radio/Checkbox/Switch joined the scan when they joined `CTL_THEME`: they had defaulted to
|
|
11
|
-
* Mantine's `sm`, a 20px indicator beside the tier's 13.5px option label, in every filter popover and
|
|
12
|
-
* in the mobile sheet. Adding them to `defaultProps` without declaring their vars would have been
|
|
13
|
-
* strictly worse than leaving them alone — an undeclared `--radio-size-ctl` resolves to the
|
|
14
|
-
* property's INITIAL value, which is how a Select once shipped with no chevron (see
|
|
15
|
-
* `theme/index.ts`'s `ctlSizeVars` doc). This scan is what makes the two halves inseparable.
|
|
16
|
-
*
|
|
17
|
-
* Reads the REAL installed package (not a hand-typed list of prefixes) so a future `@mantine/core`
|
|
18
|
-
* minor that adds a new `getSize`/`getFontSize` call to one of these nine components fails this
|
|
19
|
-
* test until the matching `-ctl` var is declared — the same "verify against source, not memory"
|
|
20
|
-
* discipline `ctl-theme.tsx`'s own doc comment describes.
|
|
21
|
-
*
|
|
22
|
-
* `getFontSize(size)` is `getSize(size, 'mantine-font-size')` (`core/utils/get-size/get-size.mjs`),
|
|
23
|
-
* so every `-fz`/`-font-size` call site (Button's `--button-fz`, Input's `--input-fz`,
|
|
24
|
-
* SegmentedControl's `--sc-font-size`, Combobox's `--combobox-option-fz`) collapses onto the ONE
|
|
25
|
-
* `mantine-font-size` prefix — verified by proving the prove-it-would-fail step below actually red-
|
|
26
|
-
* lines when `--mantine-font-size-ctl` is removed, not merely when a component-named font var is
|
|
27
|
-
* missing (no such var is ever read).
|
|
28
|
-
*
|
|
29
|
-
* `*Group`/`*GroupSection` subdirectories (`Button.Group`, `ActionIcon.Group`) are excluded — they
|
|
30
|
-
* are separate, undocumented-for-`ctl` components (`section-height`/`section-padding-x`/
|
|
31
|
-
* `section-fz`), out of scope for `docs/CONTROLS-SPEC.md` §5's nine-component list.
|
|
32
|
-
*/
|
|
33
|
-
import { existsSync, readdirSync, readFileSync, statSync } from 'node:fs'
|
|
34
|
-
import { dirname, join } from 'node:path'
|
|
35
|
-
import { DEFAULT_THEME, mergeMantineTheme } from '@mantine/core'
|
|
36
|
-
import type { MantineTheme } from '@mantine/core'
|
|
37
|
-
import { describe, expect, test } from 'bun:test'
|
|
38
|
-
import { CTL_THEME, baseTheme, cssVariablesResolver } from './index'
|
|
39
|
-
|
|
40
|
-
const theme: MantineTheme = mergeMantineTheme(DEFAULT_THEME, baseTheme)
|
|
41
|
-
|
|
42
|
-
const MANTINE_CORE_ESM_COMPONENTS = join(
|
|
43
|
-
dirname(require.resolve('@mantine/core/package.json')),
|
|
44
|
-
'esm/components',
|
|
45
|
-
)
|
|
46
|
-
|
|
47
|
-
/** Every component `CTL_THEME` sets a `ctl` default on, plus `Input`/`Combobox`/`Menu` which the
|
|
48
|
-
* others resolve through. Keep this list and `CTL_THEME.components` in step — the last test in this
|
|
49
|
-
* file asserts exactly that, so they cannot drift apart silently. */
|
|
50
|
-
const CTL_TIER_COMPONENTS = [
|
|
51
|
-
'Button',
|
|
52
|
-
'ActionIcon',
|
|
53
|
-
'Input',
|
|
54
|
-
'SegmentedControl',
|
|
55
|
-
'Combobox',
|
|
56
|
-
'Select',
|
|
57
|
-
'MultiSelect',
|
|
58
|
-
'TextInput',
|
|
59
|
-
'Menu',
|
|
60
|
-
'Radio',
|
|
61
|
-
'Checkbox',
|
|
62
|
-
'Switch',
|
|
63
|
-
// In `CTL_THEME` since the tier shipped, and never scanned until the drift test below was added —
|
|
64
|
-
// which is the whole argument for that test. It renders a native `<select>` through
|
|
65
|
-
// `Input`/`InputBase`, so it contributes no prefix of its own; being scanned is what proves that
|
|
66
|
-
// rather than assuming it.
|
|
67
|
-
'NativeSelect',
|
|
68
|
-
] as const
|
|
69
|
-
|
|
70
|
-
/** Every `.mjs` file (not `.mjs.map`) under a component directory, recursing into subcomponents but
|
|
71
|
-
* skipping `*Group`/`*GroupSection` (see this file's doc). */
|
|
72
|
-
function collectMjsFiles(dir: string): string[] {
|
|
73
|
-
if (!existsSync(dir)) return []
|
|
74
|
-
const out: string[] = []
|
|
75
|
-
for (const entry of readdirSync(dir)) {
|
|
76
|
-
if (/Group/.test(entry)) continue
|
|
77
|
-
const full = join(dir, entry)
|
|
78
|
-
const stat = statSync(full)
|
|
79
|
-
if (stat.isDirectory()) out.push(...collectMjsFiles(full))
|
|
80
|
-
else if (entry.endsWith('.mjs')) out.push(full)
|
|
81
|
-
}
|
|
82
|
-
return out
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
/** Every distinct `getSize`/`getFontSize` prefix the nine components actually read, extracted from
|
|
86
|
-
* the installed source — `getFontSize(...)` always collapses to `mantine-font-size` (see this
|
|
87
|
-
* file's doc). */
|
|
88
|
-
function collectSizePrefixes(): Set<string> {
|
|
89
|
-
const prefixes = new Set<string>()
|
|
90
|
-
for (const component of CTL_TIER_COMPONENTS) {
|
|
91
|
-
for (const file of collectMjsFiles(join(MANTINE_CORE_ESM_COMPONENTS, component))) {
|
|
92
|
-
const src = readFileSync(file, 'utf8')
|
|
93
|
-
for (const m of src.matchAll(/get(?:Size|Spacing)\(\s*[\w.?]+\s*,\s*["']([\w-]+)["']/g)) {
|
|
94
|
-
prefixes.add(m[1]!)
|
|
95
|
-
}
|
|
96
|
-
if (/getFontSize\(/.test(src)) prefixes.add('mantine-font-size')
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
return prefixes
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
describe('ctl-tier var coverage', () => {
|
|
103
|
-
const prefixes = collectSizePrefixes()
|
|
104
|
-
|
|
105
|
-
test('the scan finds the prefixes this spec is grounded in (sanity check on the scan itself)', () => {
|
|
106
|
-
expect(prefixes.has('button-height')).toBe(true)
|
|
107
|
-
expect(prefixes.has('button-padding-x')).toBe(true)
|
|
108
|
-
expect(prefixes.has('ai-size')).toBe(true)
|
|
109
|
-
expect(prefixes.has('input-height')).toBe(true)
|
|
110
|
-
expect(prefixes.has('sc-padding')).toBe(true)
|
|
111
|
-
expect(prefixes.has('combobox-option-padding')).toBe(true)
|
|
112
|
-
expect(prefixes.has('combobox-chevron-size')).toBe(true)
|
|
113
|
-
expect(prefixes.has('mantine-font-size')).toBe(true)
|
|
114
|
-
})
|
|
115
|
-
|
|
116
|
-
test('the scan reaches Radio/Checkbox/Switch — the three the popovers and the sheet render', () => {
|
|
117
|
-
expect(prefixes.has('radio-size')).toBe(true)
|
|
118
|
-
expect(prefixes.has('radio-icon-size')).toBe(true)
|
|
119
|
-
expect(prefixes.has('checkbox-size')).toBe(true)
|
|
120
|
-
expect(prefixes.has('switch-height')).toBe(true)
|
|
121
|
-
expect(prefixes.has('switch-width')).toBe(true)
|
|
122
|
-
expect(prefixes.has('switch-thumb-size')).toBe(true)
|
|
123
|
-
expect(prefixes.has('switch-label-font-size')).toBe(true)
|
|
124
|
-
expect(prefixes.has('switch-track-label-padding')).toBe(true)
|
|
125
|
-
})
|
|
126
|
-
|
|
127
|
-
test('there is NO --checkbox-icon-size to declare — Checkbox derives its tick in CSS', () => {
|
|
128
|
-
// Worth pinning: the obvious symmetry with `radio-icon-size` does not exist in 9.3.0, and
|
|
129
|
-
// declaring a var no `getSize` call reads would be dead weight that reads like coverage.
|
|
130
|
-
expect(prefixes.has('checkbox-icon-size')).toBe(false)
|
|
131
|
-
})
|
|
132
|
-
|
|
133
|
-
test('every scanned prefix has a declared -ctl var', () => {
|
|
134
|
-
const declared = cssVariablesResolver(theme).variables
|
|
135
|
-
const missing = [...prefixes].filter((prefix) => !(`--${prefix}-ctl` in declared))
|
|
136
|
-
expect(missing).toEqual([])
|
|
137
|
-
})
|
|
138
|
-
|
|
139
|
-
test('ActionIcon additionally gets an -icon var (size="icon", WidgetHeader tier="widget")', () => {
|
|
140
|
-
const declared = cssVariablesResolver(theme).variables
|
|
141
|
-
expect(declared['--ai-size-icon']).toBeDefined()
|
|
142
|
-
})
|
|
143
|
-
|
|
144
|
-
test('--mantine-line-height-ctl is declared (read by every -ctl Input/Button label via the line-height cascade)', () => {
|
|
145
|
-
const declared = cssVariablesResolver(theme).variables
|
|
146
|
-
expect(declared['--mantine-line-height-ctl']).toBeDefined()
|
|
147
|
-
})
|
|
148
|
-
|
|
149
|
-
test('every component CTL_THEME defaults to `ctl` is in the scanned set', () => {
|
|
150
|
-
// The two halves of the tier — `defaultProps.size = 'ctl'` and the `-ctl` vars — must move
|
|
151
|
-
// together, and this is what makes adding a component to one without the other fail. `*Group`
|
|
152
|
-
// keys resolve to their base component's prefixes (a Group reads `Input.Wrapper`'s vars, and the
|
|
153
|
-
// scan already covers `Input`), so they are stripped before the comparison.
|
|
154
|
-
const scanned = new Set<string>(CTL_TIER_COMPONENTS)
|
|
155
|
-
const themed = Object.keys(CTL_THEME.components ?? {}).map((name) =>
|
|
156
|
-
name.endsWith('Group') ? name.slice(0, -'Group'.length) : name,
|
|
157
|
-
)
|
|
158
|
-
expect(themed.filter((name) => !scanned.has(name))).toEqual([])
|
|
159
|
-
})
|
|
160
|
-
|
|
161
|
-
// Proves the gate actually bites — the exact regression the spec calls out
|
|
162
|
-
// ("--button-padding-x-ctl every draft omitted").
|
|
163
|
-
test('regression proof: a var missing from cssVariablesResolver would fail the coverage assertion above', () => {
|
|
164
|
-
const declared = cssVariablesResolver(theme).variables
|
|
165
|
-
const withoutOne = { ...declared }
|
|
166
|
-
delete withoutOne['--button-padding-x-ctl']
|
|
167
|
-
const missing = [...prefixes].filter((prefix) => !(`--${prefix}-ctl` in withoutOne))
|
|
168
|
-
expect(missing).toEqual(['button-padding-x'])
|
|
169
|
-
})
|
|
170
|
-
})
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `createBasaltTheme`'s `{ density }` option — the graduation of `deriveSpacing` into a first-class
|
|
3
|
-
* consumer API. Mirrors `radius-option.test.ts`'s two invariants:
|
|
4
|
-
*
|
|
5
|
-
* 1. The DEFAULT path (no `options`, or `density: 0`) stays byte-identical to the pre-baked static
|
|
6
|
-
* `baseTheme` — `theme.other.basaltDensity` stays unset, and `theme/spacing.test.ts` (untouched)
|
|
7
|
-
* stays green.
|
|
8
|
-
* 2. A NON-default level rebuilds every density-anchored `defaultProps`/`styles` number AND the
|
|
9
|
-
* `spacing` size-scale from `deriveSpacing(level)`'s output, and lands it on
|
|
10
|
-
* `theme.other.basaltDensity`.
|
|
11
|
-
*/
|
|
12
|
-
import { describe, expect, test } from 'bun:test'
|
|
13
|
-
import { deriveSpacing } from '../tokens/palette'
|
|
14
|
-
import { createBasaltTheme } from './index'
|
|
15
|
-
|
|
16
|
-
describe('the default level stays on the static path', () => {
|
|
17
|
-
test('createBasaltTheme() carries no theme.other.basaltDensity', () => {
|
|
18
|
-
expect(createBasaltTheme().other?.['basaltDensity']).toBeUndefined()
|
|
19
|
-
})
|
|
20
|
-
|
|
21
|
-
test('createBasaltTheme(undefined, {}) resolves to the same default', () => {
|
|
22
|
-
expect(createBasaltTheme(undefined, {}).other?.['basaltDensity']).toBeUndefined()
|
|
23
|
-
})
|
|
24
|
-
|
|
25
|
-
test('an explicit density: 0 also carries no basaltDensity', () => {
|
|
26
|
-
expect(createBasaltTheme(undefined, { density: 0 }).other?.['basaltDensity']).toBeUndefined()
|
|
27
|
-
})
|
|
28
|
-
})
|
|
29
|
-
|
|
30
|
-
describe('a non-default density level graduates onto the theme', () => {
|
|
31
|
-
const theme = createBasaltTheme(undefined, { density: -2 })
|
|
32
|
-
const expected = deriveSpacing(-2)
|
|
33
|
-
|
|
34
|
-
test('the resolved values land on theme.other.basaltDensity', () => {
|
|
35
|
-
expect(theme.other?.['basaltDensity']).toEqual(expected)
|
|
36
|
-
})
|
|
37
|
-
|
|
38
|
-
test('Timeline bulletSize follows the resolved step (18)', () => {
|
|
39
|
-
expect(theme.components?.['Timeline']?.defaultProps?.['bulletSize']).toBe(18)
|
|
40
|
-
})
|
|
41
|
-
|
|
42
|
-
test('Progress size follows the resolved step (5)', () => {
|
|
43
|
-
expect(theme.components?.['Progress']?.defaultProps?.['size']).toBe(5)
|
|
44
|
-
})
|
|
45
|
-
|
|
46
|
-
// Read off `expected.scale` rather than hardcoded literals: what this asserts is the WIRING (the
|
|
47
|
-
// resolved scale group reaches `theme.spacing` as rem strings), and the law's own level-0 bases plus
|
|
48
|
-
// its per-level output are locked by `spacing.test.ts` + `density-relations.test.ts`. At the time of
|
|
49
|
-
// writing, `density: -2` resolves to 9/10/14/16/21.
|
|
50
|
-
test('the spacing size-scale reflects the resolved scale group', () => {
|
|
51
|
-
expect(theme.spacing?.xs).toBe(`${expected.scale.xs / 16}rem`)
|
|
52
|
-
expect(theme.spacing?.sm).toBe(`${expected.scale.sm / 16}rem`)
|
|
53
|
-
expect(theme.spacing?.md).toBe(`${expected.scale.md / 16}rem`)
|
|
54
|
-
expect(theme.spacing?.lg).toBe(`${expected.scale.lg / 16}rem`)
|
|
55
|
-
expect(theme.spacing?.xl).toBe(`${expected.scale.xl / 16}rem`)
|
|
56
|
-
})
|
|
57
|
-
})
|
|
58
|
-
|
|
59
|
-
describe('the default theme is unchanged by the density option existing', () => {
|
|
60
|
-
test('createBasaltTheme() still matches the shipped level-0 numbers', () => {
|
|
61
|
-
const theme = createBasaltTheme()
|
|
62
|
-
expect(theme.components?.['Timeline']?.defaultProps?.['bulletSize']).toBe(22)
|
|
63
|
-
expect(theme.components?.['Progress']?.defaultProps?.['size']).toBe(6)
|
|
64
|
-
})
|
|
65
|
-
})
|
|
66
|
-
|
|
67
|
-
describe('a malformed density level throws through createBasaltTheme', () => {
|
|
68
|
-
test('rejects a non-integer', () => {
|
|
69
|
-
expect(() => createBasaltTheme(undefined, { density: 1.5 })).toThrow()
|
|
70
|
-
})
|
|
71
|
-
|
|
72
|
-
test('rejects an out-of-range level', () => {
|
|
73
|
-
expect(() => createBasaltTheme(undefined, { density: 10 })).toThrow()
|
|
74
|
-
})
|
|
75
|
-
})
|
|
76
|
-
|
|
77
|
-
describe('consumer overrides still win on top of a density option', () => {
|
|
78
|
-
test('an explicit override merges onto the density-rebuilt theme', () => {
|
|
79
|
-
const theme = createBasaltTheme({ primaryColor: 'green' }, { density: -2 })
|
|
80
|
-
expect(theme.primaryColor).toBe('green')
|
|
81
|
-
expect(theme.other?.['basaltDensity']).toEqual(deriveSpacing(-2))
|
|
82
|
-
})
|
|
83
|
-
})
|
|
84
|
-
|
|
85
|
-
describe('density combines with radius and derive without dropping any', () => {
|
|
86
|
-
test('all three land on theme.other', () => {
|
|
87
|
-
const theme = createBasaltTheme(undefined, {
|
|
88
|
-
derive: { accent: '#16a34a' },
|
|
89
|
-
radius: 2,
|
|
90
|
-
density: -2,
|
|
91
|
-
})
|
|
92
|
-
expect(theme.other?.['basaltDerive']).toBeDefined()
|
|
93
|
-
expect(theme.other?.['basaltRadius']).toBeDefined()
|
|
94
|
-
expect(theme.other?.['basaltDensity']).toEqual(deriveSpacing(-2))
|
|
95
|
-
})
|
|
96
|
-
})
|