basalt-ui 1.28.0 → 1.29.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 (455) hide show
  1. package/AGENTS.md +11 -18
  2. package/CHANGELOG.md +13 -0
  3. package/MIGRATING.md +151 -7
  4. package/README.md +23 -66
  5. package/agent/rules/basalt-batteries.md +59 -182
  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/configs/oxlint-plugin.js +70 -167
  14. package/configs/oxlint-plugin.test.ts +20 -186
  15. package/configs/oxlint.json +0 -1
  16. package/dist/agent/ai-sdk-transport.d.ts.map +1 -1
  17. package/dist/agent/ai-sdk-transport.js +7 -4
  18. package/dist/agent/coalesce.js +1 -1
  19. package/dist/agent/merge.js +1 -1
  20. package/dist/agent/transport.d.ts +13 -2
  21. package/dist/agent/transport.d.ts.map +1 -1
  22. package/dist/agent/use-agent-thread-runs.d.ts +12 -1
  23. package/dist/agent/use-agent-thread-runs.d.ts.map +1 -1
  24. package/dist/agent/use-agent-thread-runs.js +20 -6
  25. package/dist/agent-chat/index.d.ts +1 -1
  26. package/dist/agent-chat/index.d.ts.map +1 -1
  27. package/dist/agent-chat/relative-time.js +1 -1
  28. package/dist/agent-chat/thread-detail-panel.js +1 -1
  29. package/dist/agent-chat/thread-feed-row.d.ts +32 -7
  30. package/dist/agent-chat/thread-feed-row.d.ts.map +1 -1
  31. package/dist/agent-chat/thread-feed-row.js +121 -86
  32. package/dist/agent-chat/thread-feed.d.ts +11 -1
  33. package/dist/agent-chat/thread-feed.d.ts.map +1 -1
  34. package/dist/agent-chat/thread-feed.js +10 -6
  35. package/dist/agent-chat/thread-message.js +1 -1
  36. package/dist/agent-chat/virtualize.d.ts +39 -0
  37. package/dist/agent-chat/virtualize.d.ts.map +1 -1
  38. package/dist/agent-chat/virtualize.js +15 -0
  39. package/dist/charts/index.d.ts +3 -3
  40. package/dist/charts/index.d.ts.map +1 -1
  41. package/dist/charts/index.js +8 -4
  42. package/dist/charts/kinds/BandStrip.js +1 -1
  43. package/dist/charts/kinds/Bars.d.ts +1 -3
  44. package/dist/charts/kinds/Bars.d.ts.map +1 -1
  45. package/dist/charts/kinds/Bars.js +1 -1
  46. package/dist/charts/kinds/DualPanel.d.ts +3 -1
  47. package/dist/charts/kinds/DualPanel.d.ts.map +1 -1
  48. package/dist/charts/kinds/DualPanel.js +1 -1
  49. package/dist/charts/kinds/StackedArea.js +1 -1
  50. package/dist/charts/kinds/ZonedLine.d.ts +1 -3
  51. package/dist/charts/kinds/ZonedLine.d.ts.map +1 -1
  52. package/dist/charts/primitives/Axes.d.ts +21 -2
  53. package/dist/charts/primitives/Axes.d.ts.map +1 -1
  54. package/dist/charts/primitives/Axes.js +34 -2
  55. package/dist/charts/primitives/ChartCard.d.ts +20 -4
  56. package/dist/charts/primitives/ChartCard.d.ts.map +1 -1
  57. package/dist/charts/primitives/ChartCard.js +62 -33
  58. package/dist/charts/primitives/ChartFrame.d.ts.map +1 -1
  59. package/dist/charts/primitives/ChartFrame.js +8 -1
  60. package/dist/charts/primitives/ChartPending.d.ts +12 -6
  61. package/dist/charts/primitives/ChartPending.d.ts.map +1 -1
  62. package/dist/charts/primitives/ChartPending.js +1 -1
  63. package/dist/charts/utils/format.d.ts +5 -92
  64. package/dist/charts/utils/format.d.ts.map +1 -1
  65. package/dist/charts/utils/format.js +10 -80
  66. package/dist/cli/audit-allows.d.ts +24 -0
  67. package/dist/cli/audit-allows.d.ts.map +1 -0
  68. package/dist/cli/audit-allows.js +240 -0
  69. package/dist/cli/check-theme.d.ts +10 -0
  70. package/dist/cli/check-theme.d.ts.map +1 -0
  71. package/dist/cli/check-theme.js +139 -0
  72. package/dist/cli/doctor.d.ts +47 -0
  73. package/dist/cli/doctor.d.ts.map +1 -0
  74. package/dist/cli/doctor.js +197 -0
  75. package/dist/cli/guard-hook.d.ts +9 -0
  76. package/dist/cli/guard-hook.d.ts.map +1 -0
  77. package/dist/cli/guard-hook.js +93 -0
  78. package/dist/cli/help.d.ts +9 -0
  79. package/dist/cli/help.d.ts.map +1 -0
  80. package/dist/cli/help.js +53 -0
  81. package/dist/cli/index.d.ts +360 -270
  82. package/dist/cli/index.d.ts.map +1 -1
  83. package/dist/cli/index.js +85 -1901
  84. package/dist/cli/init.d.ts +4 -0
  85. package/dist/cli/init.d.ts.map +1 -0
  86. package/dist/cli/init.js +165 -0
  87. package/dist/cli/sync.d.ts +43 -0
  88. package/dist/cli/sync.d.ts.map +1 -0
  89. package/dist/cli/sync.js +206 -0
  90. package/dist/cli/tokens-css.d.ts +51 -0
  91. package/dist/cli/tokens-css.d.ts.map +1 -0
  92. package/dist/cli/tokens-css.js +165 -0
  93. package/dist/commands/define-commands.js +1 -1
  94. package/dist/commands/define-overlays.js +1 -1
  95. package/dist/commands/index.d.ts +2 -1
  96. package/dist/commands/index.d.ts.map +1 -1
  97. package/dist/commands/index.js +6 -0
  98. package/dist/commands/overlays-mount.d.ts +7 -9
  99. package/dist/commands/overlays-mount.d.ts.map +1 -1
  100. package/dist/commands/shell-bridge.d.ts +57 -0
  101. package/dist/commands/shell-bridge.d.ts.map +1 -0
  102. package/dist/commands/shell-bridge.js +32 -0
  103. package/dist/common/errors.d.ts +35 -0
  104. package/dist/common/errors.d.ts.map +1 -1
  105. package/dist/common/errors.js +29 -1
  106. package/dist/common/index.d.ts +2 -0
  107. package/dist/common/index.d.ts.map +1 -1
  108. package/dist/common/index.js +6 -0
  109. package/dist/common/is-dev.d.ts.map +1 -0
  110. package/dist/{motion/index.d.ts → common/motion.d.ts} +1 -1
  111. package/dist/common/motion.d.ts.map +1 -0
  112. package/dist/common/props.d.ts +1 -1
  113. package/dist/common/props.d.ts.map +1 -1
  114. package/dist/common/validate.js +1 -1
  115. package/dist/content/markdown.d.ts +3 -4
  116. package/dist/content/markdown.d.ts.map +1 -1
  117. package/dist/content/markdown.js +1 -4
  118. package/dist/controls/actions.d.ts +1 -1
  119. package/dist/controls/actions.d.ts.map +1 -1
  120. package/dist/controls/panel-row.js +1 -1
  121. package/dist/controls/range-filter.js +1 -1
  122. package/dist/dashboard/delta-badge.d.ts +18 -10
  123. package/dist/dashboard/delta-badge.d.ts.map +1 -1
  124. package/dist/dashboard/delta-badge.js +33 -1
  125. package/dist/dashboard/empty-state.d.ts +1 -4
  126. package/dist/dashboard/empty-state.d.ts.map +1 -1
  127. package/dist/dashboard/empty-state.js +1 -2
  128. package/dist/dashboard/index.d.ts +4 -2
  129. package/dist/dashboard/index.d.ts.map +1 -1
  130. package/dist/dashboard/index.js +7 -1
  131. package/dist/dashboard/query-state.d.ts +4 -13
  132. package/dist/dashboard/query-state.d.ts.map +1 -1
  133. package/dist/dashboard/query-state.js +4 -7
  134. package/dist/{section → dashboard}/section.d.ts +2 -2
  135. package/dist/{section → dashboard}/section.d.ts.map +1 -1
  136. package/dist/{section → dashboard}/section.js +2 -2
  137. package/dist/dashboard/settings-section.d.ts +1 -1
  138. package/dist/dashboard/settings-section.d.ts.map +1 -1
  139. package/dist/dashboard/settings-section.js +1 -1
  140. package/dist/dashboard/stat-card.d.ts +1 -1
  141. package/dist/dashboard/stat-card.d.ts.map +1 -1
  142. package/dist/dashboard/stat-card.js +1 -1
  143. package/dist/dashboard/widget-header.d.ts.map +1 -0
  144. package/dist/data/data-table.js +2 -2
  145. package/dist/data/table.d.ts +1 -1
  146. package/dist/data/table.d.ts.map +1 -1
  147. package/dist/data/table.js +2 -16
  148. package/dist/data/virtual.d.ts +3 -3
  149. package/dist/dev-dock.d.ts +28 -0
  150. package/dist/dev-dock.d.ts.map +1 -0
  151. package/dist/dev-dock.js +85 -0
  152. package/dist/format/date.d.ts +62 -0
  153. package/dist/format/date.d.ts.map +1 -0
  154. package/dist/format/date.js +106 -0
  155. package/dist/format/index.d.ts +39 -0
  156. package/dist/format/index.d.ts.map +1 -0
  157. package/dist/format/index.js +54 -0
  158. package/dist/format/measure.d.ts +15 -0
  159. package/dist/format/measure.d.ts.map +1 -0
  160. package/dist/format/measure.js +16 -0
  161. package/dist/format/number.d.ts +69 -0
  162. package/dist/format/number.d.ts.map +1 -0
  163. package/dist/format/number.js +62 -0
  164. package/dist/format/shared.d.ts +27 -0
  165. package/dist/format/shared.d.ts.map +1 -0
  166. package/dist/format/shared.js +29 -0
  167. package/dist/forms/field.d.ts +4 -20
  168. package/dist/forms/field.d.ts.map +1 -1
  169. package/dist/forms/field.js +0 -4
  170. package/dist/forms/form-layout.d.ts +1 -1
  171. package/dist/forms/form-layout.d.ts.map +1 -1
  172. package/dist/forms/form-layout.js +1 -1
  173. package/dist/forms/index.d.ts +1 -1
  174. package/dist/forms/index.d.ts.map +1 -1
  175. package/dist/forms/index.js +1 -2
  176. package/dist/forms/use-form-submit.js +1 -1
  177. package/dist/guard/index.d.ts +2 -9
  178. package/dist/guard/index.d.ts.map +1 -1
  179. package/dist/guard/index.js +16 -26
  180. package/dist/guard/types.d.ts +8 -10
  181. package/dist/guard/types.d.ts.map +1 -1
  182. package/dist/index.d.ts +16 -11
  183. package/dist/index.d.ts.map +1 -1
  184. package/dist/index.js +23 -29
  185. package/dist/notifications/index.d.ts +5 -5
  186. package/dist/notifications/index.d.ts.map +1 -1
  187. package/dist/notifications/index.js +0 -2
  188. package/dist/notifications/mount-guard.d.ts.map +1 -1
  189. package/dist/notifications/mount-guard.js +2 -2
  190. package/dist/provider/connectivity-indicator.d.ts.map +1 -0
  191. package/dist/{connectivity → provider}/connectivity-provider.d.ts +1 -1
  192. package/dist/provider/connectivity-provider.d.ts.map +1 -0
  193. package/dist/{connectivity/types.d.ts → provider/connectivity-types.d.ts} +1 -1
  194. package/dist/provider/connectivity-types.d.ts.map +1 -0
  195. package/dist/provider/error-fallback.module.css +21 -0
  196. package/dist/provider/error-fallback.module.css.d.ts +9 -0
  197. package/dist/provider/index.d.ts +20 -36
  198. package/dist/provider/index.d.ts.map +1 -1
  199. package/dist/provider/index.js +42 -32
  200. package/dist/provider/lab-theme.js +1 -1
  201. package/dist/provider/use-connectivity.d.ts +3 -0
  202. package/dist/provider/use-connectivity.d.ts.map +1 -0
  203. package/dist/query-client.d.ts +63 -0
  204. package/dist/query-client.d.ts.map +1 -0
  205. package/dist/query-client.js +33 -0
  206. package/dist/{query/devtools.d.ts → query-devtools.d.ts} +2 -2
  207. package/dist/query-devtools.d.ts.map +1 -0
  208. package/dist/register.d.ts +17 -3
  209. package/dist/register.d.ts.map +1 -1
  210. package/dist/router-tanstack/index.d.ts +4 -7
  211. package/dist/router-tanstack/index.d.ts.map +1 -1
  212. package/dist/router-tanstack/index.js +1 -9
  213. package/dist/router-tanstack/nav.d.ts +1 -1
  214. package/dist/router-tanstack/nav.d.ts.map +1 -1
  215. package/dist/router-tanstack/search-store.d.ts +3 -6
  216. package/dist/router-tanstack/search-store.d.ts.map +1 -1
  217. package/dist/router-tanstack/use-nav.d.ts +1 -1
  218. package/dist/router-tanstack/use-nav.d.ts.map +1 -1
  219. package/dist/shell/app-breadcrumbs.d.ts +1 -1
  220. package/dist/shell/app-breadcrumbs.d.ts.map +1 -1
  221. package/dist/shell/app-main.module.css +11 -0
  222. package/dist/shell/app-mobile-nav.d.ts +1 -1
  223. package/dist/shell/app-mobile-nav.d.ts.map +1 -1
  224. package/dist/shell/app-mobile-nav.js +24 -2
  225. package/dist/shell/app-sidebar.d.ts +1 -1
  226. package/dist/shell/app-sidebar.d.ts.map +1 -1
  227. package/dist/shell/app-sidebar.js +31 -2
  228. package/dist/shell/app-sidebar.module.css +10 -0
  229. package/dist/shell/index.d.ts +10 -4
  230. package/dist/shell/index.d.ts.map +1 -1
  231. package/dist/shell/index.js +13 -17
  232. package/dist/shell/mobile-nav-model.d.ts +1 -1
  233. package/dist/shell/mobile-nav-model.d.ts.map +1 -1
  234. package/dist/{nav/types.d.ts → shell/nav-types.d.ts} +1 -1
  235. package/dist/shell/nav-types.d.ts.map +1 -0
  236. package/dist/shell/page-aside.d.ts.map +1 -1
  237. package/dist/shell/page-aside.js +2 -29
  238. package/dist/shell/page-title.d.ts +14 -0
  239. package/dist/shell/page-title.d.ts.map +1 -0
  240. package/dist/shell/page-title.js +25 -0
  241. package/dist/shell/page-title.module.css +33 -0
  242. package/dist/shell/page-title.module.css.d.ts +11 -0
  243. package/dist/shell/sidebar-block-model.d.ts +1 -1
  244. package/dist/shell/sidebar-block-model.d.ts.map +1 -1
  245. package/dist/shell/sidebar-blocks.d.ts +1 -1
  246. package/dist/shell/sidebar-blocks.d.ts.map +1 -1
  247. package/dist/shell/use-breakpoint.d.ts +11 -0
  248. package/dist/shell/use-breakpoint.d.ts.map +1 -0
  249. package/dist/shell/use-breakpoint.js +33 -0
  250. package/dist/state/fields.d.ts +3 -19
  251. package/dist/state/fields.d.ts.map +1 -1
  252. package/dist/state/fields.js +6 -16
  253. package/dist/styles.css +36 -0
  254. package/dist/surfaces.d.ts +18 -41
  255. package/dist/surfaces.d.ts.map +1 -1
  256. package/dist/surfaces.js +46 -59
  257. package/dist/theme/index.d.ts.map +1 -1
  258. package/dist/{theme-toggle/index.d.ts → theme/theme-toggle.d.ts} +1 -1
  259. package/dist/theme/theme-toggle.d.ts.map +1 -0
  260. package/dist/{theme-toggle/index.js → theme/theme-toggle.js} +1 -1
  261. package/dist/tokens/index.d.ts +1 -0
  262. package/dist/tokens/index.d.ts.map +1 -1
  263. package/dist/tokens/index.js +10 -0
  264. package/dist/tokens/palette.d.ts +12 -0
  265. package/dist/tokens/palette.d.ts.map +1 -1
  266. package/dist/tokens/palette.js +13 -1
  267. package/dist/tokens.css +1 -0
  268. package/llms.txt +9 -24
  269. package/package.json +12 -16
  270. package/src/agent/ai-sdk-transport.ts +11 -4
  271. package/src/agent/coalesce.ts +1 -1
  272. package/src/agent/merge.ts +1 -1
  273. package/src/agent/transport.ts +15 -2
  274. package/src/agent/use-agent-thread-runs.ts +65 -15
  275. package/src/agent-chat/index.ts +6 -4
  276. package/src/agent-chat/relative-time.ts +1 -1
  277. package/src/agent-chat/thread-detail-panel.tsx +1 -1
  278. package/src/agent-chat/thread-feed-row.tsx +105 -30
  279. package/src/agent-chat/thread-feed.tsx +51 -25
  280. package/src/agent-chat/thread-message.tsx +1 -1
  281. package/src/agent-chat/virtualize.ts +48 -0
  282. package/src/charts/index.ts +7 -10
  283. package/src/charts/kinds/BandStrip.tsx +1 -1
  284. package/src/charts/kinds/Bars.tsx +2 -5
  285. package/src/charts/kinds/DualPanel.tsx +4 -3
  286. package/src/charts/kinds/StackedArea.tsx +1 -1
  287. package/src/charts/kinds/ZonedLine.tsx +1 -4
  288. package/src/charts/primitives/Axes.tsx +49 -0
  289. package/src/charts/primitives/ChartCard.tsx +49 -6
  290. package/src/charts/primitives/ChartFrame.tsx +5 -1
  291. package/src/charts/primitives/ChartPending.tsx +14 -8
  292. package/src/charts/utils/format.ts +17 -186
  293. package/src/cli/audit-allows.ts +371 -0
  294. package/src/cli/check-theme.ts +197 -0
  295. package/src/cli/doctor.ts +331 -0
  296. package/src/cli/guard-hook.ts +115 -0
  297. package/src/cli/help.ts +101 -0
  298. package/src/cli/index.ts +269 -3439
  299. package/src/cli/init.ts +247 -0
  300. package/src/cli/sync.ts +324 -0
  301. package/src/cli/tokens-css.ts +252 -0
  302. package/src/commands/define-commands.ts +1 -1
  303. package/src/commands/define-overlays.ts +1 -1
  304. package/src/commands/index.ts +10 -1
  305. package/src/commands/overlays-mount.tsx +8 -10
  306. package/src/commands/shell-bridge.ts +86 -0
  307. package/src/common/errors.ts +70 -0
  308. package/src/common/index.ts +2 -0
  309. package/src/common/props.ts +1 -1
  310. package/src/common/validate.ts +1 -1
  311. package/src/content/markdown.tsx +4 -8
  312. package/src/controls/actions.tsx +1 -1
  313. package/src/controls/panel-row.tsx +1 -1
  314. package/src/controls/range-filter.tsx +1 -1
  315. package/src/dashboard/delta-badge.tsx +74 -7
  316. package/src/dashboard/empty-state.tsx +2 -6
  317. package/src/dashboard/index.ts +11 -2
  318. package/src/dashboard/query-state.tsx +5 -18
  319. package/src/{section → dashboard}/section.tsx +4 -4
  320. package/src/dashboard/settings-section.tsx +2 -2
  321. package/src/dashboard/stat-card.tsx +2 -2
  322. package/src/data/data-table.tsx +3 -3
  323. package/src/data/table.ts +6 -25
  324. package/src/data/virtual-list.tsx +1 -1
  325. package/src/data/virtual.ts +3 -3
  326. package/src/dev-dock.tsx +159 -0
  327. package/src/format/date.ts +184 -0
  328. package/src/format/index.ts +69 -0
  329. package/src/format/measure.ts +31 -0
  330. package/src/format/number.ts +129 -0
  331. package/src/format/shared.ts +63 -0
  332. package/src/forms/field.ts +4 -24
  333. package/src/forms/form-layout.tsx +2 -2
  334. package/src/forms/index.ts +1 -2
  335. package/src/forms/use-form-submit.ts +1 -1
  336. package/src/guard/index.ts +30 -56
  337. package/src/guard/types.ts +7 -10
  338. package/src/index.ts +38 -29
  339. package/src/notifications/index.ts +5 -7
  340. package/src/notifications/mount-guard.ts +7 -9
  341. package/src/{connectivity → provider}/connectivity-indicator.tsx +1 -1
  342. package/src/{connectivity → provider}/connectivity-provider.tsx +1 -1
  343. package/src/provider/error-fallback.module.css +21 -0
  344. package/src/provider/error-fallback.module.css.d.ts +9 -0
  345. package/src/provider/index.tsx +71 -71
  346. package/src/provider/lab-theme.ts +1 -1
  347. package/src/{connectivity → provider}/use-connectivity.ts +3 -3
  348. package/src/query-client.ts +100 -0
  349. package/src/{query/devtools.tsx → query-devtools.tsx} +5 -4
  350. package/src/register.ts +20 -4
  351. package/src/router-tanstack/index.ts +4 -15
  352. package/src/router-tanstack/nav.ts +1 -1
  353. package/src/router-tanstack/search-store.ts +3 -4
  354. package/src/router-tanstack/use-nav.ts +1 -1
  355. package/src/shell/app-breadcrumbs.tsx +1 -1
  356. package/src/shell/app-main.module.css +11 -0
  357. package/src/shell/app-mobile-nav.tsx +28 -1
  358. package/src/shell/app-sidebar.module.css +10 -0
  359. package/src/shell/app-sidebar.tsx +31 -2
  360. package/src/shell/index.tsx +23 -28
  361. package/src/shell/mobile-nav-model.ts +1 -1
  362. package/src/shell/page-aside.tsx +2 -52
  363. package/src/shell/page-title.module.css +33 -0
  364. package/src/shell/page-title.module.css.d.ts +11 -0
  365. package/src/shell/page-title.tsx +57 -0
  366. package/src/shell/sidebar-block-model.ts +1 -1
  367. package/src/shell/sidebar-blocks.tsx +1 -1
  368. package/src/shell/use-breakpoint.ts +73 -0
  369. package/src/state/fields.ts +7 -43
  370. package/src/styles.css +36 -0
  371. package/src/surfaces.ts +45 -60
  372. package/src/theme/index.ts +7 -0
  373. package/src/{theme-toggle/index.tsx → theme/theme-toggle.tsx} +1 -1
  374. package/src/tokens/index.ts +10 -0
  375. package/src/tokens/palette.ts +12 -0
  376. package/dist/connectivity/connectivity-indicator.d.ts.map +0 -1
  377. package/dist/connectivity/connectivity-provider.d.ts.map +0 -1
  378. package/dist/connectivity/index.d.ts +0 -14
  379. package/dist/connectivity/index.d.ts.map +0 -1
  380. package/dist/connectivity/index.js +0 -8
  381. package/dist/connectivity/types.d.ts.map +0 -1
  382. package/dist/connectivity/use-connectivity.d.ts +0 -3
  383. package/dist/connectivity/use-connectivity.d.ts.map +0 -1
  384. package/dist/data/index.d.ts +0 -38
  385. package/dist/data/index.d.ts.map +0 -1
  386. package/dist/data/index.js +0 -24
  387. package/dist/motion/index.d.ts.map +0 -1
  388. package/dist/nav/types.d.ts.map +0 -1
  389. package/dist/notifications/overlay.d.ts +0 -20
  390. package/dist/notifications/overlay.d.ts.map +0 -1
  391. package/dist/notifications/overlay.js +0 -14
  392. package/dist/query/devtools.d.ts.map +0 -1
  393. package/dist/query/error-message.d.ts +0 -41
  394. package/dist/query/error-message.d.ts.map +0 -1
  395. package/dist/query/error-message.js +0 -30
  396. package/dist/query/index.d.ts +0 -47
  397. package/dist/query/index.d.ts.map +0 -1
  398. package/dist/query/index.js +0 -56
  399. package/dist/router-tanstack/field.d.ts +0 -14
  400. package/dist/router-tanstack/field.d.ts.map +0 -1
  401. package/dist/router-tanstack/field.js +0 -4
  402. package/dist/router-tanstack/multi-search-param-store.d.ts +0 -43
  403. package/dist/router-tanstack/multi-search-param-store.d.ts.map +0 -1
  404. package/dist/router-tanstack/multi-search-param-store.js +0 -30
  405. package/dist/router-tanstack/search-param-store.d.ts +0 -42
  406. package/dist/router-tanstack/search-param-store.d.ts.map +0 -1
  407. package/dist/router-tanstack/search-param-store.js +0 -25
  408. package/dist/section/index.d.ts +0 -2
  409. package/dist/section/index.d.ts.map +0 -1
  410. package/dist/section/index.js +0 -4
  411. package/dist/theme-toggle/index.d.ts.map +0 -1
  412. package/dist/utils/is-dev.d.ts.map +0 -1
  413. package/dist/widget-header/delta-badge.d.ts +0 -19
  414. package/dist/widget-header/delta-badge.d.ts.map +0 -1
  415. package/dist/widget-header/delta-badge.js +0 -36
  416. package/dist/widget-header/index.d.ts +0 -3
  417. package/dist/widget-header/index.d.ts.map +0 -1
  418. package/dist/widget-header/index.js +0 -8
  419. package/dist/widget-header/widget-header.d.ts.map +0 -1
  420. package/src/connectivity/index.ts +0 -19
  421. package/src/data/index.ts +0 -69
  422. package/src/notifications/overlay.tsx +0 -66
  423. package/src/query/error-message.ts +0 -70
  424. package/src/query/index.ts +0 -97
  425. package/src/router-tanstack/field.ts +0 -36
  426. package/src/router-tanstack/multi-search-param-store.ts +0 -106
  427. package/src/router-tanstack/search-param-store.ts +0 -100
  428. package/src/section/index.ts +0 -1
  429. package/src/widget-header/delta-badge.tsx +0 -77
  430. package/src/widget-header/index.ts +0 -10
  431. /package/dist/{utils → common}/is-dev.d.ts +0 -0
  432. /package/dist/{utils → common}/is-dev.js +0 -0
  433. /package/dist/{motion/index.js → common/motion.js} +0 -0
  434. /package/dist/{section → dashboard}/section.module.css +0 -0
  435. /package/dist/{section → dashboard}/section.module.css.d.ts +0 -0
  436. /package/dist/{widget-header → dashboard}/widget-header.d.ts +0 -0
  437. /package/dist/{widget-header → dashboard}/widget-header.js +0 -0
  438. /package/dist/{widget-header → dashboard}/widget-header.module.css +0 -0
  439. /package/dist/{widget-header → dashboard}/widget-header.module.css.d.ts +0 -0
  440. /package/dist/{connectivity → provider}/connectivity-indicator.d.ts +0 -0
  441. /package/dist/{connectivity → provider}/connectivity-indicator.js +0 -0
  442. /package/dist/{connectivity → provider}/connectivity-provider.js +0 -0
  443. /package/dist/{connectivity/types.js → provider/connectivity-types.js} +0 -0
  444. /package/dist/{connectivity → provider}/use-connectivity.js +0 -0
  445. /package/dist/{query/devtools.js → query-devtools.js} +0 -0
  446. /package/dist/{nav/types.js → shell/nav-types.js} +0 -0
  447. /package/src/{utils → common}/is-dev.ts +0 -0
  448. /package/src/{motion/index.ts → common/motion.ts} +0 -0
  449. /package/src/{section → dashboard}/section.module.css +0 -0
  450. /package/src/{section → dashboard}/section.module.css.d.ts +0 -0
  451. /package/src/{widget-header → dashboard}/widget-header.module.css +0 -0
  452. /package/src/{widget-header → dashboard}/widget-header.module.css.d.ts +0 -0
  453. /package/src/{widget-header → dashboard}/widget-header.tsx +0 -0
  454. /package/src/{connectivity/types.ts → provider/connectivity-types.ts} +0 -0
  455. /package/src/{nav/types.ts → shell/nav-types.ts} +0 -0
