@marktiderman/genesis-ui 1.3.0 → 2.1.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 (297) hide show
  1. package/LICENSE +21 -0
  2. package/dist/AppShell-sQT0UbXg.d.ts +198 -0
  3. package/dist/{chunk-NJMO3VPA.js → chunk-22XB3Q6H.js} +8 -8
  4. package/dist/chunk-22XB3Q6H.js.map +1 -0
  5. package/dist/{chunk-2MXMWBDV.js → chunk-27ELYTGE.js} +6 -6
  6. package/dist/chunk-27ELYTGE.js.map +1 -0
  7. package/dist/chunk-46TZGMFW.js +159 -0
  8. package/dist/chunk-46TZGMFW.js.map +1 -0
  9. package/dist/chunk-4CQHPWJD.js +117 -0
  10. package/dist/chunk-4CQHPWJD.js.map +1 -0
  11. package/dist/{chunk-ZDAT5JDH.js → chunk-65SPT7EA.js} +24 -6
  12. package/dist/chunk-65SPT7EA.js.map +1 -0
  13. package/dist/chunk-6KHY647C.js +67 -0
  14. package/dist/chunk-6KHY647C.js.map +1 -0
  15. package/dist/chunk-6M4NHHKG.js +51 -0
  16. package/dist/chunk-6M4NHHKG.js.map +1 -0
  17. package/dist/chunk-6Q6CLLJ4.js +9 -0
  18. package/dist/chunk-6Q6CLLJ4.js.map +1 -0
  19. package/dist/{chunk-UGHQFQOE.js → chunk-6TVMQH6M.js} +28 -28
  20. package/dist/chunk-6TVMQH6M.js.map +1 -0
  21. package/dist/{chunk-6VVVGYKS.js → chunk-6XPMU65K.js} +5 -5
  22. package/dist/{chunk-6VVVGYKS.js.map → chunk-6XPMU65K.js.map} +1 -1
  23. package/dist/{chunk-YZEA5TGK.js → chunk-7XMZVISM.js} +16 -16
  24. package/dist/chunk-7XMZVISM.js.map +1 -0
  25. package/dist/chunk-A7AHVDG7.js +52 -0
  26. package/dist/chunk-A7AHVDG7.js.map +1 -0
  27. package/dist/chunk-AFZ76Q26.js +84 -0
  28. package/dist/chunk-AFZ76Q26.js.map +1 -0
  29. package/dist/{chunk-4V4H2ZM7.js → chunk-AL5TMEZQ.js} +31 -31
  30. package/dist/chunk-AL5TMEZQ.js.map +1 -0
  31. package/dist/{chunk-AUECDWP2.js → chunk-AOZGQM6W.js} +3 -3
  32. package/dist/chunk-AOZGQM6W.js.map +1 -0
  33. package/dist/chunk-ARJI2JUV.js +122 -0
  34. package/dist/chunk-ARJI2JUV.js.map +1 -0
  35. package/dist/chunk-AVFZ4P4B.js +25 -0
  36. package/dist/chunk-AVFZ4P4B.js.map +1 -0
  37. package/dist/chunk-B2GIBUQD.js +11 -0
  38. package/dist/chunk-B2GIBUQD.js.map +1 -0
  39. package/dist/{chunk-JXI2MYL3.js → chunk-C46ITXE4.js} +5 -5
  40. package/dist/chunk-C46ITXE4.js.map +1 -0
  41. package/dist/{chunk-A2OXCNNY.js → chunk-CNTWQSUT.js} +3 -3
  42. package/dist/{chunk-A2OXCNNY.js.map → chunk-CNTWQSUT.js.map} +1 -1
  43. package/dist/chunk-D2LIXA2Y.js +65 -0
  44. package/dist/chunk-D2LIXA2Y.js.map +1 -0
  45. package/dist/{chunk-T5VX5DYO.js → chunk-F47U5KNW.js} +5 -5
  46. package/dist/chunk-F47U5KNW.js.map +1 -0
  47. package/dist/chunk-FEJAZFP3.js +1100 -0
  48. package/dist/chunk-FEJAZFP3.js.map +1 -0
  49. package/dist/{chunk-2B3MFHBQ.js → chunk-FK42ZGGV.js} +21 -21
  50. package/dist/chunk-FK42ZGGV.js.map +1 -0
  51. package/dist/{chunk-XISSLIMH.js → chunk-FTTNGGLA.js} +2 -2
  52. package/dist/{chunk-XISSLIMH.js.map → chunk-FTTNGGLA.js.map} +1 -1
  53. package/dist/chunk-G5YKBPBF.js +74 -0
  54. package/dist/chunk-G5YKBPBF.js.map +1 -0
  55. package/dist/{chunk-QLCDAFS7.js → chunk-GDFNAHI4.js} +10 -6
  56. package/dist/chunk-GDFNAHI4.js.map +1 -0
  57. package/dist/{chunk-KB5T5LWM.js → chunk-IJCT5IJD.js} +3 -3
  58. package/dist/{chunk-KB5T5LWM.js.map → chunk-IJCT5IJD.js.map} +1 -1
  59. package/dist/{chunk-44TULYGG.js → chunk-J6FBA7PH.js} +3 -3
  60. package/dist/{chunk-44TULYGG.js.map → chunk-J6FBA7PH.js.map} +1 -1
  61. package/dist/chunk-JAMLFMDS.js +12 -0
  62. package/dist/chunk-JAMLFMDS.js.map +1 -0
  63. package/dist/{chunk-C6H7AMO4.js → chunk-LNFF2RBD.js} +9 -9
  64. package/dist/chunk-LNFF2RBD.js.map +1 -0
  65. package/dist/{chunk-QBZMY2AF.js → chunk-M62CHO3N.js} +18 -18
  66. package/dist/chunk-M62CHO3N.js.map +1 -0
  67. package/dist/{chunk-5Q4FABZQ.js → chunk-NUXW6NPP.js} +8 -8
  68. package/dist/chunk-NUXW6NPP.js.map +1 -0
  69. package/dist/{chunk-ZJFSZFPI.js → chunk-NWSCYLPT.js} +77 -18
  70. package/dist/chunk-NWSCYLPT.js.map +1 -0
  71. package/dist/{chunk-63FW5ZUA.js → chunk-P3ZL6FGR.js} +7 -7
  72. package/dist/chunk-P3ZL6FGR.js.map +1 -0
  73. package/dist/chunk-P64MFQXZ.js +191 -0
  74. package/dist/chunk-P64MFQXZ.js.map +1 -0
  75. package/dist/chunk-PLIYF6KI.js +52 -0
  76. package/dist/chunk-PLIYF6KI.js.map +1 -0
  77. package/dist/chunk-PSR47JRA.js +26 -0
  78. package/dist/chunk-PSR47JRA.js.map +1 -0
  79. package/dist/{chunk-SBJV3K4G.js → chunk-QJ6P2DW6.js} +28 -28
  80. package/dist/chunk-QJ6P2DW6.js.map +1 -0
  81. package/dist/{chunk-IP6TMT3D.js → chunk-R7QFP6EL.js} +3 -3
  82. package/dist/chunk-R7QFP6EL.js.map +1 -0
  83. package/dist/{chunk-WZWR2ELB.js → chunk-SEBU6JCK.js} +6 -6
  84. package/dist/chunk-SEBU6JCK.js.map +1 -0
  85. package/dist/{chunk-7OBL3H5P.js → chunk-SEFK4NZV.js} +3 -3
  86. package/dist/chunk-SEFK4NZV.js.map +1 -0
  87. package/dist/chunk-SRIT4NFQ.js +67 -0
  88. package/dist/chunk-SRIT4NFQ.js.map +1 -0
  89. package/dist/chunk-SY62XJFA.js +19 -0
  90. package/dist/chunk-SY62XJFA.js.map +1 -0
  91. package/dist/{chunk-SVXDWPLO.js → chunk-THD3YOOZ.js} +17 -17
  92. package/dist/chunk-THD3YOOZ.js.map +1 -0
  93. package/dist/chunk-VXFYETRK.js +58 -0
  94. package/dist/chunk-VXFYETRK.js.map +1 -0
  95. package/dist/chunk-XBX6QMR5.js +58 -0
  96. package/dist/chunk-XBX6QMR5.js.map +1 -0
  97. package/dist/{chunk-SCUT2ZCD.js → chunk-XCGZPFT7.js} +17 -17
  98. package/dist/chunk-XCGZPFT7.js.map +1 -0
  99. package/dist/chunk-XMK3T4TA.js +73 -0
  100. package/dist/chunk-XMK3T4TA.js.map +1 -0
  101. package/dist/chunk-YJ6MPS6U.js +226 -0
  102. package/dist/chunk-YJ6MPS6U.js.map +1 -0
  103. package/dist/chunk-YRYQXU3G.js +38 -0
  104. package/dist/chunk-YRYQXU3G.js.map +1 -0
  105. package/dist/{chunk-5J7BP5DI.js → chunk-YWFPMND7.js} +10 -10
  106. package/dist/chunk-YWFPMND7.js.map +1 -0
  107. package/dist/chunk-YYEGAFUE.js +94 -0
  108. package/dist/chunk-YYEGAFUE.js.map +1 -0
  109. package/dist/{chunk-TKA4LOMT.js → chunk-ZZ7H7VVX.js} +8 -8
  110. package/dist/chunk-ZZ7H7VVX.js.map +1 -0
  111. package/dist/components/data/index.d.ts +318 -228
  112. package/dist/components/data/index.js +591 -1394
  113. package/dist/components/data/index.js.map +1 -1
  114. package/dist/components/layout/dashboard-page.d.ts +4 -0
  115. package/dist/components/layout/dashboard-page.js +5 -0
  116. package/dist/components/layout/dashboard-page.js.map +1 -0
  117. package/dist/components/layout/detail-page.d.ts +91 -0
  118. package/dist/components/layout/detail-page.js +6 -0
  119. package/dist/components/layout/detail-page.js.map +1 -0
  120. package/dist/components/layout/form-page.d.ts +82 -0
  121. package/dist/components/layout/form-page.js +5 -0
  122. package/dist/components/layout/form-page.js.map +1 -0
  123. package/dist/components/layout/index.d.ts +14 -0
  124. package/dist/components/layout/index.js +21 -0
  125. package/dist/components/layout/index.js.map +1 -0
  126. package/dist/components/layout/settings-page.d.ts +114 -0
  127. package/dist/components/layout/settings-page.js +6 -0
  128. package/dist/components/layout/settings-page.js.map +1 -0
  129. package/dist/components/patterns/empty-state.d.ts +73 -0
  130. package/dist/components/{ui → patterns}/empty-state.js +2 -1
  131. package/dist/components/{ui → patterns}/form-field.d.ts +5 -6
  132. package/dist/components/{ui → patterns}/form-field.js +2 -2
  133. package/dist/components/patterns/index.d.ts +17 -0
  134. package/dist/components/patterns/index.js +18 -0
  135. package/dist/components/patterns/index.js.map +1 -0
  136. package/dist/components/patterns/page-loading.d.ts +25 -0
  137. package/dist/components/patterns/page-loading.js +5 -0
  138. package/dist/components/patterns/page-loading.js.map +1 -0
  139. package/dist/components/patterns/settings-row.d.ts +41 -0
  140. package/dist/components/patterns/settings-row.js +6 -0
  141. package/dist/components/patterns/settings-row.js.map +1 -0
  142. package/dist/components/patterns/status-badge.d.ts +37 -0
  143. package/dist/components/patterns/status-badge.js +4 -0
  144. package/dist/components/patterns/status-badge.js.map +1 -0
  145. package/dist/components/patterns/toggle-row.d.ts +35 -0
  146. package/dist/components/patterns/toggle-row.js +8 -0
  147. package/dist/components/patterns/toggle-row.js.map +1 -0
  148. package/dist/components/patterns/user-avatar.d.ts +34 -0
  149. package/dist/components/patterns/user-avatar.js +5 -0
  150. package/dist/components/patterns/user-avatar.js.map +1 -0
  151. package/dist/components/ui/accessible-icon.d.ts +47 -0
  152. package/dist/components/ui/accessible-icon.js +3 -0
  153. package/dist/components/ui/accessible-icon.js.map +1 -0
  154. package/dist/components/ui/accordion.d.ts +5 -5
  155. package/dist/components/ui/accordion.js +1 -1
  156. package/dist/components/ui/alert-dialog.d.ts +12 -13
  157. package/dist/components/ui/alert-dialog.js +1 -1
  158. package/dist/components/ui/aspect-ratio.d.ts +2 -2
  159. package/dist/components/ui/aspect-ratio.js +1 -1
  160. package/dist/components/ui/avatar.d.ts +4 -4
  161. package/dist/components/ui/avatar.js +1 -1
  162. package/dist/components/ui/badge.d.ts +1 -2
  163. package/dist/components/ui/breadcrumb.d.ts +2 -3
  164. package/dist/components/ui/button-group.d.ts +1 -2
  165. package/dist/components/ui/button.d.ts +73 -8
  166. package/dist/components/ui/button.js +1 -1
  167. package/dist/components/ui/calendar.d.ts +2 -3
  168. package/dist/components/ui/calendar.js +2 -2
  169. package/dist/components/ui/card.d.ts +6 -7
  170. package/dist/components/ui/carousel.d.ts +4 -4
  171. package/dist/components/ui/carousel.js +2 -2
  172. package/dist/components/ui/chart.d.ts +4 -5
  173. package/dist/components/ui/checkbox.d.ts +2 -2
  174. package/dist/components/ui/checkbox.js +1 -1
  175. package/dist/components/ui/collapsible.d.ts +4 -4
  176. package/dist/components/ui/collapsible.js +1 -1
  177. package/dist/components/ui/command-palette.d.ts +1 -2
  178. package/dist/components/ui/command-palette.js +3 -3
  179. package/dist/components/ui/command.d.ts +11 -12
  180. package/dist/components/ui/command.js +2 -2
  181. package/dist/components/ui/context-menu.d.ts +16 -17
  182. package/dist/components/ui/context-menu.js +1 -1
  183. package/dist/components/ui/date-picker.d.ts +2 -2
  184. package/dist/components/ui/date-picker.js +4 -4
  185. package/dist/components/ui/dialog.d.ts +11 -12
  186. package/dist/components/ui/dialog.js +1 -1
  187. package/dist/components/ui/drawer.d.ts +10 -11
  188. package/dist/components/ui/dropdown-menu.d.ts +16 -17
  189. package/dist/components/ui/dropdown-menu.js +1 -1
  190. package/dist/components/ui/hover-card.d.ts +4 -4
  191. package/dist/components/ui/hover-card.js +1 -1
  192. package/dist/components/ui/input-otp.d.ts +2 -2
  193. package/dist/components/ui/kbd.d.ts +1 -2
  194. package/dist/components/ui/label.d.ts +2 -2
  195. package/dist/components/ui/label.js +1 -1
  196. package/dist/components/ui/menubar.d.ts +17 -18
  197. package/dist/components/ui/menubar.js +1 -1
  198. package/dist/components/ui/navigation-menu.d.ts +9 -9
  199. package/dist/components/ui/navigation-menu.js +1 -1
  200. package/dist/components/ui/pagination.d.ts +5 -6
  201. package/dist/components/ui/pagination.js +2 -2
  202. package/dist/components/ui/password-toggle-field.d.ts +120 -0
  203. package/dist/components/ui/password-toggle-field.js +4 -0
  204. package/dist/components/ui/password-toggle-field.js.map +1 -0
  205. package/dist/components/ui/popover.d.ts +4 -4
  206. package/dist/components/ui/popover.js +1 -1
  207. package/dist/components/ui/progress.d.ts +1 -2
  208. package/dist/components/ui/radio-group.d.ts +3 -3
  209. package/dist/components/ui/radio-group.js +1 -1
  210. package/dist/components/ui/resizable.d.ts +3 -4
  211. package/dist/components/ui/scroll-area.d.ts +60 -3
  212. package/dist/components/ui/scroll-area.js +1 -1
  213. package/dist/components/ui/select.d.ts +9 -9
  214. package/dist/components/ui/select.js +1 -1
  215. package/dist/components/ui/separator.d.ts +1 -2
  216. package/dist/components/ui/sheet.d.ts +13 -12
  217. package/dist/components/ui/sheet.js +1 -1
  218. package/dist/components/ui/skeleton.d.ts +1 -2
  219. package/dist/components/ui/slider.d.ts +2 -2
  220. package/dist/components/ui/slider.js +1 -1
  221. package/dist/components/ui/sonner.d.ts +1 -2
  222. package/dist/components/ui/spinner.d.ts +1 -2
  223. package/dist/components/ui/switch.d.ts +2 -2
  224. package/dist/components/ui/switch.js +1 -1
  225. package/dist/components/ui/tabs.d.ts +29 -14
  226. package/dist/components/ui/tabs.js +1 -1
  227. package/dist/components/ui/toggle-group.d.ts +3 -3
  228. package/dist/components/ui/toggle-group.js +2 -2
  229. package/dist/components/ui/toggle.d.ts +2 -2
  230. package/dist/components/ui/toggle.js +1 -1
  231. package/dist/components/ui/toolbar.d.ts +104 -0
  232. package/dist/components/ui/toolbar.js +6 -0
  233. package/dist/components/ui/toolbar.js.map +1 -0
  234. package/dist/components/ui/tooltip.d.ts +46 -5
  235. package/dist/components/ui/tooltip.js +1 -1
  236. package/dist/components/ui/typography.d.ts +9 -10
  237. package/dist/components/ui/visually-hidden.d.ts +48 -0
  238. package/dist/components/ui/visually-hidden.js +4 -0
  239. package/dist/components/ui/visually-hidden.js.map +1 -0
  240. package/dist/dashboard-page-C0TihRl5.d.ts +107 -0
  241. package/dist/hooks/index.d.ts +2 -3
  242. package/dist/hooks/index.js +6 -6
  243. package/dist/hooks/use-keyboard-navigation.d.ts +58 -2
  244. package/dist/hooks/use-keyboard-navigation.js +1 -1
  245. package/dist/hooks/use-resource-page.d.ts +2 -3
  246. package/dist/hooks/use-resource-page.js +2 -2
  247. package/dist/hooks/use-view-preference.d.ts +2 -2
  248. package/dist/hooks/use-view-preference.js +1 -1
  249. package/dist/index.d.ts +22 -25
  250. package/dist/index.js +54 -38
  251. package/dist/spacing-BS6qECD4.d.ts +191 -0
  252. package/dist/split-Dk9f4Mi0.d.ts +57 -0
  253. package/dist/{use-resource-page-BXBv_Xah.d.ts → use-resource-page-DTQS011Q.d.ts} +18 -6
  254. package/dist/view-settings-kHKCHMjj.d.ts +12 -0
  255. package/dist/{ViewToggle-DDe_Luj2.d.ts → view-toggle-CahQ87PW.d.ts} +2 -2
  256. package/package.json +80 -39
  257. package/dist/chunk-2B3MFHBQ.js.map +0 -1
  258. package/dist/chunk-2MXMWBDV.js.map +0 -1
  259. package/dist/chunk-4V4H2ZM7.js.map +0 -1
  260. package/dist/chunk-5J7BP5DI.js.map +0 -1
  261. package/dist/chunk-5Q4FABZQ.js.map +0 -1
  262. package/dist/chunk-63FW5ZUA.js.map +0 -1
  263. package/dist/chunk-7OBL3H5P.js.map +0 -1
  264. package/dist/chunk-AUECDWP2.js.map +0 -1
  265. package/dist/chunk-C6H7AMO4.js.map +0 -1
  266. package/dist/chunk-EI5EGKHL.js +0 -32
  267. package/dist/chunk-EI5EGKHL.js.map +0 -1
  268. package/dist/chunk-IP6TMT3D.js.map +0 -1
  269. package/dist/chunk-JJ4NOMMI.js +0 -73
  270. package/dist/chunk-JJ4NOMMI.js.map +0 -1
  271. package/dist/chunk-JXI2MYL3.js.map +0 -1
  272. package/dist/chunk-KBS4BHME.js +0 -11
  273. package/dist/chunk-KBS4BHME.js.map +0 -1
  274. package/dist/chunk-LRXDZBV2.js +0 -26
  275. package/dist/chunk-LRXDZBV2.js.map +0 -1
  276. package/dist/chunk-NJMO3VPA.js.map +0 -1
  277. package/dist/chunk-OCTV3S4I.js +0 -29
  278. package/dist/chunk-OCTV3S4I.js.map +0 -1
  279. package/dist/chunk-QBZMY2AF.js.map +0 -1
  280. package/dist/chunk-QLCDAFS7.js.map +0 -1
  281. package/dist/chunk-SBJV3K4G.js.map +0 -1
  282. package/dist/chunk-SCUT2ZCD.js.map +0 -1
  283. package/dist/chunk-SVXDWPLO.js.map +0 -1
  284. package/dist/chunk-T465NJRL.js +0 -134
  285. package/dist/chunk-T465NJRL.js.map +0 -1
  286. package/dist/chunk-T5VX5DYO.js.map +0 -1
  287. package/dist/chunk-TKA4LOMT.js.map +0 -1
  288. package/dist/chunk-UGHQFQOE.js.map +0 -1
  289. package/dist/chunk-WALXVR6V.js +0 -9
  290. package/dist/chunk-WALXVR6V.js.map +0 -1
  291. package/dist/chunk-WZWR2ELB.js.map +0 -1
  292. package/dist/chunk-YZEA5TGK.js.map +0 -1
  293. package/dist/chunk-ZDAT5JDH.js.map +0 -1
  294. package/dist/chunk-ZJFSZFPI.js.map +0 -1
  295. package/dist/components/ui/empty-state.d.ts +0 -22
  296. /package/dist/components/{ui → patterns}/empty-state.js.map +0 -0
  297. /package/dist/components/{ui → patterns}/form-field.js.map +0 -0
