@marktiderman/genesis-ui 1.2.0 → 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 (295) hide show
  1. package/dist/AppShell-BJarYZzz.d.ts +198 -0
  2. package/dist/{chunk-NJMO3VPA.js → chunk-22XB3Q6H.js} +8 -8
  3. package/dist/chunk-22XB3Q6H.js.map +1 -0
  4. package/dist/{chunk-2MXMWBDV.js → chunk-27ELYTGE.js} +6 -6
  5. package/dist/chunk-27ELYTGE.js.map +1 -0
  6. package/dist/chunk-46TZGMFW.js +159 -0
  7. package/dist/chunk-46TZGMFW.js.map +1 -0
  8. package/dist/chunk-4CQHPWJD.js +117 -0
  9. package/dist/chunk-4CQHPWJD.js.map +1 -0
  10. package/dist/{chunk-ZDAT5JDH.js → chunk-65SPT7EA.js} +24 -6
  11. package/dist/chunk-65SPT7EA.js.map +1 -0
  12. package/dist/chunk-6KHY647C.js +67 -0
  13. package/dist/chunk-6KHY647C.js.map +1 -0
  14. package/dist/chunk-6M4NHHKG.js +51 -0
  15. package/dist/chunk-6M4NHHKG.js.map +1 -0
  16. package/dist/{chunk-AI6CCNWK.js → chunk-6NPEMLBA.js} +2 -2
  17. package/dist/chunk-6NPEMLBA.js.map +1 -0
  18. package/dist/chunk-6Q6CLLJ4.js +9 -0
  19. package/dist/chunk-6Q6CLLJ4.js.map +1 -0
  20. package/dist/{chunk-UGHQFQOE.js → chunk-6TVMQH6M.js} +28 -28
  21. package/dist/chunk-6TVMQH6M.js.map +1 -0
  22. package/dist/{chunk-UKSBLFEK.js → chunk-6XPMU65K.js} +5 -5
  23. package/dist/{chunk-UKSBLFEK.js.map → chunk-6XPMU65K.js.map} +1 -1
  24. package/dist/{chunk-YZEA5TGK.js → chunk-7XMZVISM.js} +16 -16
  25. package/dist/chunk-7XMZVISM.js.map +1 -0
  26. package/dist/chunk-A7AHVDG7.js +52 -0
  27. package/dist/chunk-A7AHVDG7.js.map +1 -0
  28. package/dist/chunk-AFZ76Q26.js +84 -0
  29. package/dist/chunk-AFZ76Q26.js.map +1 -0
  30. package/dist/{chunk-4V4H2ZM7.js → chunk-AL5TMEZQ.js} +31 -31
  31. package/dist/chunk-AL5TMEZQ.js.map +1 -0
  32. package/dist/{chunk-O4B5ALO7.js → chunk-AOZGQM6W.js} +3 -3
  33. package/dist/chunk-AOZGQM6W.js.map +1 -0
  34. package/dist/chunk-ARJI2JUV.js +122 -0
  35. package/dist/chunk-ARJI2JUV.js.map +1 -0
  36. package/dist/chunk-AVFZ4P4B.js +25 -0
  37. package/dist/chunk-AVFZ4P4B.js.map +1 -0
  38. package/dist/chunk-B2GIBUQD.js +11 -0
  39. package/dist/chunk-B2GIBUQD.js.map +1 -0
  40. package/dist/{chunk-JXI2MYL3.js → chunk-C46ITXE4.js} +5 -5
  41. package/dist/chunk-C46ITXE4.js.map +1 -0
  42. package/dist/chunk-CNTWQSUT.js +65 -0
  43. package/dist/chunk-CNTWQSUT.js.map +1 -0
  44. package/dist/chunk-D2LIXA2Y.js +65 -0
  45. package/dist/chunk-D2LIXA2Y.js.map +1 -0
  46. package/dist/{chunk-FCGFG4RV.js → chunk-D4JTQYP5.js} +3 -3
  47. package/dist/{chunk-FCGFG4RV.js.map → chunk-D4JTQYP5.js.map} +1 -1
  48. package/dist/{chunk-T5VX5DYO.js → chunk-F47U5KNW.js} +5 -5
  49. package/dist/chunk-F47U5KNW.js.map +1 -0
  50. package/dist/chunk-FEJAZFP3.js +1100 -0
  51. package/dist/chunk-FEJAZFP3.js.map +1 -0
  52. package/dist/{chunk-2B3MFHBQ.js → chunk-FK42ZGGV.js} +21 -21
  53. package/dist/chunk-FK42ZGGV.js.map +1 -0
  54. package/dist/{chunk-XISSLIMH.js → chunk-FTTNGGLA.js} +2 -2
  55. package/dist/{chunk-XISSLIMH.js.map → chunk-FTTNGGLA.js.map} +1 -1
  56. package/dist/chunk-G5YKBPBF.js +74 -0
  57. package/dist/chunk-G5YKBPBF.js.map +1 -0
  58. package/dist/chunk-GCQFVMPI.js +56 -0
  59. package/dist/chunk-GCQFVMPI.js.map +1 -0
  60. package/dist/{chunk-LDPPIBIJ.js → chunk-IJCT5IJD.js} +3 -3
  61. package/dist/{chunk-LDPPIBIJ.js.map → chunk-IJCT5IJD.js.map} +1 -1
  62. package/dist/{chunk-DGRHPJ3M.js → chunk-J6FBA7PH.js} +3 -3
  63. package/dist/{chunk-DGRHPJ3M.js.map → chunk-J6FBA7PH.js.map} +1 -1
  64. package/dist/chunk-JAMLFMDS.js +12 -0
  65. package/dist/chunk-JAMLFMDS.js.map +1 -0
  66. package/dist/{chunk-C6H7AMO4.js → chunk-LNFF2RBD.js} +9 -9
  67. package/dist/chunk-LNFF2RBD.js.map +1 -0
  68. package/dist/{chunk-QBZMY2AF.js → chunk-M62CHO3N.js} +18 -18
  69. package/dist/chunk-M62CHO3N.js.map +1 -0
  70. package/dist/{chunk-5Q4FABZQ.js → chunk-NUXW6NPP.js} +8 -8
  71. package/dist/chunk-NUXW6NPP.js.map +1 -0
  72. package/dist/{chunk-I6JQHP6D.js → chunk-NWSCYLPT.js} +78 -17
  73. package/dist/chunk-NWSCYLPT.js.map +1 -0
  74. package/dist/{chunk-63FW5ZUA.js → chunk-P3ZL6FGR.js} +7 -7
  75. package/dist/chunk-P3ZL6FGR.js.map +1 -0
  76. package/dist/chunk-P64MFQXZ.js +191 -0
  77. package/dist/chunk-P64MFQXZ.js.map +1 -0
  78. package/dist/chunk-PLIYF6KI.js +52 -0
  79. package/dist/chunk-PLIYF6KI.js.map +1 -0
  80. package/dist/chunk-PSR47JRA.js +26 -0
  81. package/dist/chunk-PSR47JRA.js.map +1 -0
  82. package/dist/{chunk-QLCDAFS7.js → chunk-Q4I4SFBD.js} +3 -3
  83. package/dist/chunk-Q4I4SFBD.js.map +1 -0
  84. package/dist/{chunk-SBJV3K4G.js → chunk-QJ6P2DW6.js} +28 -28
  85. package/dist/chunk-QJ6P2DW6.js.map +1 -0
  86. package/dist/{chunk-IP6TMT3D.js → chunk-R7QFP6EL.js} +3 -3
  87. package/dist/chunk-R7QFP6EL.js.map +1 -0
  88. package/dist/{chunk-WZWR2ELB.js → chunk-SEBU6JCK.js} +6 -6
  89. package/dist/chunk-SEBU6JCK.js.map +1 -0
  90. package/dist/{chunk-7OBL3H5P.js → chunk-SEFK4NZV.js} +3 -3
  91. package/dist/chunk-SEFK4NZV.js.map +1 -0
  92. package/dist/chunk-SRIT4NFQ.js +67 -0
  93. package/dist/chunk-SRIT4NFQ.js.map +1 -0
  94. package/dist/chunk-SY62XJFA.js +19 -0
  95. package/dist/chunk-SY62XJFA.js.map +1 -0
  96. package/dist/{chunk-SVXDWPLO.js → chunk-THD3YOOZ.js} +17 -17
  97. package/dist/chunk-THD3YOOZ.js.map +1 -0
  98. package/dist/chunk-VXFYETRK.js +58 -0
  99. package/dist/chunk-VXFYETRK.js.map +1 -0
  100. package/dist/chunk-XBX6QMR5.js +58 -0
  101. package/dist/chunk-XBX6QMR5.js.map +1 -0
  102. package/dist/{chunk-SCUT2ZCD.js → chunk-XCGZPFT7.js} +17 -17
  103. package/dist/chunk-XCGZPFT7.js.map +1 -0
  104. package/dist/chunk-XMK3T4TA.js +73 -0
  105. package/dist/chunk-XMK3T4TA.js.map +1 -0
  106. package/dist/chunk-YJ6MPS6U.js +226 -0
  107. package/dist/chunk-YJ6MPS6U.js.map +1 -0
  108. package/dist/chunk-YRYQXU3G.js +38 -0
  109. package/dist/chunk-YRYQXU3G.js.map +1 -0
  110. package/dist/{chunk-5J7BP5DI.js → chunk-YWFPMND7.js} +10 -10
  111. package/dist/chunk-YWFPMND7.js.map +1 -0
  112. package/dist/chunk-YYEGAFUE.js +94 -0
  113. package/dist/chunk-YYEGAFUE.js.map +1 -0
  114. package/dist/{chunk-TKA4LOMT.js → chunk-ZZ7H7VVX.js} +8 -8
  115. package/dist/chunk-ZZ7H7VVX.js.map +1 -0
  116. package/dist/components/data/index.d.ts +223 -74
  117. package/dist/components/data/index.js +504 -539
  118. package/dist/components/data/index.js.map +1 -1
  119. package/dist/components/layout/dashboard-page.d.ts +4 -0
  120. package/dist/components/layout/dashboard-page.js +5 -0
  121. package/dist/components/layout/dashboard-page.js.map +1 -0
  122. package/dist/components/layout/detail-page.d.ts +91 -0
  123. package/dist/components/layout/detail-page.js +6 -0
  124. package/dist/components/layout/detail-page.js.map +1 -0
  125. package/dist/components/layout/form-page.d.ts +82 -0
  126. package/dist/components/layout/form-page.js +5 -0
  127. package/dist/components/layout/form-page.js.map +1 -0
  128. package/dist/components/layout/index.d.ts +15 -0
  129. package/dist/components/layout/index.js +21 -0
  130. package/dist/components/layout/index.js.map +1 -0
  131. package/dist/components/layout/settings-page.d.ts +114 -0
  132. package/dist/components/layout/settings-page.js +6 -0
  133. package/dist/components/layout/settings-page.js.map +1 -0
  134. package/dist/components/patterns/empty-state.d.ts +74 -0
  135. package/dist/components/{ui → patterns}/empty-state.js +2 -1
  136. package/dist/components/{ui → patterns}/form-field.d.ts +2 -2
  137. package/dist/components/{ui → patterns}/form-field.js +2 -2
  138. package/dist/components/patterns/index.d.ts +18 -0
  139. package/dist/components/patterns/index.js +18 -0
  140. package/dist/components/patterns/index.js.map +1 -0
  141. package/dist/components/patterns/page-loading.d.ts +25 -0
  142. package/dist/components/patterns/page-loading.js +5 -0
  143. package/dist/components/patterns/page-loading.js.map +1 -0
  144. package/dist/components/patterns/settings-row.d.ts +42 -0
  145. package/dist/components/patterns/settings-row.js +6 -0
  146. package/dist/components/patterns/settings-row.js.map +1 -0
  147. package/dist/components/patterns/status-badge.d.ts +38 -0
  148. package/dist/components/patterns/status-badge.js +4 -0
  149. package/dist/components/patterns/status-badge.js.map +1 -0
  150. package/dist/components/patterns/toggle-row.d.ts +36 -0
  151. package/dist/components/patterns/toggle-row.js +8 -0
  152. package/dist/components/patterns/toggle-row.js.map +1 -0
  153. package/dist/components/patterns/user-avatar.d.ts +34 -0
  154. package/dist/components/patterns/user-avatar.js +5 -0
  155. package/dist/components/patterns/user-avatar.js.map +1 -0
  156. package/dist/components/ui/accessible-icon.d.ts +48 -0
  157. package/dist/components/ui/accessible-icon.js +3 -0
  158. package/dist/components/ui/accessible-icon.js.map +1 -0
  159. package/dist/components/ui/accordion.d.ts +5 -5
  160. package/dist/components/ui/accordion.js +1 -1
  161. package/dist/components/ui/alert-dialog.d.ts +10 -10
  162. package/dist/components/ui/alert-dialog.js +1 -1
  163. package/dist/components/ui/aspect-ratio.d.ts +2 -2
  164. package/dist/components/ui/aspect-ratio.js +1 -1
  165. package/dist/components/ui/avatar.d.ts +4 -4
  166. package/dist/components/ui/avatar.js +1 -1
  167. package/dist/components/ui/button.d.ts +75 -8
  168. package/dist/components/ui/button.js +1 -1
  169. package/dist/components/ui/calendar.js +2 -2
  170. package/dist/components/ui/carousel.d.ts +4 -3
  171. package/dist/components/ui/carousel.js +2 -2
  172. package/dist/components/ui/checkbox.d.ts +2 -2
  173. package/dist/components/ui/checkbox.js +1 -1
  174. package/dist/components/ui/collapsible.d.ts +4 -4
  175. package/dist/components/ui/collapsible.js +1 -1
  176. package/dist/components/ui/command-palette.d.ts +30 -0
  177. package/dist/components/ui/command-palette.js +6 -0
  178. package/dist/components/ui/command-palette.js.map +1 -0
  179. package/dist/components/ui/command.d.ts +9 -9
  180. package/dist/components/ui/command.js +2 -2
  181. package/dist/components/ui/context-menu.d.ts +15 -15
  182. package/dist/components/ui/context-menu.js +1 -1
  183. package/dist/components/ui/date-picker.js +4 -4
  184. package/dist/components/ui/dialog.d.ts +9 -9
  185. package/dist/components/ui/dialog.js +1 -1
  186. package/dist/components/ui/drawer.d.ts +7 -7
  187. package/dist/components/ui/dropdown-menu.d.ts +15 -15
  188. package/dist/components/ui/dropdown-menu.js +1 -1
  189. package/dist/components/ui/hover-card.d.ts +4 -4
  190. package/dist/components/ui/hover-card.js +1 -1
  191. package/dist/components/ui/input-otp.d.ts +2 -2
  192. package/dist/components/ui/label.d.ts +2 -2
  193. package/dist/components/ui/label.js +1 -1
  194. package/dist/components/ui/menubar.d.ts +16 -16
  195. package/dist/components/ui/menubar.js +1 -1
  196. package/dist/components/ui/navigation-menu.d.ts +9 -9
  197. package/dist/components/ui/navigation-menu.js +1 -1
  198. package/dist/components/ui/pagination.js +2 -2
  199. package/dist/components/ui/password-toggle-field.d.ts +121 -0
  200. package/dist/components/ui/password-toggle-field.js +4 -0
  201. package/dist/components/ui/password-toggle-field.js.map +1 -0
  202. package/dist/components/ui/popover.d.ts +4 -4
  203. package/dist/components/ui/popover.js +1 -1
  204. package/dist/components/ui/radio-group.d.ts +3 -3
  205. package/dist/components/ui/radio-group.js +1 -1
  206. package/dist/components/ui/resizable.d.ts +1 -1
  207. package/dist/components/ui/scroll-area.d.ts +60 -3
  208. package/dist/components/ui/scroll-area.js +1 -1
  209. package/dist/components/ui/select.d.ts +9 -9
  210. package/dist/components/ui/select.js +1 -1
  211. package/dist/components/ui/sheet.d.ts +11 -9
  212. package/dist/components/ui/sheet.js +1 -1
  213. package/dist/components/ui/slider.d.ts +2 -2
  214. package/dist/components/ui/slider.js +1 -1
  215. package/dist/components/ui/switch.d.ts +2 -2
  216. package/dist/components/ui/switch.js +1 -1
  217. package/dist/components/ui/tabs.d.ts +29 -14
  218. package/dist/components/ui/tabs.js +1 -1
  219. package/dist/components/ui/toggle-group.d.ts +3 -3
  220. package/dist/components/ui/toggle-group.js +2 -2
  221. package/dist/components/ui/toggle.d.ts +2 -2
  222. package/dist/components/ui/toggle.js +1 -1
  223. package/dist/components/ui/toolbar.d.ts +104 -0
  224. package/dist/components/ui/toolbar.js +6 -0
  225. package/dist/components/ui/toolbar.js.map +1 -0
  226. package/dist/components/ui/tooltip.d.ts +46 -4
  227. package/dist/components/ui/tooltip.js +1 -1
  228. package/dist/components/ui/visually-hidden.d.ts +48 -0
  229. package/dist/components/ui/visually-hidden.js +4 -0
  230. package/dist/components/ui/visually-hidden.js.map +1 -0
  231. package/dist/dashboard-page-C0TihRl5.d.ts +107 -0
  232. package/dist/hooks/index.d.ts +5 -3
  233. package/dist/hooks/index.js +10 -5
  234. package/dist/hooks/use-data-filters.d.ts +1 -1
  235. package/dist/hooks/use-data-filters.js +2 -2
  236. package/dist/hooks/use-keyboard-navigation.d.ts +58 -2
  237. package/dist/hooks/use-keyboard-navigation.js +1 -1
  238. package/dist/hooks/use-resource-page.d.ts +3 -2
  239. package/dist/hooks/use-resource-page.js +2 -2
  240. package/dist/hooks/use-saved-views.d.ts +28 -0
  241. package/dist/hooks/use-saved-views.js +3 -0
  242. package/dist/hooks/use-saved-views.js.map +1 -0
  243. package/dist/hooks/use-view-preference.d.ts +1 -1
  244. package/dist/hooks/use-view-preference.js +1 -1
  245. package/dist/index.d.ts +25 -26
  246. package/dist/index.js +55 -38
  247. package/dist/{navigation-qI86Ldug.d.ts → navigation-CpOEyUSb.d.ts} +4 -0
  248. package/dist/spacing-BS6qECD4.d.ts +191 -0
  249. package/dist/split-Dk9f4Mi0.d.ts +57 -0
  250. package/dist/{use-resource-page-B-CFcikK.d.ts → use-resource-page-CPs6wjKt.d.ts} +10 -2
  251. package/dist/view-settings--KXNT_jE.d.ts +12 -0
  252. package/package.json +77 -32
  253. package/dist/chunk-2B3MFHBQ.js.map +0 -1
  254. package/dist/chunk-2MXMWBDV.js.map +0 -1
  255. package/dist/chunk-4V4H2ZM7.js.map +0 -1
  256. package/dist/chunk-5J7BP5DI.js.map +0 -1
  257. package/dist/chunk-5Q4FABZQ.js.map +0 -1
  258. package/dist/chunk-63FW5ZUA.js.map +0 -1
  259. package/dist/chunk-7OBL3H5P.js.map +0 -1
  260. package/dist/chunk-AI6CCNWK.js.map +0 -1
  261. package/dist/chunk-C6H7AMO4.js.map +0 -1
  262. package/dist/chunk-EI5EGKHL.js +0 -32
  263. package/dist/chunk-EI5EGKHL.js.map +0 -1
  264. package/dist/chunk-I6JQHP6D.js.map +0 -1
  265. package/dist/chunk-IP6TMT3D.js.map +0 -1
  266. package/dist/chunk-JJ4NOMMI.js +0 -73
  267. package/dist/chunk-JJ4NOMMI.js.map +0 -1
  268. package/dist/chunk-JXI2MYL3.js.map +0 -1
  269. package/dist/chunk-KBS4BHME.js +0 -11
  270. package/dist/chunk-KBS4BHME.js.map +0 -1
  271. package/dist/chunk-LRXDZBV2.js +0 -26
  272. package/dist/chunk-LRXDZBV2.js.map +0 -1
  273. package/dist/chunk-NJMO3VPA.js.map +0 -1
  274. package/dist/chunk-O4B5ALO7.js.map +0 -1
  275. package/dist/chunk-OCTV3S4I.js +0 -29
  276. package/dist/chunk-OCTV3S4I.js.map +0 -1
  277. package/dist/chunk-QBZMY2AF.js.map +0 -1
  278. package/dist/chunk-QLCDAFS7.js.map +0 -1
  279. package/dist/chunk-SBJV3K4G.js.map +0 -1
  280. package/dist/chunk-SCUT2ZCD.js.map +0 -1
  281. package/dist/chunk-SVXDWPLO.js.map +0 -1
  282. package/dist/chunk-T465NJRL.js +0 -134
  283. package/dist/chunk-T465NJRL.js.map +0 -1
  284. package/dist/chunk-T5VX5DYO.js.map +0 -1
  285. package/dist/chunk-TKA4LOMT.js.map +0 -1
  286. package/dist/chunk-UGHQFQOE.js.map +0 -1
  287. package/dist/chunk-WALXVR6V.js +0 -9
  288. package/dist/chunk-WALXVR6V.js.map +0 -1
  289. package/dist/chunk-WZWR2ELB.js.map +0 -1
  290. package/dist/chunk-YZEA5TGK.js.map +0 -1
  291. package/dist/chunk-ZDAT5JDH.js.map +0 -1
  292. package/dist/components/ui/empty-state.d.ts +0 -22
  293. /package/dist/components/{ui → patterns}/empty-state.js.map +0 -0
  294. /package/dist/components/{ui → patterns}/form-field.js.map +0 -0
  295. /package/dist/{ViewToggle-DDe_Luj2.d.ts → view-toggle-DDe_Luj2.d.ts} +0 -0
