basalt-ui 1.27.0 → 1.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1063) hide show
  1. package/AGENTS.md +23 -23
  2. package/CHANGELOG.md +59 -0
  3. package/MIGRATING.md +613 -20
  4. package/README.md +33 -3
  5. package/agent/rules/basalt-batteries.md +25 -10
  6. package/agent/rules/basalt-controls.md +56 -31
  7. package/agent/rules/basalt-mantine.md +17 -6
  8. package/agent/rules/basalt-tokens.md +1 -1
  9. package/configs/oxlint-plugin.js +1056 -28
  10. package/configs/oxlint-plugin.test.ts +1066 -0
  11. package/configs/oxlint.json +7 -0
  12. package/dist/agent/coalesce.d.ts.map +1 -1
  13. package/dist/agent/coalesce.js +2 -1
  14. package/dist/agent/merge.d.ts.map +1 -1
  15. package/dist/agent/merge.js +2 -1
  16. package/dist/agent/part-list.d.ts.map +1 -1
  17. package/dist/agent/part-list.js +2 -0
  18. package/dist/agent/stick-to-bottom.d.ts +3 -6
  19. package/dist/agent/stick-to-bottom.d.ts.map +1 -1
  20. package/dist/agent/stick-to-bottom.js +6 -3
  21. package/dist/agent-chat/composer.d.ts +6 -2
  22. package/dist/agent-chat/composer.d.ts.map +1 -1
  23. package/dist/agent-chat/composer.js +49 -33
  24. package/dist/agent-chat/relative-time.d.ts +0 -9
  25. package/dist/agent-chat/relative-time.d.ts.map +1 -1
  26. package/dist/agent-chat/relative-time.js +2 -1
  27. package/dist/agent-chat/thread-detail-panel.d.ts +3 -2
  28. package/dist/agent-chat/thread-detail-panel.d.ts.map +1 -1
  29. package/dist/agent-chat/thread-detail-panel.js +8 -5
  30. package/dist/agent-chat/thread-feed-row.d.ts +2 -1
  31. package/dist/agent-chat/thread-feed-row.d.ts.map +1 -1
  32. package/dist/agent-chat/thread-feed-row.js +92 -92
  33. package/dist/agent-chat/thread-feed.d.ts +3 -2
  34. package/dist/agent-chat/thread-feed.d.ts.map +1 -1
  35. package/dist/agent-chat/thread-feed.js +8 -3
  36. package/dist/agent-chat/thread-message.d.ts +4 -3
  37. package/dist/agent-chat/thread-message.d.ts.map +1 -1
  38. package/dist/agent-chat/thread-message.js +70 -31
  39. package/dist/agent-chat/thread-outcome-card.d.ts +3 -2
  40. package/dist/agent-chat/thread-outcome-card.d.ts.map +1 -1
  41. package/dist/agent-chat/thread-outcome-card.js +9 -2
  42. package/dist/agent-chat/thread-workspace.d.ts +7 -2
  43. package/dist/agent-chat/thread-workspace.d.ts.map +1 -1
  44. package/dist/agent-chat/thread-workspace.js +62 -29
  45. package/dist/agent-chat/tool-chip.d.ts +3 -2
  46. package/dist/agent-chat/tool-chip.d.ts.map +1 -1
  47. package/dist/agent-chat/tool-chip.js +7 -2
  48. package/dist/charts/hooks/useBandPlot.d.ts.map +1 -1
  49. package/dist/charts/hooks/useBandPlot.js +15 -8
  50. package/dist/charts/index.d.ts +8 -7
  51. package/dist/charts/index.d.ts.map +1 -1
  52. package/dist/charts/index.js +45 -5
  53. package/dist/charts/kinds/BandStrip.d.ts +10 -7
  54. package/dist/charts/kinds/BandStrip.d.ts.map +1 -1
  55. package/dist/charts/kinds/BandStrip.js +12 -7
  56. package/dist/charts/kinds/Bars.d.ts +12 -6
  57. package/dist/charts/kinds/Bars.d.ts.map +1 -1
  58. package/dist/charts/kinds/Bars.js +37 -11
  59. package/dist/charts/kinds/Donut.d.ts +6 -5
  60. package/dist/charts/kinds/Donut.d.ts.map +1 -1
  61. package/dist/charts/kinds/Donut.js +19 -2
  62. package/dist/charts/kinds/DualPanel.d.ts +6 -5
  63. package/dist/charts/kinds/DualPanel.d.ts.map +1 -1
  64. package/dist/charts/kinds/DualPanel.js +36 -8
  65. package/dist/charts/kinds/Heatmap.d.ts +10 -6
  66. package/dist/charts/kinds/Heatmap.d.ts.map +1 -1
  67. package/dist/charts/kinds/Heatmap.js +58 -31
  68. package/dist/charts/kinds/MirroredBars.d.ts +6 -5
  69. package/dist/charts/kinds/MirroredBars.d.ts.map +1 -1
  70. package/dist/charts/kinds/MirroredBars.js +9 -2
  71. package/dist/charts/kinds/MultiLine.d.ts +11 -6
  72. package/dist/charts/kinds/MultiLine.d.ts.map +1 -1
  73. package/dist/charts/kinds/MultiLine.js +24 -15
  74. package/dist/charts/kinds/StackedArea.d.ts +18 -8
  75. package/dist/charts/kinds/StackedArea.d.ts.map +1 -1
  76. package/dist/charts/kinds/StackedArea.js +29 -4
  77. package/dist/charts/kinds/ZonedLine.d.ts +12 -8
  78. package/dist/charts/kinds/ZonedLine.d.ts.map +1 -1
  79. package/dist/charts/kinds/ZonedLine.js +33 -23
  80. package/dist/charts/layout/auto-margin.d.ts +65 -8
  81. package/dist/charts/layout/auto-margin.d.ts.map +1 -1
  82. package/dist/charts/layout/auto-margin.js +45 -10
  83. package/dist/charts/layout/log-ticks.d.ts +27 -0
  84. package/dist/charts/layout/log-ticks.d.ts.map +1 -0
  85. package/dist/charts/layout/log-ticks.js +42 -0
  86. package/dist/charts/primitives/Axes.d.ts +11 -2
  87. package/dist/charts/primitives/Axes.d.ts.map +1 -1
  88. package/dist/charts/primitives/Axes.js +15 -5
  89. package/dist/charts/primitives/CartesianChart.d.ts +45 -7
  90. package/dist/charts/primitives/CartesianChart.d.ts.map +1 -1
  91. package/dist/charts/primitives/CartesianChart.js +86 -28
  92. package/dist/charts/primitives/ChartCard.d.ts +27 -2
  93. package/dist/charts/primitives/ChartCard.d.ts.map +1 -1
  94. package/dist/charts/primitives/ChartCard.js +37 -17
  95. package/dist/charts/primitives/ChartFrame.d.ts +30 -4
  96. package/dist/charts/primitives/ChartFrame.d.ts.map +1 -1
  97. package/dist/charts/primitives/ChartFrame.js +45 -15
  98. package/dist/charts/primitives/ChartLegend.d.ts +13 -2
  99. package/dist/charts/primitives/ChartLegend.d.ts.map +1 -1
  100. package/dist/charts/primitives/ChartLegend.js +33 -13
  101. package/dist/charts/primitives/ChartPending.d.ts +77 -4
  102. package/dist/charts/primitives/ChartPending.d.ts.map +1 -1
  103. package/dist/charts/primitives/ChartPending.js +100 -6
  104. package/dist/charts/primitives/ChartTooltip.d.ts +7 -0
  105. package/dist/charts/primitives/ChartTooltip.d.ts.map +1 -1
  106. package/dist/charts/primitives/ChartTooltip.js +18 -5
  107. package/dist/charts/primitives/Crosshair.d.ts +3 -0
  108. package/dist/charts/primitives/Crosshair.d.ts.map +1 -1
  109. package/dist/charts/primitives/Crosshair.js +3 -1
  110. package/dist/charts/primitives/chart-frame-layout.d.ts +95 -0
  111. package/dist/charts/primitives/chart-frame-layout.d.ts.map +1 -0
  112. package/dist/charts/primitives/chart-frame-layout.js +89 -0
  113. package/dist/charts/primitives/chart-tier.d.ts +16 -0
  114. package/dist/charts/primitives/chart-tier.d.ts.map +1 -0
  115. package/dist/charts/primitives/chart-tier.js +20 -0
  116. package/dist/charts/series.d.ts +55 -1
  117. package/dist/charts/series.d.ts.map +1 -1
  118. package/dist/charts/series.js +27 -1
  119. package/dist/charts/sparklines/BarSparkline.d.ts +3 -3
  120. package/dist/charts/sparklines/BarSparkline.d.ts.map +1 -1
  121. package/dist/charts/sparklines/BarSparkline.js +9 -3
  122. package/dist/charts/sparklines/LineSparkline.d.ts +3 -3
  123. package/dist/charts/sparklines/LineSparkline.d.ts.map +1 -1
  124. package/dist/charts/sparklines/LineSparkline.js +15 -3
  125. package/dist/charts/sparklines/index.d.ts +2 -2
  126. package/dist/charts/sparklines/index.d.ts.map +1 -1
  127. package/dist/charts/utils/format.d.ts +92 -2
  128. package/dist/charts/utils/format.d.ts.map +1 -1
  129. package/dist/charts/utils/format.js +64 -1
  130. package/dist/charts/utils/ticks.d.ts +81 -2
  131. package/dist/charts/utils/ticks.d.ts.map +1 -1
  132. package/dist/charts/utils/ticks.js +54 -4
  133. package/dist/cli/index.d.ts.map +1 -1
  134. package/dist/cli/index.js +2 -2
  135. package/dist/commands/ShortcutsHelp.d.ts +3 -2
  136. package/dist/commands/ShortcutsHelp.d.ts.map +1 -1
  137. package/dist/commands/ShortcutsHelp.js +8 -2
  138. package/dist/commands/define-commands.d.ts.map +1 -1
  139. package/dist/commands/define-commands.js +2 -2
  140. package/dist/commands/define-overlays.d.ts +102 -0
  141. package/dist/commands/define-overlays.d.ts.map +1 -1
  142. package/dist/commands/define-overlays.js +102 -2
  143. package/dist/commands/index.d.ts +10 -1
  144. package/dist/commands/index.d.ts.map +1 -1
  145. package/dist/commands/index.js +3 -1
  146. package/dist/commands/overlays-mount.d.ts +13 -6
  147. package/dist/commands/overlays-mount.d.ts.map +1 -1
  148. package/dist/commands/overlays-mount.js +23 -14
  149. package/dist/common/errors.d.ts +34 -0
  150. package/dist/common/errors.d.ts.map +1 -0
  151. package/dist/common/errors.js +36 -0
  152. package/dist/common/index.d.ts +15 -0
  153. package/dist/common/index.d.ts.map +1 -0
  154. package/dist/common/index.js +29 -0
  155. package/dist/common/props.d.ts +63 -0
  156. package/dist/common/props.d.ts.map +1 -0
  157. package/dist/common/props.js +6 -0
  158. package/dist/common/query-state-like.d.ts +43 -0
  159. package/dist/common/query-state-like.d.ts.map +1 -0
  160. package/dist/common/query-state-like.js +20 -0
  161. package/dist/common/refs.d.ts +29 -0
  162. package/dist/common/refs.d.ts.map +1 -0
  163. package/dist/common/refs.js +29 -0
  164. package/dist/common/scroll-parent.d.ts +23 -0
  165. package/dist/common/scroll-parent.d.ts.map +1 -0
  166. package/dist/common/scroll-parent.js +21 -0
  167. package/dist/common/validate.d.ts +38 -0
  168. package/dist/common/validate.d.ts.map +1 -0
  169. package/dist/common/validate.js +36 -0
  170. package/dist/connectivity/connectivity-indicator.d.ts +3 -1
  171. package/dist/connectivity/connectivity-indicator.d.ts.map +1 -1
  172. package/dist/connectivity/connectivity-indicator.js +3 -1
  173. package/dist/connectivity/connectivity-provider.d.ts.map +1 -1
  174. package/dist/connectivity/connectivity-provider.js +4 -1
  175. package/dist/connectivity/index.d.ts +1 -0
  176. package/dist/connectivity/index.d.ts.map +1 -1
  177. package/dist/connectivity/types.d.ts +2 -2
  178. package/dist/connectivity/types.d.ts.map +1 -1
  179. package/dist/connectivity/use-connectivity.d.ts.map +1 -1
  180. package/dist/content/article-layout.module.css +11 -4
  181. package/dist/content/callout.d.ts +8 -4
  182. package/dist/content/callout.d.ts.map +1 -1
  183. package/dist/content/callout.js +15 -8
  184. package/dist/content/guide.d.ts +5 -4
  185. package/dist/content/guide.d.ts.map +1 -1
  186. package/dist/content/guide.js +13 -4
  187. package/dist/content/heading-anchor.d.ts +24 -2
  188. package/dist/content/heading-anchor.d.ts.map +1 -1
  189. package/dist/content/heading-anchor.js +23 -9
  190. package/dist/content/index.d.ts.map +1 -1
  191. package/dist/content/markdown.d.ts.map +1 -1
  192. package/dist/content/markdown.js +2 -0
  193. package/dist/content/prose.module.css +9 -7
  194. package/dist/content/reading-progress.d.ts +10 -4
  195. package/dist/content/reading-progress.d.ts.map +1 -1
  196. package/dist/content/reading-progress.js +26 -10
  197. package/dist/content/slug.d.ts +4 -0
  198. package/dist/content/slug.d.ts.map +1 -1
  199. package/dist/content/toc.d.ts +11 -0
  200. package/dist/content/toc.d.ts.map +1 -1
  201. package/dist/content/toc.js +23 -10
  202. package/dist/controls/actions.d.ts +49 -6
  203. package/dist/controls/actions.d.ts.map +1 -1
  204. package/dist/controls/actions.js +39 -8
  205. package/dist/controls/compare-filter.d.ts +3 -2
  206. package/dist/controls/compare-filter.d.ts.map +1 -1
  207. package/dist/controls/compare-filter.js +17 -2
  208. package/dist/controls/control-group.d.ts +3 -3
  209. package/dist/controls/control-group.d.ts.map +1 -1
  210. package/dist/controls/control-group.js +9 -2
  211. package/dist/controls/controls.module.css +169 -186
  212. package/dist/controls/controls.module.css.d.ts +9 -11
  213. package/dist/controls/enum-filter.d.ts +3 -2
  214. package/dist/controls/enum-filter.d.ts.map +1 -1
  215. package/dist/controls/enum-filter.js +28 -13
  216. package/dist/controls/filter-context.d.ts +8 -4
  217. package/dist/controls/filter-context.d.ts.map +1 -1
  218. package/dist/controls/filter-pill.d.ts +3 -3
  219. package/dist/controls/filter-pill.d.ts.map +1 -1
  220. package/dist/controls/filter-pill.js +4 -1
  221. package/dist/controls/filter-set.d.ts +3 -2
  222. package/dist/controls/filter-set.d.ts.map +1 -1
  223. package/dist/controls/filter-set.js +66 -41
  224. package/dist/controls/filter-sheet.d.ts +20 -80
  225. package/dist/controls/filter-sheet.d.ts.map +1 -1
  226. package/dist/controls/filter-sheet.js +9 -95
  227. package/dist/controls/index.d.ts +2 -0
  228. package/dist/controls/index.d.ts.map +1 -1
  229. package/dist/controls/index.js +4 -0
  230. package/dist/controls/multi-select-filter.d.ts +18 -2
  231. package/dist/controls/multi-select-filter.d.ts.map +1 -1
  232. package/dist/controls/multi-select-filter.js +122 -20
  233. package/dist/controls/number-filter.d.ts +7 -5
  234. package/dist/controls/number-filter.d.ts.map +1 -1
  235. package/dist/controls/number-filter.js +40 -11
  236. package/dist/controls/panel-row.d.ts +132 -0
  237. package/dist/controls/panel-row.d.ts.map +1 -0
  238. package/dist/controls/panel-row.js +173 -0
  239. package/dist/controls/panel-row.module.css +86 -0
  240. package/dist/controls/panel-row.module.css.d.ts +13 -0
  241. package/dist/controls/range-filter.d.ts +2 -1
  242. package/dist/controls/range-filter.d.ts.map +1 -1
  243. package/dist/controls/range-filter.js +57 -35
  244. package/dist/controls/search-filter.d.ts +3 -2
  245. package/dist/controls/search-filter.d.ts.map +1 -1
  246. package/dist/controls/search-filter.js +25 -10
  247. package/dist/controls/select-filter.d.ts +2 -1
  248. package/dist/controls/select-filter.d.ts.map +1 -1
  249. package/dist/controls/select-filter.js +4 -0
  250. package/dist/controls/slider-control.d.ts +36 -0
  251. package/dist/controls/slider-control.d.ts.map +1 -0
  252. package/dist/controls/slider-control.js +64 -0
  253. package/dist/controls/sync-button.d.ts +3 -2
  254. package/dist/controls/sync-button.d.ts.map +1 -1
  255. package/dist/controls/sync-button.js +16 -3
  256. package/dist/controls/toggle-filter.d.ts +3 -2
  257. package/dist/controls/toggle-filter.d.ts.map +1 -1
  258. package/dist/controls/toggle-filter.js +28 -11
  259. package/dist/controls/view-tabs.d.ts +3 -2
  260. package/dist/controls/view-tabs.d.ts.map +1 -1
  261. package/dist/controls/view-tabs.js +43 -11
  262. package/dist/controls-dates/date-range-picker.d.ts +1 -1
  263. package/dist/controls-dates/date-range-picker.d.ts.map +1 -1
  264. package/dist/controls-dates/date-range-picker.js +6 -1
  265. package/dist/dashboard/delta-badge.d.ts +5 -1
  266. package/dist/dashboard/delta-badge.d.ts.map +1 -1
  267. package/dist/dashboard/empty-state.d.ts +10 -3
  268. package/dist/dashboard/empty-state.d.ts.map +1 -1
  269. package/dist/dashboard/empty-state.js +37 -6
  270. package/dist/dashboard/index.d.ts +6 -4
  271. package/dist/dashboard/index.d.ts.map +1 -1
  272. package/dist/dashboard/index.js +7 -1
  273. package/dist/dashboard/query-state.d.ts +48 -27
  274. package/dist/dashboard/query-state.d.ts.map +1 -1
  275. package/dist/dashboard/query-state.js +111 -57
  276. package/dist/dashboard/settings-section.d.ts +19 -9
  277. package/dist/dashboard/settings-section.d.ts.map +1 -1
  278. package/dist/dashboard/settings-section.js +74 -25
  279. package/dist/dashboard/stat-card.d.ts +44 -38
  280. package/dist/dashboard/stat-card.d.ts.map +1 -1
  281. package/dist/dashboard/stat-card.js +55 -42
  282. package/dist/dashboard/stat-card.module.css +46 -31
  283. package/dist/dashboard/stat-card.module.css.d.ts +1 -0
  284. package/dist/dashboard/stat-group.d.ts +41 -0
  285. package/dist/dashboard/stat-group.d.ts.map +1 -0
  286. package/dist/dashboard/stat-group.js +30 -0
  287. package/dist/dashboard/stat-group.module.css +66 -0
  288. package/dist/dashboard/stat-group.module.css.d.ts +8 -0
  289. package/dist/dashboard/widget-grid.d.ts +27 -0
  290. package/dist/dashboard/widget-grid.d.ts.map +1 -0
  291. package/dist/dashboard/widget-grid.js +41 -0
  292. package/dist/dashboard/widget-grid.module.css +53 -0
  293. package/dist/dashboard/widget-grid.module.css.d.ts +9 -0
  294. package/dist/data/data-table.d.ts +151 -12
  295. package/dist/data/data-table.d.ts.map +1 -1
  296. package/dist/data/data-table.js +384 -138
  297. package/dist/data/data-table.module.css +64 -0
  298. package/dist/data/data-table.module.css.d.ts +11 -0
  299. package/dist/data/index.d.ts +2 -2
  300. package/dist/data/index.d.ts.map +1 -1
  301. package/dist/data/index.js +24 -2
  302. package/dist/data/query-branch.d.ts +28 -0
  303. package/dist/data/query-branch.d.ts.map +1 -0
  304. package/dist/data/query-branch.js +10 -0
  305. package/dist/data/table.d.ts +2 -2
  306. package/dist/data/table.d.ts.map +1 -1
  307. package/dist/data/virtual-list.d.ts +65 -6
  308. package/dist/data/virtual-list.d.ts.map +1 -1
  309. package/dist/data/virtual-list.js +89 -38
  310. package/dist/data/virtual.d.ts +1 -1
  311. package/dist/data/virtual.d.ts.map +1 -1
  312. package/dist/forms/FormErrorSummary.d.ts +4 -3
  313. package/dist/forms/FormErrorSummary.d.ts.map +1 -1
  314. package/dist/forms/FormErrorSummary.js +6 -4
  315. package/dist/forms/create-form.d.ts +2 -2
  316. package/dist/forms/field.d.ts +46 -6
  317. package/dist/forms/field.d.ts.map +1 -1
  318. package/dist/forms/field.js +10 -5
  319. package/dist/forms/form-layout.d.ts +142 -0
  320. package/dist/forms/form-layout.d.ts.map +1 -0
  321. package/dist/forms/form-layout.js +110 -0
  322. package/dist/forms/form-layout.module.css +145 -0
  323. package/dist/forms/form-layout.module.css.d.ts +20 -0
  324. package/dist/forms/form-state.d.ts +42 -0
  325. package/dist/forms/form-state.d.ts.map +1 -0
  326. package/dist/forms/form-state.js +26 -0
  327. package/dist/forms/index.d.ts +22 -6
  328. package/dist/forms/index.d.ts.map +1 -1
  329. package/dist/forms/index.js +19 -3
  330. package/dist/forms/use-field-array.d.ts +60 -0
  331. package/dist/forms/use-field-array.d.ts.map +1 -0
  332. package/dist/forms/use-field-array.js +20 -0
  333. package/dist/forms/use-form-draft.d.ts +25 -10
  334. package/dist/forms/use-form-draft.d.ts.map +1 -1
  335. package/dist/forms/use-form-draft.js +55 -18
  336. package/dist/forms/use-form-submit.d.ts +88 -0
  337. package/dist/forms/use-form-submit.d.ts.map +1 -0
  338. package/dist/forms/use-form-submit.js +63 -0
  339. package/dist/guard/index.d.ts.map +1 -1
  340. package/dist/guard/index.js +26 -6
  341. package/dist/index.d.ts +10 -8
  342. package/dist/index.d.ts.map +1 -1
  343. package/dist/index.js +44 -4
  344. package/dist/nav/types.d.ts +15 -6
  345. package/dist/nav/types.d.ts.map +1 -1
  346. package/dist/notifications/bell.d.ts +3 -2
  347. package/dist/notifications/bell.d.ts.map +1 -1
  348. package/dist/notifications/bell.js +73 -56
  349. package/dist/notifications/center.d.ts +15 -4
  350. package/dist/notifications/center.d.ts.map +1 -1
  351. package/dist/notifications/center.js +5 -2
  352. package/dist/notifications/define-notifications.d.ts +56 -14
  353. package/dist/notifications/define-notifications.d.ts.map +1 -1
  354. package/dist/notifications/define-notifications.js +2 -1
  355. package/dist/notifications/index.d.ts +6 -2
  356. package/dist/notifications/index.d.ts.map +1 -1
  357. package/dist/notifications/index.js +5 -1
  358. package/dist/notifications/mount-guard.d.ts +8 -0
  359. package/dist/notifications/mount-guard.d.ts.map +1 -0
  360. package/dist/notifications/mount-guard.js +19 -0
  361. package/dist/notifications/notify.d.ts +58 -1
  362. package/dist/notifications/notify.d.ts.map +1 -1
  363. package/dist/notifications/notify.js +46 -2
  364. package/dist/notifications/overlay.d.ts.map +1 -1
  365. package/dist/notifications/overlay.js +2 -0
  366. package/dist/notifications/store.d.ts +7 -0
  367. package/dist/notifications/store.d.ts.map +1 -1
  368. package/dist/provider/index.d.ts +37 -5
  369. package/dist/provider/index.d.ts.map +1 -1
  370. package/dist/provider/index.js +66 -28
  371. package/dist/provider/lab-theme.d.ts.map +1 -1
  372. package/dist/provider/lab-theme.js +2 -1
  373. package/dist/query/devtools.d.ts.map +1 -1
  374. package/dist/query/devtools.js +1 -0
  375. package/dist/router-tanstack/field.d.ts +1 -1
  376. package/dist/router-tanstack/field.d.ts.map +1 -1
  377. package/dist/router-tanstack/search-store.d.ts.map +1 -1
  378. package/dist/router-tanstack/search-store.js +1 -1
  379. package/dist/router-tanstack/use-nav.d.ts.map +1 -1
  380. package/dist/router-tanstack/use-nav.js +1 -1
  381. package/dist/section/index.d.ts +1 -1
  382. package/dist/section/index.d.ts.map +1 -1
  383. package/dist/section/section.d.ts +36 -2
  384. package/dist/section/section.d.ts.map +1 -1
  385. package/dist/section/section.js +49 -57
  386. package/dist/section/section.module.css +11 -0
  387. package/dist/shell/account-types.d.ts +5 -2
  388. package/dist/shell/account-types.d.ts.map +1 -1
  389. package/dist/shell/app-brand.d.ts +13 -0
  390. package/dist/shell/app-brand.d.ts.map +1 -0
  391. package/dist/shell/app-brand.js +94 -0
  392. package/dist/shell/app-brand.module.css +109 -0
  393. package/dist/shell/app-brand.module.css.d.ts +14 -0
  394. package/dist/shell/app-breadcrumbs.d.ts +4 -2
  395. package/dist/shell/app-breadcrumbs.d.ts.map +1 -1
  396. package/dist/shell/app-breadcrumbs.js +33 -22
  397. package/dist/shell/app-header.module.css +10 -5
  398. package/dist/shell/app-main.module.css +107 -0
  399. package/dist/shell/app-main.module.css.d.ts +11 -0
  400. package/dist/shell/app-mobile-nav.d.ts +3 -2
  401. package/dist/shell/app-mobile-nav.d.ts.map +1 -1
  402. package/dist/shell/app-mobile-nav.js +29 -15
  403. package/dist/shell/app-mobile-nav.module.css +48 -27
  404. package/dist/shell/app-mobile-nav.module.css.d.ts +0 -1
  405. package/dist/shell/app-sidebar-account.d.ts +2 -1
  406. package/dist/shell/app-sidebar-account.d.ts.map +1 -1
  407. package/dist/shell/app-sidebar-account.js +57 -22
  408. package/dist/shell/app-sidebar.d.ts +9 -3
  409. package/dist/shell/app-sidebar.d.ts.map +1 -1
  410. package/dist/shell/app-sidebar.js +55 -109
  411. package/dist/shell/app-sidebar.module.css +53 -96
  412. package/dist/shell/app-sidebar.module.css.d.ts +0 -5
  413. package/dist/shell/index.d.ts +14 -6
  414. package/dist/shell/index.d.ts.map +1 -1
  415. package/dist/shell/index.js +47 -12
  416. package/dist/shell/isomorphic-layout-effect.d.ts +14 -0
  417. package/dist/shell/isomorphic-layout-effect.d.ts.map +1 -0
  418. package/dist/shell/isomorphic-layout-effect.js +5 -0
  419. package/dist/shell/mobile-nav-model.d.ts.map +1 -1
  420. package/dist/shell/mobile-nav-model.js +27 -6
  421. package/dist/shell/nav-count-badge.d.ts +5 -3
  422. package/dist/shell/nav-count-badge.d.ts.map +1 -1
  423. package/dist/shell/nav-count-badge.js +3 -1
  424. package/dist/shell/page-aside.d.ts +43 -0
  425. package/dist/shell/page-aside.d.ts.map +1 -0
  426. package/dist/shell/page-aside.js +202 -0
  427. package/dist/shell/page-aside.module.css +174 -0
  428. package/dist/shell/page-aside.module.css.d.ts +14 -0
  429. package/dist/shell/page-bar.d.ts +55 -15
  430. package/dist/shell/page-bar.d.ts.map +1 -1
  431. package/dist/shell/page-bar.js +130 -41
  432. package/dist/shell/page-bar.module.css +107 -13
  433. package/dist/shell/page-bar.module.css.d.ts +4 -1
  434. package/dist/shell/sidebar-search.d.ts +4 -2
  435. package/dist/shell/sidebar-search.d.ts.map +1 -1
  436. package/dist/shell/sidebar-search.js +9 -4
  437. package/dist/shell/sidebar-search.module.css +1 -1
  438. package/dist/state/fields.d.ts +23 -3
  439. package/dist/state/fields.d.ts.map +1 -1
  440. package/dist/state/fields.js +13 -2
  441. package/dist/state/persisted-or-local.d.ts +9 -0
  442. package/dist/state/persisted-or-local.d.ts.map +1 -0
  443. package/dist/state/persisted-or-local.js +24 -0
  444. package/dist/state.d.ts +1 -1
  445. package/dist/state.d.ts.map +1 -1
  446. package/dist/state.js +2 -6
  447. package/dist/surfaces.d.ts +12 -11
  448. package/dist/surfaces.d.ts.map +1 -1
  449. package/dist/surfaces.js +42 -12
  450. package/dist/theme/ctl-theme.d.ts.map +1 -1
  451. package/dist/theme/index.d.ts.map +1 -1
  452. package/dist/theme/index.js +102 -17
  453. package/dist/theme/nav-link.module.css +37 -26
  454. package/dist/theme/segmented-control.module.css +22 -0
  455. package/dist/theme/segmented-control.module.css.d.ts +1 -0
  456. package/dist/theme-lab/boot.d.ts +66 -0
  457. package/dist/theme-lab/boot.d.ts.map +1 -0
  458. package/dist/theme-lab/boot.js +82 -0
  459. package/dist/theme-lab/index.d.ts +4 -43
  460. package/dist/theme-lab/index.d.ts.map +1 -1
  461. package/dist/theme-lab/index.js +9 -69
  462. package/dist/theme-toggle/index.d.ts +3 -2
  463. package/dist/theme-toggle/index.d.ts.map +1 -1
  464. package/dist/theme-toggle/index.js +8 -2
  465. package/dist/tokens/index.d.ts +42 -0
  466. package/dist/tokens/index.d.ts.map +1 -1
  467. package/dist/tokens/index.js +35 -6
  468. package/dist/tokens/palette.d.ts +45 -25
  469. package/dist/tokens/palette.d.ts.map +1 -1
  470. package/dist/tokens/palette.js +31 -14
  471. package/dist/tokens.css +4 -5
  472. package/dist/utils/is-dev.d.ts +3 -0
  473. package/dist/utils/is-dev.d.ts.map +1 -0
  474. package/dist/utils/is-dev.js +6 -0
  475. package/dist/widget-header/delta-badge.d.ts +7 -1
  476. package/dist/widget-header/delta-badge.d.ts.map +1 -1
  477. package/dist/widget-header/delta-badge.js +8 -1
  478. package/dist/widget-header/index.d.ts +2 -2
  479. package/dist/widget-header/index.d.ts.map +1 -1
  480. package/dist/widget-header/index.js +3 -1
  481. package/dist/widget-header/widget-header.d.ts +69 -4
  482. package/dist/widget-header/widget-header.d.ts.map +1 -1
  483. package/dist/widget-header/widget-header.js +42 -27
  484. package/dist/widget-header/widget-header.module.css +72 -7
  485. package/llms.txt +6 -6
  486. package/package.json +49 -25
  487. package/src/agent/coalesce.ts +2 -1
  488. package/src/agent/merge.ts +2 -1
  489. package/src/agent/part-list.tsx +2 -0
  490. package/src/agent/stick-to-bottom.tsx +9 -11
  491. package/src/agent-chat/composer.tsx +124 -103
  492. package/src/agent-chat/relative-time.ts +2 -1
  493. package/src/agent-chat/thread-detail-panel.tsx +9 -5
  494. package/src/agent-chat/thread-feed-row.tsx +17 -9
  495. package/src/agent-chat/thread-feed.tsx +9 -3
  496. package/src/agent-chat/thread-message.tsx +48 -13
  497. package/src/agent-chat/thread-outcome-card.tsx +9 -1
  498. package/src/agent-chat/thread-workspace.tsx +72 -33
  499. package/src/agent-chat/tool-chip.tsx +8 -2
  500. package/src/charts/hooks/useBandPlot.ts +26 -8
  501. package/src/charts/index.ts +39 -4
  502. package/src/charts/kinds/BandStrip.tsx +36 -14
  503. package/src/charts/kinds/Bars.tsx +67 -16
  504. package/src/charts/kinds/Donut.tsx +30 -3
  505. package/src/charts/kinds/DualPanel.tsx +56 -10
  506. package/src/charts/kinds/Heatmap.tsx +90 -33
  507. package/src/charts/kinds/MirroredBars.tsx +21 -3
  508. package/src/charts/kinds/MultiLine.tsx +61 -18
  509. package/src/charts/kinds/StackedArea.tsx +77 -6
  510. package/src/charts/kinds/ZonedLine.tsx +71 -31
  511. package/src/charts/layout/auto-margin.ts +134 -21
  512. package/src/charts/layout/log-ticks.ts +90 -0
  513. package/src/charts/primitives/Axes.tsx +33 -5
  514. package/src/charts/primitives/CartesianChart.tsx +194 -41
  515. package/src/charts/primitives/ChartCard.tsx +66 -25
  516. package/src/charts/primitives/ChartFrame.tsx +107 -26
  517. package/src/charts/primitives/ChartLegend.tsx +43 -13
  518. package/src/charts/primitives/ChartPending.tsx +185 -7
  519. package/src/charts/primitives/ChartTooltip.tsx +37 -5
  520. package/src/charts/primitives/Crosshair.tsx +6 -3
  521. package/src/charts/primitives/chart-frame-layout.ts +212 -0
  522. package/src/charts/primitives/chart-tier.tsx +37 -0
  523. package/src/charts/series.ts +77 -1
  524. package/src/charts/sparklines/BarSparkline.tsx +11 -3
  525. package/src/charts/sparklines/LineSparkline.tsx +18 -4
  526. package/src/charts/sparklines/index.ts +2 -2
  527. package/src/charts/utils/format.ts +163 -2
  528. package/src/charts/utils/ticks.ts +149 -4
  529. package/src/cli/index.ts +8 -3
  530. package/src/commands/ShortcutsHelp.tsx +10 -3
  531. package/src/commands/define-commands.ts +2 -2
  532. package/src/commands/define-overlays.ts +216 -1
  533. package/src/commands/index.ts +12 -0
  534. package/src/commands/overlays-mount.tsx +60 -26
  535. package/src/common/errors.ts +73 -0
  536. package/src/common/index.ts +21 -0
  537. package/src/common/props.ts +71 -0
  538. package/src/common/query-state-like.ts +64 -0
  539. package/src/common/refs.ts +58 -0
  540. package/src/common/scroll-parent.ts +42 -0
  541. package/src/common/validate.ts +94 -0
  542. package/src/connectivity/connectivity-indicator.tsx +6 -1
  543. package/src/connectivity/connectivity-provider.tsx +4 -1
  544. package/src/connectivity/index.ts +1 -0
  545. package/src/connectivity/types.ts +5 -2
  546. package/src/connectivity/use-connectivity.ts +3 -2
  547. package/src/content/article-layout.module.css +11 -4
  548. package/src/content/callout.tsx +13 -7
  549. package/src/content/guide.tsx +14 -4
  550. package/src/content/heading-anchor.tsx +14 -3
  551. package/src/content/index.ts +2 -0
  552. package/src/content/markdown.tsx +2 -0
  553. package/src/content/prose.module.css +9 -7
  554. package/src/content/reading-progress.tsx +40 -15
  555. package/src/content/slug.ts +4 -0
  556. package/src/content/toc.tsx +47 -10
  557. package/src/controls/actions.tsx +89 -9
  558. package/src/controls/compare-filter.tsx +20 -3
  559. package/src/controls/control-group.tsx +11 -4
  560. package/src/controls/controls.module.css +169 -186
  561. package/src/controls/controls.module.css.d.ts +9 -11
  562. package/src/controls/enum-filter.tsx +32 -16
  563. package/src/controls/filter-context.tsx +14 -6
  564. package/src/controls/filter-pill.tsx +6 -3
  565. package/src/controls/filter-set.tsx +32 -13
  566. package/src/controls/filter-sheet.tsx +44 -194
  567. package/src/controls/index.ts +7 -0
  568. package/src/controls/multi-select-filter.tsx +177 -27
  569. package/src/controls/number-filter.tsx +61 -23
  570. package/src/controls/panel-row.module.css +86 -0
  571. package/src/controls/panel-row.module.css.d.ts +13 -0
  572. package/src/controls/panel-row.tsx +392 -0
  573. package/src/controls/range-filter.tsx +76 -39
  574. package/src/controls/search-filter.tsx +30 -12
  575. package/src/controls/select-filter.tsx +11 -1
  576. package/src/controls/slider-control.tsx +159 -0
  577. package/src/controls/sync-button.tsx +13 -3
  578. package/src/controls/toggle-filter.tsx +36 -16
  579. package/src/controls/view-tabs.tsx +63 -11
  580. package/src/controls-dates/date-range-picker.tsx +8 -1
  581. package/src/dashboard/delta-badge.tsx +5 -1
  582. package/src/dashboard/empty-state.tsx +72 -25
  583. package/src/dashboard/index.ts +13 -1
  584. package/src/dashboard/query-state.tsx +154 -84
  585. package/src/dashboard/settings-section.tsx +87 -31
  586. package/src/dashboard/stat-card.module.css +46 -31
  587. package/src/dashboard/stat-card.module.css.d.ts +1 -0
  588. package/src/dashboard/stat-card.tsx +185 -127
  589. package/src/dashboard/stat-group.module.css +66 -0
  590. package/src/dashboard/stat-group.module.css.d.ts +8 -0
  591. package/src/dashboard/stat-group.tsx +74 -0
  592. package/src/dashboard/widget-grid.module.css +53 -0
  593. package/src/dashboard/widget-grid.module.css.d.ts +9 -0
  594. package/src/dashboard/widget-grid.tsx +127 -0
  595. package/src/data/data-table.module.css +64 -0
  596. package/src/data/data-table.module.css.d.ts +11 -0
  597. package/src/data/data-table.tsx +919 -346
  598. package/src/data/index.ts +30 -2
  599. package/src/data/query-branch.ts +53 -0
  600. package/src/data/table.ts +5 -0
  601. package/src/data/virtual-list.tsx +189 -55
  602. package/src/data/virtual.ts +5 -1
  603. package/src/forms/FormErrorSummary.tsx +13 -6
  604. package/src/forms/create-form.ts +2 -2
  605. package/src/forms/field.ts +60 -11
  606. package/src/forms/form-layout.module.css +145 -0
  607. package/src/forms/form-layout.module.css.d.ts +20 -0
  608. package/src/forms/form-layout.tsx +305 -0
  609. package/src/forms/form-state.tsx +94 -0
  610. package/src/forms/index.ts +38 -7
  611. package/src/forms/use-field-array.ts +94 -0
  612. package/src/forms/use-form-draft.ts +145 -53
  613. package/src/forms/use-form-submit.ts +199 -0
  614. package/src/guard/index.ts +73 -18
  615. package/src/index.ts +74 -10
  616. package/src/nav/types.ts +15 -6
  617. package/src/notifications/bell.tsx +18 -4
  618. package/src/notifications/center.tsx +18 -5
  619. package/src/notifications/define-notifications.ts +64 -18
  620. package/src/notifications/index.ts +12 -1
  621. package/src/notifications/mount-guard.ts +41 -0
  622. package/src/notifications/notify.tsx +122 -3
  623. package/src/notifications/overlay.tsx +2 -0
  624. package/src/notifications/store.ts +7 -0
  625. package/src/provider/index.tsx +101 -13
  626. package/src/provider/lab-theme.ts +2 -1
  627. package/src/query/devtools.tsx +1 -0
  628. package/src/router-tanstack/field.ts +1 -0
  629. package/src/router-tanstack/search-store.ts +3 -10
  630. package/src/router-tanstack/use-nav.ts +18 -13
  631. package/src/section/index.ts +1 -1
  632. package/src/section/section.module.css +11 -0
  633. package/src/section/section.tsx +163 -96
  634. package/src/shell/account-types.ts +5 -2
  635. package/src/shell/app-brand.module.css +109 -0
  636. package/src/shell/app-brand.module.css.d.ts +14 -0
  637. package/src/shell/app-brand.tsx +140 -0
  638. package/src/shell/app-breadcrumbs.tsx +19 -9
  639. package/src/shell/app-header.module.css +10 -5
  640. package/src/shell/app-main.module.css +107 -0
  641. package/src/shell/app-main.module.css.d.ts +11 -0
  642. package/src/shell/app-mobile-nav.module.css +48 -27
  643. package/src/shell/app-mobile-nav.module.css.d.ts +0 -1
  644. package/src/shell/app-mobile-nav.tsx +43 -11
  645. package/src/shell/app-sidebar-account.tsx +29 -6
  646. package/src/shell/app-sidebar.module.css +53 -96
  647. package/src/shell/app-sidebar.module.css.d.ts +0 -5
  648. package/src/shell/app-sidebar.tsx +40 -113
  649. package/src/shell/index.tsx +156 -65
  650. package/src/shell/isomorphic-layout-effect.ts +14 -0
  651. package/src/shell/mobile-nav-model.ts +66 -10
  652. package/src/shell/nav-count-badge.tsx +6 -1
  653. package/src/shell/page-aside.module.css +174 -0
  654. package/src/shell/page-aside.module.css.d.ts +14 -0
  655. package/src/shell/page-aside.tsx +377 -0
  656. package/src/shell/page-bar.module.css +107 -13
  657. package/src/shell/page-bar.module.css.d.ts +4 -1
  658. package/src/shell/page-bar.tsx +294 -94
  659. package/src/shell/sidebar-search.module.css +1 -1
  660. package/src/shell/sidebar-search.tsx +13 -4
  661. package/src/state/fields.ts +43 -10
  662. package/src/state/persisted-or-local.ts +50 -0
  663. package/src/state.ts +0 -9
  664. package/src/surfaces.ts +42 -12
  665. package/src/theme/ctl-theme.tsx +10 -0
  666. package/src/theme/index.ts +129 -16
  667. package/src/theme/nav-link.module.css +37 -26
  668. package/src/theme/segmented-control.module.css +22 -0
  669. package/src/theme/segmented-control.module.css.d.ts +1 -0
  670. package/src/theme-lab/boot.ts +140 -0
  671. package/src/theme-lab/index.tsx +21 -112
  672. package/src/theme-toggle/index.tsx +10 -3
  673. package/src/tokens/index.ts +50 -6
  674. package/src/tokens/palette.ts +58 -30
  675. package/src/utils/is-dev.ts +4 -0
  676. package/src/widget-header/delta-badge.tsx +25 -5
  677. package/src/widget-header/index.ts +10 -2
  678. package/src/widget-header/widget-header.module.css +72 -7
  679. package/src/widget-header/widget-header.tsx +150 -71
  680. package/dist/agent/adapter.test.d.ts +0 -2
  681. package/dist/agent/adapter.test.d.ts.map +0 -1
  682. package/dist/agent/ai-sdk-transport.test.d.ts +0 -2
  683. package/dist/agent/ai-sdk-transport.test.d.ts.map +0 -1
  684. package/dist/agent/coalesce.test.d.ts +0 -2
  685. package/dist/agent/coalesce.test.d.ts.map +0 -1
  686. package/dist/agent/foreign.test.d.ts +0 -2
  687. package/dist/agent/foreign.test.d.ts.map +0 -1
  688. package/dist/agent/id.test.d.ts +0 -2
  689. package/dist/agent/id.test.d.ts.map +0 -1
  690. package/dist/agent/merge.test.d.ts +0 -2
  691. package/dist/agent/merge.test.d.ts.map +0 -1
  692. package/dist/agent/part-list.test.d.ts +0 -2
  693. package/dist/agent/part-list.test.d.ts.map +0 -1
  694. package/dist/agent/parts.test.d.ts +0 -2
  695. package/dist/agent/parts.test.d.ts.map +0 -1
  696. package/dist/agent/thread.test.d.ts +0 -2
  697. package/dist/agent/thread.test.d.ts.map +0 -1
  698. package/dist/agent/transport.test.d.ts +0 -2
  699. package/dist/agent/transport.test.d.ts.map +0 -1
  700. package/dist/agent/use-agent-stream.test.d.ts +0 -2
  701. package/dist/agent/use-agent-stream.test.d.ts.map +0 -1
  702. package/dist/agent/use-agent-thread-runs.foreign.test.d.ts +0 -2
  703. package/dist/agent/use-agent-thread-runs.foreign.test.d.ts.map +0 -1
  704. package/dist/agent/use-agent-thread-runs.resume.test.d.ts +0 -2
  705. package/dist/agent/use-agent-thread-runs.resume.test.d.ts.map +0 -1
  706. package/dist/agent/use-agent-thread-runs.test.d.ts +0 -2
  707. package/dist/agent/use-agent-thread-runs.test.d.ts.map +0 -1
  708. package/dist/agent/use-agent-thread-runs.wedge.test.d.ts +0 -2
  709. package/dist/agent/use-agent-thread-runs.wedge.test.d.ts.map +0 -1
  710. package/dist/agent-chat/composer.test.d.ts +0 -2
  711. package/dist/agent-chat/composer.test.d.ts.map +0 -1
  712. package/dist/agent-chat/relative-time.test.d.ts +0 -2
  713. package/dist/agent-chat/relative-time.test.d.ts.map +0 -1
  714. package/dist/agent-chat/thread-feed-row.test.d.ts +0 -2
  715. package/dist/agent-chat/thread-feed-row.test.d.ts.map +0 -1
  716. package/dist/agent-chat/thread-feed.test.d.ts +0 -2
  717. package/dist/agent-chat/thread-feed.test.d.ts.map +0 -1
  718. package/dist/agent-chat/thread-message.test.d.ts +0 -2
  719. package/dist/agent-chat/thread-message.test.d.ts.map +0 -1
  720. package/dist/agent-chat/thread-workspace.test.d.ts +0 -2
  721. package/dist/agent-chat/thread-workspace.test.d.ts.map +0 -1
  722. package/dist/agent-chat/tool-chip.test.d.ts +0 -2
  723. package/dist/agent-chat/tool-chip.test.d.ts.map +0 -1
  724. package/dist/agent-chat/virtualize.type-guard.test.d.ts +0 -2
  725. package/dist/agent-chat/virtualize.type-guard.test.d.ts.map +0 -1
  726. package/dist/charts/cursor/resolve.test.d.ts +0 -2
  727. package/dist/charts/cursor/resolve.test.d.ts.map +0 -1
  728. package/dist/charts/cursor/store.test.d.ts +0 -2
  729. package/dist/charts/cursor/store.test.d.ts.map +0 -1
  730. package/dist/charts/kinds/BandStrip.test.d.ts +0 -2
  731. package/dist/charts/kinds/BandStrip.test.d.ts.map +0 -1
  732. package/dist/charts/kinds/Bars.test.d.ts +0 -2
  733. package/dist/charts/kinds/Bars.test.d.ts.map +0 -1
  734. package/dist/charts/kinds/DualPanel.test.d.ts +0 -2
  735. package/dist/charts/kinds/DualPanel.test.d.ts.map +0 -1
  736. package/dist/charts/kinds/MirroredBars.test.d.ts +0 -2
  737. package/dist/charts/kinds/MirroredBars.test.d.ts.map +0 -1
  738. package/dist/charts/kinds/MultiLine.test.d.ts +0 -2
  739. package/dist/charts/kinds/MultiLine.test.d.ts.map +0 -1
  740. package/dist/charts/kinds/StackedArea.test.d.ts +0 -2
  741. package/dist/charts/kinds/StackedArea.test.d.ts.map +0 -1
  742. package/dist/charts/kinds/ZonedLine.test.d.ts +0 -2
  743. package/dist/charts/kinds/ZonedLine.test.d.ts.map +0 -1
  744. package/dist/charts/layout/auto-margin.test.d.ts +0 -2
  745. package/dist/charts/layout/auto-margin.test.d.ts.map +0 -1
  746. package/dist/charts/primitives/CartesianChart.test.d.ts +0 -2
  747. package/dist/charts/primitives/CartesianChart.test.d.ts.map +0 -1
  748. package/dist/charts/primitives/ChartCard.test.d.ts +0 -2
  749. package/dist/charts/primitives/ChartCard.test.d.ts.map +0 -1
  750. package/dist/charts/primitives/ChartFrame.test.d.ts +0 -2
  751. package/dist/charts/primitives/ChartFrame.test.d.ts.map +0 -1
  752. package/dist/charts/primitives/ChartLegend.test.d.ts +0 -2
  753. package/dist/charts/primitives/ChartLegend.test.d.ts.map +0 -1
  754. package/dist/charts/primitives/ChartTooltip.test.d.ts +0 -2
  755. package/dist/charts/primitives/ChartTooltip.test.d.ts.map +0 -1
  756. package/dist/charts/primitives/XZoneRects.test.d.ts +0 -2
  757. package/dist/charts/primitives/XZoneRects.test.d.ts.map +0 -1
  758. package/dist/charts/series.test.d.ts +0 -2
  759. package/dist/charts/series.test.d.ts.map +0 -1
  760. package/dist/charts/utils/domain.test.d.ts +0 -2
  761. package/dist/charts/utils/domain.test.d.ts.map +0 -1
  762. package/dist/charts/utils/measure-text.test.d.ts +0 -2
  763. package/dist/charts/utils/measure-text.test.d.ts.map +0 -1
  764. package/dist/cli/check-coverage.test.d.ts +0 -2
  765. package/dist/cli/check-coverage.test.d.ts.map +0 -1
  766. package/dist/cli/check-theme.test.d.ts +0 -2
  767. package/dist/cli/check-theme.test.d.ts.map +0 -1
  768. package/dist/cli/help.test.d.ts +0 -2
  769. package/dist/cli/help.test.d.ts.map +0 -1
  770. package/dist/cli/init-sync.test.d.ts +0 -2
  771. package/dist/cli/init-sync.test.d.ts.map +0 -1
  772. package/dist/cli/placement-engine.test.d.ts +0 -2
  773. package/dist/cli/placement-engine.test.d.ts.map +0 -1
  774. package/dist/cli/shipped-versions.test.d.ts +0 -2
  775. package/dist/cli/shipped-versions.test.d.ts.map +0 -1
  776. package/dist/cli/tarball-parity.test.d.ts +0 -2
  777. package/dist/cli/tarball-parity.test.d.ts.map +0 -1
  778. package/dist/cli/template-format.test.d.ts +0 -2
  779. package/dist/cli/template-format.test.d.ts.map +0 -1
  780. package/dist/cli/template-ledger.test.d.ts +0 -2
  781. package/dist/cli/template-ledger.test.d.ts.map +0 -1
  782. package/dist/cli/tokens-css.test.d.ts +0 -2
  783. package/dist/cli/tokens-css.test.d.ts.map +0 -1
  784. package/dist/cli/toolchain-wiring.test.d.ts +0 -2
  785. package/dist/cli/toolchain-wiring.test.d.ts.map +0 -1
  786. package/dist/cli/waiver-audit.test.d.ts +0 -2
  787. package/dist/cli/waiver-audit.test.d.ts.map +0 -1
  788. package/dist/content/article-actions.test.d.ts +0 -2
  789. package/dist/content/article-actions.test.d.ts.map +0 -1
  790. package/dist/content/article-model.test.d.ts +0 -2
  791. package/dist/content/article-model.test.d.ts.map +0 -1
  792. package/dist/content/block-split.test.d.ts +0 -2
  793. package/dist/content/block-split.test.d.ts.map +0 -1
  794. package/dist/content/heading-components.test.d.ts +0 -2
  795. package/dist/content/heading-components.test.d.ts.map +0 -1
  796. package/dist/content/markdown.test.d.ts +0 -2
  797. package/dist/content/markdown.test.d.ts.map +0 -1
  798. package/dist/content/prose.module.css.test.d.ts +0 -2
  799. package/dist/content/prose.module.css.test.d.ts.map +0 -1
  800. package/dist/content/sanitize.test.d.ts +0 -2
  801. package/dist/content/sanitize.test.d.ts.map +0 -1
  802. package/dist/content/slug.test.d.ts +0 -2
  803. package/dist/content/slug.test.d.ts.map +0 -1
  804. package/dist/controls/actions.test.d.ts +0 -2
  805. package/dist/controls/actions.test.d.ts.map +0 -1
  806. package/dist/controls/actions.type-guard.test.d.ts +0 -2
  807. package/dist/controls/actions.type-guard.test.d.ts.map +0 -1
  808. package/dist/controls/control-group.test.d.ts +0 -2
  809. package/dist/controls/control-group.test.d.ts.map +0 -1
  810. package/dist/controls/controls.router.test.d.ts +0 -2
  811. package/dist/controls/controls.router.test.d.ts.map +0 -1
  812. package/dist/controls/filter-set.test.d.ts +0 -2
  813. package/dist/controls/filter-set.test.d.ts.map +0 -1
  814. package/dist/controls/peer-boundary.test.d.ts +0 -2
  815. package/dist/controls/peer-boundary.test.d.ts.map +0 -1
  816. package/dist/controls/props-contract.test.d.ts +0 -2
  817. package/dist/controls/props-contract.test.d.ts.map +0 -1
  818. package/dist/controls/range-filter.type-guard.test.d.ts +0 -2
  819. package/dist/controls/range-filter.type-guard.test.d.ts.map +0 -1
  820. package/dist/controls/sync-button.test.d.ts +0 -2
  821. package/dist/controls/sync-button.test.d.ts.map +0 -1
  822. package/dist/dashboard/query-state.test.d.ts +0 -2
  823. package/dist/dashboard/query-state.test.d.ts.map +0 -1
  824. package/dist/dashboard/settings-section.test.d.ts +0 -2
  825. package/dist/dashboard/settings-section.test.d.ts.map +0 -1
  826. package/dist/dashboard/stat-card.test.d.ts +0 -2
  827. package/dist/dashboard/stat-card.test.d.ts.map +0 -1
  828. package/dist/data/data-table.test.d.ts +0 -2
  829. package/dist/data/data-table.test.d.ts.map +0 -1
  830. package/dist/guard/check-source.test.d.ts +0 -2
  831. package/dist/guard/check-source.test.d.ts.map +0 -1
  832. package/dist/guard/grace.test.d.ts +0 -20
  833. package/dist/guard/grace.test.d.ts.map +0 -1
  834. package/dist/guard/guard-hook.test.d.ts +0 -2
  835. package/dist/guard/guard-hook.test.d.ts.map +0 -1
  836. package/dist/provider/index.test.d.ts +0 -2
  837. package/dist/provider/index.test.d.ts.map +0 -1
  838. package/dist/provider/lab-theme.test.d.ts +0 -2
  839. package/dist/provider/lab-theme.test.d.ts.map +0 -1
  840. package/dist/query/error-message.test.d.ts +0 -2
  841. package/dist/query/error-message.test.d.ts.map +0 -1
  842. package/dist/router-tanstack/multi-search-param-store.test.d.ts +0 -2
  843. package/dist/router-tanstack/multi-search-param-store.test.d.ts.map +0 -1
  844. package/dist/router-tanstack/nav.test.d.ts +0 -2
  845. package/dist/router-tanstack/nav.test.d.ts.map +0 -1
  846. package/dist/router-tanstack/search-param-store.test.d.ts +0 -2
  847. package/dist/router-tanstack/search-param-store.test.d.ts.map +0 -1
  848. package/dist/router-tanstack/search-store.router.test.d.ts +0 -2
  849. package/dist/router-tanstack/search-store.router.test.d.ts.map +0 -1
  850. package/dist/router-tanstack/search-store.test.d.ts +0 -2
  851. package/dist/router-tanstack/search-store.test.d.ts.map +0 -1
  852. package/dist/router-tanstack/use-nav.test.d.ts +0 -2
  853. package/dist/router-tanstack/use-nav.test.d.ts.map +0 -1
  854. package/dist/section/section.test.d.ts +0 -2
  855. package/dist/section/section.test.d.ts.map +0 -1
  856. package/dist/shell/app-mobile-nav.test.d.ts +0 -2
  857. package/dist/shell/app-mobile-nav.test.d.ts.map +0 -1
  858. package/dist/shell/app-sidebar.test.d.ts +0 -2
  859. package/dist/shell/app-sidebar.test.d.ts.map +0 -1
  860. package/dist/shell/index.test.d.ts +0 -2
  861. package/dist/shell/index.test.d.ts.map +0 -1
  862. package/dist/shell/mobile-nav-model.test.d.ts +0 -2
  863. package/dist/shell/mobile-nav-model.test.d.ts.map +0 -1
  864. package/dist/shell/page-bar.test.d.ts +0 -2
  865. package/dist/shell/page-bar.test.d.ts.map +0 -1
  866. package/dist/state/fields.test.d.ts +0 -2
  867. package/dist/state/fields.test.d.ts.map +0 -1
  868. package/dist/state/persisted.test.d.ts +0 -2
  869. package/dist/state/persisted.test.d.ts.map +0 -1
  870. package/dist/styles.floor.test.d.ts +0 -2
  871. package/dist/styles.floor.test.d.ts.map +0 -1
  872. package/dist/theme/border-coverage.test.d.ts +0 -18
  873. package/dist/theme/border-coverage.test.d.ts.map +0 -1
  874. package/dist/theme/contrast.test.d.ts +0 -2
  875. package/dist/theme/contrast.test.d.ts.map +0 -1
  876. package/dist/theme/ctl-theme.test.d.ts +0 -2
  877. package/dist/theme/ctl-theme.test.d.ts.map +0 -1
  878. package/dist/theme/ctl-tier-coverage.test.d.ts +0 -2
  879. package/dist/theme/ctl-tier-coverage.test.d.ts.map +0 -1
  880. package/dist/theme/density-option.test.d.ts +0 -2
  881. package/dist/theme/density-option.test.d.ts.map +0 -1
  882. package/dist/theme/density-relations.test.d.ts +0 -2
  883. package/dist/theme/density-relations.test.d.ts.map +0 -1
  884. package/dist/theme/derive-theme.test.d.ts +0 -2
  885. package/dist/theme/derive-theme.test.d.ts.map +0 -1
  886. package/dist/theme/divider-law.test.d.ts +0 -2
  887. package/dist/theme/divider-law.test.d.ts.map +0 -1
  888. package/dist/theme/fonts-option.test.d.ts +0 -2
  889. package/dist/theme/fonts-option.test.d.ts.map +0 -1
  890. package/dist/theme/icon-slot.test.d.ts +0 -2
  891. package/dist/theme/icon-slot.test.d.ts.map +0 -1
  892. package/dist/theme/layout-rhythm-css.test.d.ts +0 -2
  893. package/dist/theme/layout-rhythm-css.test.d.ts.map +0 -1
  894. package/dist/theme/radius-option.test.d.ts +0 -2
  895. package/dist/theme/radius-option.test.d.ts.map +0 -1
  896. package/dist/theme/radius.test.d.ts +0 -2
  897. package/dist/theme/radius.test.d.ts.map +0 -1
  898. package/dist/theme/shadow-surfaces.test.d.ts +0 -26
  899. package/dist/theme/shadow-surfaces.test.d.ts.map +0 -1
  900. package/dist/theme/spacing.test.d.ts +0 -2
  901. package/dist/theme/spacing.test.d.ts.map +0 -1
  902. package/dist/theme/use-basalt-spacing.test.d.ts +0 -2
  903. package/dist/theme/use-basalt-spacing.test.d.ts.map +0 -1
  904. package/dist/theme-lab/derive-controls.test.d.ts +0 -2
  905. package/dist/theme-lab/derive-controls.test.d.ts.map +0 -1
  906. package/dist/theme-lab/derive-state.test.d.ts +0 -2
  907. package/dist/theme-lab/derive-state.test.d.ts.map +0 -1
  908. package/dist/theme-lab/theme-lab.test.d.ts +0 -2
  909. package/dist/theme-lab/theme-lab.test.d.ts.map +0 -1
  910. package/dist/tokens/build-fonts-css.test.d.ts +0 -2
  911. package/dist/tokens/build-fonts-css.test.d.ts.map +0 -1
  912. package/dist/tokens/build-radius-css.test.d.ts +0 -2
  913. package/dist/tokens/build-radius-css.test.d.ts.map +0 -1
  914. package/dist/tokens/chart-margin.test.d.ts +0 -2
  915. package/dist/tokens/chart-margin.test.d.ts.map +0 -1
  916. package/dist/tokens/density.test.d.ts +0 -2
  917. package/dist/tokens/density.test.d.ts.map +0 -1
  918. package/dist/tokens/derive-radius.test.d.ts +0 -2
  919. package/dist/tokens/derive-radius.test.d.ts.map +0 -1
  920. package/dist/tokens/derive.test.d.ts +0 -2
  921. package/dist/tokens/derive.test.d.ts.map +0 -1
  922. package/dist/tokens/palette.test.d.ts +0 -2
  923. package/dist/tokens/palette.test.d.ts.map +0 -1
  924. package/dist/tokens/text-scale.test.d.ts +0 -2
  925. package/dist/tokens/text-scale.test.d.ts.map +0 -1
  926. package/dist/vite-color-mix.test.d.ts +0 -2
  927. package/dist/vite-color-mix.test.d.ts.map +0 -1
  928. package/dist/vite.test.d.ts +0 -2
  929. package/dist/vite.test.d.ts.map +0 -1
  930. package/dist/widget-header/delta-badge.test.d.ts +0 -2
  931. package/dist/widget-header/delta-badge.test.d.ts.map +0 -1
  932. package/dist/widget-header/no-mantine.test.d.ts +0 -2
  933. package/dist/widget-header/no-mantine.test.d.ts.map +0 -1
  934. package/dist/widget-header/widget-header.test.d.ts +0 -2
  935. package/dist/widget-header/widget-header.test.d.ts.map +0 -1
  936. package/src/agent/adapter.test.ts +0 -1640
  937. package/src/agent/ai-sdk-transport.test.ts +0 -658
  938. package/src/agent/coalesce.test.ts +0 -387
  939. package/src/agent/foreign.test.ts +0 -51
  940. package/src/agent/id.test.ts +0 -169
  941. package/src/agent/merge.test.ts +0 -206
  942. package/src/agent/part-list.test.tsx +0 -112
  943. package/src/agent/parts.test.ts +0 -720
  944. package/src/agent/thread.test.ts +0 -220
  945. package/src/agent/transport.test.ts +0 -70
  946. package/src/agent/use-agent-stream.test.tsx +0 -287
  947. package/src/agent/use-agent-thread-runs.foreign.test.tsx +0 -138
  948. package/src/agent/use-agent-thread-runs.resume.test.tsx +0 -294
  949. package/src/agent/use-agent-thread-runs.test.tsx +0 -1120
  950. package/src/agent/use-agent-thread-runs.wedge.test.tsx +0 -387
  951. package/src/agent-chat/composer.test.tsx +0 -924
  952. package/src/agent-chat/relative-time.test.ts +0 -95
  953. package/src/agent-chat/thread-feed-row.test.tsx +0 -510
  954. package/src/agent-chat/thread-feed.test.tsx +0 -241
  955. package/src/agent-chat/thread-message.test.tsx +0 -1285
  956. package/src/agent-chat/thread-workspace.test.tsx +0 -169
  957. package/src/agent-chat/tool-chip.test.tsx +0 -139
  958. package/src/agent-chat/virtualize.type-guard.test.ts +0 -49
  959. package/src/charts/cursor/resolve.test.ts +0 -151
  960. package/src/charts/cursor/store.test.ts +0 -64
  961. package/src/charts/kinds/BandStrip.test.tsx +0 -282
  962. package/src/charts/kinds/Bars.test.tsx +0 -183
  963. package/src/charts/kinds/DualPanel.test.tsx +0 -527
  964. package/src/charts/kinds/MirroredBars.test.tsx +0 -232
  965. package/src/charts/kinds/MultiLine.test.tsx +0 -218
  966. package/src/charts/kinds/StackedArea.test.tsx +0 -114
  967. package/src/charts/kinds/ZonedLine.test.tsx +0 -147
  968. package/src/charts/layout/auto-margin.test.ts +0 -42
  969. package/src/charts/primitives/CartesianChart.test.tsx +0 -647
  970. package/src/charts/primitives/ChartCard.test.tsx +0 -66
  971. package/src/charts/primitives/ChartFrame.test.tsx +0 -142
  972. package/src/charts/primitives/ChartLegend.test.tsx +0 -78
  973. package/src/charts/primitives/ChartTooltip.test.tsx +0 -44
  974. package/src/charts/primitives/XZoneRects.test.tsx +0 -123
  975. package/src/charts/series.test.ts +0 -112
  976. package/src/charts/utils/domain.test.ts +0 -54
  977. package/src/charts/utils/measure-text.test.ts +0 -36
  978. package/src/cli/check-coverage.test.ts +0 -297
  979. package/src/cli/check-theme.test.ts +0 -837
  980. package/src/cli/help.test.ts +0 -170
  981. package/src/cli/init-sync.test.ts +0 -343
  982. package/src/cli/placement-engine.test.ts +0 -298
  983. package/src/cli/shipped-versions.test.ts +0 -83
  984. package/src/cli/tarball-parity.test.ts +0 -44
  985. package/src/cli/template-format.test.ts +0 -64
  986. package/src/cli/template-ledger.test.ts +0 -219
  987. package/src/cli/tokens-css.test.ts +0 -249
  988. package/src/cli/toolchain-wiring.test.ts +0 -1358
  989. package/src/cli/waiver-audit.test.ts +0 -215
  990. package/src/content/article-actions.test.ts +0 -78
  991. package/src/content/article-model.test.ts +0 -119
  992. package/src/content/block-split.test.ts +0 -75
  993. package/src/content/heading-components.test.tsx +0 -65
  994. package/src/content/markdown.test.tsx +0 -603
  995. package/src/content/prose.module.css.test.ts +0 -39
  996. package/src/content/sanitize.test.ts +0 -659
  997. package/src/content/slug.test.ts +0 -62
  998. package/src/controls/actions.test.tsx +0 -252
  999. package/src/controls/actions.type-guard.test.ts +0 -63
  1000. package/src/controls/control-group.test.tsx +0 -229
  1001. package/src/controls/controls.router.test.tsx +0 -1053
  1002. package/src/controls/filter-set.test.tsx +0 -472
  1003. package/src/controls/peer-boundary.test.ts +0 -85
  1004. package/src/controls/props-contract.test.tsx +0 -137
  1005. package/src/controls/range-filter.type-guard.test.tsx +0 -122
  1006. package/src/controls/sync-button.test.tsx +0 -183
  1007. package/src/dashboard/query-state.test.tsx +0 -152
  1008. package/src/dashboard/settings-section.test.tsx +0 -56
  1009. package/src/dashboard/stat-card.test.tsx +0 -385
  1010. package/src/data/data-table.test.tsx +0 -434
  1011. package/src/guard/check-source.test.ts +0 -3388
  1012. package/src/guard/grace.test.ts +0 -158
  1013. package/src/guard/guard-hook.test.ts +0 -203
  1014. package/src/provider/index.test.tsx +0 -101
  1015. package/src/provider/lab-theme.test.ts +0 -147
  1016. package/src/query/error-message.test.ts +0 -67
  1017. package/src/router-tanstack/multi-search-param-store.test.ts +0 -124
  1018. package/src/router-tanstack/nav.test.ts +0 -111
  1019. package/src/router-tanstack/search-param-store.test.ts +0 -135
  1020. package/src/router-tanstack/search-store.router.test.tsx +0 -882
  1021. package/src/router-tanstack/search-store.test.ts +0 -578
  1022. package/src/router-tanstack/use-nav.test.tsx +0 -187
  1023. package/src/section/section.test.tsx +0 -204
  1024. package/src/shell/app-mobile-nav.test.tsx +0 -403
  1025. package/src/shell/app-sidebar.test.tsx +0 -509
  1026. package/src/shell/index.test.tsx +0 -428
  1027. package/src/shell/mobile-nav-model.test.ts +0 -517
  1028. package/src/shell/page-bar.test.tsx +0 -316
  1029. package/src/state/fields.test.tsx +0 -512
  1030. package/src/state/persisted.test.ts +0 -91
  1031. package/src/styles.floor.test.ts +0 -36
  1032. package/src/theme/border-coverage.test.ts +0 -272
  1033. package/src/theme/contrast.test.ts +0 -354
  1034. package/src/theme/ctl-theme.test.tsx +0 -275
  1035. package/src/theme/ctl-tier-coverage.test.ts +0 -170
  1036. package/src/theme/density-option.test.ts +0 -96
  1037. package/src/theme/density-relations.test.ts +0 -506
  1038. package/src/theme/derive-theme.test.ts +0 -101
  1039. package/src/theme/divider-law.test.ts +0 -259
  1040. package/src/theme/fonts-option.test.ts +0 -75
  1041. package/src/theme/icon-slot.test.tsx +0 -275
  1042. package/src/theme/layout-rhythm-css.test.ts +0 -72
  1043. package/src/theme/radius-option.test.ts +0 -86
  1044. package/src/theme/radius.test.ts +0 -142
  1045. package/src/theme/shadow-surfaces.test.ts +0 -488
  1046. package/src/theme/spacing.test.ts +0 -495
  1047. package/src/theme/use-basalt-spacing.test.tsx +0 -55
  1048. package/src/theme-lab/derive-controls.test.ts +0 -94
  1049. package/src/theme-lab/derive-state.test.ts +0 -71
  1050. package/src/theme-lab/theme-lab.test.ts +0 -46
  1051. package/src/tokens/build-fonts-css.test.ts +0 -52
  1052. package/src/tokens/build-radius-css.test.ts +0 -25
  1053. package/src/tokens/chart-margin.test.ts +0 -39
  1054. package/src/tokens/density.test.ts +0 -259
  1055. package/src/tokens/derive-radius.test.ts +0 -62
  1056. package/src/tokens/derive.test.ts +0 -30
  1057. package/src/tokens/palette.test.ts +0 -114
  1058. package/src/tokens/text-scale.test.ts +0 -51
  1059. package/src/vite-color-mix.test.ts +0 -46
  1060. package/src/vite.test.ts +0 -423
  1061. package/src/widget-header/delta-badge.test.tsx +0 -60
  1062. package/src/widget-header/no-mantine.test.ts +0 -33
  1063. package/src/widget-header/widget-header.test.tsx +0 -187
