basalt-ui 1.32.0 → 1.33.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 (145) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/MIGRATING.md +228 -20
  3. package/agent/rules/basalt-mantine.md +2 -2
  4. package/agent/rules/basalt-state.md +2 -2
  5. package/agent/rules/basalt-tokens.md +1 -1
  6. package/configs/oxlint-plugin.js +160 -89
  7. package/configs/oxlint-plugin.test.ts +273 -10
  8. package/configs/oxlint.json +2 -2
  9. package/dist/agent/coalesce.d.ts.map +1 -1
  10. package/dist/agent/coalesce.js +1 -2
  11. package/dist/agent/merge.d.ts.map +1 -1
  12. package/dist/agent/merge.js +1 -2
  13. package/dist/agent-chat/relative-time.d.ts +9 -0
  14. package/dist/agent-chat/relative-time.d.ts.map +1 -1
  15. package/dist/agent-chat/relative-time.js +1 -2
  16. package/dist/agent-chat/thread-message.d.ts.map +1 -1
  17. package/dist/agent-chat/thread-message.js +1 -2
  18. package/dist/charts/kinds/BandStrip.d.ts.map +1 -1
  19. package/dist/charts/kinds/BandStrip.js +3 -3
  20. package/dist/charts/kinds/Bars.d.ts.map +1 -1
  21. package/dist/charts/kinds/Bars.js +1 -2
  22. package/dist/charts/kinds/StackedArea.d.ts.map +1 -1
  23. package/dist/charts/kinds/StackedArea.js +1 -2
  24. package/dist/charts/primitives/legend-disclosure.d.ts.map +1 -1
  25. package/dist/cli/audit-allows.d.ts +1 -1
  26. package/dist/cli/audit-allows.d.ts.map +1 -1
  27. package/dist/cli/audit-allows.js +4 -4
  28. package/dist/cli/check-theme.d.ts.map +1 -1
  29. package/dist/cli/check-theme.js +1 -2
  30. package/dist/cli/config.d.ts +197 -0
  31. package/dist/cli/config.d.ts.map +1 -0
  32. package/dist/cli/config.js +20 -0
  33. package/dist/cli/doctor.js +1 -1
  34. package/dist/cli/guard-hook.d.ts.map +1 -1
  35. package/dist/cli/guard-hook.js +2 -8
  36. package/dist/cli/index.d.ts +2 -196
  37. package/dist/cli/index.d.ts.map +1 -1
  38. package/dist/cli/index.js +1 -18
  39. package/dist/commands/define-commands.d.ts.map +1 -1
  40. package/dist/commands/define-commands.js +2 -2
  41. package/dist/commands/define-overlays.d.ts.map +1 -1
  42. package/dist/commands/define-overlays.js +1 -2
  43. package/dist/common/index.d.ts +0 -1
  44. package/dist/common/index.d.ts.map +1 -1
  45. package/dist/common/index.js +0 -2
  46. package/dist/common/validate.d.ts +2 -2
  47. package/dist/common/validate.d.ts.map +1 -1
  48. package/dist/common/validate.js +2 -3
  49. package/dist/content/article-card.d.ts.map +1 -1
  50. package/dist/content/article-card.js +4 -1
  51. package/dist/controls/enum-filter.d.ts.map +1 -1
  52. package/dist/controls/enum-filter.js +3 -13
  53. package/dist/controls/filter-pill.d.ts +8 -0
  54. package/dist/controls/filter-pill.d.ts.map +1 -1
  55. package/dist/controls/filter-pill.js +15 -0
  56. package/dist/controls/multi-select-filter.d.ts.map +1 -1
  57. package/dist/controls/multi-select-filter.js +3 -13
  58. package/dist/controls/number-filter.d.ts +3 -0
  59. package/dist/controls/number-filter.d.ts.map +1 -1
  60. package/dist/controls/number-filter.js +12 -4
  61. package/dist/controls/range-filter.d.ts.map +1 -1
  62. package/dist/controls/range-filter.js +1 -2
  63. package/dist/data/data-table.d.ts +9 -2
  64. package/dist/data/data-table.d.ts.map +1 -1
  65. package/dist/data/data-table.js +2 -3
  66. package/dist/forms/form-layout.d.ts +6 -1
  67. package/dist/forms/form-layout.d.ts.map +1 -1
  68. package/dist/forms/form-layout.module.css +3 -0
  69. package/dist/guard/index.d.ts +18 -4
  70. package/dist/guard/index.d.ts.map +1 -1
  71. package/dist/guard/index.js +67 -31
  72. package/dist/guard/types.d.ts +3 -3
  73. package/dist/guard/types.d.ts.map +1 -1
  74. package/dist/guard/vx-names.d.ts +3 -0
  75. package/dist/guard/vx-names.d.ts.map +1 -0
  76. package/dist/guard/vx-names.js +257 -0
  77. package/dist/notifications/mount-guard.d.ts.map +1 -1
  78. package/dist/notifications/mount-guard.js +1 -2
  79. package/dist/provider/index.d.ts.map +1 -1
  80. package/dist/provider/index.js +2 -3
  81. package/dist/provider/lab-theme.d.ts +5 -4
  82. package/dist/provider/lab-theme.d.ts.map +1 -1
  83. package/dist/provider/lab-theme.js +1 -3
  84. package/dist/router-tanstack/search-store.d.ts +18 -0
  85. package/dist/router-tanstack/search-store.d.ts.map +1 -1
  86. package/dist/router-tanstack/search-store.js +33 -1
  87. package/dist/shell/mobile-nav-model.d.ts.map +1 -1
  88. package/dist/shell/mobile-nav-model.js +3 -4
  89. package/dist/shell/page-bar.d.ts +24 -0
  90. package/dist/shell/page-bar.d.ts.map +1 -1
  91. package/dist/shell/page-bar.js +1 -2
  92. package/dist/surfaces.d.ts +1 -1
  93. package/dist/surfaces.d.ts.map +1 -1
  94. package/dist/surfaces.js +2 -0
  95. package/dist/tokens/index.d.ts +2 -0
  96. package/dist/tokens/index.d.ts.map +1 -1
  97. package/dist/tokens/index.js +10 -0
  98. package/dist/tokens/size-classes.d.ts +13 -0
  99. package/dist/tokens/size-classes.d.ts.map +1 -1
  100. package/dist/tokens/size-classes.js +8 -0
  101. package/llms.txt +2 -2
  102. package/package.json +1 -1
  103. package/src/agent/coalesce.ts +1 -2
  104. package/src/agent/merge.ts +1 -2
  105. package/src/agent-chat/relative-time.ts +1 -2
  106. package/src/agent-chat/thread-message.tsx +2 -3
  107. package/src/charts/kinds/BandStrip.tsx +7 -3
  108. package/src/charts/kinds/Bars.tsx +1 -2
  109. package/src/charts/kinds/StackedArea.tsx +4 -2
  110. package/src/charts/primitives/legend-disclosure.tsx +1 -0
  111. package/src/cli/audit-allows.ts +10 -9
  112. package/src/cli/check-theme.ts +1 -2
  113. package/src/cli/config.ts +209 -0
  114. package/src/cli/doctor.ts +2 -2
  115. package/src/cli/guard-hook.ts +2 -8
  116. package/src/cli/index.ts +2 -206
  117. package/src/commands/define-commands.ts +2 -2
  118. package/src/commands/define-overlays.ts +1 -2
  119. package/src/common/index.ts +0 -1
  120. package/src/common/validate.ts +4 -5
  121. package/src/content/article-card.tsx +1 -0
  122. package/src/controls/enum-filter.tsx +3 -13
  123. package/src/controls/filter-pill.tsx +20 -0
  124. package/src/controls/multi-select-filter.tsx +3 -13
  125. package/src/controls/number-filter.tsx +24 -3
  126. package/src/controls/range-filter.tsx +1 -2
  127. package/src/data/data-table.tsx +11 -5
  128. package/src/forms/form-layout.module.css +3 -0
  129. package/src/forms/form-layout.tsx +6 -1
  130. package/src/guard/index.ts +151 -62
  131. package/src/guard/types.ts +3 -2
  132. package/src/guard/vx-names.ts +257 -0
  133. package/src/notifications/mount-guard.ts +1 -2
  134. package/src/provider/index.tsx +2 -3
  135. package/src/provider/lab-theme.ts +28 -21
  136. package/src/router-tanstack/search-store.ts +73 -1
  137. package/src/shell/mobile-nav-model.ts +3 -5
  138. package/src/shell/page-bar.tsx +25 -4
  139. package/src/surfaces.ts +2 -0
  140. package/src/tokens/index.ts +10 -0
  141. package/src/tokens/size-classes.ts +14 -0
  142. package/dist/common/is-dev.d.ts +0 -3
  143. package/dist/common/is-dev.d.ts.map +0 -1
  144. package/dist/common/is-dev.js +0 -6
  145. package/src/common/is-dev.ts +0 -4