@@ -0,0 +1,4 @@
1
+ import 'react';
2
+ export { D as DashboardPage, a as DashboardPageProps } from '../../dashboard-page-C0TihRl5.js';
3
+ import 'class-variance-authority/types';
4
+ import 'class-variance-authority';
@@ -0,0 +1,5 @@
1
+ export { DashboardPage } from '../../chunk-ARJI2JUV.js';
2
+ import '../../chunk-AVFZ4P4B.js';
3
+ import '../../chunk-NZ5WBA4R.js';
4
+ //# sourceMappingURL=dashboard-page.js.map
5
+ //# sourceMappingURL=dashboard-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"dashboard-page.js"}
@@ -0,0 +1,91 @@
1
+ import * as React from 'react';
2
+ import { a as SplitBreakpoint } from '../../split-Dk9f4Mi0.js';
3
+ import 'class-variance-authority/types';
4
+ import 'class-variance-authority';
5
+
6
+ interface DetailPageProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
7
+ /** Page title. Rendered as the page's single `<h1>`. */
8
+ title: React.ReactNode;
9
+ /** Supporting line under the title — a status, an owner, a last-updated. */
10
+ subtitle?: React.ReactNode;
11
+ /** Slot above the title: a `Breadcrumb`, a back link, a `StatusBadge`. */
12
+ breadcrumb?: React.ReactNode;
13
+ /** Trailing controls for the whole record — Edit, Archive, a menu. */
14
+ actions?: React.ReactNode;
15
+ /**
16
+ * Metadata column. Omit it and the content region takes the full width —
17
+ * no empty track, no `Split`, no wrapper to reason about.
18
+ */
19
+ sidebar?: React.ReactNode;
20
+ /**
21
+ * Breakpoint at and above which the sidebar sits beside the content.
22
+ * Below it the two stack, content first. Default `"lg"`.
23
+ */
24
+ sidebarAt?: SplitBreakpoint;
25
+ /** Stable test/automation selector (emitted as `data-testid`). */
26
+ testID?: string;
27
+ }
28
+ /**
29
+ * DetailPage — one record's full view: a title row with actions, a primary
30
+ * content region, and a metadata sidebar that drops below the content on
31
+ * small screens.
32
+ *
33
+ * ```tsx
34
+ * <DetailPage
35
+ * breadcrumb={<Breadcrumb>…</Breadcrumb>}
36
+ * title={person.name}
37
+ * subtitle={person.role}
38
+ * actions={<Button testID="edit">Edit</Button>}
39
+ * sidebar={
40
+ * <Stack gap="lg">
41
+ * <StatCard label="Sessions" value={12} />
42
+ * <SettingsRow label="Owner">{person.owner}</SettingsRow>
43
+ * </Stack>
44
+ * }
45
+ * >
46
+ * <Section title="Timeline">{…}</Section>
47
+ * </DetailPage>
48
+ * ```
49
+ *
50
+ * `Split` is the backbone, at `ratio="2/3"` — content takes eight of twelve
51
+ * tracks, metadata four. Reading order is content-then-metadata in the DOM,
52
+ * which is also the order they stack in, so a phone shows the record before
53
+ * its provenance rather than after it.
54
+ *
55
+ * This is a **layout**: it positions three regions and never asks what is in
56
+ * them. Fetching the record is the caller's job — or
57
+ * `ResourceDetailPage` from `@marktiderman/genesis-ui/data`, which is this
58
+ * component with `useOne` wired to its title, content and sidebar.
59
+ *
60
+ * The header row is markup, not a component, and deliberately not
61
+ * `PageHeader` — which now sits in this same folder, so composing it would
62
+ * be legal. It was tried and measured, and it does not fit:
63
+ *
64
+ * 1. `PageHeader.title` and `.subtitle` are `string`. Every template's title
65
+ * would narrow from `ReactNode`, and a record heading is the one place a
66
+ * `StatusBadge` beside the name is routine.
67
+ * 2. `@marktiderman/genesis-ui/detail-page`'s emitted closure goes from
68
+ * 5.8 KB / 5 chunks to 34.4 KB / 14, and picks up a runtime dependency on
69
+ * `radix-ui` (Popover, Collapsible, Switch, and Select via `ViewSettings`)
70
+ * — for a header that renders a title, a line under it and a slot, and
71
+ * mounts none of that. Per-component subpaths exist so a consumer does
72
+ * not pay for what they did not import.
73
+ * 3. `PageHeader` has no slot above the title, and hard-codes
74
+ * `data-testid="page-title"` on its `<h1>`.
75
+ *
76
+ * Not a reason, having checked it: RSC. `PageHeader` is `"use client"`, but
77
+ * the emitted `detail-page.js` is NOT stamped with the directive when it
78
+ * imports it — a server module importing a client module is the ordinary
79
+ * boundary. What would make folding correct is upstream: widen `title` /
80
+ * `subtitle` to `ReactNode`, and lift the list chrome out of `PageHeader`.
81
+ *
82
+ * Width is deliberately not an opinion here. `Container` already answers
83
+ * "how wide is this page", so wrap rather than duplicate:
84
+ * `<Container size="lg"><DetailPage … /></Container>`. Under `AppShell`,
85
+ * whose `<main>` already pads, most pages want neither.
86
+ *
87
+ * @stability Beta
88
+ */
89
+ declare const DetailPage: React.ForwardRefExoticComponent<DetailPageProps & React.RefAttributes<HTMLDivElement>>;
90
+
91
+ export { DetailPage, type DetailPageProps };
@@ -0,0 +1,6 @@
1
+ export { DetailPage } from '../../chunk-AFZ76Q26.js';
2
+ import '../../chunk-D2LIXA2Y.js';
3
+ import '../../chunk-AVFZ4P4B.js';
4
+ import '../../chunk-NZ5WBA4R.js';
5
+ //# sourceMappingURL=detail-page.js.map
6
+ //# sourceMappingURL=detail-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"detail-page.js"}
@@ -0,0 +1,82 @@
1
+ import * as React from 'react';
2
+
3
+ interface FormPageProps extends Omit<React.FormHTMLAttributes<HTMLFormElement>, "title"> {
4
+ /** Page title. Rendered as the page's single `<h1>`. */
5
+ title: React.ReactNode;
6
+ /** Supporting copy under the title — what this form is for. */
7
+ description?: React.ReactNode;
8
+ /**
9
+ * Validation summary. Rendered in a destructive `Alert` above the fields
10
+ * when set, so the summary announces itself (`role="alert"`) and sits
11
+ * where a keyboard user lands after a failed submit. Pass a list, a
12
+ * sentence, or your own markup — the copy is yours.
13
+ */
14
+ errors?: React.ReactNode;
15
+ /**
16
+ * Submit / cancel controls. Rendered in a bar that sticks to the bottom of
17
+ * the scroll container, so the primary action stays reachable on a form
18
+ * longer than the viewport.
19
+ */
20
+ actions?: React.ReactNode;
21
+ /** Stable test/automation selector (emitted as `data-testid`). */
22
+ testID?: string;
23
+ }
24
+ /**
25
+ * FormPage — a titled form: header, validation summary, a body of sections,
26
+ * and a sticky action bar.
27
+ *
28
+ * It renders a real `<form>` and forwards `onSubmit` (and every other form
29
+ * attribute), so a plain `type="submit"` button in `actions` submits it with
30
+ * no `form=` wiring. That is what keeps it usable for a HAND-WRITTEN form —
31
+ * `react-hook-form`, `useActionState`, or an uncontrolled `<form action>` —
32
+ * rather than only for one of them.
33
+ *
34
+ * **Do not put a `ResourceForm` inside it.** `ResourceForm` renders its own
35
+ * `<form>`, and nesting one form in another is invalid HTML: the browser
36
+ * drops the inner element, SSR and hydration disagree about the tree, and a
37
+ * submit fires both handlers. `ResourceForm` is the data-bound *alternative*
38
+ * to this template — it already answers "bind a form to a resource", with a
39
+ * `layout="page"` mode of its own — not something this one wraps.
40
+ *
41
+ * ```tsx
42
+ * <FormPage
43
+ * title="New engagement"
44
+ * description="Both the coach and the client will be notified."
45
+ * errors={submitFailed ? "Fix the highlighted fields." : undefined}
46
+ * onSubmit={handleSubmit(onValid)}
47
+ * actions={
48
+ * <>
49
+ * <Button variant="ghost" type="button" testID="cancel">Cancel</Button>
50
+ * <Button type="submit" testID="save">Save</Button>
51
+ * </>
52
+ * }
53
+ * >
54
+ * <Section title="Basics">
55
+ * <FormField label="Name">…</FormField>
56
+ * </Section>
57
+ * </FormPage>
58
+ * ```
59
+ *
60
+ * Sections are just children — `Section` is the natural one, but any node
61
+ * works. The body spaces them at `gap-8`, wider than the page's own `gap-6`,
62
+ * so section boundaries read as boundaries rather than as more fields.
63
+ *
64
+ * The sticky bar needs a scrolling ancestor to stick to, which `AppShell`'s
65
+ * `<main>` provides. It renders only when `actions` is set: an empty sticky
66
+ * strip is a border floating over the content for no reason.
67
+ *
68
+ * This is a **layout** — it positions a form, it does not submit one. Binding
69
+ * fields to a resource is `ResourceForm`'s job
70
+ * (`@marktiderman/genesis-ui/data`), which is already the one home for that
71
+ * question. The header row is markup, not a component, and deliberately not
72
+ * `PageHeader` — see `./detail-page` for the measured reasons composing it
73
+ * was rejected across all four templates (`title: string`, and a 6x jump in
74
+ * the emitted per-component closure plus a new `radix-ui` runtime dependency
75
+ * for chrome none of them render). Width is left to `Container` for the
76
+ * one-home reason — wrap, don't duplicate.
77
+ *
78
+ * @stability Beta
79
+ */
80
+ declare const FormPage: React.ForwardRefExoticComponent<FormPageProps & React.RefAttributes<HTMLFormElement>>;
81
+
82
+ export { FormPage, type FormPageProps };
@@ -0,0 +1,5 @@
1
+ export { FormPage } from '../../chunk-PLIYF6KI.js';
2
+ import '../../chunk-OZZTPE7F.js';
3
+ import '../../chunk-NZ5WBA4R.js';
4
+ //# sourceMappingURL=form-page.js.map
5
+ //# sourceMappingURL=form-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"form-page.js"}
@@ -0,0 +1,15 @@
1
+ export { A as AppShell, a as AppShellOptions, b as AppShellProps, N as NavItem, P as PageHeader, c as PageHeaderOptions, d as PageHeaderProps } from '../../AppShell-BJarYZzz.js';
2
+ export { DetailPage, DetailPageProps } from './detail-page.js';
3
+ export { FormPage, FormPageProps } from './form-page.js';
4
+ export { D as DashboardPage, a as DashboardPageProps, G as Grid, b as GridProps, g as gridVariants } from '../../dashboard-page-C0TihRl5.js';
5
+ export { SettingsPage, SettingsPageProps, SettingsPageSection } from './settings-page.js';
6
+ 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';
7
+ export { S as Split, a as SplitBreakpoint, b as SplitProps, c as SplitRatio, s as splitVariants } from '../../split-Dk9f4Mi0.js';
8
+ import 'react/jsx-runtime';
9
+ import 'react';
10
+ import 'lucide-react';
11
+ import '../../view-toggle-DDe_Luj2.js';
12
+ import '../../hooks/use-view-settings.js';
13
+ import '../../navigation-CpOEyUSb.js';
14
+ import 'class-variance-authority/types';
15
+ import 'class-variance-authority';
@@ -0,0 +1,21 @@
1
+ export { AppShell, PageHeader } from '../../chunk-FEJAZFP3.js';
2
+ import '../../chunk-46TZGMFW.js';
3
+ export { Container, Stack, containerVariants, stackVariants } from '../../chunk-4CQHPWJD.js';
4
+ export { FormPage } from '../../chunk-PLIYF6KI.js';
5
+ import '../../chunk-OZZTPE7F.js';
6
+ export { Section, SettingsPage, sectionHeadingVariants } from '../../chunk-P64MFQXZ.js';
7
+ import '../../chunk-B2GIBUQD.js';
8
+ import '../../chunk-NPNADZHM.js';
9
+ import '../../chunk-FK42ZGGV.js';
10
+ import '../../chunk-22XB3Q6H.js';
11
+ import '../../chunk-27ELYTGE.js';
12
+ import '../../chunk-NWSCYLPT.js';
13
+ import '../../chunk-F47U5KNW.js';
14
+ export { DashboardPage, Grid, gridVariants } from '../../chunk-ARJI2JUV.js';
15
+ export { DetailPage } from '../../chunk-AFZ76Q26.js';
16
+ export { Split, splitVariants } from '../../chunk-D2LIXA2Y.js';
17
+ export { GAP_CLASSES, spaceScale } from '../../chunk-AVFZ4P4B.js';
18
+ import '../../chunk-NZ5WBA4R.js';
19
+ import '../../chunk-6NPEMLBA.js';
20
+ //# sourceMappingURL=index.js.map
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
@@ -0,0 +1,114 @@
1
+ import * as React from 'react';
2
+ import { a as SplitBreakpoint } from '../../split-Dk9f4Mi0.js';
3
+ import 'class-variance-authority/types';
4
+ import 'class-variance-authority';
5
+
6
+ /**
7
+ * One region of a settings surface: a nav-rail entry and the panel it jumps
8
+ * to, declared together so the two can't drift apart.
9
+ *
10
+ * `@marktiderman/genesis-ui-native` exports a type of the same name whose
11
+ * shape differs — it carries `rows: SettingsPageRow[]` and a `footnote`,
12
+ * because a native settings screen is a sectioned list of drill-in rows
13
+ * rather than a scrollable surface with a jump rail (a rail has nowhere to
14
+ * live on a phone). The shared field names mean the same thing on both:
15
+ * `id` keys the section, `title` names it. That parity is deliberate, and
16
+ * it is the same accommodation `Stack` documents for its own two-surface
17
+ * shape difference.
18
+ */
19
+ interface SettingsPageSection {
20
+ /**
21
+ * Fragment id. The rail links to `#${id}` and the `<section>` carries it,
22
+ * so the jump works with no JavaScript and survives a deep link.
23
+ */
24
+ id: string;
25
+ /**
26
+ * Rail entry and section heading — one string, so they always match.
27
+ *
28
+ * Named `title` rather than `label` to match the native surface's word for
29
+ * the same thing. Required here where native's is optional: a rail entry
30
+ * with no name is a link to nowhere, whereas an unlabeled native section
31
+ * is a normal grouping.
32
+ */
33
+ title: string;
34
+ /** Supporting copy under the section heading. */
35
+ description?: React.ReactNode;
36
+ /** The rows themselves — `SettingsRow` / `ToggleRow` are the natural ones. */
37
+ content: React.ReactNode;
38
+ }
39
+ interface SettingsPageProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
40
+ /** Page title. Rendered as the page's single `<h1>`. */
41
+ title: React.ReactNode;
42
+ /** Supporting copy under the title. */
43
+ description?: React.ReactNode;
44
+ /** Page-level trailing controls — "Save all", a workspace switcher. */
45
+ actions?: React.ReactNode;
46
+ /** The settings regions, in the order they appear in the rail. */
47
+ sections: SettingsPageSection[];
48
+ /**
49
+ * Breakpoint at and above which the rail sits beside the sections. Below
50
+ * it the rail stacks above them, where it reads as jump links. Default
51
+ * `"md"`.
52
+ */
53
+ navAt?: SplitBreakpoint;
54
+ /** Stable test/automation selector (emitted as `data-testid`). */
55
+ testID?: string;
56
+ }
57
+ /**
58
+ * SettingsPage — a sectioned settings surface with a nav rail for jumping
59
+ * between sections.
60
+ *
61
+ * ```tsx
62
+ * <SettingsPage
63
+ * title="Workspace settings"
64
+ * sections={[
65
+ * {
66
+ * id: "profile",
67
+ * title: "Profile",
68
+ * content: <SettingsRow label="Display name" htmlFor="name"><Input id="name" /></SettingsRow>,
69
+ * },
70
+ * {
71
+ * id: "notifications",
72
+ * title: "Notifications",
73
+ * description: "How and when we contact you.",
74
+ * content: <ToggleRow label="Weekly digest" checked={digest} onCheckedChange={setDigest} />,
75
+ * },
76
+ * ]}
77
+ * />
78
+ * ```
79
+ *
80
+ * Sections are a prop, not children, because the rail has to know their
81
+ * titles and ids. Declaring each once is what makes "the rail says
82
+ * Notifications and the heading says Alerts" unrepresentable.
83
+ *
84
+ * **The rail appears only when there is more than one section** — a rail
85
+ * with a single entry is a link to where you already are. That is an
86
+ * automatic consequence of the content rather than a prop, so nobody has to
87
+ * remember to turn it off.
88
+ *
89
+ * The rail is `sticky top-6` with no breakpoint prefix, and that is correct
90
+ * in both modes rather than an oversight: side by side it is a stretched
91
+ * grid item, so it sticks for the length of the sections; stacked, its pane
92
+ * is exactly its own height, so sticky positioning has nothing to travel
93
+ * and it simply scrolls away. One class, right twice.
94
+ *
95
+ * Each section renders through `Section`, so it is a real `<section>` named
96
+ * by its own heading via `aria-labelledby` — the thing that makes it a
97
+ * landmark a screen-reader user can jump to, which is the whole promise the
98
+ * visual rail is making.
99
+ *
100
+ * The header row is markup, not a component, and deliberately not
101
+ * `PageHeader` — see `./detail-page` for the measured reasons composing it
102
+ * was rejected across all four templates. Width is left to `Container` —
103
+ * wrap, don't duplicate.
104
+ *
105
+ * This is a **layout**: it positions rows, it does not persist them. Where a
106
+ * setting is stored, and when, is the app's. Genesis's answer for the
107
+ * storing half is `useStorage` from `@marktiderman/genesis-core`, which a
108
+ * caller wires up outside this component.
109
+ *
110
+ * @stability Beta
111
+ */
112
+ declare const SettingsPage: React.ForwardRefExoticComponent<SettingsPageProps & React.RefAttributes<HTMLDivElement>>;
113
+
114
+ export { SettingsPage, type SettingsPageProps, type SettingsPageSection };
@@ -0,0 +1,6 @@
1
+ export { SettingsPage } from '../../chunk-P64MFQXZ.js';
2
+ import '../../chunk-D2LIXA2Y.js';
3
+ import '../../chunk-AVFZ4P4B.js';
4
+ import '../../chunk-NZ5WBA4R.js';
5
+ //# sourceMappingURL=settings-page.js.map
6
+ //# sourceMappingURL=settings-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"settings-page.js"}
@@ -0,0 +1,74 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+ import { LucideIcon } from 'lucide-react';
4
+
5
+ interface EmptyStateProps {
6
+ icon?: LucideIcon;
7
+ /**
8
+ * Bold heading. Optional — falls back to `message` (deprecated), then a
9
+ * generic default. Superseded by fixed copy whenever `hasFilters` is true.
10
+ */
11
+ title?: string;
12
+ description?: string;
13
+ action?: React.ReactNode;
14
+ className?: string;
15
+ /**
16
+ * @deprecated Use `title` instead. Kept for source compatibility with the
17
+ * former `@marktiderman/genesis-ui/data` EmptyState, which used `message`
18
+ * in place of `title`/`description`. Ignored whenever `title` is also
19
+ * provided.
20
+ */
21
+ message?: string;
22
+ /**
23
+ * Renders a "no results match your current filters" state — superseding
24
+ * `title`/`description` — and, when `onClearFilters` is also given, a
25
+ * "Clear all filters" action in place of `action`.
26
+ */
27
+ hasFilters?: boolean;
28
+ /** Invoked by the "Clear all filters" action shown when `hasFilters` is true. */
29
+ onClearFilters?: () => void;
30
+ }
31
+ /**
32
+ * EmptyState — what to show when a list, page, or panel has no data.
33
+ *
34
+ * Canonical for `@marktiderman/genesis-ui`. The former
35
+ * `@marktiderman/genesis-ui/data` EmptyState is now a deprecated re-export of
36
+ * this component (see `../data/EmptyState`) — its `hasFilters` /
37
+ * `onClearFilters` / `message` props all landed here, so nothing consuming
38
+ * that subpath needs a source change. Note that the *rendered output* is this
39
+ * component's, not the old `/data` one's: see that file's `@deprecated` block
40
+ * for the visual differences a `/data` consumer will see.
41
+ *
42
+ * Precedence: `hasFilters` wins over everything the caller passed — it
43
+ * replaces the heading with fixed "no results match your filters" copy,
44
+ * suppresses `description`, and (given `onClearFilters`) replaces `action`
45
+ * with a "Clear all filters" button.
46
+ *
47
+ * @stability Beta
48
+ */
49
+ declare function EmptyState({ icon: Icon, title, description, action, className, message, hasFilters, onClearFilters, }: EmptyStateProps): react_jsx_runtime.JSX.Element;
50
+ /**
51
+ * Preset `EmptyState` for an empty roadmap / feature list.
52
+ *
53
+ * @stability Beta
54
+ */
55
+ declare function NoFeaturesFound({ onCreate }: {
56
+ onCreate?: () => void;
57
+ }): react_jsx_runtime.JSX.Element;
58
+ /**
59
+ * Preset `EmptyState` for a feedback inbox with nothing in it yet.
60
+ *
61
+ * @stability Beta
62
+ */
63
+ declare function NoFeedbackFound(): react_jsx_runtime.JSX.Element;
64
+ /**
65
+ * Preset `EmptyState` for a search or filter that matched nothing.
66
+ *
67
+ * @stability Beta
68
+ */
69
+ declare function NoSearchResults({ query, onClear, }: {
70
+ query?: string;
71
+ onClear?: () => void;
72
+ }): react_jsx_runtime.JSX.Element;
73
+
74
+ export { EmptyState, type EmptyStateProps, NoFeaturesFound, NoFeedbackFound, NoSearchResults };
@@ -1,4 +1,5 @@
1
- export { EmptyState, NoFeaturesFound, NoFeedbackFound, NoSearchResults } from '../../chunk-ZDAT5JDH.js';
1
+ export { EmptyState, NoFeaturesFound, NoFeedbackFound, NoSearchResults } from '../../chunk-65SPT7EA.js';
2
+ import '../../chunk-NWSCYLPT.js';
2
3
  import '../../chunk-NZ5WBA4R.js';
