basalt-ui 1.19.1 → 1.20.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.
Files changed (78) hide show
  1. package/AGENTS.md +15 -1
  2. package/CHANGELOG.md +20 -0
  3. package/MIGRATING.md +228 -0
  4. package/README.md +53 -9
  5. package/agent/rules/basalt-app.md +43 -0
  6. package/agent/rules/basalt-charts.md +26 -14
  7. package/agent/rules/basalt-mantine.md +25 -10
  8. package/agent/rules/basalt-router.md +22 -10
  9. package/agent/rules/basalt-tokens.md +75 -6
  10. package/agent/skills/basalt-app/SKILL.md +42 -6
  11. package/configs/check.yml +11 -4
  12. package/configs/lefthook.yml +21 -2
  13. package/configs/oxlint-plugin.js +515 -25
  14. package/configs/oxlint-plugin.test.ts +383 -10
  15. package/configs/oxlint.json +10 -1
  16. package/dist/agent/stick-to-bottom.js +1 -1
  17. package/dist/agent-chat/thread-detail-panel.js +1 -1
  18. package/dist/agent-chat/thread-message.js +2 -2
  19. package/dist/agent-chat/tool-chip.js +1 -1
  20. package/dist/charts/kinds/Donut.d.ts.map +1 -1
  21. package/dist/charts/kinds/Donut.js +1 -1
  22. package/dist/charts/primitives/ChartLegend.js +2 -2
  23. package/dist/charts/primitives/ChartTooltip.js +1 -1
  24. package/dist/cli/index.d.ts +107 -15
  25. package/dist/cli/index.d.ts.map +1 -1
  26. package/dist/cli/index.js +610 -72
  27. package/dist/cli/toolchain-wiring.test.d.ts +2 -0
  28. package/dist/cli/toolchain-wiring.test.d.ts.map +1 -0
  29. package/dist/dashboard/delta-badge.js +2 -2
  30. package/dist/dashboard/stat-card.js +1 -1
  31. package/dist/data/virtual-list.js +5 -5
  32. package/dist/guard/index.d.ts +56 -2
  33. package/dist/guard/index.d.ts.map +1 -1
  34. package/dist/guard/index.js +326 -59
  35. package/dist/guard/types.d.ts +25 -5
  36. package/dist/guard/types.d.ts.map +1 -1
  37. package/dist/register.d.ts +25 -0
  38. package/dist/register.d.ts.map +1 -1
  39. package/dist/shell/app-mobile-nav.module.css +11 -3
  40. package/dist/surfaces.d.ts +1 -1
  41. package/dist/surfaces.js +1 -1
  42. package/dist/tokens/index.d.ts +3 -3
  43. package/dist/tokens/index.d.ts.map +1 -1
  44. package/dist/tokens/index.js +2 -0
  45. package/dist/tokens/palette.d.ts +35 -27
  46. package/dist/tokens/palette.d.ts.map +1 -1
  47. package/dist/tokens/palette.js +24 -18
  48. package/dist/tokens.css +19 -17
  49. package/dist/vite-color-mix.js +2 -2
  50. package/llms.txt +3 -3
  51. package/package.json +4 -3
  52. package/src/agent/stick-to-bottom.tsx +1 -1
  53. package/src/agent-chat/thread-detail-panel.tsx +1 -1
  54. package/src/agent-chat/thread-message.tsx +3 -3
  55. package/src/agent-chat/tool-chip.tsx +1 -1
  56. package/src/charts/kinds/Donut.tsx +2 -1
  57. package/src/charts/primitives/ChartLegend.tsx +2 -2
  58. package/src/charts/primitives/ChartTooltip.tsx +1 -1
  59. package/src/cli/index.ts +1070 -99
  60. package/src/cli/init-sync.test.ts +19 -3
  61. package/src/cli/tokens-css.test.ts +27 -14
  62. package/src/cli/toolchain-wiring.test.ts +694 -0
  63. package/src/dashboard/delta-badge.tsx +3 -3
  64. package/src/dashboard/stat-card.tsx +1 -1
  65. package/src/data/virtual-list.tsx +8 -8
  66. package/src/guard/check-source.test.ts +663 -11
  67. package/src/guard/index.ts +727 -94
  68. package/src/guard/types.ts +29 -4
  69. package/src/register.ts +32 -0
  70. package/src/shell/app-mobile-nav.module.css +11 -3
  71. package/src/shell/app-mobile-nav.tsx +1 -1
  72. package/src/surfaces.ts +1 -1
  73. package/src/theme/density-relations.test.ts +8 -5
  74. package/src/theme/spacing.test.ts +2 -0
  75. package/src/theme-toggle/index.tsx +2 -2
  76. package/src/tokens/index.ts +5 -3
  77. package/src/tokens/palette.ts +24 -18
  78. package/src/vite-color-mix.ts +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"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"}
@@ -46,9 +46,17 @@
46
46
  display: inline-flex;
47
47
  align-items: center;
48
48
  justify-content: center;