package/src/surfaces.ts CHANGED
@@ -56,7 +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
59
  'query-dual-import',
61
60
  'query-fn-unwrap',
62
61
  'deprecated-export',
@@ -67,6 +66,7 @@ export const PLUGIN_RULE_ID_LIST = [
67
66
  'agent-resume-guard',
68
67
  'agent-no-raw-usechat',
69
68
  'ai-sdk-major',
69
+ 'no-import-meta-env',
70
70
  ] as const
71
71
 
72
72
  /** One registered oxlint plugin rule id — the literal union of {@link PLUGIN_RULE_ID_LIST}. */
@@ -233,7 +233,7 @@ const MANTINE_BANS = [
233
233
 
234
234
  /**
235
235
  * 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.
236
+ * - 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
237
  * - #-prefixed synthetic keys (#app) — the synthetic global app-wide ban layer. The #-prefix
238
238
  * guarantees it is never mistaken for an export path.
239
239
  *
@@ -274,22 +274,25 @@ export const SURFACES = {
274
274
  'raw-scroll-container',
275
275
  'page-bar-budget',
276
276
  '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.
277
+ // The mount-order law, guarded as of 1.28.0 (F5) — same-file static ancestry, so `warn`.
278
+ // `deprecated-export` sits here too: the ledger it reads spans subpaths.
280
279
  'provider-above-router',
281
- 'duplicate-notifications-mount',
282
280
  'deprecated-export',
281
+ // `import.meta.env` is a Vite-ism that fails outside a Vite build (SSR/server code, Node
282
+ // scripts, tests) — process.env.NODE_ENV works everywhere basalt code runs. Repo-local,
283
+ // scoped to all of src/**, one surface required by coverage (C2 consolidation).
284
+ 'no-import-meta-env',
283
285
  ],
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.
286
+ // agent/rules/basalt-mantine.md — stated, not guarded. The other law that stood here gained
287
+ // `provider-above-router` at 1.28.0; this one has no AST form left to catch, because
288
+ // `cssVariablesResolver` is now `Omit`ted from the accepted prop type and a hand-built
289
+ // `createTheme` is a consumer's own call to make. (`duplicate-notifications-mount`, the
290
+ // other 1.28.0 mount-order rule, retired — `BasaltNotifications` no longer exists.)
288
291
  advisoryLaws: [
289
292
  "no second cssVariablesResolver — don't hand-build createTheme or re-add the resolver basalt already installs",
290
293
  ],
291
294
  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)',
295
+ '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
296
  optionalPeers: [
294
297
  'react-markdown',
295
298
  'remark-gfm',
@@ -297,6 +300,7 @@ export const SURFACES = {
297
300
  'remend',
298
301
  'shiki',
299
302
  'beautiful-mermaid',
303
+ '@tanstack/react-router-devtools',
300
304
  ],
301
305
  forbiddenImports: [], // the no-charts/tokens-reexport invariant is comment-only today; Phase-4 plugin
302
306
  },
@@ -305,13 +309,7 @@ export const SURFACES = {
305
309
  layer: 'headless',
306
310
  rule: 'charts',
307
311
  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
- ],
312
+ guardKinds: ['raw-hex', 'raw-color-fn', 'raw-visx-axis', 'chart-missing-aria-label'],
315
313
  pluginRules: [
316
314
  'hand-rolled-plot',
317
315
  'chart-legend-literal',
@@ -395,23 +393,15 @@ export const SURFACES = {
395
393
  // @visx/* ban dropped — `basalt/visx-boundary` now bans it universally outside charts.
396
394
  forbiddenImports: [...MANTINE_BANS],
397
395
  }, // 6th JS subpath
398
- './query': {
399
- kind: 'doctrine',
396
+ './format': {
397
+ kind: 'tooling',
400
398
  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'],
399
+ description:
400
+ '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
401
  globs: {
411
402
  shipped: [],
412
- repo: ['packages/basalt-ui/src/query/**'],
403
+ repo: ['packages/basalt-ui/src/format/**'],
413
404
  },
414
- // @visx/* ban dropped — `basalt/visx-boundary` now bans it universally outside charts.
415
405
  forbiddenImports: [...MANTINE_BANS],
416
406
  },
417
407
  './router-tanstack': {
@@ -423,7 +413,7 @@ export const SURFACES = {
423
413
  // Law C10 — a nav link's `search` and a reader's `from` are both this bridge's contract.
424
414
  pluginRules: ['search-literal-link', 'use-search-from-literal'],
425
415
  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)',
416
+ '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
417
  optionalPeers: ['@tanstack/react-router'],
428
418
  globs: {
429
419
  shipped: [],
@@ -444,7 +434,7 @@ export const SURFACES = {
444
434
  // consumer ships today (`PLUGIN_RULE_GRACE`).
445
435
  pluginRules: ['forms-field-key'],
446
436
  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)',
437
+ '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
438
  optionalPeers: ['@mantine/form'],
449
439
  forbiddenImports: [],
450
440
  },
@@ -472,18 +462,6 @@ export const SURFACES = {
472
462
  optionalPeers: ['@mantine/spotlight', '@mantine/modals', '@tanstack/react-hotkeys'],
473
463
  forbiddenImports: [],
474
464
  },
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
465
  './data/table': {
488
466
  kind: 'doctrine',
489
467
  layer: 'mantine-coupled',
@@ -604,7 +582,24 @@ export const SURFACES = {
604
582
  description:
605
583
  '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
584
  optionalPeers: [],
607
- forbiddenImports: [],
585
+ // `@mantine/dates` is an optional peer basaltViteConfig pre-bundles the whole @mantine scope
586
+ // for — a consumer without the peer (linewatch) must never resolve it through this surface.
587
+ // Nothing under src/controls may import it, statically or lazily — repo-local only, same
588
+ // pattern as MANTINE_BANS above (a shipped ban would be redundant with peerDependenciesMeta).
589
+ globs: {
590
+ shipped: [],
591
+ repo: ['packages/basalt-ui/src/controls/**'],
592
+ },
593
+ forbiddenImports: [
594
+ v(
595
+ '@mantine/dates',
596
+ '@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.',
597
+ ),
598
+ vg(
599
+ '@mantine/dates/*',
600
+ '@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.',
601
+ ),
602
+ ],
608
603
  },
609
604
  './controls-dates': {
610
605
  kind: 'doctrine',
@@ -639,19 +634,6 @@ export const SURFACES = {
639
634
  forbiddenImports: [...MANTINE_BANS],
640
635
  },
641
636
 
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
637
  // ── Non-JS published assets (ToolingSpec; not JS subpaths — check-coverage exempts these) ─────
656
638
  './styles.css': {
657
639
  kind: 'tooling',
@@ -690,7 +672,10 @@ export const SURFACES = {
690
672
  rule: 'batteries',
691
673
  skill: ['basalt-app'],
692
674
  guardKinds: [],
693
- pluginRules: [],
675
+ // query-dual-import / query-fn-unwrap: reassigned here from the now-dropped `./query` surface
676
+ // (C1 consolidation — createBasaltQueryClient/unwrap/BasaltQueryDevtools are root barrel
677
+ // exports now, but their doctrine stays `batteries` — "use the shipped thing" — not `mantine`).
678
+ pluginRules: ['query-dual-import', 'query-fn-unwrap'],
694
679
  globs: {
695
680
  // Shipped is a catch-all (not just src/**+app/**) so consumer code under components/, lib/,
696
681
  // 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"}