@@ -1,495 +0,0 @@
1
- /**
2
- * The spacing gate — the level-0 acceptance baseline for `SPACE`/`SPACE_SCALE`/`SPACE_STEP`/
3
- * `SPACE_FIXED` (`tokens/palette.ts`).
4
- *
5
- * READ THIS BEFORE UPDATING A NUMBER HERE. This file locks the CURRENT shipped identity, not the
6
- * pre-tokenization one. It was born as the byte-identity gate for a tokenization-only refactor (the
7
- * token tables replacing the Mantine `spacing` size-scale, ~4 components' hardcoded
8
- * `styles`/`defaultProps` literals, and the `--vx-space-*` CSS vars), and it is still the ONLY thing
9
- * standing between a base-table typo and a silent app-wide layout shift. What it can NOT do is tell
10
- * you whether a diff to it was intended — updating this file is exactly how a deliberate retune
11
- * lands, and also exactly how a regression would hide. So: a change here must be a visual decision
12
- * taken on purpose, in the same commit as the base-table edit, with the reason in the commit body.
13
- * Never "fix the test" to make a red suite green.
14
- *
15
- * Deliberate departures from the original pre-tokenization numbers so far:
16
- *
17
- * - `SPACE_SCALE` (the app-wide Mantine `xs`..`xl` rhythm) went 10/12/16/18/24 → 11/13/18/20/26, and
18
- * 13 `sidebar*` gap/inset one-offs tightened ~15% — the component-roominess retune. The two moves
19
- * are deliberately opposite: roomier cards and generic layout, a tighter sidebar. `SPACE.rowInsetX`/
20
- * `rowInsetY`, the 4px stack rhythm, and the sidebar SIZES (`sidebarAvatarSize`,
21
- * `sidebarSearchTriggerHeight`, the two Menu widths) were held back on purpose — see that commit.
22
- * - `SPACE_STEP.stickyHeaderClearance` moved from 84 (the original literal) through an
23
- * intermediate single derived value of 108, then a responsive PAIR (Decision 3), to its FINAL shape:
24
- * ONE value, 60, DERIVED as `appShellHeaderHeight + anchors.stackMd`. Deriving it fixed the original
25
- * 84's drift from the header it was supposed to clear; the `stickyHeaderClearanceMobile` half of the
26
- * pair was deleted in 1.26.0 along with the two-row mobile header it existed for — the AppShell
27
- * header is one 48px row at every viewport now (law C14, `docs/CONTROLS-SPEC.md` §2.1), so
28
- * `appShellHeaderMobileHeight` and `appHeaderMobileActionsHeight` went with it. See `deriveSpacing`'s
29
- * doc in `tokens/palette.ts` for the full rationale. Every value NOT named above is still
30
- * byte-identical to the pre-tokenization number it replaced.
31
- */
32
- import { DEFAULT_THEME, mergeMantineTheme } from '@mantine/core'
33
- import type { MantineTheme } from '@mantine/core'
34
- import { describe, expect, test } from 'bun:test'
35
- import { buildPaletteCss, pxRem } from '../tokens'
36
- import { SPACE, SPACE_FIXED, SPACE_SCALE, SPACE_STEP } from '../tokens/palette'
37
- import { baseTheme } from './index'
38
-
39
- const theme: MantineTheme = mergeMantineTheme(DEFAULT_THEME, baseTheme)
40
-
41
- describe('SPACE anchors match the shipped identity', () => {
42
- test('rowInsetX is 10, rowInsetY is 6', () => {
43
- expect(SPACE.rowInsetX).toBe(10)
44
- expect(SPACE.rowInsetY).toBe(6)
45
- })
46
-
47
- test('the 4px vertical rhythm is unchanged', () => {
48
- expect(SPACE.stackXs).toBe(4)
49
- expect(SPACE.stackSm).toBe(8)
50
- expect(SPACE.stackMd).toBe(12)
51
- expect(SPACE.stackLg).toBe(16)
52
- expect(SPACE.stackXl).toBe(24)
53
- })
54
-
55
- test('inputHeight and controlHeight are both 42 (the shared control-height anchor)', () => {
56
- expect(SPACE.inputHeight).toBe(42)
57
- expect(SPACE.controlHeight).toBe(42)
58
- })
59
-
60
- test('the controls tier anchors are 20/24/30/36 (docs/CONTROLS-SPEC.md §5)', () => {
61
- expect(SPACE.controlHeightTag).toBe(20)
62
- expect(SPACE.controlHeightWidget).toBe(24)
63
- expect(SPACE.controlHeightCtl).toBe(30)
64
- expect(SPACE.touchControlHeight).toBe(36)
65
- })
66
- })
67
-
68
- describe('SPACE_SCALE matches the shipped identity — independent of SPACE even where it coincides', () => {
69
- test('xs/sm/md/lg/xl are 11/13/18/20/26', () => {
70
- expect(SPACE_SCALE.xs).toBe(11)
71
- expect(SPACE_SCALE.sm).toBe(13)
72
- expect(SPACE_SCALE.md).toBe(18)
73
- expect(SPACE_SCALE.lg).toBe(20)
74
- expect(SPACE_SCALE.xl).toBe(26)
75
- })
76
- })
77
-
78
- describe('SPACE_STEP one-offs match the shipped identity', () => {
79
- test('timelineBullet is 22', () => {
80
- expect(SPACE_STEP.timelineBullet).toBe(22)
81
- })
82
- })
83
-
84
- describe('SPACE_FIXED structurals match the shipped identity', () => {
85
- test('hairline is 1', () => {
86
- expect(SPACE_FIXED.hairline).toBe(1)
87
- })
88
-
89
- test('readingProgressHeight is 2 (not emitted as a var — see the assertion below)', () => {
90
- expect(SPACE_FIXED.readingProgressHeight).toBe(2)
91
- })
92
-
93
- test('segmentedTrackInset is 2 (not emitted as a var — see the assertion below)', () => {
94
- expect(SPACE_FIXED.segmentedTrackInset).toBe(2)
95
- })
96
- })
97
-
98
- describe('the Mantine spacing size-scale reaches theme.spacing as the expected rem strings', () => {
99
- // The px->rem conversion and the retuned bases, end to end (`pxRem`'s 16px root: 11px = 0.6875rem).
100
- // These WERE the pre-tokenization literals until the component-roominess retune — see the file doc.
101
- test('xs/sm/md/lg/xl resolve to the exact expected rem strings', () => {
102
- expect(baseTheme.spacing).toEqual({
103
- xs: '0.6875rem',
104
- sm: '0.8125rem',
105
- md: '1.125rem',
106
- lg: '1.25rem',
107
- xl: '1.625rem',
108
- })
109
- })
110
- })
111
-
112
- describe('every re-pointed component styles/defaultProps spacing value matches its shipped number', () => {
113
- test('NavLink root padding = 6px 10px', () => {
114
- expect(baseTheme.components?.['NavLink']?.styles?.['root']?.['padding']).toBe(
115
- 'var(--vx-space-row-inset-y) var(--vx-space-row-inset-x)',
116
- )
117
- })
118
-
119
- test('Menu item padding = 6px 10px', () => {
120
- expect(baseTheme.components?.['Menu']?.styles?.['item']?.['padding']).toBe(
121
- 'var(--vx-space-row-inset-y) var(--vx-space-row-inset-x)',
122
- )
123
- })
124
-
125
- test('SegmentedControl root padding = 2 (a density-exempt SPACE_FIXED literal, not a var)', () => {
126
- // `styles` is function-form (size='ctl' gates a label override — see `theme/index.ts`), not a
127
- // flat object, so it has to be called rather than indexed directly.
128
- const stylesFn = baseTheme.components?.['SegmentedControl']?.styles as
129
- | ((
130
- theme: unknown,
131
- props: { size?: string },
132
- ctx: unknown,
133
- ) => Record<string, Record<string, unknown>>)
134
- | undefined
135
- const resolved = stylesFn?.({}, {}, {})
136
- expect(resolved?.['root']?.['padding']).toBe('2px')
137
- })
138
-
139
- test('Timeline defaultProps stays bulletSize: 22, lineWidth: 1', () => {
140
- const tl = baseTheme.components?.['Timeline']
141
- expect(tl?.defaultProps?.['bulletSize']).toBe(22)
142
- expect(tl?.defaultProps?.['lineWidth']).toBe(1)
143
- })
144
-
145
- test('Progress defaultProps stays size: 6', () => {
146
- expect(baseTheme.components?.['Progress']?.defaultProps?.['size']).toBe(6)
147
- })
148
-
149
- test('NavLink root/label lineHeight reads the density-tracking var', () => {
150
- const nl = baseTheme.components?.['NavLink']
151
- expect(nl?.styles?.['root']?.['lineHeight']).toBe('var(--vx-space-row-line-height)')
152
- expect(nl?.styles?.['label']?.['lineHeight']).toBe('var(--vx-space-row-line-height)')
153
- })
154
-
155
- test('Input --input-height reconstructs BOTH the rem half and the --mantine-scale half', () => {
156
- // Mantine's own `--input-height-md` is `calc(2.625rem * var(--mantine-scale))` — rem-relative
157
- // to the root font size AND scale-aware. The override must reconstruct both, not flatten either
158
- // into a bare px value (see the `Input.extend` `vars` doc comment for why).
159
- const vars = baseTheme.components?.['Input']?.vars
160
- // Test-only stub props/ctx — the callback only reads `size`.
161
- const mdResult = vars?.(theme, { size: 'md' } as never, {} as never)
162
- expect(mdResult?.wrapper?.['--input-height']).toBe(
163
- 'calc(var(--vx-space-input-height) * var(--mantine-scale))',
164
- )
165
- })
166
-
167
- test('Input --input-height leaves a non-md size on Mantine own static height', () => {
168
- const vars = baseTheme.components?.['Input']?.vars
169
- const xsResult = vars?.(theme, { size: 'xs' } as never, {} as never)
170
- expect(xsResult?.wrapper?.['--input-height']).toBeUndefined()
171
- })
172
-
173
- test('Button --button-height reconstructs BOTH the rem half and the --mantine-scale half', () => {
174
- // Same reconstruction as Input above — Mantine's own `--button-height-md` is also
175
- // `calc(2.625rem * var(--mantine-scale))`. Single-sourced from the SAME `controlHeight` anchor
176
- // `--vx-space-input-height` reads (see `Button.extend`'s doc comment).
177
- const vars = baseTheme.components?.['Button']?.vars
178
- const mdResult = vars?.(theme, { size: 'md' } as never, {} as never)
179
- expect(mdResult?.root?.['--button-height']).toBe(
180
- 'calc(var(--vx-space-control-height) * var(--mantine-scale))',
181
- )
182
- })
183
-
184
- test('Button --button-height leaves a non-md size on Mantine own static height', () => {
185
- const vars = baseTheme.components?.['Button']?.vars
186
- const smResult = vars?.(theme, { size: 'sm' } as never, {} as never)
187
- expect(smResult?.root?.['--button-height']).toBeUndefined()
188
- })
189
-
190
- test('ActionIcon --ai-size reconstructs BOTH the rem half and the --mantine-scale half', () => {
191
- const vars = baseTheme.components?.['ActionIcon']?.vars
192
- const mdResult = vars?.(theme, { size: 'md' } as never, {} as never)
193
- expect(mdResult?.root?.['--ai-size']).toBe(
194
- 'calc(var(--vx-space-control-height) * var(--mantine-scale))',
195
- )
196
- })
197
-
198
- test('ActionIcon --ai-size leaves a non-md size on Mantine own static height', () => {
199
- const vars = baseTheme.components?.['ActionIcon']?.vars
200
- const smResult = vars?.(theme, { size: 'sm' } as never, {} as never)
201
- expect(smResult?.root?.['--ai-size']).toBeUndefined()
202
- })
203
- })
204
-
205
- describe('--vx-space-* is emitted from the SAME constants', () => {
206
- const css = buildPaletteCss()
207
-
208
- test('emits every SPACE anchor, unchanged', () => {
209
- expect(css).toContain('--vx-space-row-inset-x: 10px;')
210
- expect(css).toContain('--vx-space-row-inset-y: 6px;')
211
- expect(css).toContain('--vx-space-stack-xs: 4px;')
212
- expect(css).toContain('--vx-space-stack-sm: 8px;')
213
- expect(css).toContain('--vx-space-stack-md: 12px;')
214
- expect(css).toContain('--vx-space-stack-lg: 16px;')
215
- expect(css).toContain('--vx-space-stack-xl: 24px;')
216
- })
217
-
218
- test('does NOT emit SPACE_FIXED as a var', () => {
219
- expect(css).not.toContain('--vx-space-hairline')
220
- expect(css).not.toContain('--vx-space-reading-progress-height')
221
- expect(css).not.toContain('--vx-space-segmented-track-inset')
222
- })
223
-
224
- test('does NOT emit the dead numbers-only vars (JS-consumed, zero var() reads)', () => {
225
- // `SPACE_SCALE` (the generic Mantine spacing scale) already reaches production through
226
- // `theme.spacing` -> `--mantine-spacing-*`, not a `--vx-space-scale-*` var nobody read — and
227
- // `timelineBullet`/`chart*`/`progressBarSize` are JS-number-only (`Timeline`'s
228
- // `defaultProps.bulletSize`, `VX.legendGap`/`VX.margin`/`VX.dotR`, `Progress`'s
229
- // `defaultProps.size`). See `spaceDecls`'s doc in `tokens/index.ts`.
230
- expect(css).not.toContain('--vx-space-scale-xs')
231
- expect(css).not.toContain('--vx-space-scale-sm')
232
- expect(css).not.toContain('--vx-space-scale-md')
233
- expect(css).not.toContain('--vx-space-scale-lg')
234
- expect(css).not.toContain('--vx-space-scale-xl')
235
- expect(css).not.toContain('--vx-space-timeline-bullet')
236
- expect(css).not.toContain('--vx-space-chart-legend-gap')
237
- expect(css).not.toContain('--vx-space-chart-margin-top')
238
- expect(css).not.toContain('--vx-space-chart-margin-right')
239
- expect(css).not.toContain('--vx-space-chart-margin-bottom')
240
- expect(css).not.toContain('--vx-space-chart-margin-left')
241
- expect(css).not.toContain('--vx-space-chart-dot-r')
242
- expect(css).not.toContain('--vx-space-progress-bar-size')
243
- })
244
-
245
- test('emits the density pass additions: row line-height, input height, control height', () => {
246
- expect(css).toContain('--vx-space-row-line-height: 1.35;')
247
- // REM, not px — Mantine's own `--input-height-md`/`--button-height-md` are both
248
- // `calc(2.625rem * var(--mantine-scale))` (identical in `styles.css` and the `styles.layer.css`
249
- // variant consumers load), so flattening this into a flat px value would desync those heights
250
- // from the root font size AND `--mantine-scale`. See `tokens/index.ts`'s `spaceDecls` and
251
- // `theme/index.ts`'s `Input.extend`/`Button.extend`/`ActionIcon.extend` `vars` for the halves
252
- // of the fix.
253
- expect(css).toContain('--vx-space-input-height: 2.625rem;')
254
- expect(css).not.toContain('--vx-space-input-height: 42px;')
255
- expect(css).toContain('--vx-space-control-height: 2.625rem;')
256
- expect(css).not.toContain('--vx-space-control-height: 42px;')
257
- })
258
-
259
- test('emits the controls-tier heights in REM, and the control gap in px (docs/CONTROLS-SPEC.md §5)', () => {
260
- expect(css).toContain('--vx-space-control-height-tag: 1.25rem;')
261
- expect(css).toContain('--vx-space-control-height-widget: 1.5rem;')
262
- expect(css).toContain('--vx-space-control-height-ctl: 1.875rem;')
263
- expect(css).toContain('--vx-space-touch-control-height: 2.25rem;')
264
- expect(css).toContain('--vx-space-page-bar-row-height: 2.5rem;')
265
- expect(css).toContain('--vx-space-section-header-height: 2.25rem;')
266
- expect(css).toContain('--vx-space-widget-header-height: 1.75rem;')
267
- expect(css).toContain('--vx-space-sidebar-block-row-height: 2rem;')
268
- expect(css).toContain('--vx-space-control-gap: 6px;')
269
- expect(css).toContain('--vx-space-sheet-row-height: 2.75rem;')
270
- })
271
- })
272
-
273
- /**
274
- * The CSS-module spacing sweep (`docs/STATUS.md`) — every new `SPACE_STEP` one-off it introduced,
275
- * locked to its shipped literal AND, for the ones with a real `var()` consumer, to the exact
276
- * `--vx-space-*` declaration `buildPaletteCss()` emits for it. Table-driven (one row per constant)
277
- * instead of one `test()` per constant — this table is the single place a future retune of one of
278
- * these has to touch. `cssVar: null` marks a JS-number-only constant (no `var()` consumer anywhere —
279
- * `Timeline`'s `defaultProps.bulletSize`, `VX.legendGap`/`VX.margin`/`VX.dotR`, `Progress`'s
280
- * `defaultProps.size`) that deliberately has NO `--vx-space-*` declaration (see `spaceDecls`'s doc
281
- * in `tokens/index.ts`).
282
- */
283
- const SPACE_STEP_SWEEP: ReadonlyArray<
284
- readonly [
285
- key: keyof typeof SPACE_STEP,
286
- value: number,
287
- cssVar: string | null,
288
- /** Defaults to `'px'`. The controls-tier row/sheet heights emit REM (`pxRem`), same
289
- * reconstruction as `space-input-height`/`space-control-height` — see `spaceDecls`'s doc in
290
- * `tokens/index.ts`. */
291
- unit?: 'px' | 'rem',
292
- ]
293
- > = [
294
- // DERIVED, not an independent literal — see `deriveSpacing`'s doc (`tokens/palette.ts`, third
295
- // bullet) for why 60 (not 84) is the level-0 value: the ONE key deliberately exempt from the
296
- // "every SPACE_STEP number is locked at level 0" invariant this file otherwise enforces (locked
297
- // here, not skipped, precisely so a future regression back to 84 shows up as a failing assertion
298
- // rather than a silent revert).
299
- ['stickyHeaderClearance', 60, 'space-sticky-header-clearance'],
300
- ['navIconGap', 10, 'space-nav-icon-gap'],
301
- ['sidebarRegionGap', 10, 'space-sidebar-region-gap'],
302
- ['proseQuoteInsetY', 2, 'space-prose-quote-inset-y'],
303
- ['proseQuoteIndent', 12, 'space-prose-quote-indent'],
304
- ['proseInlineCodeInsetY', 1.5, 'space-prose-inline-code-inset-y'],
305
- ['proseInlineCodeInsetX', 5, 'space-prose-inline-code-inset-x'],
306
- ['proseCodeBlockInsetY', 10, 'space-prose-code-block-inset-y'],
307
- ['proseCodeBlockInsetX', 12, 'space-prose-code-block-inset-x'],
308
- ['proseHeadingAnchorGap', 6, 'space-prose-heading-anchor-gap'],
309
- ['proseTableCellInsetY', 5, 'space-prose-table-cell-inset-y'],
310
- ['proseTableCellInsetX', 8, 'space-prose-table-cell-inset-x'],
311
- ['proseChatListGapBottom', 10, 'space-prose-chat-list-gap-bottom'],
312
- ['proseChatListIndent', 20, 'space-prose-chat-list-indent'],
313
- ['proseChatListItemGap', 3, 'space-prose-chat-list-item-gap'],
314
- ['proseChatNestedListGap', 2, 'space-prose-chat-nested-list-gap'],
315
- ['proseChatHeadingGapTop', 14, 'space-prose-chat-heading-gap-top'],
316
- ['proseChatHeadingGapBottom', 6, 'space-prose-chat-heading-gap-bottom'],
317
- ['proseArticleParagraphGap', 14, 'space-prose-article-paragraph-gap'],
318
- ['proseArticleListGapTop', 6, 'space-prose-article-list-gap-top'],
319
- ['proseArticleListGapBottom', 14, 'space-prose-article-list-gap-bottom'],
320
- ['proseArticleListIndent', 22, 'space-prose-article-list-indent'],
321
- ['proseArticleH1GapTop', 6, 'space-prose-article-h1-gap-top'],
322
- ['proseArticleH1GapBottom', 14, 'space-prose-article-h1-gap-bottom'],
323
- ['proseArticleHeadingGapTop', 30, 'space-prose-article-heading-gap-top'],
324
- ['proseArticleHeadingGapBottom', 10, 'space-prose-article-heading-gap-bottom'],
325
- ['proseArticleH2RuleGap', 6, 'space-prose-article-h2-rule-gap'],
326
- ['proseArticleBlockGap', 18, 'space-prose-article-block-gap'],
327
- ['articleColumnGap', 56, 'space-article-column-gap'],
328
- ['articleTocRailWidth', 220, 'space-article-toc-rail-width'],
329
- ['articleHeaderGap', 10, 'space-article-header-gap'],
330
- ['articleHeaderPaddingBottom', 20, 'space-article-header-padding-bottom'],
331
- ['articleHeaderMarginBottom', 28, 'space-article-header-margin-bottom'],
332
- ['articleMetaRowGap', 6, 'space-article-meta-row-gap'],
333
- ['articleFooterGap', 12, 'space-article-footer-gap'],
334
- ['articleFooterMarginTop', 40, 'space-article-footer-margin-top'],
335
- ['articleFooterPaddingTop', 20, 'space-article-footer-padding-top'],
336
- ['articleNavTargetGap', 6, 'space-article-nav-target-gap'],
337
- ['codeBlockHeaderGap', 8, 'space-code-block-header-gap'],
338
- ['codeBlockHeaderInsetY', 6, 'space-code-block-header-inset-y'],
339
- ['codeBlockHeaderInsetRight', 10, 'space-code-block-header-inset-right'],
340
- ['codeBlockContentInsetX', 14, 'space-code-block-content-inset-x'],
341
- ['codeBlockHeaderRightGap', 6, 'space-code-block-header-right-gap'],
342
- ['codeBlockBodyInsetY', 10, 'space-code-block-body-inset-y'],
343
- ['codeBlockFloatingCopyOffset', 6, 'space-code-block-floating-copy-offset'],
344
- ['calloutInsetY', 10, 'space-callout-inset-y'],
345
- ['calloutInsetX', 14, 'space-callout-inset-x'],
346
- ['calloutTitleRowGap', 8, 'space-callout-title-row-gap'],
347
- ['tocRootGap', 6, 'space-toc-root-gap'],
348
- ['tocLinkInsetY', 4, 'space-toc-link-inset-y'],
349
- ['tocLinkIndent', 12, 'space-toc-link-indent'],
350
- ['tocSubIndent', 24, 'space-toc-sub-indent'],
351
- ['articleCardTagsGap', 4, 'space-article-card-tags-gap'],
352
- ['articleCardTagInsetY', 1, 'space-article-card-tag-inset-y'],
353
- ['articleCardTagInsetX', 6, 'space-article-card-tag-inset-x'],
354
- ['articleCardMetaGapTop', 2, 'space-article-card-meta-gap-top'],
355
- ['guideBodyGapBottom', 8, 'space-guide-body-gap-bottom'],
356
- ['guideFooterGapTop', 20, 'space-guide-footer-gap-top'],
357
- ['guideFooterInsetTop', 16, 'space-guide-footer-inset-top'],
358
- ['sidebarSearchGap', 7, 'space-sidebar-search-gap'],
359
- ['sidebarSearchTriggerHeight', 32, 'space-sidebar-search-trigger-height'],
360
- ['settingsRowInsetY', 10, 'space-settings-row-inset-y'],
361
- ['settingsRowGap', 16, 'space-settings-row-gap'],
362
- ['mermaidContainerInset', 16, 'space-mermaid-container-inset'],
363
- ['sidebarBrandInsetTop', 2, 'space-sidebar-brand-inset-top'],
364
- ['sidebarBrandInsetX', 7, 'space-sidebar-brand-inset-x'],
365
- ['sidebarSectionGap', 12, 'space-sidebar-section-gap'],
366
- ['sidebarAccountInsetTop', 9, 'space-sidebar-account-inset-top'],
367
- ['sidebarAccountInsetX', 7, 'space-sidebar-account-inset-x'],
368
- ['sidebarAccountInsetBottom', 2, 'space-sidebar-account-inset-bottom'],
369
- ['sidebarAvatarSize', 28, 'space-sidebar-avatar-size'],
370
- ['sidebarSectionLabelGap', 2, 'space-sidebar-section-label-gap'],
371
- ['sidebarChildListGapTop', 2, 'space-sidebar-child-list-gap-top'],
372
- ['sidebarChildListGapBottom', 3, 'space-sidebar-child-list-gap-bottom'],
373
- ['sidebarChildListIndent', 15, 'space-sidebar-child-list-indent'],
374
- ['sidebarChildRowInsetY', 4, 'space-sidebar-child-row-inset-y'],
375
- ['sidebarChildRowIndent', 12, 'space-sidebar-child-row-indent'],
376
- // JS-number-only (`app-sidebar-account.tsx`/`app-sidebar.tsx` read both via `useBasaltSpacing()` —
377
- // Mantine's `<Menu width={…}>` also takes a number, not a `var()` string).
378
- ['sidebarAccountMenuWidth', 220, null],
379
- ['sidebarSettingsMenuWidth', 200, null],
380
- // JS-number-only (`shell/index.tsx` reads all three via `useBasaltSpacing()` — Mantine's AppShell
381
- // `header`/`navbar` props take numbers, not `var()` strings) — see `spaceDecls`'s doc in
382
- // `tokens/index.ts` for why a `--vx-space-app-shell-*` declaration would have zero consumers.
383
- ['appShellHeaderHeight', 48, null],
384
- ['appShellNavbarWidth', 256, null],
385
- ['appShellNavbarRailWidth', 48, null],
386
- ['mobileNavTabGap', 3, 'space-mobile-nav-tab-gap'],
387
- // JS-number-only, and for the same two reasons the six above are: `shell/index.tsx` hands
388
- // `mobileNavBarHeight` to AppShell's `footer.height` (a number, not a `var()` string), and
389
- // `app-mobile-nav.tsx` hands `mobileNavMenuWidth` to `<Menu width={…}>`.
390
- ['mobileNavBarHeight', 56, null],
391
- ['mobileNavIconSize', 24, 'space-mobile-nav-icon-size'],
392
- ['mobileNavTabInsetY', 2, 'space-mobile-nav-tab-inset-y'],
393
- ['mobileNavTabInsetX', 12, 'space-mobile-nav-tab-inset-x'],
394
- ['mobileNavRowHeight', 44, 'space-mobile-nav-row-height'],
395
- ['mobileNavMenuWidth', 232, null],
396
- ['agentRailInsetX', 10, 'space-agent-rail-inset-x'],
397
- ['agentPartGapTop', 6, 'space-agent-part-gap-top'],
398
- ['agentCodeInset', 8, 'space-agent-code-inset'],
399
- ['agentErrorInsetY', 8, 'space-agent-error-inset-y'],
400
- ['agentErrorInsetX', 10, 'space-agent-error-inset-x'],
401
- ['agentScrollButtonGapTop', 8, 'space-agent-scroll-button-gap-top'],
402
- ['agentMessageInsetY', 10, 'space-agent-message-inset-y'],
403
- ['agentMessageInsetX', 12, 'space-agent-message-inset-x'],
404
- ['agentTranscriptInset', 16, 'space-agent-transcript-inset'],
405
- ['badgeInsetY', 2, 'space-badge-inset-y'],
406
- ['badgeInsetX', 7, 'space-badge-inset-x'],
407
- ['statCardGap', 8, 'space-stat-card-gap'],
408
- ['virtualRowInsetY', 8, 'space-virtual-row-inset-y'],
409
- ['virtualRowInsetX', 12, 'space-virtual-row-inset-x'],
410
- ['chartLegendGap', 22, null],
411
- ['chartMarginTop', 12, null],
412
- ['chartMarginRight', 16, null],
413
- ['chartMarginRightAxis', 40, null],
414
- ['chartMarginBottom', 30, null],
415
- ['chartMarginLeft', 44, null],
416
- ['chartDotR', 5, null],
417
- ['progressBarSize', 6, null],
418
- ['timelineBullet', 22, null],
419
- // Controls tier row/gap heights (`docs/CONTROLS-SPEC.md` §5) — emitted in REM for the heights
420
- // (`pageBarRowHeight`/`sectionHeaderHeight`/`widgetHeaderHeight`/`sidebarBlockRowHeight`/
421
- // `sheetRowHeight`, same `pxRem` reconstruction as `space-input-height`), px for the gap.
422
- ['pageBarRowHeight', 40, 'space-page-bar-row-height', 'rem'],
423
- ['sectionHeaderHeight', 36, 'space-section-header-height', 'rem'],
424
- ['widgetHeaderHeight', 28, 'space-widget-header-height', 'rem'],
425
- ['sidebarBlockRowHeight', 32, 'space-sidebar-block-row-height', 'rem'],
426
- ['controlGap', 6, 'space-control-gap'],
427
- ['sheetRowHeight', 44, 'space-sheet-row-height', 'rem'],
428
- // Applied as JS numbers in `Table.extend`'s `styles.th`/`styles.td` `height`, so — like
429
- // `progressBarSize` — neither has a `--vx-space-*` declaration to assert.
430
- ['tableHeaderHeight', 36, null],
431
- ['tableRowHeight', 40, null],
432
- ]
433
-
434
- describe('SPACE_STEP CSS-module spacing-sweep one-offs match the shipped identity', () => {
435
- test('every constant matches its shipped literal', () => {
436
- for (const [key, value] of SPACE_STEP_SWEEP) {
437
- expect(SPACE_STEP[key]).toBe(value)
438
- }
439
- })
440
-
441
- test('every constant with a cssVar is emitted as its own --vx-space-* declaration, unchanged', () => {
442
- const css = buildPaletteCss()
443
- for (const [, value, cssVar, unit = 'px'] of SPACE_STEP_SWEEP) {
444
- if (cssVar === null) continue
445
- const expected = unit === 'rem' ? pxRem(value) : `${value}px`
446
- expect(css).toContain(`--vx-${cssVar}: ${expected};`)
447
- }
448
- })
449
-
450
- test('every cssVar: null constant is NOT emitted as a --vx-space-* declaration', () => {
451
- const css = buildPaletteCss()
452
- const jsOnlyKeys = SPACE_STEP_SWEEP.filter(([, , cssVar]) => cssVar === null).map(
453
- ([key]) => key,
454
- )
455
- expect(jsOnlyKeys).toEqual([
456
- 'sidebarAccountMenuWidth',
457
- 'sidebarSettingsMenuWidth',
458
- 'appShellHeaderHeight',
459
- 'appShellNavbarWidth',
460
- 'appShellNavbarRailWidth',
461
- 'mobileNavBarHeight',
462
- 'mobileNavMenuWidth',
463
- 'chartLegendGap',
464
- 'chartMarginTop',
465
- 'chartMarginRight',
466
- 'chartMarginRightAxis',
467
- 'chartMarginBottom',
468
- 'chartMarginLeft',
469
- 'chartDotR',
470
- 'progressBarSize',
471
- 'timelineBullet',
472
- 'tableHeaderHeight',
473
- 'tableRowHeight',
474
- ])
475
- expect(css).not.toContain('--vx-space-sidebar-account-menu-width')
476
- expect(css).not.toContain('--vx-space-sidebar-settings-menu-width')
477
- expect(css).not.toContain('--vx-space-app-shell-header-height')
478
- expect(css).not.toContain('--vx-space-app-shell-navbar-width')
479
- expect(css).not.toContain('--vx-space-app-shell-navbar-rail-width')
480
- expect(css).not.toContain('--vx-space-mobile-nav-bar-height')
481
- expect(css).not.toContain('--vx-space-mobile-nav-menu-width')
482
- expect(css).not.toContain('--vx-space-chart-legend-gap')
483
- expect(css).not.toContain('--vx-space-progress-bar-size')
484
- expect(css).not.toContain('--vx-space-timeline-bullet')
485
- expect(css).not.toContain('--vx-space-table-header-height')
486
- expect(css).not.toContain('--vx-space-table-row-height')
487
- })
488
-
489
- test('the sweep table covers every SPACE_STEP key', () => {
490
- const tableKeys = new Set(SPACE_STEP_SWEEP.map(([key]) => key))
491
- for (const key of Object.keys(SPACE_STEP)) {
492
- expect(tableKeys.has(key as keyof typeof SPACE_STEP)).toBe(true)
493
- }
494
- })
495
- })
@@ -1,55 +0,0 @@
1
- /**
2
- * `useBasaltSpacing` — the only path by which a non-default density level reaches `BasaltShell`'s
3
- * AppShell header/navbar/rail dimensions and `AppSidebar`/`SidebarAccount`'s `<Menu width>` (see the
4
- * hook's own doc). Nothing previously asserted it actually reads `theme.other.basaltDensity` off the
5
- * running Mantine theme — that wiring could silently break (e.g. a typo'd key, or a dropped fallback)
6
- * with every other density test still green, since those all exercise `deriveSpacing`/
7
- * `createBasaltTheme` directly, never this hook.
8
- *
9
- * A DOM harness now exists (`tests/setup/dom.ts`, preloaded via the root `bunfig.toml`; see
10
- * `tokens/build-fonts-css.test.ts`'s doc for that same note elsewhere) — this suite still uses
11
- * `react-dom/server`'s `renderToStaticMarkup` deliberately: it's enough to invoke a hook inside a
12
- * REAL `MantineProvider` tree without a DOM, so these assertions exercise the actual
13
- * `useMantineTheme()` read, not a re-implementation of it. Converting to the DOM harness would only
14
- * be worth it if a future assertion here needed the hook to react to a live DOM event (e.g. a
15
- * `ResizeObserver`-driven remeasure) rather than a single render-time read.
16
- */
17
- import { MantineProvider } from '@mantine/core'
18
- import type { MantineProviderProps } from '@mantine/core'
19
- import { describe, expect, test } from 'bun:test'
20
- import { renderToStaticMarkup } from 'react-dom/server'
21
- import { DEFAULT_SPACE_VALUES, deriveSpacing } from '../tokens/palette'
22
- import { useBasaltSpacing } from './use-basalt-spacing'
23
-
24
- function readBasaltSpacing(theme?: MantineProviderProps['theme']) {
25
- let captured: ReturnType<typeof useBasaltSpacing> | undefined
26
- function Probe() {
27
- captured = useBasaltSpacing()
28
- return null
29
- }
30
- renderToStaticMarkup(
31
- // exactOptionalPropertyTypes forbids an explicit theme={undefined} — spread only when set
32
- <MantineProvider {...(theme !== undefined ? { theme } : {})}>
33
- <Probe />
34
- </MantineProvider>,
35
- )
36
- return captured
37
- }
38
-
39
- describe('useBasaltSpacing', () => {
40
- test('falls back to DEFAULT_SPACE_VALUES when theme.other.basaltDensity is unset', () => {
41
- // Fails if the hook drops its `?? DEFAULT_SPACE_VALUES` fallback (e.g. returns `undefined` at
42
- // the shipped default density instead).
43
- expect(readBasaltSpacing()).toEqual(DEFAULT_SPACE_VALUES)
44
- })
45
-
46
- test('reads the resolved values off theme.other.basaltDensity when present', () => {
47
- const retuned = deriveSpacing(-2)
48
- // Fails if the hook stops reading `theme.other.basaltDensity` (e.g. always returns
49
- // `DEFAULT_SPACE_VALUES` regardless of the running theme).
50
- expect(readBasaltSpacing({ other: { basaltDensity: retuned } })).toEqual(retuned)
51
- expect(readBasaltSpacing({ other: { basaltDensity: retuned } })).not.toEqual(
52
- DEFAULT_SPACE_VALUES,
53
- )
54
- })
55
- })
@@ -1,94 +0,0 @@
1
- /**
2
- * `DeriveControls`'s persisted-state migrations. v2→v3 bumped `STORAGE_VERSION` to `3` when
3
- * `density` was added alongside `radius` + the six color knobs; v3→v4 bumped it again when
4
- * `deriveSpacing`'s accepted range narrowed from `[-5, 5]` to `[-3, 3]` (see `derive-controls.tsx`'s
5
- * module doc comment for both). No `migrate` is passed to `createPersistedState`, so a version
6
- * mismatch falls through to `opts.initial` (`../state`'s `parseStorage`) rather than carrying
7
- * `parsed.value` forward — `parsePersistedDeriveState` is the schema validator that rejection
8
- * ultimately routes through.
9
- *
10
- * Tested at the validator seam directly (not through `createPersistedState`'s localStorage
11
- * round-trip): no DOM render harness is configured in this package (see
12
- * `../provider/build-fonts-css.test.ts`), and this repo's test environment has no `localStorage`
13
- * either (see `../router-tanstack/multi-search-param-store.test.ts`).
14
- */
15
- import { describe, expect, test } from 'bun:test'
16
- import { DEFAULT_DERIVE_CONFIG } from '../tokens/derive'
17
- import { DEFAULT_STATE, parsePersistedDeriveState } from './derive-controls'
18
-
19
- /** A v1-shaped persisted value — the six color knobs + `applied`, no `radius`/`density` key at all. */
20
- const V1_SHAPED_VALUE = {
21
- accent: DEFAULT_DERIVE_CONFIG.accent,
22
- neutral: DEFAULT_DERIVE_CONFIG.neutral,
23
- lightLevel: DEFAULT_DERIVE_CONFIG.lightLevel,
24
- darkLevel: DEFAULT_DERIVE_CONFIG.darkLevel,
25
- vibrancy: DEFAULT_DERIVE_CONFIG.vibrancy,
26
- accentBrightness: DEFAULT_DERIVE_CONFIG.accentBrightness,
27
- applied: false,
28
- }
29
-
30
- /** A v2-shaped persisted value — the six color knobs + `radius` + `applied`, no `density` key. */
31
- const V2_SHAPED_VALUE = { ...V1_SHAPED_VALUE, radius: 0 }
32
-
33
- describe('a v1-shaped persisted value (no radius/density key) is rejected', () => {
34
- test('parsePersistedDeriveState returns null, not a value with radius/density: undefined', () => {
35
- const parsed = parsePersistedDeriveState(V1_SHAPED_VALUE)
36
- expect(parsed).toBeNull()
37
- })
38
- })
39
-
40
- describe('a v2-shaped persisted value (radius present, no density key) is rejected', () => {
41
- test('parsePersistedDeriveState returns null, not a value with density: undefined', () => {
42
- const parsed = parsePersistedDeriveState(V2_SHAPED_VALUE)
43
- expect(parsed).toBeNull()
44
- })
45
-
46
- test('DEFAULT_STATE (what a rejection falls back to via parseStorage) has a real density', () => {
47
- // No `migrate` is passed to `createPersistedState`, so a version mismatch (v1/v2 vs the current
48
- // v3) sets the pre-validation value to `opts.initial` — DEFAULT_STATE — which this validator
49
- // must then accept, landing a real `radius: 0` / `density: 0`, never `undefined`.
50
- expect(parsePersistedDeriveState(DEFAULT_STATE)).toEqual(DEFAULT_STATE)
51
- expect(DEFAULT_STATE.radius).toBe(0)
52
- expect(DEFAULT_STATE.density).toBe(0)
53
- })
54
- })
55
-
56
- describe('a v3-shaped persisted value (radius + density present) round-trips', () => {
57
- test('parsePersistedDeriveState accepts it and preserves both levels', () => {
58
- const v3Value = { ...V2_SHAPED_VALUE, radius: 3, density: -2 }
59
- expect(parsePersistedDeriveState(v3Value)).toEqual(v3Value)
60
- })
61
-
62
- test('an out-of-range density level is rejected', () => {
63
- const badValue = { ...V2_SHAPED_VALUE, density: 99 }
64
- expect(parsePersistedDeriveState(badValue)).toBeNull()
65
- })
66
-
67
- test('a non-integer density level is rejected', () => {
68
- const badValue = { ...V2_SHAPED_VALUE, density: 1.5 }
69
- expect(parsePersistedDeriveState(badValue)).toBeNull()
70
- })
71
- })
72
-
73
- describe('a pre-v4 envelope holding a density outside the narrowed [-3, 3] range is rejected', () => {
74
- // The exact live-crash path the v3->v4 bump exists to prevent: a v3 envelope from an earlier
75
- // session could hold `density: 4` or `density: -5`, both valid under the OLD `isLevel` (-5..5)
76
- // check that guarded `density` pre-v4. Falling through to `DEFAULT_STATE` here, instead of
77
- // reaching `deriveSpacing` at render, is what the version bump buys.
78
- test('density: 4 (in-range for radius, out of range for density) is rejected', () => {
79
- const badValue = { ...V2_SHAPED_VALUE, density: 4 }
80
- expect(parsePersistedDeriveState(badValue)).toBeNull()
81
- })
82
-
83
- test('density: -5 (the old lower bound) is rejected', () => {
84
- const badValue = { ...V2_SHAPED_VALUE, density: -5 }
85
- expect(parsePersistedDeriveState(badValue)).toBeNull()
86
- })
87
-
88
- test('radius: -5/5 stays accepted — only density narrowed', () => {
89
- const lowRadius = { ...V2_SHAPED_VALUE, radius: -5, density: -3 }
90
- const highRadius = { ...V2_SHAPED_VALUE, radius: 5, density: 3 }
91
- expect(parsePersistedDeriveState(lowRadius)).toEqual(lowRadius)
92
- expect(parsePersistedDeriveState(highRadius)).toEqual(highRadius)
93
- })
94
- })