@@ -0,0 +1,104 @@
1
+ import * as class_variance_authority_types from 'class-variance-authority/types';
2
+ import * as React from 'react';
3
+ import { Toolbar as Toolbar$1 } from 'radix-ui';
4
+ import { VariantProps } from 'class-variance-authority';
5
+ import { buttonVariants } from './button.js';
6
+ import { toggleVariants } from './toggle.js';
7
+
8
+ declare const toolbarVariants: (props?: ({
9
+ orientation?: "horizontal" | "vertical" | null | undefined;
10
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
11
+ interface ToolbarProps extends React.ComponentPropsWithoutRef<typeof Toolbar$1.Root> {
12
+ /** Stable test/automation selector (emitted as `data-testid`). */
13
+ testID?: string;
14
+ }
15
+ /**
16
+ * Toolbar — a grouped set of controls that behaves as ONE tab stop.
17
+ *
18
+ * This is a primitive, not a layout, and the distinction is the whole reason
19
+ * it wraps Radix instead of a `<div className="flex gap-1">`. Radix's Toolbar
20
+ * owns a roving tabindex: Tab moves into and out of the whole group, and
21
+ * Arrow/Home/End move between the items inside it. A layout, by the framework's
22
+ * own definition, "positions things without knowing what they are" — this one
23
+ * knows its children are focusable controls and manages their focus, so it
24
+ * fails that test and passes the primitive one.
25
+ *
26
+ * `orientation` is passed to BOTH Radix (which uses it to decide whether
27
+ * Left/Right or Up/Down are the navigation keys) and the CVA class (which uses
28
+ * it to decide the flex direction). Splitting those would let the visual axis
29
+ * and the keyboard axis disagree — arrows moving "down" a row of buttons.
30
+ *
31
+ * @stability Beta
32
+ */
33
+ declare const Toolbar: React.ForwardRefExoticComponent<ToolbarProps & React.RefAttributes<HTMLDivElement>>;
34
+ interface ToolbarButtonProps extends React.ComponentPropsWithoutRef<typeof Toolbar$1.Button>, VariantProps<typeof buttonVariants> {
35
+ /** Stable test/automation selector (emitted as `data-testid`). */
36
+ testID?: string;
37
+ }
38
+ /**
39
+ * ToolbarButton — a button that participates in the toolbar's roving tabindex.
40
+ *
41
+ * Styling reuses `buttonVariants` rather than declaring a second button look:
42
+ * per the framework's "one home per concept", the question "what does a button
43
+ * look like?" already has an answer. Only the DEFAULTS differ — `ghost`/`sm`,
44
+ * because a toolbar is a dense strip of controls, not a page's primary action —
45
+ * and both remain overridable.
46
+ *
47
+ * @stability Beta
48
+ */
49
+ declare const ToolbarButton: React.ForwardRefExoticComponent<ToolbarButtonProps & React.RefAttributes<HTMLButtonElement>>;
50
+ interface ToolbarLinkProps extends React.ComponentPropsWithoutRef<typeof Toolbar$1.Link> {
51
+ /** Stable test/automation selector (emitted as `data-testid`). */
52
+ testID?: string;
53
+ }
54
+ /**
55
+ * ToolbarLink — an anchor inside the toolbar's roving tabindex.
56
+ *
57
+ * Kept distinct from `ToolbarButton` because the element matters: a link
58
+ * navigates and must stay an `<a>` for middle-click, "open in new tab" and the
59
+ * screen-reader link rotor. Radix also gives it the toolbar's Enter/Space
60
+ * handling without turning it into a button.
61
+ *
62
+ * @stability Beta
63
+ */
64
+ declare const ToolbarLink: React.ForwardRefExoticComponent<ToolbarLinkProps & React.RefAttributes<HTMLAnchorElement>>;
65
+ interface ToolbarSeparatorProps extends React.ComponentPropsWithoutRef<typeof Toolbar$1.Separator> {
66
+ }
67
+ /**
68
+ * ToolbarSeparator — a decorative divider between toolbar groups.
69
+ *
70
+ * Radix excludes it from the roving tabindex, so arrow keys skip straight over
71
+ * it instead of landing on a 1px line.
72
+ *
73
+ * Note the inverted axis, which is easy to get backwards: Radix gives the
74
+ * separator the orientation PERPENDICULAR to the toolbar's, so a horizontal
75
+ * toolbar contains separators with `data-orientation="vertical"`. The classes
76
+ * below are keyed on the separator's own orientation accordingly — a vertical
77
+ * separator is the tall thin rule.
78
+ *
79
+ * @stability Beta
80
+ */
81
+ declare const ToolbarSeparator: React.ForwardRefExoticComponent<ToolbarSeparatorProps & React.RefAttributes<HTMLDivElement>>;
82
+ /**
83
+ * ToolbarToggleGroup — a set of pressed/unpressed controls inside a toolbar
84
+ * (the classic bold / italic / underline cluster).
85
+ *
86
+ * @stability Beta
87
+ */
88
+ declare const ToolbarToggleGroup: React.ForwardRefExoticComponent<(Omit<Toolbar$1.ToolbarToggleGroupSingleProps & React.RefAttributes<HTMLDivElement>, "ref"> | Omit<Toolbar$1.ToolbarToggleGroupMultipleProps & React.RefAttributes<HTMLDivElement>, "ref">) & React.RefAttributes<HTMLDivElement>>;
89
+ interface ToolbarToggleItemProps extends React.ComponentPropsWithoutRef<typeof Toolbar$1.ToggleItem>, VariantProps<typeof toggleVariants> {
90
+ /** Stable test/automation selector (emitted as `data-testid`). */
91
+ testID?: string;
92
+ }
93
+ /**
94
+ * ToolbarToggleItem — one member of a `ToolbarToggleGroup`.
95
+ *
96
+ * Reuses `toggleVariants` for the same reason `ToolbarButton` reuses
97
+ * `buttonVariants`: `Toggle` already answers "what does a pressed control look
98
+ * like?", and a second answer is how two implementations get born.
99
+ *
100
+ * @stability Beta
101
+ */
102
+ declare const ToolbarToggleItem: React.ForwardRefExoticComponent<ToolbarToggleItemProps & React.RefAttributes<HTMLButtonElement>>;
103
+
104
+ export { Toolbar, ToolbarButton, type ToolbarButtonProps, ToolbarLink, type ToolbarLinkProps, type ToolbarProps, ToolbarSeparator, type ToolbarSeparatorProps, ToolbarToggleGroup, ToolbarToggleItem, type ToolbarToggleItemProps, toolbarVariants };
@@ -0,0 +1,6 @@
1
+ export { Toolbar, ToolbarButton, ToolbarLink, ToolbarSeparator, ToolbarToggleGroup, ToolbarToggleItem, toolbarVariants } from '../../chunk-YYEGAFUE.js';
2
+ import '../../chunk-C46ITXE4.js';
3
+ import '../../chunk-NWSCYLPT.js';
4
+ import '../../chunk-NZ5WBA4R.js';
5
+ //# sourceMappingURL=toolbar.js.map
6
+ //# sourceMappingURL=toolbar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"toolbar.js"}
@@ -1,10 +1,51 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
1
  import * as React from 'react';
3
2
 
4
- interface TooltipProps extends React.HTMLAttributes<HTMLDivElement> {
5
- content: string;
3
+ interface TooltipProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "content"> {
4
+ /**
5
+ * Tooltip body. Accepts any `ReactNode` — icons, formatted or multi-line
6
+ * content — not just a plain string.
7
+ */
8
+ content: React.ReactNode;
6
9
  side?: "top" | "bottom" | "left" | "right";
10
+ /**
11
+ * Milliseconds a POINTER must rest on the trigger before the tooltip
12
+ * opens. Keyboard focus is never delayed — Radix opens instantly on focus
13
+ * regardless of this value.
14
+ *
15
+ * Defaults to `0` rather than Radix's own `700`: the CSS-only
16
+ * implementation this replaced revealed the bubble the instant the pointer
17
+ * entered, and inheriting a 700ms delay on upgrade would read as the
18
+ * tooltip having broken. Raise it to get the "don't fire while the cursor
19
+ * sweeps across the UI" behaviour the hand-rolled version could not offer.
20
+ */
21
+ delayDuration?: number;
7
22
  }
8
- declare function Tooltip({ content, side, className, children, ...props }: TooltipProps): react_jsx_runtime.JSX.Element;
23
+ /**
24
+ * Tooltip — hover/focus hint anchored to its trigger child.
25
+ *
26
+ * Backed by Radix `Tooltip`, which owns the parts a design system should not
27
+ * be maintaining itself: open/close state, the pointer delay, opening on
28
+ * keyboard focus and closing on blur/Escape/scroll, the portal, collision
29
+ * detection against the viewport, and the `aria-describedby` ↔ `role="tooltip"`
30
+ * association. The previous implementation was CSS-only — a `group` wrapper
31
+ * plus `group-hover:block` / `group-focus-within:block` — which meant no
32
+ * portal (so the bubble was clipped by any `overflow:hidden` ancestor), no
33
+ * collision handling (so it ran off-screen at the edges), no dismissal, and no
34
+ * delay.
35
+ *
36
+ * The wrapper `<div>` stays, and keeps `group relative inline-flex`: it is
37
+ * where `className` and the rest of `HTMLAttributes<HTMLDivElement>` land, so
38
+ * removing it would silently drop props callers already pass. Positioning no
39
+ * longer depends on it.
40
+ *
41
+ * The bubble keeps `whitespace-nowrap`, so rich `content` does not soft wrap
42
+ * by itself — long multi-line content needs an explicit `<br />`, or a
43
+ * `whitespace-normal` + width class on the node you pass in. Dropping
44
+ * `whitespace-nowrap` here would re-wrap every existing single-line string
45
+ * tooltip, so it stays opt-out rather than opt-in.
46
+ *
47
+ * @stability Stable
48
+ */
49
+ declare function Tooltip({ content, side, delayDuration, className, children, ...props }: TooltipProps): React.JSX.Element;
9
50
 
10
- export { Tooltip };
51
+ export { Tooltip, type TooltipProps };
@@ -1,4 +1,4 @@
1
- export { Tooltip } from '../../chunk-EI5EGKHL.js';
1
+ export { Tooltip } from '../../chunk-G5YKBPBF.js';
2
2
  import '../../chunk-NZ5WBA4R.js';
3
3
  //# sourceMappingURL=tooltip.js.map
4
4
  //# sourceMappingURL=tooltip.js.map
@@ -1,14 +1,13 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
1
  import * as React from 'react';
3
2
 
4
- declare function H1({ className, ...props }: React.HTMLAttributes<HTMLHeadingElement>): react_jsx_runtime.JSX.Element;
5
- declare function H2({ className, ...props }: React.HTMLAttributes<HTMLHeadingElement>): react_jsx_runtime.JSX.Element;
6
- declare function H3({ className, ...props }: React.HTMLAttributes<HTMLHeadingElement>): react_jsx_runtime.JSX.Element;
7
- declare function H4({ className, ...props }: React.HTMLAttributes<HTMLHeadingElement>): react_jsx_runtime.JSX.Element;
8
- declare function P({ className, ...props }: React.HTMLAttributes<HTMLParagraphElement>): react_jsx_runtime.JSX.Element;
9
- declare function Lead({ className, ...props }: React.HTMLAttributes<HTMLParagraphElement>): react_jsx_runtime.JSX.Element;
10
- declare function Large({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
11
- declare function Small({ className, ...props }: React.HTMLAttributes<HTMLElement>): react_jsx_runtime.JSX.Element;
12
- declare function Muted({ className, ...props }: React.HTMLAttributes<HTMLParagraphElement>): react_jsx_runtime.JSX.Element;
3
+ declare function H1({ className, ...props }: React.HTMLAttributes<HTMLHeadingElement>): React.JSX.Element;
4
+ declare function H2({ className, ...props }: React.HTMLAttributes<HTMLHeadingElement>): React.JSX.Element;
5
+ declare function H3({ className, ...props }: React.HTMLAttributes<HTMLHeadingElement>): React.JSX.Element;
6
+ declare function H4({ className, ...props }: React.HTMLAttributes<HTMLHeadingElement>): React.JSX.Element;
7
+ declare function P({ className, ...props }: React.HTMLAttributes<HTMLParagraphElement>): React.JSX.Element;
8
+ declare function Lead({ className, ...props }: React.HTMLAttributes<HTMLParagraphElement>): React.JSX.Element;
9
+ declare function Large({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element;
10
+ declare function Small({ className, ...props }: React.HTMLAttributes<HTMLElement>): React.JSX.Element;
11
+ declare function Muted({ className, ...props }: React.HTMLAttributes<HTMLParagraphElement>): React.JSX.Element;
13
12
 
14
13
  export { H1, H2, H3, H4, Large, Lead, Muted, P, Small };
@@ -0,0 +1,48 @@
1
+ import * as React from 'react';
2
+ import { VisuallyHidden as VisuallyHidden$1 } from 'radix-ui';
3
+
4
+ interface VisuallyHiddenProps extends React.ComponentPropsWithoutRef<typeof VisuallyHidden$1.Root> {
5
+ /** Stable test/automation selector (emitted as `data-testid`). */
6
+ testID?: string;
7
+ }
8
+ /**
9
+ * VisuallyHidden — content removed from the visual layout but kept in the
10
+ * accessibility tree.
11
+ *
12
+ * This is the correct tool for the label an icon-only control needs, for the
13
+ * `DialogTitle` a dialog must have even when the design shows none, and for
14
+ * live-region status text. It is NOT `display: none` and it is NOT
15
+ * `visibility: hidden` — both of those remove the node from the a11y tree too,
16
+ * which is the exact opposite of the intent.
17
+ *
18
+ * Why Radix rather than Tailwind's `sr-only`: the two produce the same result,
19
+ * but `sr-only` is a class a consumer's `@apply`, a purge misconfiguration, or
20
+ * a competing utility can quietly defeat, and the failure is silent — the text
21
+ * simply becomes visible, or the layout shifts, and nothing in a build catches
22
+ * it. Radix applies the clip rectangle as inline styles on the element itself,
23
+ * so there is no stylesheet for the consumer's build to lose.
24
+ *
25
+ * **That robustness cuts both ways, and it is the one thing to know before
26
+ * reaching for this.** An inline style beats any ordinary class declaration, so
27
+ * a `className` cannot override the clipping either — not accidentally, and
28
+ * not on purpose. `className` is merged for non-visual concerns (a test hook, a
29
+ * data attribute target); it is NOT a way to reveal the content.
30
+ *
31
+ * The escape hatch is the `style` prop, which Radix spreads *after* its own
32
+ * (`{...VISUALLY_HIDDEN_STYLES, ...props.style}`) and which therefore wins.
33
+ * Both behaviours are pinned in this component's tests, because the docs above
34
+ * depend on them.
35
+ *
36
+ * **This is therefore the wrong primitive for a skip link.** A skip link is
37
+ * hidden until focused, and "until focused" is state, not a class — a static
38
+ * `style` prop cannot express it and `focus-within:` utilities cannot win
39
+ * against the inline rule. Give a skip link its own element with real CSS, or
40
+ * drive the `style` prop from `onFocus`/`onBlur`. Use `VisuallyHidden` for text
41
+ * that stays hidden: control labels, dialog titles a design omits, live-region
42
+ * status text.
43
+ *
44
+ * @stability Beta
45
+ */
46
+ declare const VisuallyHidden: React.ForwardRefExoticComponent<VisuallyHiddenProps & React.RefAttributes<HTMLSpanElement>>;
47
+
48
+ export { VisuallyHidden, type VisuallyHiddenProps };
@@ -0,0 +1,4 @@
1
+ export { VisuallyHidden } from '../../chunk-SY62XJFA.js';
2
+ import '../../chunk-NZ5WBA4R.js';
3
+ //# sourceMappingURL=visually-hidden.js.map
4
+ //# sourceMappingURL=visually-hidden.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"visually-hidden.js"}
@@ -0,0 +1,107 @@
1
+ import * as React from 'react';
2
+ import * as class_variance_authority_types from 'class-variance-authority/types';
3
+ import { VariantProps } from 'class-variance-authority';
4
+
5
+ declare const gridVariants: (props?: ({
6
+ cols?: 1 | 2 | 4 | 3 | 5 | 6 | null | undefined;
7
+ gap?: "sm" | "lg" | "none" | "xs" | "md" | "xl" | "2xl" | "3xl" | null | undefined;
8
+ align?: "center" | "end" | "start" | "stretch" | null | undefined;
9
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
10
+ interface GridProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof gridVariants> {
11
+ /** Stable test/automation selector (emitted as `data-testid`). */
12
+ testID?: string;
13
+ }
14
+ /**
15
+ * Grid — two-dimensional flow for card and tile collections.
16
+ *
17
+ * `cols` is the count at the widest breakpoint; the class it emits is a
18
+ * responsive ramp, so a card grid reflows on its own without the consumer
19
+ * writing a single breakpoint.
20
+ *
21
+ * ```tsx
22
+ * <Grid cols={3} gap="lg">
23
+ * {people.map((p) => <PersonCard key={p.id} person={p} />)}
24
+ * </Grid>
25
+ *
26
+ * <Grid cols={4} gap="sm" align="start">
27
+ * {stats.map((s) => <StatCard key={s.id} {...s} />)}
28
+ * </Grid>
29
+ * ```
30
+ *
31
+ * Deliberately NOT here: `grid-template-areas`, explicit row/column
32
+ * placement, and per-child spans. A component that positions a *named*
33
+ * child has stopped positioning things without knowing what they are, and
34
+ * a grid whose children each carry placement props is a CSS file wearing a
35
+ * React costume — reach for `className` at that point.
36
+ *
37
+ * @stability Beta
38
+ */
39
+ declare const Grid: React.ForwardRefExoticComponent<GridProps & React.RefAttributes<HTMLDivElement>>;
40
+
41
+ interface DashboardPageProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
42
+ /** Page title. Rendered as the page's single `<h1>`. */
43
+ title: React.ReactNode;
44
+ /** Supporting line under the title — a date range, a scope, a filter. */
45
+ subtitle?: React.ReactNode;
46
+ /** Trailing controls — a period picker, an export, a refresh. */
47
+ actions?: React.ReactNode;
48
+ /**
49
+ * The stat row: `StatCard`s, or anything tile-shaped. Laid out in a `Grid`
50
+ * that ramps down to one column on a phone. Omit it and no grid renders.
51
+ */
52
+ stats?: React.ReactNode;
53
+ /**
54
+ * Tiles across the stat row at the widest breakpoint. Default `4`.
55
+ * Reuses `Grid`'s `cols` scale, so the responsive ramp is the same one
56
+ * every other card grid in the app gets.
57
+ */
58
+ statColumns?: NonNullable<GridProps["cols"]>;
59
+ /** Stable test/automation selector (emitted as `data-testid`). */
60
+ testID?: string;
61
+ }
62
+ /**
63
+ * DashboardPage — a stat row over a flexible region of charts, tables and
64
+ * sections.
65
+ *
66
+ * ```tsx
67
+ * <DashboardPage
68
+ * title="This quarter"
69
+ * subtitle="1 Apr – 30 Jun"
70
+ * actions={<DatePicker … />}
71
+ * stats={
72
+ * <>
73
+ * <StatCard label="Active clients" value={42} />
74
+ * <StatCard label="Sessions" value={318} trend={{ value: 12, label: "vs Q1" }} />
75
+ * </>
76
+ * }
77
+ * >
78
+ * <Section title="Revenue"><ChartContainer …/></Section>
79
+ * <Section title="At risk"><DataTable …/></Section>
80
+ * </DashboardPage>
81
+ * ```
82
+ *
83
+ * The two regions are separated on purpose. Stats are a fixed-shape row that
84
+ * must reflow as a unit; everything below is free-form and stacks. Folding
85
+ * both into one `children` is how the stat row ends up hand-gridded per page,
86
+ * with a different breakpoint each time — the exact drift `Grid` exists to
87
+ * stop.
88
+ *
89
+ * Children stack at `gap-8`, wider than the page's own `gap-6`, so a chart
90
+ * and the table under it don't read as one block.
91
+ *
92
+ * The header row is markup, not a component, and deliberately not
93
+ * `PageHeader` — see `./detail-page` for the measured reasons composing it
94
+ * was rejected across all four templates. Width is left to `Container` —
95
+ * wrap, don't duplicate.
96
+ *
97
+ * This is a **layout**: it positions tiles and regions and never fetches a
98
+ * metric. There is deliberately no data-bound twin — binding a dashboard
99
+ * needs an aggregate/metric contract, and `genesis-core` ships none. Adding
100
+ * a template ahead of its contract is what `docs/FRAMEWORK.md` warns against
101
+ * in "Why templates need the contract first".
102
+ *
103
+ * @stability Beta
104
+ */
105
+ declare const DashboardPage: React.ForwardRefExoticComponent<DashboardPageProps & React.RefAttributes<HTMLDivElement>>;
106
+
107
+ export { DashboardPage as D, Grid as G, type DashboardPageProps as a, type GridProps as b, gridVariants as g };
@@ -6,10 +6,9 @@ export { useViewPreference } from './use-view-preference.js';
6
6
  export { Density, ViewSettings, useViewSettings } from './use-view-settings.js';
7
7
  export { UseSavedViewsReturn, useSavedViews } from './use-saved-views.js';
8
8
  export { RouteMap, createPrefetch } from './use-prefetch.js';
9
- export { R as ResourceActions, a as ResourceColumnDef, U as UseResourcePageProps, b as UseResourcePageReturn, u as useResourcePage } from '../use-resource-page-BXBv_Xah.js';
9
+ export { R as ResourceActions, a as ResourceColumnDef, U as UseResourcePageProps, b as UseResourcePageReturn, u as useResourcePage } from '../use-resource-page-DTQS011Q.js';
10
10
  export { CommandPalette, CommandPaletteItem, CommandPaletteProps, useCommandPaletteHotkey } from '../components/ui/command-palette.js';
11
11
  import '../navigation-CpOEyUSb.js';
12
12
  import 'react';
13
- import '../ViewToggle-DDe_Luj2.js';
14
- import 'react/jsx-runtime';
13
+ import '../view-toggle-CahQ87PW.js';
15
14
  import '@marktiderman/genesis-core/provider';
@@ -1,14 +1,14 @@
1
- export { useResourcePage } from '../chunk-QLCDAFS7.js';
1
+ export { useResourcePage } from '../chunk-GDFNAHI4.js';
2
2
  export { useSavedViews } from '../chunk-GCQFVMPI.js';
3
- export { useViewPreference } from '../chunk-XISSLIMH.js';
3
+ export { useViewPreference } from '../chunk-FTTNGGLA.js';
4
4
  export { useViewSettings } from '../chunk-OZ7ZAYCS.js';
5
- export { CommandPalette, useCommandPaletteHotkey } from '../chunk-A2OXCNNY.js';
6
- import '../chunk-7OBL3H5P.js';
7
- import '../chunk-YZEA5TGK.js';
5
+ export { CommandPalette, useCommandPaletteHotkey } from '../chunk-CNTWQSUT.js';
6
+ import '../chunk-SEFK4NZV.js';
7
+ import '../chunk-7XMZVISM.js';
8
8
  import '../chunk-NZ5WBA4R.js';
9
9
  export { useDataFilters } from '../chunk-D4JTQYP5.js';
10
10
  import '../chunk-6NPEMLBA.js';
11
- export { useKeyboardNavigation } from '../chunk-T465NJRL.js';
11
+ export { useKeyboardNavigation } from '../chunk-YJ6MPS6U.js';
12
12
  export { useIsMobile } from '../chunk-M7AU5DDM.js';
13
13
  export { createPrefetch } from '../chunk-HSHIZHYR.js';
14
14
  export { useOne, useResource, useResourceForm, useWizard } from '@marktiderman/genesis-core/hooks';
@@ -1,5 +1,26 @@
1
1
  import * as React from 'react';
2
2
 
3
+ /**
4
+ * Vim/Superhuman-style list navigation: j/k (or Arrow Up/Down) move a
5
+ * focused-item cursor *one row at a time*, Enter opens the focused item, x
6
+ * toggles its selection, and Backspace goes "back" (e.g. closes an open
7
+ * detail view). In a multi-column grid the vertical keys step by the
8
+ * container's live column count and Arrow Left/Right step by one, so the
9
+ * cursor follows the grid the user can see rather than treating it as a flat
10
+ * list. Intended for list/grid views such as `DataGrid` — attach
11
+ * `containerRef` to the scrollable item container so the column count can be
12
+ * measured and focus changes can scroll the focused item into view.
13
+ *
14
+ * Deliberately inert, so a default-on consumer can't break the surrounding
15
+ * app: modified chords (Ctrl/Meta/Alt) are never captured, text-entry
16
+ * surfaces keep every key, focused controls (or anything inside a
17
+ * dialog/menu/listbox) keep theirs, composite widgets keep Backspace, and a
18
+ * key that *does nothing* is never swallowed — Arrow Up/Down fall through to
19
+ * the browser's page scrolling on an empty list, or at either end of a full
20
+ * one, instead of dying silently.
21
+ *
22
+ * @stability Beta
23
+ */
3
24
  interface KeyboardNavOptions {
4
25
  /** Total number of navigable items */
5
26
  itemCount: number;
@@ -7,13 +28,47 @@ interface KeyboardNavOptions {
7
28
  onOpen?: (index: number) => void;
8
29
  /** Called when x is pressed on focused item */
9
30
  onToggleSelect?: (index: number) => void;
31
+ /**
32
+ * Called when Backspace (⌫) is pressed — the conventional "go back" key,
33
+ * e.g. to close an open detail panel/modal and return to the list. Fires
34
+ * regardless of whether an item is currently focused (mirrors Escape),
35
+ * since "go back" should still work if a detail view was opened by mouse
36
+ * click rather than keyboard navigation. Not gated behind `focusedIndex`.
37
+ *
38
+ * Backspace is only intercepted (and its default suppressed) while this
39
+ * is supplied — pass it conditionally, i.e. only while there is something
40
+ * to go back from, so the key stays available to the browser and the
41
+ * surrounding app the rest of the time. Even then it is left alone for
42
+ * text-entry surfaces and for composite widgets that use Backspace
43
+ * themselves (see `KEEPS_BACKSPACE_SELECTOR`).
44
+ */
45
+ onBack?: (focusedIndex: number) => void;
10
46
  /** Ref to the search input to focus on "/" */
11
47
  searchInputRef?: React.RefObject<HTMLInputElement | null>;
12
48
  /** Whether navigation is enabled. Default true */
13
49
  enabled?: boolean;
14
- /** Number of columns in grid for arrow key navigation */
50
+ /**
51
+ * Columns in the navigable grid. Drives the vertical stride: Arrow
52
+ * Down/Up (and j/k) move by `columns`, Arrow Left/Right by one — so in a
53
+ * 3-up grid ArrowDown moves *down* a row instead of one card to the right.
54
+ *
55
+ * Leave unset (the default) to measure the live count off `containerRef`'s
56
+ * resolved `grid-template-columns` on each keypress, which is the only
57
+ * value that stays correct across a responsive column ramp. Pass a number
58
+ * only to override that measurement. Either way a single-column container
59
+ * behaves exactly as a flat list: stride 1, Left/Right inert.
60
+ */
15
61
  columns?: number;
62
+ /**
63
+ * An overlay (detail panel, modal, form) is open above the list. Cursor
64
+ * movement and activation keys are suspended so they can't drive the list
65
+ * hidden behind it, while the dismissal keys (`onBack`/Backspace, Escape)
66
+ * stay live so the overlay can still be closed from the keyboard.
67
+ * Default false.
68
+ */
69
+ overlayOpen?: boolean;
16
70
  }
71
+ /** @stability Beta */
17
72
  interface KeyboardNavResult {
18
73
  /** Currently focused item index (-1 = none) */
19
74
  focusedIndex: number;
@@ -24,6 +79,7 @@ interface KeyboardNavResult {
24
79
  /** Whether keyboard nav is actively engaged (user has pressed j/k) */
25
80
  isActive: boolean;
26
81
  }
27
- declare function useKeyboardNavigation({ itemCount, onOpen, onToggleSelect, searchInputRef, enabled, columns, }: KeyboardNavOptions): KeyboardNavResult;
82
+ /** @stability Beta */
83
+ declare function useKeyboardNavigation({ itemCount, onOpen, onToggleSelect, onBack, searchInputRef, enabled, columns, overlayOpen, }: KeyboardNavOptions): KeyboardNavResult;
28
84
 
29
85
  export { type KeyboardNavOptions, type KeyboardNavResult, useKeyboardNavigation };
@@ -1,3 +1,3 @@
1
- export { useKeyboardNavigation } from '../chunk-T465NJRL.js';
1
+ export { useKeyboardNavigation } from '../chunk-YJ6MPS6U.js';
2
2
  //# sourceMappingURL=use-keyboard-navigation.js.map
3
3
  //# sourceMappingURL=use-keyboard-navigation.js.map
@@ -1,6 +1,5 @@
1
1
  import 'react';
2
- export { R as ResourceActions, a as ResourceColumnDef, U as UseResourcePageProps, b as UseResourcePageReturn, t as titleCase, u as useResourcePage } from '../use-resource-page-BXBv_Xah.js';
3
- import '../ViewToggle-DDe_Luj2.js';
2
+ export { R as ResourceActions, a as ResourceColumnDef, U as UseResourcePageProps, b as UseResourcePageReturn, t as titleCase, u as useResourcePage } from '../use-resource-page-DTQS011Q.js';
3
+ import '../view-toggle-CahQ87PW.js';
4
4
  import '@marktiderman/genesis-core/provider';
5
- import 'react/jsx-runtime';
6
5
  import './use-view-settings.js';
@@ -1,4 +1,4 @@
1
- export { titleCase, useResourcePage } from '../chunk-QLCDAFS7.js';
2
- import '../chunk-XISSLIMH.js';
1
+ export { titleCase, useResourcePage } from '../chunk-GDFNAHI4.js';
2
+ import '../chunk-FTTNGGLA.js';
3
3
  //# sourceMappingURL=use-resource-page.js.map
4
4
  //# sourceMappingURL=use-resource-page.js.map
@@ -1,5 +1,5 @@
1
- import { V as ViewMode } from '../ViewToggle-DDe_Luj2.js';
2
- import 'react/jsx-runtime';
1
+ import { V as ViewMode } from '../view-toggle-CahQ87PW.js';
2
+ import 'react';
3
3
 
4
4
  declare function useViewPreference(key: string, defaultMode?: ViewMode): [ViewMode, (mode: ViewMode) => void];
5
5
 
@@ -1,3 +1,3 @@
1
- export { useViewPreference } from '../chunk-XISSLIMH.js';
1
+ export { useViewPreference } from '../chunk-FTTNGGLA.js';
2
2
  //# sourceMappingURL=use-view-preference.js.map
3
3
  //# sourceMappingURL=use-view-preference.js.map
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
- export { Button, ButtonProps } from './components/ui/button.js';
1
+ export { Button, ButtonAsChildProps, ButtonProps } from './components/ui/button.js';
2
2
  export { Badge, BadgeProps } from './components/ui/badge.js';
3
+ export { StatusBadge, StatusBadgeProps, StatusBadgeStatus, statusBadgeVariants } from './components/patterns/status-badge.js';
3
4
  export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from './components/ui/card.js';
4
5
  export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger } from './components/ui/dialog.js';
5
6
  export { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger } from './components/ui/alert-dialog.js';
@@ -11,17 +12,19 @@ export { Progress } from './components/ui/progress.js';
11
12
  export { Skeleton } from './components/ui/skeleton.js';
12
13
  export { Separator } from './components/ui/separator.js';
13
14
  export { ScrollArea } from './components/ui/scroll-area.js';
14
- export { Tooltip } from './components/ui/tooltip.js';
15
+ export { Tooltip, TooltipProps } from './components/ui/tooltip.js';
15
16
  export { Collapsible, CollapsibleContent, CollapsibleTrigger } from './components/ui/collapsible.js';
16
17
  export { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger } from './components/ui/dropdown-menu.js';
17
18
  export { Popover, PopoverContent, PopoverTrigger } from './components/ui/popover.js';
18
19
  export { Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow } from './components/ui/table.js';
19
20
  export { Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut } from './components/ui/command.js';
20
21
  export { CommandPalette, CommandPaletteItem, CommandPaletteProps, useCommandPaletteHotkey } from './components/ui/command-palette.js';
21
- export { EmptyState, NoFeaturesFound, NoFeedbackFound, NoSearchResults } from './components/ui/empty-state.js';
22
+ export { EmptyState, EmptyStateProps, NoFeaturesFound, NoFeedbackFound, NoSearchResults } from './components/patterns/empty-state.js';
22
23
  export { Label } from './components/ui/label.js';
23
24
  export { Textarea } from './components/ui/textarea.js';
24
25
  export { Switch } from './components/ui/switch.js';
26
+ export { SettingsRow, SettingsRowProps } from './components/patterns/settings-row.js';
27
+ export { ToggleRow, ToggleRowProps } from './components/patterns/toggle-row.js';
25
28
  export { RadioGroup, RadioGroupItem } from './components/ui/radio-group.js';
26
29
  export { Alert, AlertDescription, AlertTitle, alertVariants } from './components/ui/alert.js';
27
30
  export { Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious } from './components/ui/pagination.js';
@@ -30,6 +33,7 @@ export { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHe
30
33
  export { Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger } from './components/ui/drawer.js';
31
34
  export { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from './components/ui/accordion.js';
32
35
  export { Avatar, AvatarFallback, AvatarImage } from './components/ui/avatar.js';
36
+ export { UserAvatar, UserAvatarProps, userAvatarVariants } from './components/patterns/user-avatar.js';
33
37
  export { Slider } from './components/ui/slider.js';
34
38
  export { Toggle, toggleVariants } from './components/ui/toggle.js';
35
39
  export { ToggleGroup, ToggleGroupItem } from './components/ui/toggle-group.js';
@@ -43,6 +47,7 @@ export { Carousel, CarouselApi, CarouselContent, CarouselItem, CarouselNext, Car
43
47
  export { ResizableHandle, ResizablePanel, ResizablePanelGroup } from './components/ui/resizable.js';
44
48
  export { Toaster } from './components/ui/sonner.js';
45
49
  export { Spinner, SpinnerProps } from './components/ui/spinner.js';
50
+ export { PageLoading, PageLoadingProps, pageLoadingVariants } from './components/patterns/page-loading.js';
46
51
  export { Kbd, KbdProps } from './components/ui/kbd.js';
47
52
  export { H1, H2, H3, H4, Large, Lead, Muted, P, Small } from './components/ui/typography.js';
48
53
  export { ButtonGroup, ButtonGroupProps } from './components/ui/button-group.js';
@@ -50,36 +55,28 @@ export { InputGroup, InputGroupInput, InputGroupPrefix, InputGroupProps, InputGr
50
55
  export { Calendar, CalendarDayButton } from './components/ui/calendar.js';
51
56
  export { DatePicker, DatePickerProps } from './components/ui/date-picker.js';
52
57
  export { ChartConfig, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent } from './components/ui/chart.js';
53
- export { FormDescription, FormError, FormField, FormLabel } from './components/ui/form-field.js';
58
+ export { FormDescription, FormError, FormField, FormLabel } from './components/patterns/form-field.js';
59
+ export { Toolbar, ToolbarButton, ToolbarButtonProps, ToolbarLink, ToolbarLinkProps, ToolbarProps, ToolbarSeparator, ToolbarSeparatorProps, ToolbarToggleGroup, ToolbarToggleItem, ToolbarToggleItemProps, toolbarVariants } from './components/ui/toolbar.js';
60
+ export { VisuallyHidden, VisuallyHiddenProps } from './components/ui/visually-hidden.js';
61
+ export { AccessibleIcon, AccessibleIconProps } from './components/ui/accessible-icon.js';
62
+ export { PasswordToggleField, PasswordToggleFieldIcon, PasswordToggleFieldIconProps, PasswordToggleFieldInput, PasswordToggleFieldInputProps, PasswordToggleFieldProps, PasswordToggleFieldSlot, PasswordToggleFieldSlotProps, PasswordToggleFieldToggle, PasswordToggleFieldToggleProps } from './components/ui/password-toggle-field.js';
63
+ export { C as Container, a as ContainerProps, G as GAP_CLASSES, S as Section, b as SectionProps, c as SpaceToken, d as Stack, e as StackProps, f as containerVariants, s as sectionHeadingVariants, g as spaceScale, h as stackVariants } from './spacing-BS6qECD4.js';
64
+ export { D as DashboardPage, a as DashboardPageProps, G as Grid, b as GridProps, g as gridVariants } from './dashboard-page-C0TihRl5.js';
65
+ export { S as Split, a as SplitBreakpoint, b as SplitProps, c as SplitRatio, s as splitVariants } from './split-Dk9f4Mi0.js';
66
+ export { DetailPage, DetailPageProps } from './components/layout/detail-page.js';
67
+ export { FormPage, FormPageProps } from './components/layout/form-page.js';
68
+ export { SettingsPage, SettingsPageProps, SettingsPageSection } from './components/layout/settings-page.js';
54
69
  export { cn } from './utils.js';
55
70
  export { D as DefaultLink, G as GenesisLinkProps, L as LinkComponent, N as NavigateFn, S as SearchParamsAdapter, d as defaultNavigate, i as isPathActive, u as useBrowserSearchParams } from './navigation-CpOEyUSb.js';
56
71
  export { toast } from 'sonner';
57
- import 'react/jsx-runtime';
58
72
  import 'class-variance-authority/types';
59
73
  import 'react';
60
74
  import 'class-variance-authority';
61
- import '@radix-ui/react-dialog';
62
- import '@radix-ui/react-alert-dialog';
63
- import '@radix-ui/react-checkbox';
64
- import '@radix-ui/react-select';
65
- import '@radix-ui/react-collapsible';
66
- import '@radix-ui/react-dropdown-menu';
67
- import '@radix-ui/react-popover';
75
+ import '@marktiderman/genesis-design-system/tokens';
76
+ import 'radix-ui';
68
77
  import 'lucide-react';
69
- import '@radix-ui/react-label';
70
- import '@radix-ui/react-switch';
71
- import '@radix-ui/react-radio-group';
72
78
  import 'vaul';
73
- import '@radix-ui/react-accordion';
74
- import '@radix-ui/react-avatar';
75
- import '@radix-ui/react-slider';
76
- import '@radix-ui/react-toggle';
77
- import '@radix-ui/react-toggle-group';
78
- import '@radix-ui/react-context-menu';
79
- import '@radix-ui/react-hover-card';
80
- import '@radix-ui/react-navigation-menu';
81
- import '@radix-ui/react-menubar';
82
- import '@radix-ui/react-aspect-ratio';
79
+ import '@radix-ui/react-dialog';
83
80
  import 'input-otp';
84
81
  import 'embla-carousel-react';
85
82
  import 'react-resizable-panels';