basalt-ui 1.26.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 (1069) hide show
  1. package/AGENTS.md +23 -23
  2. package/CHANGELOG.md +67 -0
  3. package/MIGRATING.md +896 -37
  4. package/README.md +33 -3
  5. package/agent/rules/basalt-batteries.md +25 -10
  6. package/agent/rules/basalt-controls.md +73 -43
  7. package/agent/rules/basalt-mantine.md +17 -6
  8. package/agent/rules/basalt-state.md +5 -0
  9. package/agent/rules/basalt-tokens.md +1 -1
  10. package/configs/oxlint-plugin.js +1286 -73
  11. package/configs/oxlint-plugin.test.ts +1338 -29
  12. package/configs/oxlint.json +12 -5
  13. package/dist/agent/coalesce.d.ts.map +1 -1
  14. package/dist/agent/coalesce.js +2 -1
  15. package/dist/agent/merge.d.ts.map +1 -1
  16. package/dist/agent/merge.js +2 -1
  17. package/dist/agent/part-list.d.ts.map +1 -1
  18. package/dist/agent/part-list.js +2 -0
  19. package/dist/agent/stick-to-bottom.d.ts +3 -6
  20. package/dist/agent/stick-to-bottom.d.ts.map +1 -1
  21. package/dist/agent/stick-to-bottom.js +6 -3
  22. package/dist/agent-chat/composer.d.ts +6 -2
  23. package/dist/agent-chat/composer.d.ts.map +1 -1
  24. package/dist/agent-chat/composer.js +49 -33
  25. package/dist/agent-chat/relative-time.d.ts +0 -9
  26. package/dist/agent-chat/relative-time.d.ts.map +1 -1
  27. package/dist/agent-chat/relative-time.js +2 -1
  28. package/dist/agent-chat/thread-detail-panel.d.ts +3 -2
  29. package/dist/agent-chat/thread-detail-panel.d.ts.map +1 -1
  30. package/dist/agent-chat/thread-detail-panel.js +8 -5
  31. package/dist/agent-chat/thread-feed-row.d.ts +2 -1
  32. package/dist/agent-chat/thread-feed-row.d.ts.map +1 -1
  33. package/dist/agent-chat/thread-feed-row.js +92 -92
  34. package/dist/agent-chat/thread-feed.d.ts +3 -2
  35. package/dist/agent-chat/thread-feed.d.ts.map +1 -1
  36. package/dist/agent-chat/thread-feed.js +8 -3
  37. package/dist/agent-chat/thread-message.d.ts +4 -3
  38. package/dist/agent-chat/thread-message.d.ts.map +1 -1
  39. package/dist/agent-chat/thread-message.js +70 -31
  40. package/dist/agent-chat/thread-outcome-card.d.ts +3 -2
  41. package/dist/agent-chat/thread-outcome-card.d.ts.map +1 -1
  42. package/dist/agent-chat/thread-outcome-card.js +9 -2
  43. package/dist/agent-chat/thread-workspace.d.ts +7 -2
  44. package/dist/agent-chat/thread-workspace.d.ts.map +1 -1
  45. package/dist/agent-chat/thread-workspace.js +62 -29
  46. package/dist/agent-chat/tool-chip.d.ts +3 -2
  47. package/dist/agent-chat/tool-chip.d.ts.map +1 -1
  48. package/dist/agent-chat/tool-chip.js +7 -2
  49. package/dist/charts/hooks/useBandPlot.d.ts.map +1 -1
  50. package/dist/charts/hooks/useBandPlot.js +15 -8
  51. package/dist/charts/index.d.ts +8 -7
  52. package/dist/charts/index.d.ts.map +1 -1
  53. package/dist/charts/index.js +45 -5
  54. package/dist/charts/kinds/BandStrip.d.ts +10 -7
  55. package/dist/charts/kinds/BandStrip.d.ts.map +1 -1
  56. package/dist/charts/kinds/BandStrip.js +12 -7
  57. package/dist/charts/kinds/Bars.d.ts +12 -6
  58. package/dist/charts/kinds/Bars.d.ts.map +1 -1
  59. package/dist/charts/kinds/Bars.js +37 -11
  60. package/dist/charts/kinds/Donut.d.ts +6 -5
  61. package/dist/charts/kinds/Donut.d.ts.map +1 -1
  62. package/dist/charts/kinds/Donut.js +19 -2
  63. package/dist/charts/kinds/DualPanel.d.ts +6 -5
  64. package/dist/charts/kinds/DualPanel.d.ts.map +1 -1
  65. package/dist/charts/kinds/DualPanel.js +36 -8
  66. package/dist/charts/kinds/Heatmap.d.ts +10 -6
  67. package/dist/charts/kinds/Heatmap.d.ts.map +1 -1
  68. package/dist/charts/kinds/Heatmap.js +58 -31
  69. package/dist/charts/kinds/MirroredBars.d.ts +6 -5
  70. package/dist/charts/kinds/MirroredBars.d.ts.map +1 -1
  71. package/dist/charts/kinds/MirroredBars.js +9 -2
  72. package/dist/charts/kinds/MultiLine.d.ts +11 -6
  73. package/dist/charts/kinds/MultiLine.d.ts.map +1 -1
  74. package/dist/charts/kinds/MultiLine.js +24 -15
  75. package/dist/charts/kinds/StackedArea.d.ts +18 -8
  76. package/dist/charts/kinds/StackedArea.d.ts.map +1 -1
  77. package/dist/charts/kinds/StackedArea.js +29 -4
  78. package/dist/charts/kinds/ZonedLine.d.ts +12 -8
  79. package/dist/charts/kinds/ZonedLine.d.ts.map +1 -1
  80. package/dist/charts/kinds/ZonedLine.js +33 -23
  81. package/dist/charts/layout/auto-margin.d.ts +65 -8
  82. package/dist/charts/layout/auto-margin.d.ts.map +1 -1
  83. package/dist/charts/layout/auto-margin.js +45 -10
  84. package/dist/charts/layout/log-ticks.d.ts +27 -0
  85. package/dist/charts/layout/log-ticks.d.ts.map +1 -0
  86. package/dist/charts/layout/log-ticks.js +42 -0
  87. package/dist/charts/primitives/Axes.d.ts +11 -2
  88. package/dist/charts/primitives/Axes.d.ts.map +1 -1
  89. package/dist/charts/primitives/Axes.js +15 -5
  90. package/dist/charts/primitives/CartesianChart.d.ts +45 -7
  91. package/dist/charts/primitives/CartesianChart.d.ts.map +1 -1
  92. package/dist/charts/primitives/CartesianChart.js +86 -28
  93. package/dist/charts/primitives/ChartCard.d.ts +27 -2
  94. package/dist/charts/primitives/ChartCard.d.ts.map +1 -1
  95. package/dist/charts/primitives/ChartCard.js +37 -17
  96. package/dist/charts/primitives/ChartFrame.d.ts +30 -4
  97. package/dist/charts/primitives/ChartFrame.d.ts.map +1 -1
  98. package/dist/charts/primitives/ChartFrame.js +45 -15
  99. package/dist/charts/primitives/ChartLegend.d.ts +13 -2
  100. package/dist/charts/primitives/ChartLegend.d.ts.map +1 -1
  101. package/dist/charts/primitives/ChartLegend.js +33 -13
  102. package/dist/charts/primitives/ChartPending.d.ts +77 -4
  103. package/dist/charts/primitives/ChartPending.d.ts.map +1 -1
  104. package/dist/charts/primitives/ChartPending.js +100 -6
  105. package/dist/charts/primitives/ChartTooltip.d.ts +7 -0
  106. package/dist/charts/primitives/ChartTooltip.d.ts.map +1 -1
  107. package/dist/charts/primitives/ChartTooltip.js +18 -5
  108. package/dist/charts/primitives/Crosshair.d.ts +3 -0
  109. package/dist/charts/primitives/Crosshair.d.ts.map +1 -1
  110. package/dist/charts/primitives/Crosshair.js +3 -1
  111. package/dist/charts/primitives/chart-frame-layout.d.ts +95 -0
  112. package/dist/charts/primitives/chart-frame-layout.d.ts.map +1 -0
  113. package/dist/charts/primitives/chart-frame-layout.js +89 -0
  114. package/dist/charts/primitives/chart-tier.d.ts +16 -0
  115. package/dist/charts/primitives/chart-tier.d.ts.map +1 -0
  116. package/dist/charts/primitives/chart-tier.js +20 -0
  117. package/dist/charts/series.d.ts +55 -1
  118. package/dist/charts/series.d.ts.map +1 -1
  119. package/dist/charts/series.js +27 -1
  120. package/dist/charts/sparklines/BarSparkline.d.ts +3 -3
  121. package/dist/charts/sparklines/BarSparkline.d.ts.map +1 -1
  122. package/dist/charts/sparklines/BarSparkline.js +9 -3
  123. package/dist/charts/sparklines/LineSparkline.d.ts +3 -3
  124. package/dist/charts/sparklines/LineSparkline.d.ts.map +1 -1
  125. package/dist/charts/sparklines/LineSparkline.js +15 -3
  126. package/dist/charts/sparklines/index.d.ts +2 -2
  127. package/dist/charts/sparklines/index.d.ts.map +1 -1
  128. package/dist/charts/utils/format.d.ts +92 -2
  129. package/dist/charts/utils/format.d.ts.map +1 -1
  130. package/dist/charts/utils/format.js +64 -1
  131. package/dist/charts/utils/ticks.d.ts +81 -2
  132. package/dist/charts/utils/ticks.d.ts.map +1 -1
  133. package/dist/charts/utils/ticks.js +54 -4
  134. package/dist/cli/index.d.ts.map +1 -1
  135. package/dist/cli/index.js +2 -2
  136. package/dist/commands/ShortcutsHelp.d.ts +3 -2
  137. package/dist/commands/ShortcutsHelp.d.ts.map +1 -1
  138. package/dist/commands/ShortcutsHelp.js +8 -2
  139. package/dist/commands/define-commands.d.ts.map +1 -1
  140. package/dist/commands/define-commands.js +2 -2
  141. package/dist/commands/define-overlays.d.ts +102 -0
  142. package/dist/commands/define-overlays.d.ts.map +1 -1
  143. package/dist/commands/define-overlays.js +102 -2
  144. package/dist/commands/index.d.ts +10 -1
  145. package/dist/commands/index.d.ts.map +1 -1
  146. package/dist/commands/index.js +3 -1
  147. package/dist/commands/overlays-mount.d.ts +13 -6
  148. package/dist/commands/overlays-mount.d.ts.map +1 -1
  149. package/dist/commands/overlays-mount.js +23 -14
  150. package/dist/common/errors.d.ts +34 -0
  151. package/dist/common/errors.d.ts.map +1 -0
  152. package/dist/common/errors.js +36 -0
  153. package/dist/common/index.d.ts +15 -0
  154. package/dist/common/index.d.ts.map +1 -0
  155. package/dist/common/index.js +29 -0
  156. package/dist/common/props.d.ts +63 -0
  157. package/dist/common/props.d.ts.map +1 -0
  158. package/dist/common/props.js +6 -0
  159. package/dist/common/query-state-like.d.ts +43 -0
  160. package/dist/common/query-state-like.d.ts.map +1 -0
  161. package/dist/common/query-state-like.js +20 -0
  162. package/dist/common/refs.d.ts +29 -0
  163. package/dist/common/refs.d.ts.map +1 -0
  164. package/dist/common/refs.js +29 -0
  165. package/dist/common/scroll-parent.d.ts +23 -0
  166. package/dist/common/scroll-parent.d.ts.map +1 -0
  167. package/dist/common/scroll-parent.js +21 -0
  168. package/dist/common/validate.d.ts +38 -0
  169. package/dist/common/validate.d.ts.map +1 -0
  170. package/dist/common/validate.js +36 -0
  171. package/dist/connectivity/connectivity-indicator.d.ts +3 -1
  172. package/dist/connectivity/connectivity-indicator.d.ts.map +1 -1
  173. package/dist/connectivity/connectivity-indicator.js +3 -1
  174. package/dist/connectivity/connectivity-provider.d.ts.map +1 -1
  175. package/dist/connectivity/connectivity-provider.js +4 -1
  176. package/dist/connectivity/index.d.ts +1 -0
  177. package/dist/connectivity/index.d.ts.map +1 -1
  178. package/dist/connectivity/types.d.ts +2 -2
  179. package/dist/connectivity/types.d.ts.map +1 -1
  180. package/dist/connectivity/use-connectivity.d.ts.map +1 -1
  181. package/dist/content/article-layout.module.css +11 -4
  182. package/dist/content/callout.d.ts +8 -4
  183. package/dist/content/callout.d.ts.map +1 -1
  184. package/dist/content/callout.js +15 -8
  185. package/dist/content/guide.d.ts +5 -4
  186. package/dist/content/guide.d.ts.map +1 -1
  187. package/dist/content/guide.js +13 -4
  188. package/dist/content/heading-anchor.d.ts +24 -2
  189. package/dist/content/heading-anchor.d.ts.map +1 -1
  190. package/dist/content/heading-anchor.js +23 -9
  191. package/dist/content/index.d.ts.map +1 -1
  192. package/dist/content/markdown.d.ts.map +1 -1
  193. package/dist/content/markdown.js +2 -0
  194. package/dist/content/prose.module.css +9 -7
  195. package/dist/content/reading-progress.d.ts +10 -4
  196. package/dist/content/reading-progress.d.ts.map +1 -1
  197. package/dist/content/reading-progress.js +26 -10
  198. package/dist/content/slug.d.ts +4 -0
  199. package/dist/content/slug.d.ts.map +1 -1
  200. package/dist/content/toc.d.ts +11 -0
  201. package/dist/content/toc.d.ts.map +1 -1
  202. package/dist/content/toc.js +23 -10
  203. package/dist/controls/actions.d.ts +49 -6
  204. package/dist/controls/actions.d.ts.map +1 -1
  205. package/dist/controls/actions.js +39 -8
  206. package/dist/controls/compare-filter.d.ts +3 -2
  207. package/dist/controls/compare-filter.d.ts.map +1 -1
  208. package/dist/controls/compare-filter.js +17 -2
  209. package/dist/controls/control-group.d.ts +3 -3
  210. package/dist/controls/control-group.d.ts.map +1 -1
  211. package/dist/controls/control-group.js +9 -2
  212. package/dist/controls/controls.module.css +169 -186
  213. package/dist/controls/controls.module.css.d.ts +9 -11
  214. package/dist/controls/enum-filter.d.ts +13 -3
  215. package/dist/controls/enum-filter.d.ts.map +1 -1
  216. package/dist/controls/enum-filter.js +32 -15
  217. package/dist/controls/filter-context.d.ts +15 -6
  218. package/dist/controls/filter-context.d.ts.map +1 -1
  219. package/dist/controls/filter-pill.d.ts +3 -3
  220. package/dist/controls/filter-pill.d.ts.map +1 -1
  221. package/dist/controls/filter-pill.js +4 -1
  222. package/dist/controls/filter-set.d.ts +3 -2
  223. package/dist/controls/filter-set.d.ts.map +1 -1
  224. package/dist/controls/filter-set.js +66 -41
  225. package/dist/controls/filter-sheet.d.ts +20 -80
  226. package/dist/controls/filter-sheet.d.ts.map +1 -1
  227. package/dist/controls/filter-sheet.js +9 -95
  228. package/dist/controls/index.d.ts +3 -0
  229. package/dist/controls/index.d.ts.map +1 -1
  230. package/dist/controls/index.js +6 -0
  231. package/dist/controls/multi-select-filter.d.ts +18 -2
  232. package/dist/controls/multi-select-filter.d.ts.map +1 -1
  233. package/dist/controls/multi-select-filter.js +124 -22
  234. package/dist/controls/number-filter.d.ts +28 -0
  235. package/dist/controls/number-filter.d.ts.map +1 -0
  236. package/dist/controls/number-filter.js +172 -0
  237. package/dist/controls/panel-row.d.ts +132 -0
  238. package/dist/controls/panel-row.d.ts.map +1 -0
  239. package/dist/controls/panel-row.js +173 -0
  240. package/dist/controls/panel-row.module.css +86 -0
  241. package/dist/controls/panel-row.module.css.d.ts +13 -0
  242. package/dist/controls/range-filter.d.ts +20 -5
  243. package/dist/controls/range-filter.d.ts.map +1 -1
  244. package/dist/controls/range-filter.js +75 -38
  245. package/dist/controls/search-filter.d.ts +3 -2
  246. package/dist/controls/search-filter.d.ts.map +1 -1
  247. package/dist/controls/search-filter.js +26 -11
  248. package/dist/controls/select-filter.d.ts +2 -1
  249. package/dist/controls/select-filter.d.ts.map +1 -1
  250. package/dist/controls/select-filter.js +4 -0
  251. package/dist/controls/slider-control.d.ts +36 -0
  252. package/dist/controls/slider-control.d.ts.map +1 -0
  253. package/dist/controls/slider-control.js +64 -0
  254. package/dist/controls/sync-button.d.ts +3 -2
  255. package/dist/controls/sync-button.d.ts.map +1 -1
  256. package/dist/controls/sync-button.js +16 -3
  257. package/dist/controls/toggle-filter.d.ts +3 -2
  258. package/dist/controls/toggle-filter.d.ts.map +1 -1
  259. package/dist/controls/toggle-filter.js +29 -12
  260. package/dist/controls/view-tabs.d.ts +3 -2
  261. package/dist/controls/view-tabs.d.ts.map +1 -1
  262. package/dist/controls/view-tabs.js +43 -11
  263. package/dist/controls-dates/date-range-picker.d.ts +1 -1
  264. package/dist/controls-dates/date-range-picker.d.ts.map +1 -1
  265. package/dist/controls-dates/date-range-picker.js +6 -1
  266. package/dist/dashboard/delta-badge.d.ts +5 -1
  267. package/dist/dashboard/delta-badge.d.ts.map +1 -1
  268. package/dist/dashboard/empty-state.d.ts +10 -3
  269. package/dist/dashboard/empty-state.d.ts.map +1 -1
  270. package/dist/dashboard/empty-state.js +37 -6
  271. package/dist/dashboard/index.d.ts +6 -4
  272. package/dist/dashboard/index.d.ts.map +1 -1
  273. package/dist/dashboard/index.js +10 -2
  274. package/dist/dashboard/query-state.d.ts +48 -27
  275. package/dist/dashboard/query-state.d.ts.map +1 -1
  276. package/dist/dashboard/query-state.js +111 -57
  277. package/dist/dashboard/settings-section.d.ts +19 -9
  278. package/dist/dashboard/settings-section.d.ts.map +1 -1
  279. package/dist/dashboard/settings-section.js +74 -25
  280. package/dist/dashboard/stat-card.d.ts +76 -19
  281. package/dist/dashboard/stat-card.d.ts.map +1 -1
  282. package/dist/dashboard/stat-card.js +78 -38
  283. package/dist/dashboard/stat-card.module.css +112 -26
  284. package/dist/dashboard/stat-card.module.css.d.ts +5 -0
  285. package/dist/dashboard/stat-group.d.ts +41 -0
  286. package/dist/dashboard/stat-group.d.ts.map +1 -0
  287. package/dist/dashboard/stat-group.js +30 -0
  288. package/dist/dashboard/stat-group.module.css +66 -0
  289. package/dist/dashboard/stat-group.module.css.d.ts +8 -0
  290. package/dist/dashboard/widget-grid.d.ts +27 -0
  291. package/dist/dashboard/widget-grid.d.ts.map +1 -0
  292. package/dist/dashboard/widget-grid.js +41 -0
  293. package/dist/dashboard/widget-grid.module.css +53 -0
  294. package/dist/dashboard/widget-grid.module.css.d.ts +9 -0
  295. package/dist/data/data-table.d.ts +151 -12
  296. package/dist/data/data-table.d.ts.map +1 -1
  297. package/dist/data/data-table.js +392 -138
  298. package/dist/data/data-table.module.css +64 -0
  299. package/dist/data/data-table.module.css.d.ts +11 -0
  300. package/dist/data/index.d.ts +2 -2
  301. package/dist/data/index.d.ts.map +1 -1
  302. package/dist/data/index.js +24 -2
  303. package/dist/data/query-branch.d.ts +28 -0
  304. package/dist/data/query-branch.d.ts.map +1 -0
  305. package/dist/data/query-branch.js +10 -0
  306. package/dist/data/table.d.ts +2 -2
  307. package/dist/data/table.d.ts.map +1 -1
  308. package/dist/data/virtual-list.d.ts +65 -6
  309. package/dist/data/virtual-list.d.ts.map +1 -1
  310. package/dist/data/virtual-list.js +89 -38
  311. package/dist/data/virtual.d.ts +1 -1
  312. package/dist/data/virtual.d.ts.map +1 -1
  313. package/dist/forms/FormErrorSummary.d.ts +4 -3
  314. package/dist/forms/FormErrorSummary.d.ts.map +1 -1
  315. package/dist/forms/FormErrorSummary.js +6 -4
  316. package/dist/forms/create-form.d.ts +2 -2
  317. package/dist/forms/field.d.ts +46 -6
  318. package/dist/forms/field.d.ts.map +1 -1
  319. package/dist/forms/field.js +10 -5
  320. package/dist/forms/form-layout.d.ts +142 -0
  321. package/dist/forms/form-layout.d.ts.map +1 -0
  322. package/dist/forms/form-layout.js +110 -0
  323. package/dist/forms/form-layout.module.css +145 -0
  324. package/dist/forms/form-layout.module.css.d.ts +20 -0
  325. package/dist/forms/form-state.d.ts +42 -0
  326. package/dist/forms/form-state.d.ts.map +1 -0
  327. package/dist/forms/form-state.js +26 -0
  328. package/dist/forms/index.d.ts +22 -6
  329. package/dist/forms/index.d.ts.map +1 -1
  330. package/dist/forms/index.js +19 -3
  331. package/dist/forms/use-field-array.d.ts +60 -0
  332. package/dist/forms/use-field-array.d.ts.map +1 -0
  333. package/dist/forms/use-field-array.js +20 -0
  334. package/dist/forms/use-form-draft.d.ts +25 -10
  335. package/dist/forms/use-form-draft.d.ts.map +1 -1
  336. package/dist/forms/use-form-draft.js +55 -18
  337. package/dist/forms/use-form-submit.d.ts +88 -0
  338. package/dist/forms/use-form-submit.d.ts.map +1 -0
  339. package/dist/forms/use-form-submit.js +63 -0
  340. package/dist/guard/index.d.ts +1 -1
  341. package/dist/guard/index.d.ts.map +1 -1
  342. package/dist/guard/index.js +27 -11
  343. package/dist/index.d.ts +10 -8
  344. package/dist/index.d.ts.map +1 -1
  345. package/dist/index.js +44 -4
  346. package/dist/nav/types.d.ts +15 -6
  347. package/dist/nav/types.d.ts.map +1 -1
  348. package/dist/notifications/bell.d.ts +3 -2
  349. package/dist/notifications/bell.d.ts.map +1 -1
  350. package/dist/notifications/bell.js +73 -56
  351. package/dist/notifications/center.d.ts +15 -4
  352. package/dist/notifications/center.d.ts.map +1 -1
  353. package/dist/notifications/center.js +5 -2
  354. package/dist/notifications/define-notifications.d.ts +56 -14
  355. package/dist/notifications/define-notifications.d.ts.map +1 -1
  356. package/dist/notifications/define-notifications.js +2 -1
  357. package/dist/notifications/index.d.ts +6 -2
  358. package/dist/notifications/index.d.ts.map +1 -1
  359. package/dist/notifications/index.js +5 -1
  360. package/dist/notifications/mount-guard.d.ts +8 -0
  361. package/dist/notifications/mount-guard.d.ts.map +1 -0
  362. package/dist/notifications/mount-guard.js +19 -0
  363. package/dist/notifications/notify.d.ts +58 -1
  364. package/dist/notifications/notify.d.ts.map +1 -1
  365. package/dist/notifications/notify.js +46 -2
  366. package/dist/notifications/overlay.d.ts.map +1 -1
  367. package/dist/notifications/overlay.js +2 -0
  368. package/dist/notifications/store.d.ts +7 -0
  369. package/dist/notifications/store.d.ts.map +1 -1
  370. package/dist/provider/index.d.ts +37 -5
  371. package/dist/provider/index.d.ts.map +1 -1
  372. package/dist/provider/index.js +66 -28
  373. package/dist/provider/lab-theme.d.ts.map +1 -1
  374. package/dist/provider/lab-theme.js +2 -1
  375. package/dist/query/devtools.d.ts.map +1 -1
  376. package/dist/query/devtools.js +1 -0
  377. package/dist/router-tanstack/field.d.ts +1 -1
  378. package/dist/router-tanstack/field.d.ts.map +1 -1
  379. package/dist/router-tanstack/index.d.ts +1 -1
  380. package/dist/router-tanstack/index.d.ts.map +1 -1
  381. package/dist/router-tanstack/search-store.d.ts +4 -1
  382. package/dist/router-tanstack/search-store.d.ts.map +1 -1
  383. package/dist/router-tanstack/search-store.js +92 -8
  384. package/dist/router-tanstack/use-nav.d.ts.map +1 -1
  385. package/dist/router-tanstack/use-nav.js +1 -1
  386. package/dist/section/index.d.ts +1 -1
  387. package/dist/section/index.d.ts.map +1 -1
  388. package/dist/section/section.d.ts +36 -2
  389. package/dist/section/section.d.ts.map +1 -1
  390. package/dist/section/section.js +49 -57
  391. package/dist/section/section.module.css +11 -0
  392. package/dist/shell/account-types.d.ts +5 -2
  393. package/dist/shell/account-types.d.ts.map +1 -1
  394. package/dist/shell/app-brand.d.ts +13 -0
  395. package/dist/shell/app-brand.d.ts.map +1 -0
  396. package/dist/shell/app-brand.js +94 -0
  397. package/dist/shell/app-brand.module.css +109 -0
  398. package/dist/shell/app-brand.module.css.d.ts +14 -0
  399. package/dist/shell/app-breadcrumbs.d.ts +4 -2
  400. package/dist/shell/app-breadcrumbs.d.ts.map +1 -1
  401. package/dist/shell/app-breadcrumbs.js +33 -22
  402. package/dist/shell/app-header.module.css +10 -5
  403. package/dist/shell/app-main.module.css +107 -0
  404. package/dist/shell/app-main.module.css.d.ts +11 -0
  405. package/dist/shell/app-mobile-nav.d.ts +3 -2
  406. package/dist/shell/app-mobile-nav.d.ts.map +1 -1
  407. package/dist/shell/app-mobile-nav.js +29 -15
  408. package/dist/shell/app-mobile-nav.module.css +48 -27
  409. package/dist/shell/app-mobile-nav.module.css.d.ts +0 -1
  410. package/dist/shell/app-sidebar-account.d.ts +2 -1
  411. package/dist/shell/app-sidebar-account.d.ts.map +1 -1
  412. package/dist/shell/app-sidebar-account.js +57 -22
  413. package/dist/shell/app-sidebar.d.ts +9 -3
  414. package/dist/shell/app-sidebar.d.ts.map +1 -1
  415. package/dist/shell/app-sidebar.js +55 -109
  416. package/dist/shell/app-sidebar.module.css +53 -96
  417. package/dist/shell/app-sidebar.module.css.d.ts +0 -5
  418. package/dist/shell/index.d.ts +14 -6
  419. package/dist/shell/index.d.ts.map +1 -1
  420. package/dist/shell/index.js +47 -12
  421. package/dist/shell/isomorphic-layout-effect.d.ts +14 -0
  422. package/dist/shell/isomorphic-layout-effect.d.ts.map +1 -0
  423. package/dist/shell/isomorphic-layout-effect.js +5 -0
  424. package/dist/shell/mobile-nav-model.d.ts.map +1 -1
  425. package/dist/shell/mobile-nav-model.js +27 -6
  426. package/dist/shell/nav-count-badge.d.ts +5 -3
  427. package/dist/shell/nav-count-badge.d.ts.map +1 -1
  428. package/dist/shell/nav-count-badge.js +3 -1
  429. package/dist/shell/page-aside.d.ts +43 -0
  430. package/dist/shell/page-aside.d.ts.map +1 -0
  431. package/dist/shell/page-aside.js +202 -0
  432. package/dist/shell/page-aside.module.css +174 -0
  433. package/dist/shell/page-aside.module.css.d.ts +14 -0
  434. package/dist/shell/page-bar.d.ts +55 -15
  435. package/dist/shell/page-bar.d.ts.map +1 -1
  436. package/dist/shell/page-bar.js +130 -41
  437. package/dist/shell/page-bar.module.css +107 -13
  438. package/dist/shell/page-bar.module.css.d.ts +4 -1
  439. package/dist/shell/sidebar-search.d.ts +4 -2
  440. package/dist/shell/sidebar-search.d.ts.map +1 -1
  441. package/dist/shell/sidebar-search.js +9 -4
  442. package/dist/shell/sidebar-search.module.css +1 -1
  443. package/dist/state/fields.d.ts +227 -34
  444. package/dist/state/fields.d.ts.map +1 -1
  445. package/dist/state/fields.js +77 -30
  446. package/dist/state/persisted-or-local.d.ts +9 -0
  447. package/dist/state/persisted-or-local.d.ts.map +1 -0
  448. package/dist/state/persisted-or-local.js +24 -0
  449. package/dist/state/persisted.d.ts +12 -0
  450. package/dist/state/persisted.d.ts.map +1 -1
  451. package/dist/state/persisted.js +36 -18
  452. package/dist/state.d.ts +1 -1
  453. package/dist/state.d.ts.map +1 -1
  454. package/dist/state.js +2 -6
  455. package/dist/surfaces.d.ts +12 -11
  456. package/dist/surfaces.d.ts.map +1 -1
  457. package/dist/surfaces.js +43 -12
  458. package/dist/theme/ctl-theme.d.ts.map +1 -1
  459. package/dist/theme/index.d.ts.map +1 -1
  460. package/dist/theme/index.js +102 -17
  461. package/dist/theme/nav-link.module.css +37 -26
  462. package/dist/theme/segmented-control.module.css +22 -0
  463. package/dist/theme/segmented-control.module.css.d.ts +1 -0
  464. package/dist/theme-lab/boot.d.ts +66 -0
  465. package/dist/theme-lab/boot.d.ts.map +1 -0
  466. package/dist/theme-lab/boot.js +82 -0
  467. package/dist/theme-lab/index.d.ts +4 -43
  468. package/dist/theme-lab/index.d.ts.map +1 -1
  469. package/dist/theme-lab/index.js +9 -69
  470. package/dist/theme-toggle/index.d.ts +3 -2
  471. package/dist/theme-toggle/index.d.ts.map +1 -1
  472. package/dist/theme-toggle/index.js +8 -2
  473. package/dist/tokens/index.d.ts +42 -0
  474. package/dist/tokens/index.d.ts.map +1 -1
  475. package/dist/tokens/index.js +35 -6
  476. package/dist/tokens/palette.d.ts +45 -25
  477. package/dist/tokens/palette.d.ts.map +1 -1
  478. package/dist/tokens/palette.js +31 -14
  479. package/dist/tokens.css +4 -5
  480. package/dist/utils/is-dev.d.ts +3 -0
  481. package/dist/utils/is-dev.d.ts.map +1 -0
  482. package/dist/utils/is-dev.js +6 -0
  483. package/dist/widget-header/delta-badge.d.ts +7 -1
  484. package/dist/widget-header/delta-badge.d.ts.map +1 -1
  485. package/dist/widget-header/delta-badge.js +8 -1
  486. package/dist/widget-header/index.d.ts +2 -2
  487. package/dist/widget-header/index.d.ts.map +1 -1
  488. package/dist/widget-header/index.js +3 -1
  489. package/dist/widget-header/widget-header.d.ts +99 -4
  490. package/dist/widget-header/widget-header.d.ts.map +1 -1
  491. package/dist/widget-header/widget-header.js +45 -18
  492. package/dist/widget-header/widget-header.module.css +87 -7
  493. package/dist/widget-header/widget-header.module.css.d.ts +1 -0
  494. package/llms.txt +6 -6
  495. package/package.json +49 -25
  496. package/src/agent/coalesce.ts +2 -1
  497. package/src/agent/merge.ts +2 -1
  498. package/src/agent/part-list.tsx +2 -0
  499. package/src/agent/stick-to-bottom.tsx +9 -11
  500. package/src/agent-chat/composer.tsx +124 -103
  501. package/src/agent-chat/relative-time.ts +2 -1
  502. package/src/agent-chat/thread-detail-panel.tsx +9 -5
  503. package/src/agent-chat/thread-feed-row.tsx +17 -9
  504. package/src/agent-chat/thread-feed.tsx +9 -3
  505. package/src/agent-chat/thread-message.tsx +48 -13
  506. package/src/agent-chat/thread-outcome-card.tsx +9 -1
  507. package/src/agent-chat/thread-workspace.tsx +72 -33
  508. package/src/agent-chat/tool-chip.tsx +8 -2
  509. package/src/charts/hooks/useBandPlot.ts +26 -8
  510. package/src/charts/index.ts +39 -4
  511. package/src/charts/kinds/BandStrip.tsx +36 -14
  512. package/src/charts/kinds/Bars.tsx +67 -16
  513. package/src/charts/kinds/Donut.tsx +30 -3
  514. package/src/charts/kinds/DualPanel.tsx +56 -10
  515. package/src/charts/kinds/Heatmap.tsx +90 -33
  516. package/src/charts/kinds/MirroredBars.tsx +21 -3
  517. package/src/charts/kinds/MultiLine.tsx +61 -18
  518. package/src/charts/kinds/StackedArea.tsx +77 -6
  519. package/src/charts/kinds/ZonedLine.tsx +71 -31
  520. package/src/charts/layout/auto-margin.ts +134 -21
  521. package/src/charts/layout/log-ticks.ts +90 -0
  522. package/src/charts/primitives/Axes.tsx +33 -5
  523. package/src/charts/primitives/CartesianChart.tsx +194 -41
  524. package/src/charts/primitives/ChartCard.tsx +66 -25
  525. package/src/charts/primitives/ChartFrame.tsx +107 -26
  526. package/src/charts/primitives/ChartLegend.tsx +43 -13
  527. package/src/charts/primitives/ChartPending.tsx +185 -7
  528. package/src/charts/primitives/ChartTooltip.tsx +37 -5
  529. package/src/charts/primitives/Crosshair.tsx +6 -3
  530. package/src/charts/primitives/chart-frame-layout.ts +212 -0
  531. package/src/charts/primitives/chart-tier.tsx +37 -0
  532. package/src/charts/series.ts +77 -1
  533. package/src/charts/sparklines/BarSparkline.tsx +11 -3
  534. package/src/charts/sparklines/LineSparkline.tsx +18 -4
  535. package/src/charts/sparklines/index.ts +2 -2
  536. package/src/charts/utils/format.ts +163 -2
  537. package/src/charts/utils/ticks.ts +149 -4
  538. package/src/cli/index.ts +8 -3
  539. package/src/commands/ShortcutsHelp.tsx +10 -3
  540. package/src/commands/define-commands.ts +2 -2
  541. package/src/commands/define-overlays.ts +216 -1
  542. package/src/commands/index.ts +12 -0
  543. package/src/commands/overlays-mount.tsx +60 -26
  544. package/src/common/errors.ts +73 -0
  545. package/src/common/index.ts +21 -0
  546. package/src/common/props.ts +71 -0
  547. package/src/common/query-state-like.ts +64 -0
  548. package/src/common/refs.ts +58 -0
  549. package/src/common/scroll-parent.ts +42 -0
  550. package/src/common/validate.ts +94 -0
  551. package/src/connectivity/connectivity-indicator.tsx +6 -1
  552. package/src/connectivity/connectivity-provider.tsx +4 -1
  553. package/src/connectivity/index.ts +1 -0
  554. package/src/connectivity/types.ts +5 -2
  555. package/src/connectivity/use-connectivity.ts +3 -2
  556. package/src/content/article-layout.module.css +11 -4
  557. package/src/content/callout.tsx +13 -7
  558. package/src/content/guide.tsx +14 -4
  559. package/src/content/heading-anchor.tsx +14 -3
  560. package/src/content/index.ts +2 -0
  561. package/src/content/markdown.tsx +2 -0
  562. package/src/content/prose.module.css +9 -7
  563. package/src/content/reading-progress.tsx +40 -15
  564. package/src/content/slug.ts +4 -0
  565. package/src/content/toc.tsx +47 -10
  566. package/src/controls/actions.tsx +89 -9
  567. package/src/controls/compare-filter.tsx +20 -3
  568. package/src/controls/control-group.tsx +11 -4
  569. package/src/controls/controls.module.css +169 -186
  570. package/src/controls/controls.module.css.d.ts +9 -11
  571. package/src/controls/enum-filter.tsx +46 -19
  572. package/src/controls/filter-context.tsx +21 -8
  573. package/src/controls/filter-pill.tsx +6 -3
  574. package/src/controls/filter-set.tsx +32 -13
  575. package/src/controls/filter-sheet.tsx +44 -194
  576. package/src/controls/index.ts +8 -0
  577. package/src/controls/multi-select-filter.tsx +179 -29
  578. package/src/controls/number-filter.tsx +329 -0
  579. package/src/controls/panel-row.module.css +86 -0
  580. package/src/controls/panel-row.module.css.d.ts +13 -0
  581. package/src/controls/panel-row.tsx +392 -0
  582. package/src/controls/range-filter.tsx +133 -43
  583. package/src/controls/search-filter.tsx +31 -13
  584. package/src/controls/select-filter.tsx +11 -1
  585. package/src/controls/slider-control.tsx +159 -0
  586. package/src/controls/sync-button.tsx +13 -3
  587. package/src/controls/toggle-filter.tsx +37 -17
  588. package/src/controls/view-tabs.tsx +63 -11
  589. package/src/controls-dates/date-range-picker.tsx +8 -1
  590. package/src/dashboard/delta-badge.tsx +5 -1
  591. package/src/dashboard/empty-state.tsx +72 -25
  592. package/src/dashboard/index.ts +19 -2
  593. package/src/dashboard/query-state.tsx +154 -84
  594. package/src/dashboard/settings-section.tsx +87 -31
  595. package/src/dashboard/stat-card.module.css +112 -26
  596. package/src/dashboard/stat-card.module.css.d.ts +5 -0
  597. package/src/dashboard/stat-card.tsx +207 -68
  598. package/src/dashboard/stat-group.module.css +66 -0
  599. package/src/dashboard/stat-group.module.css.d.ts +8 -0
  600. package/src/dashboard/stat-group.tsx +74 -0
  601. package/src/dashboard/widget-grid.module.css +53 -0
  602. package/src/dashboard/widget-grid.module.css.d.ts +9 -0
  603. package/src/dashboard/widget-grid.tsx +127 -0
  604. package/src/data/data-table.module.css +64 -0
  605. package/src/data/data-table.module.css.d.ts +11 -0
  606. package/src/data/data-table.tsx +927 -346
  607. package/src/data/index.ts +30 -2
  608. package/src/data/query-branch.ts +53 -0
  609. package/src/data/table.ts +5 -0
  610. package/src/data/virtual-list.tsx +189 -55
  611. package/src/data/virtual.ts +5 -1
  612. package/src/forms/FormErrorSummary.tsx +13 -6
  613. package/src/forms/create-form.ts +2 -2
  614. package/src/forms/field.ts +60 -11
  615. package/src/forms/form-layout.module.css +145 -0
  616. package/src/forms/form-layout.module.css.d.ts +20 -0
  617. package/src/forms/form-layout.tsx +305 -0
  618. package/src/forms/form-state.tsx +94 -0
  619. package/src/forms/index.ts +38 -7
  620. package/src/forms/use-field-array.ts +94 -0
  621. package/src/forms/use-form-draft.ts +145 -53
  622. package/src/forms/use-form-submit.ts +199 -0
  623. package/src/guard/index.ts +91 -23
  624. package/src/index.ts +79 -10
  625. package/src/nav/types.ts +15 -6
  626. package/src/notifications/bell.tsx +18 -4
  627. package/src/notifications/center.tsx +18 -5
  628. package/src/notifications/define-notifications.ts +64 -18
  629. package/src/notifications/index.ts +12 -1
  630. package/src/notifications/mount-guard.ts +41 -0
  631. package/src/notifications/notify.tsx +122 -3
  632. package/src/notifications/overlay.tsx +2 -0
  633. package/src/notifications/store.ts +7 -0
  634. package/src/provider/index.tsx +101 -13
  635. package/src/provider/lab-theme.ts +2 -1
  636. package/src/query/devtools.tsx +1 -0
  637. package/src/router-tanstack/field.ts +5 -0
  638. package/src/router-tanstack/index.ts +4 -0
  639. package/src/router-tanstack/search-store.ts +171 -12
  640. package/src/router-tanstack/use-nav.ts +18 -13
  641. package/src/section/index.ts +1 -1
  642. package/src/section/section.module.css +11 -0
  643. package/src/section/section.tsx +163 -96
  644. package/src/shell/account-types.ts +5 -2
  645. package/src/shell/app-brand.module.css +109 -0
  646. package/src/shell/app-brand.module.css.d.ts +14 -0
  647. package/src/shell/app-brand.tsx +140 -0
  648. package/src/shell/app-breadcrumbs.tsx +19 -9
  649. package/src/shell/app-header.module.css +10 -5
  650. package/src/shell/app-main.module.css +107 -0
  651. package/src/shell/app-main.module.css.d.ts +11 -0
  652. package/src/shell/app-mobile-nav.module.css +48 -27
  653. package/src/shell/app-mobile-nav.module.css.d.ts +0 -1
  654. package/src/shell/app-mobile-nav.tsx +43 -11
  655. package/src/shell/app-sidebar-account.tsx +29 -6
  656. package/src/shell/app-sidebar.module.css +53 -96
  657. package/src/shell/app-sidebar.module.css.d.ts +0 -5
  658. package/src/shell/app-sidebar.tsx +40 -113
  659. package/src/shell/index.tsx +156 -65
  660. package/src/shell/isomorphic-layout-effect.ts +14 -0
  661. package/src/shell/mobile-nav-model.ts +66 -10
  662. package/src/shell/nav-count-badge.tsx +6 -1
  663. package/src/shell/page-aside.module.css +174 -0
  664. package/src/shell/page-aside.module.css.d.ts +14 -0
  665. package/src/shell/page-aside.tsx +377 -0
  666. package/src/shell/page-bar.module.css +107 -13
  667. package/src/shell/page-bar.module.css.d.ts +4 -1
  668. package/src/shell/page-bar.tsx +294 -94
  669. package/src/shell/sidebar-search.module.css +1 -1
  670. package/src/shell/sidebar-search.tsx +13 -4
  671. package/src/state/fields.ts +360 -69
  672. package/src/state/persisted-or-local.ts +50 -0
  673. package/src/state/persisted.ts +76 -26
  674. package/src/state.ts +4 -7
  675. package/src/surfaces.ts +43 -12
  676. package/src/theme/ctl-theme.tsx +10 -0
  677. package/src/theme/index.ts +129 -16
  678. package/src/theme/nav-link.module.css +37 -26
  679. package/src/theme/segmented-control.module.css +22 -0
  680. package/src/theme/segmented-control.module.css.d.ts +1 -0
  681. package/src/theme-lab/boot.ts +140 -0
  682. package/src/theme-lab/index.tsx +21 -112
  683. package/src/theme-toggle/index.tsx +10 -3
  684. package/src/tokens/index.ts +50 -6
  685. package/src/tokens/palette.ts +58 -30
  686. package/src/utils/is-dev.ts +4 -0
  687. package/src/widget-header/delta-badge.tsx +25 -5
  688. package/src/widget-header/index.ts +10 -2
  689. package/src/widget-header/widget-header.module.css +87 -7
  690. package/src/widget-header/widget-header.module.css.d.ts +1 -0
  691. package/src/widget-header/widget-header.tsx +166 -42
  692. package/dist/agent/adapter.test.d.ts +0 -2
  693. package/dist/agent/adapter.test.d.ts.map +0 -1
  694. package/dist/agent/ai-sdk-transport.test.d.ts +0 -2
  695. package/dist/agent/ai-sdk-transport.test.d.ts.map +0 -1
  696. package/dist/agent/coalesce.test.d.ts +0 -2
  697. package/dist/agent/coalesce.test.d.ts.map +0 -1
  698. package/dist/agent/foreign.test.d.ts +0 -2
  699. package/dist/agent/foreign.test.d.ts.map +0 -1
  700. package/dist/agent/id.test.d.ts +0 -2
  701. package/dist/agent/id.test.d.ts.map +0 -1
  702. package/dist/agent/merge.test.d.ts +0 -2
  703. package/dist/agent/merge.test.d.ts.map +0 -1
  704. package/dist/agent/part-list.test.d.ts +0 -2
  705. package/dist/agent/part-list.test.d.ts.map +0 -1
  706. package/dist/agent/parts.test.d.ts +0 -2
  707. package/dist/agent/parts.test.d.ts.map +0 -1
  708. package/dist/agent/thread.test.d.ts +0 -2
  709. package/dist/agent/thread.test.d.ts.map +0 -1
  710. package/dist/agent/transport.test.d.ts +0 -2
  711. package/dist/agent/transport.test.d.ts.map +0 -1
  712. package/dist/agent/use-agent-stream.test.d.ts +0 -2
  713. package/dist/agent/use-agent-stream.test.d.ts.map +0 -1
  714. package/dist/agent/use-agent-thread-runs.foreign.test.d.ts +0 -2
  715. package/dist/agent/use-agent-thread-runs.foreign.test.d.ts.map +0 -1
  716. package/dist/agent/use-agent-thread-runs.resume.test.d.ts +0 -2
  717. package/dist/agent/use-agent-thread-runs.resume.test.d.ts.map +0 -1
  718. package/dist/agent/use-agent-thread-runs.test.d.ts +0 -2
  719. package/dist/agent/use-agent-thread-runs.test.d.ts.map +0 -1
  720. package/dist/agent/use-agent-thread-runs.wedge.test.d.ts +0 -2
  721. package/dist/agent/use-agent-thread-runs.wedge.test.d.ts.map +0 -1
  722. package/dist/agent-chat/composer.test.d.ts +0 -2
  723. package/dist/agent-chat/composer.test.d.ts.map +0 -1
  724. package/dist/agent-chat/relative-time.test.d.ts +0 -2
  725. package/dist/agent-chat/relative-time.test.d.ts.map +0 -1
  726. package/dist/agent-chat/thread-feed-row.test.d.ts +0 -2
  727. package/dist/agent-chat/thread-feed-row.test.d.ts.map +0 -1
  728. package/dist/agent-chat/thread-feed.test.d.ts +0 -2
  729. package/dist/agent-chat/thread-feed.test.d.ts.map +0 -1
  730. package/dist/agent-chat/thread-message.test.d.ts +0 -2
  731. package/dist/agent-chat/thread-message.test.d.ts.map +0 -1
  732. package/dist/agent-chat/thread-workspace.test.d.ts +0 -2
  733. package/dist/agent-chat/thread-workspace.test.d.ts.map +0 -1
  734. package/dist/agent-chat/tool-chip.test.d.ts +0 -2
  735. package/dist/agent-chat/tool-chip.test.d.ts.map +0 -1
  736. package/dist/agent-chat/virtualize.type-guard.test.d.ts +0 -2
  737. package/dist/agent-chat/virtualize.type-guard.test.d.ts.map +0 -1
  738. package/dist/charts/cursor/resolve.test.d.ts +0 -2
  739. package/dist/charts/cursor/resolve.test.d.ts.map +0 -1
  740. package/dist/charts/cursor/store.test.d.ts +0 -2
  741. package/dist/charts/cursor/store.test.d.ts.map +0 -1
  742. package/dist/charts/kinds/BandStrip.test.d.ts +0 -2
  743. package/dist/charts/kinds/BandStrip.test.d.ts.map +0 -1
  744. package/dist/charts/kinds/Bars.test.d.ts +0 -2
  745. package/dist/charts/kinds/Bars.test.d.ts.map +0 -1
  746. package/dist/charts/kinds/DualPanel.test.d.ts +0 -2
  747. package/dist/charts/kinds/DualPanel.test.d.ts.map +0 -1
  748. package/dist/charts/kinds/MirroredBars.test.d.ts +0 -2
  749. package/dist/charts/kinds/MirroredBars.test.d.ts.map +0 -1
  750. package/dist/charts/kinds/MultiLine.test.d.ts +0 -2
  751. package/dist/charts/kinds/MultiLine.test.d.ts.map +0 -1
  752. package/dist/charts/kinds/StackedArea.test.d.ts +0 -2
  753. package/dist/charts/kinds/StackedArea.test.d.ts.map +0 -1
  754. package/dist/charts/kinds/ZonedLine.test.d.ts +0 -2
  755. package/dist/charts/kinds/ZonedLine.test.d.ts.map +0 -1
  756. package/dist/charts/layout/auto-margin.test.d.ts +0 -2
  757. package/dist/charts/layout/auto-margin.test.d.ts.map +0 -1
  758. package/dist/charts/primitives/CartesianChart.test.d.ts +0 -2
  759. package/dist/charts/primitives/CartesianChart.test.d.ts.map +0 -1
  760. package/dist/charts/primitives/ChartCard.test.d.ts +0 -2
  761. package/dist/charts/primitives/ChartCard.test.d.ts.map +0 -1
  762. package/dist/charts/primitives/ChartFrame.test.d.ts +0 -2
  763. package/dist/charts/primitives/ChartFrame.test.d.ts.map +0 -1
  764. package/dist/charts/primitives/ChartLegend.test.d.ts +0 -2
  765. package/dist/charts/primitives/ChartLegend.test.d.ts.map +0 -1
  766. package/dist/charts/primitives/ChartTooltip.test.d.ts +0 -2
  767. package/dist/charts/primitives/ChartTooltip.test.d.ts.map +0 -1
  768. package/dist/charts/primitives/XZoneRects.test.d.ts +0 -2
  769. package/dist/charts/primitives/XZoneRects.test.d.ts.map +0 -1
  770. package/dist/charts/series.test.d.ts +0 -2
  771. package/dist/charts/series.test.d.ts.map +0 -1
  772. package/dist/charts/utils/domain.test.d.ts +0 -2
  773. package/dist/charts/utils/domain.test.d.ts.map +0 -1
  774. package/dist/charts/utils/measure-text.test.d.ts +0 -2
  775. package/dist/charts/utils/measure-text.test.d.ts.map +0 -1
  776. package/dist/cli/check-coverage.test.d.ts +0 -2
  777. package/dist/cli/check-coverage.test.d.ts.map +0 -1
  778. package/dist/cli/check-theme.test.d.ts +0 -2
  779. package/dist/cli/check-theme.test.d.ts.map +0 -1
  780. package/dist/cli/help.test.d.ts +0 -2
  781. package/dist/cli/help.test.d.ts.map +0 -1
  782. package/dist/cli/init-sync.test.d.ts +0 -2
  783. package/dist/cli/init-sync.test.d.ts.map +0 -1
  784. package/dist/cli/placement-engine.test.d.ts +0 -2
  785. package/dist/cli/placement-engine.test.d.ts.map +0 -1
  786. package/dist/cli/shipped-versions.test.d.ts +0 -2
  787. package/dist/cli/shipped-versions.test.d.ts.map +0 -1
  788. package/dist/cli/tarball-parity.test.d.ts +0 -2
  789. package/dist/cli/tarball-parity.test.d.ts.map +0 -1
  790. package/dist/cli/template-format.test.d.ts +0 -2
  791. package/dist/cli/template-format.test.d.ts.map +0 -1
  792. package/dist/cli/template-ledger.test.d.ts +0 -2
  793. package/dist/cli/template-ledger.test.d.ts.map +0 -1
  794. package/dist/cli/tokens-css.test.d.ts +0 -2
  795. package/dist/cli/tokens-css.test.d.ts.map +0 -1
  796. package/dist/cli/toolchain-wiring.test.d.ts +0 -2
  797. package/dist/cli/toolchain-wiring.test.d.ts.map +0 -1
  798. package/dist/cli/waiver-audit.test.d.ts +0 -2
  799. package/dist/cli/waiver-audit.test.d.ts.map +0 -1
  800. package/dist/content/article-actions.test.d.ts +0 -2
  801. package/dist/content/article-actions.test.d.ts.map +0 -1
  802. package/dist/content/article-model.test.d.ts +0 -2
  803. package/dist/content/article-model.test.d.ts.map +0 -1
  804. package/dist/content/block-split.test.d.ts +0 -2
  805. package/dist/content/block-split.test.d.ts.map +0 -1
  806. package/dist/content/heading-components.test.d.ts +0 -2
  807. package/dist/content/heading-components.test.d.ts.map +0 -1
  808. package/dist/content/markdown.test.d.ts +0 -2
  809. package/dist/content/markdown.test.d.ts.map +0 -1
  810. package/dist/content/prose.module.css.test.d.ts +0 -2
  811. package/dist/content/prose.module.css.test.d.ts.map +0 -1
  812. package/dist/content/sanitize.test.d.ts +0 -2
  813. package/dist/content/sanitize.test.d.ts.map +0 -1
  814. package/dist/content/slug.test.d.ts +0 -2
  815. package/dist/content/slug.test.d.ts.map +0 -1
  816. package/dist/controls/actions.test.d.ts +0 -2
  817. package/dist/controls/actions.test.d.ts.map +0 -1
  818. package/dist/controls/actions.type-guard.test.d.ts +0 -2
  819. package/dist/controls/actions.type-guard.test.d.ts.map +0 -1
  820. package/dist/controls/control-group.test.d.ts +0 -2
  821. package/dist/controls/control-group.test.d.ts.map +0 -1
  822. package/dist/controls/controls.router.test.d.ts +0 -2
  823. package/dist/controls/controls.router.test.d.ts.map +0 -1
  824. package/dist/controls/filter-set.test.d.ts +0 -2
  825. package/dist/controls/filter-set.test.d.ts.map +0 -1
  826. package/dist/controls/peer-boundary.test.d.ts +0 -2
  827. package/dist/controls/peer-boundary.test.d.ts.map +0 -1
  828. package/dist/controls/props-contract.test.d.ts +0 -2
  829. package/dist/controls/props-contract.test.d.ts.map +0 -1
  830. package/dist/controls/sync-button.test.d.ts +0 -2
  831. package/dist/controls/sync-button.test.d.ts.map +0 -1
  832. package/dist/dashboard/query-state.test.d.ts +0 -2
  833. package/dist/dashboard/query-state.test.d.ts.map +0 -1
  834. package/dist/dashboard/settings-section.test.d.ts +0 -2
  835. package/dist/dashboard/settings-section.test.d.ts.map +0 -1
  836. package/dist/dashboard/stat-card.test.d.ts +0 -2
  837. package/dist/dashboard/stat-card.test.d.ts.map +0 -1
  838. package/dist/data/data-table.test.d.ts +0 -2
  839. package/dist/data/data-table.test.d.ts.map +0 -1
  840. package/dist/guard/check-source.test.d.ts +0 -2
  841. package/dist/guard/check-source.test.d.ts.map +0 -1
  842. package/dist/guard/grace.test.d.ts +0 -20
  843. package/dist/guard/grace.test.d.ts.map +0 -1
  844. package/dist/guard/guard-hook.test.d.ts +0 -2
  845. package/dist/guard/guard-hook.test.d.ts.map +0 -1
  846. package/dist/provider/index.test.d.ts +0 -2
  847. package/dist/provider/index.test.d.ts.map +0 -1
  848. package/dist/provider/lab-theme.test.d.ts +0 -2
  849. package/dist/provider/lab-theme.test.d.ts.map +0 -1
  850. package/dist/query/error-message.test.d.ts +0 -2
  851. package/dist/query/error-message.test.d.ts.map +0 -1
  852. package/dist/router-tanstack/multi-search-param-store.test.d.ts +0 -2
  853. package/dist/router-tanstack/multi-search-param-store.test.d.ts.map +0 -1
  854. package/dist/router-tanstack/nav.test.d.ts +0 -2
  855. package/dist/router-tanstack/nav.test.d.ts.map +0 -1
  856. package/dist/router-tanstack/search-param-store.test.d.ts +0 -2
  857. package/dist/router-tanstack/search-param-store.test.d.ts.map +0 -1
  858. package/dist/router-tanstack/search-store.router.test.d.ts +0 -2
  859. package/dist/router-tanstack/search-store.router.test.d.ts.map +0 -1
  860. package/dist/router-tanstack/search-store.test.d.ts +0 -2
  861. package/dist/router-tanstack/search-store.test.d.ts.map +0 -1
  862. package/dist/router-tanstack/use-nav.test.d.ts +0 -2
  863. package/dist/router-tanstack/use-nav.test.d.ts.map +0 -1
  864. package/dist/section/section.test.d.ts +0 -2
  865. package/dist/section/section.test.d.ts.map +0 -1
  866. package/dist/shell/app-mobile-nav.test.d.ts +0 -2
  867. package/dist/shell/app-mobile-nav.test.d.ts.map +0 -1
  868. package/dist/shell/app-sidebar.test.d.ts +0 -2
  869. package/dist/shell/app-sidebar.test.d.ts.map +0 -1
  870. package/dist/shell/index.test.d.ts +0 -2
  871. package/dist/shell/index.test.d.ts.map +0 -1
  872. package/dist/shell/mobile-nav-model.test.d.ts +0 -2
  873. package/dist/shell/mobile-nav-model.test.d.ts.map +0 -1
  874. package/dist/shell/page-bar.test.d.ts +0 -2
  875. package/dist/shell/page-bar.test.d.ts.map +0 -1
  876. package/dist/state/fields.test.d.ts +0 -2
  877. package/dist/state/fields.test.d.ts.map +0 -1
  878. package/dist/styles.floor.test.d.ts +0 -2
  879. package/dist/styles.floor.test.d.ts.map +0 -1
  880. package/dist/theme/border-coverage.test.d.ts +0 -18
  881. package/dist/theme/border-coverage.test.d.ts.map +0 -1
  882. package/dist/theme/contrast.test.d.ts +0 -2
  883. package/dist/theme/contrast.test.d.ts.map +0 -1
  884. package/dist/theme/ctl-theme.test.d.ts +0 -2
  885. package/dist/theme/ctl-theme.test.d.ts.map +0 -1
  886. package/dist/theme/ctl-tier-coverage.test.d.ts +0 -2
  887. package/dist/theme/ctl-tier-coverage.test.d.ts.map +0 -1
  888. package/dist/theme/density-option.test.d.ts +0 -2
  889. package/dist/theme/density-option.test.d.ts.map +0 -1
  890. package/dist/theme/density-relations.test.d.ts +0 -2
  891. package/dist/theme/density-relations.test.d.ts.map +0 -1
  892. package/dist/theme/derive-theme.test.d.ts +0 -2
  893. package/dist/theme/derive-theme.test.d.ts.map +0 -1
  894. package/dist/theme/divider-law.test.d.ts +0 -2
  895. package/dist/theme/divider-law.test.d.ts.map +0 -1
  896. package/dist/theme/fonts-option.test.d.ts +0 -2
  897. package/dist/theme/fonts-option.test.d.ts.map +0 -1
  898. package/dist/theme/icon-slot.test.d.ts +0 -2
  899. package/dist/theme/icon-slot.test.d.ts.map +0 -1
  900. package/dist/theme/layout-rhythm-css.test.d.ts +0 -2
  901. package/dist/theme/layout-rhythm-css.test.d.ts.map +0 -1
  902. package/dist/theme/radius-option.test.d.ts +0 -2
  903. package/dist/theme/radius-option.test.d.ts.map +0 -1
  904. package/dist/theme/radius.test.d.ts +0 -2
  905. package/dist/theme/radius.test.d.ts.map +0 -1
  906. package/dist/theme/shadow-surfaces.test.d.ts +0 -26
  907. package/dist/theme/shadow-surfaces.test.d.ts.map +0 -1
  908. package/dist/theme/spacing.test.d.ts +0 -2
  909. package/dist/theme/spacing.test.d.ts.map +0 -1
  910. package/dist/theme/use-basalt-spacing.test.d.ts +0 -2
  911. package/dist/theme/use-basalt-spacing.test.d.ts.map +0 -1
  912. package/dist/theme-lab/derive-controls.test.d.ts +0 -2
  913. package/dist/theme-lab/derive-controls.test.d.ts.map +0 -1
  914. package/dist/theme-lab/derive-state.test.d.ts +0 -2
  915. package/dist/theme-lab/derive-state.test.d.ts.map +0 -1
  916. package/dist/theme-lab/theme-lab.test.d.ts +0 -2
  917. package/dist/theme-lab/theme-lab.test.d.ts.map +0 -1
  918. package/dist/tokens/build-fonts-css.test.d.ts +0 -2
  919. package/dist/tokens/build-fonts-css.test.d.ts.map +0 -1
  920. package/dist/tokens/build-radius-css.test.d.ts +0 -2
  921. package/dist/tokens/build-radius-css.test.d.ts.map +0 -1
  922. package/dist/tokens/chart-margin.test.d.ts +0 -2
  923. package/dist/tokens/chart-margin.test.d.ts.map +0 -1
  924. package/dist/tokens/density.test.d.ts +0 -2
  925. package/dist/tokens/density.test.d.ts.map +0 -1
  926. package/dist/tokens/derive-radius.test.d.ts +0 -2
  927. package/dist/tokens/derive-radius.test.d.ts.map +0 -1
  928. package/dist/tokens/derive.test.d.ts +0 -2
  929. package/dist/tokens/derive.test.d.ts.map +0 -1
  930. package/dist/tokens/palette.test.d.ts +0 -2
  931. package/dist/tokens/palette.test.d.ts.map +0 -1
  932. package/dist/tokens/text-scale.test.d.ts +0 -2
  933. package/dist/tokens/text-scale.test.d.ts.map +0 -1
  934. package/dist/vite-color-mix.test.d.ts +0 -2
  935. package/dist/vite-color-mix.test.d.ts.map +0 -1
  936. package/dist/vite.test.d.ts +0 -2
  937. package/dist/vite.test.d.ts.map +0 -1
  938. package/dist/widget-header/delta-badge.test.d.ts +0 -2
  939. package/dist/widget-header/delta-badge.test.d.ts.map +0 -1
  940. package/dist/widget-header/no-mantine.test.d.ts +0 -2
  941. package/dist/widget-header/no-mantine.test.d.ts.map +0 -1
  942. package/dist/widget-header/widget-header.test.d.ts +0 -2
  943. package/dist/widget-header/widget-header.test.d.ts.map +0 -1
  944. package/src/agent/adapter.test.ts +0 -1640
  945. package/src/agent/ai-sdk-transport.test.ts +0 -658
  946. package/src/agent/coalesce.test.ts +0 -387
  947. package/src/agent/foreign.test.ts +0 -51
  948. package/src/agent/id.test.ts +0 -169
  949. package/src/agent/merge.test.ts +0 -206
  950. package/src/agent/part-list.test.tsx +0 -112
  951. package/src/agent/parts.test.ts +0 -720
  952. package/src/agent/thread.test.ts +0 -220
  953. package/src/agent/transport.test.ts +0 -70
  954. package/src/agent/use-agent-stream.test.tsx +0 -287
  955. package/src/agent/use-agent-thread-runs.foreign.test.tsx +0 -138
  956. package/src/agent/use-agent-thread-runs.resume.test.tsx +0 -294
  957. package/src/agent/use-agent-thread-runs.test.tsx +0 -1120
  958. package/src/agent/use-agent-thread-runs.wedge.test.tsx +0 -387
  959. package/src/agent-chat/composer.test.tsx +0 -924
  960. package/src/agent-chat/relative-time.test.ts +0 -95
  961. package/src/agent-chat/thread-feed-row.test.tsx +0 -510
  962. package/src/agent-chat/thread-feed.test.tsx +0 -241
  963. package/src/agent-chat/thread-message.test.tsx +0 -1285
  964. package/src/agent-chat/thread-workspace.test.tsx +0 -169
  965. package/src/agent-chat/tool-chip.test.tsx +0 -139
  966. package/src/agent-chat/virtualize.type-guard.test.ts +0 -49
  967. package/src/charts/cursor/resolve.test.ts +0 -151
  968. package/src/charts/cursor/store.test.ts +0 -64
  969. package/src/charts/kinds/BandStrip.test.tsx +0 -282
  970. package/src/charts/kinds/Bars.test.tsx +0 -183
  971. package/src/charts/kinds/DualPanel.test.tsx +0 -527
  972. package/src/charts/kinds/MirroredBars.test.tsx +0 -232
  973. package/src/charts/kinds/MultiLine.test.tsx +0 -218
  974. package/src/charts/kinds/StackedArea.test.tsx +0 -114
  975. package/src/charts/kinds/ZonedLine.test.tsx +0 -147
  976. package/src/charts/layout/auto-margin.test.ts +0 -42
  977. package/src/charts/primitives/CartesianChart.test.tsx +0 -647
  978. package/src/charts/primitives/ChartCard.test.tsx +0 -66
  979. package/src/charts/primitives/ChartFrame.test.tsx +0 -142
  980. package/src/charts/primitives/ChartLegend.test.tsx +0 -78
  981. package/src/charts/primitives/ChartTooltip.test.tsx +0 -44
  982. package/src/charts/primitives/XZoneRects.test.tsx +0 -123
  983. package/src/charts/series.test.ts +0 -112
  984. package/src/charts/utils/domain.test.ts +0 -54
  985. package/src/charts/utils/measure-text.test.ts +0 -36
  986. package/src/cli/check-coverage.test.ts +0 -297
  987. package/src/cli/check-theme.test.ts +0 -837
  988. package/src/cli/help.test.ts +0 -170
  989. package/src/cli/init-sync.test.ts +0 -343
  990. package/src/cli/placement-engine.test.ts +0 -298
  991. package/src/cli/shipped-versions.test.ts +0 -83
  992. package/src/cli/tarball-parity.test.ts +0 -44
  993. package/src/cli/template-format.test.ts +0 -64
  994. package/src/cli/template-ledger.test.ts +0 -219
  995. package/src/cli/tokens-css.test.ts +0 -249
  996. package/src/cli/toolchain-wiring.test.ts +0 -1358
  997. package/src/cli/waiver-audit.test.ts +0 -215
  998. package/src/content/article-actions.test.ts +0 -78
  999. package/src/content/article-model.test.ts +0 -119
  1000. package/src/content/block-split.test.ts +0 -75
  1001. package/src/content/heading-components.test.tsx +0 -65
  1002. package/src/content/markdown.test.tsx +0 -603
  1003. package/src/content/prose.module.css.test.ts +0 -39
  1004. package/src/content/sanitize.test.ts +0 -659
  1005. package/src/content/slug.test.ts +0 -62
  1006. package/src/controls/actions.test.tsx +0 -252
  1007. package/src/controls/actions.type-guard.test.ts +0 -63
  1008. package/src/controls/control-group.test.tsx +0 -229
  1009. package/src/controls/controls.router.test.tsx +0 -637
  1010. package/src/controls/filter-set.test.tsx +0 -472
  1011. package/src/controls/peer-boundary.test.ts +0 -85
  1012. package/src/controls/props-contract.test.tsx +0 -106
  1013. package/src/controls/sync-button.test.tsx +0 -183
  1014. package/src/dashboard/query-state.test.tsx +0 -152
  1015. package/src/dashboard/settings-section.test.tsx +0 -56
  1016. package/src/dashboard/stat-card.test.tsx +0 -154
  1017. package/src/data/data-table.test.tsx +0 -434
  1018. package/src/guard/check-source.test.ts +0 -3355
  1019. package/src/guard/grace.test.ts +0 -149
  1020. package/src/guard/guard-hook.test.ts +0 -203
  1021. package/src/provider/index.test.tsx +0 -101
  1022. package/src/provider/lab-theme.test.ts +0 -147
  1023. package/src/query/error-message.test.ts +0 -67
  1024. package/src/router-tanstack/multi-search-param-store.test.ts +0 -124
  1025. package/src/router-tanstack/nav.test.ts +0 -111
  1026. package/src/router-tanstack/search-param-store.test.ts +0 -135
  1027. package/src/router-tanstack/search-store.router.test.tsx +0 -661
  1028. package/src/router-tanstack/search-store.test.ts +0 -418
  1029. package/src/router-tanstack/use-nav.test.tsx +0 -187
  1030. package/src/section/section.test.tsx +0 -204
  1031. package/src/shell/app-mobile-nav.test.tsx +0 -403
  1032. package/src/shell/app-sidebar.test.tsx +0 -509
  1033. package/src/shell/index.test.tsx +0 -428
  1034. package/src/shell/mobile-nav-model.test.ts +0 -517
  1035. package/src/shell/page-bar.test.tsx +0 -316
  1036. package/src/state/fields.test.tsx +0 -258
  1037. package/src/styles.floor.test.ts +0 -36
  1038. package/src/theme/border-coverage.test.ts +0 -272
  1039. package/src/theme/contrast.test.ts +0 -354
  1040. package/src/theme/ctl-theme.test.tsx +0 -275
  1041. package/src/theme/ctl-tier-coverage.test.ts +0 -170
  1042. package/src/theme/density-option.test.ts +0 -96
  1043. package/src/theme/density-relations.test.ts +0 -506
  1044. package/src/theme/derive-theme.test.ts +0 -101
  1045. package/src/theme/divider-law.test.ts +0 -259
  1046. package/src/theme/fonts-option.test.ts +0 -75
  1047. package/src/theme/icon-slot.test.tsx +0 -275
  1048. package/src/theme/layout-rhythm-css.test.ts +0 -72
  1049. package/src/theme/radius-option.test.ts +0 -86
  1050. package/src/theme/radius.test.ts +0 -142
  1051. package/src/theme/shadow-surfaces.test.ts +0 -488
  1052. package/src/theme/spacing.test.ts +0 -495
  1053. package/src/theme/use-basalt-spacing.test.tsx +0 -55
  1054. package/src/theme-lab/derive-controls.test.ts +0 -94
  1055. package/src/theme-lab/derive-state.test.ts +0 -71
  1056. package/src/theme-lab/theme-lab.test.ts +0 -46
  1057. package/src/tokens/build-fonts-css.test.ts +0 -52
  1058. package/src/tokens/build-radius-css.test.ts +0 -25
  1059. package/src/tokens/chart-margin.test.ts +0 -39
  1060. package/src/tokens/density.test.ts +0 -259
  1061. package/src/tokens/derive-radius.test.ts +0 -62
  1062. package/src/tokens/derive.test.ts +0 -30
  1063. package/src/tokens/palette.test.ts +0 -114
  1064. package/src/tokens/text-scale.test.ts +0 -51
  1065. package/src/vite-color-mix.test.ts +0 -46
  1066. package/src/vite.test.ts +0 -423
  1067. package/src/widget-header/delta-badge.test.tsx +0 -60
  1068. package/src/widget-header/no-mantine.test.ts +0 -33
  1069. 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
- })