49
- /* Deliberately sub-scale: the active pill hugs a 24px glyph, so it is a shape inset rather than
50
- * layout spacing — the xs..xl scale has no step this tight. */
51
- padding: 2px 12px; /* theme-allow */
49
+ /* This span IS the active pill, so its box may not depend on what it contains: shipping no icon
50
+ * dependency is a supported configuration, and an empty span collapsed the pill to a 24x4px
51
+ * dash. The floor is the icon box PLUS its inset — everything is border-box under Mantine's
52
+ * reset — so the pill renders identically with and without a glyph, at every density. */
53
+ min-width: calc(
54
+ var(--vx-space-mobile-nav-icon-size) + 2 * var(--vx-space-mobile-nav-tab-inset-x)
55
+ );
56
+ min-height: calc(
57
+ var(--vx-space-mobile-nav-icon-size) + 2 * var(--vx-space-mobile-nav-tab-inset-y)
58
+ );
59
+ padding: var(--vx-space-mobile-nav-tab-inset-y) var(--vx-space-mobile-nav-tab-inset-x);
52
60
  border-radius: var(--vx-radius-ctrl);
53
61
  transition: transform 140ms cubic-bezier(0.32, 0.72, 0, 1);
54
62
  }
@@ -344,7 +344,7 @@ export declare const SURFACES: {
344
344
  readonly './tokens.css': {
345
345
  readonly kind: "tooling";
346
346
  readonly layer: "non-js-asset";
347
- readonly description: "Prebuilt --vx-* token stylesheet — the default buildPaletteCss() output as a plain file, for a consumer with no bundler, no React and no Mantine; retune the selector or trim the spacing set with `basalt-ui tokens:css`";
347
+ readonly description: "Prebuilt --vx-* token stylesheet — the default buildPaletteCss() output as a plain file, for a consumer that has a bundler to resolve the subpath but no React and no Mantine; with no bundler, emit a file you own via `basalt-ui tokens:css`";
348
348
  readonly forbiddenImports: readonly [];
349
349
  };
350
350
  readonly './configs/*': {
package/dist/surfaces.js CHANGED
@@ -284,7 +284,7 @@ const SURFACES = {
284
284
  "./tokens.css": {
285
285
  kind: "tooling",
286
286
  layer: "non-js-asset",
287
- description: "Prebuilt --vx-* token stylesheet \u2014 the default buildPaletteCss() output as a plain file, for a consumer with no bundler, no React and no Mantine; retune the selector or trim the spacing set with `basalt-ui tokens:css`",
287
+ description: "Prebuilt --vx-* token stylesheet \u2014 the default buildPaletteCss() output as a plain file, for a consumer that has a bundler to resolve the subpath but no React and no Mantine; with no bundler, emit a file you own via `basalt-ui tokens:css`",
288
288
  forbiddenImports: []
289
289
  },
290
290
  "./configs/*": {
@@ -234,13 +234,13 @@ export type BuildPaletteOpts = {
234
234
  */
235
235
  mediaFallback?: boolean;
236
236
  /**
237
- * How much of the SPACING set to emit. Default: `'all'` (every one of the 104 `--vx-space-*`
237
+ * How much of the SPACING set to emit. Default: `'all'` (every one of the 108 `--vx-space-*`
238
238
  * declarations the framework's own components read).
239
239
  *
240
240
  * `'core'` keeps the 9 generic anchors — the stack rhythm, the two control heights, the row
241
- * insets — and drops the 95 named for a specific basalt component
241
+ * insets — and drops the 99 named for a specific basalt component
242
242
  * (`--vx-space-agent-transcript-inset`, `--vx-space-toc-sub-indent`, …), taking the emitted set
243
- * from 197 variables to 102. Nothing outside basalt's own React components reads those, so a
243
+ * from 202 variables to 103. Nothing outside basalt's own React components reads those, so a
244
244
  * framework-free consumer is carrying them for nothing.
245
245
  *
246
246
  * This is a SPACING filter only: color, radius, shadow, type and status variables are identical
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tokens/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tokens/index.ts"],"names":[],"mappings":"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"}
@@ -358,6 +358,8 @@ function spaceDecls(space) {
358
358
  decl("space-app-header-mobile-actions-height", `${space.step.appHeaderMobileActionsHeight}px`),
359
359
  decl("space-mobile-nav-tab-gap", `${space.step.mobileNavTabGap}px`),
360
360
  decl("space-mobile-nav-icon-size", `${space.step.mobileNavIconSize}px`),
361
+ decl("space-mobile-nav-tab-inset-y", `${space.step.mobileNavTabInsetY}px`),
362
+ decl("space-mobile-nav-tab-inset-x", `${space.step.mobileNavTabInsetX}px`),
361
363
  decl("space-mobile-nav-row-height", `${space.step.mobileNavRowHeight}px`),
362
364
  decl("space-agent-rail-inset-x", `${space.step.agentRailInsetX}px`),
363
365
  decl("space-agent-part-gap-top", `${space.step.agentPartGapTop}px`),
@@ -77,12 +77,12 @@ export declare const p: (fam: readonly string[], light?: number, dark?: number)
77
77
  */
78
78
  export declare const SHADOW: {
79
79
  readonly card: {
80
- readonly light: "0 1px 2px rgba(28,25,23,0.05), 0 0 0 1px var(--vx-surface-hairline)";
81
- readonly dark: "0 1px 3px rgba(0,0,0,0.4), inset 0 0 0 1px color-mix(in srgb, #ffffff 4%, transparent)";
80
+ readonly light: "0 1px 2px rgba(28, 25, 23, 0.05), 0 0 0 1px var(--vx-surface-hairline)";
81
+ readonly dark: "0 1px 3px rgba(0, 0, 0, 0.4), inset 0 0 0 1px color-mix(in srgb, #ffffff 4%, transparent)";
82
82
  };
83
83
  readonly ctrl: {
84
- readonly light: "0 1px 2px rgba(28,25,23,0.12)";
85
- readonly dark: "0 1px 2px rgba(0,0,0,0.35)";
84
+ readonly light: "0 1px 2px rgba(28, 25, 23, 0.12)";
85
+ readonly dark: "0 1px 2px rgba(0, 0, 0, 0.35)";
86
86
  };
87
87
  /**
88
88
  * Interactive-control depth — the ONE value every raised Button/ActionIcon/Input variant shares
@@ -112,12 +112,12 @@ export declare const SHADOW: {
112
112
  * ever needs more, raise the DROP. Do not reintroduce an edge; both shapes have been tried.
113
113
  */
114
114
  readonly raised: {
115
- readonly light: "0 1px 2px rgba(28,25,23,0.10)";
116
- readonly dark: "0 1px 2px rgba(0,0,0,0.35), inset 0 0 0 1px color-mix(in srgb, #ffffff 8%, transparent)";
115
+ readonly light: "0 1px 2px rgba(28, 25, 23, 0.10)";
116
+ readonly dark: "0 1px 2px rgba(0, 0, 0, 0.35), inset 0 0 0 1px color-mix(in srgb, #ffffff 8%, transparent)";
117
117
  };
118
118
  readonly overlay: {
119
- readonly light: "0 8px 24px rgba(28,25,23,0.10)";
120
- readonly dark: "0 8px 24px rgba(0,0,0,0.5)";
119
+ readonly light: "0 8px 24px rgba(28, 25, 23, 0.10)";
120
+ readonly dark: "0 8px 24px rgba(0, 0, 0, 0.5)";
121
121
  };
122
122
  };
123
123
  /**
@@ -499,8 +499,14 @@ declare const SPACE_STEP_BASE: {
499
499
  * `env(safe-area-inset-bottom)` to it. JS-consumed (AppShell `footer.height`), no `--vx-*` var,
500
500
  * same shape as `appShellHeaderHeight`. Floored at 48px in `deriveSpacing`. */
501
501
  readonly mobileNavBarHeight: 56;
502
- /** Slot icon box. */
502
+ /** Slot icon box. Also the MIN box of the icon slot itself, so the active pill keeps its shape
503
+ * when a destination ships no icon (an icon-less consumer is a supported configuration). */
503
504
  readonly mobileNavIconSize: 24;
505
+ /** Active-pill inset around the slot icon, vertical. Sub-scale on its own, but it is one half of
506
+ * a pair with `mobileNavTabInsetX` — a step keeps the pill's shape tracking density. */
507
+ readonly mobileNavTabInsetY: 2;
508
+ /** Active-pill inset around the slot icon, horizontal. */
509
+ readonly mobileNavTabInsetX: 12;
504
510
  /** Menu/sheet row height. Floored at 44px in `deriveSpacing` (Apple HIG 44pt / WCAG 2.5.5 AAA). */
505
511
  readonly mobileNavRowHeight: 44;
506
512
  /** More/group `<Menu width={…}>`. JS-consumed, no var — same rationale as
@@ -883,6 +889,8 @@ export declare const SPACE_STEP: {
883
889
  readonly mobileNavTabGap: number;
884
890
  readonly mobileNavBarHeight: number;
885
891
  readonly mobileNavIconSize: number;
892
+ readonly mobileNavTabInsetY: number;
893
+ readonly mobileNavTabInsetX: number;
886
894
  readonly mobileNavRowHeight: number;
887
895
  readonly mobileNavMenuWidth: number;
888
896
  readonly chartLegendGap: number;
@@ -971,19 +979,19 @@ declare function buildPaletteDataUncached(config: DeriveConfig): {
971
979
  };
972
980
  readonly axis: {
973
981
  readonly light: string;
974
- readonly dark: "rgba(255,255,255,0.6)";
982
+ readonly dark: "rgba(255, 255, 255, 0.6)";
975
983
  };
976
984
  readonly axisStroke: {
977
985
  readonly light: string;
978
- readonly dark: "rgba(255,255,255,0.12)";
986
+ readonly dark: "rgba(255, 255, 255, 0.12)";
979
987
  };
980
988
  readonly grid: {
981
989
  readonly light: string;
982
- readonly dark: "rgba(255,255,255,0.06)";
990
+ readonly dark: "rgba(255, 255, 255, 0.06)";
983
991
  };
984
992
  readonly crosshair: {
985
993
  readonly light: string;
986
- readonly dark: "rgba(255,255,255,0.42)";
994
+ readonly dark: "rgba(255, 255, 255, 0.42)";
987
995
  };
988
996
  readonly dotStroke: {
989
997
  readonly light: "#ffffff";
@@ -991,15 +999,15 @@ declare function buildPaletteDataUncached(config: DeriveConfig): {
991
999
  };
992
1000
  readonly tooltipBg: {
993
1001
  readonly light: "#ffffff";
994
- readonly dark: "rgba(39,39,42,0.96)";
1002
+ readonly dark: "rgba(39, 39, 42, 0.96)";
995
1003
  };
996
1004
  readonly tooltipText: {
997
1005
  readonly light: string;
998
- readonly dark: "rgba(255,255,255,0.88)";
1006
+ readonly dark: "rgba(255, 255, 255, 0.88)";
999
1007
  };
1000
1008
  readonly tooltipMuted: {
1001
1009
  readonly light: string;
1002
- readonly dark: "rgba(255,255,255,0.5)";
1010
+ readonly dark: "rgba(255, 255, 255, 0.5)";
1003
1011
  };
1004
1012
  readonly tooltipBorder: {
1005
1013
  readonly light: "1px solid #e4e4e7";
@@ -1007,11 +1015,11 @@ declare function buildPaletteDataUncached(config: DeriveConfig): {
1007
1015
  };
1008
1016
  readonly tooltipShadow: {
1009
1017
  readonly light: `0 2px 8px ${string}`;
1010
- readonly dark: "0 2px 8px rgba(0,0,0,0.35)";
1018
+ readonly dark: "0 2px 8px rgba(0, 0, 0, 0.35)";
1011
1019
  };
1012
1020
  readonly legendText: {
1013
1021
  readonly light: string;
1014
- readonly dark: "rgba(255,255,255,0.92)";
1022
+ readonly dark: "rgba(255, 255, 255, 0.92)";
1015
1023
  };
1016
1024
  readonly neutral: ColorPair;
1017
1025
  };
@@ -1072,19 +1080,19 @@ export declare const NEUTRAL: {
1072
1080
  };
1073
1081
  readonly axis: {
1074
1082
  readonly light: string;
1075
- readonly dark: "rgba(255,255,255,0.6)";
1083
+ readonly dark: "rgba(255, 255, 255, 0.6)";
1076
1084
  };
1077
1085
  readonly axisStroke: {
1078
1086
  readonly light: string;
1079
- readonly dark: "rgba(255,255,255,0.12)";
1087
+ readonly dark: "rgba(255, 255, 255, 0.12)";
1080
1088
  };
1081
1089
  readonly grid: {
1082
1090
  readonly light: string;
1083
- readonly dark: "rgba(255,255,255,0.06)";
1091
+ readonly dark: "rgba(255, 255, 255, 0.06)";
1084
1092
  };
1085
1093
  readonly crosshair: {
1086
1094
  readonly light: string;
1087
- readonly dark: "rgba(255,255,255,0.42)";
1095
+ readonly dark: "rgba(255, 255, 255, 0.42)";
1088
1096
  };
1089
1097
  readonly dotStroke: {
1090
1098
  readonly light: "#ffffff";
@@ -1092,15 +1100,15 @@ export declare const NEUTRAL: {
1092
1100
  };
1093
1101
  readonly tooltipBg: {
1094
1102
  readonly light: "#ffffff";
1095
- readonly dark: "rgba(39,39,42,0.96)";
1103
+ readonly dark: "rgba(39, 39, 42, 0.96)";
1096
1104
  };
1097
1105
  readonly tooltipText: {
1098
1106
  readonly light: string;
1099
- readonly dark: "rgba(255,255,255,0.88)";
1107
+ readonly dark: "rgba(255, 255, 255, 0.88)";
1100
1108
  };
1101
1109
  readonly tooltipMuted: {
1102
1110
  readonly light: string;
1103
- readonly dark: "rgba(255,255,255,0.5)";
1111
+ readonly dark: "rgba(255, 255, 255, 0.5)";
1104
1112
  };
1105
1113
  readonly tooltipBorder: {
1106
1114
  readonly light: "1px solid #e4e4e7";
@@ -1108,11 +1116,11 @@ export declare const NEUTRAL: {
1108
1116
  };
1109
1117
  readonly tooltipShadow: {
1110
1118
  readonly light: `0 2px 8px ${string}`;
1111
- readonly dark: "0 2px 8px rgba(0,0,0,0.35)";
1119
+ readonly dark: "0 2px 8px rgba(0, 0, 0, 0.35)";
1112
1120
  };
1113
1121
  readonly legendText: {
1114
1122
  readonly light: string;
1115
- readonly dark: "rgba(255,255,255,0.92)";
1123
+ readonly dark: "rgba(255, 255, 255, 0.92)";
1116
1124
  };
1117
1125
  readonly neutral: ColorPair;
1118
1126
  };
@@ -1 +1 @@
1
- {"version":3,"file":"palette.d.ts","sourceRoot":"","sources":["../../src/tokens/palette.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"palette.d.ts","sourceRoot":"","sources":["../../src/tokens/palette.ts"],"names":[],"mappings":"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"}
@@ -37,12 +37,12 @@ const p = (fam, light = 2, dark = 3) => ({
37
37
  });
38
38
  const SHADOW = {
39
39
  card: {
40
- light: "0 1px 2px rgba(28,25,23,0.05), 0 0 0 1px var(--vx-surface-hairline)",
41
- dark: "0 1px 3px rgba(0,0,0,0.4), inset 0 0 0 1px color-mix(in srgb, #ffffff 4%, transparent)"
40
+ light: "0 1px 2px rgba(28, 25, 23, 0.05), 0 0 0 1px var(--vx-surface-hairline)",
41
+ dark: "0 1px 3px rgba(0, 0, 0, 0.4), inset 0 0 0 1px color-mix(in srgb, #ffffff 4%, transparent)"
42
42
  },
43
43
  ctrl: {
44
- light: "0 1px 2px rgba(28,25,23,0.12)",
45
- dark: "0 1px 2px rgba(0,0,0,0.35)"
44
+ light: "0 1px 2px rgba(28, 25, 23, 0.12)",
45
+ dark: "0 1px 2px rgba(0, 0, 0, 0.35)"
46
46
  },
47
47
  /**
48
48
  * Interactive-control depth — the ONE value every raised Button/ActionIcon/Input variant shares
@@ -72,16 +72,16 @@ const SHADOW = {
72
72
  * ever needs more, raise the DROP. Do not reintroduce an edge; both shapes have been tried.
73
73
  */
74
74
  raised: {
75
- light: "0 1px 2px rgba(28,25,23,0.10)",
76
- dark: "0 1px 2px rgba(0,0,0,0.35), inset 0 0 0 1px color-mix(in srgb, #ffffff 8%, transparent)"
75
+ light: "0 1px 2px rgba(28, 25, 23, 0.10)",
76
+ dark: "0 1px 2px rgba(0, 0, 0, 0.35), inset 0 0 0 1px color-mix(in srgb, #ffffff 8%, transparent)"
77
77
  },
78
78
  // Floating-layer elevation (menus, popovers, tooltips, modals, drawers) — a REAL drop shadow, a
79
79
  // step above `card`, so detached surfaces read as lifted off the page (`docs/DESIGN-SPEC.md` §5).
80
80
  // Unlike `card`, no embedded ring: floating surfaces carry a real 1px `--vx-surface-border` so
81
81
  // Mantine's rotated-square arrow inherits a proper edge.
82
82
  overlay: {
83
- light: "0 8px 24px rgba(28,25,23,0.10)",
84
- dark: "0 8px 24px rgba(0,0,0,0.5)"
83
+ light: "0 8px 24px rgba(28, 25, 23, 0.10)",
84
+ dark: "0 8px 24px rgba(0, 0, 0, 0.5)"
85
85
  }
86
86
  };
87
87
  function clampRadius(n) {
@@ -414,8 +414,14 @@ const SPACE_STEP_BASE = {
414
414
  * `env(safe-area-inset-bottom)` to it. JS-consumed (AppShell `footer.height`), no `--vx-*` var,
415
415
  * same shape as `appShellHeaderHeight`. Floored at 48px in `deriveSpacing`. */
416
416
  mobileNavBarHeight: 56,
417
- /** Slot icon box. */
417
+ /** Slot icon box. Also the MIN box of the icon slot itself, so the active pill keeps its shape
418
+ * when a destination ships no icon (an icon-less consumer is a supported configuration). */
418
419
  mobileNavIconSize: 24,
420
+ /** Active-pill inset around the slot icon, vertical. Sub-scale on its own, but it is one half of
421
+ * a pair with `mobileNavTabInsetX` — a step keeps the pill's shape tracking density. */
422
+ mobileNavTabInsetY: 2,
423
+ /** Active-pill inset around the slot icon, horizontal. */
424
+ mobileNavTabInsetX: 12,
419
425
  /** Menu/sheet row height. Floored at 44px in `deriveSpacing` (Apple HIG 44pt / WCAG 2.5.5 AAA). */
420
426
  mobileNavRowHeight: 44,
421
427
  /** More/group `<Menu width={…}>`. JS-consumed, no var — same rationale as
@@ -582,23 +588,23 @@ function buildPaletteDataUncached(config) {
582
588
  // primary line
583
589
  line2: { light: BP.gray[1], dark: BP.gray[2] },
584
590
  // secondary line
585
- axis: { light: inkRgba(inkLight, 0.6), dark: "rgba(255,255,255,0.6)" },
586
- axisStroke: { light: inkRgba(inkLight, 0.12), dark: "rgba(255,255,255,0.12)" },
587
- grid: { light: inkRgba(inkLight, 0.07), dark: "rgba(255,255,255,0.06)" },
588
- crosshair: { light: inkRgba(inkLight, 0.32), dark: "rgba(255,255,255,0.42)" },
591
+ axis: { light: inkRgba(inkLight, 0.6), dark: "rgba(255, 255, 255, 0.6)" },
592
+ axisStroke: { light: inkRgba(inkLight, 0.12), dark: "rgba(255, 255, 255, 0.12)" },
593
+ grid: { light: inkRgba(inkLight, 0.07), dark: "rgba(255, 255, 255, 0.06)" },
594
+ crosshair: { light: inkRgba(inkLight, 0.32), dark: "rgba(255, 255, 255, 0.42)" },
589
595
  dotStroke: { light: BP.white, dark: BP.darkGray[1] },
590
596
  // matches chart-area bg
591
- tooltipBg: { light: BP.white, dark: "rgba(39,39,42,0.96)" },
592
- tooltipText: { light: inkRgba(inkLight, 0.88), dark: "rgba(255,255,255,0.88)" },
593
- tooltipMuted: { light: inkRgba(inkLight, 0.5), dark: "rgba(255,255,255,0.5)" },
597
+ tooltipBg: { light: BP.white, dark: "rgba(39, 39, 42, 0.96)" },
598
+ tooltipText: { light: inkRgba(inkLight, 0.88), dark: "rgba(255, 255, 255, 0.88)" },
599
+ tooltipMuted: { light: inkRgba(inkLight, 0.5), dark: "rgba(255, 255, 255, 0.5)" },
594
600
  tooltipBorder: { light: `1px solid ${BP.lightGray[1]}`, dark: "none" },
595
601
  tooltipShadow: {
596
602
  light: `0 2px 8px ${inkRgba(inkLight, 0.1)}`,
597
- dark: "0 2px 8px rgba(0,0,0,0.35)"
603
+ dark: "0 2px 8px rgba(0, 0, 0, 0.35)"
598
604
  },
599
605
  // Chart legend text — same DERIVED-ink treatment as axis/grid/tooltip* above (light keys off
600
606
  // `inkLight`; dark stays flat white like every other neutral chart-chrome pair here).
601
- legendText: { light: inkRgba(inkLight, 0.82), dark: "rgba(255,255,255,0.92)" },
607
+ legendText: { light: inkRgba(inkLight, 0.82), dark: "rgba(255, 255, 255, 0.92)" },
602
608
  // Base neutral for hairlines / muted / DIMMED text / overlays — apply opacity via alpha().
603
609
  // Binds to --mantine-color-dimmed, so it is THE dimmed-text lever. Equal to `INK.muted` (the
604
610
  // spec's "muted (secondary text)" row) — kept as its own pair for the pre-existing `--vx-neutral`
package/dist/tokens.css CHANGED
@@ -96,6 +96,8 @@
96
96
  --vx-space-app-header-mobile-actions-height: 52px;
97
97
  --vx-space-mobile-nav-tab-gap: 3px;
98
98
  --vx-space-mobile-nav-icon-size: 24px;
99
+ --vx-space-mobile-nav-tab-inset-y: 2px;
100
+ --vx-space-mobile-nav-tab-inset-x: 12px;
99
101
  --vx-space-mobile-nav-row-height: 44px;
100
102
  --vx-space-agent-rail-inset-x: 10px;
101
103
  --vx-space-agent-part-gap-top: 6px;
@@ -185,17 +187,17 @@ html[data-mantine-color-scheme='dark'] {
185
187
  --vx-neutral: #d4d4d8;
186
188
  --vx-line: #e4e4e7;
187
189
  --vx-line2: #a1a1aa;
188
- --vx-axis: rgba(255,255,255,0.6);
189
- --vx-axis-stroke: rgba(255,255,255,0.12);
190
- --vx-grid: rgba(255,255,255,0.06);
191
- --vx-crosshair: rgba(255,255,255,0.42);
190
+ --vx-axis: rgba(255, 255, 255, 0.6);
191
+ --vx-axis-stroke: rgba(255, 255, 255, 0.12);
192
+ --vx-grid: rgba(255, 255, 255, 0.06);
193
+ --vx-crosshair: rgba(255, 255, 255, 0.42);
192
194
  --vx-dot-stroke: #27272a;
193
- --vx-tooltip-bg: rgba(39,39,42,0.96);
194
- --vx-tooltip-text: rgba(255,255,255,0.88);
195
- --vx-tooltip-muted: rgba(255,255,255,0.5);
195
+ --vx-tooltip-bg: rgba(39, 39, 42, 0.96);
196
+ --vx-tooltip-text: rgba(255, 255, 255, 0.88);
197
+ --vx-tooltip-muted: rgba(255, 255, 255, 0.5);
196
198
  --vx-tooltip-border: none;
197
- --vx-tooltip-shadow: 0 2px 8px rgba(0,0,0,0.35);
198
- --vx-legend-text: rgba(255,255,255,0.92);
199
+ --vx-tooltip-shadow: 0 2px 8px rgba(0, 0, 0, 0.35);
200
+ --vx-legend-text: rgba(255, 255, 255, 0.92);
199
201
  --vx-ink: #e5e5e9;
200
202
  --vx-ink2: #dddde1;
201
203
  --vx-muted: #d4d4d8;
@@ -206,10 +208,10 @@ html[data-mantine-color-scheme='dark'] {
206
208
  --vx-accent-fill-hover: #3c6895;
207
209
  --vx-on-accent: #ffffff;
208
210
  --vx-divider: color-mix(in srgb, #ffffff 6%, transparent);
209
- --vx-shadow-card: 0 1px 3px rgba(0,0,0,0.4), inset 0 0 0 1px color-mix(in srgb, #ffffff 4%, transparent);
210
- --vx-shadow-ctrl: 0 1px 2px rgba(0,0,0,0.35);
211
- --vx-shadow-raised: 0 1px 2px rgba(0,0,0,0.35), inset 0 0 0 1px color-mix(in srgb, #ffffff 8%, transparent);
212
- --vx-shadow-overlay: 0 8px 24px rgba(0,0,0,0.5);
211
+ --vx-shadow-card: 0 1px 3px rgba(0, 0, 0, 0.4), inset 0 0 0 1px color-mix(in srgb, #ffffff 4%, transparent);
212
+ --vx-shadow-ctrl: 0 1px 2px rgba(0, 0, 0, 0.35);
213
+ --vx-shadow-raised: 0 1px 2px rgba(0, 0, 0, 0.35), inset 0 0 0 1px color-mix(in srgb, #ffffff 8%, transparent);
214
+ --vx-shadow-overlay: 0 8px 24px rgba(0, 0, 0, 0.5);
213
215
  --vx-surface-bg: #27272a;
214
216
  --vx-surface-panel: #2b2b2e;
215
217
  --vx-surface-panel-hover: #38383b;
@@ -270,10 +272,10 @@ html[data-mantine-color-scheme='light'] {
270
272
  --vx-accent-fill-hover: #3c6895;
271
273
  --vx-on-accent: #ffffff;
272
274
  --vx-divider: color-mix(in srgb, #e5e5e5 65%, transparent);
273
- --vx-shadow-card: 0 1px 2px rgba(28,25,23,0.05), 0 0 0 1px var(--vx-surface-hairline);
274
- --vx-shadow-ctrl: 0 1px 2px rgba(28,25,23,0.12);
275
- --vx-shadow-raised: 0 1px 2px rgba(28,25,23,0.10);
276
- --vx-shadow-overlay: 0 8px 24px rgba(28,25,23,0.10);
275
+ --vx-shadow-card: 0 1px 2px rgba(28, 25, 23, 0.05), 0 0 0 1px var(--vx-surface-hairline);
276
+ --vx-shadow-ctrl: 0 1px 2px rgba(28, 25, 23, 0.12);
277
+ --vx-shadow-raised: 0 1px 2px rgba(28, 25, 23, 0.10);
278
+ --vx-shadow-overlay: 0 8px 24px rgba(28, 25, 23, 0.10);
277
279
  --vx-surface-bg: #f2f2f5;
278
280
  --vx-surface-panel: #fafafd;
279
281
  --vx-surface-panel-hover: #ffffff;
@@ -1,8 +1,8 @@
1
1
  const NAMED_COLORS = {
2
2
  white: "#ffffff",
3
- // theme-allow — CSS keyword definition, not a design color
3
+ // theme-allow raw-hex — the CSS keyword's definition, not a design color
4
4
  black: "#000000"
5
- // theme-allow — CSS keyword definition, not a design color
5
+ // theme-allow raw-hex — the CSS keyword's definition, not a design color
6
6
  };
7
7
  function normalizeHex(hex) {
8
8
  const body = hex.slice(1);
package/llms.txt CHANGED
@@ -1,4 +1,4 @@
1
- # basalt-ui v1.19.1
1
+ # basalt-ui v1.20.0
2
2
  # Opinionated framework for Mantine-based React apps — theme, app shell, visx charts, toolchain presets
3
3
  #
4
4
  # basalt-ui is an opinionated framework for Mantine-based React apps.
@@ -19,7 +19,7 @@
19
19
  # ./tokens.css subpath. Guide: docs/FRAMEWORK-FREE.md in the repo.
20
20
 
21
21
  Package: basalt-ui
22
- Version: 1.19.1
22
+ Version: 1.20.0
23
23
 
24
24
  ## basalt-ui
25
25
  Import: import { ... } from 'basalt-ui'
@@ -152,7 +152,7 @@ Layer: non-js-asset
152
152
 
153
153
  ## basalt-ui/tokens.css
154
154
  Asset: basalt-ui/tokens.css
155
- Description: Prebuilt --vx-* token stylesheet — the default buildPaletteCss() output as a plain file, for a consumer with no bundler, no React and no Mantine; retune the selector or trim the spacing set with `basalt-ui tokens:css`
155
+ Description: Prebuilt --vx-* token stylesheet — the default buildPaletteCss() output as a plain file, for a consumer that has a bundler to resolve the subpath but no React and no Mantine; with no bundler, emit a file you own via `basalt-ui tokens:css`
156
156
  Layer: non-js-asset
157
157
 
158
158
  ## basalt-ui/configs/*
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "basalt-ui",
3
- "version": "1.19.1",
3
+ "version": "1.20.0",
4
4
  "description": "Opinionated framework for Mantine-based React apps — theme, app shell, visx charts, toolchain presets",
5
5
  "keywords": [
6
6
  "charts",
@@ -37,7 +37,8 @@
37
37
  "llms.txt",
38
38
  "AGENTS.md",
39
39
  "README.md",
40
- "CHANGELOG.md"
40
+ "CHANGELOG.md",
41
+ "MIGRATING.md"
41
42
  ],
42
43
  "type": "module",
43
44
  "sideEffects": [
@@ -131,7 +132,7 @@
131
132
  },
132
133
  "scripts": {
133
134
  "build": "tsup && tsc --emitDeclarationOnly --declarationMap && bun scripts/copy-assets.mjs && bun scripts/gen-tokens-css.mjs && bun scripts/fix-esm-extensions.mjs",
134
- "typecheck": "tsc --noEmit",
135
+ "typecheck": "tsc --noEmit && tsc -p tests/layout/tsconfig.json",
135
136
  "test": "cd ../.. && bun test packages/basalt-ui",
136
137
  "pack-test": "bash scripts/pack-test.sh",
137
138
  "prepack": "bun run build",
@@ -39,7 +39,7 @@ type WrapperProps = {
39
39
  /** Plain scrollable container rendered when use-stick-to-bottom peer is absent. */
40
40
  function PlainContainerFallback({ children, className, style }: WrapperProps): JSX.Element {
41
41
  const props: { className?: string; style?: CSSProperties } = {
42
- // theme-allow — scroll anchoring needs a real scrollable node it owns, not a ScrollArea.
42
+ // theme-allow raw-scroll-container — scroll anchoring needs a real scrollable node it owns, not a ScrollArea.
43
43
  style: { overflowY: 'auto', ...style },
44
44
  }
45
45
  if (className !== undefined) props.className = className
@@ -135,7 +135,7 @@ export function ThreadDetailPanel({
135
135
  <BasaltStickToBottom
136
136
  style={{
137
137
  height: '100%',
138
- // theme-allow — BasaltStickToBottom owns this scroll node (see stick-to-bottom.tsx).
138
+ // theme-allow raw-scroll-container — BasaltStickToBottom owns this scroll node (see stick-to-bottom.tsx).
139
139
  overflowY: 'auto',
140
140
  padding: 'var(--vx-space-agent-transcript-inset)',
141
141
  }}
@@ -615,7 +615,7 @@ type VirtualizedTranscriptProps = {
615
615
  */
616
616
  function NonVirtualizedRows({ rows, height }: VirtualizedTranscriptProps): JSX.Element {
617
617
  return (
618
- // theme-allow — degrade target owns its own scroll node, same as the real virtualizer below.
618
+ // theme-allow raw-scroll-container — degrade target owns its own scroll node, same as the real virtualizer below.
619
619
  <Box style={{ height, overflow: 'auto' }}>
620
620
  <Stack gap="sm">
621
621
  {rows.map((row) => (
@@ -895,7 +895,7 @@ const LazyVirtualizedRows = lazy(() =>
895
895
  })
896
896
 
897
897
  return (
898
- // theme-allow — TanStack Virtual measures/scrolls this element (never nest in BasaltStickToBottom, see ./virtualize).
898
+ // theme-allow raw-scroll-container — TanStack Virtual measures/scrolls this element (never nest in BasaltStickToBottom, see ./virtualize).
899
899
  <Box ref={parentRef} style={{ height, overflow: 'auto' }}>
900
900
  <Box style={{ height: virtualizer.getTotalSize(), position: 'relative' }}>
901
901
  {virtualizer.getVirtualItems().map((virtualItem) => {
@@ -938,7 +938,7 @@ const LazyVirtualizedRows = lazy(() =>
938
938
  * flash without paying that cost — it settles state before any row has meaningfully mounted.
939
939
  */
940
940
  function VirtualizeSuspenseFallback({ height }: { readonly height: number | string }): JSX.Element {
941
- // theme-allow — placeholder owns its own scroll node, matching the real virtualizer's shape.
941
+ // theme-allow raw-scroll-container — placeholder owns its own scroll node, matching the real virtualizer's shape.
942
942
  return <Box style={{ height, overflow: 'auto' }} />
943
943
  }
944
944
 
@@ -138,7 +138,7 @@ export function ToolChip({
138
138
  width: 6,
139
139
  height: 6,
140
140
  flexShrink: 0,
141
- borderRadius: '50%', // theme-allow: a 6px state dot is a circle, not a surface corner — no radius token expresses it
141
+ borderRadius: '50%', // theme-allow raw-surface — a 6px state dot is a circle, not a surface corner
142
142
  backgroundColor: dotToken,
143
143
  }}
144
144
  />
@@ -208,7 +208,8 @@ function DonutPlot<K extends string = SeriesKey>(props: DonutPlotProps<K>) {
208
208
  style={{
209
209
  position: 'absolute',
210
210
  inset: 0,
211
- display: 'flex', // theme-allow: centering over the donut hole — charts/ is Mantine-free, so Center is unavailable here
211
+ // Centering over the donut hole; charts/ is Mantine-free, so Center is unavailable here.
212
+ display: 'flex',
212
213
  alignItems: 'center',
213
214
  justifyContent: 'center',
214
215
  pointerEvents: 'none',
@@ -158,7 +158,7 @@ function LegendSwatch({ item, idPrefix }: { item: LegendEntry; idPrefix: string
158
158
  style={{
159
159
  width: 11,
160
160
  height: 11,
161
- borderRadius: 3, // theme-allow: sub-scale legend-swatch corner, below the 4px radius floor
161
+ borderRadius: 3, // theme-allow raw-surface — sub-scale legend-swatch corner, below the 4px radius floor
162
162
  backgroundColor: item.color,
163
163
  opacity: item.fillOpacity ?? 0.7,
164
164
  flexShrink: 0,
@@ -211,7 +211,7 @@ function LegendChildSwatch({ item }: { item: LegendEntry }) {
211
211
  style={{
212
212
  width: 10,
213
213
  height: 10,
214
- borderRadius: 2, // theme-allow: sub-scale legend-swatch corner, below the 4px radius floor
214
+ borderRadius: 2, // theme-allow raw-surface — sub-scale legend-swatch corner, below the 4px radius floor
215
215
  backgroundColor: item.color,
216
216
  opacity: item.fillOpacity ?? 0.7,
217
217
  flexShrink: 0,
@@ -121,7 +121,7 @@ export function TooltipRow({
121
121
  style={{
122
122
  width: 8,
123
123
  height: 8,
124
- borderRadius: 2, // theme-allow: sub-scale tooltip micro-corner, below the 4px radius floor
124
+ borderRadius: 2, // theme-allow raw-surface — sub-scale tooltip micro-corner, below the 4px radius floor
125
125
  backgroundColor: color,
126
126
  flexShrink: 0,
127
127
  }}