@@ -1,3 +1,4 @@
1
+ import { BASALT_VX_NAMES } from "./vx-names.js";
1
2
  const HEX = /#(?!(?<=&#)\d+;)[0-9a-fA-F]{3,8}\b/g;
2
3
  const FUNC = /\b(?:rgba?|hsla?)\((?!\s*\$\{)/g;
3
4
  const LOCALSTORAGE_THEME = /localStorage\s*\.\s*getItem\s*\(\s*['"]theme['"]\s*\)/g;
@@ -22,12 +23,7 @@ const CSS_WIDTH_MEDIA_QUERY = new RegExp(
22
23
  const CSS_CONTAINER_QUERY = /@container(?:\s+([\w-]+))?\s*((?:\([^)]*\)\s*(?:and\s*)?)+)/g;
23
24
  const CSS_CONTAINER_LITERAL = /(?:min-width|max-width|width)\s*(?:[<>]=?|:)\s*([\d.]+)(px|em)?/g;
24
25
  const CSS_NON_COARSE_POINTER_QUERY = /\(\s*(?:any-)?pointer\s*:\s*(?!(?:coarse|fine)\b)[a-z-]+\s*\)/g;
25
- const DECLARED_CONTAINER_NAMES = /* @__PURE__ */ new Set([
26
- "basalt-card",
27
- "basalt-form",
28
- "basalt-main",
29
- "basalt-grid"
30
- ]);
26
+ const DECLARED_CONTAINER_NAMES = /* @__PURE__ */ new Set(["basalt-card", "basalt-form", "basalt-grid"]);
31
27
  const CONTAINER_CLASS_LITERALS_PX = /* @__PURE__ */ new Set([0, 240, 239.9, 480, 479.9, 800, 799.9]);
32
28
  const SIZE_CLASS_LITERALS = /* @__PURE__ */ new Set(["52.5em", "75em", "52.49375em", "74.99375em"]);
33
29
  const SHELL_CSS_PATH = /(?:^|\/)shell\//;
@@ -53,6 +49,21 @@ function isAllowedCssRadius(value) {
53
49
  const INLINE_FONT_SIZE = /(?<![\w-;])font-?[Ss]ize\s*:\s*['"]?(\d+(?:\.\d+)?)(?:px)?['"]?(?=[,;\s}]|$)/g;
54
50
  const CARD_SURFACE_TAG = /<(?:Card|Paper)(?![\w.])(?:=>|[^>])*?>/g;
55
51
  const WITH_BORDER_PROP = /\bwithBorder\b(?!\s*=\s*\{\s*false\s*\})/;
52
+ const VX_VAR_REF = /var\(\s*(--vx-[A-Za-z0-9-]*[A-Za-z0-9])(?![A-Za-z0-9-]|\$\{)/g;
53
+ const VX_LOCAL_DECLARATION = /(?:^|[{;])\s*(--vx-[A-Za-z0-9-]*[A-Za-z0-9])\s*:|[{,]\s*(['"])(--vx-[A-Za-z0-9-]*[A-Za-z0-9])\2\s*:(?!\s*(?:string|number)\b)|\bsetProperty\(\s*['"](--vx-[A-Za-z0-9-]*[A-Za-z0-9])['"]/gm;
54
+ const REMOVED_VX_NAMES = {
55
+ "--vx-space-touch-target": "--vx-hit",
56
+ "--vx-space-touch-control-height": "--vx-hit",
57
+ "--vx-space-app-header-mobile-actions-height": "--vx-space-sticky-header-clearance",
58
+ "--vx-space-sticky-header-clearance-mobile": "--vx-space-sticky-header-clearance",
59
+ "--vx-space-sidebar-brand-inset-top": null
60
+ };
61
+ const KNOWN_VX_NAMES = new Set(BASALT_VX_NAMES);
62
+ const BASALT_VX_FAMILY_ROOTS = new Set(
63
+ BASALT_VX_NAMES.map((n) => /^(--vx-[A-Za-z0-9]+)-/.exec(n)?.[1]).filter(
64
+ (root) => root !== void 0 && !KNOWN_VX_NAMES.has(root)
65
+ )
66
+ );
56
67
  const OFF_SYSTEM_SURFACE_VAR = /var\(--mantine-color-(gray|dark)-\d/g;
57
68
  const MANTINE_SHADE_INDEX = /\b(?:color|c|bg|backgroundColor|borderColor)\s*=\s*\{?\s*['"][a-z]+\.\d\b|var\(--mantine-color-(?!gray-|dark-)[a-z]+-\d/g;
58
69
  const RAW_HTML_TAG_NAME = "<(?:div|span|section|header|nav|footer|aside|main|article|ul|ol)\\b";
@@ -193,7 +204,7 @@ function titleBodyNamesThePage(body) {
193
204
  }
194
205
  const RAW_SELECTION_CONTROL_TAG = /<(SegmentedControl|Select|MultiSelect|NativeSelect|DatePickerInput|DateInput|TagsInput|Chip\.Group)(?![\w])(?:=>|[^>])*?>/g;
195
206
  const PROSE_CONTEXT_TAG = /<(?:Prose|ArticleLayout|Modal|Drawer)(?![\w])/;
196
- const CONTROL_HOST_TAG = /<(?:SettingsRow|Modal|Drawer|Popover\.Dropdown|Menu\.Dropdown|Composer|FilterSet|PageAside|PanelRow)(?![\w])/;
207
+ const CONTROL_HOST_TAG = /<(?:SettingsRow|FormRow|FormGroup|Modal|Drawer|Popover\.Dropdown|Menu\.Dropdown|Composer|FilterSet|PageAside|PanelRow)(?![\w])/;
197
208
  const CONTROL_HOST_WINDOW_LINES = 12;
198
209
  const OVERLAY_CONVENTION_KEBAB = /^[^/]*-(?:modal|drawer|popover|panel|form)\.[jt]sx$/;
199
210
  const OVERLAY_CONVENTION_PASCAL = /^[A-Z]\w*(?:Modal|Drawer|Popover|Panel|Form)\.[jt]sx$/;
@@ -229,15 +240,10 @@ const DEFAULT_GUARD_CONFIG = {
229
240
  severity: {}
230
241
  };
231
242
  const GRACE_PERIOD_KINDS = {
232
- "raw-selection-control": {
233
- since: "1.26.0",
234
- promote: "1.33.0",
235
- why: "Extended 1.32.0 -> 1.33.0 at the 1.32.0 release, the last extension: basalt's own tree is at 0 (consumer-loop r1 dogfood) and argo is at 2, but RE-MEASURED 2026-09-30 the fleet carries ~33 (image-gen 11, rb 7, image-share 6, weatherorb 5, email-gateway 4, argo 2). The 1.32.0 fleet upgrade clears them while they warn, together with raw-breakpoint, so 1.33.0 promotes all four ids against a measured-clean fleet. Extended 1.31.0 -> 1.32.0 at the 1.31.0 release: the basalt tree still carries incumbents (data-table, notifications center, theme-lab) and the argo sweep has not run. new in the wave-6 control guards (docs/CONTROLS-SPEC.md \xA76, law C1). The text lane cannot see ancestry, so \"no home\" is approximated by a 12-line host-tag window \u2014 the loosest reading in the guard, and the reason this one lands warn rather than error even though its law is settled. ONE LAW, TWO LANES, ONE PROMOTION: it moves with its AST twin, `basalt/control-outside-home`, whose PLUGIN_RULE_GRACE entry carries the full argument and the measurement, and it must never be promoted or extended alone \u2014 a consumer waiving one spelling and failing the other is the exact confusion `WAIVER_ID_ALIASES` exists to close. RE-MEASURED 2026-09-09 across the whole fleet on 1.29.2: 29 AST-lane incumbents in five repos, plus three of basalt's own (data-table, notifications/center, theme-lab). Extended to 1.31.0 because 1.30.0 is the FIRST release in which either lane names a home a provider-only consumer can reach \u2014 every home both messages listed was a shell slot, and the shell-less `PageBar` sentence ships in this minor. Promoting in the same minor that makes a rule satisfiable gives nobody a window to act. 1.31.0 is when the 29 are re-measured against that number."
236
- },
237
- "raw-media-query": {
238
- since: "1.31.0",
239
- promote: "1.33.0",
240
- why: "The CSS-text twin of the oxlint plugin's `basalt/raw-breakpoint` \u2014 ONE LAW, TWO LANES, ONE PROMOTION, so it moves with that rule and never alone (`configs/oxlint-plugin.test.ts` \u203A twin lanes share one promotion pins the pair). New in the wave-11 responsive/touch guards; reaching CSS is a NEW file type for this check, same reasoning as `css-raw-surface`, with incumbents in basalt's own tree at ship time, so it shipped warn. Extended 1.32.0 -> 1.33.0 with its twin: 1.31.0 named no reachable container primitive, and 1.32.0 is the first minor that documents one (`CONTAINER_CLASSES` + the declared `@container` names, MIGRATING \xA7 `basalt/raw-breakpoint`)."
243
+ "unknown-vx-token": {
244
+ since: "1.33.0",
245
+ promote: "1.34.0",
246
+ why: "New kind (consumer-loop r2 B3): obsidian lost its 44px touch floor to a removed `var(--vx-space-touch-target)` that nothing reported. A new kind rejects code every previous release accepted, so it lands warn for one minor. Measured at ship time: argo, linewatch, rb, rollhook, obsidian, weatherorb, image-share, email-gateway, image-gen 0."
241
247
  }
242
248
  };
243
249
  function severityOf(kind, cfg) {
@@ -367,6 +373,7 @@ const WAIVER_ID_ALIASES = {
367
373
  "control-outside-home": ["raw-selection-control"],
368
374
  "raw-selection-control": ["control-outside-home"]
369
375
  };
376
+ const DUAL_LANE_IDS = /* @__PURE__ */ new Set(["in-body-page-title"]);
370
377
  const MIN_ALLOW_REASON_LENGTH = 4;
371
378
  function parseAllowAnnotation(rest, scope) {
372
379
  const rules = [];
@@ -923,7 +930,7 @@ const GUARD_RULES = {
923
930
  // handled inline (full-text tag-scoped scan + host window)
924
931
  // JSX-tag-shaped (`<Select …>`) — never appears in CSS text.
925
932
  appliesTo: (relPath) => !relPath.endsWith(".css"),
926
- message: "Raw selection control with no home \u2014 a filter or tab belongs in a PageBar / Section / WidgetHeader slot and takes a `field` (a FieldHandle), so it owns the URL write and the localStorage mirror instead of carrying value/onChange (docs/CONTROLS-SPEC.md laws C1\u2013C3). Use the bound control from basalt-ui/controls. A settings row, an overlay and an @mantine/form file are the declared non-homes and never report. No shell? PageBar needs no BasaltShell: outside one it renders in flow, sticky, with its own title \u2014 so its slots are a reachable home for a provider-only app. This is the TEXT lane of basalt/control-outside-home, which answers the same question against the real AST \u2014 where the two disagree, the plugin is right."
933
+ message: "Raw selection control with no home \u2014 a filter or tab belongs in a PageBar / Section / WidgetHeader slot and takes a `field` (a FieldHandle), so it owns the URL write and the localStorage mirror instead of carrying value/onChange (docs/CONTROLS-SPEC.md laws C1\u2013C3). Use the bound control from basalt-ui/controls. A settings row, a FormRow / FormGroup, an overlay and an @mantine/form file are the declared non-homes and never report. No shell? PageBar needs no BasaltShell: outside one it renders in flow, sticky, with its own title \u2014 so its slots are a reachable home for a provider-only app. This is the TEXT lane of basalt/control-outside-home, which answers the same question against the real AST \u2014 where the two disagree, the plugin is right."
927
934
  },
928
935
  "inline-font-size": {
929
936
  kind: "inline-font-size",
@@ -937,7 +944,17 @@ const GUARD_RULES = {
937
944
  // CSS-only: a width @media, an @container name/literal or a non-coarse pointer query has no JSX
938
945
  // spelling — the AST-side twin of this law is the oxlint plugin's basalt/raw-breakpoint.
939
946
  appliesTo: (relPath) => relPath.endsWith(".css"),
940
- message: `Raw viewport/container breakpoint in CSS \u2014 a width @media belongs to shell/** against SIZE_CLASSES (useSizeClass() is the JS seam); an @container name must be one of ${[...DECLARED_CONTAINER_NAMES].join(" / ")} at a boundary in ${[...CONTAINER_CLASS_LITERALS_PX].map((px) => `${px}px`).join(" / ")}; and a pointer query other than (pointer: coarse) or (pointer: fine) has no framework meaning. Same law the oxlint plugin enforces as basalt/raw-breakpoint over JSX; this is the CSS half.`
947
+ message: `Raw viewport/container breakpoint in CSS \u2014 a width @media belongs to shell/** against SIZE_CLASSES (useSizeClass() is the JS seam); an @container name must be one of ${[...DECLARED_CONTAINER_NAMES].join(" / ")}, and a basalt-card or unnamed @container query must sit at a boundary in ${[...CONTAINER_CLASS_LITERALS_PX].map((px) => `${px}px`).join(" / ")} (the other declared names have no numeric table yet, so their literals are not judged); and a pointer query other than (pointer: coarse) or (pointer: fine) has no framework meaning. Same law the oxlint plugin enforces as basalt/raw-breakpoint over JSX; this is the CSS half.`
948
+ },
949
+ "unknown-vx-token": {
950
+ kind: "unknown-vx-token",
951
+ pattern: VX_VAR_REF,
952
+ // handled inline (removed map + family roots); entry keeps the registry complete
953
+ message: `var() names a --vx-* token basalt does not emit, so it resolves to its fallback (or to nothing) with no error anywhere. Two shapes are judged, the only two basalt can judge without seeing your palette: a REMOVED name \u2014 ${Object.entries(
954
+ REMOVED_VX_NAMES
955
+ ).map(([from, to]) => `${from} \u2192 ${to ?? "(deleted, no replacement)"}`).join(
956
+ "; "
957
+ )} \u2014 and a bare family root nothing emits (${[...BASALT_VX_FAMILY_ROOTS].join(", ")}): name the token under it from basalt-ui/tokens.css. Any other unknown name is never judged, because defineSeries/groupTokens may declare it in a file this scan cannot see.`
941
958
  }
942
959
  };
943
960
  function guardKindRemedy(kind) {
@@ -1015,6 +1032,16 @@ function checkSource(text, relPath, cfg) {
1015
1032
  const styleIdentifiers = new Set(
1016
1033
  [...codeText.matchAll(STYLE_BOUND_IDENTIFIER)].map((m) => m[1] ?? "")
1017
1034
  );
1035
+ const locallyDeclaredVx = new Set(
1036
+ [...codeText.matchAll(VX_LOCAL_DECLARATION)].map((m) => m[1] ?? m[3] ?? m[4] ?? "")
1037
+ );
1038
+ for (const m of codeText.matchAll(VX_VAR_REF)) {
1039
+ const name = m[1] ?? "";
1040
+ if (locallyDeclaredVx.has(name)) continue;
1041
+ if (!Object.hasOwn(REMOVED_VX_NAMES, name) && !BASALT_VX_FAMILY_ROOTS.has(name)) continue;
1042
+ const at = (m.index ?? 0) + m[0].length - name.length;
1043
+ push("unknown-vx-token", lineStarts.findLastIndex((start) => start <= at) + 1, name);
1044
+ }
1018
1045
  for (let i = 0; i < lines.length; i++) {
1019
1046
  const line = codeLines[i] ?? "";
1020
1047
  for (const m of line.matchAll(GUARD_RULES["raw-hex"].pattern)) {
@@ -1270,19 +1297,28 @@ function findAllowAnnotations(text, relPath, cfg) {
1270
1297
  cfg.allowComment,
1271
1298
  syntax
1272
1299
  );
1273
- return declared.map(({ line, annotation }) => ({
1274
- line,
1275
- scope: annotation.scope,
1276
- rules: [...annotation.rules],
1277
- guardKinds: annotation.rules.filter((id) => Object.hasOwn(GUARD_RULES, id)),
1278
- pluginRules: annotation.rules.filter(
1279
- (id) => !Object.hasOwn(GUARD_RULES, id) && PLUGIN_RULE_IDS.has(id)
1280
- ),
1281
- unknownRules: [...annotation.unknownRules],
1282
- hasReason: annotation.hasReason,
1283
- bare: annotation.rules.length === 0 && annotation.unknownRules.length === 0,
1284
- text: lines[line - 1] ?? ""
1285
- }));
1300
+ const everyOxlintRule = [...PLUGIN_RULE_IDS, ...DUAL_LANE_IDS];
1301
+ return declared.map(({ line, annotation }) => {
1302
+ const bare = annotation.rules.length === 0 && annotation.unknownRules.length === 0;
1303
+ return {
1304
+ line,
1305
+ scope: annotation.scope,
1306
+ rules: [...annotation.rules],
1307
+ guardKinds: annotation.rules.filter((id) => Object.hasOwn(GUARD_RULES, id)),
1308
+ pluginRules: annotation.rules.filter(
1309
+ (id) => !Object.hasOwn(GUARD_RULES, id) && PLUGIN_RULE_IDS.has(id)
1310
+ ),
1311
+ oxlintRules: bare && annotation.scope === "line" ? everyOxlintRule : [
1312
+ ...new Set(
1313
+ annotation.rules.flatMap((id) => [id, ...WAIVER_ID_ALIASES[id] ?? []]).filter((id) => PLUGIN_RULE_IDS.has(id) || DUAL_LANE_IDS.has(id))
1314
+ )
1315
+ ],
1316
+ unknownRules: [...annotation.unknownRules],
1317
+ hasReason: annotation.hasReason,
1318
+ bare,
1319
+ text: lines[line - 1] ?? ""
1320
+ };
1321
+ });
1286
1322
  }
1287
1323
  const NEUTRALIZED_ALLOW_TOKEN = "basalt-audit-neutralized";
1288
1324
  function neutralizeAllowAnnotation(text, line, cfg) {
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Guard types — Mantine-free, dependency-free (zero imports beyond TS types).
3
3
  *
4
- * GuardKind is the closed set of 27 violation kinds the theme guard can emit — `unframed-chart`
4
+ * GuardKind is the closed set of 28 violation kinds the theme guard can emit — `unframed-chart`
5
5
  * retired at the C2 consolidation wave: its only case (a hand-authored `<ChartLegend items={[...]}>`
6
6
  * array literal) is fully subsumed by the oxlint plugin's `basalt/chart-legend-literal`, which also
7
7
  * catches the `.map()`-over-a-non-series form the regex never could. `'unframed-chart'` stays a
@@ -10,8 +10,8 @@
10
10
  * Finding is the structured result per violation, replacing the old `Violation` shape.
11
11
  * GuardConfig is the per-run configuration that drives checkSource.
12
12
  */
13
- /** The 27 theme-guard violation kinds. */
14
- export type GuardKind = 'raw-hex' | 'raw-color-fn' | 'localstorage-theme' | 'off-identity-accent' | 'mantine-shade-index' | 'raw-spacing' | 'raw-radius' | 'raw-surface' | 'card-with-border' | 'off-system-surface-var' | 'raw-html-layout' | 'inline-spacing' | 'inline-display' | 'raw-visx-axis' | 'raw-motion-value' | 'chart-missing-aria-label' | 'raw-form-control' | 'sub-16-input-font' | 'raw-font-family' | 'theme-allow-unscoped' | 'surface-shadow-override' | 'css-raw-surface' | 'inline-font-size' | 'hidden-inline-style' | 'in-body-page-title' | 'raw-selection-control' | 'raw-media-query';
13
+ /** The 28 theme-guard violation kinds. */
14
+ export type GuardKind = 'raw-hex' | 'raw-color-fn' | 'localstorage-theme' | 'off-identity-accent' | 'mantine-shade-index' | 'raw-spacing' | 'raw-radius' | 'raw-surface' | 'card-with-border' | 'off-system-surface-var' | 'raw-html-layout' | 'inline-spacing' | 'inline-display' | 'raw-visx-axis' | 'raw-motion-value' | 'chart-missing-aria-label' | 'raw-form-control' | 'sub-16-input-font' | 'raw-font-family' | 'theme-allow-unscoped' | 'surface-shadow-override' | 'css-raw-surface' | 'inline-font-size' | 'hidden-inline-style' | 'in-body-page-title' | 'raw-selection-control' | 'raw-media-query' | 'unknown-vx-token';
15
15
  /**
16
16
  * How hard a finding lands. `error` fails the build; `warn` reports and passes.
17
17
  *
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/guard/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,0CAA0C;AAC1C,MAAM,MAAM,SAAS,GACjB,SAAS,GACT,cAAc,GACd,oBAAoB,GACpB,qBAAqB,GACrB,qBAAqB,GACrB,aAAa,GACb,YAAY,GACZ,aAAa,GACb,kBAAkB,GAClB,wBAAwB,GACxB,iBAAiB,GACjB,gBAAgB,GAChB,gBAAgB,GAChB,eAAe,GACf,kBAAkB,GAClB,0BAA0B,GAC1B,kBAAkB,GAClB,mBAAmB,GACnB,iBAAiB,GACjB,sBAAsB,GACtB,yBAAyB,GACzB,iBAAiB,GACjB,kBAAkB,GAClB,qBAAqB,GACrB,oBAAoB,GACpB,uBAAuB,GACvB,iBAAiB,CAAA;AAErB;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,OAAO,CAAA;AAE5C;;;;;;;GAOG;AACH,MAAM,MAAM,OAAO,GAAG;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,oFAAoF;IACpF,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAA;CACjC,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,wGAAwG;IACxG,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAA;IACxC,uEAAuE;IACvE,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,wEAAwE;IACxE,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAA;IAC5C;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAA;IACnC,iGAAiG;IACjG,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;IAC5B;;;;;;OAMG;IACH,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAA;IAChC,2GAA2G;IAC3G,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAA;IACrC,sGAAsG;IACtG,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAA;IAC/B,8EAA8E;IAC9E,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAA;IAC/B,4FAA4F;IAC5F,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAA;IAC/B,yFAAyF;IACzF,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;IAC7B,kGAAkG;IAClG,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAA;IAChC;;;;;OAKG;IACH,QAAQ,CAAC,qBAAqB,EAAE,OAAO,CAAA;IACvC;;;;;;OAMG;IACH,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAA;IAChC;;;;;;OAMG;IACH,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAA;IAChC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,GAAG,aAAa,CAAA;IAC5C;;;;;;;;;;;;;;;;;;;OAmBG;IACH,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;IAC1D;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAA;CAC7D,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/guard/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,0CAA0C;AAC1C,MAAM,MAAM,SAAS,GACjB,SAAS,GACT,cAAc,GACd,oBAAoB,GACpB,qBAAqB,GACrB,qBAAqB,GACrB,aAAa,GACb,YAAY,GACZ,aAAa,GACb,kBAAkB,GAClB,wBAAwB,GACxB,iBAAiB,GACjB,gBAAgB,GAChB,gBAAgB,GAChB,eAAe,GACf,kBAAkB,GAClB,0BAA0B,GAC1B,kBAAkB,GAClB,mBAAmB,GACnB,iBAAiB,GACjB,sBAAsB,GACtB,yBAAyB,GACzB,iBAAiB,GACjB,kBAAkB,GAClB,qBAAqB,GACrB,oBAAoB,GACpB,uBAAuB,GACvB,iBAAiB,GACjB,kBAAkB,CAAA;AAEtB;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,OAAO,CAAA;AAE5C;;;;;;;GAOG;AACH,MAAM,MAAM,OAAO,GAAG;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,oFAAoF;IACpF,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAA;CACjC,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,wGAAwG;IACxG,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAA;IACxC,uEAAuE;IACvE,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,wEAAwE;IACxE,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAA;IAC5C;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAA;IACnC,iGAAiG;IACjG,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;IAC5B;;;;;;OAMG;IACH,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAA;IAChC,2GAA2G;IAC3G,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAA;IACrC,sGAAsG;IACtG,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAA;IAC/B,8EAA8E;IAC9E,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAA;IAC/B,4FAA4F;IAC5F,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAA;IAC/B,yFAAyF;IACzF,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;IAC7B,kGAAkG;IAClG,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAA;IAChC;;;;;OAKG;IACH,QAAQ,CAAC,qBAAqB,EAAE,OAAO,CAAA;IACvC;;;;;;OAMG;IACH,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAA;IAChC;;;;;;OAMG;IACH,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAA;IAChC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,GAAG,aAAa,CAAA;IAC5C;;;;;;;;;;;;;;;;;;;OAmBG;IACH,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;IAC1D;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAA;CAC7D,CAAA"}
@@ -0,0 +1,3 @@
1
+ /** Every `--vx-*` name basalt emits: `dist/tokens.css` plus its component-scoped names. */
2
+ export declare const BASALT_VX_NAMES: readonly string[];
3
+ //# sourceMappingURL=vx-names.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vx-names.d.ts","sourceRoot":"","sources":["../../src/guard/vx-names.ts"],"names":[],"mappings":"AAEA,2FAA2F;AAC3F,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EA6P5C,CAAA"}
@@ -0,0 +1,257 @@
1
+ const BASALT_VX_NAMES = [
2
+ "--vx-accent",
3
+ "--vx-accent-fill",
4
+ "--vx-accent-fill-hover",
5
+ "--vx-accent-hover",
6
+ "--vx-accentFill",
7
+ "--vx-accentFillHover",
8
+ "--vx-accentHover",
9
+ "--vx-area-bottom",
10
+ "--vx-area-top",
11
+ "--vx-axis",
12
+ "--vx-axis-stroke",
13
+ "--vx-axisStroke",
14
+ "--vx-bad",
15
+ "--vx-bad-ref",
16
+ "--vx-bad-solid",
17
+ "--vx-badRef",
18
+ "--vx-badSolid",
19
+ "--vx-crosshair",
20
+ "--vx-divider",
21
+ "--vx-dot-stroke",
22
+ "--vx-dotStroke",
23
+ "--vx-faint",
24
+ "--vx-fill-cyan",
25
+ "--vx-fill-grape",
26
+ "--vx-fill-gray",
27
+ "--vx-fill-green",
28
+ "--vx-fill-hover-cyan",
29
+ "--vx-fill-hover-grape",
30
+ "--vx-fill-hover-gray",
31
+ "--vx-fill-hover-green",
32
+ "--vx-fill-hover-indigo",
33
+ "--vx-fill-hover-lime",
34
+ "--vx-fill-hover-orange",
35
+ "--vx-fill-hover-pink",
36
+ "--vx-fill-hover-red",
37
+ "--vx-fill-hover-teal",
38
+ "--vx-fill-hover-violet",
39
+ "--vx-fill-hover-yellow",
40
+ "--vx-fill-indigo",
41
+ "--vx-fill-lime",
42
+ "--vx-fill-orange",
43
+ "--vx-fill-pink",
44
+ "--vx-fill-red",
45
+ "--vx-fill-teal",
46
+ "--vx-fill-violet",
47
+ "--vx-fill-yellow",
48
+ "--vx-fillHover-cyan",
49
+ "--vx-fillHover-grape",
50
+ "--vx-fillHover-gray",
51
+ "--vx-fillHover-green",
52
+ "--vx-fillHover-indigo",
53
+ "--vx-fillHover-lime",
54
+ "--vx-fillHover-orange",
55
+ "--vx-fillHover-pink",
56
+ "--vx-fillHover-red",
57
+ "--vx-fillHover-teal",
58
+ "--vx-fillHover-violet",
59
+ "--vx-fillHover-yellow",
60
+ "--vx-good",
61
+ "--vx-good-ref",
62
+ "--vx-good-soft",
63
+ "--vx-good-solid",
64
+ "--vx-goodRef",
65
+ "--vx-goodSoft",
66
+ "--vx-goodSolid",
67
+ "--vx-grid",
68
+ "--vx-hit",
69
+ "--vx-hit-gap",
70
+ "--vx-ink",
71
+ "--vx-ink2",
72
+ "--vx-keyboard-inset",
73
+ "--vx-legend-text",
74
+ "--vx-legendText",
75
+ "--vx-line",
76
+ "--vx-line2",
77
+ "--vx-muted",
78
+ "--vx-neutral",
79
+ "--vx-on-accent",
80
+ "--vx-onAccent",
81
+ "--vx-prose-measure",
82
+ "--vx-radius-card",
83
+ "--vx-radius-ctrl",
84
+ "--vx-radius-fine",
85
+ "--vx-radius-floating",
86
+ "--vx-radius-pill",
87
+ "--vx-radius-tight",
88
+ "--vx-shadow-card",
89
+ "--vx-shadow-ctrl",
90
+ "--vx-shadow-overlay",
91
+ "--vx-shadow-raised",
92
+ "--vx-space-agent-code-inset",
93
+ "--vx-space-agent-error-inset-x",
94
+ "--vx-space-agent-error-inset-y",
95
+ "--vx-space-agent-message-inset-x",
96
+ "--vx-space-agent-message-inset-y",
97
+ "--vx-space-agent-part-gap-top",
98
+ "--vx-space-agent-rail-inset-x",
99
+ "--vx-space-agent-scroll-button-gap-top",
100
+ "--vx-space-agent-transcript-inset",
101
+ "--vx-space-app-shell-header-lead-min",
102
+ "--vx-space-app-shell-inset",
103
+ "--vx-space-app-shell-inset-mobile",
104
+ "--vx-space-article-card-meta-gap-top",
105
+ "--vx-space-article-card-tag-inset-x",
106
+ "--vx-space-article-card-tag-inset-y",
107
+ "--vx-space-article-card-tags-gap",
108
+ "--vx-space-article-column-gap",
109
+ "--vx-space-article-footer-gap",
110
+ "--vx-space-article-footer-margin-top",
111
+ "--vx-space-article-footer-padding-top",
112
+ "--vx-space-article-header-gap",
113
+ "--vx-space-article-header-margin-bottom",
114
+ "--vx-space-article-header-padding-bottom",
115
+ "--vx-space-article-meta-row-gap",
116
+ "--vx-space-article-nav-target-gap",
117
+ "--vx-space-article-toc-rail-width",
118
+ "--vx-space-badge-inset-x",
119
+ "--vx-space-badge-inset-y",
120
+ "--vx-space-callout-inset-x",
121
+ "--vx-space-callout-inset-y",
122
+ "--vx-space-callout-title-row-gap",
123
+ "--vx-space-card-inset-x",
124
+ "--vx-space-card-inset-y",
125
+ "--vx-space-code-block-body-inset-y",
126
+ "--vx-space-code-block-content-inset-x",
127
+ "--vx-space-code-block-floating-copy-offset",
128
+ "--vx-space-code-block-header-gap",
129
+ "--vx-space-code-block-header-inset-right",
130
+ "--vx-space-code-block-header-inset-y",
131
+ "--vx-space-code-block-header-right-gap",
132
+ "--vx-space-control-gap",
133
+ "--vx-space-control-height",
134
+ "--vx-space-control-height-ctl",
135
+ "--vx-space-control-height-tag",
136
+ "--vx-space-control-height-widget",
137
+ "--vx-space-guide-body-gap-bottom",
138
+ "--vx-space-guide-footer-gap-top",
139
+ "--vx-space-guide-footer-inset-top",
140
+ "--vx-space-icon-size",
141
+ "--vx-space-input-height",
142
+ "--vx-space-mermaid-container-inset",
143
+ "--vx-space-mobile-nav-icon-size",
144
+ "--vx-space-mobile-nav-row-height",
145
+ "--vx-space-mobile-nav-tab-gap",
146
+ "--vx-space-mobile-nav-tab-inset-x",
147
+ "--vx-space-mobile-nav-tab-inset-y",
148
+ "--vx-space-nav-icon-gap",
149
+ "--vx-space-page-bar-row-height",
150
+ "--vx-space-prose-article-block-gap",
151
+ "--vx-space-prose-article-h1-gap-bottom",
152
+ "--vx-space-prose-article-h1-gap-top",
153
+ "--vx-space-prose-article-h2-rule-gap",
154
+ "--vx-space-prose-article-heading-gap-bottom",
155
+ "--vx-space-prose-article-heading-gap-top",
156
+ "--vx-space-prose-article-list-gap-bottom",
157
+ "--vx-space-prose-article-list-gap-top",
158
+ "--vx-space-prose-article-list-indent",
159
+ "--vx-space-prose-article-paragraph-gap",
160
+ "--vx-space-prose-chat-heading-gap-bottom",
161
+ "--vx-space-prose-chat-heading-gap-top",
162
+ "--vx-space-prose-chat-list-gap-bottom",
163
+ "--vx-space-prose-chat-list-indent",
164
+ "--vx-space-prose-chat-list-item-gap",
165
+ "--vx-space-prose-chat-nested-list-gap",
166
+ "--vx-space-prose-code-block-inset-x",
167
+ "--vx-space-prose-code-block-inset-y",
168
+ "--vx-space-prose-heading-anchor-gap",
169
+ "--vx-space-prose-inline-code-inset-x",
170
+ "--vx-space-prose-inline-code-inset-y",
171
+ "--vx-space-prose-quote-indent",
172
+ "--vx-space-prose-quote-inset-y",
173
+ "--vx-space-prose-table-cell-inset-x",
174
+ "--vx-space-prose-table-cell-inset-y",
175
+ "--vx-space-row-inset-x",
176
+ "--vx-space-row-inset-y",
177
+ "--vx-space-row-line-height",
178
+ "--vx-space-section-gap",
179
+ "--vx-space-section-header-height",
180
+ "--vx-space-settings-row-gap",
181
+ "--vx-space-settings-row-inset-y",
182
+ "--vx-space-sheet-row-height",
183
+ "--vx-space-sidebar-account-inset-bottom",
184
+ "--vx-space-sidebar-account-inset-top",
185
+ "--vx-space-sidebar-account-inset-x",
186
+ "--vx-space-sidebar-avatar-size",
187
+ "--vx-space-sidebar-block-row-height",
188
+ "--vx-space-sidebar-brand-inset-x",
189
+ "--vx-space-sidebar-child-list-gap-bottom",
190
+ "--vx-space-sidebar-child-list-gap-top",
191
+ "--vx-space-sidebar-child-list-indent",
192
+ "--vx-space-sidebar-child-row-indent",
193
+ "--vx-space-sidebar-child-row-inset-y",
194
+ "--vx-space-sidebar-region-gap",
195
+ "--vx-space-sidebar-search-gap",
196
+ "--vx-space-sidebar-search-trigger-height",
197
+ "--vx-space-sidebar-section-gap",
198
+ "--vx-space-sidebar-section-label-gap",
199
+ "--vx-space-stack-lg",
200
+ "--vx-space-stack-md",
201
+ "--vx-space-stack-sm",
202
+ "--vx-space-stack-xl",
203
+ "--vx-space-stack-xs",
204
+ "--vx-space-stat-card-gap",
205
+ "--vx-space-sticky-header-clearance",
206
+ "--vx-space-toc-link-indent",
207
+ "--vx-space-toc-link-inset-y",
208
+ "--vx-space-toc-root-gap",
209
+ "--vx-space-toc-sub-indent",
210
+ "--vx-space-virtual-row-inset-x",
211
+ "--vx-space-virtual-row-inset-y",
212
+ "--vx-space-widget-header-height",
213
+ "--vx-status-bad",
214
+ "--vx-status-excellent",
215
+ "--vx-status-good",
216
+ "--vx-status-neutral",
217
+ "--vx-status-warn",
218
+ "--vx-surface-bg",
219
+ "--vx-surface-border",
220
+ "--vx-surface-elevated",
221
+ "--vx-surface-field",
222
+ "--vx-surface-hairline",
223
+ "--vx-surface-overlay",
224
+ "--vx-surface-panel",
225
+ "--vx-surface-panel-hover",
226
+ "--vx-surface-panelHover",
227
+ "--vx-surface-subtle",
228
+ "--vx-text-display",
229
+ "--vx-text-h1",
230
+ "--vx-text-h2",
231
+ "--vx-text-kpi",
232
+ "--vx-text-lg",
233
+ "--vx-text-md",
234
+ "--vx-text-micro",
235
+ "--vx-text-nano",
236
+ "--vx-text-sm",
237
+ "--vx-text-xl",
238
+ "--vx-text-xs",
239
+ "--vx-tooltip-bg",
240
+ "--vx-tooltip-border",
241
+ "--vx-tooltip-muted",
242
+ "--vx-tooltip-shadow",
243
+ "--vx-tooltip-text",
244
+ "--vx-tooltipBg",
245
+ "--vx-tooltipBorder",
246
+ "--vx-tooltipMuted",
247
+ "--vx-tooltipShadow",
248
+ "--vx-tooltipText",
249
+ "--vx-warn",
250
+ "--vx-warn-ref",
251
+ "--vx-warn-solid",
252
+ "--vx-warnRef",
253
+ "--vx-warnSolid"
254
+ ];
255
+ export {
256
+ BASALT_VX_NAMES
257
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"mount-guard.d.ts","sourceRoot":"","sources":["../../src/notifications/mount-guard.ts"],"names":[],"mappings":"AAkBA;;;;;GAKG;AACH,wBAAgB,0BAA0B,IAAI,IAAI,CAcjD"}
1
+ {"version":3,"file":"mount-guard.d.ts","sourceRoot":"","sources":["../../src/notifications/mount-guard.ts"],"names":[],"mappings":"AAiBA;;;;;GAKG;AACH,wBAAgB,0BAA0B,IAAI,IAAI,CAcjD"}
@@ -1,10 +1,9 @@
1
1
  import { useEffect } from "react";
2
- import { isDev } from "../common/is-dev.js";
3
2
  let mountedNotificationsCount = 0;
4
3
  function useNotificationsMountGuard() {
5
4
  useEffect(() => {
6
5
  mountedNotificationsCount++;
7
- if (mountedNotificationsCount > 1 && isDev()) {
6
+ if (mountedNotificationsCount > 1 && process.env.NODE_ENV !== "production") {
8
7
  console.warn(
9
8
  "[basalt] more than one Notifications overlay is mounted at once \u2014 mount exactly ONE <BasaltOverlays notifications /> (they all render Mantine's <Notifications />, so toasts would double-fire)."
10
9
  );
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/provider/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/provider/index.tsx"],"names":[],"mappings":"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"}
@@ -14,14 +14,13 @@ import { useLabTheme } from "./lab-theme.js";
14
14
  import { buildDensityCss, buildFontsCss, buildPaletteCss, buildRadiusCss } from "../tokens/index.js";
15
15
  import { isDefaultDeriveConfig } from "../tokens/derive.js";
16
16
  import { buildPaletteData } from "../tokens/palette.js";
17
- import { isDev } from "../common/is-dev.js";
18
17
  import { useMediaQuery } from "../common/use-media-query.js";
19
18
  import { registerColorSchemeSetter } from "../commands/shell-bridge.js";
20
19
  import { useIsomorphicLayoutEffect } from "../common/isomorphic-layout-effect.js";
21
20
  import { PageTitle } from "../shell/page-title.js";
22
21
  import { SizeClassHintContext } from "../shell/use-size-class.js";
23
22
  function defaultOnError(error, ctx) {
24
- if (isDev()) {
23
+ if (process.env.NODE_ENV !== "production") {
25
24
  console.error("[BasaltProvider] unhandled error", ctx.kind, error);
26
25
  }
27
26
  }
@@ -142,7 +141,7 @@ function BasaltBridge({
142
141
  const providerMounts = createMountCounter();
143
142
  function useDuplicateProviderGuard() {
144
143
  useEffect(() => {
145
- if (providerMounts.mount() > 1 && isDev()) {
144
+ if (providerMounts.mount() > 1 && process.env.NODE_ENV !== "production") {
146
145
  console.warn(
147
146
  "[basalt] BasaltProvider: more than one instance is mounted at once \u2014 nested/duplicate BasaltProviders double-mount MantineProvider, the palette <style> and ConnectivityProvider. Mount exactly one, at the app root."
148
147
  );
@@ -29,10 +29,11 @@ export declare function applyLabOverride(overrides: MantineThemeOverride | undef
29
29
  */
30
30
  declare function useLabThemeDev(overrides: MantineThemeOverride | undefined): MantineThemeOverride;
31
31
  /**
32
- * `BasaltProvider`'s theme resolution. Picked at module scope, not per render — both implementations
33
- * call their hooks unconditionally at their own top level, and which one is bound never changes for
34
- * the app's lifetime, so the hook order is as stable as a plain function's (a `LAB_ENABLED ? use…()`
35
- * inline in one function body would be a conditional hook call and a `react/rules-of-hooks` error).
32
+ * `BasaltProvider`'s theme resolution. Picked at module scope, not per render — both
33
+ * implementations call their hooks unconditionally at their own top level, and which one is bound
34
+ * never changes for the app's lifetime, so the hook order is as stable as a plain function's (a
35
+ * `dev ? use…()` inline in one function body would be a conditional hook call and a
36
+ * `react/rules-of-hooks` error).
36
37
  */
37
38
  export declare const useLabTheme: typeof useLabThemeDev;
38
39
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"lab-theme.d.ts","sourceRoot":"","sources":["../../src/provider/lab-theme.ts"],"names":[],"mappings":"AAyCA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AAGzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AA4C/D;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,oBAAoB,EAC1B,IAAI,EAAE,oBAAoB,GACzB,oBAAoB,CAEtB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,oBAAoB,GAAG,SAAS,EAC3C,QAAQ,EAAE,cAAc,GAAG,IAAI,GAC9B,oBAAoB,CAWtB;AAgBD;;;;;;;;;GASG;AACH,iBAAS,cAAc,CAAC,SAAS,EAAE,oBAAoB,GAAG,SAAS,GAAG,oBAAoB,CAGzF;AAOD;;;;;GAKG;AACH,eAAO,MAAM,WAAW,uBAAiD,CAAA"}
1
+ {"version":3,"file":"lab-theme.d.ts","sourceRoot":"","sources":["../../src/provider/lab-theme.ts"],"names":[],"mappings":"AAyCA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AAGzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AA2C/D;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,oBAAoB,EAC1B,IAAI,EAAE,oBAAoB,GACzB,oBAAoB,CAEtB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,oBAAoB,GAAG,SAAS,EAC3C,QAAQ,EAAE,cAAc,GAAG,IAAI,GAC9B,oBAAoB,CAWtB;AAuBD;;;;;;;;;GASG;AACH,iBAAS,cAAc,CAAC,SAAS,EAAE,oBAAoB,GAAG,SAAS,GAAG,oBAAoB,CAGzF;AAOD;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,uBAA2E,CAAA"}
@@ -2,7 +2,6 @@ import { mergeThemeOverrides } from "@mantine/core";
2
2
  import { useMemo } from "react";
3
3
  import { useDeriveControlsState, toDeriveOverride } from "../theme-lab/derive-state.js";
4
4
  import { baseTheme, createBasaltTheme } from "../theme/index.js";
5
- import { isDev } from "../common/is-dev.js";
6
5
  const isPlainObject = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
7
6
  function sameLeaf(a, b) {
8
7
  if (a === b) return true;
@@ -37,7 +36,6 @@ function applyLabOverride(overrides, override) {
37
36
  });
38
37
  return mergeThemeOverrides(theme, themeOverrideDelta(baseTheme, labTheme));
39
38
  }
40
- const LAB_ENABLED = isDev();
41
39
  function useLabThemeDev(overrides) {
42
40
  const [state] = useDeriveControlsState();
43
41
  return useMemo(() => applyLabOverride(overrides, toDeriveOverride(state)), [overrides, state]);
@@ -45,7 +43,7 @@ function useLabThemeDev(overrides) {
45
43
  function useLabThemeProd(overrides) {
46
44
  return useMemo(() => createBasaltTheme(overrides), [overrides]);
47
45
  }
48
- const useLabTheme = LAB_ENABLED ? useLabThemeDev : useLabThemeProd;
46
+ const useLabTheme = process.env.NODE_ENV !== "production" ? useLabThemeDev : useLabThemeProd;
49
47
  export {
50
48
  applyLabOverride,
51
49
  themeOverrideDelta,
@@ -6,6 +6,24 @@ export type CreateSearchStoreOptions<S extends Record<string, AnyField>> = {
6
6
  fields: S;
7
7
  /** Envelope version — bump when the field set changes to discard stale localStorage. */
8
8
  version?: number;
9
+ /**
10
+ * Search params this store does NOT own that a URL-lane write drops, in the SAME navigate —
11
+ * `['page']` on a paginated list, so narrowing the set on page 5 lands on page 1 and Back restores
12
+ * both together. Dropped, not written: the route's own `validateSearch` resolves the default
13
+ * (`page` → 1), so the store never has to know it. Applies to a URL-lane field's setter and
14
+ * `clear()` when the value moves, and to `useReset()` when any field moves; an explicit `patch`
15
+ * naming the same key wins.
16
+ *
17
+ * **URL-lane writes only.** A `url: false` field (mirror-only or memory) makes no navigate, so it
18
+ * has none to ride — and a `useReset()` on a store with no URL-lane field keeps the page too.
19
+ *
20
+ * Store-wide by design: every filter of a list narrows the same list. A param the store owns is
21
+ * refused at definition — reset a field with `useReset()` or its own `clear()`.
22
+ *
23
+ * @example
24
+ * createSearchStore({ key: 'shares', fields: { q: field.string({}), sort: … }, resets: ['page'] })
25
+ */
26
+ resets?: readonly string[];
9
27
  };
10
28
  export type SearchStore<S extends Record<string, AnyField>> = {
11
29
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"search-store.d.ts","sourceRoot":"","sources":["../../src/router-tanstack/search-store.ts"],"names":[],"mappings":"AAkCA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAmB,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAIlG,MAAM,MAAM,wBAAwB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI;IACzE,uFAAuF;IACvF,GAAG,EAAE,MAAM,CAAA;IACX,uFAAuF;IACvF,MAAM,EAAE,CAAC,CAAA;IACT,wFAAwF;IACxF,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI;IAC5D;;;;OAIG;IACH,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,CAAA;IACjE;;;;OAIG;IACH,UAAU,EAAE,MAAM,YAAY,CAAC,CAAC,CAAC,CAAA;IACjC,iFAAiF;IACjF,UAAU,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1C,2FAA2F;IAC3F,KAAK,EAAE;SAAG,CAAC,IAAI,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAAE,CAAA;IAC5C,8FAA8F;IAC9F,MAAM,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC;SAAG,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;KAAE,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,CAAA;IACpF,6EAA6E;IAC7E,SAAS,EAAE,MAAM,YAAY,CAAC,CAAC,CAAC,CAAA;IAChC,oFAAoF;IACpF,cAAc,EAAE,MAAM,MAAM,CAAA;IAC5B;;;OAGG;IACH,QAAQ,EAAE,MAAM,MAAM,IAAI,CAAA;CAC3B,CAAA;AAsGD;;;;;;GAMG;AACH,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG;IACrF,eAAe,EAAE,MAAM,IAAI,CAAA;CAC5B,CAAA;AA2BD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,EACvE,CAAC,EAAE,wBAAwB,CAAC,CAAC,CAAC,GAC7B,mBAAmB,CAAC,CAAC,CAAC,CAkSxB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,EACxE,CAAC,EAAE,wBAAwB,CAAC,CAAC,CAAC,GAC7B,WAAW,CAAC,CAAC,CAAC,CAEhB"}
1
+ {"version":3,"file":"search-store.d.ts","sourceRoot":"","sources":["../../src/router-tanstack/search-store.ts"],"names":[],"mappings":"AAkCA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAmB,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAIlG,MAAM,MAAM,wBAAwB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI;IACzE,uFAAuF;IACvF,GAAG,EAAE,MAAM,CAAA;IACX,uFAAuF;IACvF,MAAM,EAAE,CAAC,CAAA;IACT,wFAAwF;IACxF,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;;;;;;;;;;;;;;OAgBG;IACH,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI;IAC5D;;;;OAIG;IACH,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,CAAA;IACjE;;;;OAIG;IACH,UAAU,EAAE,MAAM,YAAY,CAAC,CAAC,CAAC,CAAA;IACjC,iFAAiF;IACjF,UAAU,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1C,2FAA2F;IAC3F,KAAK,EAAE;SAAG,CAAC,IAAI,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAAE,CAAA;IAC5C,8FAA8F;IAC9F,MAAM,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC;SAAG,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;KAAE,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,CAAA;IACpF,6EAA6E;IAC7E,SAAS,EAAE,MAAM,YAAY,CAAC,CAAC,CAAC,CAAA;IAChC,oFAAoF;IACpF,cAAc,EAAE,MAAM,MAAM,CAAA;IAC5B;;;OAGG;IACH,QAAQ,EAAE,MAAM,MAAM,IAAI,CAAA;CAC3B,CAAA;AAsGD;;;;;;GAMG;AACH,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG;IACrF,eAAe,EAAE,MAAM,IAAI,CAAA;CAC5B,CAAA;AAiDD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,EACvE,CAAC,EAAE,wBAAwB,CAAC,CAAC,CAAC,GAC7B,mBAAmB,CAAC,CAAC,CAAC,CAkUxB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,EACxE,CAAC,EAAE,wBAAwB,CAAC,CAAC,CAAC,GAC7B,WAAW,CAAC,CAAC,CAAC,CAEhB"}