basalt-ui 1.40.3 → 2.0.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 (923) hide show
  1. package/AGENTS.md +50 -45
  2. package/CHANGELOG.md +543 -513
  3. package/MIGRATING.md +969 -37
  4. package/README.md +172 -367
  5. package/agent/rules/basalt-batteries.md +19 -74
  6. package/agent/rules/basalt-charts.md +21 -95
  7. package/agent/rules/basalt-controls.md +23 -131
  8. package/agent/rules/basalt-mantine.md +26 -99
  9. package/agent/rules/basalt-state.md +21 -103
  10. package/agent/rules/basalt-tokens.md +33 -114
  11. package/agent/skills/basalt-app/SKILL.md +229 -72
  12. package/agent/skills/basalt-charts/SKILL.md +23 -57
  13. package/agent/skills/basalt-design/SKILL.md +12 -70
  14. package/agent/templates/AGENTS-block.md.tpl +30 -0
  15. package/agent/templates/DESIGN.md.tpl +2 -2
  16. package/agent/templates/__root.tpl +9 -16
  17. package/agent/templates/main.tpl +21 -0
  18. package/agent/templates/nav.tpl +18 -0
  19. package/configs/check.yml +1 -1
  20. package/configs/oxlint-basalt.json +4 -10
  21. package/configs/oxlint-plugin.js +468 -847
  22. package/configs/oxlint-plugin.test.ts +662 -710
  23. package/configs/oxlint.json +10 -2
  24. package/dist/agent/ai-sdk-transport.d.ts +19 -7
  25. package/dist/agent/ai-sdk-transport.d.ts.map +1 -1
  26. package/dist/agent/ai-sdk-transport.js +10 -7
  27. package/dist/{agent-chat → agent/chat}/composer.d.ts +16 -16
  28. package/dist/agent/chat/composer.d.ts.map +1 -0
  29. package/dist/{agent-chat → agent/chat}/composer.js +10 -9
  30. package/dist/{agent-chat → agent/chat}/message-affordances.d.ts +7 -6
  31. package/dist/agent/chat/message-affordances.d.ts.map +1 -0
  32. package/dist/agent/chat/relative-time.d.ts.map +1 -0
  33. package/dist/{agent-chat → agent/chat}/thread-feed-row.d.ts +18 -16
  34. package/dist/agent/chat/thread-feed-row.d.ts.map +1 -0
  35. package/dist/{agent-chat → agent/chat}/thread-feed-row.js +12 -11
  36. package/dist/{agent-chat → agent/chat}/thread-feed.d.ts +8 -8
  37. package/dist/agent/chat/thread-feed.d.ts.map +1 -0
  38. package/dist/{agent-chat → agent/chat}/thread-feed.js +12 -10
  39. package/dist/{agent-chat → agent/chat}/thread-message.d.ts +12 -9
  40. package/dist/agent/chat/thread-message.d.ts.map +1 -0
  41. package/dist/{agent-chat → agent/chat}/thread-message.js +15 -13
  42. package/dist/{agent-chat → agent/chat}/thread-outcome-card.d.ts +2 -2
  43. package/dist/agent/chat/thread-outcome-card.d.ts.map +1 -0
  44. package/dist/{agent-chat → agent/chat}/thread-outcome-card.js +3 -3
  45. package/dist/{agent-chat → agent/chat}/tool-chip.d.ts +5 -5
  46. package/dist/agent/chat/tool-chip.d.ts.map +1 -0
  47. package/dist/{agent-chat → agent/chat}/tool-chip.js +4 -4
  48. package/dist/agent/chat/use-keyboard-inset.d.ts.map +1 -0
  49. package/dist/{agent-chat → agent/chat}/use-keyboard-inset.js +1 -1
  50. package/dist/{agent-chat → agent/chat}/virtualize.d.ts +7 -7
  51. package/dist/agent/chat/virtualize.d.ts.map +1 -0
  52. package/dist/agent/error.d.ts +31 -0
  53. package/dist/agent/error.d.ts.map +1 -0
  54. package/dist/agent/error.js +18 -0
  55. package/dist/agent/foreign.d.ts +3 -2
  56. package/dist/agent/foreign.d.ts.map +1 -1
  57. package/dist/agent/history.d.ts +2 -36
  58. package/dist/agent/history.d.ts.map +1 -1
  59. package/dist/agent/history.js +0 -32
  60. package/dist/agent/id.d.ts +4 -5
  61. package/dist/agent/id.d.ts.map +1 -1
  62. package/dist/agent/index.d.ts +19 -52
  63. package/dist/agent/index.d.ts.map +1 -1
  64. package/dist/agent/index.js +10 -32
  65. package/dist/agent/outcome.d.ts +3 -14
  66. package/dist/agent/outcome.d.ts.map +1 -1
  67. package/dist/agent/outcome.js +0 -30
  68. package/dist/agent/part-list.d.ts +3 -3
  69. package/dist/agent/part-list.d.ts.map +1 -1
  70. package/dist/agent/parts.d.ts +23 -24
  71. package/dist/agent/parts.d.ts.map +1 -1
  72. package/dist/agent/run-committer.d.ts +23 -0
  73. package/dist/agent/run-committer.d.ts.map +1 -0
  74. package/dist/agent/run-committer.js +41 -0
  75. package/dist/agent/run-records.d.ts +77 -0
  76. package/dist/agent/run-records.d.ts.map +1 -0
  77. package/dist/agent/run-records.js +69 -0
  78. package/dist/agent/thread.d.ts +23 -47
  79. package/dist/agent/thread.d.ts.map +1 -1
  80. package/dist/agent/thread.js +3 -134
  81. package/dist/agent/transport.d.ts +6 -69
  82. package/dist/agent/transport.d.ts.map +1 -1
  83. package/dist/agent/transport.js +0 -18
  84. package/dist/agent/use-agent-thread-runs.d.ts +63 -26
  85. package/dist/agent/use-agent-thread-runs.d.ts.map +1 -1
  86. package/dist/agent/use-agent-thread-runs.js +202 -66
  87. package/dist/charts/BandStrip.d.ts +46 -0
  88. package/dist/charts/BandStrip.d.ts.map +1 -0
  89. package/dist/charts/BandStrip.js +151 -0
  90. package/dist/charts/Bars.d.ts +19 -0
  91. package/dist/charts/Bars.d.ts.map +1 -0
  92. package/dist/charts/Bars.js +77 -0
  93. package/dist/charts/CartesianChart.d.ts +57 -0
  94. package/dist/charts/CartesianChart.d.ts.map +1 -0
  95. package/dist/charts/CartesianChart.js +121 -0
  96. package/dist/charts/ChartCard.d.ts +34 -0
  97. package/dist/charts/ChartCard.d.ts.map +1 -0
  98. package/dist/charts/ChartCard.js +115 -0
  99. package/dist/charts/Donut.d.ts +25 -0
  100. package/dist/charts/Donut.d.ts.map +1 -0
  101. package/dist/charts/Donut.js +191 -0
  102. package/dist/charts/DualPanel.d.ts +47 -0
  103. package/dist/charts/DualPanel.d.ts.map +1 -0
  104. package/dist/charts/DualPanel.js +214 -0
  105. package/dist/charts/Heatmap.d.ts +41 -0
  106. package/dist/charts/Heatmap.d.ts.map +1 -0
  107. package/dist/charts/Heatmap.js +216 -0
  108. package/dist/charts/Lines.d.ts +11 -0
  109. package/dist/charts/Lines.d.ts.map +1 -0
  110. package/dist/charts/Lines.js +114 -0
  111. package/dist/charts/MirroredBars.d.ts +44 -0
  112. package/dist/charts/MirroredBars.d.ts.map +1 -0
  113. package/dist/charts/MirroredBars.js +190 -0
  114. package/dist/charts/Sparkline.d.ts +22 -0
  115. package/dist/charts/Sparkline.d.ts.map +1 -0
  116. package/dist/charts/Sparkline.js +129 -0
  117. package/dist/charts/StackedArea.d.ts +15 -0
  118. package/dist/charts/StackedArea.d.ts.map +1 -0
  119. package/dist/charts/StackedArea.js +46 -0
  120. package/dist/charts/box.d.ts +38 -0
  121. package/dist/charts/box.d.ts.map +1 -0
  122. package/dist/charts/box.js +72 -0
  123. package/dist/charts/card-context.d.ts +3 -0
  124. package/dist/charts/card-context.d.ts.map +1 -0
  125. package/dist/charts/card-context.js +7 -0
  126. package/dist/charts/chart-box.module.css +64 -0
  127. package/{src/content/article-card.module.css.d.ts → dist/charts/chart-box.module.css.d.ts} +5 -9
  128. package/dist/charts/chart-card.module.css +25 -0
  129. package/dist/{dashboard/widget-grid.module.css.d.ts → charts/chart-card.module.css.d.ts} +1 -3
  130. package/dist/charts/chart-legend.module.css +38 -0
  131. package/{src/dashboard/widget-grid.module.css.d.ts → dist/charts/chart-legend.module.css.d.ts} +3 -3
  132. package/dist/charts/compile.d.ts +62 -0
  133. package/dist/charts/compile.d.ts.map +1 -0
  134. package/dist/charts/compile.js +386 -0
  135. package/dist/charts/cursor.d.ts +50 -0
  136. package/dist/charts/cursor.d.ts.map +1 -0
  137. package/dist/charts/cursor.js +157 -0
  138. package/dist/charts/curves.d.ts +12 -0
  139. package/dist/charts/curves.d.ts.map +1 -0
  140. package/dist/charts/curves.js +86 -0
  141. package/dist/charts/donut.module.css +54 -0
  142. package/dist/{content/article-card.module.css.d.ts → charts/donut.module.css.d.ts} +2 -9
  143. package/dist/charts/host.d.ts +17 -0
  144. package/dist/charts/host.d.ts.map +1 -0
  145. package/dist/charts/host.js +35 -0
  146. package/dist/charts/index.d.ts +18 -53
  147. package/dist/charts/index.d.ts.map +1 -1
  148. package/dist/charts/index.js +17 -189
  149. package/dist/charts/legend.d.ts +23 -0
  150. package/dist/charts/legend.d.ts.map +1 -0
  151. package/dist/charts/legend.js +160 -0
  152. package/dist/charts/marks.d.ts +25 -0
  153. package/dist/charts/marks.d.ts.map +1 -0
  154. package/dist/charts/marks.js +128 -0
  155. package/dist/charts/panel.d.ts +56 -0
  156. package/dist/charts/panel.d.ts.map +1 -0
  157. package/dist/charts/panel.js +123 -0
  158. package/dist/charts/scales.d.ts +44 -0
  159. package/dist/charts/scales.d.ts.map +1 -0
  160. package/dist/charts/scales.js +163 -0
  161. package/dist/charts/sizing.d.ts +12 -0
  162. package/dist/charts/sizing.d.ts.map +1 -0
  163. package/dist/charts/sizing.js +33 -0
  164. package/dist/charts/state.d.ts +17 -0
  165. package/dist/charts/state.d.ts.map +1 -0
  166. package/dist/charts/state.js +53 -0
  167. package/dist/charts/theme.d.ts +38 -19
  168. package/dist/charts/theme.d.ts.map +1 -1
  169. package/dist/charts/theme.js +48 -26
  170. package/dist/charts/types.d.ts +227 -0
  171. package/dist/charts/types.d.ts.map +1 -0
  172. package/dist/charts/types.js +4 -0
  173. package/dist/cli/audit-allows.d.ts +4 -17
  174. package/dist/cli/audit-allows.d.ts.map +1 -1
  175. package/dist/cli/config.d.ts +14 -43
  176. package/dist/cli/config.d.ts.map +1 -1
  177. package/dist/cli/doctor-upgrade.d.ts +31 -0
  178. package/dist/cli/doctor-upgrade.d.ts.map +1 -0
  179. package/dist/cli/doctor-upgrade.js +269 -0
  180. package/dist/cli/doctor.d.ts +13 -26
  181. package/dist/cli/doctor.d.ts.map +1 -1
  182. package/dist/cli/doctor.js +79 -8
  183. package/dist/cli/help.d.ts.map +1 -1
  184. package/dist/cli/help.js +2 -4
  185. package/dist/cli/index.d.ts +68 -135
  186. package/dist/cli/index.d.ts.map +1 -1
  187. package/dist/cli/index.js +89 -76
  188. package/dist/cli/init.d.ts.map +1 -1
  189. package/dist/cli/init.js +43 -27
  190. package/dist/cli/sync.d.ts +5 -21
  191. package/dist/cli/sync.d.ts.map +1 -1
  192. package/dist/cli/sync.js +4 -6
  193. package/dist/cli/tokens-css.d.ts +7 -28
  194. package/dist/cli/tokens-css.d.ts.map +1 -1
  195. package/dist/commands/ShortcutsHelp.d.ts.map +1 -1
  196. package/dist/commands/ShortcutsHelp.js +4 -5
  197. package/dist/commands/define-commands.d.ts +15 -31
  198. package/dist/commands/define-commands.d.ts.map +1 -1
  199. package/dist/commands/define-commands.js +1 -11
  200. package/dist/commands/define-overlays.d.ts +5 -19
  201. package/dist/commands/define-overlays.d.ts.map +1 -1
  202. package/dist/commands/define-overlays.js +3 -11
  203. package/dist/commands/index.d.ts +10 -40
  204. package/dist/commands/index.d.ts.map +1 -1
  205. package/dist/commands/index.js +9 -46
  206. package/dist/{notifications → commands/notifications}/bell.d.ts +1 -1
  207. package/dist/commands/notifications/bell.d.ts.map +1 -0
  208. package/dist/{notifications → commands/notifications}/center.d.ts +2 -2
  209. package/dist/commands/notifications/center.d.ts.map +1 -0
  210. package/dist/{notifications → commands/notifications}/center.js +2 -2
  211. package/dist/{notifications → commands/notifications}/define-notifications.d.ts +3 -3
  212. package/dist/commands/notifications/define-notifications.d.ts.map +1 -0
  213. package/dist/commands/notifications/notify.d.ts +44 -0
  214. package/dist/commands/notifications/notify.d.ts.map +1 -0
  215. package/dist/commands/notifications/notify.js +79 -0
  216. package/dist/{notifications → commands/notifications}/store.d.ts +2 -0
  217. package/dist/commands/notifications/store.d.ts.map +1 -0
  218. package/dist/{notifications → commands/notifications}/store.js +4 -0
  219. package/dist/commands/projectors.d.ts +1 -131
  220. package/dist/commands/projectors.d.ts.map +1 -1
  221. package/dist/commands/projectors.js +2 -73
  222. package/dist/commands/shell-bridge.d.ts +3 -3
  223. package/dist/commands/shortcut-format.d.ts +5 -4
  224. package/dist/commands/shortcut-format.d.ts.map +1 -1
  225. package/dist/common/errors.d.ts +3 -3
  226. package/dist/common/use-measured-widths.d.ts.map +1 -1
  227. package/dist/common/use-measured-widths.js +5 -3
  228. package/dist/common/validate.d.ts +2 -2
  229. package/dist/content/article-layout.d.ts.map +1 -1
  230. package/dist/content/article-layout.js +3 -3
  231. package/dist/content/article-model.d.ts +1 -46
  232. package/dist/content/article-model.d.ts.map +1 -1
  233. package/dist/content/article-model.js +1 -29
  234. package/dist/content/copy-action.d.ts +1 -1
  235. package/dist/content/glyphs.d.ts +1 -1
  236. package/dist/content/index.d.ts +11 -41
  237. package/dist/content/index.d.ts.map +1 -1
  238. package/dist/content/index.js +3 -35
  239. package/dist/content/markdown.d.ts +1 -1
  240. package/dist/content/markdown.d.ts.map +1 -1
  241. package/dist/content/markdown.js +1 -1
  242. package/dist/content/mermaid.d.ts.map +1 -1
  243. package/dist/content/mermaid.js +7 -7
  244. package/dist/content/slug.d.ts +1 -8
  245. package/dist/content/slug.d.ts.map +1 -1
  246. package/dist/content/slug.js +1 -8
  247. package/dist/content/url-hardening.d.ts +2 -2
  248. package/dist/content/url-hardening.d.ts.map +1 -1
  249. package/dist/content/url-hardening.js +2 -0
  250. package/dist/controls/actions.d.ts +16 -1
  251. package/dist/controls/actions.d.ts.map +1 -1
  252. package/dist/controls/enum-filter.d.ts +1 -1
  253. package/dist/controls/enum-filter.d.ts.map +1 -1
  254. package/dist/controls/filter-context.d.ts.map +1 -1
  255. package/dist/controls/filter-context.js +3 -1
  256. package/dist/controls/filter-set.js +4 -6
  257. package/dist/controls/form-layout.d.ts +1 -1
  258. package/dist/controls/form-layout.d.ts.map +1 -1
  259. package/dist/controls/form-layout.js +1 -1
  260. package/dist/controls/glyphs.d.ts +0 -2
  261. package/dist/controls/glyphs.d.ts.map +1 -1
  262. package/dist/controls/glyphs.js +0 -7
  263. package/dist/controls/index.d.ts +12 -17
  264. package/dist/controls/index.d.ts.map +1 -1
  265. package/dist/controls/index.js +5 -39
  266. package/dist/controls/multi-select-filter.d.ts +4 -3
  267. package/dist/controls/multi-select-filter.d.ts.map +1 -1
  268. package/dist/controls/number-filter.d.ts +4 -3
  269. package/dist/controls/number-filter.d.ts.map +1 -1
  270. package/dist/controls/number-filter.js +3 -1
  271. package/dist/controls/range-filter.d.ts +4 -3
  272. package/dist/controls/range-filter.d.ts.map +1 -1
  273. package/dist/controls/search-filter.d.ts +4 -3
  274. package/dist/controls/search-filter.d.ts.map +1 -1
  275. package/dist/controls/search-filter.js +19 -14
  276. package/dist/controls/select-filter.d.ts +4 -3
  277. package/dist/controls/select-filter.d.ts.map +1 -1
  278. package/dist/controls/sync-button.d.ts.map +1 -1
  279. package/dist/controls/sync-button.js +12 -15
  280. package/dist/controls/toggle-filter.d.ts +4 -3
  281. package/dist/controls/toggle-filter.d.ts.map +1 -1
  282. package/dist/controls/uncontrolled.d.ts +12 -0
  283. package/dist/controls/uncontrolled.d.ts.map +1 -0
  284. package/dist/controls/view-tabs.d.ts +2 -2
  285. package/dist/controls/view-tabs.d.ts.map +1 -1
  286. package/dist/controls-dates/index.d.ts +0 -1
  287. package/dist/controls-dates/index.d.ts.map +1 -1
  288. package/dist/dashboard/index.d.ts +7 -9
  289. package/dist/dashboard/index.d.ts.map +1 -1
  290. package/dist/dashboard/index.js +3 -23
  291. package/dist/dashboard/section.d.ts +4 -6
  292. package/dist/dashboard/section.d.ts.map +1 -1
  293. package/dist/dashboard/section.js +4 -10
  294. package/dist/dashboard/stat-card.d.ts +4 -4
  295. package/dist/dashboard/stat-card.d.ts.map +1 -1
  296. package/dist/dashboard/stat-card.js +3 -3
  297. package/dist/dashboard/widget-header.module.css +9 -7
  298. package/dist/dev-dock.d.ts.map +1 -1
  299. package/dist/dev-dock.js +6 -1
  300. package/dist/format/date.d.ts +0 -34
  301. package/dist/format/date.d.ts.map +1 -1
  302. package/dist/format/date.js +0 -54
  303. package/dist/format/index.d.ts +7 -22
  304. package/dist/format/index.d.ts.map +1 -1
  305. package/dist/format/index.js +2 -43
  306. package/dist/format/number.d.ts +3 -14
  307. package/dist/format/number.d.ts.map +1 -1
  308. package/dist/format/number.js +0 -13
  309. package/dist/format/shared.d.ts +2 -3
  310. package/dist/format/shared.d.ts.map +1 -1
  311. package/dist/forms/index.d.ts +0 -11
  312. package/dist/forms/index.d.ts.map +1 -1
  313. package/dist/forms/index.js +1 -14
  314. package/dist/guard/index.d.ts +6 -21
  315. package/dist/guard/index.d.ts.map +1 -1
  316. package/dist/guard/index.js +27 -115
  317. package/dist/guard/types.d.ts +7 -18
  318. package/dist/guard/types.d.ts.map +1 -1
  319. package/dist/index.d.ts +16 -48
  320. package/dist/index.d.ts.map +1 -1
  321. package/dist/index.js +21 -117
  322. package/dist/provider/create-router.d.ts +44 -0
  323. package/dist/provider/create-router.d.ts.map +1 -0
  324. package/dist/provider/create-router.js +62 -0
  325. package/dist/provider/hotkeys.d.ts +8 -0
  326. package/dist/provider/hotkeys.d.ts.map +1 -0
  327. package/dist/provider/hotkeys.js +50 -0
  328. package/dist/provider/index.d.ts +33 -110
  329. package/dist/provider/index.d.ts.map +1 -1
  330. package/dist/provider/index.js +182 -82
  331. package/dist/provider/lab-theme.d.ts.map +1 -1
  332. package/dist/provider/route-transition.d.ts +76 -0
  333. package/dist/provider/route-transition.d.ts.map +1 -0
  334. package/dist/provider/route-transition.js +98 -0
  335. package/dist/provider/spotlight-actions.d.ts +10 -0
  336. package/dist/provider/spotlight-actions.d.ts.map +1 -0
  337. package/dist/provider/spotlight-actions.js +55 -0
  338. package/dist/provider/test-router.d.ts +6 -0
  339. package/dist/provider/test-router.d.ts.map +1 -0
  340. package/dist/provider/test-router.js +18 -0
  341. package/dist/query-client.d.ts +4 -20
  342. package/dist/query-client.d.ts.map +1 -1
  343. package/dist/query-client.js +2 -2
  344. package/dist/router-tanstack/index.d.ts +18 -64
  345. package/dist/router-tanstack/index.d.ts.map +1 -1
  346. package/dist/router-tanstack/index.js +2 -16
  347. package/dist/router-tanstack/nav.d.ts +12 -1
  348. package/dist/router-tanstack/nav.d.ts.map +1 -1
  349. package/dist/router-tanstack/nav.js +8 -1
  350. package/dist/router-tanstack/search-store.d.ts +1 -1
  351. package/dist/router-tanstack/search-store.d.ts.map +1 -1
  352. package/dist/router-tanstack/use-nav.d.ts +8 -9
  353. package/dist/router-tanstack/use-nav.d.ts.map +1 -1
  354. package/dist/router-tanstack/use-nav.js +20 -1
  355. package/dist/shell/app-mobile-nav.d.ts.map +1 -1
  356. package/dist/shell/app-sidebar.js +1 -1
  357. package/dist/shell/index.d.ts +31 -10
  358. package/dist/shell/index.d.ts.map +1 -1
  359. package/dist/shell/index.js +14 -3
  360. package/dist/shell/page-aside.d.ts +2 -2
  361. package/dist/shell/page-aside.d.ts.map +1 -1
  362. package/dist/shell/page-aside.js +31 -12
  363. package/dist/shell/page-bar.d.ts +2 -2
  364. package/dist/shell/page-bar.d.ts.map +1 -1
  365. package/dist/shell/page-bar.js +1 -1
  366. package/dist/state.d.ts +10 -12
  367. package/dist/state.d.ts.map +1 -1
  368. package/dist/state.js +4 -6
  369. package/dist/styles.css +107 -7
  370. package/dist/surfaces.d.ts +28 -103
  371. package/dist/surfaces.d.ts.map +1 -1
  372. package/dist/surfaces.js +54 -143
  373. package/dist/{data → table}/data-table-state.d.ts +1 -1
  374. package/dist/table/data-table-state.d.ts.map +1 -0
  375. package/dist/{data → table}/data-table-state.js +4 -3
  376. package/dist/{data → table}/data-table.d.ts +28 -49
  377. package/dist/table/data-table.d.ts.map +1 -0
  378. package/dist/{data → table}/data-table.js +74 -60
  379. package/dist/table/index.d.ts +18 -0
  380. package/dist/table/index.d.ts.map +1 -0
  381. package/dist/{data/table.js → table/index.js} +1 -1
  382. package/dist/table/query-branch.d.ts.map +1 -0
  383. package/dist/table/table-features.d.ts +69 -0
  384. package/dist/table/table-features.d.ts.map +1 -0
  385. package/dist/table/table-features.js +49 -0
  386. package/dist/telemetry.d.ts +77 -0
  387. package/dist/telemetry.d.ts.map +1 -0
  388. package/dist/telemetry.js +33 -0
  389. package/dist/theme/index.d.ts +10 -21
  390. package/dist/theme/index.d.ts.map +1 -1
  391. package/dist/theme/index.js +3 -14
  392. package/dist/theme/theme-toggle.d.ts.map +1 -1
  393. package/dist/theme/theme-toggle.js +7 -33
  394. package/dist/theme/theme-toggle.module.css +30 -0
  395. package/dist/theme/theme-toggle.module.css.d.ts +10 -0
  396. package/dist/theme-lab/derive-controls.d.ts.map +1 -1
  397. package/dist/theme-lab/derive-controls.js +5 -3
  398. package/dist/theme-lab/derive-state.d.ts.map +1 -1
  399. package/dist/theme-lab/derive-state.js +2 -1
  400. package/dist/tokens/core.d.ts +360 -0
  401. package/dist/tokens/core.d.ts.map +1 -0
  402. package/dist/tokens/core.js +708 -0
  403. package/dist/tokens/derive.d.ts +1 -1
  404. package/dist/tokens/derive.d.ts.map +1 -1
  405. package/dist/tokens/index.d.ts +5 -373
  406. package/dist/tokens/index.d.ts.map +1 -1
  407. package/dist/tokens/index.js +8 -700
  408. package/dist/tokens/palette.d.ts +2 -6
  409. package/dist/tokens/palette.d.ts.map +1 -1
  410. package/dist/tokens/palette.js +1 -4
  411. package/dist/vite.d.ts +4 -3
  412. package/dist/vite.d.ts.map +1 -1
  413. package/llms.txt +43 -85
  414. package/package.json +77 -170
  415. package/src/agent/ai-sdk-transport.ts +57 -37
  416. package/src/{agent-chat → agent/chat}/composer.tsx +29 -30
  417. package/src/{agent-chat → agent/chat}/message-affordances.ts +8 -5
  418. package/src/{agent-chat → agent/chat}/thread-feed-row.tsx +30 -35
  419. package/src/{agent-chat → agent/chat}/thread-feed.tsx +40 -35
  420. package/src/{agent-chat → agent/chat}/thread-message.tsx +37 -35
  421. package/src/{agent-chat → agent/chat}/thread-outcome-card.tsx +5 -5
  422. package/src/{agent-chat → agent/chat}/tool-chip.tsx +12 -12
  423. package/src/{agent-chat → agent/chat}/use-keyboard-inset.ts +1 -1
  424. package/src/{agent-chat → agent/chat}/virtualize.ts +5 -5
  425. package/src/agent/error.ts +43 -0
  426. package/src/agent/foreign.ts +3 -2
  427. package/src/agent/history.ts +2 -107
  428. package/src/agent/id.ts +4 -5
  429. package/src/agent/index.ts +23 -112
  430. package/src/agent/outcome.ts +3 -56
  431. package/src/agent/part-list.tsx +3 -3
  432. package/src/agent/parts.ts +23 -22
  433. package/src/agent/run-committer.ts +64 -0
  434. package/src/agent/run-records.ts +147 -0
  435. package/src/agent/thread.ts +24 -231
  436. package/src/agent/transport.ts +6 -96
  437. package/src/agent/use-agent-thread-runs.ts +364 -199
  438. package/src/charts/BandStrip.tsx +276 -0
  439. package/src/charts/Bars.tsx +141 -0
  440. package/src/charts/CartesianChart.tsx +206 -0
  441. package/src/charts/ChartCard.tsx +178 -0
  442. package/src/charts/Donut.tsx +256 -0
  443. package/src/charts/DualPanel.tsx +326 -0
  444. package/src/charts/Heatmap.tsx +282 -0
  445. package/src/charts/Lines.tsx +151 -0
  446. package/src/charts/MirroredBars.tsx +303 -0
  447. package/src/charts/Sparkline.tsx +176 -0
  448. package/src/charts/StackedArea.tsx +80 -0
  449. package/src/charts/box.tsx +96 -0
  450. package/src/charts/card-context.ts +11 -0
  451. package/src/charts/chart-box.module.css +64 -0
  452. package/src/charts/chart-box.module.css.d.ts +12 -0
  453. package/src/charts/chart-card.module.css +25 -0
  454. package/src/charts/chart-card.module.css.d.ts +8 -0
  455. package/src/charts/chart-legend.module.css +38 -0
  456. package/src/charts/chart-legend.module.css.d.ts +10 -0
  457. package/src/charts/compile.ts +585 -0
  458. package/src/charts/cursor.ts +282 -0
  459. package/src/charts/curves.ts +111 -0
  460. package/src/charts/donut.module.css +54 -0
  461. package/src/charts/donut.module.css.d.ts +9 -0
  462. package/src/charts/host.tsx +60 -0
  463. package/src/charts/index.ts +41 -178
  464. package/src/charts/legend.tsx +204 -0
  465. package/src/charts/marks.ts +201 -0
  466. package/src/charts/panel.tsx +227 -0
  467. package/src/charts/scales.ts +237 -0
  468. package/src/charts/sizing.ts +47 -0
  469. package/src/charts/state.tsx +80 -0
  470. package/src/charts/theme.ts +65 -0
  471. package/src/charts/types.ts +242 -0
  472. package/src/cli/audit-allows.ts +8 -30
  473. package/src/cli/config.ts +14 -43
  474. package/src/cli/doctor-upgrade.ts +392 -0
  475. package/src/cli/doctor.ts +120 -68
  476. package/src/cli/help.ts +2 -4
  477. package/src/cli/index.ts +161 -276
  478. package/src/cli/init.ts +60 -37
  479. package/src/cli/sync.ts +13 -45
  480. package/src/cli/tokens-css.ts +7 -28
  481. package/src/commands/ShortcutsHelp.tsx +8 -9
  482. package/src/commands/define-commands.ts +16 -43
  483. package/src/commands/define-overlays.ts +12 -36
  484. package/src/commands/index.ts +11 -94
  485. package/src/{notifications → commands/notifications}/bell.tsx +2 -2
  486. package/src/{notifications → commands/notifications}/center.tsx +7 -5
  487. package/src/{notifications → commands/notifications}/define-notifications.ts +3 -3
  488. package/src/commands/notifications/notify.tsx +158 -0
  489. package/src/{notifications → commands/notifications}/store.ts +10 -2
  490. package/src/commands/projectors.ts +5 -225
  491. package/src/commands/shell-bridge.ts +5 -5
  492. package/src/commands/shortcut-format.ts +5 -4
  493. package/src/common/errors.ts +3 -3
  494. package/src/common/use-measured-widths.ts +6 -3
  495. package/src/common/validate.ts +2 -2
  496. package/src/content/article-layout.tsx +37 -38
  497. package/src/content/article-model.ts +1 -84
  498. package/src/content/copy-action.tsx +1 -1
  499. package/src/content/glyphs.tsx +1 -1
  500. package/src/content/index.ts +12 -83
  501. package/src/content/markdown.tsx +4 -3
  502. package/src/content/mermaid.tsx +9 -7
  503. package/src/content/slug.ts +1 -16
  504. package/src/content/url-hardening.ts +8 -2
  505. package/src/controls/actions.tsx +24 -1
  506. package/src/controls/enum-filter.tsx +1 -1
  507. package/src/controls/filter-context.tsx +3 -1
  508. package/src/controls/filter-set.tsx +5 -7
  509. package/src/controls/form-layout.tsx +2 -2
  510. package/src/controls/glyphs.tsx +0 -10
  511. package/src/controls/index.ts +13 -64
  512. package/src/controls/multi-select-filter.tsx +5 -4
  513. package/src/controls/number-filter.tsx +8 -4
  514. package/src/controls/range-filter.tsx +5 -4
  515. package/src/controls/search-filter.tsx +25 -19
  516. package/src/controls/select-filter.tsx +5 -4
  517. package/src/controls/sync-button.tsx +18 -20
  518. package/src/controls/toggle-filter.tsx +5 -4
  519. package/src/controls/uncontrolled.ts +12 -0
  520. package/src/controls/view-tabs.tsx +3 -3
  521. package/src/controls-dates/date-range-picker.tsx +1 -1
  522. package/src/controls-dates/index.ts +0 -1
  523. package/src/dashboard/index.ts +7 -48
  524. package/src/dashboard/section.tsx +11 -40
  525. package/src/dashboard/stat-card.tsx +14 -16
  526. package/src/dashboard/widget-header.module.css +9 -7
  527. package/src/dev-dock.tsx +14 -27
  528. package/src/format/date.ts +2 -92
  529. package/src/format/index.ts +7 -53
  530. package/src/format/number.ts +3 -26
  531. package/src/format/shared.ts +2 -3
  532. package/src/forms/index.ts +0 -23
  533. package/src/guard/index.ts +37 -192
  534. package/src/guard/types.ts +6 -19
  535. package/src/index.ts +30 -282
  536. package/src/provider/create-router.tsx +138 -0
  537. package/src/provider/hotkeys.ts +70 -0
  538. package/src/provider/index.tsx +260 -230
  539. package/src/provider/lab-theme.ts +3 -2
  540. package/src/provider/route-transition.ts +199 -0
  541. package/src/provider/spotlight-actions.tsx +69 -0
  542. package/src/provider/test-router.tsx +25 -0
  543. package/src/query-client.ts +4 -22
  544. package/src/router-tanstack/index.ts +18 -112
  545. package/src/router-tanstack/nav.ts +28 -2
  546. package/src/router-tanstack/search-store.ts +9 -2
  547. package/src/router-tanstack/use-nav.ts +47 -13
  548. package/src/shell/app-mobile-nav.tsx +3 -2
  549. package/src/shell/app-sidebar.tsx +1 -1
  550. package/src/shell/aside-docking.ts +1 -1
  551. package/src/shell/index.tsx +61 -20
  552. package/src/shell/page-aside.tsx +47 -23
  553. package/src/shell/page-bar.tsx +3 -3
  554. package/src/shell/page-title.tsx +1 -1
  555. package/src/state.ts +11 -37
  556. package/src/styles.css +107 -7
  557. package/src/surfaces.ts +56 -151
  558. package/src/{data → table}/data-table-state.ts +5 -4
  559. package/src/{data → table}/data-table.tsx +170 -161
  560. package/src/table/index.ts +18 -0
  561. package/src/table/table-features.ts +102 -0
  562. package/src/telemetry.ts +110 -0
  563. package/src/theme/index.ts +22 -47
  564. package/src/theme/theme-toggle.module.css +30 -0
  565. package/src/theme/theme-toggle.module.css.d.ts +10 -0
  566. package/src/theme/theme-toggle.tsx +15 -43
  567. package/src/theme-lab/derive-controls.tsx +5 -3
  568. package/src/theme-lab/derive-state.ts +2 -1
  569. package/src/tokens/core.ts +1163 -0
  570. package/src/tokens/derive.ts +1 -1
  571. package/src/tokens/index.ts +14 -1181
  572. package/src/tokens/palette.ts +3 -7
  573. package/src/vite.ts +3 -3
  574. package/agent/templates/CLAUDE-block.md.tpl +0 -40
  575. package/agent/templates/query-client.ts.tpl +0 -26
  576. package/dist/agent/adapter.d.ts +0 -150
  577. package/dist/agent/adapter.d.ts.map +0 -1
  578. package/dist/agent/adapter.js +0 -482
  579. package/dist/agent/use-agent-stream.d.ts +0 -35
  580. package/dist/agent/use-agent-stream.d.ts.map +0 -1
  581. package/dist/agent/use-agent-stream.js +0 -59
  582. package/dist/agent-chat/composer.d.ts.map +0 -1
  583. package/dist/agent-chat/index.d.ts +0 -31
  584. package/dist/agent-chat/index.d.ts.map +0 -1
  585. package/dist/agent-chat/index.js +0 -19
  586. package/dist/agent-chat/message-affordances.d.ts.map +0 -1
  587. package/dist/agent-chat/relative-time.d.ts.map +0 -1
  588. package/dist/agent-chat/thread-detail-panel.d.ts +0 -28
  589. package/dist/agent-chat/thread-detail-panel.d.ts.map +0 -1
  590. package/dist/agent-chat/thread-detail-panel.js +0 -115
  591. package/dist/agent-chat/thread-feed-row.d.ts.map +0 -1
  592. package/dist/agent-chat/thread-feed.d.ts.map +0 -1
  593. package/dist/agent-chat/thread-message.d.ts.map +0 -1
  594. package/dist/agent-chat/thread-outcome-card.d.ts.map +0 -1
  595. package/dist/agent-chat/thread-workspace.d.ts +0 -44
  596. package/dist/agent-chat/thread-workspace.d.ts.map +0 -1
  597. package/dist/agent-chat/thread-workspace.js +0 -153
  598. package/dist/agent-chat/tool-chip.d.ts.map +0 -1
  599. package/dist/agent-chat/use-keyboard-inset.d.ts.map +0 -1
  600. package/dist/agent-chat/virtualize.d.ts.map +0 -1
  601. package/dist/charts/cursor/resolve.d.ts +0 -75
  602. package/dist/charts/cursor/resolve.d.ts.map +0 -1
  603. package/dist/charts/cursor/resolve.js +0 -91
  604. package/dist/charts/cursor/scope.d.ts +0 -20
  605. package/dist/charts/cursor/scope.d.ts.map +0 -1
  606. package/dist/charts/cursor/scope.js +0 -20
  607. package/dist/charts/cursor/store.d.ts +0 -35
  608. package/dist/charts/cursor/store.d.ts.map +0 -1
  609. package/dist/charts/cursor/store.js +0 -25
  610. package/dist/charts/cursor/touch-pin.d.ts +0 -45
  611. package/dist/charts/cursor/touch-pin.d.ts.map +0 -1
  612. package/dist/charts/cursor/touch-pin.js +0 -79
  613. package/dist/charts/hooks/use-discrete-cursor.d.ts +0 -66
  614. package/dist/charts/hooks/use-discrete-cursor.d.ts.map +0 -1
  615. package/dist/charts/hooks/use-discrete-cursor.js +0 -198
  616. package/dist/charts/hooks/use-hysteresis.d.ts +0 -18
  617. package/dist/charts/hooks/use-hysteresis.d.ts.map +0 -1
  618. package/dist/charts/hooks/use-hysteresis.js +0 -12
  619. package/dist/charts/hooks/useBandPlot.d.ts +0 -145
  620. package/dist/charts/hooks/useBandPlot.d.ts.map +0 -1
  621. package/dist/charts/hooks/useBandPlot.js +0 -178
  622. package/dist/charts/hooks/useChartCursor.d.ts +0 -75
  623. package/dist/charts/hooks/useChartCursor.d.ts.map +0 -1
  624. package/dist/charts/hooks/useChartCursor.js +0 -200
  625. package/dist/charts/hooks/useChartSize.d.ts +0 -29
  626. package/dist/charts/hooks/useChartSize.d.ts.map +0 -1
  627. package/dist/charts/hooks/useChartSize.js +0 -8
  628. package/dist/charts/kinds/BandStrip.d.ts +0 -132
  629. package/dist/charts/kinds/BandStrip.d.ts.map +0 -1
  630. package/dist/charts/kinds/BandStrip.js +0 -241
  631. package/dist/charts/kinds/Bars.d.ts +0 -141
  632. package/dist/charts/kinds/Bars.d.ts.map +0 -1
  633. package/dist/charts/kinds/Bars.js +0 -343
  634. package/dist/charts/kinds/Donut.d.ts +0 -77
  635. package/dist/charts/kinds/Donut.d.ts.map +0 -1
  636. package/dist/charts/kinds/Donut.js +0 -245
  637. package/dist/charts/kinds/DualPanel.d.ts +0 -111
  638. package/dist/charts/kinds/DualPanel.d.ts.map +0 -1
  639. package/dist/charts/kinds/DualPanel.js +0 -471
  640. package/dist/charts/kinds/Heatmap.d.ts +0 -85
  641. package/dist/charts/kinds/Heatmap.d.ts.map +0 -1
  642. package/dist/charts/kinds/Heatmap.js +0 -243
  643. package/dist/charts/kinds/MirroredBars.d.ts +0 -98
  644. package/dist/charts/kinds/MirroredBars.d.ts.map +0 -1
  645. package/dist/charts/kinds/MirroredBars.js +0 -292
  646. package/dist/charts/kinds/MultiLine.d.ts +0 -87
  647. package/dist/charts/kinds/MultiLine.d.ts.map +0 -1
  648. package/dist/charts/kinds/MultiLine.js +0 -176
  649. package/dist/charts/kinds/StackedArea.d.ts +0 -73
  650. package/dist/charts/kinds/StackedArea.d.ts.map +0 -1
  651. package/dist/charts/kinds/StackedArea.js +0 -135
  652. package/dist/charts/kinds/ZonedLine.d.ts +0 -97
  653. package/dist/charts/kinds/ZonedLine.d.ts.map +0 -1
  654. package/dist/charts/kinds/ZonedLine.js +0 -155
  655. package/dist/charts/kinds/band-chrome.d.ts +0 -31
  656. package/dist/charts/kinds/band-chrome.d.ts.map +0 -1
  657. package/dist/charts/kinds/band-chrome.js +0 -71
  658. package/dist/charts/kinds/donut-layout.d.ts +0 -47
  659. package/dist/charts/kinds/donut-layout.d.ts.map +0 -1
  660. package/dist/charts/kinds/donut-layout.js +0 -52
  661. package/dist/charts/layout/auto-margin.d.ts +0 -122
  662. package/dist/charts/layout/auto-margin.d.ts.map +0 -1
  663. package/dist/charts/layout/auto-margin.js +0 -81
  664. package/dist/charts/layout/end-labels.d.ts +0 -64
  665. package/dist/charts/layout/end-labels.d.ts.map +0 -1
  666. package/dist/charts/layout/end-labels.js +0 -76
  667. package/dist/charts/layout/log-ticks.d.ts +0 -27
  668. package/dist/charts/layout/log-ticks.d.ts.map +0 -1
  669. package/dist/charts/layout/log-ticks.js +0 -42
  670. package/dist/charts/primitives/AreaGradient.d.ts +0 -18
  671. package/dist/charts/primitives/AreaGradient.d.ts.map +0 -1
  672. package/dist/charts/primitives/AreaGradient.js +0 -13
  673. package/dist/charts/primitives/Axes.d.ts +0 -83
  674. package/dist/charts/primitives/Axes.d.ts.map +0 -1
  675. package/dist/charts/primitives/Axes.js +0 -168
  676. package/dist/charts/primitives/CartesianChart.d.ts +0 -257
  677. package/dist/charts/primitives/CartesianChart.d.ts.map +0 -1
  678. package/dist/charts/primitives/CartesianChart.js +0 -549
  679. package/dist/charts/primitives/ChartCard.d.ts +0 -66
  680. package/dist/charts/primitives/ChartCard.d.ts.map +0 -1
  681. package/dist/charts/primitives/ChartCard.js +0 -143
  682. package/dist/charts/primitives/ChartFrame.d.ts +0 -156
  683. package/dist/charts/primitives/ChartFrame.d.ts.map +0 -1
  684. package/dist/charts/primitives/ChartFrame.js +0 -241
  685. package/dist/charts/primitives/ChartLegend.d.ts +0 -67
  686. package/dist/charts/primitives/ChartLegend.d.ts.map +0 -1
  687. package/dist/charts/primitives/ChartLegend.js +0 -292
  688. package/dist/charts/primitives/ChartPending.d.ts +0 -113
  689. package/dist/charts/primitives/ChartPending.d.ts.map +0 -1
  690. package/dist/charts/primitives/ChartPending.js +0 -117
  691. package/dist/charts/primitives/ChartTooltip.d.ts +0 -59
  692. package/dist/charts/primitives/ChartTooltip.d.ts.map +0 -1
  693. package/dist/charts/primitives/ChartTooltip.js +0 -197
  694. package/dist/charts/primitives/Crosshair.d.ts +0 -26
  695. package/dist/charts/primitives/Crosshair.d.ts.map +0 -1
  696. package/dist/charts/primitives/Crosshair.js +0 -23
  697. package/dist/charts/primitives/HatchPattern.d.ts +0 -31
  698. package/dist/charts/primitives/HatchPattern.d.ts.map +0 -1
  699. package/dist/charts/primitives/HatchPattern.js +0 -31
  700. package/dist/charts/primitives/HoverOverlay.d.ts +0 -45
  701. package/dist/charts/primitives/HoverOverlay.d.ts.map +0 -1
  702. package/dist/charts/primitives/HoverOverlay.js +0 -72
  703. package/dist/charts/primitives/HoverOverlay.module.css +0 -13
  704. package/dist/charts/primitives/HoverOverlay.module.css.d.ts +0 -8
  705. package/dist/charts/primitives/XZoneRects.d.ts +0 -54
  706. package/dist/charts/primitives/XZoneRects.d.ts.map +0 -1
  707. package/dist/charts/primitives/XZoneRects.js +0 -65
  708. package/dist/charts/primitives/ZoneRects.d.ts +0 -38
  709. package/dist/charts/primitives/ZoneRects.d.ts.map +0 -1
  710. package/dist/charts/primitives/ZoneRects.js +0 -30
  711. package/dist/charts/primitives/chart-card-context.d.ts +0 -33
  712. package/dist/charts/primitives/chart-card-context.d.ts.map +0 -1
  713. package/dist/charts/primitives/chart-card-context.js +0 -18
  714. package/dist/charts/primitives/chart-frame-layout.d.ts +0 -185
  715. package/dist/charts/primitives/chart-frame-layout.d.ts.map +0 -1
  716. package/dist/charts/primitives/chart-frame-layout.js +0 -175
  717. package/dist/charts/primitives/chart-layout.d.ts +0 -112
  718. package/dist/charts/primitives/chart-layout.d.ts.map +0 -1
  719. package/dist/charts/primitives/chart-layout.js +0 -175
  720. package/dist/charts/primitives/chart-tier.d.ts +0 -16
  721. package/dist/charts/primitives/chart-tier.d.ts.map +0 -1
  722. package/dist/charts/primitives/chart-tier.js +0 -44
  723. package/dist/charts/primitives/legend-disclosure.d.ts +0 -27
  724. package/dist/charts/primitives/legend-disclosure.d.ts.map +0 -1
  725. package/dist/charts/primitives/legend-disclosure.js +0 -153
  726. package/dist/charts/series.d.ts +0 -189
  727. package/dist/charts/series.d.ts.map +0 -1
  728. package/dist/charts/series.js +0 -84
  729. package/dist/charts/sparklines/BarSparkline.d.ts +0 -37
  730. package/dist/charts/sparklines/BarSparkline.d.ts.map +0 -1
  731. package/dist/charts/sparklines/BarSparkline.js +0 -53
  732. package/dist/charts/sparklines/LineSparkline.d.ts +0 -15
  733. package/dist/charts/sparklines/LineSparkline.d.ts.map +0 -1
  734. package/dist/charts/sparklines/LineSparkline.js +0 -51
  735. package/dist/charts/sparklines/index.d.ts +0 -3
  736. package/dist/charts/sparklines/index.d.ts.map +0 -1
  737. package/dist/charts/sparklines/index.js +0 -6
  738. package/dist/charts/utils/domain.d.ts +0 -35
  739. package/dist/charts/utils/domain.d.ts.map +0 -1
  740. package/dist/charts/utils/domain.js +0 -12
  741. package/dist/charts/utils/format.d.ts +0 -8
  742. package/dist/charts/utils/format.d.ts.map +0 -1
  743. package/dist/charts/utils/format.js +0 -20
  744. package/dist/charts/utils/measure-text.d.ts +0 -25
  745. package/dist/charts/utils/measure-text.d.ts.map +0 -1
  746. package/dist/charts/utils/measure-text.js +0 -64
  747. package/dist/charts/utils/ticks.d.ts +0 -103
  748. package/dist/charts/utils/ticks.d.ts.map +0 -1
  749. package/dist/charts/utils/ticks.js +0 -92
  750. package/dist/commands/overlays-mount.d.ts +0 -122
  751. package/dist/commands/overlays-mount.d.ts.map +0 -1
  752. package/dist/commands/overlays-mount.js +0 -125
  753. package/dist/commands/useCommandHotkeys.d.ts +0 -14
  754. package/dist/commands/useCommandHotkeys.d.ts.map +0 -1
  755. package/dist/commands/useCommandHotkeys.js +0 -45
  756. package/dist/content/article-actions.d.ts +0 -39
  757. package/dist/content/article-actions.d.ts.map +0 -1
  758. package/dist/content/article-actions.js +0 -28
  759. package/dist/content/article-card.d.ts +0 -58
  760. package/dist/content/article-card.d.ts.map +0 -1
  761. package/dist/content/article-card.js +0 -79
  762. package/dist/content/article-card.module.css +0 -111
  763. package/dist/content/mdx.d.ts +0 -20
  764. package/dist/content/mdx.d.ts.map +0 -1
  765. package/dist/content/mdx.js +0 -64
  766. package/dist/controls/compare-filter.d.ts +0 -42
  767. package/dist/controls/compare-filter.d.ts.map +0 -1
  768. package/dist/controls/compare-filter.js +0 -38
  769. package/dist/controls/slider-control.d.ts +0 -36
  770. package/dist/controls/slider-control.d.ts.map +0 -1
  771. package/dist/controls/slider-control.js +0 -64
  772. package/dist/dashboard/widget-grid.d.ts +0 -27
  773. package/dist/dashboard/widget-grid.d.ts.map +0 -1
  774. package/dist/dashboard/widget-grid.js +0 -40
  775. package/dist/dashboard/widget-grid.module.css +0 -69
  776. package/dist/data/data-table-state.d.ts.map +0 -1
  777. package/dist/data/data-table.d.ts.map +0 -1
  778. package/dist/data/query-branch.d.ts.map +0 -1
  779. package/dist/data/table.d.ts +0 -24
  780. package/dist/data/table.d.ts.map +0 -1
  781. package/dist/data/virtual-list.d.ts +0 -133
  782. package/dist/data/virtual-list.d.ts.map +0 -1
  783. package/dist/data/virtual-list.js +0 -157
  784. package/dist/data/virtual.d.ts +0 -21
  785. package/dist/data/virtual.d.ts.map +0 -1
  786. package/dist/data/virtual.js +0 -4
  787. package/dist/forms/FormErrorSummary.d.ts +0 -30
  788. package/dist/forms/FormErrorSummary.d.ts.map +0 -1
  789. package/dist/forms/FormErrorSummary.js +0 -30
  790. package/dist/forms/use-field-array.d.ts +0 -60
  791. package/dist/forms/use-field-array.d.ts.map +0 -1
  792. package/dist/forms/use-field-array.js +0 -20
  793. package/dist/forms/use-form-draft.d.ts +0 -76
  794. package/dist/forms/use-form-draft.d.ts.map +0 -1
  795. package/dist/forms/use-form-draft.js +0 -92
  796. package/dist/forms/use-form-submit.d.ts +0 -88
  797. package/dist/forms/use-form-submit.d.ts.map +0 -1
  798. package/dist/forms/use-form-submit.js +0 -63
  799. package/dist/notifications/bell.d.ts.map +0 -1
  800. package/dist/notifications/center.d.ts.map +0 -1
  801. package/dist/notifications/define-notifications.d.ts.map +0 -1
  802. package/dist/notifications/index.d.ts +0 -40
  803. package/dist/notifications/index.d.ts.map +0 -1
  804. package/dist/notifications/index.js +0 -54
  805. package/dist/notifications/mount-guard.d.ts +0 -8
  806. package/dist/notifications/mount-guard.d.ts.map +0 -1
  807. package/dist/notifications/mount-guard.js +0 -18
  808. package/dist/notifications/notify.d.ts +0 -149
  809. package/dist/notifications/notify.d.ts.map +0 -1
  810. package/dist/notifications/notify.js +0 -171
  811. package/dist/notifications/store.d.ts.map +0 -1
  812. package/dist/provider/connectivity-indicator.d.ts +0 -13
  813. package/dist/provider/connectivity-indicator.d.ts.map +0 -1
  814. package/dist/provider/connectivity-indicator.js +0 -205
  815. package/dist/provider/connectivity-provider.d.ts +0 -7
  816. package/dist/provider/connectivity-provider.d.ts.map +0 -1
  817. package/dist/provider/connectivity-provider.js +0 -128
  818. package/dist/provider/connectivity-types.d.ts +0 -36
  819. package/dist/provider/connectivity-types.d.ts.map +0 -1
  820. package/dist/provider/use-connectivity.d.ts +0 -3
  821. package/dist/provider/use-connectivity.d.ts.map +0 -1
  822. package/dist/provider/use-connectivity.js +0 -14
  823. package/dist/query-devtools.d.ts +0 -21
  824. package/dist/query-devtools.d.ts.map +0 -1
  825. package/dist/query-devtools.js +0 -13
  826. package/src/agent/adapter.ts +0 -945
  827. package/src/agent/use-agent-stream.ts +0 -154
  828. package/src/agent-chat/index.ts +0 -54
  829. package/src/agent-chat/thread-detail-panel.tsx +0 -201
  830. package/src/agent-chat/thread-workspace.tsx +0 -279
  831. package/src/charts/cursor/resolve.ts +0 -198
  832. package/src/charts/cursor/scope.tsx +0 -35
  833. package/src/charts/cursor/store.ts +0 -58
  834. package/src/charts/cursor/touch-pin.ts +0 -138
  835. package/src/charts/hooks/use-discrete-cursor.ts +0 -335
  836. package/src/charts/hooks/use-hysteresis.ts +0 -26
  837. package/src/charts/hooks/useBandPlot.ts +0 -383
  838. package/src/charts/hooks/useChartCursor.ts +0 -367
  839. package/src/charts/hooks/useChartSize.ts +0 -35
  840. package/src/charts/kinds/BandStrip.tsx +0 -449
  841. package/src/charts/kinds/Bars.tsx +0 -589
  842. package/src/charts/kinds/Donut.tsx +0 -368
  843. package/src/charts/kinds/DualPanel.tsx +0 -712
  844. package/src/charts/kinds/Heatmap.tsx +0 -396
  845. package/src/charts/kinds/MirroredBars.tsx +0 -469
  846. package/src/charts/kinds/MultiLine.tsx +0 -322
  847. package/src/charts/kinds/StackedArea.tsx +0 -267
  848. package/src/charts/kinds/ZonedLine.tsx +0 -301
  849. package/src/charts/kinds/band-chrome.tsx +0 -91
  850. package/src/charts/kinds/donut-layout.ts +0 -82
  851. package/src/charts/layout/auto-margin.ts +0 -242
  852. package/src/charts/layout/end-labels.ts +0 -135
  853. package/src/charts/layout/log-ticks.ts +0 -90
  854. package/src/charts/primitives/AreaGradient.tsx +0 -26
  855. package/src/charts/primitives/Axes.tsx +0 -271
  856. package/src/charts/primitives/CartesianChart.tsx +0 -1002
  857. package/src/charts/primitives/ChartCard.tsx +0 -280
  858. package/src/charts/primitives/ChartFrame.tsx +0 -493
  859. package/src/charts/primitives/ChartLegend.tsx +0 -422
  860. package/src/charts/primitives/ChartPending.tsx +0 -243
  861. package/src/charts/primitives/ChartTooltip.tsx +0 -265
  862. package/src/charts/primitives/Crosshair.tsx +0 -43
  863. package/src/charts/primitives/HatchPattern.tsx +0 -55
  864. package/src/charts/primitives/HoverOverlay.module.css +0 -13
  865. package/src/charts/primitives/HoverOverlay.module.css.d.ts +0 -8
  866. package/src/charts/primitives/HoverOverlay.tsx +0 -109
  867. package/src/charts/primitives/XZoneRects.tsx +0 -132
  868. package/src/charts/primitives/ZoneRects.tsx +0 -67
  869. package/src/charts/primitives/chart-card-context.ts +0 -46
  870. package/src/charts/primitives/chart-frame-layout.ts +0 -430
  871. package/src/charts/primitives/chart-layout.ts +0 -318
  872. package/src/charts/primitives/chart-tier.tsx +0 -76
  873. package/src/charts/primitives/legend-disclosure.tsx +0 -178
  874. package/src/charts/series.ts +0 -276
  875. package/src/charts/sparklines/BarSparkline.tsx +0 -94
  876. package/src/charts/sparklines/LineSparkline.tsx +0 -71
  877. package/src/charts/sparklines/index.ts +0 -2
  878. package/src/charts/theme.tsx +0 -53
  879. package/src/charts/utils/domain.ts +0 -41
  880. package/src/charts/utils/format.ts +0 -19
  881. package/src/charts/utils/measure-text.ts +0 -109
  882. package/src/charts/utils/ticks.ts +0 -239
  883. package/src/commands/overlays-mount.tsx +0 -333
  884. package/src/commands/useCommandHotkeys.ts +0 -114
  885. package/src/content/article-actions.ts +0 -72
  886. package/src/content/article-card.module.css +0 -111
  887. package/src/content/article-card.tsx +0 -174
  888. package/src/content/mdx.tsx +0 -127
  889. package/src/controls/compare-filter.tsx +0 -81
  890. package/src/controls/slider-control.tsx +0 -159
  891. package/src/dashboard/widget-grid.module.css +0 -69
  892. package/src/dashboard/widget-grid.tsx +0 -146
  893. package/src/data/table.ts +0 -39
  894. package/src/data/virtual-list.tsx +0 -356
  895. package/src/data/virtual.ts +0 -26
  896. package/src/forms/FormErrorSummary.tsx +0 -71
  897. package/src/forms/use-field-array.ts +0 -94
  898. package/src/forms/use-form-draft.ts +0 -262
  899. package/src/forms/use-form-submit.ts +0 -199
  900. package/src/notifications/index.ts +0 -88
  901. package/src/notifications/mount-guard.ts +0 -38
  902. package/src/notifications/notify.tsx +0 -379
  903. package/src/provider/connectivity-indicator.tsx +0 -267
  904. package/src/provider/connectivity-provider.tsx +0 -189
  905. package/src/provider/connectivity-types.ts +0 -42
  906. package/src/provider/use-connectivity.ts +0 -26
  907. package/src/query-devtools.tsx +0 -40
  908. /package/dist/{agent-chat → agent/chat}/message-affordances.js +0 -0
  909. /package/dist/{agent-chat → agent/chat}/relative-time.d.ts +0 -0
  910. /package/dist/{agent-chat → agent/chat}/relative-time.js +0 -0
  911. /package/dist/{agent-chat → agent/chat}/use-keyboard-inset.d.ts +0 -0
  912. /package/dist/{agent-chat → agent/chat}/virtualize.js +0 -0
  913. /package/dist/{notifications → commands/notifications}/bell.js +0 -0
  914. /package/dist/{notifications → commands/notifications}/define-notifications.js +0 -0
  915. /package/dist/{provider/connectivity-types.js → controls/uncontrolled.js} +0 -0
  916. /package/dist/{data → table}/data-table.module.css +0 -0
  917. /package/dist/{data → table}/data-table.module.css.d.ts +0 -0
  918. /package/dist/{data → table}/query-branch.d.ts +0 -0
  919. /package/dist/{data → table}/query-branch.js +0 -0
  920. /package/src/{agent-chat → agent/chat}/relative-time.ts +0 -0
  921. /package/src/{data → table}/data-table.module.css +0 -0
  922. /package/src/{data → table}/data-table.module.css.d.ts +0 -0
  923. /package/src/{data → table}/query-branch.ts +0 -0
