basalt-ui 1.25.0 → 1.27.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 (476) hide show
  1. package/AGENTS.md +8 -6
  2. package/CHANGELOG.md +26 -0
  3. package/MIGRATING.md +815 -23
  4. package/README.md +45 -32
  5. package/agent/rules/basalt-batteries.md +205 -0
  6. package/agent/rules/basalt-charts.md +125 -555
  7. package/agent/rules/basalt-controls.md +160 -0
  8. package/agent/rules/basalt-mantine.md +146 -439
  9. package/agent/rules/basalt-state.md +118 -96
  10. package/agent/rules/basalt-tokens.md +126 -288
  11. package/agent/skills/basalt-app/SKILL.md +70 -195
  12. package/agent/skills/basalt-charts/SKILL.md +54 -234
  13. package/agent/skills/basalt-design/SKILL.md +56 -248
  14. package/agent/templates/CLAUDE-block.md.tpl +31 -40
  15. package/agent/templates/DESIGN.md.tpl +22 -51
  16. package/configs/oxlint-plugin.js +1465 -36
  17. package/configs/oxlint-plugin.test.ts +1190 -11
  18. package/configs/oxlint.json +11 -3
  19. package/dist/charts/cursor/resolve.d.ts +18 -0
  20. package/dist/charts/cursor/resolve.d.ts.map +1 -1
  21. package/dist/charts/cursor/resolve.js +15 -6
  22. package/dist/charts/cursor/scope.d.ts +6 -3
  23. package/dist/charts/cursor/scope.d.ts.map +1 -1
  24. package/dist/charts/cursor/store.d.ts +5 -1
  25. package/dist/charts/cursor/store.d.ts.map +1 -1
  26. package/dist/charts/cursor/store.js +4 -4
  27. package/dist/charts/hooks/useChartCursor.d.ts.map +1 -1
  28. package/dist/charts/hooks/useChartCursor.js +9 -8
  29. package/dist/charts/index.d.ts +2 -2
  30. package/dist/charts/index.d.ts.map +1 -1
  31. package/dist/charts/primitives/ChartCard.d.ts +34 -9
  32. package/dist/charts/primitives/ChartCard.d.ts.map +1 -1
  33. package/dist/charts/primitives/ChartCard.js +29 -114
  34. package/dist/charts/primitives/ChartCard.test.d.ts +2 -0
  35. package/dist/charts/primitives/ChartCard.test.d.ts.map +1 -0
  36. package/dist/charts/sparklines/BarSparkline.d.ts +26 -2
  37. package/dist/charts/sparklines/BarSparkline.d.ts.map +1 -1
  38. package/dist/charts/sparklines/BarSparkline.js +18 -4
  39. package/dist/cli/check-coverage.test.d.ts +2 -0
  40. package/dist/cli/check-coverage.test.d.ts.map +1 -0
  41. package/dist/cli/index.d.ts +67 -4
  42. package/dist/cli/index.d.ts.map +1 -1
  43. package/dist/cli/index.js +225 -7
  44. package/dist/connectivity/connectivity-indicator.d.ts +4 -1
  45. package/dist/connectivity/connectivity-indicator.d.ts.map +1 -1
  46. package/dist/connectivity/connectivity-indicator.js +1 -1
  47. package/dist/content/index.d.ts +5 -3
  48. package/dist/content/index.d.ts.map +1 -1
  49. package/dist/content/index.js +4 -2
  50. package/dist/content/prose.module.css +7 -28
  51. package/dist/controls/actions.d.ts +169 -0
  52. package/dist/controls/actions.d.ts.map +1 -0
  53. package/dist/controls/actions.js +287 -0
  54. package/dist/controls/actions.module.css +62 -0
  55. package/dist/controls/actions.module.css.d.ts +13 -0
  56. package/dist/controls/actions.test.d.ts +2 -0
  57. package/dist/controls/actions.test.d.ts.map +1 -0
  58. package/dist/controls/actions.type-guard.test.d.ts +2 -0
  59. package/dist/controls/actions.type-guard.test.d.ts.map +1 -0
  60. package/dist/controls/compare-filter.d.ts +41 -0
  61. package/dist/controls/compare-filter.d.ts.map +1 -0
  62. package/dist/controls/compare-filter.js +23 -0
  63. package/dist/controls/control-group.d.ts +19 -0
  64. package/dist/controls/control-group.d.ts.map +1 -0
  65. package/dist/controls/control-group.js +20 -0
  66. package/dist/controls/control-group.test.d.ts +2 -0
  67. package/dist/controls/control-group.test.d.ts.map +1 -0
  68. package/dist/controls/controls.module.css +542 -0
  69. package/dist/controls/controls.module.css.d.ts +35 -0
  70. package/dist/controls/controls.router.test.d.ts +2 -0
  71. package/dist/controls/controls.router.test.d.ts.map +1 -0
  72. package/dist/controls/enum-filter.d.ts +39 -0
  73. package/dist/controls/enum-filter.d.ts.map +1 -0
  74. package/dist/controls/enum-filter.js +93 -0
  75. package/dist/controls/filter-context.d.ts +60 -0
  76. package/dist/controls/filter-context.d.ts.map +1 -0
  77. package/dist/controls/filter-context.js +69 -0
  78. package/dist/controls/filter-pill.d.ts +28 -0
  79. package/dist/controls/filter-pill.d.ts.map +1 -0
  80. package/dist/controls/filter-pill.js +70 -0
  81. package/dist/controls/filter-set.d.ts +13 -0
  82. package/dist/controls/filter-set.d.ts.map +1 -0
  83. package/dist/controls/filter-set.js +125 -0
  84. package/dist/controls/filter-set.test.d.ts +2 -0
  85. package/dist/controls/filter-set.test.d.ts.map +1 -0
  86. package/dist/controls/filter-sheet.d.ts +117 -0
  87. package/dist/controls/filter-sheet.d.ts.map +1 -0
  88. package/dist/controls/filter-sheet.js +146 -0
  89. package/dist/controls/glyphs.d.ts +27 -0
  90. package/dist/controls/glyphs.d.ts.map +1 -0
  91. package/dist/controls/glyphs.js +49 -0
  92. package/dist/controls/index.d.ts +20 -0
  93. package/dist/controls/index.d.ts.map +1 -0
  94. package/dist/controls/index.js +46 -0
  95. package/dist/controls/multi-select-filter.d.ts +23 -0
  96. package/dist/controls/multi-select-filter.d.ts.map +1 -0
  97. package/dist/controls/multi-select-filter.js +89 -0
  98. package/dist/controls/number-filter.d.ts +26 -0
  99. package/dist/controls/number-filter.d.ts.map +1 -0
  100. package/dist/controls/number-filter.js +143 -0
  101. package/dist/controls/peer-boundary.test.d.ts +2 -0
  102. package/dist/controls/peer-boundary.test.d.ts.map +1 -0
  103. package/dist/controls/props-contract.test.d.ts +2 -0
  104. package/dist/controls/props-contract.test.d.ts.map +1 -0
  105. package/dist/controls/range-filter.d.ts +43 -0
  106. package/dist/controls/range-filter.d.ts.map +1 -0
  107. package/dist/controls/range-filter.js +135 -0
  108. package/dist/controls/range-filter.type-guard.test.d.ts +2 -0
  109. package/dist/controls/range-filter.type-guard.test.d.ts.map +1 -0
  110. package/dist/controls/search-filter.d.ts +10 -0
  111. package/dist/controls/search-filter.d.ts.map +1 -0
  112. package/dist/controls/search-filter.js +81 -0
  113. package/dist/controls/select-filter.d.ts +74 -0
  114. package/dist/controls/select-filter.d.ts.map +1 -0
  115. package/dist/controls/select-filter.js +10 -0
  116. package/dist/controls/sync-button.d.ts +38 -0
  117. package/dist/controls/sync-button.d.ts.map +1 -0
  118. package/dist/controls/sync-button.js +119 -0
  119. package/dist/controls/sync-button.module.css +63 -0
  120. package/dist/controls/sync-button.module.css.d.ts +11 -0
  121. package/dist/controls/sync-button.test.d.ts +2 -0
  122. package/dist/controls/sync-button.test.d.ts.map +1 -0
  123. package/dist/controls/toggle-filter.d.ts +9 -0
  124. package/dist/controls/toggle-filter.d.ts.map +1 -0
  125. package/dist/controls/toggle-filter.js +42 -0
  126. package/dist/controls/view-tabs.d.ts +23 -0
  127. package/dist/controls/view-tabs.d.ts.map +1 -0
  128. package/dist/controls/view-tabs.js +59 -0
  129. package/dist/controls-dates/date-range-picker.d.ts +4 -0
  130. package/dist/controls-dates/date-range-picker.d.ts.map +1 -0
  131. package/dist/controls-dates/date-range-picker.js +18 -0
  132. package/dist/controls-dates/index.d.ts +9 -0
  133. package/dist/controls-dates/index.d.ts.map +1 -0
  134. package/dist/controls-dates/index.js +4 -0
  135. package/dist/dashboard/delta-badge.d.ts +6 -12
  136. package/dist/dashboard/delta-badge.d.ts.map +1 -1
  137. package/dist/dashboard/delta-badge.js +1 -50
  138. package/dist/dashboard/index.d.ts +1 -1
  139. package/dist/dashboard/index.d.ts.map +1 -1
  140. package/dist/dashboard/index.js +3 -1
  141. package/dist/dashboard/settings-section.d.ts +6 -4
  142. package/dist/dashboard/settings-section.d.ts.map +1 -1
  143. package/dist/dashboard/settings-section.js +23 -16
  144. package/dist/dashboard/settings-section.module.css +10 -0
  145. package/dist/dashboard/settings-section.module.css.d.ts +1 -0
  146. package/dist/dashboard/settings-section.test.d.ts +2 -0
  147. package/dist/dashboard/settings-section.test.d.ts.map +1 -0
  148. package/dist/dashboard/stat-card.d.ts +95 -9
  149. package/dist/dashboard/stat-card.d.ts.map +1 -1
  150. package/dist/dashboard/stat-card.js +108 -49
  151. package/dist/dashboard/stat-card.module.css +153 -0
  152. package/dist/dashboard/stat-card.module.css.d.ts +15 -0
  153. package/dist/data/data-table.d.ts +37 -15
  154. package/dist/data/data-table.d.ts.map +1 -1
  155. package/dist/data/data-table.js +96 -58
  156. package/dist/guard/grace.test.d.ts +20 -0
  157. package/dist/guard/grace.test.d.ts.map +1 -0
  158. package/dist/guard/index.d.ts +66 -3
  159. package/dist/guard/index.d.ts.map +1 -1
  160. package/dist/guard/index.js +78 -7
  161. package/dist/guard/types.d.ts +3 -3
  162. package/dist/guard/types.d.ts.map +1 -1
  163. package/dist/index.d.ts +13 -3
  164. package/dist/index.d.ts.map +1 -1
  165. package/dist/index.js +13 -10
  166. package/dist/nav/types.d.ts +78 -2
  167. package/dist/nav/types.d.ts.map +1 -1
  168. package/dist/notifications/bell.d.ts +4 -1
  169. package/dist/notifications/bell.d.ts.map +1 -1
  170. package/dist/notifications/index.d.ts +1 -1
  171. package/dist/router-tanstack/field.d.ts +14 -0
  172. package/dist/router-tanstack/field.d.ts.map +1 -0
  173. package/dist/router-tanstack/field.js +4 -0
  174. package/dist/router-tanstack/index.d.ts +6 -2
  175. package/dist/router-tanstack/index.d.ts.map +1 -1
  176. package/dist/router-tanstack/index.js +4 -0
  177. package/dist/router-tanstack/multi-search-param-store.d.ts +4 -52
  178. package/dist/router-tanstack/multi-search-param-store.d.ts.map +1 -1
  179. package/dist/router-tanstack/multi-search-param-store.js +19 -27
  180. package/dist/router-tanstack/search-param-store.d.ts +3 -87
  181. package/dist/router-tanstack/search-param-store.d.ts.map +1 -1
  182. package/dist/router-tanstack/search-param-store.js +16 -45
  183. package/dist/router-tanstack/search-store.d.ts +84 -0
  184. package/dist/router-tanstack/search-store.d.ts.map +1 -0
  185. package/dist/router-tanstack/search-store.js +271 -0
  186. package/dist/router-tanstack/search-store.router.test.d.ts +2 -0
  187. package/dist/router-tanstack/search-store.router.test.d.ts.map +1 -0
  188. package/dist/router-tanstack/search-store.test.d.ts +2 -0
  189. package/dist/router-tanstack/search-store.test.d.ts.map +1 -0
  190. package/dist/router-tanstack/use-nav.d.ts +0 -2
  191. package/dist/router-tanstack/use-nav.d.ts.map +1 -1
  192. package/dist/router-tanstack/use-nav.js +34 -12
  193. package/dist/router-tanstack/use-nav.test.d.ts +2 -0
  194. package/dist/router-tanstack/use-nav.test.d.ts.map +1 -0
  195. package/dist/section/index.d.ts +2 -0
  196. package/dist/section/index.d.ts.map +1 -0
  197. package/dist/section/index.js +4 -0
  198. package/dist/section/section.d.ts +24 -0
  199. package/dist/section/section.d.ts.map +1 -0
  200. package/dist/section/section.js +126 -0
  201. package/dist/section/section.module.css +104 -0
  202. package/dist/section/section.module.css.d.ts +11 -0
  203. package/dist/section/section.test.d.ts +2 -0
  204. package/dist/section/section.test.d.ts.map +1 -0
  205. package/dist/shell/app-breadcrumbs.d.ts.map +1 -1
  206. package/dist/shell/app-breadcrumbs.js +18 -15
  207. package/dist/shell/app-header.module.css +77 -37
  208. package/dist/shell/app-header.module.css.d.ts +2 -1
  209. package/dist/shell/app-mobile-nav.d.ts +9 -2
  210. package/dist/shell/app-mobile-nav.d.ts.map +1 -1
  211. package/dist/shell/app-mobile-nav.js +98 -11
  212. package/dist/shell/app-mobile-nav.module.css +8 -0
  213. package/dist/shell/app-mobile-nav.module.css.d.ts +1 -0
  214. package/dist/shell/app-sidebar.d.ts +55 -28
  215. package/dist/shell/app-sidebar.d.ts.map +1 -1
  216. package/dist/shell/app-sidebar.js +116 -67
  217. package/dist/shell/app-sidebar.module.css +303 -20
  218. package/dist/shell/app-sidebar.module.css.d.ts +19 -1
  219. package/dist/shell/index.d.ts +55 -21
  220. package/dist/shell/index.d.ts.map +1 -1
  221. package/dist/shell/index.js +40 -18
  222. package/dist/shell/mobile-nav-model.d.ts +13 -2
  223. package/dist/shell/mobile-nav-model.d.ts.map +1 -1
  224. package/dist/shell/mobile-nav-model.js +15 -1
  225. package/dist/shell/nav-count-badge.d.ts +1 -1
  226. package/dist/shell/page-bar.d.ts +51 -0
  227. package/dist/shell/page-bar.d.ts.map +1 -0
  228. package/dist/shell/page-bar.js +154 -0
  229. package/dist/shell/page-bar.module.css +178 -0
  230. package/dist/shell/page-bar.module.css.d.ts +17 -0
  231. package/dist/shell/page-bar.test.d.ts +2 -0
  232. package/dist/shell/page-bar.test.d.ts.map +1 -0
  233. package/dist/shell/sidebar-block-model.d.ts +48 -0
  234. package/dist/shell/sidebar-block-model.d.ts.map +1 -0
  235. package/dist/shell/sidebar-block-model.js +39 -0
  236. package/dist/shell/sidebar-blocks.d.ts +32 -0
  237. package/dist/shell/sidebar-blocks.d.ts.map +1 -0
  238. package/dist/shell/sidebar-blocks.js +169 -0
  239. package/dist/shell/sidebar-search.d.ts +13 -1
  240. package/dist/shell/sidebar-search.d.ts.map +1 -1
  241. package/dist/shell/sidebar-search.js +34 -1
  242. package/dist/shell/sidebar-search.module.css +26 -0
  243. package/dist/shell/sidebar-search.module.css.d.ts +2 -0
  244. package/dist/state/fields.d.ts +565 -0
  245. package/dist/state/fields.d.ts.map +1 -0
  246. package/dist/state/fields.js +405 -0
  247. package/dist/state/fields.test.d.ts +2 -0
  248. package/dist/state/fields.test.d.ts.map +1 -0
  249. package/dist/state/persisted.d.ts +60 -0
  250. package/dist/state/persisted.d.ts.map +1 -0
  251. package/dist/state/persisted.js +123 -0
  252. package/dist/state/persisted.test.d.ts +2 -0
  253. package/dist/state/persisted.test.d.ts.map +1 -0
  254. package/dist/state.d.ts +11 -56
  255. package/dist/state.d.ts.map +1 -1
  256. package/dist/state.js +14 -120
  257. package/dist/styles.css +13 -0
  258. package/dist/surfaces.d.ts +106 -24
  259. package/dist/surfaces.d.ts.map +1 -1
  260. package/dist/surfaces.js +156 -19
  261. package/dist/theme/controls.module.css +16 -1
  262. package/dist/theme/ctl-theme.d.ts +32 -0
  263. package/dist/theme/ctl-theme.d.ts.map +1 -0
  264. package/dist/theme/ctl-theme.js +54 -0
  265. package/dist/theme/ctl-theme.test.d.ts +2 -0
  266. package/dist/theme/ctl-theme.test.d.ts.map +1 -0
  267. package/dist/theme/ctl-tier-coverage.test.d.ts +2 -0
  268. package/dist/theme/ctl-tier-coverage.test.d.ts.map +1 -0
  269. package/dist/theme/divider-law.test.d.ts +2 -0
  270. package/dist/theme/divider-law.test.d.ts.map +1 -0
  271. package/dist/theme/icon-slot.d.ts +44 -0
  272. package/dist/theme/icon-slot.d.ts.map +1 -0
  273. package/dist/theme/icon-slot.js +21 -0
  274. package/dist/theme/icon-slot.module.css +47 -0
  275. package/dist/theme/icon-slot.module.css.d.ts +8 -0
  276. package/dist/theme/icon-slot.test.d.ts +2 -0
  277. package/dist/theme/icon-slot.test.d.ts.map +1 -0
  278. package/dist/theme/index.d.ts +1 -0
  279. package/dist/theme/index.d.ts.map +1 -1
  280. package/dist/theme/index.js +82 -5
  281. package/dist/theme/layout-rhythm-css.test.d.ts +2 -0
  282. package/dist/theme/layout-rhythm-css.test.d.ts.map +1 -0
  283. package/dist/theme/segmented-control.module.css +20 -0
  284. package/dist/theme/shadow-surfaces.test.d.ts.map +1 -1
  285. package/dist/tokens/index.d.ts +12 -0
  286. package/dist/tokens/index.d.ts.map +1 -1
  287. package/dist/tokens/index.js +38 -8
  288. package/dist/tokens/palette.d.ts +97 -61
  289. package/dist/tokens/palette.d.ts.map +1 -1
  290. package/dist/tokens/palette.js +76 -38
  291. package/dist/tokens.css +10 -2
  292. package/dist/widget-header/delta-badge.d.ts +13 -0
  293. package/dist/widget-header/delta-badge.d.ts.map +1 -0
  294. package/dist/widget-header/delta-badge.js +29 -0
  295. package/dist/widget-header/delta-badge.test.d.ts +2 -0
  296. package/dist/widget-header/delta-badge.test.d.ts.map +1 -0
  297. package/dist/widget-header/index.d.ts +3 -0
  298. package/dist/widget-header/index.d.ts.map +1 -0
  299. package/dist/widget-header/index.js +6 -0
  300. package/dist/widget-header/no-mantine.test.d.ts +2 -0
  301. package/dist/widget-header/no-mantine.test.d.ts.map +1 -0
  302. package/dist/widget-header/widget-header.d.ts +67 -0
  303. package/dist/widget-header/widget-header.d.ts.map +1 -0
  304. package/dist/widget-header/widget-header.js +89 -0
  305. package/dist/widget-header/widget-header.module.css +350 -0
  306. package/dist/widget-header/widget-header.module.css.d.ts +25 -0
  307. package/dist/widget-header/widget-header.test.d.ts +2 -0
  308. package/dist/widget-header/widget-header.test.d.ts.map +1 -0
  309. package/llms.txt +30 -17
  310. package/package.json +14 -1
  311. package/src/charts/cursor/resolve.test.ts +29 -1
  312. package/src/charts/cursor/resolve.ts +38 -6
  313. package/src/charts/cursor/scope.tsx +6 -3
  314. package/src/charts/cursor/store.test.ts +19 -1
  315. package/src/charts/cursor/store.ts +10 -5
  316. package/src/charts/hooks/useChartCursor.ts +16 -8
  317. package/src/charts/index.ts +2 -2
  318. package/src/charts/primitives/CartesianChart.test.tsx +124 -0
  319. package/src/charts/primitives/ChartCard.test.tsx +66 -0
  320. package/src/charts/primitives/ChartCard.tsx +86 -146
  321. package/src/charts/sparklines/BarSparkline.tsx +43 -5
  322. package/src/cli/check-coverage.test.ts +297 -0
  323. package/src/cli/check-theme.test.ts +38 -14
  324. package/src/cli/index.ts +392 -16
  325. package/src/cli/init-sync.test.ts +97 -0
  326. package/src/connectivity/connectivity-indicator.tsx +16 -9
  327. package/src/content/index.ts +16 -3
  328. package/src/content/prose.module.css +7 -28
  329. package/src/content/prose.module.css.test.ts +8 -24
  330. package/src/controls/actions.module.css +62 -0
  331. package/src/controls/actions.module.css.d.ts +13 -0
  332. package/src/controls/actions.test.tsx +252 -0
  333. package/src/controls/actions.tsx +655 -0
  334. package/src/controls/actions.type-guard.test.ts +63 -0
  335. package/src/controls/compare-filter.tsx +64 -0
  336. package/src/controls/control-group.test.tsx +229 -0
  337. package/src/controls/control-group.tsx +63 -0
  338. package/src/controls/controls.module.css +542 -0
  339. package/src/controls/controls.module.css.d.ts +35 -0
  340. package/src/controls/controls.router.test.tsx +1053 -0
  341. package/src/controls/enum-filter.tsx +170 -0
  342. package/src/controls/filter-context.tsx +158 -0
  343. package/src/controls/filter-pill.tsx +120 -0
  344. package/src/controls/filter-set.test.tsx +472 -0
  345. package/src/controls/filter-set.tsx +225 -0
  346. package/src/controls/filter-sheet.tsx +285 -0
  347. package/src/controls/glyphs.tsx +81 -0
  348. package/src/controls/index.ts +49 -0
  349. package/src/controls/multi-select-filter.tsx +140 -0
  350. package/src/controls/number-filter.tsx +291 -0
  351. package/src/controls/peer-boundary.test.ts +85 -0
  352. package/src/controls/props-contract.test.tsx +137 -0
  353. package/src/controls/range-filter.tsx +237 -0
  354. package/src/controls/range-filter.type-guard.test.tsx +122 -0
  355. package/src/controls/search-filter.tsx +123 -0
  356. package/src/controls/select-filter.tsx +89 -0
  357. package/src/controls/sync-button.module.css +63 -0
  358. package/src/controls/sync-button.module.css.d.ts +11 -0
  359. package/src/controls/sync-button.test.tsx +183 -0
  360. package/src/controls/sync-button.tsx +197 -0
  361. package/src/controls/toggle-filter.tsx +60 -0
  362. package/src/controls/view-tabs.tsx +110 -0
  363. package/src/controls-dates/date-range-picker.tsx +42 -0
  364. package/src/controls-dates/index.ts +8 -0
  365. package/src/dashboard/delta-badge.tsx +4 -74
  366. package/src/dashboard/index.ts +6 -1
  367. package/src/dashboard/settings-section.module.css +10 -0
  368. package/src/dashboard/settings-section.module.css.d.ts +1 -0
  369. package/src/dashboard/settings-section.test.tsx +56 -0
  370. package/src/dashboard/settings-section.tsx +33 -30
  371. package/src/dashboard/stat-card.module.css +153 -0
  372. package/src/dashboard/stat-card.module.css.d.ts +15 -0
  373. package/src/dashboard/stat-card.test.tsx +298 -1
  374. package/src/dashboard/stat-card.tsx +289 -67
  375. package/src/data/data-table.test.tsx +96 -11
  376. package/src/data/data-table.tsx +228 -84
  377. package/src/guard/check-source.test.ts +159 -13
  378. package/src/guard/grace.test.ts +158 -0
  379. package/src/guard/index.ts +185 -29
  380. package/src/guard/types.ts +4 -2
  381. package/src/index.ts +51 -5
  382. package/src/nav/types.ts +84 -2
  383. package/src/notifications/bell.tsx +6 -3
  384. package/src/notifications/index.ts +1 -1
  385. package/src/router-tanstack/field.ts +35 -0
  386. package/src/router-tanstack/index.ts +28 -2
  387. package/src/router-tanstack/multi-search-param-store.test.ts +71 -3
  388. package/src/router-tanstack/multi-search-param-store.ts +46 -77
  389. package/src/router-tanstack/search-param-store.ts +42 -159
  390. package/src/router-tanstack/search-store.router.test.tsx +882 -0
  391. package/src/router-tanstack/search-store.test.ts +578 -0
  392. package/src/router-tanstack/search-store.ts +546 -0
  393. package/src/router-tanstack/use-nav.test.tsx +187 -0
  394. package/src/router-tanstack/use-nav.ts +72 -14
  395. package/src/section/index.ts +1 -0
  396. package/src/section/section.module.css +104 -0
  397. package/src/section/section.module.css.d.ts +11 -0
  398. package/src/section/section.test.tsx +204 -0
  399. package/src/section/section.tsx +220 -0
  400. package/src/shell/app-breadcrumbs.tsx +44 -31
  401. package/src/shell/app-header.module.css +77 -37
  402. package/src/shell/app-header.module.css.d.ts +2 -1
  403. package/src/shell/app-mobile-nav.module.css +8 -0
  404. package/src/shell/app-mobile-nav.module.css.d.ts +1 -0
  405. package/src/shell/app-mobile-nav.tsx +147 -8
  406. package/src/shell/app-sidebar-account.tsx +2 -2
  407. package/src/shell/app-sidebar.module.css +303 -20
  408. package/src/shell/app-sidebar.module.css.d.ts +19 -1
  409. package/src/shell/app-sidebar.test.tsx +456 -41
  410. package/src/shell/app-sidebar.tsx +276 -140
  411. package/src/shell/index.test.tsx +291 -5
  412. package/src/shell/index.tsx +137 -38
  413. package/src/shell/mobile-nav-model.test.ts +228 -7
  414. package/src/shell/mobile-nav-model.ts +53 -3
  415. package/src/shell/nav-count-badge.tsx +1 -1
  416. package/src/shell/page-bar.module.css +178 -0
  417. package/src/shell/page-bar.module.css.d.ts +17 -0
  418. package/src/shell/page-bar.test.tsx +316 -0
  419. package/src/shell/page-bar.tsx +315 -0
  420. package/src/shell/sidebar-block-model.ts +83 -0
  421. package/src/shell/sidebar-blocks.tsx +301 -0
  422. package/src/shell/sidebar-search.module.css +26 -0
  423. package/src/shell/sidebar-search.module.css.d.ts +2 -0
  424. package/src/shell/sidebar-search.tsx +71 -2
  425. package/src/state/fields.test.tsx +512 -0
  426. package/src/state/fields.ts +1150 -0
  427. package/src/state/persisted.test.ts +91 -0
  428. package/src/state/persisted.ts +261 -0
  429. package/src/state.ts +52 -240
  430. package/src/styles.css +13 -0
  431. package/src/surfaces.ts +204 -36
  432. package/src/theme/controls.module.css +16 -1
  433. package/src/theme/ctl-theme.test.tsx +275 -0
  434. package/src/theme/ctl-theme.tsx +138 -0
  435. package/src/theme/ctl-tier-coverage.test.ts +170 -0
  436. package/src/theme/density-relations.test.ts +106 -51
  437. package/src/theme/divider-law.test.ts +259 -0
  438. package/src/theme/icon-slot.module.css +47 -0
  439. package/src/theme/icon-slot.module.css.d.ts +8 -0
  440. package/src/theme/icon-slot.test.tsx +275 -0
  441. package/src/theme/icon-slot.tsx +59 -0
  442. package/src/theme/index.ts +165 -3
  443. package/src/theme/layout-rhythm-css.test.ts +72 -0
  444. package/src/theme/radius.test.ts +11 -1
  445. package/src/theme/segmented-control.module.css +20 -0
  446. package/src/theme/shadow-surfaces.test.ts +20 -7
  447. package/src/theme/spacing.test.ts +75 -27
  448. package/src/theme/use-basalt-spacing.ts +2 -2
  449. package/src/tokens/density.test.ts +7 -25
  450. package/src/tokens/index.ts +48 -8
  451. package/src/tokens/palette.ts +107 -73
  452. package/src/widget-header/delta-badge.test.tsx +60 -0
  453. package/src/widget-header/delta-badge.tsx +57 -0
  454. package/src/widget-header/index.ts +2 -0
  455. package/src/widget-header/no-mantine.test.ts +33 -0
  456. package/src/widget-header/widget-header.module.css +350 -0
  457. package/src/widget-header/widget-header.module.css.d.ts +25 -0
  458. package/src/widget-header/widget-header.test.tsx +187 -0
  459. package/src/widget-header/widget-header.tsx +213 -0
  460. package/agent/rules/basalt-agent.md +0 -452
  461. package/agent/rules/basalt-app.md +0 -246
  462. package/agent/rules/basalt-commands.md +0 -320
  463. package/agent/rules/basalt-content.md +0 -409
  464. package/agent/rules/basalt-data.md +0 -329
  465. package/agent/rules/basalt-forms.md +0 -186
  466. package/agent/rules/basalt-notifications.md +0 -264
  467. package/agent/rules/basalt-query.md +0 -187
  468. package/agent/rules/basalt-router.md +0 -336
  469. package/dist/content/article-filter-bar.d.ts +0 -40
  470. package/dist/content/article-filter-bar.d.ts.map +0 -1
  471. package/dist/content/article-filter-bar.js +0 -56
  472. package/dist/shell/page-header.d.ts +0 -13
  473. package/dist/shell/page-header.d.ts.map +0 -1
  474. package/dist/shell/page-header.js +0 -23
  475. package/src/content/article-filter-bar.tsx +0 -88
  476. package/src/shell/page-header.tsx +0 -35
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=layout-rhythm-css.test.d.ts.map
@@ -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,EAmLxD,CAAA"}
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"}
@@ -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":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tokens/index.ts"],"names":[],"mappings":"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"}
@@ -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
- // Responsive pair (Decision 3) — `stickyHeaderClearance` is the desktop (`>= sm`) value,
282
- // `stickyHeaderClearanceMobile` the mobile (`< sm`) override; a consumer CSS module picks
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
- // `appShellHeaderMobileHeight`/`appShellNavbarWidth`/`appShellNavbarRailWidth` join that list —
386
- // `shell/index.tsx` reads all four as JS numbers via `useBasaltSpacing()` (Mantine's `AppShell`
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`/
@@ -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 mobile (two-row) header height. Not one concept but a sum: row 1 + `app-header.
474
- * module.css`'s wrap row-gap (`--mantine-spacing-sm`) + `appHeaderMobileActionsHeight`. Two of
475
- * those three addends already track density, so the container must too — held fixed, row 1's
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
- * KEEP THIS EQUAL TO THE SUM. At level 0: 32 (row 1) + 13 (`SPACE_SCALE.sm`) + 52
479
- * (`appHeaderMobileActionsHeight`) = 97. It was 96 while `SPACE_SCALE.sm` was 12; the
480
- * component-roominess retune raised that addend, and leaving the total at 96 silently took the
481
- * pixel out of row 1 instead — which is what ate the last of its WCAG 2.5.8 target-size margin at
482
- * density -3 (`theme/density-relations.test.ts` measures row 1 as the REMAINDER of this sum, so
483
- * the total is the only place the budget can come from). Raise this whenever `SPACE_SCALE.sm` or
484
- * `appHeaderMobileActionsHeight` moves. Better still, make it unnecessary: computing this the way
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`/`stickyHeaderClearanceMobile`, NEITHER
605
- * of which is in that base table — both are computed after the rest of `step`, one from
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 them exactly like any other one-off — only their DERIVATION
609
- * differs. Two keys, not one, because the clearance is RESPONSIVE (Decision 3): a consumer picks
610
- * whichever one matches the breakpoint it's rendering at — see `docs/CONTENT-SPEC.md` §5 and
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`/`step.stickyHeaderClearanceMobile` — see the third bullet below for
652
- * why those are a deliberate exception.
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` (desktop) and `step.stickyHeaderClearanceMobile` (mobile) are not
678
- * scaled off their own base AT ALL — `SPACE_STEP_BASE` has no such key any more (see that table's
679
- * doc). Both are computed AFTER the rest of `step`, RESPONSIVELY, one per AppShell breakpoint:
680
- * `stickyHeaderClearance = step.appShellHeaderHeight + anchors.stackMd` (desktop, `>= sm`) and
681
- * `stickyHeaderClearanceMobile = step.appShellHeaderMobileHeight + anchors.stackMd` (mobile,
682
- * `< sm` — the SAME `sm`/48em breakpoint the AppShell header itself switches on, `shell/index.tsx`).
683
- * A SINGLE clearance value (this law's own prior shape) can only be tuned against ONE header, and
684
- * whichever one it under-shoots stays broken: the original independent literal (84) was tuned only
685
- * against the desktop header (48) and under-cleared the mobile header (96) by 12px at level 0
686
- * already, before density entered the picture; deriving ONE value off the taller mobile header
687
- * fixed that under-clear but then OVER-cleared the desktop header by 60px (108 vs. the 48px header
688
- * needs) — dead space above every anchored heading and a TOC rail shoved down on the common
689
- * (desktop) path. Splitting into two responsive values fixes both directions at once: each clears
690
- * ONLY its own header, with the SAME `anchors.stackMd` breathing room (not a bare `+ 0`) so a
691
- * scrolled-to heading doesn't sit flush against the header's bottom edge — density-tracking, like
692
- * the header height it's added to, so the margin itself never freezes at one notch. Level 0:
693
- * desktop `48 + 12 = 60` (a deliberate BREAK from the pre-split 84/108 — see `theme/spacing.test.ts`
694
- * for why `stickyHeaderClearance` alone is exempt from the byte-identity gate every other spacing
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 the desktop half of the
802
- * Decision-3 responsive split at 60) and its new `stickyHeaderClearanceMobile` sibling (108) — the
803
- * deliberate level-0 breaks in the density work; see `deriveSpacing`'s doc (third bullet) for why. */
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":"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"}
1
+ {"version":3,"file":"palette.d.ts","sourceRoot":"","sources":["../../src/tokens/palette.ts"],"names":[],"mappings":"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"}