basalt-ui 1.28.0 → 1.29.1

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 (457) hide show
  1. package/AGENTS.md +12 -19
  2. package/CHANGELOG.md +23 -0
  3. package/MIGRATING.md +171 -7
  4. package/README.md +66 -105
  5. package/agent/rules/basalt-batteries.md +60 -183
  6. package/agent/rules/basalt-charts.md +56 -75
  7. package/agent/rules/basalt-controls.md +38 -69
  8. package/agent/rules/basalt-mantine.md +58 -103
  9. package/agent/rules/basalt-state.md +42 -60
  10. package/agent/rules/basalt-tokens.md +46 -67
  11. package/agent/skills/basalt-app/SKILL.md +2 -0
  12. package/agent/templates/CLAUDE-block.md.tpl +14 -14
  13. package/agent/templates/query-client.ts.tpl +1 -1
  14. package/configs/oxlint-plugin.js +84 -254
  15. package/configs/oxlint-plugin.test.ts +23 -266
  16. package/configs/oxlint.json +0 -2
  17. package/dist/agent/ai-sdk-transport.d.ts.map +1 -1
  18. package/dist/agent/ai-sdk-transport.js +7 -4
  19. package/dist/agent/coalesce.js +1 -1
  20. package/dist/agent/merge.js +1 -1
  21. package/dist/agent/transport.d.ts +13 -2
  22. package/dist/agent/transport.d.ts.map +1 -1
  23. package/dist/agent/use-agent-thread-runs.d.ts +12 -1
  24. package/dist/agent/use-agent-thread-runs.d.ts.map +1 -1
  25. package/dist/agent/use-agent-thread-runs.js +20 -6
  26. package/dist/agent-chat/index.d.ts +1 -1
  27. package/dist/agent-chat/index.d.ts.map +1 -1
  28. package/dist/agent-chat/relative-time.js +1 -1
  29. package/dist/agent-chat/thread-detail-panel.js +1 -1
  30. package/dist/agent-chat/thread-feed-row.d.ts +32 -7
  31. package/dist/agent-chat/thread-feed-row.d.ts.map +1 -1
  32. package/dist/agent-chat/thread-feed-row.js +121 -86
  33. package/dist/agent-chat/thread-feed.d.ts +11 -1
  34. package/dist/agent-chat/thread-feed.d.ts.map +1 -1
  35. package/dist/agent-chat/thread-feed.js +10 -6
  36. package/dist/agent-chat/thread-message.js +1 -1
  37. package/dist/agent-chat/virtualize.d.ts +39 -0
  38. package/dist/agent-chat/virtualize.d.ts.map +1 -1
  39. package/dist/agent-chat/virtualize.js +15 -0
  40. package/dist/charts/index.d.ts +3 -3
  41. package/dist/charts/index.d.ts.map +1 -1
  42. package/dist/charts/index.js +8 -4
  43. package/dist/charts/kinds/BandStrip.js +1 -1
  44. package/dist/charts/kinds/Bars.d.ts +1 -3
  45. package/dist/charts/kinds/Bars.d.ts.map +1 -1
  46. package/dist/charts/kinds/Bars.js +1 -1
  47. package/dist/charts/kinds/DualPanel.d.ts +3 -1
  48. package/dist/charts/kinds/DualPanel.d.ts.map +1 -1
  49. package/dist/charts/kinds/DualPanel.js +1 -1
  50. package/dist/charts/kinds/StackedArea.js +1 -1
  51. package/dist/charts/kinds/ZonedLine.d.ts +1 -3
  52. package/dist/charts/kinds/ZonedLine.d.ts.map +1 -1
  53. package/dist/charts/primitives/Axes.d.ts +21 -2
  54. package/dist/charts/primitives/Axes.d.ts.map +1 -1
  55. package/dist/charts/primitives/Axes.js +34 -2
  56. package/dist/charts/primitives/ChartCard.d.ts +20 -4
  57. package/dist/charts/primitives/ChartCard.d.ts.map +1 -1
  58. package/dist/charts/primitives/ChartCard.js +62 -33
  59. package/dist/charts/primitives/ChartFrame.d.ts.map +1 -1
  60. package/dist/charts/primitives/ChartFrame.js +8 -1
  61. package/dist/charts/primitives/ChartPending.d.ts +12 -6
  62. package/dist/charts/primitives/ChartPending.d.ts.map +1 -1
  63. package/dist/charts/primitives/ChartPending.js +1 -1
  64. package/dist/charts/utils/format.d.ts +5 -92
  65. package/dist/charts/utils/format.d.ts.map +1 -1
  66. package/dist/charts/utils/format.js +10 -80
  67. package/dist/cli/audit-allows.d.ts +24 -0
  68. package/dist/cli/audit-allows.d.ts.map +1 -0
  69. package/dist/cli/audit-allows.js +240 -0
  70. package/dist/cli/check-theme.d.ts +10 -0
  71. package/dist/cli/check-theme.d.ts.map +1 -0
  72. package/dist/cli/check-theme.js +139 -0
  73. package/dist/cli/doctor.d.ts +47 -0
  74. package/dist/cli/doctor.d.ts.map +1 -0
  75. package/dist/cli/doctor.js +197 -0
  76. package/dist/cli/guard-hook.d.ts +9 -0
  77. package/dist/cli/guard-hook.d.ts.map +1 -0
  78. package/dist/cli/guard-hook.js +93 -0
  79. package/dist/cli/help.d.ts +9 -0
  80. package/dist/cli/help.d.ts.map +1 -0
  81. package/dist/cli/help.js +53 -0
  82. package/dist/cli/index.d.ts +360 -270
  83. package/dist/cli/index.d.ts.map +1 -1
  84. package/dist/cli/index.js +85 -1901
  85. package/dist/cli/init.d.ts +4 -0
  86. package/dist/cli/init.d.ts.map +1 -0
  87. package/dist/cli/init.js +165 -0
  88. package/dist/cli/sync.d.ts +43 -0
  89. package/dist/cli/sync.d.ts.map +1 -0
  90. package/dist/cli/sync.js +206 -0
  91. package/dist/cli/tokens-css.d.ts +51 -0
  92. package/dist/cli/tokens-css.d.ts.map +1 -0
  93. package/dist/cli/tokens-css.js +165 -0
  94. package/dist/commands/define-commands.js +1 -1
  95. package/dist/commands/define-overlays.js +1 -1
  96. package/dist/commands/index.d.ts +2 -1
  97. package/dist/commands/index.d.ts.map +1 -1
  98. package/dist/commands/index.js +6 -0
  99. package/dist/commands/overlays-mount.d.ts +7 -9
  100. package/dist/commands/overlays-mount.d.ts.map +1 -1
  101. package/dist/commands/shell-bridge.d.ts +57 -0
  102. package/dist/commands/shell-bridge.d.ts.map +1 -0
  103. package/dist/commands/shell-bridge.js +32 -0
  104. package/dist/common/errors.d.ts +35 -0
  105. package/dist/common/errors.d.ts.map +1 -1
  106. package/dist/common/errors.js +29 -1
  107. package/dist/common/index.d.ts +2 -0
  108. package/dist/common/index.d.ts.map +1 -1
  109. package/dist/common/index.js +6 -0
  110. package/dist/common/is-dev.d.ts.map +1 -0
  111. package/dist/{motion/index.d.ts → common/motion.d.ts} +1 -1
  112. package/dist/common/motion.d.ts.map +1 -0
  113. package/dist/common/props.d.ts +1 -1
  114. package/dist/common/props.d.ts.map +1 -1
  115. package/dist/common/validate.js +1 -1
  116. package/dist/content/markdown.d.ts +3 -4
  117. package/dist/content/markdown.d.ts.map +1 -1
  118. package/dist/content/markdown.js +1 -4
  119. package/dist/controls/actions.d.ts +1 -1
  120. package/dist/controls/actions.d.ts.map +1 -1
  121. package/dist/controls/panel-row.js +1 -1
  122. package/dist/controls/range-filter.js +1 -1
  123. package/dist/dashboard/delta-badge.d.ts +18 -10
  124. package/dist/dashboard/delta-badge.d.ts.map +1 -1
  125. package/dist/dashboard/delta-badge.js +33 -1
  126. package/dist/dashboard/empty-state.d.ts +1 -4
  127. package/dist/dashboard/empty-state.d.ts.map +1 -1
  128. package/dist/dashboard/empty-state.js +1 -2
  129. package/dist/dashboard/index.d.ts +4 -2
  130. package/dist/dashboard/index.d.ts.map +1 -1
  131. package/dist/dashboard/index.js +7 -1
  132. package/dist/dashboard/query-state.d.ts +4 -13
  133. package/dist/dashboard/query-state.d.ts.map +1 -1
  134. package/dist/dashboard/query-state.js +4 -7
  135. package/dist/{section → dashboard}/section.d.ts +2 -2
  136. package/dist/{section → dashboard}/section.d.ts.map +1 -1
  137. package/dist/{section → dashboard}/section.js +2 -2
  138. package/dist/dashboard/settings-section.d.ts +1 -1
  139. package/dist/dashboard/settings-section.d.ts.map +1 -1
  140. package/dist/dashboard/settings-section.js +1 -1
  141. package/dist/dashboard/stat-card.d.ts +1 -1
  142. package/dist/dashboard/stat-card.d.ts.map +1 -1
  143. package/dist/dashboard/stat-card.js +1 -1
  144. package/dist/dashboard/widget-header.d.ts.map +1 -0
  145. package/dist/data/data-table.js +2 -2
  146. package/dist/data/table.d.ts +1 -1
  147. package/dist/data/table.d.ts.map +1 -1
  148. package/dist/data/table.js +2 -16
  149. package/dist/data/virtual.d.ts +3 -3
  150. package/dist/dev-dock.d.ts +26 -0
  151. package/dist/dev-dock.d.ts.map +1 -0
  152. package/dist/dev-dock.js +85 -0
  153. package/dist/format/date.d.ts +62 -0
  154. package/dist/format/date.d.ts.map +1 -0
  155. package/dist/format/date.js +106 -0
  156. package/dist/format/index.d.ts +39 -0
  157. package/dist/format/index.d.ts.map +1 -0
  158. package/dist/format/index.js +54 -0
  159. package/dist/format/measure.d.ts +15 -0
  160. package/dist/format/measure.d.ts.map +1 -0
  161. package/dist/format/measure.js +16 -0
  162. package/dist/format/number.d.ts +69 -0
  163. package/dist/format/number.d.ts.map +1 -0
  164. package/dist/format/number.js +62 -0
  165. package/dist/format/shared.d.ts +27 -0
  166. package/dist/format/shared.d.ts.map +1 -0
  167. package/dist/format/shared.js +29 -0
  168. package/dist/forms/field.d.ts +4 -20
  169. package/dist/forms/field.d.ts.map +1 -1
  170. package/dist/forms/field.js +0 -4
  171. package/dist/forms/form-layout.d.ts +1 -1
  172. package/dist/forms/form-layout.d.ts.map +1 -1
  173. package/dist/forms/form-layout.js +1 -1
  174. package/dist/forms/index.d.ts +1 -1
  175. package/dist/forms/index.d.ts.map +1 -1
  176. package/dist/forms/index.js +1 -2
  177. package/dist/forms/use-form-submit.d.ts +1 -1
  178. package/dist/forms/use-form-submit.js +1 -1
  179. package/dist/guard/index.d.ts +2 -9
  180. package/dist/guard/index.d.ts.map +1 -1
  181. package/dist/guard/index.js +53 -32
  182. package/dist/guard/types.d.ts +8 -10
  183. package/dist/guard/types.d.ts.map +1 -1
  184. package/dist/index.d.ts +16 -11
  185. package/dist/index.d.ts.map +1 -1
  186. package/dist/index.js +23 -29
  187. package/dist/notifications/index.d.ts +5 -5
  188. package/dist/notifications/index.d.ts.map +1 -1
  189. package/dist/notifications/index.js +0 -2
  190. package/dist/notifications/mount-guard.d.ts.map +1 -1
  191. package/dist/notifications/mount-guard.js +2 -2
  192. package/dist/provider/connectivity-indicator.d.ts.map +1 -0
  193. package/dist/{connectivity → provider}/connectivity-provider.d.ts +1 -1
  194. package/dist/provider/connectivity-provider.d.ts.map +1 -0
  195. package/dist/{connectivity/types.d.ts → provider/connectivity-types.d.ts} +1 -1
  196. package/dist/provider/connectivity-types.d.ts.map +1 -0
  197. package/dist/provider/error-fallback.module.css +21 -0
  198. package/dist/provider/error-fallback.module.css.d.ts +9 -0
  199. package/dist/provider/index.d.ts +20 -36
  200. package/dist/provider/index.d.ts.map +1 -1
  201. package/dist/provider/index.js +42 -32
  202. package/dist/provider/lab-theme.js +1 -1
  203. package/dist/provider/use-connectivity.d.ts +3 -0
  204. package/dist/provider/use-connectivity.d.ts.map +1 -0
  205. package/dist/query-client.d.ts +67 -0
  206. package/dist/query-client.d.ts.map +1 -0
  207. package/dist/query-client.js +35 -0
  208. package/dist/{query/devtools.d.ts → query-devtools.d.ts} +2 -2
  209. package/dist/query-devtools.d.ts.map +1 -0
  210. package/dist/register.d.ts +17 -3
  211. package/dist/register.d.ts.map +1 -1
  212. package/dist/router-tanstack/index.d.ts +4 -7
  213. package/dist/router-tanstack/index.d.ts.map +1 -1
  214. package/dist/router-tanstack/index.js +1 -9
  215. package/dist/router-tanstack/nav.d.ts +1 -1
  216. package/dist/router-tanstack/nav.d.ts.map +1 -1
  217. package/dist/router-tanstack/search-store.d.ts +3 -6
  218. package/dist/router-tanstack/search-store.d.ts.map +1 -1
  219. package/dist/router-tanstack/use-nav.d.ts +1 -1
  220. package/dist/router-tanstack/use-nav.d.ts.map +1 -1
  221. package/dist/shell/app-breadcrumbs.d.ts +1 -1
  222. package/dist/shell/app-breadcrumbs.d.ts.map +1 -1
  223. package/dist/shell/app-main.module.css +11 -0
  224. package/dist/shell/app-mobile-nav.d.ts +1 -1
  225. package/dist/shell/app-mobile-nav.d.ts.map +1 -1
  226. package/dist/shell/app-mobile-nav.js +24 -2
  227. package/dist/shell/app-sidebar.d.ts +1 -1
  228. package/dist/shell/app-sidebar.d.ts.map +1 -1
  229. package/dist/shell/app-sidebar.js +31 -2
  230. package/dist/shell/app-sidebar.module.css +10 -0
  231. package/dist/shell/index.d.ts +10 -4
  232. package/dist/shell/index.d.ts.map +1 -1
  233. package/dist/shell/index.js +13 -17
  234. package/dist/shell/mobile-nav-model.d.ts +1 -1
  235. package/dist/shell/mobile-nav-model.d.ts.map +1 -1
  236. package/dist/{nav/types.d.ts → shell/nav-types.d.ts} +1 -1
  237. package/dist/shell/nav-types.d.ts.map +1 -0
  238. package/dist/shell/page-aside.d.ts.map +1 -1
  239. package/dist/shell/page-aside.js +2 -29
  240. package/dist/shell/page-title.d.ts +14 -0
  241. package/dist/shell/page-title.d.ts.map +1 -0
  242. package/dist/shell/page-title.js +25 -0
  243. package/dist/shell/page-title.module.css +33 -0
  244. package/dist/shell/page-title.module.css.d.ts +11 -0
  245. package/dist/shell/sidebar-block-model.d.ts +1 -1
  246. package/dist/shell/sidebar-block-model.d.ts.map +1 -1
  247. package/dist/shell/sidebar-blocks.d.ts +1 -1
  248. package/dist/shell/sidebar-blocks.d.ts.map +1 -1
  249. package/dist/shell/use-breakpoint.d.ts +11 -0
  250. package/dist/shell/use-breakpoint.d.ts.map +1 -0
  251. package/dist/shell/use-breakpoint.js +33 -0
  252. package/dist/state/fields.d.ts +3 -19
  253. package/dist/state/fields.d.ts.map +1 -1
  254. package/dist/state/fields.js +6 -16
  255. package/dist/styles.css +36 -0
  256. package/dist/surfaces.d.ts +18 -41
  257. package/dist/surfaces.d.ts.map +1 -1
  258. package/dist/surfaces.js +48 -60
  259. package/dist/theme/index.d.ts.map +1 -1
  260. package/dist/{theme-toggle/index.d.ts → theme/theme-toggle.d.ts} +1 -1
  261. package/dist/theme/theme-toggle.d.ts.map +1 -0
  262. package/dist/{theme-toggle/index.js → theme/theme-toggle.js} +1 -1
  263. package/dist/tokens/index.d.ts +1 -0
  264. package/dist/tokens/index.d.ts.map +1 -1
  265. package/dist/tokens/index.js +10 -0
  266. package/dist/tokens/palette.d.ts +12 -0
  267. package/dist/tokens/palette.d.ts.map +1 -1
  268. package/dist/tokens/palette.js +13 -1
  269. package/dist/tokens.css +1 -0
  270. package/llms.txt +9 -24
  271. package/package.json +12 -16
  272. package/src/agent/ai-sdk-transport.ts +11 -4
  273. package/src/agent/coalesce.ts +1 -1
  274. package/src/agent/merge.ts +1 -1
  275. package/src/agent/transport.ts +15 -2
  276. package/src/agent/use-agent-thread-runs.ts +65 -15
  277. package/src/agent-chat/index.ts +6 -4
  278. package/src/agent-chat/relative-time.ts +1 -1
  279. package/src/agent-chat/thread-detail-panel.tsx +1 -1
  280. package/src/agent-chat/thread-feed-row.tsx +105 -30
  281. package/src/agent-chat/thread-feed.tsx +51 -25
  282. package/src/agent-chat/thread-message.tsx +1 -1
  283. package/src/agent-chat/virtualize.ts +48 -0
  284. package/src/charts/index.ts +7 -10
  285. package/src/charts/kinds/BandStrip.tsx +1 -1
  286. package/src/charts/kinds/Bars.tsx +2 -5
  287. package/src/charts/kinds/DualPanel.tsx +4 -3
  288. package/src/charts/kinds/StackedArea.tsx +1 -1
  289. package/src/charts/kinds/ZonedLine.tsx +1 -4
  290. package/src/charts/primitives/Axes.tsx +49 -0
  291. package/src/charts/primitives/ChartCard.tsx +49 -6
  292. package/src/charts/primitives/ChartFrame.tsx +5 -1
  293. package/src/charts/primitives/ChartPending.tsx +14 -8
  294. package/src/charts/utils/format.ts +17 -186
  295. package/src/cli/audit-allows.ts +371 -0
  296. package/src/cli/check-theme.ts +197 -0
  297. package/src/cli/doctor.ts +331 -0
  298. package/src/cli/guard-hook.ts +115 -0
  299. package/src/cli/help.ts +101 -0
  300. package/src/cli/index.ts +269 -3439
  301. package/src/cli/init.ts +247 -0
  302. package/src/cli/sync.ts +324 -0
  303. package/src/cli/tokens-css.ts +252 -0
  304. package/src/commands/define-commands.ts +1 -1
  305. package/src/commands/define-overlays.ts +1 -1
  306. package/src/commands/index.ts +10 -1
  307. package/src/commands/overlays-mount.tsx +8 -10
  308. package/src/commands/shell-bridge.ts +86 -0
  309. package/src/common/errors.ts +70 -0
  310. package/src/common/index.ts +2 -0
  311. package/src/common/props.ts +1 -1
  312. package/src/common/validate.ts +1 -1
  313. package/src/content/markdown.tsx +4 -8
  314. package/src/controls/actions.tsx +1 -1
  315. package/src/controls/panel-row.tsx +1 -1
  316. package/src/controls/range-filter.tsx +1 -1
  317. package/src/dashboard/delta-badge.tsx +74 -7
  318. package/src/dashboard/empty-state.tsx +2 -6
  319. package/src/dashboard/index.ts +11 -2
  320. package/src/dashboard/query-state.tsx +5 -18
  321. package/src/{section → dashboard}/section.tsx +4 -4
  322. package/src/dashboard/settings-section.tsx +2 -2
  323. package/src/dashboard/stat-card.tsx +2 -2
  324. package/src/data/data-table.tsx +3 -3
  325. package/src/data/table.ts +6 -25
  326. package/src/data/virtual-list.tsx +1 -1
  327. package/src/data/virtual.ts +3 -3
  328. package/src/dev-dock.tsx +162 -0
  329. package/src/format/date.ts +184 -0
  330. package/src/format/index.ts +69 -0
  331. package/src/format/measure.ts +31 -0
  332. package/src/format/number.ts +129 -0
  333. package/src/format/shared.ts +63 -0
  334. package/src/forms/field.ts +4 -24
  335. package/src/forms/form-layout.tsx +2 -2
  336. package/src/forms/index.ts +1 -2
  337. package/src/forms/use-form-submit.ts +2 -2
  338. package/src/guard/index.ts +80 -69
  339. package/src/guard/types.ts +7 -10
  340. package/src/index.ts +38 -29
  341. package/src/notifications/index.ts +5 -7
  342. package/src/notifications/mount-guard.ts +7 -9
  343. package/src/{connectivity → provider}/connectivity-indicator.tsx +1 -1
  344. package/src/{connectivity → provider}/connectivity-provider.tsx +1 -1
  345. package/src/provider/error-fallback.module.css +21 -0
  346. package/src/provider/error-fallback.module.css.d.ts +9 -0
  347. package/src/provider/index.tsx +71 -71
  348. package/src/provider/lab-theme.ts +1 -1
  349. package/src/{connectivity → provider}/use-connectivity.ts +3 -3
  350. package/src/query-client.ts +105 -0
  351. package/src/{query/devtools.tsx → query-devtools.tsx} +5 -4
  352. package/src/register.ts +20 -4
  353. package/src/router-tanstack/index.ts +4 -15
  354. package/src/router-tanstack/nav.ts +1 -1
  355. package/src/router-tanstack/search-store.ts +3 -4
  356. package/src/router-tanstack/use-nav.ts +1 -1
  357. package/src/shell/app-breadcrumbs.tsx +1 -1
  358. package/src/shell/app-main.module.css +11 -0
  359. package/src/shell/app-mobile-nav.tsx +28 -1
  360. package/src/shell/app-sidebar.module.css +10 -0
  361. package/src/shell/app-sidebar.tsx +31 -2
  362. package/src/shell/index.tsx +23 -28
  363. package/src/shell/mobile-nav-model.ts +1 -1
  364. package/src/shell/page-aside.tsx +2 -52
  365. package/src/shell/page-title.module.css +33 -0
  366. package/src/shell/page-title.module.css.d.ts +11 -0
  367. package/src/shell/page-title.tsx +57 -0
  368. package/src/shell/sidebar-block-model.ts +1 -1
  369. package/src/shell/sidebar-blocks.tsx +1 -1
  370. package/src/shell/use-breakpoint.ts +73 -0
  371. package/src/state/fields.ts +7 -43
  372. package/src/styles.css +36 -0
  373. package/src/surfaces.ts +47 -61
  374. package/src/theme/index.ts +7 -0
  375. package/src/{theme-toggle/index.tsx → theme/theme-toggle.tsx} +1 -1
  376. package/src/tokens/index.ts +10 -0
  377. package/src/tokens/palette.ts +12 -0
  378. package/dist/connectivity/connectivity-indicator.d.ts.map +0 -1
  379. package/dist/connectivity/connectivity-provider.d.ts.map +0 -1
  380. package/dist/connectivity/index.d.ts +0 -14
  381. package/dist/connectivity/index.d.ts.map +0 -1
  382. package/dist/connectivity/index.js +0 -8
  383. package/dist/connectivity/types.d.ts.map +0 -1
  384. package/dist/connectivity/use-connectivity.d.ts +0 -3
  385. package/dist/connectivity/use-connectivity.d.ts.map +0 -1
  386. package/dist/data/index.d.ts +0 -38
  387. package/dist/data/index.d.ts.map +0 -1
  388. package/dist/data/index.js +0 -24
  389. package/dist/motion/index.d.ts.map +0 -1
  390. package/dist/nav/types.d.ts.map +0 -1
  391. package/dist/notifications/overlay.d.ts +0 -20
  392. package/dist/notifications/overlay.d.ts.map +0 -1
  393. package/dist/notifications/overlay.js +0 -14
  394. package/dist/query/devtools.d.ts.map +0 -1
  395. package/dist/query/error-message.d.ts +0 -41
  396. package/dist/query/error-message.d.ts.map +0 -1
  397. package/dist/query/error-message.js +0 -30
  398. package/dist/query/index.d.ts +0 -47
  399. package/dist/query/index.d.ts.map +0 -1
  400. package/dist/query/index.js +0 -56
  401. package/dist/router-tanstack/field.d.ts +0 -14
  402. package/dist/router-tanstack/field.d.ts.map +0 -1
  403. package/dist/router-tanstack/field.js +0 -4
  404. package/dist/router-tanstack/multi-search-param-store.d.ts +0 -43
  405. package/dist/router-tanstack/multi-search-param-store.d.ts.map +0 -1
  406. package/dist/router-tanstack/multi-search-param-store.js +0 -30
  407. package/dist/router-tanstack/search-param-store.d.ts +0 -42
  408. package/dist/router-tanstack/search-param-store.d.ts.map +0 -1
  409. package/dist/router-tanstack/search-param-store.js +0 -25
  410. package/dist/section/index.d.ts +0 -2
  411. package/dist/section/index.d.ts.map +0 -1
  412. package/dist/section/index.js +0 -4
  413. package/dist/theme-toggle/index.d.ts.map +0 -1
  414. package/dist/utils/is-dev.d.ts.map +0 -1
  415. package/dist/widget-header/delta-badge.d.ts +0 -19
  416. package/dist/widget-header/delta-badge.d.ts.map +0 -1
  417. package/dist/widget-header/delta-badge.js +0 -36
  418. package/dist/widget-header/index.d.ts +0 -3
  419. package/dist/widget-header/index.d.ts.map +0 -1
  420. package/dist/widget-header/index.js +0 -8
  421. package/dist/widget-header/widget-header.d.ts.map +0 -1
  422. package/src/connectivity/index.ts +0 -19
  423. package/src/data/index.ts +0 -69
  424. package/src/notifications/overlay.tsx +0 -66
  425. package/src/query/error-message.ts +0 -70
  426. package/src/query/index.ts +0 -97
  427. package/src/router-tanstack/field.ts +0 -36
  428. package/src/router-tanstack/multi-search-param-store.ts +0 -106
  429. package/src/router-tanstack/search-param-store.ts +0 -100
  430. package/src/section/index.ts +0 -1
  431. package/src/widget-header/delta-badge.tsx +0 -77
  432. package/src/widget-header/index.ts +0 -10
  433. /package/dist/{utils → common}/is-dev.d.ts +0 -0
  434. /package/dist/{utils → common}/is-dev.js +0 -0
  435. /package/dist/{motion/index.js → common/motion.js} +0 -0
  436. /package/dist/{section → dashboard}/section.module.css +0 -0
  437. /package/dist/{section → dashboard}/section.module.css.d.ts +0 -0
  438. /package/dist/{widget-header → dashboard}/widget-header.d.ts +0 -0
  439. /package/dist/{widget-header → dashboard}/widget-header.js +0 -0
  440. /package/dist/{widget-header → dashboard}/widget-header.module.css +0 -0
  441. /package/dist/{widget-header → dashboard}/widget-header.module.css.d.ts +0 -0
  442. /package/dist/{connectivity → provider}/connectivity-indicator.d.ts +0 -0
  443. /package/dist/{connectivity → provider}/connectivity-indicator.js +0 -0
  444. /package/dist/{connectivity → provider}/connectivity-provider.js +0 -0
  445. /package/dist/{connectivity/types.js → provider/connectivity-types.js} +0 -0
  446. /package/dist/{connectivity → provider}/use-connectivity.js +0 -0
  447. /package/dist/{query/devtools.js → query-devtools.js} +0 -0
  448. /package/dist/{nav/types.js → shell/nav-types.js} +0 -0
  449. /package/src/{utils → common}/is-dev.ts +0 -0
  450. /package/src/{motion/index.ts → common/motion.ts} +0 -0
  451. /package/src/{section → dashboard}/section.module.css +0 -0
  452. /package/src/{section → dashboard}/section.module.css.d.ts +0 -0
  453. /package/src/{widget-header → dashboard}/widget-header.module.css +0 -0
  454. /package/src/{widget-header → dashboard}/widget-header.module.css.d.ts +0 -0
  455. /package/src/{widget-header → dashboard}/widget-header.tsx +0 -0
  456. /package/src/{connectivity/types.ts → provider/connectivity-types.ts} +0 -0
  457. /package/src/{nav/types.ts → shell/nav-types.ts} +0 -0