@@ -44,6 +44,7 @@ import { useMemo } from 'react'
44
44
  import { useDeriveControlsState, toDeriveOverride } from '../theme-lab/derive-state'
45
45
  import type { DeriveOverride } from '../theme-lab/derive-state'
46
46
  import { baseTheme, createBasaltTheme } from '../theme'
47
+ import type { BasaltDensityLevel, BasaltRadiusLevel } from '../theme'
47
48
 
48
49
  type Plain = Record<string, unknown>
49
50
 
@@ -115,8 +116,8 @@ export function applyLabOverride(
115
116
  if (override === null) return theme
116
117
  const labTheme = createBasaltTheme(undefined, {
117
118
  derive: override.config,
118
- radius: override.radiusLevel,
119
- density: override.densityLevel,
119
+ radius: override.radiusLevel as BasaltRadiusLevel,
120
+ density: override.densityLevel as BasaltDensityLevel,
120
121
  })
121
122
  // An all-defaults override resolves back to `baseTheme` itself, so the delta is empty and this
122
123
  // merge is a no-op — the "Apply" switch on at level 0 changes nothing, as it should.
@@ -0,0 +1,199 @@
1
+ /**
2
+ * Route view transitions (V2-SPEC § 5): the direction of a navigation, read off `BasaltShell` nav
3
+ * order, plus the guard that keeps the router's discarded `ViewTransition` promises quiet.
4
+ *
5
+ * The router owns the call (`router-core` `startViewTransition`, router.js:490-508): it passes
6
+ * `{ update, types }` to `document.startViewTransition` when the browser supports
7
+ * `:active-view-transition-type()`, a bare callback otherwise, and returns only `updateCallbackDone`,
8
+ * so `ready` and `finished` are dropped on the floor.
9
+ */
10
+ import type { AnyRouter } from '@tanstack/react-router'
11
+ import { flattenNav, getActiveNav } from '../router-tanstack/nav'
12
+
13
+ /** The three `:active-view-transition-type()` names `styles.css` animates. Namespaced: a consumer's own cannot collide. */
14
+ export const ROUTE_TRANSITION_TYPES = {
15
+ forward: 'basalt-forward',
16
+ back: 'basalt-back',
17
+ sibling: 'basalt-sibling',
18
+ } as const
19
+
20
+ /** The argument of the router's `types` callback, derived from its own option type. */
21
+ type RouterLocationChange = Parameters<
22
+ Extract<
23
+ Extract<AnyRouter['options']['defaultViewTransition'], object>['types'],
24
+ (...args: never[]) => unknown
25
+ >
26
+ >[0]
27
+
28
+ /** The part of it the direction reads: two pathnames and whether the path changed. */
29
+ type LocationChange = Pick<RouterLocationChange, 'pathChanged'> & {
30
+ fromLocation?: Pick<NonNullable<RouterLocationChange['fromLocation']>, 'pathname'>
31
+ toLocation: Pick<RouterLocationChange['toLocation'], 'pathname'>
32
+ }
33
+
34
+ type ActiveNav = NonNullable<ReturnType<typeof getActiveNav>>
35
+ type NavItem = ReturnType<typeof flattenNav>[number]
36
+
37
+ const trimTrailingSlash = (path: string): string =>
38
+ path.length > 1 && path.endsWith('/') ? path.slice(0, -1) : path
39
+
40
+ const segmentsOf = (path: string): string[] => path.split('/').filter(Boolean)
41
+
42
+ /** A pattern segment: a path literal (case-insensitive), a given param value (case-sensitive), or a wildcard. */
43
+ type Part = { kind: 'literal' | 'value'; text: string } | { kind: 'param' | 'optional' | 'splat' }
44
+
45
+ /** `to` as parts, with the item's own `params` interpolated; the unspecified stay wildcards. */
46
+ function patternOf(item: NavItem): Part[] {
47
+ const params: unknown = item.link.params
48
+ const given = (typeof params === 'object' && params !== null ? params : {}) as Record<
49
+ string,
50
+ unknown
51
+ >
52
+ return segmentsOf(item.link.to).map((segment): Part => {
53
+ if (segment === '$') return { kind: 'splat' }
54
+ const param = /^\{?(-?)\$([\w-]+)\}?$/.exec(segment)
55
+ if (param === null) return { kind: 'literal', text: segment.toLowerCase() }
56
+ const value = given[param[2] ?? '']
57
+ if (value !== undefined) return { kind: 'value', text: String(value) }
58
+ return { kind: param[1] === '-' ? 'optional' : 'param' }
59
+ })
60
+ }
61
+
62
+ /** The path, once: each segment as written and lower-cased. */
63
+ type PathSegment = { raw: string; lower: string }
64
+
65
+ function matchParts(parts: Part[], path: PathSegment[], at: number, fuzzy: boolean): boolean {
66
+ const [part, ...rest] = parts
67
+ if (part === undefined) return fuzzy || at === path.length
68
+ if (part.kind === 'splat') return true
69
+ if (part.kind === 'optional' && matchParts(rest, path, at, fuzzy)) return true
70
+ const actual = path[at]
71
+ if (actual === undefined) return false
72
+ if (part.kind === 'literal' && part.text !== actual.lower) return false
73
+ if (part.kind === 'value' && part.text !== actual.raw) return false
74
+ return matchParts(rest, path, at + 1, fuzzy)
75
+ }
76
+
77
+ /**
78
+ * Whether the path is on `item`: the sidebar's rule (`use-nav.ts` `matchOf`: `matchRoute` with
79
+ * `fuzzy: exact !== true && to !== '/'`, the item's `params` applied, case-insensitive) as a pure
80
+ * string match, because the router's own matcher only answers for its current location.
81
+ */
82
+ function onItem(item: NavItem, path: PathSegment[]): boolean {
83
+ const fuzzy = item.exact !== true && item.link.to !== '/'
84
+ return matchParts(patternOf(item), path, 0, fuzzy)
85
+ }
86
+
87
+ /**
88
+ * The flattened-nav index of the item that owns `pathname`, picked as the sidebar picks its active
89
+ * item: of the matches, the most specific (most non-empty segments in `link.to`) wins and the first
90
+ * in definition order takes a tie. `-1` when nothing matches.
91
+ *
92
+ * @internal exported for the corpus test against the router's real `matchRoute`.
93
+ */
94
+ export function navIndexOf(flat: ReadonlyArray<NavItem>, pathname: string): number {
95
+ const path = segmentsOf(trimTrailingSlash(pathname)).map((raw) => ({
96
+ raw,
97
+ lower: raw.toLowerCase(),
98
+ }))
99
+ let winner = -1
100
+ let winnerSpecificity = -1
101
+ for (const [index, item] of flat.entries()) {
102
+ const specificity = segmentsOf(item.link.to).length
103
+ if (specificity > winnerSpecificity && onItem(item, path)) {
104
+ winner = index
105
+ winnerSpecificity = specificity
106
+ }
107
+ }
108
+ return winner
109
+ }
110
+
111
+ /**
112
+ * The `types` callback for the router's `defaultViewTransition`. Pure: the nav is a parameter.
113
+ *
114
+ * - No `fromLocation`: the first load. The router also runs it through `startViewTransition`
115
+ * (load-client.js:916), but there is no previous page to animate from, so `false`.
116
+ * - Same path (search or hash only): `false`, the page does not change.
117
+ * - A later nav item than the one you left: `forward`; an earlier one: `back`.
118
+ * - Same item (a detail beneath it), or either side outside the nav: `sibling`, a plain crossfade.
119
+ */
120
+ export function routeTransitionTypes(
121
+ { fromLocation, toLocation, pathChanged }: LocationChange,
122
+ nav: ActiveNav | undefined,
123
+ ): string[] | false {
124
+ if (!fromLocation || !pathChanged) return false
125
+ const flat = nav ? flattenNav(nav) : []
126
+ const fromIndex = navIndexOf(flat, fromLocation.pathname)
127
+ const toIndex = navIndexOf(flat, toLocation.pathname)
128
+ if (fromIndex === -1 || toIndex === -1 || fromIndex === toIndex)
129
+ return [ROUTE_TRANSITION_TYPES.sibling]
130
+ return [toIndex > fromIndex ? ROUTE_TRANSITION_TYPES.forward : ROUTE_TRANSITION_TYPES.back]
131
+ }
132
+
133
+ /**
134
+ * The router's own gate for passing `types` (router.js:495): without it the callback is never
135
+ * called and every navigation, first load and filter changes included, gets the UA's full-page
136
+ * crossfade. So below this support line there is no route transition at all. Server: none.
137
+ */
138
+ export function supportsViewTransitionTypes(): boolean {
139
+ if (typeof window === 'undefined') return false
140
+ const css: { supports?: (condition: string) => boolean } | undefined = window.CSS
141
+ return css?.supports?.('selector(:active-view-transition-type(a))') === true
142
+ }
143
+
144
+ /** What `createBasaltRouter` hands the router as `defaultViewTransition`. */
145
+ export const routeViewTransition = {
146
+ types: (change: LocationChange) => routeTransitionTypes(change, getActiveNav()),
147
+ }
148
+
149
+ // ── rejection guard ──────────────────────────────────────────────────────────────────────────────
150
+
151
+ /** The three ways a transition ends early: superseded (`AbortError`), document hidden/detached, timed out. */
152
+ const SKIP_NAMES = new Set(['AbortError', 'InvalidStateError', 'TimeoutError'])
153
+
154
+ const isTransitionSkip = (reason: unknown): boolean =>
155
+ reason instanceof DOMException && SKIP_NAMES.has(reason.name)
156
+
157
+ /** Hands a non-skip to the page's error handlers once (`window` `error`, which `BasaltProvider` forwards). */
158
+ const reportOnce = (reason: unknown): void => {
159
+ if (isTransitionSkip(reason)) return
160
+ if (typeof reportError === 'function') reportError(reason)
161
+ }
162
+
163
+ /** `finished` repeats whatever `ready` or `updateCallbackDone` already reported; never report it twice. */
164
+ const ignore = (): void => {}
165
+
166
+ const guarded = new WeakSet<object>()
167
+
168
+ /**
169
+ * Attaches a catch to `ready` and `finished` of every `document.startViewTransition` call, once per
170
+ * installed function (idempotent across routers). Router-core drops both (it returns only
171
+ * `updateCallbackDone`), and a superseded transition rejects them with `AbortError: Transition was
172
+ * skipped` (router discussion #7733), which `window` `unhandledrejection` — and so basalt's
173
+ * telemetry sink — would report.
174
+ *
175
+ * - `ready`: a skip is swallowed; any other reason goes to `reportError`, so it surfaces once, there
176
+ * (a throwing handler would create a second, unowned rejection).
177
+ * - `finished`: always swallowed. A non-skip reason is the update callback's error, which `ready`
178
+ * (and, for the router, its own `await updateCallbackDone`) already carries.
179
+ * - `updateCallbackDone` is left alone: the router awaits it, and a catch here would re-raise a
180
+ * real error from a derived promise nobody owns.
181
+ *
182
+ * Chosen over an `unhandledrejection` filter because it removes the rejection at its source: it
183
+ * never becomes unhandled, so no listener (basalt's, a consumer's, devtools) sees it, and
184
+ * `preventDefault()` on a shared event would hide real rejections from the others. The wrapper
185
+ * returns the original `ViewTransition`. A no-op where the API is absent, and on the server.
186
+ */
187
+ export function guardViewTransitionRejections(): void {
188
+ if (typeof document === 'undefined' || typeof document.startViewTransition !== 'function') return
189
+ if (guarded.has(document.startViewTransition)) return
190
+ const original = document.startViewTransition.bind(document)
191
+ const wrapped: Document['startViewTransition'] = (...args) => {
192
+ const transition = original(...args)
193
+ transition.ready.catch(reportOnce)
194
+ transition.finished.catch(ignore)
195
+ return transition
196
+ }
197
+ guarded.add(wrapped)
198
+ document.startViewTransition = wrapped
199
+ }
@@ -0,0 +1,69 @@
1
+ /**
2
+ * The provider's Spotlight list: the `defineCommands` registry, then the `defineNav` destinations
3
+ * (via `flattenNav`), then the three dev-dock commands in dev. A snapshot rebuilt each time Spotlight
4
+ * opens, so a command's `when()` is current. Not for use during render (`detectMac` reads `navigator`).
5
+ */
6
+ import type { SpotlightActionData } from '@mantine/spotlight'
7
+ import type { AnyRouter } from '@tanstack/react-router'
8
+ import { getActiveCommands } from '../commands/define-commands'
9
+ import { detectMac, formatShortcutDisplay } from '../commands/shortcut-format'
10
+ import { flattenNav, getActiveNav } from '../router-tanstack/nav'
11
+ import type { BasaltDevDockTool } from '../dev-dock'
12
+ import { runCommandSafely } from './hotkeys'
13
+
14
+ const DEV_TOOLS: ReadonlyArray<{ tool: BasaltDevDockTool; label: string }> = [
15
+ { tool: 'router', label: 'Router devtools' },
16
+ { tool: 'query', label: 'Query devtools' },
17
+ { tool: 'theme', label: 'Theme lab' },
18
+ ]
19
+
20
+ export function buildSpotlightActions(
21
+ router: AnyRouter,
22
+ openDevTool: (tool: BasaltDevDockTool) => void,
23
+ ): SpotlightActionData[] {
24
+ const actions: SpotlightActionData[] = []
25
+
26
+ for (const [id, cmd] of Object.entries(getActiveCommands())) {
27
+ if (cmd.when !== undefined && !cmd.when()) continue
28
+ actions.push({
29
+ id,
30
+ label: cmd.label,
31
+ leftSection: cmd.icon,
32
+ keywords: [cmd.group ?? '', id].join(' ').trim(),
33
+ ...(cmd.group !== undefined && { group: cmd.group }),
34
+ ...(cmd.shortcut !== undefined && {
35
+ description: formatShortcutDisplay(cmd.shortcut, detectMac()),
36
+ }),
37
+ onClick: () => runCommandSafely(cmd),
38
+ })
39
+ }
40
+
41
+ const nav = getActiveNav()
42
+ if (nav !== undefined) {
43
+ for (const item of flattenNav(nav)) {
44
+ if (item.disabled === true) continue
45
+ actions.push({
46
+ id: `nav.${item.id}`,
47
+ label: item.label,
48
+ group: item.groupLabel,
49
+ leftSection: item.icon,
50
+ // `link` is the destination's own `linkOptions`, so a store-backed `search` thunk restores
51
+ // the last selection exactly as the sidebar link does.
52
+ onClick: () => void router.navigate(item.link as never),
53
+ })
54
+ }
55
+ }
56
+
57
+ if (process.env.NODE_ENV !== 'production') {
58
+ for (const { tool, label } of DEV_TOOLS) {
59
+ actions.push({
60
+ id: `dev.${tool}`,
61
+ label,
62
+ group: 'Dev',
63
+ onClick: () => openDevTool(tool),
64
+ })
65
+ }
66
+ }
67
+
68
+ return actions
69
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Test helper — a real `createBasaltRouter` over a one-component root route plus an `/other` leaf,
3
+ * so provider tests mount the actual tree (QueryClient in context, RouterProvider, overlays).
4
+ */
5
+ import { Outlet, createRootRoute, createRoute } from '@tanstack/react-router'
6
+ import type { AnyRouter } from '@tanstack/react-router'
7
+ import { createBasaltRouter } from './create-router'
8
+ import type { BasaltRouterContext } from './create-router'
9
+
10
+ /** The router's QueryClient — a plain root route declares no context type, so read it untyped. */
11
+ export const queryClientOf = (router: AnyRouter): BasaltRouterContext['queryClient'] =>
12
+ (router.options.context as BasaltRouterContext).queryClient
13
+
14
+ export function testRouter(text = 'content') {
15
+ const root = createRootRoute({
16
+ component: () => (
17
+ <>
18
+ <div>{text}</div>
19
+ <Outlet />
20
+ </>
21
+ ),
22
+ })
23
+ const other = createRoute({ getParentRoute: () => root, path: '/other', component: () => null })
24
+ return createBasaltRouter({ routeTree: root.addChildren([other]) })
25
+ }
@@ -1,15 +1,10 @@
1
1
  /**
2
- * `createBasaltQueryClient` + `unwrap` — the two TanStack Query primitives basalt ships. Folded
3
- * onto the root barrel (C1 consolidation, dropping the `./query` subpath): the root already
4
- * requires `@tanstack/react-query` as a peer, so a dedicated Mantine-free subpath bought nothing —
5
- * and it re-exported 10 raw TanStack symbols no consumer imported through it.
6
- * Optional peer: @tanstack/react-query.
2
+ * `unwrap` plus the QueryClient factory `createBasaltRouter` owns (V2-SPEC § 2): one client per
3
+ * router, so an SSR entry gets one per request. Optional peer: @tanstack/react-query.
7
4
  */
8
5
  import { QueryClient } from '@tanstack/react-query'
9
6
  import type { QueryClientConfig } from '@tanstack/react-query'
10
7
 
11
- // ── createBasaltQueryClient ───────────────────────────────────────────────────────────────────────
12
-
13
8
  const BASALT_QUERY_DEFAULTS = {
14
9
  staleTime: 30_000,
15
10
  gcTime: 5 * 60 * 1000,
@@ -17,21 +12,8 @@ const BASALT_QUERY_DEFAULTS = {
17
12
  refetchOnWindowFocus: false,
18
13
  } as const
19
14
 
20
- /**
21
- * Wraps QueryClient with basalt dashboard defaults. All options are mergeable — consumer
22
- * overrides win per-query, framework defaults are the fallback.
23
- *
24
- * @example
25
- * import { createBasaltQueryClient } from 'basalt-ui'
26
- * import { QueryClientProvider } from '@tanstack/react-query'
27
- * import { useState } from 'react'
28
- *
29
- * function Root({ children }: { children: React.ReactNode }) {
30
- * const [client] = useState(() => createBasaltQueryClient())
31
- * return <QueryClientProvider client={client}>{children}</QueryClientProvider>
32
- * }
33
- */
34
- export function createBasaltQueryClient(config?: QueryClientConfig): QueryClient {
15
+ /** QueryClient with the basalt dashboard defaults; consumer `config` wins per-query. */
16
+ export function makeQueryClient(config?: QueryClientConfig): QueryClient {
35
17
  return new QueryClient({
36
18
  ...config,
37
19
  defaultOptions: {
@@ -1,62 +1,21 @@
1
1
  /**
2
- * ./router-tanstack — headless TanStack Router bridge for the app shell.
3
- * Optional peer: @tanstack/react-router.
4
- * Carries the typed navigation definition (`defineNav`/`navGroup`/`navTarget`/`flattenNav`) and
5
- * `useNav`, which resolves it into `BasaltShell`'s `sections` + `mobileNav` props; plus the
6
- * StaticDataRouteOption augmentation (title/icon/navSection) for router-derived breadcrumbs, plus
7
- * `createSearchStore` + the `field.*` vocabulary — no Mantine, no JSX.
2
+ * ./router-tanstack — headless TanStack Router bridge. The nav half (`defineNav`, `navGroup`,
3
+ * `navTarget`, `flattenNav`, `useBasaltNav`, `NavItemId`) moves to the root barrel in 2.0 and the
4
+ * store half (`createSearchStore`) to `./state`, which re-exports it from `./search-store` directly.
5
+ * The shell's active-state resolver lives in `use-nav.ts` and is not a public export.
6
+ * Optional peer: @tanstack/react-router. No Mantine, no JSX.
8
7
  */
8
+ import type { ReactNode } from 'react'
9
+ import { useLocation } from '@tanstack/react-router'
9
10
 
10
- export { createSearchStore, type CreateSearchStoreOptions, type SearchStore } from './search-store'
11
- export { field } from '../state'
12
- export type {
13
- AnyField,
14
- BooleanField,
15
- EnumField,
16
- FieldFallback,
17
- FieldHandle,
18
- FieldLane,
19
- FieldOption,
20
- FieldSetOptions,
21
- FieldValue,
22
- MultiField,
23
- NumberField,
24
- RangeField,
25
- RangeParams,
26
- RangePresets,
27
- RangeValue,
28
- RangeWindow,
29
- RangeWindows,
30
- ResolvedLane,
31
- SearchValues,
32
- StoredValues,
33
- StringField,
34
- } from '../state'
35
11
  export { defineNav, navGroup, navTarget, flattenNav } from './nav'
36
- export type {
37
- NavItemMeta,
38
- NavGroupMeta,
39
- AnyNavItem,
40
- AnyNavGroup,
41
- AnyNavLink,
42
- FlatNavItem,
43
- NavConfig,
44
- NavItemId,
45
- NavGroupId,
46
- NavTabId,
47
- NavIndex,
48
- } from './nav'
49
- export { useNav } from './use-nav'
50
- export type { UseNavOptions, NavBinding } from './use-nav'
51
- export type { NavAnchor, NavAnchorProps, NavMobilePlacement } from '../shell/nav-types'
52
- import type { ReactNode } from 'react'
53
- import { useLocation, useMatches } from '@tanstack/react-router'
12
+ export type { NavItemId } from './nav'
54
13
 
55
14
  // ── StaticDataRouteOption augmentation ───────────────────────────────────────────────────────────
56
15
 
57
16
  declare module '@tanstack/react-router' {
58
17
  interface StaticDataRouteOption {
59
- /** Page/section title — drives breadcrumbs via useRouterBreadcrumbs(). */
18
+ /** Page/section title. */
60
19
  title?: string
61
20
  /** Nav icon — ReactNode passed through to the shell SidebarItem. */
62
21
  icon?: ReactNode
@@ -67,33 +26,19 @@ declare module '@tanstack/react-router' {
67
26
 
68
27
  // ── useBasaltNav ──────────────────────────────────────────────────────────────────────────────────
69
28
 
70
- /** Reactive nav-active state derived from the current TanStack Router location. */
71
- export type BasaltNav = {
72
- /** Current pathname (reactive, updates on every navigation). */
73
- currentPath: string
74
- /**
75
- * True when `href` matches the current route.
76
- * Default: prefix match so a parent nav item stays active on child routes.
77
- * Pass `{ exact: true }` for exact-only matching.
78
- * The root `'/'` always matches exactly regardless of the option.
79
- */
80
- isActive: (href: string, opts?: { exact?: boolean }) => boolean
81
- }
82
-
83
29
  /**
84
- * Returns the current path and an `isActive` predicate for nav highlighting.
85
- * Reads only `useLocation` — no navigate, no typed-route `to` casts.
86
- * Navigation stays with TanStack's own typed `<Link>` / `useNavigate`.
30
+ * The current path and an `isActive` predicate for nav highlighting. `isActive(href)` is a prefix
31
+ * match so a parent stays active on child routes; `{ exact: true }` matches exactly, and `'/'` is
32
+ * always exact. Reads only `useLocation` — navigation stays with TanStack's own `<Link>`.
87
33
  *
88
34
  * @example
89
- * import { useBasaltNav } from 'basalt-ui/router-tanstack'
90
- *
91
- * function NavItem({ href, label }: { href: string; label: string }) {
92
- * const { isActive } = useBasaltNav()
93
- * return <NavLink href={href} active={isActive(href)}>{label}</NavLink>
94
- * }
35
+ * const { isActive } = useBasaltNav()
36
+ * <NavLink href={href} active={isActive(href)}>{label}</NavLink>
95
37
  */
96
- export function useBasaltNav(): BasaltNav {
38
+ export function useBasaltNav(): {
39
+ currentPath: string
40
+ isActive: (href: string, opts?: { exact?: boolean }) => boolean
41
+ } {
97
42
  const currentPath = useLocation({ select: (l) => l.pathname })
98
43
 
99
44
  const isActive = (href: string, opts?: { exact?: boolean }): boolean => {
@@ -104,42 +49,3 @@ export function useBasaltNav(): BasaltNav {
104
49
 
105
50
  return { currentPath, isActive }
106
51
  }
107
-
108
- // ── useRouterBreadcrumbs ──────────────────────────────────────────────────────────────────────────
109
-
110
- /** A single breadcrumb entry projected from route staticData. */
111
- export type BasaltBreadcrumb = {
112
- /** The route's `staticData.title`. */
113
- title: string
114
- /** The matched pathname for this ancestor (usable as `<Link to={href}>` target). */
115
- href: string
116
- }
117
-
118
- /**
119
- * Returns the ancestor→deepest breadcrumb trail derived from `staticData.title` on each match.
120
- * Routes without a `staticData.title` are silently omitted.
121
- * Uses the `select` form of `useMatches` for re-render gating — only re-renders when the
122
- * projected breadcrumb array actually changes shape.
123
- *
124
- * @example
125
- * import { useRouterBreadcrumbs } from 'basalt-ui/router-tanstack'
126
- *
127
- * function AppBreadcrumbs() {
128
- * const crumbs = useRouterBreadcrumbs()
129
- * return (
130
- * <nav aria-label="breadcrumb">
131
- * {crumbs.map((c) => <a key={c.href} href={c.href}>{c.title}</a>)}
132
- * </nav>
133
- * )
134
- * }
135
- */
136
- export function useRouterBreadcrumbs(): BasaltBreadcrumb[] {
137
- return useMatches({
138
- select: (matches) =>
139
- matches.flatMap((m) =>
140
- typeof m.staticData?.title === 'string'
141
- ? [{ title: m.staticData.title, href: m.pathname }]
142
- : [],
143
- ),
144
- })
145
- }
@@ -11,6 +11,7 @@
11
11
  *
12
12
  * No JSX and no Mantine in this module — `./router-tanstack` is a headless barrel by contract.
13
13
  */
14
+ import type { RegisteredRouter } from '@tanstack/react-router'
14
15
  import type { ReactNode } from 'react'
15
16
  import type { NavMobilePlacement, NavSectionMobile } from '../shell/nav-types'
16
17
 
@@ -154,8 +155,33 @@ export function navGroup<const M extends NavGroupMeta, const T extends ReadonlyA
154
155
  export function defineNav<
155
156
  const G extends ReadonlyArray<AnyNavGroup>,
156
157
  const T extends ReadonlyArray<NavTabId<G>>,
157
- >(config: NavConfig<G, T>): NavConfig<G, T> {
158
- return config
158
+ >(config: RegisteredOr<NavConfig<G, T>>): NavConfig<G, T> {
159
+ const nav = config as unknown as NavConfig<G, T>
160
+ activeNav = nav
161
+ return nav
162
+ }
163
+
164
+ /**
165
+ * Without the `Register` augmentation `RegisteredRouter` is `AnyRouter`, every `to` widens to
166
+ * `string` and the definition validates nothing — so the parameter becomes an unsatisfiable string
167
+ * literal whose text is the fix (V2-SPEC § 3).
168
+ */
169
+ type RegisteredOr<T> = 0 extends 1 & RegisteredRouter['routeTree']
170
+ ? 'basalt: declare Register { router }'
171
+ : T
172
+
173
+ /**
174
+ * The runtime stash `defineNav` fills (the last call wins, like `defineCommands`), read by
175
+ * `BasaltProvider` to project the nav into Spotlight. Type augmentation is erased, so this is the
176
+ * live source.
177
+ *
178
+ * @internal
179
+ */
180
+ let activeNav: { groups: ReadonlyArray<AnyNavGroup> } | undefined
181
+
182
+ /** @internal */
183
+ export function getActiveNav(): { groups: ReadonlyArray<AnyNavGroup> } | undefined {
184
+ return activeNav
159
185
  }
160
186
 
161
187
  // ── readers ──────────────────────────────────────────────────────────────────────────────────────
@@ -31,8 +31,15 @@
31
31
  */
32
32
  import { useNavigate, useSearch } from '@tanstack/react-router'
33
33
  import { createStoreCore } from '../state/fields'
34
- import type { FieldWrite, StoreEntry } from '../state/fields'
35
- import type { AnyField, FieldHandle, FieldSetOptions, SearchValues, StoredValues } from '../state'
34
+ import type {
35
+ AnyField,
36
+ FieldHandle,
37
+ FieldSetOptions,
38
+ FieldWrite,
39
+ SearchValues,
40
+ StoreEntry,
41
+ StoredValues,
42
+ } from '../state/fields'
36
43
 
37
44
  // ── Types ──────────────────────────────────────────────────────────────────
38
45