3
4
  //# sourceMappingURL=empty-state.js.map
4
5
  //# sourceMappingURL=empty-state.js.map
@@ -1,8 +1,8 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
- import { Label } from './label.js';
3
+ import { Label } from '../ui/label.js';
4
4
  import 'class-variance-authority/types';
5
- import '@radix-ui/react-label';
5
+ import 'radix-ui';
6
6
  import 'class-variance-authority';
7
7
 
8
8
  declare function FormField({ className, children, ...props }: React.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
@@ -1,5 +1,5 @@
1
- export { FormDescription, FormError, FormField, FormLabel } from '../../chunk-IP6TMT3D.js';
2
- import '../../chunk-T5VX5DYO.js';
1
+ export { FormDescription, FormError, FormField, FormLabel } from '../../chunk-R7QFP6EL.js';
2
+ import '../../chunk-F47U5KNW.js';
3
3
  import '../../chunk-NZ5WBA4R.js';
4
4
  //# sourceMappingURL=form-field.js.map
5
5
  //# sourceMappingURL=form-field.js.map
@@ -0,0 +1,18 @@
1
+ export { EmptyState, EmptyStateProps, NoFeaturesFound, NoFeedbackFound, NoSearchResults } from './empty-state.js';
2
+ export { FormDescription, FormError, FormField, FormLabel } from './form-field.js';
3
+ export { PageLoading, PageLoadingProps, pageLoadingVariants } from './page-loading.js';
4
+ export { SettingsRow, SettingsRowProps } from './settings-row.js';
5
+ export { StatusBadge, StatusBadgeProps, StatusBadgeStatus, statusBadgeVariants } from './status-badge.js';
6
+ export { ToggleRow, ToggleRowProps } from './toggle-row.js';
7
+ export { UserAvatar, UserAvatarProps, userAvatarVariants } from './user-avatar.js';
8
+ export { V as ViewMode, a as ViewToggle } from '../../view-toggle-DDe_Luj2.js';
9
+ export { V as ViewSettings } from '../../view-settings--KXNT_jE.js';
10
+ import 'react/jsx-runtime';
11
+ import 'react';
12
+ import 'lucide-react';
13
+ import '../ui/label.js';
14
+ import 'class-variance-authority/types';
15
+ import 'radix-ui';
16
+ import 'class-variance-authority';
17
+ import '@marktiderman/genesis-design-system/tokens';
18
+ import '../../hooks/use-view-settings.js';
@@ -0,0 +1,18 @@
1
+ export { ViewSettings, ViewToggle } from '../../chunk-46TZGMFW.js';
2
+ export { StatusBadge, statusBadgeVariants } from '../../chunk-XMK3T4TA.js';
3
+ export { ToggleRow } from '../../chunk-6M4NHHKG.js';
4
+ export { UserAvatar, userAvatarVariants } from '../../chunk-XBX6QMR5.js';
5
+ import '../../chunk-LNFF2RBD.js';
6
+ export { SettingsRow } from '../../chunk-A7AHVDG7.js';
7
+ import '../../chunk-FK42ZGGV.js';
8
+ import '../../chunk-22XB3Q6H.js';
9
+ import '../../chunk-27ELYTGE.js';
10
+ export { EmptyState, NoFeaturesFound, NoFeedbackFound, NoSearchResults } from '../../chunk-65SPT7EA.js';
11
+ import '../../chunk-NWSCYLPT.js';
12
+ export { PageLoading, pageLoadingVariants } from '../../chunk-YRYQXU3G.js';
13
+ import '../../chunk-OVU3Z2MT.js';
14
+ export { FormDescription, FormError, FormField, FormLabel } from '../../chunk-R7QFP6EL.js';
15
+ import '../../chunk-F47U5KNW.js';
16
+ import '../../chunk-NZ5WBA4R.js';
17
+ //# sourceMappingURL=index.js.map
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
@@ -0,0 +1,25 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as class_variance_authority_types from 'class-variance-authority/types';
3
+ import { VariantProps } from 'class-variance-authority';
4
+
5
+ declare const pageLoadingVariants: (props?: ({
6
+ variant?: "page" | "section" | null | undefined;
7
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
8
+ interface PageLoadingProps extends VariantProps<typeof pageLoadingVariants> {
9
+ /** Optional message shown under the spinner (e.g. "Loading dashboard…"). */
10
+ label?: string;
11
+ className?: string;
12
+ /** Stable test/automation selector (emitted as `data-testid`). */
13
+ testID?: string;
14
+ }
15
+ /**
16
+ * PageLoading — full-page or in-section loading state: a centered `Spinner`
17
+ * with an optional message. The loading-state counterpart to `EmptyState`.
18
+ * Reach for `Skeleton` instead when the placeholder should mimic the shape
19
+ * of the content that's arriving rather than a generic wait state.
20
+ *
21
+ * @stability Beta
22
+ */
23
+ declare function PageLoading({ label, variant, className, testID }: PageLoadingProps): react_jsx_runtime.JSX.Element;
24
+
25
+ export { PageLoading, type PageLoadingProps, pageLoadingVariants };
@@ -0,0 +1,5 @@
1
+ export { PageLoading, pageLoadingVariants } from '../../chunk-YRYQXU3G.js';
2
+ import '../../chunk-OVU3Z2MT.js';
3
+ import '../../chunk-NZ5WBA4R.js';
4
+ //# sourceMappingURL=page-loading.js.map
5
+ //# sourceMappingURL=page-loading.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"page-loading.js"}
@@ -0,0 +1,42 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+
4
+ interface SettingsRowProps {
5
+ /** Row label. */
6
+ label: React.ReactNode;
7
+ /** Supporting copy shown under the label, muted. */
8
+ description?: React.ReactNode;
9
+ /** Control(s) rendered on the trailing side. */
10
+ children?: React.ReactNode;
11
+ /**
12
+ * `id` of the control this row labels (e.g. a Switch), for a11y and
13
+ * click-to-focus. Supply it whenever the trailing control is labelable —
14
+ * the label text is then a real `<label for>`. Omit it for rows whose
15
+ * control names itself (a Button) or has none (a Badge); the text renders
16
+ * as a plain `<span>` rather than a `<label>` associated with nothing.
17
+ */
18
+ htmlFor?: string;
19
+ /**
20
+ * `id` applied to the description paragraph so the trailing control can point
21
+ * at it with `aria-describedby` — otherwise the description is an unrelated
22
+ * `<p>` that a screen reader skips while navigating controls. `ToggleRow`
23
+ * wires this automatically; pass it yourself when supplying your own control.
24
+ */
25
+ descriptionId?: string;
26
+ /** Dims the row to indicate the control it wraps is disabled. */
27
+ disabled?: boolean;
28
+ className?: string;
29
+ /** Stable test/automation selector (emitted as `data-testid`). */
30
+ testID?: string;
31
+ }
32
+ /**
33
+ * SettingsRow — label + description on one side, an arbitrary trailing
34
+ * control (Switch, Select, Button, Badge, ...) on the other. This is the
35
+ * shared layout behind every settings/preferences list row; see `ToggleRow`
36
+ * for the common label+description+Switch case pre-wired.
37
+ *
38
+ * @stability Beta
39
+ */
40
+ declare function SettingsRow({ label, description, children, htmlFor, descriptionId, disabled, className, testID, }: SettingsRowProps): react_jsx_runtime.JSX.Element;
41
+
42
+ export { SettingsRow, type SettingsRowProps };
@@ -0,0 +1,6 @@
1
+ export { SettingsRow } from '../../chunk-A7AHVDG7.js';
2
+ import '../../chunk-R7QFP6EL.js';
3
+ import '../../chunk-F47U5KNW.js';
4
+ import '../../chunk-NZ5WBA4R.js';
5
+ //# sourceMappingURL=settings-row.js.map
6
+ //# sourceMappingURL=settings-row.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"settings-row.js"}