package/src/surfaces.ts CHANGED
@@ -56,8 +56,6 @@ export const PLUGIN_RULE_ID_LIST = [
56
56
  'search-literal-link',
57
57
  'use-search-from-literal',
58
58
  'provider-above-router',
59
- 'duplicate-notifications-mount',
60
- 'query-dual-import',
61
59
  'query-fn-unwrap',
62
60
  'deprecated-export',
63
61
  'forms-field-key',
@@ -67,6 +65,7 @@ export const PLUGIN_RULE_ID_LIST = [
67
65
  'agent-resume-guard',
68
66
  'agent-no-raw-usechat',
69
67
  'ai-sdk-major',
68
+ 'no-import-meta-env',
70
69
  ] as const
71
70
 
72
71
  /** One registered oxlint plugin rule id — the literal union of {@link PLUGIN_RULE_ID_LIST}. */
@@ -233,7 +232,7 @@ const MANTINE_BANS = [
233
232
 
234
233
  /**
235
234
  * The one hard source for the enforcement seam. Keys split into two kinds:
236
- * - JS-subpath keys (., ./charts, ./tokens, ./theme-lab, ./vite, ./guard, ./query, ./router-tanstack, ./forms, ./notifications, ./commands, ./data, ./data/table, ./data/virtual, ./agent, ./state, ./connectivity) — real package.json exports.
235
+ * - JS-subpath keys (., ./charts, ./tokens, ./theme-lab, ./vite, ./guard, ./router-tanstack, ./forms, ./notifications, ./commands, ./data/table, ./data/virtual, ./agent, ./state) — real package.json exports. `./query`, `./connectivity` and bare `./data` are dropped (C1) — their public surface is absorbed onto `.`.
237
236
  * - #-prefixed synthetic keys (#app) — the synthetic global app-wide ban layer. The #-prefix
238
237
  * guarantees it is never mistaken for an export path.
239
238
  *
@@ -274,22 +273,25 @@ export const SURFACES = {
274
273
  'raw-scroll-container',
275
274
  'page-bar-budget',
276
275
  'shadow-basalt-export',
277
- // The two mount-order laws, guarded as of 1.28.0 (F5) — both same-file static ancestry, so
278
- // both `warn`. `deprecated-export` sits here too: the ledger it reads spans subpaths, and
279
- // `BasaltProvider`'s three flattened connectivity props are most of it.
276
+ // The mount-order law, guarded as of 1.28.0 (F5) — same-file static ancestry, so `warn`.
277
+ // `deprecated-export` sits here too: the ledger it reads spans subpaths.
280
278
  'provider-above-router',
281
- 'duplicate-notifications-mount',
282
279
  'deprecated-export',
280
+ // `import.meta.env` is a Vite-ism that fails outside a Vite build (SSR/server code, Node
281
+ // scripts, tests) — process.env.NODE_ENV works everywhere basalt code runs. Repo-local,
282
+ // scoped to all of src/**, one surface required by coverage (C2 consolidation).
283
+ 'no-import-meta-env',
283
284
  ],
284
- // agent/rules/basalt-mantine.md — stated, not guarded. The other two laws that stood here
285
- // gained `provider-above-router` / `duplicate-notifications-mount` at 1.28.0; this one has no
286
- // AST form left to catch, because `cssVariablesResolver` is now `Omit`ted from the accepted
287
- // prop type and a hand-built `createTheme` is a consumer's own call to make.
285
+ // agent/rules/basalt-mantine.md — stated, not guarded. The other law that stood here gained
286
+ // `provider-above-router` at 1.28.0; this one has no AST form left to catch, because
287
+ // `cssVariablesResolver` is now `Omit`ted from the accepted prop type and a hand-built
288
+ // `createTheme` is a consumer's own call to make. (`duplicate-notifications-mount`, the
289
+ // other 1.28.0 mount-order rule, retired — `BasaltNotifications` no longer exists.)
288
290
  advisoryLaws: [
289
291
  "no second cssVariablesResolver — don't hand-build createTheme or re-add the resolver basalt already installs",
290
292
  ],
291
293
  description:
292
- 'BasaltProvider, createBasaltTheme, BasaltShell + sidebar/mobile-nav/breadcrumbs, PageBar, PageAside, NavCountBadge, ThemeToggle, ThreadWorkspace + thread-chat components, WidgetHeader, dashboard composites (DeltaBadge, StatCard with threshold tone, EmptyState, QueryState/LoadingState/ErrorState, SettingsSection/SettingsRow/DangerZone)',
294
+ 'BasaltProvider, createBasaltTheme, BasaltShell + sidebar/mobile-nav/breadcrumbs, PageBar, PageAside, useBreakpoint, NavCountBadge, ThemeToggle, ThreadWorkspace + thread-chat components, WidgetHeader, dashboard composites (DeltaBadge, StatCard with threshold tone, EmptyState, QueryState/LoadingState/ErrorState, SettingsSection/SettingsRow/DangerZone), ConnectivityProvider/useConnectivity/ConnectivityIndicator (auto-mounted, C1: absorbed from the dropped ./connectivity), createBasaltQueryClient/unwrap/BasaltQueryDevtools (C1: absorbed from the dropped ./query), BasaltDevDock (C5: lazy Router/Query devtools + theme lab in one dock)',
293
295
  optionalPeers: [
294
296
  'react-markdown',
295
297
  'remark-gfm',
@@ -297,6 +299,7 @@ export const SURFACES = {
297
299
  'remend',
298
300
  'shiki',
299
301
  'beautiful-mermaid',
302
+ '@tanstack/react-router-devtools',
300
303
  ],
301
304
  forbiddenImports: [], // the no-charts/tokens-reexport invariant is comment-only today; Phase-4 plugin
302
305
  },
@@ -305,13 +308,7 @@ export const SURFACES = {
305
308
  layer: 'headless',
306
309
  rule: 'charts',
307
310
  skill: ['basalt-charts'],
308
- guardKinds: [
309
- 'raw-hex',
310
- 'raw-color-fn',
311
- 'raw-visx-axis',
312
- 'unframed-chart',
313
- 'chart-missing-aria-label',
314
- ],
311
+ guardKinds: ['raw-hex', 'raw-color-fn', 'raw-visx-axis', 'chart-missing-aria-label'],
315
312
  pluginRules: [
316
313
  'hand-rolled-plot',
317
314
  'chart-legend-literal',
@@ -395,23 +392,15 @@ export const SURFACES = {
395
392
  // @visx/* ban dropped — `basalt/visx-boundary` now bans it universally outside charts.
396
393
  forbiddenImports: [...MANTINE_BANS],
397
394
  }, // 6th JS subpath
398
- './query': {
399
- kind: 'doctrine',
395
+ './format': {
396
+ kind: 'tooling',
400
397
  layer: 'headless',
401
- rule: 'batteries',
402
- skill: ['basalt-app'],
403
- guardKinds: [],
404
- // Both laws this surface used to declare advisory (F5), guarded as of 1.28.0 and both `warn`:
405
- // `query-dual-import`'s softer half reads intent ("this file is already a basalt file") and
406
- // `query-fn-unwrap` is a text heuristic inside a syntactic range. See their grace entries.
407
- pluginRules: ['query-dual-import', 'query-fn-unwrap'],
408
- description: 'createBasaltQueryClient, transport-agnostic unwrap, lazy BasaltQueryDevtools',
409
- optionalPeers: ['@tanstack/react-query-devtools'],
398
+ description:
399
+ 'money/percent/integer/compact/deltaPct/duration/durationClock/clock/relativeTime/weekday/km/kcal — Intl-backed, Mantine-free, React-free formatting; charts/utils/format.ts re-exports fmtCompact/fmtPercent/fmtCurrency/fmtInt/fmtAxisDate/fmtTooltipDate from here (C5 consolidation, one implementation)',
410
400
  globs: {
411
401
  shipped: [],
412
- repo: ['packages/basalt-ui/src/query/**'],
402
+ repo: ['packages/basalt-ui/src/format/**'],
413
403
  },
414
- // @visx/* ban dropped — `basalt/visx-boundary` now bans it universally outside charts.
415
404
  forbiddenImports: [...MANTINE_BANS],
416
405
  },
417
406
  './router-tanstack': {
@@ -423,7 +412,7 @@ export const SURFACES = {
423
412
  // Law C10 — a nav link's `search` and a reader's `from` are both this bridge's contract.
424
413
  pluginRules: ['search-literal-link', 'use-search-from-literal'],
425
414
  description:
426
- 'TanStack Router bridge: defineNav/navGroup/navTarget (one typed nav definition) + useNav (sections + mobileNav, spread onto BasaltShell) + useBasaltNav (active route) + useRouterBreadcrumbs + createSearchStore (typed URL > localStorage > fallback store over field.enum/multi/range/number/boolean/string; deprecated createSearchParamStore/createMultiSearchParamStore wrappers until 1.29.0)',
415
+ 'TanStack Router bridge: defineNav/navGroup/navTarget (one typed nav definition) + useNav (sections + mobileNav, spread onto BasaltShell) + useBasaltNav (active route) + useRouterBreadcrumbs + createSearchStore (typed URL > localStorage > fallback store over field.enum/multi/range/number/boolean/string; the deprecated createSearchParamStore/createMultiSearchParamStore wrappers were removed in 1.29.0, C1 consolidation)',
427
416
  optionalPeers: ['@tanstack/react-router'],
428
417
  globs: {
429
418
  shipped: [],
@@ -444,7 +433,7 @@ export const SURFACES = {
444
433
  // consumer ships today (`PLUGIN_RULE_GRACE`).
445
434
  pluginRules: ['forms-field-key'],
446
435
  description:
447
- 'Mantine form layer: useBasaltForm + inputProps/fieldKey (two calls — a spread `key` is a React 19 warning), the FormSection/FormRow/FormGroup/FormActions layout (FormRow is law C1’s form row), useFormSubmit (submit state, decoded errors, server fieldErrors, focus-first-error, validateAsync), FormStateProvider disable propagation, useFieldArray, FormErrorSummary, useFormDraft with autosave (Standard Schema; deprecated `field` alias for `inputProps` until the surface next changes)',
436
+ 'Mantine form layer: useBasaltForm + inputProps/fieldKey (two calls — a spread `key` is a React 19 warning; the deprecated `field` alias for `inputProps` was removed in 1.29.0, C1 consolidation), the FormSection/FormRow/FormGroup/FormActions layout (FormRow is law C1’s form row), useFormSubmit (submit state, decoded errors, server fieldErrors, focus-first-error, validateAsync), FormStateProvider disable propagation, useFieldArray, FormErrorSummary, useFormDraft with autosave (Standard Schema)',
448
437
  optionalPeers: ['@mantine/form'],
449
438
  forbiddenImports: [],
450
439
  },
@@ -472,18 +461,6 @@ export const SURFACES = {
472
461
  optionalPeers: ['@mantine/spotlight', '@mantine/modals', '@tanstack/react-hotkeys'],
473
462
  forbiddenImports: [],
474
463
  },
475
- './data': {
476
- kind: 'doctrine',
477
- layer: 'mantine-coupled',
478
- rule: 'batteries',
479
- skill: ['basalt-design'],
480
- guardKinds: [],
481
- pluginRules: [],
482
- description:
483
- 'Convenience barrel pulling both TanStack Table + Virtual peer groups: BasaltDataTable, BasaltVirtualList (Mantine-rendered) — prefer ./data/table or ./data/virtual for per-feature opt-in',
484
- optionalPeers: ['@tanstack/react-table', '@tanstack/react-virtual'],
485
- forbiddenImports: [],
486
- },
487
464
  './data/table': {
488
465
  kind: 'doctrine',
489
466
  layer: 'mantine-coupled',
@@ -604,7 +581,24 @@ export const SURFACES = {
604
581
  description:
605
582
  'The control tier (docs/CONTROLS-SPEC.md §3): FilterSet (nowrap row + measured +N fold + the mobile Filters (n) sheet), RangeFilter/CompareFilter/SelectFilter/MultiSelectFilter/NumberFilter/SearchFilter/ToggleFilter (each bound to a FieldHandle — no value/onChange/size, law C2/C5; NumberFilter is the field.number lane, a radio list over `options` or a stepper without), ViewTabs, and the action/sync family (ActionGroup, OverflowMenu, SyncButton, BarAction/GlobalAction). THREE surfaces, picked by the home and never by a prop (useFilterSurface): pill in a PageBar row, sheet in the mobile Filters (n) drawer, panel in a PageAside body — where every control renders an inspector/facet ROW instead of a chip (docs/ASIDE-SPEC.md §3). PanelRow is that row primitive (label above, hint, mono readout, an `end` control on the label line) and SliderControl is the one bound control with no pill form at all; the counts/max props on MultiSelectFilter render the Foundry facet list there. Every control owns its own desktop/mobile swap in CSS (C9) and renders size="ctl" internally. Resolves and renders with NO @mantine/dates installed — the custom date picker is injected through RangeFilter.customPicker from ./controls-dates.',
606
583
  optionalPeers: [],
607
- forbiddenImports: [],
584
+ // `@mantine/dates` is an optional peer basaltViteConfig pre-bundles the whole @mantine scope
585
+ // for — a consumer without the peer (linewatch) must never resolve it through this surface.
586
+ // Nothing under src/controls may import it, statically or lazily — repo-local only, same
587
+ // pattern as MANTINE_BANS above (a shipped ban would be redundant with peerDependenciesMeta).
588
+ globs: {
589
+ shipped: [],
590
+ repo: ['packages/basalt-ui/src/controls/**'],
591
+ },
592
+ forbiddenImports: [
593
+ v(
594
+ '@mantine/dates',
595
+ '@mantine/dates is an OPTIONAL peer (docs/CONTROLS-SPEC.md §3) — ./controls must resolve with no @mantine/dates installed. The one reach lives in src/controls-dates/, injected into range-filter.tsx’s customPicker seam.',
596
+ ),
597
+ vg(
598
+ '@mantine/dates/*',
599
+ '@mantine/dates is an OPTIONAL peer (docs/CONTROLS-SPEC.md §3) — ./controls must resolve with no @mantine/dates installed. The one reach lives in src/controls-dates/, injected into range-filter.tsx’s customPicker seam.',
600
+ ),
601
+ ],
608
602
  },
609
603
  './controls-dates': {
610
604
  kind: 'doctrine',
@@ -639,19 +633,6 @@ export const SURFACES = {
639
633
  forbiddenImports: [...MANTINE_BANS],
640
634
  },
641
635
 
642
- './connectivity': {
643
- kind: 'doctrine',
644
- layer: 'mantine-coupled',
645
- rule: 'mantine',
646
- skill: ['basalt-app'],
647
- guardKinds: [],
648
- pluginRules: [],
649
- description:
650
- 'ConnectivityProvider (aggregates browser online/offline, React Query onlineManager, SSE, and health-check pings into one status), useConnectivity, and ConnectivityIndicator — auto-mounted by BasaltProvider',
651
- optionalPeers: [],
652
- forbiddenImports: [],
653
- },
654
-
655
636
  // ── Non-JS published assets (ToolingSpec; not JS subpaths — check-coverage exempts these) ─────
656
637
  './styles.css': {
657
638
  kind: 'tooling',
@@ -690,7 +671,12 @@ export const SURFACES = {
690
671
  rule: 'batteries',
691
672
  skill: ['basalt-app'],
692
673
  guardKinds: [],
693
- pluginRules: [],
674
+ // query-fn-unwrap: reassigned here from the now-dropped `./query` surface (C1 consolidation —
675
+ // createBasaltQueryClient/unwrap/BasaltQueryDevtools are root barrel exports now, but their
676
+ // doctrine stays `batteries` — "use the shipped thing" — not `mantine`). `query-dual-import`
677
+ // was retired alongside it — its premise (a raw `@tanstack/react-query` import beside
678
+ // `basalt-ui/query`) is unreachable now that the `./query` subpath is gone.
679
+ pluginRules: ['query-fn-unwrap'],
694
680
  globs: {
695
681
  // Shipped is a catch-all (not just src/**+app/**) so consumer code under components/, lib/,
696
682
  // features/, etc. is also covered. The @visx/*-only-in-charts and Mantine-free charts/tokens
@@ -104,6 +104,13 @@ export { useBasaltSpacing } from './use-basalt-spacing'
104
104
  // merge/precedence contract.
105
105
  export { CTL_THEME, CtlSlot, type CtlSlotProps } from './ctl-theme'
106
106
 
107
+ // `ThemeToggle` moved into this directory (C1 consolidation, merging the former `theme-toggle/`
108
+ // dir) but is deliberately NOT re-exported from this barrel: it imports `motion/react` eagerly,
109
+ // and this file resolves from `./controls` (via `CtlSlot`) among others — re-exporting it here
110
+ // would make `motion` a hard transitive peer of every consumer of this barrel, not just of
111
+ // `ThemeToggle` itself. The root barrel (`src/index.ts`) imports it straight from
112
+ // `./theme/theme-toggle`, unchanged from before the merge.
113
+
107
114
  // Typed `theme.other.basaltDerive` / `theme.other.basaltFonts` / `theme.other.basaltRadius` /
108
115
  // `theme.other.basaltDensity` reads (Mantine's `MantineThemeOther` ships an index signature, so
109
116
  // this merge is additive — no widening of the existing `[key: string]: any`). Set by
@@ -23,7 +23,7 @@ import {
23
23
  import { useReducedMotion } from '@mantine/hooks'
24
24
  import { AnimatePresence, motion } from 'motion/react'
25
25
  import { useRef, useState } from 'react'
26
- import { MOTION_SPRING } from '../motion'
26
+ import { MOTION_SPRING } from '../common/motion'
27
27
  import type { BasaltProps } from '../common/props'
28
28
 
29
29
  type Scheme = 'light' | 'dark' | 'auto'
@@ -16,6 +16,7 @@ import {
16
16
  ROW_LINE_HEIGHT,
17
17
  SHADOW,
18
18
  SPACE,
19
+ SPACE_FIXED,
19
20
  SPACE_SCALE,
20
21
  SPACE_STEP,
21
22
  } from './palette'
@@ -158,6 +159,11 @@ export const VX = {
158
159
  // Fully-rounded pill affordance (scroll-to-bottom button, chips) — fixed, does not track the
159
160
  // radius knob (see `RADIUS_STEP.pill`'s doc in `tokens/palette.ts`).
160
161
  radiusPill: 'var(--vx-radius-pill)',
162
+ // The WCAG 2.5.5/2.5.8 touch-target floor (44px), fixed — does not track the density knob (see
163
+ // `SPACE_FIXED.spaceTouchTarget`'s doc in `tokens/palette.ts`). For a hit area with no `ctl`-tier
164
+ // home to size it — a consumer's own `@media (pointer: coarse)` CSS-module rule reads the same
165
+ // `--vx-space-touch-target` var this resolves to.
166
+ spaceTouchTarget: 'var(--vx-space-touch-target)',
161
167
 
162
168
  // Controls tier sizing (`docs/CONTROLS-SPEC.md` §5) — `var()` refs onto the density-tracking
163
169
  // `--vx-space-*` declarations `spaceDecls` emits above (same ref pattern as `radiusCard`/
@@ -743,6 +749,10 @@ function frameworkDerived(data: PaletteData, only: 'core' | 'all', legacyAliases
743
749
  // only in this static block, never in `buildRadiusCss`'s dynamic override (see
744
750
  // `RADIUS_STEP.pill`'s doc).
745
751
  decl('radius-pill', `${RADIUS_STEP.pill}px`),
752
+ // The WCAG touch-target floor — fixed, density-EXEMPT, so it lives only in this static block,
753
+ // never in `buildDensityCss`'s dynamic override (same law as `radius-pill` above; see
754
+ // `SPACE_FIXED.spaceTouchTarget`'s doc).
755
+ decl('space-touch-target', `${SPACE_FIXED.spaceTouchTarget}px`),
746
756
  ...(only === 'core' ? space.filter(isCoreSpaceDecl) : space),
747
757
  // Article-density Prose measure (docs/CONTENT-SPEC.md §5) — theme-independent, like the radii.
748
758
  decl('prose-measure', '72ch'),
@@ -760,6 +760,18 @@ export const SPACE_FIXED = {
760
760
  * `[-3, 3]` range can produce) for no compensating benefit, since the two radii it sits between
761
761
  * never move independently of each other. */
762
762
  segmentedTrackInset: 2,
763
+ /**
764
+ * The WCAG 2.5.5/2.5.8 touch-target floor (44px) for a hit area that has no `ctl`-tier home to
765
+ * size it — a raw CSS-module rule bumping a control's hit area under `@media (pointer: coarse)`
766
+ * (C5 consolidation: argo carried three such rules with a hand-picked 44/46px literal apiece).
767
+ * Density-exempt for the same reason `touchControlHeight`'s FLOOR is: a target this small must
768
+ * never shrink further, whatever the density knob says elsewhere. Unlike the rest of this
769
+ * object, this ONE key IS emitted as a `--vx-*` var (`tokens/index.ts`'s `space-touch-target`) —
770
+ * the others stay JS-only because nothing outside the framework's own components reads them, but
771
+ * this floor's whole purpose is being read by a CONSUMER's own `.module.css`, which cannot
772
+ * import a JS ref at all.
773
+ */
774
+ spaceTouchTarget: 44,
763
775
  } as const
764
776
 
765
777
  /**
@@ -1 +0,0 @@
1
- {"version":3,"file":"connectivity-indicator.d.ts","sourceRoot":"","sources":["../../src/connectivity/connectivity-indicator.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAKlD,MAAM,MAAM,0BAA0B,GAAG,WAAW,CAAA;AAyJpD;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,GAAE,0BAA+B,+BAiF1F"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"connectivity-provider.d.ts","sourceRoot":"","sources":["../../src/connectivity/connectivity-provider.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,OAAO,KAAK,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAA;AAmB9E,eAAO,MAAM,mBAAmB,sDAAmD,CAAA;AAyBnF,wBAAgB,oBAAoB,CAAC,EACnC,QAAQ,EACR,MAAM,EACN,SAAS,EACT,gBAAyB,EACzB,QAAQ,GACT,EAAE,yBAAyB,GAAG;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,+BAgIrD"}
@@ -1,14 +0,0 @@
1
- /**
2
- * `./connectivity` — aggregated connectivity monitoring: browser online/offline, React Query
3
- * onlineManager, SSE EventSource, and health-check pings folded into a single status with
4
- * per-signal detail.
5
- *
6
- * Auto-mounted by BasaltProvider so basic browser detection requires zero consumer setup.
7
- * SSE and health ping are opt-in via BasaltProvider props.
8
- */
9
- export { ConnectivityProvider } from './connectivity-provider.js';
10
- export { ConnectivityIndicator } from './connectivity-indicator.js';
11
- export type { ConnectivityIndicatorProps } from './connectivity-indicator.js';
12
- export { useConnectivity } from './use-connectivity.js';
13
- export type { ConnectivityStatus, ConnectivitySnapshot, ConnectivityProviderProps, ConnectivityOverride, } from './types.js';
14
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/connectivity/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAChE,YAAY,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAA;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,YAAY,EACV,kBAAkB,EAClB,oBAAoB,EACpB,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,SAAS,CAAA"}
@@ -1,8 +0,0 @@
1
- import { ConnectivityProvider } from "./connectivity-provider.js";
2
- import { ConnectivityIndicator } from "./connectivity-indicator.js";
3
- import { useConnectivity } from "./use-connectivity.js";
4
- export {
5
- ConnectivityIndicator,
6
- ConnectivityProvider,
7
- useConnectivity
8
- };
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/connectivity/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAA;AAElE,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,kBAAkB,CAAA;IAC1B,+DAA+D;IAC/D,OAAO,EAAE;QACP,aAAa,EAAE,OAAO,CAAA;QAItB,WAAW,EAAE,OAAO,CAAA;QACpB,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;QACvB,aAAa,EAAE,OAAO,GAAG,IAAI,CAAA;KAC9B,CAAA;CACF,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IACxB,aAAa,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;CAC/B,CAAA;AAED,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,iGAAiG;IACjG,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,oGAAoG;IACpG,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,8DAA8D;IAC9D,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,wGAAwG;IACxG,QAAQ,CAAC,EAAE,oBAAoB,CAAA;CAChC,CAAA"}
@@ -1,3 +0,0 @@
1
- import type { ConnectivitySnapshot } from './types.js';
2
- export declare function useConnectivity(): ConnectivitySnapshot;
3
- //# sourceMappingURL=use-connectivity.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-connectivity.d.ts","sourceRoot":"","sources":["../../src/connectivity/use-connectivity.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAEnD,wBAAgB,eAAe,IAAI,oBAAoB,CAUtD"}
@@ -1,38 +0,0 @@
1
- /**
2
- * ./data — TanStack Table + Virtual adapter battery for basalt-ui apps.
3
- *
4
- * Provides a sortable data table (BasaltDataTable — with opt-in search/facet toolbar, pagination,
5
- * and column pinning) and a windowed virtual list (BasaltVirtualList), both rendered with Mantine
6
- * primitives over headless TanStack logic.
7
- *
8
- * Optional peers:
9
- * - @tanstack/react-table >=8 <9 (BasaltDataTable)
10
- * - @tanstack/react-virtual >=3.13.26 <4 (BasaltVirtualList)
11
- *
12
- * BasaltVirtualList itself works on any 3.x; the declared floor is set by ./agent-chat's
13
- * ThreadTranscript virtualize mode (it calls scrollToEnd/anchorTo, added in virtual-core 3.16.0,
14
- * first pinned by react-virtual 3.13.26). npm has one peer range per package, so do not lower it.
15
- *
16
- * Install with:
17
- * bun add @tanstack/react-table @tanstack/react-virtual
18
- *
19
- * Convenience barrel — pulls both peer groups. Use the fine subpaths
20
- * (`basalt-ui/data/table`, `basalt-ui/data/virtual`) for per-feature opt-in.
21
- *
22
- * @example
23
- * // Data table:
24
- * import { BasaltDataTable, createColumnHelper } from 'basalt-ui/data'
25
- * type Row = { name: string; score: number }
26
- * const col = createColumnHelper<Row>()
27
- * const columns = [col.accessor('name', { header: 'Name' }), col.accessor('score', { header: 'Score' })]
28
- * <BasaltDataTable data={rows} columns={columns} />
29
- *
30
- * @example
31
- * // Virtual list:
32
- * import { BasaltVirtualList } from 'basalt-ui/data'
33
- * const items = Array.from({ length: 10_000 }, (_, i) => ({ id: i, label: `Row ${i}` }))
34
- * <BasaltVirtualList items={items} height={400} renderItem={(item) => <div>{item.label}</div>} />
35
- */
36
- export { BasaltDataTable, type BasaltDataTableProps, type BasaltDataTableSlot, type DataTableAlign, type DataTableColumnId, type DataTableColumnPinning, type DataTableFacet, type DataTableFacetOption, createColumnHelper, useReactTable, flexRender, getCoreRowModel, getSortedRowModel, getFilteredRowModel, getPaginationRowModel, type ColumnDef, type SortingState, type ColumnHelper, type PaginationState, type ColumnPinningState, type ColumnFiltersState, type RowSelectionState, } from './table.js';
37
- export { BasaltVirtualList, type BasaltVirtualListHandle, type BasaltVirtualListProps, type BasaltVirtualListSlot, } from './virtual.js';
38
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAGH,OAAO,EACL,eAAe,EACf,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,kBAAkB,EAClB,aAAa,EACb,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,GACvB,MAAM,SAAS,CAAA;AAGhB,OAAO,EACL,iBAAiB,EACjB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,GAC3B,MAAM,WAAW,CAAA"}
@@ -1,24 +0,0 @@
1
- import {
2
- BasaltDataTable,
3
- createColumnHelper,
4
- useReactTable,
5
- flexRender,
6
- getCoreRowModel,
7
- getSortedRowModel,
8
- getFilteredRowModel,
9
- getPaginationRowModel
10
- } from "./table.js";
11
- import {
12
- BasaltVirtualList
13
- } from "./virtual.js";
14
- export {
15
- BasaltDataTable,
16
- BasaltVirtualList,
17
- createColumnHelper,
18
- flexRender,
19
- getCoreRowModel,
20
- getFilteredRowModel,
21
- getPaginationRowModel,
22
- getSortedRowModel,
23
- useReactTable
24
- };
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/motion/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;GAIG;AACH,eAAO,MAAM,eAAe;;;;CAIlB,CAAA;AAEV,6EAA6E;AAC7E,eAAO,MAAM,oBAAoB,2BAA4B,CAAA;AAE7D,4FAA4F;AAC5F,eAAO,MAAM,aAAa;;;;;CAAsE,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/nav/types.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- export type BasaltNotificationsProps = {
2
- /** Toast position. Default: 'bottom-right'. */
3
- position?: 'top-left' | 'top-right' | 'top-center' | 'bottom-left' | 'bottom-right' | 'bottom-center';
4
- /** Auto-close delay (ms). Default: 4000. */
5
- autoClose?: number | false;
6
- /** Max visible toasts. Default: 5. */
7
- limit?: number;
8
- };
9
- /**
10
- * Mounts the Mantine Notifications overlay with basalt defaults.
11
- * Render ONE instance per app — typically inside BasaltProvider, before the router.
12
- *
13
- * @example
14
- * <BasaltProvider>
15
- * <BasaltNotifications position="bottom-right" limit={5} />
16
- * <RouterProvider router={router} />
17
- * </BasaltProvider>
18
- */
19
- export declare function BasaltNotifications({ position, autoClose, limit, }: BasaltNotificationsProps): import("react").JSX.Element;
20
- //# sourceMappingURL=overlay.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../../src/notifications/overlay.tsx"],"names":[],"mappings":"AAiCA,MAAM,MAAM,wBAAwB,GAAG;IACrC,+CAA+C;IAC/C,QAAQ,CAAC,EACL,UAAU,GACV,WAAW,GACX,YAAY,GACZ,aAAa,GACb,cAAc,GACd,eAAe,CAAA;IACnB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;IAC1B,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,QAAyB,EACzB,SAAgB,EAChB,KAAS,GACV,EAAE,wBAAwB,+BAG1B"}
@@ -1,14 +0,0 @@
1
- import { jsx } from "react/jsx-runtime";
2
- import { Notifications } from "@mantine/notifications";
3
- import { useNotificationsMountGuard } from "./mount-guard.js";
4
- function BasaltNotifications({
5
- position = "bottom-right",
6
- autoClose = 4e3,
7
- limit = 5
8
- }) {
9
- useNotificationsMountGuard();
10
- return /* @__PURE__ */ jsx(Notifications, { position, autoClose, limit });
11
- }
12
- export {
13
- BasaltNotifications
14
- };
@@ -1 +0,0 @@
1
- {"version":3,"file":"devtools.d.ts","sourceRoot":"","sources":["../../src/query/devtools.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAC3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;AAOxE;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,cAAc,CAAC,OAAO,kBAAkB,CAAC,sCAOnF"}
@@ -1,41 +0,0 @@
1
- /**
2
- * Transport-agnostic error decoding. Deliberately a standalone module with NO
3
- * `@tanstack/react-query` import — `dashboard/query-state.tsx` renders server messages and must
4
- * not drag the query peer into the root barrel's graph to do it.
5
- */
6
- /**
7
- * The HTTP status behind a thrown envelope (Eden Treaty's `{ status, value }`, a `Response`-shaped
8
- * throw), when there is one. Use it to BRANCH — 404 → "not found" copy — rather than to build a
9
- * message; `toErrorMessage` already folds the status into its text when the body says nothing.
10
- *
11
- * @example
12
- * if (errorStatus(err) === 404) return <EmptyState title="Gone" />
13
- */
14
- export declare function errorStatus(err: unknown): number | undefined;
15
- /**
16
- * Extract a human-readable message from an unknown thrown value (e.g. the raw Eden envelope
17
- * thrown by `unwrap`). Removes the 8-line three-branch boilerplate consumers duplicate.
18
- *
19
- * Resolution order:
20
- * 1. `Error` instance → err.message
21
- * 2. `{ message: string }` → message (Eden / Elysia error shape)
22
- * 3. `{ value: ... }` → recursively (Eden nested value envelope)
23
- * 4. plain string → itself
24
- * 5. anything else → `JSON.stringify`
25
- *
26
- * **If that yields nothing a human can read** (`''`, `'{}'`, `'[]'`, `'null'`, `'undefined'`,
27
- * `'[object Object]'` — the shapes `JSON.stringify` produces for an opaque envelope) the `fallback`
28
- * is returned instead, with `(HTTP <status>)` appended when the envelope carries one. Without that
29
- * guard the caller renders a literal `{}` at the user, or — for `toErrorMessage(undefined)` —
30
- * the actual value `undefined`, since `JSON.stringify(undefined)` is not a string at all.
31
- *
32
- * @example
33
- * try {
34
- * await unwrap(api.resource.post({ body }))
35
- * } catch (e) {
36
- * toast(toErrorMessage(e, 'Could not create share')) // → "slug already in use"
37
- * // → "Could not create share (HTTP 502)"
38
- * }
39
- */
40
- export declare function toErrorMessage(err: unknown, fallback?: string): string;
41
- //# sourceMappingURL=error-message.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"error-message.d.ts","sourceRoot":"","sources":["../../src/query/error-message.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAI5D;AAqBD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,SAAwB,GAAG,MAAM,CAKrF"}
@@ -1,30 +0,0 @@
1
- function errorStatus(err) {
2
- if (err === null || typeof err !== "object") return void 0;
3
- const status = err.status;
4
- return typeof status === "number" ? status : void 0;
5
- }
6
- const UNUSABLE = /* @__PURE__ */ new Set(["", "{}", "[]", "null", "undefined", "[object Object]"]);
7
- function decode(err) {
8
- if (err instanceof Error) return err.message;
9
- if (typeof err === "string") return err;
10
- if (typeof err === "object" && err !== null) {
11
- const obj = err;
12
- if (typeof obj["message"] === "string") return obj["message"];
13
- if ("value" in obj) return decode(obj["value"]);
14
- }
15
- try {
16
- return JSON.stringify(err) ?? "";
17
- } catch {
18
- return String(err);
19
- }
20
- }
21
- function toErrorMessage(err, fallback = "The request failed.") {
22
- const message = decode(err).trim();
23
- if (!UNUSABLE.has(message)) return message;
24
- const status = errorStatus(err);
25
- return status === void 0 ? fallback : `${fallback} (HTTP ${status})`;
26
- }
27
- export {
28
- errorStatus,
29
- toErrorMessage
30
- };
@@ -1,47 +0,0 @@
1
- /**
2
- * ./query — thin TanStack Query adapter + transport-agnostic Eden unwrap.
3
- * Optional peer: @tanstack/react-query.
4
- */
5
- import { QueryClient } from '@tanstack/react-query';
6
- import type { QueryClientConfig } from '@tanstack/react-query';
7
- /**
8
- * Wraps QueryClient with basalt dashboard defaults. All options are mergeable — consumer
9
- * overrides win per-query, framework defaults are the fallback.
10
- *
11
- * @example
12
- * import { createBasaltQueryClient, QueryClientProvider } from 'basalt-ui/query'
13
- * import { useState } from 'react'
14
- *
15
- * function Root({ children }: { children: React.ReactNode }) {
16
- * const [client] = useState(() => createBasaltQueryClient())
17
- * return <QueryClientProvider client={client}>{children}</QueryClientProvider>
18
- * }
19
- */
20
- export declare function createBasaltQueryClient(config?: QueryClientConfig): QueryClient;
21
- /**
22
- * Transport-agnostic unwrap for any `{ data, error }` envelope (Eden Treaty, raw fetch wrappers,
23
- * etc.). TData is inferred from the data field. Throws on the error branch so failures surface
24
- * to the nearest error boundary or TanStack Query's error state.
25
- *
26
- * Null guard: if `error` is falsy but `data` is `null`, unwrap throws with a descriptive message.
27
- * This catches 204 No Content responses and silent transport failures that return `{ data: null,
28
- * error: null }` — both signal an unexpected absence of data and should not silently resolve.
29
- *
30
- * @example
31
- * import { unwrap } from 'basalt-ui/query'
32
- *
33
- * queryFn: () => unwrap(api.users.get({ query: params }))
34
- * // mutation:
35
- * mutationFn: (body) => unwrap(api.resource.post({ body }))
36
- * // manual:
37
- * const rows = await unwrap(api.users.get())
38
- */
39
- export declare function unwrap<TData>(response: Promise<{
40
- data: TData | null;
41
- error: unknown;
42
- }>): Promise<TData>;
43
- export { toErrorMessage, errorStatus } from './error-message.js';
44
- export { QueryClientProvider, QueryErrorResetBoundary, useQueryErrorResetBoundary, } from '@tanstack/react-query';
45
- export { useQuery, useSuspenseQuery, useMutation, useQueryClient, useInfiniteQuery, queryOptions, } from '@tanstack/react-query';
46
- export { BasaltQueryDevtools } from './devtools.js';
47
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/query/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAW9D;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,CAAC,EAAE,iBAAiB,GAAG,WAAW,CAQ/E;AAID;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,MAAM,CAAC,KAAK,EAChC,QAAQ,EAAE,OAAO,CAAC;IAAE,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC,GACxD,OAAO,CAAC,KAAK,CAAC,CAQhB;AAID,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAK7D,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,uBAAuB,CAAA;AAG9B,OAAO,EACL,QAAQ,EACR,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,YAAY,GACb,MAAM,uBAAuB,CAAA;AAI9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA"}