basalt-ui 1.25.0 → 1.26.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 +8 -6
- package/CHANGELOG.md +18 -0
- package/MIGRATING.md +546 -20
- package/README.md +45 -32
- package/agent/rules/basalt-batteries.md +205 -0
- package/agent/rules/basalt-charts.md +125 -555
- package/agent/rules/basalt-controls.md +155 -0
- package/agent/rules/basalt-mantine.md +146 -439
- package/agent/rules/basalt-state.md +113 -96
- package/agent/rules/basalt-tokens.md +126 -288
- package/agent/skills/basalt-app/SKILL.md +70 -195
- package/agent/skills/basalt-charts/SKILL.md +54 -234
- package/agent/skills/basalt-design/SKILL.md +56 -248
- package/agent/templates/CLAUDE-block.md.tpl +31 -40
- package/agent/templates/DESIGN.md.tpl +22 -51
- package/configs/oxlint-plugin.js +1275 -31
- package/configs/oxlint-plugin.test.ts +947 -11
- package/configs/oxlint.json +11 -3
- package/dist/charts/cursor/resolve.d.ts +18 -0
- package/dist/charts/cursor/resolve.d.ts.map +1 -1
- package/dist/charts/cursor/resolve.js +15 -6
- package/dist/charts/cursor/scope.d.ts +6 -3
- package/dist/charts/cursor/scope.d.ts.map +1 -1
- package/dist/charts/cursor/store.d.ts +5 -1
- package/dist/charts/cursor/store.d.ts.map +1 -1
- package/dist/charts/cursor/store.js +4 -4
- package/dist/charts/hooks/useChartCursor.d.ts.map +1 -1
- package/dist/charts/hooks/useChartCursor.js +9 -8
- package/dist/charts/index.d.ts +2 -2
- package/dist/charts/index.d.ts.map +1 -1
- package/dist/charts/primitives/ChartCard.d.ts +34 -9
- package/dist/charts/primitives/ChartCard.d.ts.map +1 -1
- package/dist/charts/primitives/ChartCard.js +29 -114
- package/dist/charts/primitives/ChartCard.test.d.ts +2 -0
- package/dist/charts/primitives/ChartCard.test.d.ts.map +1 -0
- package/dist/charts/sparklines/BarSparkline.d.ts +26 -2
- package/dist/charts/sparklines/BarSparkline.d.ts.map +1 -1
- package/dist/charts/sparklines/BarSparkline.js +18 -4
- package/dist/cli/check-coverage.test.d.ts +2 -0
- package/dist/cli/check-coverage.test.d.ts.map +1 -0
- package/dist/cli/index.d.ts +67 -4
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +225 -7
- package/dist/connectivity/connectivity-indicator.d.ts +4 -1
- package/dist/connectivity/connectivity-indicator.d.ts.map +1 -1
- package/dist/connectivity/connectivity-indicator.js +1 -1
- package/dist/content/index.d.ts +5 -3
- package/dist/content/index.d.ts.map +1 -1
- package/dist/content/index.js +4 -2
- package/dist/content/prose.module.css +7 -28
- package/dist/controls/actions.d.ts +169 -0
- package/dist/controls/actions.d.ts.map +1 -0
- package/dist/controls/actions.js +287 -0
- package/dist/controls/actions.module.css +62 -0
- package/dist/controls/actions.module.css.d.ts +13 -0
- package/dist/controls/actions.test.d.ts +2 -0
- package/dist/controls/actions.test.d.ts.map +1 -0
- package/dist/controls/actions.type-guard.test.d.ts +2 -0
- package/dist/controls/actions.type-guard.test.d.ts.map +1 -0
- package/dist/controls/compare-filter.d.ts +41 -0
- package/dist/controls/compare-filter.d.ts.map +1 -0
- package/dist/controls/compare-filter.js +23 -0
- package/dist/controls/control-group.d.ts +19 -0
- package/dist/controls/control-group.d.ts.map +1 -0
- package/dist/controls/control-group.js +20 -0
- package/dist/controls/control-group.test.d.ts +2 -0
- package/dist/controls/control-group.test.d.ts.map +1 -0
- package/dist/controls/controls.module.css +542 -0
- package/dist/controls/controls.module.css.d.ts +35 -0
- package/dist/controls/controls.router.test.d.ts +2 -0
- package/dist/controls/controls.router.test.d.ts.map +1 -0
- package/dist/controls/enum-filter.d.ts +30 -0
- package/dist/controls/enum-filter.d.ts.map +1 -0
- package/dist/controls/enum-filter.js +91 -0
- package/dist/controls/filter-context.d.ts +55 -0
- package/dist/controls/filter-context.d.ts.map +1 -0
- package/dist/controls/filter-context.js +69 -0
- package/dist/controls/filter-pill.d.ts +28 -0
- package/dist/controls/filter-pill.d.ts.map +1 -0
- package/dist/controls/filter-pill.js +70 -0
- package/dist/controls/filter-set.d.ts +13 -0
- package/dist/controls/filter-set.d.ts.map +1 -0
- package/dist/controls/filter-set.js +125 -0
- package/dist/controls/filter-set.test.d.ts +2 -0
- package/dist/controls/filter-set.test.d.ts.map +1 -0
- package/dist/controls/filter-sheet.d.ts +117 -0
- package/dist/controls/filter-sheet.d.ts.map +1 -0
- package/dist/controls/filter-sheet.js +146 -0
- package/dist/controls/glyphs.d.ts +27 -0
- package/dist/controls/glyphs.d.ts.map +1 -0
- package/dist/controls/glyphs.js +49 -0
- package/dist/controls/index.d.ts +19 -0
- package/dist/controls/index.d.ts.map +1 -0
- package/dist/controls/index.js +44 -0
- package/dist/controls/multi-select-filter.d.ts +23 -0
- package/dist/controls/multi-select-filter.d.ts.map +1 -0
- package/dist/controls/multi-select-filter.js +89 -0
- package/dist/controls/peer-boundary.test.d.ts +2 -0
- package/dist/controls/peer-boundary.test.d.ts.map +1 -0
- package/dist/controls/props-contract.test.d.ts +2 -0
- package/dist/controls/props-contract.test.d.ts.map +1 -0
- package/dist/controls/range-filter.d.ts +29 -0
- package/dist/controls/range-filter.d.ts.map +1 -0
- package/dist/controls/range-filter.js +120 -0
- package/dist/controls/search-filter.d.ts +10 -0
- package/dist/controls/search-filter.d.ts.map +1 -0
- package/dist/controls/search-filter.js +81 -0
- package/dist/controls/select-filter.d.ts +74 -0
- package/dist/controls/select-filter.d.ts.map +1 -0
- package/dist/controls/select-filter.js +10 -0
- package/dist/controls/sync-button.d.ts +38 -0
- package/dist/controls/sync-button.d.ts.map +1 -0
- package/dist/controls/sync-button.js +119 -0
- package/dist/controls/sync-button.module.css +63 -0
- package/dist/controls/sync-button.module.css.d.ts +11 -0
- package/dist/controls/sync-button.test.d.ts +2 -0
- package/dist/controls/sync-button.test.d.ts.map +1 -0
- package/dist/controls/toggle-filter.d.ts +9 -0
- package/dist/controls/toggle-filter.d.ts.map +1 -0
- package/dist/controls/toggle-filter.js +42 -0
- package/dist/controls/view-tabs.d.ts +23 -0
- package/dist/controls/view-tabs.d.ts.map +1 -0
- package/dist/controls/view-tabs.js +59 -0
- package/dist/controls-dates/date-range-picker.d.ts +4 -0
- package/dist/controls-dates/date-range-picker.d.ts.map +1 -0
- package/dist/controls-dates/date-range-picker.js +18 -0
- package/dist/controls-dates/index.d.ts +9 -0
- package/dist/controls-dates/index.d.ts.map +1 -0
- package/dist/controls-dates/index.js +4 -0
- package/dist/dashboard/delta-badge.d.ts +6 -12
- package/dist/dashboard/delta-badge.d.ts.map +1 -1
- package/dist/dashboard/delta-badge.js +1 -50
- package/dist/dashboard/settings-section.d.ts +6 -4
- package/dist/dashboard/settings-section.d.ts.map +1 -1
- package/dist/dashboard/settings-section.js +23 -16
- package/dist/dashboard/settings-section.module.css +10 -0
- package/dist/dashboard/settings-section.module.css.d.ts +1 -0
- package/dist/dashboard/settings-section.test.d.ts +2 -0
- package/dist/dashboard/settings-section.test.d.ts.map +1 -0
- package/dist/dashboard/stat-card.d.ts +44 -9
- package/dist/dashboard/stat-card.d.ts.map +1 -1
- package/dist/dashboard/stat-card.js +80 -48
- package/dist/dashboard/stat-card.module.css +82 -0
- package/dist/dashboard/stat-card.module.css.d.ts +11 -0
- package/dist/data/data-table.d.ts +37 -15
- package/dist/data/data-table.d.ts.map +1 -1
- package/dist/data/data-table.js +88 -58
- package/dist/guard/grace.test.d.ts +20 -0
- package/dist/guard/grace.test.d.ts.map +1 -0
- package/dist/guard/index.d.ts +66 -3
- package/dist/guard/index.d.ts.map +1 -1
- package/dist/guard/index.js +82 -7
- package/dist/guard/types.d.ts +3 -3
- package/dist/guard/types.d.ts.map +1 -1
- package/dist/index.d.ts +12 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -10
- package/dist/nav/types.d.ts +78 -2
- package/dist/nav/types.d.ts.map +1 -1
- package/dist/notifications/bell.d.ts +4 -1
- package/dist/notifications/bell.d.ts.map +1 -1
- package/dist/notifications/index.d.ts +1 -1
- package/dist/router-tanstack/field.d.ts +14 -0
- package/dist/router-tanstack/field.d.ts.map +1 -0
- package/dist/router-tanstack/field.js +4 -0
- package/dist/router-tanstack/index.d.ts +6 -2
- package/dist/router-tanstack/index.d.ts.map +1 -1
- package/dist/router-tanstack/index.js +4 -0
- package/dist/router-tanstack/multi-search-param-store.d.ts +4 -52
- package/dist/router-tanstack/multi-search-param-store.d.ts.map +1 -1
- package/dist/router-tanstack/multi-search-param-store.js +19 -27
- package/dist/router-tanstack/search-param-store.d.ts +3 -87
- package/dist/router-tanstack/search-param-store.d.ts.map +1 -1
- package/dist/router-tanstack/search-param-store.js +16 -45
- package/dist/router-tanstack/search-store.d.ts +81 -0
- package/dist/router-tanstack/search-store.d.ts.map +1 -0
- package/dist/router-tanstack/search-store.js +187 -0
- package/dist/router-tanstack/search-store.router.test.d.ts +2 -0
- package/dist/router-tanstack/search-store.router.test.d.ts.map +1 -0
- package/dist/router-tanstack/search-store.test.d.ts +2 -0
- package/dist/router-tanstack/search-store.test.d.ts.map +1 -0
- package/dist/router-tanstack/use-nav.d.ts +0 -2
- package/dist/router-tanstack/use-nav.d.ts.map +1 -1
- package/dist/router-tanstack/use-nav.js +34 -12
- package/dist/router-tanstack/use-nav.test.d.ts +2 -0
- package/dist/router-tanstack/use-nav.test.d.ts.map +1 -0
- package/dist/section/index.d.ts +2 -0
- package/dist/section/index.d.ts.map +1 -0
- package/dist/section/index.js +4 -0
- package/dist/section/section.d.ts +24 -0
- package/dist/section/section.d.ts.map +1 -0
- package/dist/section/section.js +126 -0
- package/dist/section/section.module.css +104 -0
- package/dist/section/section.module.css.d.ts +11 -0
- package/dist/section/section.test.d.ts +2 -0
- package/dist/section/section.test.d.ts.map +1 -0
- package/dist/shell/app-breadcrumbs.d.ts.map +1 -1
- package/dist/shell/app-breadcrumbs.js +18 -15
- package/dist/shell/app-header.module.css +77 -37
- package/dist/shell/app-header.module.css.d.ts +2 -1
- package/dist/shell/app-mobile-nav.d.ts +9 -2
- package/dist/shell/app-mobile-nav.d.ts.map +1 -1
- package/dist/shell/app-mobile-nav.js +98 -11
- package/dist/shell/app-mobile-nav.module.css +8 -0
- package/dist/shell/app-mobile-nav.module.css.d.ts +1 -0
- package/dist/shell/app-sidebar.d.ts +55 -28
- package/dist/shell/app-sidebar.d.ts.map +1 -1
- package/dist/shell/app-sidebar.js +116 -67
- package/dist/shell/app-sidebar.module.css +303 -20
- package/dist/shell/app-sidebar.module.css.d.ts +19 -1
- package/dist/shell/index.d.ts +55 -21
- package/dist/shell/index.d.ts.map +1 -1
- package/dist/shell/index.js +40 -18
- package/dist/shell/mobile-nav-model.d.ts +13 -2
- package/dist/shell/mobile-nav-model.d.ts.map +1 -1
- package/dist/shell/mobile-nav-model.js +15 -1
- package/dist/shell/nav-count-badge.d.ts +1 -1
- package/dist/shell/page-bar.d.ts +51 -0
- package/dist/shell/page-bar.d.ts.map +1 -0
- package/dist/shell/page-bar.js +154 -0
- package/dist/shell/page-bar.module.css +178 -0
- package/dist/shell/page-bar.module.css.d.ts +17 -0
- package/dist/shell/page-bar.test.d.ts +2 -0
- package/dist/shell/page-bar.test.d.ts.map +1 -0
- package/dist/shell/sidebar-block-model.d.ts +48 -0
- package/dist/shell/sidebar-block-model.d.ts.map +1 -0
- package/dist/shell/sidebar-block-model.js +39 -0
- package/dist/shell/sidebar-blocks.d.ts +32 -0
- package/dist/shell/sidebar-blocks.d.ts.map +1 -0
- package/dist/shell/sidebar-blocks.js +169 -0
- package/dist/shell/sidebar-search.d.ts +13 -1
- package/dist/shell/sidebar-search.d.ts.map +1 -1
- package/dist/shell/sidebar-search.js +34 -1
- package/dist/shell/sidebar-search.module.css +26 -0
- package/dist/shell/sidebar-search.module.css.d.ts +2 -0
- package/dist/state/fields.d.ts +392 -0
- package/dist/state/fields.d.ts.map +1 -0
- package/dist/state/fields.js +369 -0
- package/dist/state/fields.test.d.ts +2 -0
- package/dist/state/fields.test.d.ts.map +1 -0
- package/dist/state/persisted.d.ts +48 -0
- package/dist/state/persisted.d.ts.map +1 -0
- package/dist/state/persisted.js +105 -0
- package/dist/state.d.ts +11 -56
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +14 -120
- package/dist/styles.css +13 -0
- package/dist/surfaces.d.ts +106 -24
- package/dist/surfaces.d.ts.map +1 -1
- package/dist/surfaces.js +155 -19
- package/dist/theme/controls.module.css +16 -1
- package/dist/theme/ctl-theme.d.ts +32 -0
- package/dist/theme/ctl-theme.d.ts.map +1 -0
- package/dist/theme/ctl-theme.js +54 -0
- package/dist/theme/ctl-theme.test.d.ts +2 -0
- package/dist/theme/ctl-theme.test.d.ts.map +1 -0
- package/dist/theme/ctl-tier-coverage.test.d.ts +2 -0
- package/dist/theme/ctl-tier-coverage.test.d.ts.map +1 -0
- package/dist/theme/divider-law.test.d.ts +2 -0
- package/dist/theme/divider-law.test.d.ts.map +1 -0
- package/dist/theme/icon-slot.d.ts +44 -0
- package/dist/theme/icon-slot.d.ts.map +1 -0
- package/dist/theme/icon-slot.js +21 -0
- package/dist/theme/icon-slot.module.css +47 -0
- package/dist/theme/icon-slot.module.css.d.ts +8 -0
- package/dist/theme/icon-slot.test.d.ts +2 -0
- package/dist/theme/icon-slot.test.d.ts.map +1 -0
- package/dist/theme/index.d.ts +1 -0
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js +82 -5
- package/dist/theme/layout-rhythm-css.test.d.ts +2 -0
- package/dist/theme/layout-rhythm-css.test.d.ts.map +1 -0
- package/dist/theme/segmented-control.module.css +20 -0
- package/dist/theme/shadow-surfaces.test.d.ts.map +1 -1
- package/dist/tokens/index.d.ts +12 -0
- package/dist/tokens/index.d.ts.map +1 -1
- package/dist/tokens/index.js +38 -8
- package/dist/tokens/palette.d.ts +97 -61
- package/dist/tokens/palette.d.ts.map +1 -1
- package/dist/tokens/palette.js +76 -38
- package/dist/tokens.css +10 -2
- package/dist/widget-header/delta-badge.d.ts +13 -0
- package/dist/widget-header/delta-badge.d.ts.map +1 -0
- package/dist/widget-header/delta-badge.js +29 -0
- package/dist/widget-header/delta-badge.test.d.ts +2 -0
- package/dist/widget-header/delta-badge.test.d.ts.map +1 -0
- package/dist/widget-header/index.d.ts +3 -0
- package/dist/widget-header/index.d.ts.map +1 -0
- package/dist/widget-header/index.js +6 -0
- package/dist/widget-header/no-mantine.test.d.ts +2 -0
- package/dist/widget-header/no-mantine.test.d.ts.map +1 -0
- package/dist/widget-header/widget-header.d.ts +37 -0
- package/dist/widget-header/widget-header.d.ts.map +1 -0
- package/dist/widget-header/widget-header.js +77 -0
- package/dist/widget-header/widget-header.module.css +335 -0
- package/dist/widget-header/widget-header.module.css.d.ts +24 -0
- package/dist/widget-header/widget-header.test.d.ts +2 -0
- package/dist/widget-header/widget-header.test.d.ts.map +1 -0
- package/llms.txt +30 -17
- package/package.json +14 -1
- package/src/charts/cursor/resolve.test.ts +29 -1
- package/src/charts/cursor/resolve.ts +38 -6
- package/src/charts/cursor/scope.tsx +6 -3
- package/src/charts/cursor/store.test.ts +19 -1
- package/src/charts/cursor/store.ts +10 -5
- package/src/charts/hooks/useChartCursor.ts +16 -8
- package/src/charts/index.ts +2 -2
- package/src/charts/primitives/CartesianChart.test.tsx +124 -0
- package/src/charts/primitives/ChartCard.test.tsx +66 -0
- package/src/charts/primitives/ChartCard.tsx +86 -146
- package/src/charts/sparklines/BarSparkline.tsx +43 -5
- package/src/cli/check-coverage.test.ts +297 -0
- package/src/cli/check-theme.test.ts +38 -14
- package/src/cli/index.ts +392 -16
- package/src/cli/init-sync.test.ts +97 -0
- package/src/connectivity/connectivity-indicator.tsx +16 -9
- package/src/content/index.ts +16 -3
- package/src/content/prose.module.css +7 -28
- package/src/content/prose.module.css.test.ts +8 -24
- package/src/controls/actions.module.css +62 -0
- package/src/controls/actions.module.css.d.ts +13 -0
- package/src/controls/actions.test.tsx +252 -0
- package/src/controls/actions.tsx +655 -0
- package/src/controls/actions.type-guard.test.ts +63 -0
- package/src/controls/compare-filter.tsx +64 -0
- package/src/controls/control-group.test.tsx +229 -0
- package/src/controls/control-group.tsx +63 -0
- package/src/controls/controls.module.css +542 -0
- package/src/controls/controls.module.css.d.ts +35 -0
- package/src/controls/controls.router.test.tsx +637 -0
- package/src/controls/enum-filter.tsx +159 -0
- package/src/controls/filter-context.tsx +153 -0
- package/src/controls/filter-pill.tsx +120 -0
- package/src/controls/filter-set.test.tsx +472 -0
- package/src/controls/filter-set.tsx +225 -0
- package/src/controls/filter-sheet.tsx +285 -0
- package/src/controls/glyphs.tsx +81 -0
- package/src/controls/index.ts +48 -0
- package/src/controls/multi-select-filter.tsx +140 -0
- package/src/controls/peer-boundary.test.ts +85 -0
- package/src/controls/props-contract.test.tsx +106 -0
- package/src/controls/range-filter.tsx +184 -0
- package/src/controls/search-filter.tsx +123 -0
- package/src/controls/select-filter.tsx +89 -0
- package/src/controls/sync-button.module.css +63 -0
- package/src/controls/sync-button.module.css.d.ts +11 -0
- package/src/controls/sync-button.test.tsx +183 -0
- package/src/controls/sync-button.tsx +197 -0
- package/src/controls/toggle-filter.tsx +60 -0
- package/src/controls/view-tabs.tsx +110 -0
- package/src/controls-dates/date-range-picker.tsx +42 -0
- package/src/controls-dates/index.ts +8 -0
- package/src/dashboard/delta-badge.tsx +4 -74
- package/src/dashboard/settings-section.module.css +10 -0
- package/src/dashboard/settings-section.module.css.d.ts +1 -0
- package/src/dashboard/settings-section.test.tsx +56 -0
- package/src/dashboard/settings-section.tsx +33 -30
- package/src/dashboard/stat-card.module.css +82 -0
- package/src/dashboard/stat-card.module.css.d.ts +11 -0
- package/src/dashboard/stat-card.test.tsx +67 -1
- package/src/dashboard/stat-card.tsx +209 -68
- package/src/data/data-table.test.tsx +96 -11
- package/src/data/data-table.tsx +220 -84
- package/src/guard/check-source.test.ts +126 -13
- package/src/guard/grace.test.ts +149 -0
- package/src/guard/index.ts +172 -29
- package/src/guard/types.ts +4 -2
- package/src/index.ts +46 -5
- package/src/nav/types.ts +84 -2
- package/src/notifications/bell.tsx +6 -3
- package/src/notifications/index.ts +1 -1
- package/src/router-tanstack/field.ts +31 -0
- package/src/router-tanstack/index.ts +24 -2
- package/src/router-tanstack/multi-search-param-store.test.ts +71 -3
- package/src/router-tanstack/multi-search-param-store.ts +46 -77
- package/src/router-tanstack/search-param-store.ts +42 -159
- package/src/router-tanstack/search-store.router.test.tsx +661 -0
- package/src/router-tanstack/search-store.test.ts +418 -0
- package/src/router-tanstack/search-store.ts +380 -0
- package/src/router-tanstack/use-nav.test.tsx +187 -0
- package/src/router-tanstack/use-nav.ts +72 -14
- package/src/section/index.ts +1 -0
- package/src/section/section.module.css +104 -0
- package/src/section/section.module.css.d.ts +11 -0
- package/src/section/section.test.tsx +204 -0
- package/src/section/section.tsx +220 -0
- package/src/shell/app-breadcrumbs.tsx +44 -31
- package/src/shell/app-header.module.css +77 -37
- package/src/shell/app-header.module.css.d.ts +2 -1
- package/src/shell/app-mobile-nav.module.css +8 -0
- package/src/shell/app-mobile-nav.module.css.d.ts +1 -0
- package/src/shell/app-mobile-nav.tsx +147 -8
- package/src/shell/app-sidebar-account.tsx +2 -2
- package/src/shell/app-sidebar.module.css +303 -20
- package/src/shell/app-sidebar.module.css.d.ts +19 -1
- package/src/shell/app-sidebar.test.tsx +456 -41
- package/src/shell/app-sidebar.tsx +276 -140
- package/src/shell/index.test.tsx +291 -5
- package/src/shell/index.tsx +137 -38
- package/src/shell/mobile-nav-model.test.ts +228 -7
- package/src/shell/mobile-nav-model.ts +53 -3
- package/src/shell/nav-count-badge.tsx +1 -1
- package/src/shell/page-bar.module.css +178 -0
- package/src/shell/page-bar.module.css.d.ts +17 -0
- package/src/shell/page-bar.test.tsx +316 -0
- package/src/shell/page-bar.tsx +315 -0
- package/src/shell/sidebar-block-model.ts +83 -0
- package/src/shell/sidebar-blocks.tsx +301 -0
- package/src/shell/sidebar-search.module.css +26 -0
- package/src/shell/sidebar-search.module.css.d.ts +2 -0
- package/src/shell/sidebar-search.tsx +71 -2
- package/src/state/fields.test.tsx +258 -0
- package/src/state/fields.ts +892 -0
- package/src/state/persisted.ts +211 -0
- package/src/state.ts +46 -240
- package/src/styles.css +13 -0
- package/src/surfaces.ts +203 -36
- package/src/theme/controls.module.css +16 -1
- package/src/theme/ctl-theme.test.tsx +275 -0
- package/src/theme/ctl-theme.tsx +138 -0
- package/src/theme/ctl-tier-coverage.test.ts +170 -0
- package/src/theme/density-relations.test.ts +106 -51
- package/src/theme/divider-law.test.ts +259 -0
- package/src/theme/icon-slot.module.css +47 -0
- package/src/theme/icon-slot.module.css.d.ts +8 -0
- package/src/theme/icon-slot.test.tsx +275 -0
- package/src/theme/icon-slot.tsx +59 -0
- package/src/theme/index.ts +165 -3
- package/src/theme/layout-rhythm-css.test.ts +72 -0
- package/src/theme/radius.test.ts +11 -1
- package/src/theme/segmented-control.module.css +20 -0
- package/src/theme/shadow-surfaces.test.ts +20 -7
- package/src/theme/spacing.test.ts +75 -27
- package/src/theme/use-basalt-spacing.ts +2 -2
- package/src/tokens/density.test.ts +7 -25
- package/src/tokens/index.ts +48 -8
- package/src/tokens/palette.ts +107 -73
- package/src/widget-header/delta-badge.test.tsx +60 -0
- package/src/widget-header/delta-badge.tsx +57 -0
- package/src/widget-header/index.ts +2 -0
- package/src/widget-header/no-mantine.test.ts +33 -0
- package/src/widget-header/widget-header.module.css +335 -0
- package/src/widget-header/widget-header.module.css.d.ts +24 -0
- package/src/widget-header/widget-header.test.tsx +187 -0
- package/src/widget-header/widget-header.tsx +168 -0
- package/agent/rules/basalt-agent.md +0 -452
- package/agent/rules/basalt-app.md +0 -246
- package/agent/rules/basalt-commands.md +0 -320
- package/agent/rules/basalt-content.md +0 -409
- package/agent/rules/basalt-data.md +0 -329
- package/agent/rules/basalt-forms.md +0 -186
- package/agent/rules/basalt-notifications.md +0 -264
- package/agent/rules/basalt-query.md +0 -187
- package/agent/rules/basalt-router.md +0 -336
- package/dist/content/article-filter-bar.d.ts +0 -40
- package/dist/content/article-filter-bar.d.ts.map +0 -1
- package/dist/content/article-filter-bar.js +0 -56
- package/dist/shell/page-header.d.ts +0 -13
- package/dist/shell/page-header.d.ts.map +0 -1
- package/dist/shell/page-header.js +0 -23
- package/src/content/article-filter-bar.tsx +0 -88
- package/src/shell/page-header.tsx +0 -35
package/dist/theme/index.js
CHANGED
|
@@ -60,6 +60,7 @@ import navLinkClasses from "./nav-link.module.css";
|
|
|
60
60
|
import segmentedControlClasses from "./segmented-control.module.css";
|
|
61
61
|
import timelineClasses from "./timeline.module.css";
|
|
62
62
|
import { useBasaltSpacing } from "./use-basalt-spacing.js";
|
|
63
|
+
import { CTL_THEME, CtlSlot } from "./ctl-theme.js";
|
|
63
64
|
function hexToRgb(h) {
|
|
64
65
|
const n = Number.parseInt(h.slice(1), 16);
|
|
65
66
|
return [n >> 16 & 255, n >> 8 & 255, n & 255];
|
|
@@ -490,7 +491,12 @@ function buildTheme(data, options = {}) {
|
|
|
490
491
|
SegmentedControl: SegmentedControl.extend({
|
|
491
492
|
defaultProps: { radius: radius.card },
|
|
492
493
|
classNames: { label: segmentedControlClasses.label },
|
|
493
|
-
styles
|
|
494
|
+
// `label` gets a `ctl`-only min-height (function-form `styles`, same `props.size === …` gate
|
|
495
|
+
// as Button/ActionIcon/Input's `vars` overrides above) so a `size="ctl"` SegmentedControl
|
|
496
|
+
// matches the ctl Button/Input box exactly instead of following its own fixed padding — see
|
|
497
|
+
// `CTL_SEGMENT_PADDING_Y`'s doc below for why the label's own padding alone can't track
|
|
498
|
+
// density. `sm`/`md` SegmentedControls (forms) are untouched, keeping Mantine's own sizing.
|
|
499
|
+
styles: (_theme, props) => ({
|
|
494
500
|
root: {
|
|
495
501
|
backgroundColor: "color-mix(in srgb, var(--vx-ink) 6%, transparent)",
|
|
496
502
|
padding: `${SPACE_FIXED.segmentedTrackInset}px`
|
|
@@ -499,8 +505,18 @@ function buildTheme(data, options = {}) {
|
|
|
499
505
|
backgroundColor: "var(--vx-surface-panel)",
|
|
500
506
|
boxShadow: "var(--vx-shadow-ctrl)",
|
|
501
507
|
borderRadius: "var(--vx-radius-tight)"
|
|
502
|
-
}
|
|
503
|
-
|
|
508
|
+
},
|
|
509
|
+
// Conditionally spread the WHOLE key (never a present `label: undefined`) — the package
|
|
510
|
+
// builds under `exactOptionalPropertyTypes`, which treats a key present-but-`undefined` as
|
|
511
|
+
// a type error distinct from the key being absent.
|
|
512
|
+
...props.size === "ctl" ? {
|
|
513
|
+
label: {
|
|
514
|
+
display: "inline-flex",
|
|
515
|
+
alignItems: "center",
|
|
516
|
+
minHeight: `calc(var(--vx-space-control-height-ctl) * var(--mantine-scale) - ${2 * SPACE_FIXED.segmentedTrackInset}px)`
|
|
517
|
+
}
|
|
518
|
+
} : {}
|
|
519
|
+
})
|
|
504
520
|
}),
|
|
505
521
|
// Track = ink-8%; leader/section fill colors are a per-usage `color` prop (left to consumers).
|
|
506
522
|
Progress: Progress.extend({
|
|
@@ -679,17 +695,24 @@ function buildTheme(data, options = {}) {
|
|
|
679
695
|
// body cells is a per-table call-site concern, left to consumers. `--table-border-color`
|
|
680
696
|
// drives row separators AND the opt-in `withTableBorder` outer border — both drop to the
|
|
681
697
|
// hairline (Mantine's default reads gray-3/dark-4 = the STRONG line, too heavy in a card).
|
|
698
|
+
// Row heights are declared here rather than through `verticalSpacing`, because Mantine derives
|
|
699
|
+
// BOTH `th` and `td` padding from that one prop — a 36/40 pair (label band over roomier data
|
|
700
|
+
// rows) is not expressible by it at all. `height` on a table cell behaves as a MINIMUM, so a
|
|
701
|
+
// wrapping cell still grows; `verticalSpacing` keeps working on top of it for a consumer that
|
|
702
|
+
// wants a denser or looser table than the tier.
|
|
682
703
|
Table: Table.extend({
|
|
683
704
|
classNames: { table: controlsClasses.tableRoot },
|
|
684
705
|
styles: {
|
|
685
706
|
th: {
|
|
707
|
+
height: spacing.step.tableHeaderHeight,
|
|
686
708
|
fontFamily: "var(--basalt-font-mono)",
|
|
687
709
|
fontSize: VX.text.micro,
|
|
688
710
|
fontWeight: 500,
|
|
689
711
|
letterSpacing: "0.06em",
|
|
690
712
|
textTransform: "uppercase",
|
|
691
713
|
color: "var(--vx-faint)"
|
|
692
|
-
}
|
|
714
|
+
},
|
|
715
|
+
td: { height: spacing.step.tableRowHeight }
|
|
693
716
|
}
|
|
694
717
|
}),
|
|
695
718
|
// The v9 thumb indicator is a center dot painted in the TRACK color — over the remapped
|
|
@@ -785,10 +808,62 @@ function familyBridge(data) {
|
|
|
785
808
|
}
|
|
786
809
|
return vars;
|
|
787
810
|
}
|
|
811
|
+
const CTL_PADDING_X = 10;
|
|
812
|
+
const CTL_INPUT_PADDING_Y = 4;
|
|
813
|
+
const CTL_SEGMENT_PADDING_Y = 2.5;
|
|
814
|
+
const CTL_CHEVRON_SIZE = 14;
|
|
815
|
+
const CTL_TOGGLE_SIZE = 16;
|
|
816
|
+
const CTL_RADIO_DOT_SIZE = CTL_TOGGLE_SIZE * 0.4;
|
|
817
|
+
const CTL_SWITCH_HEIGHT = 18;
|
|
818
|
+
const CTL_SWITCH_WIDTH = 30;
|
|
819
|
+
const CTL_SWITCH_THUMB_SIZE = 12;
|
|
820
|
+
const CTL_SWITCH_TRACK_LABEL_SIZE = 5;
|
|
821
|
+
const CTL_SWITCH_TRACK_LABEL_PADDING = 2;
|
|
822
|
+
function ctlSizeVars() {
|
|
823
|
+
const ctlHeight = "calc(var(--vx-space-control-height-ctl) * var(--mantine-scale))";
|
|
824
|
+
return {
|
|
825
|
+
"--button-height-ctl": ctlHeight,
|
|
826
|
+
"--button-padding-x-ctl": `calc(${pxRem(CTL_PADDING_X)} * var(--mantine-scale))`,
|
|
827
|
+
"--input-height-ctl": ctlHeight,
|
|
828
|
+
"--input-padding-y-ctl": `calc(${pxRem(CTL_INPUT_PADDING_Y)} * var(--mantine-scale))`,
|
|
829
|
+
"--ai-size-ctl": ctlHeight,
|
|
830
|
+
"--ai-size-icon": "calc(var(--vx-space-control-height-widget) * var(--mantine-scale))",
|
|
831
|
+
// A shorthand pair (`<y> <x>`), the shape SegmentedControl's own `--sc-padding-*` vars take.
|
|
832
|
+
// `y` stays a bare literal (the label's own box height is now enforced by the `size === 'ctl'`
|
|
833
|
+
// `minHeight` override in `SegmentedControl.extend` above, not by this padding), `x` scales like
|
|
834
|
+
// every other ctl-tier horizontal inset (`--button-padding-x-ctl`, `--badge-padding-x-ctl`).
|
|
835
|
+
"--sc-padding-ctl": `${pxRem(CTL_SEGMENT_PADDING_Y)} calc(${pxRem(CTL_PADDING_X)} * var(--mantine-scale))`,
|
|
836
|
+
"--combobox-option-padding-ctl": `${pxRem(CTL_SEGMENT_PADDING_Y)} ${pxRem(CTL_PADDING_X)}`,
|
|
837
|
+
"--combobox-chevron-size-ctl": pxRem(CTL_CHEVRON_SIZE),
|
|
838
|
+
"--badge-height-ctl": ctlHeight,
|
|
839
|
+
"--badge-padding-x-ctl": `calc(${pxRem(CTL_PADDING_X)} * var(--mantine-scale))`,
|
|
840
|
+
"--badge-fz-ctl": `calc(${pxRem(VX.text.xs)} * var(--mantine-scale))`,
|
|
841
|
+
// `= VX.text.sm` per `docs/CONTROLS-SPEC.md` §5 — same `calc(<rem> * var(--mantine-scale))`
|
|
842
|
+
// shape Mantine's own `--mantine-font-size-*` vars use.
|
|
843
|
+
"--mantine-font-size-ctl": `calc(${pxRem(VX.text.sm)} * var(--mantine-scale))`,
|
|
844
|
+
"--mantine-line-height-ctl": "var(--mantine-line-height-sm)",
|
|
845
|
+
// Radio / Checkbox / Switch — the three components whose DEFAULT (`sm`, a 20px indicator) sat
|
|
846
|
+
// beside a 13.5px option label in every popover and sheet basalt draws. Every prefix here was
|
|
847
|
+
// read out of the installed `@mantine/core` source, and `ctl-tier-coverage.test.ts` now scans
|
|
848
|
+
// those three components too, so a future minor that adds a `getSize` call fails the build
|
|
849
|
+
// instead of resolving the new var to its initial value. Note there is NO
|
|
850
|
+
// `--checkbox-icon-size`: Checkbox reads only `checkbox-size` and derives its tick in CSS.
|
|
851
|
+
"--radio-size-ctl": `calc(${pxRem(CTL_TOGGLE_SIZE)} * var(--mantine-scale))`,
|
|
852
|
+
"--radio-icon-size-ctl": `calc(${pxRem(CTL_RADIO_DOT_SIZE)} * var(--mantine-scale))`,
|
|
853
|
+
"--checkbox-size-ctl": `calc(${pxRem(CTL_TOGGLE_SIZE)} * var(--mantine-scale))`,
|
|
854
|
+
"--switch-height-ctl": `calc(${pxRem(CTL_SWITCH_HEIGHT)} * var(--mantine-scale))`,
|
|
855
|
+
"--switch-width-ctl": `calc(${pxRem(CTL_SWITCH_WIDTH)} * var(--mantine-scale))`,
|
|
856
|
+
"--switch-thumb-size-ctl": `calc(${pxRem(CTL_SWITCH_THUMB_SIZE)} * var(--mantine-scale))`,
|
|
857
|
+
"--switch-label-font-size-ctl": pxRem(CTL_SWITCH_TRACK_LABEL_SIZE),
|
|
858
|
+
"--switch-track-label-padding-ctl": pxRem(CTL_SWITCH_TRACK_LABEL_PADDING)
|
|
859
|
+
};
|
|
860
|
+
}
|
|
788
861
|
function buildCssVariablesResolver(data) {
|
|
789
862
|
const { INK, NEUTRAL, SURFACE } = data;
|
|
790
863
|
return (theme) => ({
|
|
791
|
-
variables: {
|
|
864
|
+
variables: {
|
|
865
|
+
...ctlSizeVars()
|
|
866
|
+
},
|
|
792
867
|
light: {
|
|
793
868
|
...onColorVars(theme, "light", data),
|
|
794
869
|
...familyBridge(data),
|
|
@@ -881,6 +956,8 @@ function createBasaltTheme(overrides, options) {
|
|
|
881
956
|
return overrides ? mergeThemeOverrides(theme, overrides) : theme;
|
|
882
957
|
}
|
|
883
958
|
export {
|
|
959
|
+
CTL_THEME,
|
|
960
|
+
CtlSlot,
|
|
884
961
|
baseTheme,
|
|
885
962
|
createBasaltTheme,
|
|
886
963
|
cssVariablesResolver,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout-rhythm-css.test.d.ts","sourceRoot":"","sources":["../../src/theme/layout-rhythm-css.test.ts"],"names":[],"mappings":""}
|
|
@@ -12,3 +12,23 @@
|
|
|
12
12
|
color: var(--vx-ink);
|
|
13
13
|
font-weight: 600;
|
|
14
14
|
}
|
|
15
|
+
|
|
16
|
+
/*
|
|
17
|
+
* Numeric segment labels read mono `VX.text.xs` (`docs/CONTROLS-SPEC.md` §3 last paragraph, C7) —
|
|
18
|
+
* a consumer opts in with a bare `data-numeric` attribute on the `SegmentedControl` itself (an
|
|
19
|
+
* unrecognized native prop, forwarded onto the root `Box` via Mantine's own `...others` spread,
|
|
20
|
+
* `SegmentedControl.mjs`), retiring the per-consumer `theme-allow` + inline `styles={{ label: {
|
|
21
|
+
* fontFamily: 'var(--basalt-font-mono)', fontSize: 11.5 } }}` hack (`DashboardDateFilter.tsx`).
|
|
22
|
+
* The MONO FACE itself is now a package-wide law in `styles.css` (`[data-numeric]` in `@layer
|
|
23
|
+
* basalt`, so a plain `<Text data-numeric>` works too — the module-scoped copy is why it used to
|
|
24
|
+
* look broken outside a SegmentedControl); what stays here is the component's own `font-size`, plus
|
|
25
|
+
* the face restated so this module is still correct read on its own.
|
|
26
|
+
* `[data-numeric]` is a bare attribute selector, not a CSS-module class, so it is intentionally left
|
|
27
|
+
* unscoped — same ancestor-attribute pattern as `controls.module.css`'s
|
|
28
|
+
* `html[data-mantine-color-scheme] .inputWrapper[data-variant='default']`. `.label` here is the
|
|
29
|
+
* SAME scoped class `data-active` above targets, so both rules can co-apply (active + numeric).
|
|
30
|
+
*/
|
|
31
|
+
[data-numeric] .label {
|
|
32
|
+
font-family: var(--basalt-font-mono);
|
|
33
|
+
font-size: var(--vx-text-xs);
|
|
34
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shadow-surfaces.test.d.ts","sourceRoot":"","sources":["../../src/theme/shadow-surfaces.test.ts"],"names":[],"mappings":"AAsHA,KAAK,UAAU,GAAG;IAChB,iEAAiE;IACjE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB;;iGAE6F;IAC7F,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB,CAAA;AA6FD,KAAK,kBAAkB,GAAG,UAAU,GAAG;IACrC;;;;;mFAK+E;IAC/E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,kBAAkB,
|
|
1
|
+
{"version":3,"file":"shadow-surfaces.test.d.ts","sourceRoot":"","sources":["../../src/theme/shadow-surfaces.test.ts"],"names":[],"mappings":"AAsHA,KAAK,UAAU,GAAG;IAChB,iEAAiE;IACjE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB;;iGAE6F;IAC7F,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB,CAAA;AA6FD,KAAK,kBAAkB,GAAG,UAAU,GAAG;IACrC;;;;;mFAK+E;IAC/E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,kBAAkB,EAgMxD,CAAA"}
|
package/dist/tokens/index.d.ts
CHANGED
|
@@ -55,6 +55,18 @@ export declare const VX: {
|
|
|
55
55
|
readonly radiusCard: "var(--vx-radius-card)";
|
|
56
56
|
readonly radiusCtrl: "var(--vx-radius-ctrl)";
|
|
57
57
|
readonly radiusPill: "var(--vx-radius-pill)";
|
|
58
|
+
readonly space: {
|
|
59
|
+
readonly controlHeightTag: "var(--vx-space-control-height-tag)";
|
|
60
|
+
readonly controlHeightWidget: "var(--vx-space-control-height-widget)";
|
|
61
|
+
readonly controlHeightCtl: "var(--vx-space-control-height-ctl)";
|
|
62
|
+
readonly touchControlHeight: "var(--vx-space-touch-control-height)";
|
|
63
|
+
readonly pageBarRowHeight: "var(--vx-space-page-bar-row-height)";
|
|
64
|
+
readonly sectionHeaderHeight: "var(--vx-space-section-header-height)";
|
|
65
|
+
readonly widgetHeaderHeight: "var(--vx-space-widget-header-height)";
|
|
66
|
+
readonly sidebarBlockRowHeight: "var(--vx-space-sidebar-block-row-height)";
|
|
67
|
+
readonly controlGap: "var(--vx-space-control-gap)";
|
|
68
|
+
readonly sheetRowHeight: "var(--vx-space-sheet-row-height)";
|
|
69
|
+
};
|
|
58
70
|
readonly line2Dark: "var(--vx-line2)";
|
|
59
71
|
readonly good: "var(--vx-good)";
|
|
60
72
|
readonly goodSoft: "var(--vx-good-soft)";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tokens/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAYH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAMvE,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,WAAW,CAAA;AAOjC,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AACnF,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAM5D,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxC,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAO7C,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AACzC,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAE5C,wFAAwF;AACxF,MAAM,MAAM,SAAS,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAEvD,8FAA8F;AAC9F,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;AAEjD;;;;;;GAMG;AACH,eAAO,MAAM,KAAK,GAAI,OAAO,MAAM,EAAE,GAAG,MAAM,KAAG,MACoB,CAAA;AA6DrE,eAAO,MAAM,EAAE
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tokens/index.ts"],"names":[],"mappings":"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"}
|
package/dist/tokens/index.js
CHANGED
|
@@ -68,6 +68,22 @@ const VX = {
|
|
|
68
68
|
// Fully-rounded pill affordance (scroll-to-bottom button, chips) — fixed, does not track the
|
|
69
69
|
// radius knob (see `RADIUS_STEP.pill`'s doc in `tokens/palette.ts`).
|
|
70
70
|
radiusPill: "var(--vx-radius-pill)",
|
|
71
|
+
// Controls tier sizing (`docs/CONTROLS-SPEC.md` §5) — `var()` refs onto the density-tracking
|
|
72
|
+
// `--vx-space-*` declarations `spaceDecls` emits above (same ref pattern as `radiusCard`/
|
|
73
|
+
// `radiusCtrl`), so a home/control reads ONE source for its tier height whether it's Mantine
|
|
74
|
+
// chrome (`cssVariablesResolver`/`CTL_THEME`) or a Mantine-free composed layout.
|
|
75
|
+
space: {
|
|
76
|
+
controlHeightTag: "var(--vx-space-control-height-tag)",
|
|
77
|
+
controlHeightWidget: "var(--vx-space-control-height-widget)",
|
|
78
|
+
controlHeightCtl: "var(--vx-space-control-height-ctl)",
|
|
79
|
+
touchControlHeight: "var(--vx-space-touch-control-height)",
|
|
80
|
+
pageBarRowHeight: "var(--vx-space-page-bar-row-height)",
|
|
81
|
+
sectionHeaderHeight: "var(--vx-space-section-header-height)",
|
|
82
|
+
widgetHeaderHeight: "var(--vx-space-widget-header-height)",
|
|
83
|
+
sidebarBlockRowHeight: "var(--vx-space-sidebar-block-row-height)",
|
|
84
|
+
controlGap: "var(--vx-space-control-gap)",
|
|
85
|
+
sheetRowHeight: "var(--vx-space-sheet-row-height)"
|
|
86
|
+
},
|
|
71
87
|
// Secondary-line color (back-compat alias; now theme-aware via --vx-line2)
|
|
72
88
|
line2Dark: "var(--vx-line2)",
|
|
73
89
|
// Semantic fills — consistent opacity across all charts
|
|
@@ -271,6 +287,14 @@ function spaceDecls(space) {
|
|
|
271
287
|
// `ActionIcon.extend` `vars`), single-sourced from the SAME `controlHeight` anchor
|
|
272
288
|
// `space-input-height` reads from (`SPACE_ANCHORS_BASE`'s doc in `tokens/palette.ts`).
|
|
273
289
|
decl("space-control-height", pxRem(space.anchors.controlHeight)),
|
|
290
|
+
// Controls tier heights (`docs/CONTROLS-SPEC.md` §5) — same rem-plus-`--mantine-scale`
|
|
291
|
+
// reconstruction as `space-input-height`/`space-control-height` above; `theme/ctl-theme.tsx`'s
|
|
292
|
+
// `CTL_THEME` and the `cssVariablesResolver`'s `-ctl`/`-icon` var sets both wrap these in the
|
|
293
|
+
// matching `calc(... * var(--mantine-scale))`.
|
|
294
|
+
decl("space-control-height-tag", pxRem(space.anchors.controlHeightTag)),
|
|
295
|
+
decl("space-control-height-widget", pxRem(space.anchors.controlHeightWidget)),
|
|
296
|
+
decl("space-control-height-ctl", pxRem(space.anchors.controlHeightCtl)),
|
|
297
|
+
decl("space-touch-control-height", pxRem(space.anchors.touchControlHeight)),
|
|
274
298
|
decl("space-stack-xs", `${space.anchors.stackXs}px`),
|
|
275
299
|
decl("space-stack-sm", `${space.anchors.stackSm}px`),
|
|
276
300
|
decl("space-stack-md", `${space.anchors.stackMd}px`),
|
|
@@ -278,11 +302,9 @@ function spaceDecls(space) {
|
|
|
278
302
|
decl("space-stack-xl", `${space.anchors.stackXl}px`),
|
|
279
303
|
// The CSS-module spacing sweep's one-offs (docs/STATUS.md) — same single-source reasoning,
|
|
280
304
|
// grouped to match `SPACE_STEP_BASE`'s own grouping in tokens/palette.ts.
|
|
281
|
-
//
|
|
282
|
-
//
|
|
283
|
-
// whichever matches its own breakpoint (see `content/prose.module.css`).
|
|
305
|
+
// ONE value at every viewport since 1.26.0 — the AppShell header is a single 48px row (law
|
|
306
|
+
// C14), so the `-mobile` override of the old Decision-3 responsive pair is gone.
|
|
284
307
|
decl("space-sticky-header-clearance", `${space.step.stickyHeaderClearance}px`),
|
|
285
|
-
decl("space-sticky-header-clearance-mobile", `${space.step.stickyHeaderClearanceMobile}px`),
|
|
286
308
|
decl("space-nav-icon-gap", `${space.step.navIconGap}px`),
|
|
287
309
|
decl("space-sidebar-region-gap", `${space.step.sidebarRegionGap}px`),
|
|
288
310
|
decl("space-prose-quote-inset-y", `${space.step.proseQuoteInsetY}px`),
|
|
@@ -359,7 +381,6 @@ function spaceDecls(space) {
|
|
|
359
381
|
decl("space-sidebar-child-list-indent", `${space.step.sidebarChildListIndent}px`),
|
|
360
382
|
decl("space-sidebar-child-row-inset-y", `${space.step.sidebarChildRowInsetY}px`),
|
|
361
383
|
decl("space-sidebar-child-row-indent", `${space.step.sidebarChildRowIndent}px`),
|
|
362
|
-
decl("space-app-header-mobile-actions-height", `${space.step.appHeaderMobileActionsHeight}px`),
|
|
363
384
|
decl("space-mobile-nav-tab-gap", `${space.step.mobileNavTabGap}px`),
|
|
364
385
|
decl("space-mobile-nav-icon-size", `${space.step.mobileNavIconSize}px`),
|
|
365
386
|
decl("space-mobile-nav-tab-inset-y", `${space.step.mobileNavTabInsetY}px`),
|
|
@@ -378,12 +399,21 @@ function spaceDecls(space) {
|
|
|
378
399
|
decl("space-badge-inset-x", `${space.step.badgeInsetX}px`),
|
|
379
400
|
decl("space-stat-card-gap", `${space.step.statCardGap}px`),
|
|
380
401
|
decl("space-virtual-row-inset-y", `${space.step.virtualRowInsetY}px`),
|
|
381
|
-
decl("space-virtual-row-inset-x", `${space.step.virtualRowInsetX}px`)
|
|
402
|
+
decl("space-virtual-row-inset-x", `${space.step.virtualRowInsetX}px`),
|
|
403
|
+
// Controls tier row/gap heights (`docs/CONTROLS-SPEC.md` §5) — the current commit's consumers
|
|
404
|
+
// are `theme/ctl-theme.tsx` (`--vx-space-control-gap`) and the wave-3/4 homes (`PageBar`,
|
|
405
|
+
// `WidgetHeader`, sidebar blocks, the mobile `Filters (n)` sheet) landing next.
|
|
406
|
+
decl("space-page-bar-row-height", pxRem(space.step.pageBarRowHeight)),
|
|
407
|
+
decl("space-section-header-height", pxRem(space.step.sectionHeaderHeight)),
|
|
408
|
+
decl("space-widget-header-height", pxRem(space.step.widgetHeaderHeight)),
|
|
409
|
+
decl("space-sidebar-block-row-height", pxRem(space.step.sidebarBlockRowHeight)),
|
|
410
|
+
decl("space-control-gap", `${space.step.controlGap}px`),
|
|
411
|
+
decl("space-sheet-row-height", pxRem(space.step.sheetRowHeight))
|
|
382
412
|
// `chartLegendGap`/`chartMarginTop`/`chartMarginRight`/`chartMarginBottom`/`chartMarginLeft`/
|
|
383
413
|
// `chartDotR`/`progressBarSize`/`timelineBullet` are DELIBERATELY absent — see this function's
|
|
384
414
|
// doc for why (JS-number-only consumers, zero `var()` reads). `appShellHeaderHeight`/
|
|
385
|
-
// `
|
|
386
|
-
// `shell/index.tsx` reads all
|
|
415
|
+
// `appShellNavbarWidth`/`appShellNavbarRailWidth` join that list —
|
|
416
|
+
// `shell/index.tsx` reads all three as JS numbers via `useBasaltSpacing()` (Mantine's `AppShell`
|
|
387
417
|
// `header`/`navbar` props take numbers, not `var()` strings), so a `--vx-space-app-shell-*` decl
|
|
388
418
|
// here would have had zero consumers, framework-wide, the same dead-weight shape this function's
|
|
389
419
|
// doc already calls out for the chart/Progress/Timeline group. `sidebarAccountMenuWidth`/
|
package/dist/tokens/palette.d.ts
CHANGED
|
@@ -238,6 +238,23 @@ declare const SPACE_ANCHORS_BASE: {
|
|
|
238
238
|
* Input tracks it at every density level instead of only coinciding at level 0 (the defect this
|
|
239
239
|
* anchor fixes — Mantine's own `--button-height-md`/`--ai-size` are static, density-blind). */
|
|
240
240
|
readonly controlHeight: 42;
|
|
241
|
+
/** The `size="icon"` count-tag height (`docs/CONTROLS-SPEC.md` §5) — inline chip / table-cell
|
|
242
|
+
* count badge. Floored at 18px in {@link deriveSpacing} (same "negative level can't collapse a
|
|
243
|
+
* real control below a legible/tappable minimum" reasoning as `sidebarSearchTriggerHeight`'s WCAG
|
|
244
|
+
* floor, one notch tighter since a count tag is a badge, not a primary interactive target). */
|
|
245
|
+
readonly controlHeightTag: 20;
|
|
246
|
+
/** The `size="icon"` ActionIcon height (`docs/CONTROLS-SPEC.md` §5) — `WidgetHeader
|
|
247
|
+
* tier="widget"` actions. Floored at 22px in {@link deriveSpacing}. */
|
|
248
|
+
readonly controlHeightWidget: 24;
|
|
249
|
+
/** The `size="ctl"` Mantine tier's resolved height (`docs/CONTROLS-SPEC.md` §5, C5) —
|
|
250
|
+
* `PageBar`/`Section`/table toolbar/sidebar-block controls. Floored at 28px in
|
|
251
|
+
* {@link deriveSpacing}. */
|
|
252
|
+
readonly controlHeightCtl: 30;
|
|
253
|
+
/** The touch hit-area size (`::before`) every home control expands to below `sm` (C15,
|
|
254
|
+
* `docs/CONTROLS-SPEC.md` §5) — independent of the visible `controlHeightCtl` box, same shape as
|
|
255
|
+
* `mobileNavBarHeight`/`mobileNavRowHeight`'s Apple HIG 44pt / WCAG 2.5.5 floors elsewhere in this
|
|
256
|
+
* table. Floored at 30px in {@link deriveSpacing} (C15's "floor 30 at density −3"). */
|
|
257
|
+
readonly touchControlHeight: 36;
|
|
241
258
|
};
|
|
242
259
|
/**
|
|
243
260
|
* The Mantine `spacing` size-scale (`xs`/`sm`/`md`/`lg`/`xl`) — the app-wide generic rhythm every
|
|
@@ -463,33 +480,27 @@ declare const SPACE_STEP_BASE: {
|
|
|
463
480
|
readonly sidebarAccountMenuWidth: 220;
|
|
464
481
|
/** Settings-menu `<Menu width={…}>` (`app-sidebar.tsx`). */
|
|
465
482
|
readonly sidebarSettingsMenuWidth: 200;
|
|
466
|
-
/** Mobile two-row header's page-actions row height. */
|
|
467
|
-
readonly appHeaderMobileActionsHeight: 52;
|
|
468
483
|
/** AppShell desktop header bar height — sized to hold one row of `size="md"` controls, so it
|
|
469
484
|
* tracks `controlHeight`. Its level-0 coincidence with `appShellNavbarRailWidth` below is a
|
|
470
485
|
* coincidence, not a law: this is a horizontal bar's HEIGHT (governed by control height), that
|
|
471
486
|
* is a vertical rail's WIDTH (governed by icon footprint). They stay separate entries. */
|
|
487
|
+
/** AppShell header bar height — ONE value at every viewport since 1.26.0 (law C14,
|
|
488
|
+
* `docs/CONTROLS-SPEC.md` §2.1). The pre-1.26.0 `appShellHeaderMobileHeight` (97) existed only
|
|
489
|
+
* because the mobile header wrapped to a second, always-reserved page-actions row; `PageBar`
|
|
490
|
+
* folds that row's overflow into a kebab and moves its filters/tabs into the page flow, so the
|
|
491
|
+
* bar is 48px on a phone too and there is no sum to keep in step any more. */
|
|
472
492
|
readonly appShellHeaderHeight: 48;
|
|
473
|
-
/** AppShell
|
|
474
|
-
*
|
|
475
|
-
*
|
|
476
|
-
* budget collapses 52px -> 12px across the level range.
|
|
493
|
+
/** AppShell navbar width, expanded — ONE entry for both the `base` (mobile, where the navbar is
|
|
494
|
+
* permanently collapsed and unused — see `MobileNav`) and the expanded `sm` value: the same
|
|
495
|
+
* `.root` at full width, genuinely one concept.
|
|
477
496
|
*
|
|
478
|
-
*
|
|
479
|
-
*
|
|
480
|
-
*
|
|
481
|
-
*
|
|
482
|
-
*
|
|
483
|
-
*
|
|
484
|
-
|
|
485
|
-
* `stickyHeaderClearance*` already is — post-`step`, from its own addends rather than as an
|
|
486
|
-
* independent literal — would make the drift impossible instead of merely re-tuned. That is the
|
|
487
|
-
* same refactor, and the same reasoning, this PR applied to the clearances; it is worth doing to
|
|
488
|
-
* this one too, and it stays a follow-up only because it moves every non-zero level's value. */
|
|
489
|
-
readonly appShellHeaderMobileHeight: 97;
|
|
490
|
-
/** AppShell navbar width, expanded — ONE entry for both the `base` (mobile drawer) and the
|
|
491
|
-
* expanded `sm` value: the same `.root` at full width, genuinely one concept. */
|
|
492
|
-
readonly appShellNavbarWidth: 216;
|
|
497
|
+
* 256, up from 216. At 216 the column was 196px of usable text after `.root`'s 10px inset a side,
|
|
498
|
+
* and the sidebar carries more than nav rows: a block row is `label · meta`, an account row is
|
|
499
|
+
* `avatar · name · plan`, and a `Recents` entry is a sentence. Every one of them was ellipsizing
|
|
500
|
+
* in the second word. 256 is also the width the shell's own dropdowns already assume
|
|
501
|
+
* (`sidebarAccountMenuWidth` 220 + the row inset), so the menu no longer overhangs the column it
|
|
502
|
+
* belongs to. */
|
|
503
|
+
readonly appShellNavbarWidth: 256;
|
|
493
504
|
/** AppShell navbar width, collapsed icon rail. Separate from `appShellHeaderHeight` above
|
|
494
505
|
* despite sharing 48 at level 0 (see that entry's note). */
|
|
495
506
|
readonly appShellNavbarRailWidth: 48;
|
|
@@ -561,6 +572,31 @@ declare const SPACE_STEP_BASE: {
|
|
|
561
572
|
readonly virtualRowInsetY: 8;
|
|
562
573
|
/** `data/virtual-list.tsx`'s skeleton row horizontal inset. */
|
|
563
574
|
readonly virtualRowInsetX: 12;
|
|
575
|
+
/** `PageBar` row height (row 1 or row 2, each measured independently — the bar's own overall
|
|
576
|
+
* height is the sum published as `--basalt-page-bar-h`, computed by `PageBar` itself, not a
|
|
577
|
+
* static token). */
|
|
578
|
+
readonly pageBarRowHeight: 40;
|
|
579
|
+
/** `WidgetHeader tier="section"` row height. */
|
|
580
|
+
readonly sectionHeaderHeight: 36;
|
|
581
|
+
/** `WidgetHeader tier="widget"` row height. */
|
|
582
|
+
readonly widgetHeaderHeight: 28;
|
|
583
|
+
/** Sidebar block list-item row height. */
|
|
584
|
+
readonly sidebarBlockRowHeight: 32;
|
|
585
|
+
/** Gap between adjacent controls inside a home (filter pills, action buttons). */
|
|
586
|
+
readonly controlGap: 6;
|
|
587
|
+
/** Mobile bottom-sheet row height (the `Filters (n)` drawer, a block's More-sheet row) — Apple
|
|
588
|
+
* HIG 44pt / WCAG 2.5.5 AAA, same floor family as `mobileNavRowHeight`. */
|
|
589
|
+
readonly sheetRowHeight: 44;
|
|
590
|
+
/** `BasaltDataTable`'s header row. Its own entry rather than a reuse of `sectionHeaderHeight`
|
|
591
|
+
* (which is 36 too at level 0): one is a heading's box, this is a table's `th`, and a density
|
|
592
|
+
* pass that wants denser table rows must not be forced to shrink every section header with them.
|
|
593
|
+
* Mantine sizes both `th` and `td` from ONE `verticalSpacing` prop, so a 36/40 pair is
|
|
594
|
+
* unreachable through it — both are applied in `theme/index.ts`'s `Table.extend` as JS numbers,
|
|
595
|
+
* which is why (like `progressBarSize`) neither is emitted as a `--vx-*` var. */
|
|
596
|
+
readonly tableHeaderHeight: 36;
|
|
597
|
+
/** `BasaltDataTable`'s body row — one step taller than the header, so the mono uppercase `th`
|
|
598
|
+
* reads as a label band over roomier data rows rather than as the first row of the data. */
|
|
599
|
+
readonly tableRowHeight: 40;
|
|
564
600
|
};
|
|
565
601
|
/**
|
|
566
602
|
* Density-EXEMPT structurals — unlike `SPACE`/`SPACE_STEP` above, these never move with the density
|
|
@@ -601,19 +637,16 @@ export type SpaceValues = {
|
|
|
601
637
|
scale: {
|
|
602
638
|
[K in keyof typeof SPACE_SCALE_BASE]: number;
|
|
603
639
|
};
|
|
604
|
-
/** `SPACE_STEP_BASE`'s one-offs PLUS `stickyHeaderClearance
|
|
605
|
-
*
|
|
606
|
-
* `appShellHeaderHeight` (desktop) and one from `appShellHeaderMobileHeight` (mobile), see
|
|
640
|
+
/** `SPACE_STEP_BASE`'s one-offs PLUS `stickyHeaderClearance`, which is NOT in that base table —
|
|
641
|
+
* it is computed after the rest of `step`, from `appShellHeaderHeight`, see
|
|
607
642
|
* {@link deriveSpacing}'s doc. Kept on this same `step` object (not split into a third group)
|
|
608
|
-
* because every consumer reads
|
|
609
|
-
*
|
|
610
|
-
*
|
|
611
|
-
* `content/prose.module.css`/`content/article-layout.module.css` for the CSS-side split. */
|
|
643
|
+
* because every consumer reads it exactly like any other one-off — only its DERIVATION differs.
|
|
644
|
+
* ONE key, not the pre-1.26.0 responsive pair: the AppShell header is a single 48px row at every
|
|
645
|
+
* viewport now (law C14, `docs/CONTROLS-SPEC.md` §2.1), so there is no second header to clear. */
|
|
612
646
|
step: {
|
|
613
647
|
[K in keyof typeof SPACE_STEP_BASE]: number;
|
|
614
648
|
} & {
|
|
615
649
|
stickyHeaderClearance: number;
|
|
616
|
-
stickyHeaderClearanceMobile: number;
|
|
617
650
|
};
|
|
618
651
|
/** NavLink row line-height (`theme/index.ts`'s row-geometry styles) — additive, not
|
|
619
652
|
* multiplicative; see {@link deriveSpacing}'s doc for why. */
|
|
@@ -648,8 +681,8 @@ export declare function scaleSpace(value: number, level: number, multiplier: num
|
|
|
648
681
|
* from a single integer `level` (`docs/DESIGN-SPEC.md` §4-adjacent) — the spacing analog of
|
|
649
682
|
* {@link deriveRadius}. `level: 0` reproduces the shipped identity exactly (locked by
|
|
650
683
|
* `theme/spacing.test.ts` and `tokens/density.test.ts`) for every value EXCEPT
|
|
651
|
-
* `step.stickyHeaderClearance
|
|
652
|
-
*
|
|
684
|
+
* `step.stickyHeaderClearance` — see the third bullet below for why that one is a deliberate
|
|
685
|
+
* exception.
|
|
653
686
|
*
|
|
654
687
|
* The law: a MULTIPLIER, `1 + 0.1 * level`, applied to every `SPACE_ANCHORS_BASE`/
|
|
655
688
|
* `SPACE_SCALE_BASE`/`SPACE_STEP_BASE` constant, then rounded (see {@link scaleSpace}) — a
|
|
@@ -674,30 +707,24 @@ export declare function scaleSpace(value: number, level: number, multiplier: num
|
|
|
674
707
|
* (and, transitively, the collapsed rail's `ActionIcon` variant, which reads this same resolved
|
|
675
708
|
* value) below the accessible floor (22px at level -3) while also crowding out its fixed-size icon
|
|
676
709
|
* and `Kbd` chip.
|
|
677
|
-
* - `step.stickyHeaderClearance`
|
|
678
|
-
*
|
|
679
|
-
*
|
|
680
|
-
*
|
|
681
|
-
*
|
|
682
|
-
*
|
|
683
|
-
*
|
|
684
|
-
*
|
|
685
|
-
*
|
|
686
|
-
*
|
|
687
|
-
*
|
|
688
|
-
*
|
|
689
|
-
*
|
|
690
|
-
*
|
|
691
|
-
*
|
|
692
|
-
*
|
|
693
|
-
*
|
|
694
|
-
*
|
|
695
|
-
* token is held to), mobile `96 + 12 = 108` (unchanged from the pre-split single-value law).
|
|
696
|
-
* **Consumer coupling (accepted, not hidden):** both values assume `BasaltShell`'s own AppShell
|
|
697
|
-
* header heights — a `./content` consumer NOT rendering inside `BasaltShell` (e.g. `Prose`/
|
|
698
|
-
* `ArticleLayout` standalone) gets clearance numbers tuned for a header it may not have, and must
|
|
699
|
-
* override `--vx-space-sticky-header-clearance`/`--vx-space-sticky-header-clearance-mobile`
|
|
700
|
-
* itself. Documented on the `./content` surface too (`docs/CONTENT-SPEC.md` §5), not only here.
|
|
710
|
+
* - `step.stickyHeaderClearance` is not scaled off its own base AT ALL — `SPACE_STEP_BASE` has no
|
|
711
|
+
* such key any more (see that table's doc). It is computed AFTER the rest of `step`, as
|
|
712
|
+
* `step.appShellHeaderHeight + anchors.stackMd`. An independent literal can only be tuned against
|
|
713
|
+
* ONE header height and then drifts from it: the original 84 was tuned against a 48px desktop
|
|
714
|
+
* header and under-cleared the pre-1.26.0 96px mobile one by 12px at level 0, before density
|
|
715
|
+
* entered the picture at all. Deriving it removes that whole failure mode — and since 1.26.0 the
|
|
716
|
+
* AppShell header is ONE 48px row at every viewport (law C14), so the `stickyHeaderClearanceMobile`
|
|
717
|
+
* half of the old responsive pair is deleted rather than re-derived. The `+ anchors.stackMd`
|
|
718
|
+
* breathing room (not a bare `+ 0`) keeps a scrolled-to heading off the header's bottom edge, and
|
|
719
|
+
* tracks density like the header height it is added to, so the margin never freezes at one notch.
|
|
720
|
+
* Level 0: `48 + 12 = 60` (a deliberate BREAK from the pre-derivation 84 — see
|
|
721
|
+
* `theme/spacing.test.ts` for why `stickyHeaderClearance` alone is exempt from the byte-identity
|
|
722
|
+
* gate every other spacing token is held to).
|
|
723
|
+
* **Consumer coupling (accepted, not hidden):** the value assumes `BasaltShell`'s own AppShell
|
|
724
|
+
* header height — a `./content` consumer NOT rendering inside `BasaltShell` (e.g. `Prose`/
|
|
725
|
+
* `ArticleLayout` standalone) gets a clearance number tuned for a header it may not have, and must
|
|
726
|
+
* override `--vx-space-sticky-header-clearance` itself. Documented on the `./content` surface too
|
|
727
|
+
* (`docs/CONTENT-SPEC.md` §5), not only here.
|
|
701
728
|
*
|
|
702
729
|
* `rowLineHeight` is the ONE exception to the multiplier entirely: `1.35 + ROW_LINE_HEIGHT_STEP *
|
|
703
730
|
* level`, ADDITIVE, its own gentler, INDEPENDENT coefficient (see {@link ROW_LINE_HEIGHT_STEP}'s own
|
|
@@ -785,6 +812,10 @@ export declare const SPACE: {
|
|
|
785
812
|
readonly stackXl: number;
|
|
786
813
|
readonly inputHeight: number;
|
|
787
814
|
readonly controlHeight: number;
|
|
815
|
+
readonly controlHeightTag: number;
|
|
816
|
+
readonly controlHeightWidget: number;
|
|
817
|
+
readonly controlHeightCtl: number;
|
|
818
|
+
readonly touchControlHeight: number;
|
|
788
819
|
};
|
|
789
820
|
/** The Mantine `spacing` size-scale at the shipped identity — see `SPACE_SCALE_BASE`'s doc.
|
|
790
821
|
* `deriveSpacing(0)`'s `scale`, UNCHANGED from the shipped identity (locked by
|
|
@@ -798,9 +829,9 @@ export declare const SPACE_SCALE: {
|
|
|
798
829
|
};
|
|
799
830
|
/** Density-tracking one-offs at the shipped identity — see `SPACE_STEP_BASE`'s doc. `deriveSpacing(0)`'s
|
|
800
831
|
* `step`, UNCHANGED from the shipped identity (locked by `theme/spacing.test.ts`) EXCEPT
|
|
801
|
-
* `stickyHeaderClearance` (originally 84, then a single derived 108, now
|
|
802
|
-
*
|
|
803
|
-
*
|
|
832
|
+
* `stickyHeaderClearance` (originally 84, then a single derived 108, now 60 — derived from the one
|
|
833
|
+
* 48px AppShell header) — the deliberate level-0 break in the density work; see `deriveSpacing`'s
|
|
834
|
+
* doc (third bullet) for why. */
|
|
804
835
|
export declare const SPACE_STEP: {
|
|
805
836
|
readonly timelineBullet: number;
|
|
806
837
|
readonly navIconGap: number;
|
|
@@ -881,9 +912,7 @@ export declare const SPACE_STEP: {
|
|
|
881
912
|
readonly sidebarChildRowIndent: number;
|
|
882
913
|
readonly sidebarAccountMenuWidth: number;
|
|
883
914
|
readonly sidebarSettingsMenuWidth: number;
|
|
884
|
-
readonly appHeaderMobileActionsHeight: number;
|
|
885
915
|
readonly appShellHeaderHeight: number;
|
|
886
|
-
readonly appShellHeaderMobileHeight: number;
|
|
887
916
|
readonly appShellNavbarWidth: number;
|
|
888
917
|
readonly appShellNavbarRailWidth: number;
|
|
889
918
|
readonly mobileNavTabGap: number;
|
|
@@ -915,9 +944,16 @@ export declare const SPACE_STEP: {
|
|
|
915
944
|
readonly statCardGap: number;
|
|
916
945
|
readonly virtualRowInsetY: number;
|
|
917
946
|
readonly virtualRowInsetX: number;
|
|
947
|
+
readonly pageBarRowHeight: number;
|
|
948
|
+
readonly sectionHeaderHeight: number;
|
|
949
|
+
readonly widgetHeaderHeight: number;
|
|
950
|
+
readonly sidebarBlockRowHeight: number;
|
|
951
|
+
readonly controlGap: number;
|
|
952
|
+
readonly sheetRowHeight: number;
|
|
953
|
+
readonly tableHeaderHeight: number;
|
|
954
|
+
readonly tableRowHeight: number;
|
|
918
955
|
} & {
|
|
919
956
|
stickyHeaderClearance: number;
|
|
920
|
-
stickyHeaderClearanceMobile: number;
|
|
921
957
|
};
|
|
922
958
|
/** NavLink row line-height at the shipped identity (`1.35`) — `deriveSpacing(0)`'s `rowLineHeight`,
|
|
923
959
|
* UNCHANGED from the shipped identity (locked by `theme/spacing.test.ts`). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"palette.d.ts","sourceRoot":"","sources":["../../src/tokens/palette.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAExC;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;CAgCL,CAAA;AAEV;;;;GAIG;AACH,eAAO,MAAM,CAAC,GAAI,KAAK,SAAS,MAAM,EAAE,EAAE,cAAS,EAAE,aAAQ,KAAG,SAG9D,CAAA;AAEF;;;;;GAKG;AACH,eAAO,MAAM,MAAM;;;;;;;;;IASjB;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;;;;;;;;;CAaK,CAAA;AAEV;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAOD;;;8DAG8D;AAC9D,eAAO,MAAM,kBAAkB;;;CAA+B,CAAA;AAE9D;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAmBxD;AAMD;;;;;;;GAOG;AACH,eAAO,MAAM,MAAM;IACjB,oFAAoF;;IAEpF;2BACuB;;CAEf,CAAA;AAEV;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW;IACtB;gCAC4B;;IAE5B,0FAA0F;;IAE1F,4FAA4F;;IAE5F,4EAA4E;;IAE5E,4EAA4E;;IAE5E,4EAA4E;;IAE5E;uFACmF;;CAE3E,CAAA;AAWV;;;;;;;;;;;;;;;GAeG;AACH,QAAA,MAAM,kBAAkB;IACtB,oEAAoE;;IAEpE,kEAAkE;;IAElE;yFACqF;;IAErF,kGAAkG;;IAElG;;qEAEiE;;IAEjE,gEAAgE;;IAEhE,oEAAoE;;IAEpE,gFAAgF;;IAEhF;;;mGAG+F;;
|
|
1
|
+
{"version":3,"file":"palette.d.ts","sourceRoot":"","sources":["../../src/tokens/palette.ts"],"names":[],"mappings":"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"}
|