@omnitron-dev/prism 0.1.3 → 0.3.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 (839) hide show
  1. package/dist/accessibility/index.d.ts +7 -151
  2. package/dist/accessibility/index.d.ts.map +1 -0
  3. package/dist/accessibility/index.js +0 -1
  4. package/dist/accessibility/index.js.map +1 -1
  5. package/dist/accessibility/vision-mode.d.ts +154 -0
  6. package/dist/accessibility/vision-mode.d.ts.map +1 -0
  7. package/dist/blocks/auth-block/auth-block.d.ts +107 -0
  8. package/dist/blocks/auth-block/auth-block.d.ts.map +1 -0
  9. package/dist/blocks/auth-block/guards.d.ts +262 -0
  10. package/dist/blocks/auth-block/guards.d.ts.map +1 -0
  11. package/dist/blocks/auth-block/index.d.ts +13 -0
  12. package/dist/blocks/auth-block/index.d.ts.map +1 -0
  13. package/dist/blocks/auth-block/types.d.ts +232 -0
  14. package/dist/blocks/auth-block/types.d.ts.map +1 -0
  15. package/dist/blocks/dashboard-block/dashboard-block.d.ts +53 -0
  16. package/dist/blocks/dashboard-block/dashboard-block.d.ts.map +1 -0
  17. package/dist/blocks/dashboard-block/index.d.ts +12 -0
  18. package/dist/blocks/dashboard-block/index.d.ts.map +1 -0
  19. package/dist/blocks/dashboard-block/types.d.ts +182 -0
  20. package/dist/blocks/dashboard-block/types.d.ts.map +1 -0
  21. package/dist/blocks/dashboard-block/use-dashboard-block.d.ts +95 -0
  22. package/dist/blocks/dashboard-block/use-dashboard-block.d.ts.map +1 -0
  23. package/dist/blocks/data-grid-block/data-grid-block.d.ts +81 -0
  24. package/dist/blocks/data-grid-block/data-grid-block.d.ts.map +1 -0
  25. package/dist/blocks/data-grid-block/index.d.ts +11 -0
  26. package/dist/blocks/data-grid-block/index.d.ts.map +1 -0
  27. package/dist/blocks/data-grid-block/types.d.ts +304 -0
  28. package/dist/blocks/data-grid-block/types.d.ts.map +1 -0
  29. package/dist/blocks/index.d.ts +10 -1235
  30. package/dist/blocks/index.d.ts.map +1 -0
  31. package/dist/blocks/index.js +187 -50
  32. package/dist/blocks/index.js.map +1 -1
  33. package/dist/{chunk-UR6X3W5I.js → chunk-6AHI4GSV.js} +3 -3
  34. package/dist/chunk-6AHI4GSV.js.map +1 -0
  35. package/dist/{chunk-JDTC2SBY.js → chunk-AD4W7HYC.js} +2 -2
  36. package/dist/chunk-AD4W7HYC.js.map +1 -0
  37. package/dist/{chunk-BTIT7WYH.js → chunk-ADG4HZEP.js} +3 -3
  38. package/dist/chunk-ADG4HZEP.js.map +1 -0
  39. package/dist/{chunk-JNU4QHJK.js → chunk-AYYFMTMI.js} +5 -4
  40. package/dist/{chunk-JNU4QHJK.js.map → chunk-AYYFMTMI.js.map} +1 -1
  41. package/dist/{chunk-HO2GKTWJ.js → chunk-BRDWQVRT.js} +2 -2
  42. package/dist/chunk-BRDWQVRT.js.map +1 -0
  43. package/dist/{chunk-WC2WM2JD.js → chunk-BZOL7GMU.js} +36 -18
  44. package/dist/chunk-BZOL7GMU.js.map +1 -0
  45. package/dist/chunk-DRFNMZLG.js +192 -0
  46. package/dist/chunk-DRFNMZLG.js.map +1 -0
  47. package/dist/{chunk-BV32OJ2A.js → chunk-GUFHFEPZ.js} +2 -2
  48. package/dist/chunk-GUFHFEPZ.js.map +1 -0
  49. package/dist/{chunk-LAEY5USO.js → chunk-OBJ244BO.js} +608 -95
  50. package/dist/chunk-OBJ244BO.js.map +1 -0
  51. package/dist/{chunk-E3XANPTO.js → chunk-S6SEGBX6.js} +32 -209
  52. package/dist/chunk-S6SEGBX6.js.map +1 -0
  53. package/dist/chunk-SNZK5X6F.js +594 -0
  54. package/dist/chunk-SNZK5X6F.js.map +1 -0
  55. package/dist/chunk-WFD54GQQ.js +1940 -0
  56. package/dist/chunk-WFD54GQQ.js.map +1 -0
  57. package/dist/{chunk-DDY7TLUI.js → chunk-XIXSSI3B.js} +28 -2
  58. package/dist/chunk-XIXSSI3B.js.map +1 -0
  59. package/dist/chunk-YQW43BDH.js +11978 -0
  60. package/dist/chunk-YQW43BDH.js.map +1 -0
  61. package/dist/{chunk-XWL6J6IO.js → chunk-YSIG2XYH.js} +2 -2
  62. package/dist/chunk-YSIG2XYH.js.map +1 -0
  63. package/dist/chunk-Z5OSPAOC.js +1576 -0
  64. package/dist/chunk-Z5OSPAOC.js.map +1 -0
  65. package/dist/{chunk-DXXZ3ITR.js → chunk-ZTATTUH7.js} +851 -500
  66. package/dist/chunk-ZTATTUH7.js.map +1 -0
  67. package/dist/cli/commands/add.d.ts +22 -0
  68. package/dist/cli/commands/add.d.ts.map +1 -0
  69. package/dist/cli/commands/diff.d.ts +13 -0
  70. package/dist/cli/commands/diff.d.ts.map +1 -0
  71. package/dist/cli/commands/doctor.d.ts +13 -0
  72. package/dist/cli/commands/doctor.d.ts.map +1 -0
  73. package/dist/cli/commands/init.d.ts +13 -0
  74. package/dist/cli/commands/init.d.ts.map +1 -0
  75. package/dist/cli/commands/list.d.ts +13 -0
  76. package/dist/cli/commands/list.d.ts.map +1 -0
  77. package/dist/cli/commands/remove.d.ts +13 -0
  78. package/dist/cli/commands/remove.d.ts.map +1 -0
  79. package/dist/cli/commands/update.d.ts +13 -0
  80. package/dist/cli/commands/update.d.ts.map +1 -0
  81. package/dist/cli/config.d.ts +73 -0
  82. package/dist/cli/config.d.ts.map +1 -0
  83. package/dist/cli/constants.d.ts +60 -0
  84. package/dist/cli/constants.d.ts.map +1 -0
  85. package/dist/cli/index.d.ts +27 -0
  86. package/dist/cli/index.d.ts.map +1 -0
  87. package/dist/cli/index.js +35 -41
  88. package/dist/cli/index.js.map +1 -1
  89. package/dist/components/accordion/accordion.d.ts +149 -0
  90. package/dist/components/accordion/accordion.d.ts.map +1 -0
  91. package/dist/components/accordion/index.d.ts +7 -0
  92. package/dist/components/accordion/index.d.ts.map +1 -0
  93. package/dist/components/admin-filters/admin-data-table.d.ts +185 -0
  94. package/dist/components/admin-filters/admin-data-table.d.ts.map +1 -0
  95. package/dist/components/admin-filters/amount-cell.d.ts +39 -0
  96. package/dist/components/admin-filters/amount-cell.d.ts.map +1 -0
  97. package/dist/components/admin-filters/filter-toolbar.d.ts +99 -0
  98. package/dist/components/admin-filters/filter-toolbar.d.ts.map +1 -0
  99. package/dist/components/admin-filters/index.d.ts +13 -0
  100. package/dist/components/admin-filters/index.d.ts.map +1 -0
  101. package/dist/components/admin-filters/status-chip.d.ts +55 -0
  102. package/dist/components/admin-filters/status-chip.d.ts.map +1 -0
  103. package/dist/components/alert/alert.d.ts +159 -0
  104. package/dist/components/alert/alert.d.ts.map +1 -0
  105. package/dist/components/alert/index.d.ts +7 -0
  106. package/dist/components/alert/index.d.ts.map +1 -0
  107. package/dist/components/animate/animate-border.d.ts +33 -0
  108. package/dist/components/animate/animate-border.d.ts.map +1 -0
  109. package/dist/components/animate/index.d.ts +3 -0
  110. package/dist/components/animate/index.d.ts.map +1 -0
  111. package/dist/components/animate/motion-lazy.d.ts +5 -0
  112. package/dist/components/animate/motion-lazy.d.ts.map +1 -0
  113. package/dist/components/avatar/avatar.d.ts +78 -0
  114. package/dist/components/avatar/avatar.d.ts.map +1 -0
  115. package/dist/components/avatar/index.d.ts +7 -0
  116. package/dist/components/avatar/index.d.ts.map +1 -0
  117. package/dist/components/badge/badge.d.ts +102 -0
  118. package/dist/components/badge/badge.d.ts.map +1 -0
  119. package/dist/components/badge/index.d.ts +7 -0
  120. package/dist/components/badge/index.d.ts.map +1 -0
  121. package/dist/components/breadcrumbs/breadcrumbs.d.ts +100 -0
  122. package/dist/components/breadcrumbs/breadcrumbs.d.ts.map +1 -0
  123. package/dist/components/breadcrumbs/index.d.ts +7 -0
  124. package/dist/components/breadcrumbs/index.d.ts.map +1 -0
  125. package/dist/components/card/card.d.ts +127 -0
  126. package/dist/components/card/card.d.ts.map +1 -0
  127. package/dist/components/card/index.d.ts +7 -0
  128. package/dist/components/card/index.d.ts.map +1 -0
  129. package/dist/components/carousel/carousel.d.ts +35 -0
  130. package/dist/components/carousel/carousel.d.ts.map +1 -0
  131. package/dist/components/carousel/classes.d.ts +35 -0
  132. package/dist/components/carousel/classes.d.ts.map +1 -0
  133. package/dist/components/carousel/index.d.ts +10 -0
  134. package/dist/components/carousel/index.d.ts.map +1 -0
  135. package/dist/components/carousel/types.d.ts +167 -0
  136. package/dist/components/carousel/types.d.ts.map +1 -0
  137. package/dist/components/carousel/use-carousel.d.ts +51 -0
  138. package/dist/components/carousel/use-carousel.d.ts.map +1 -0
  139. package/dist/components/changelog/changelog-entry.d.ts +10 -0
  140. package/dist/components/changelog/changelog-entry.d.ts.map +1 -0
  141. package/dist/components/changelog/changelog-timeline.d.ts +9 -0
  142. package/dist/components/changelog/changelog-timeline.d.ts.map +1 -0
  143. package/dist/components/changelog/index.d.ts +3 -0
  144. package/dist/components/changelog/index.d.ts.map +1 -0
  145. package/dist/components/chart/chart.d.ts +39 -0
  146. package/dist/components/chart/chart.d.ts.map +1 -0
  147. package/dist/components/chart/classes.d.ts +24 -0
  148. package/dist/components/chart/classes.d.ts.map +1 -0
  149. package/dist/components/chart/components/chart-legends.d.ts +24 -0
  150. package/dist/components/chart/components/chart-legends.d.ts.map +1 -0
  151. package/dist/components/chart/components/chart-loading.d.ts +21 -0
  152. package/dist/components/chart/components/chart-loading.d.ts.map +1 -0
  153. package/dist/components/chart/components/index.d.ts +8 -0
  154. package/dist/components/chart/components/index.d.ts.map +1 -0
  155. package/dist/components/chart/index.d.ts +14 -0
  156. package/dist/components/chart/index.d.ts.map +1 -0
  157. package/dist/components/chart/types.d.ts +264 -0
  158. package/dist/components/chart/types.d.ts.map +1 -0
  159. package/dist/components/chart/use-chart.d.ts +34 -0
  160. package/dist/components/chart/use-chart.d.ts.map +1 -0
  161. package/dist/components/command-palette/command-palette.d.ts +73 -0
  162. package/dist/components/command-palette/command-palette.d.ts.map +1 -0
  163. package/dist/components/command-palette/index.d.ts +7 -0
  164. package/dist/components/command-palette/index.d.ts.map +1 -0
  165. package/dist/components/confirm-dialog/confirm-dialog.d.ts +89 -0
  166. package/dist/components/confirm-dialog/confirm-dialog.d.ts.map +1 -0
  167. package/dist/components/confirm-dialog/index.d.ts +7 -0
  168. package/dist/components/confirm-dialog/index.d.ts.map +1 -0
  169. package/dist/components/content-renderer/classes.d.ts +33 -0
  170. package/dist/components/content-renderer/classes.d.ts.map +1 -0
  171. package/dist/components/content-renderer/content-renderer.d.ts +37 -0
  172. package/dist/components/content-renderer/content-renderer.d.ts.map +1 -0
  173. package/dist/components/content-renderer/html-tags.d.ts +6 -0
  174. package/dist/components/content-renderer/html-tags.d.ts.map +1 -0
  175. package/dist/components/content-renderer/html-to-markdown.d.ts +7 -0
  176. package/dist/components/content-renderer/html-to-markdown.d.ts.map +1 -0
  177. package/dist/components/content-renderer/index.d.ts +7 -0
  178. package/dist/components/content-renderer/index.d.ts.map +1 -0
  179. package/dist/components/content-renderer/markdown.d.ts +23 -0
  180. package/dist/components/content-renderer/markdown.d.ts.map +1 -0
  181. package/dist/components/content-renderer/remark-spoiler.d.ts +9 -0
  182. package/dist/components/content-renderer/remark-spoiler.d.ts.map +1 -0
  183. package/dist/components/content-renderer/styles.d.ts +2 -0
  184. package/dist/components/content-renderer/styles.d.ts.map +1 -0
  185. package/dist/components/country-select/country-select.d.ts +101 -0
  186. package/dist/components/country-select/country-select.d.ts.map +1 -0
  187. package/dist/components/country-select/flag-icon.d.ts +36 -0
  188. package/dist/components/country-select/flag-icon.d.ts.map +1 -0
  189. package/dist/components/country-select/index.d.ts +5 -0
  190. package/dist/components/country-select/index.d.ts.map +1 -0
  191. package/dist/components/date-range-picker/date-range-input.d.ts +48 -0
  192. package/dist/components/date-range-picker/date-range-input.d.ts.map +1 -0
  193. package/dist/components/date-range-picker/date-range-picker.d.ts +39 -0
  194. package/dist/components/date-range-picker/date-range-picker.d.ts.map +1 -0
  195. package/dist/components/date-range-picker/index.d.ts +7 -0
  196. package/dist/components/date-range-picker/index.d.ts.map +1 -0
  197. package/dist/components/date-range-picker/use-date-range-picker.d.ts +28 -0
  198. package/dist/components/date-range-picker/use-date-range-picker.d.ts.map +1 -0
  199. package/dist/components/deadline-chip/deadline-chip.d.ts +41 -0
  200. package/dist/components/deadline-chip/deadline-chip.d.ts.map +1 -0
  201. package/dist/components/deadline-chip/index.d.ts +7 -0
  202. package/dist/components/deadline-chip/index.d.ts.map +1 -0
  203. package/dist/components/doc-layout/doc-layout.d.ts +17 -0
  204. package/dist/components/doc-layout/doc-layout.d.ts.map +1 -0
  205. package/dist/components/doc-layout/doc-section-nav.d.ts +16 -0
  206. package/dist/components/doc-layout/doc-section-nav.d.ts.map +1 -0
  207. package/dist/components/doc-layout/doc-sidebar.d.ts +15 -0
  208. package/dist/components/doc-layout/doc-sidebar.d.ts.map +1 -0
  209. package/dist/components/doc-layout/index.d.ts +4 -0
  210. package/dist/components/doc-layout/index.d.ts.map +1 -0
  211. package/dist/components/drawer/drawer.d.ts +65 -0
  212. package/dist/components/drawer/drawer.d.ts.map +1 -0
  213. package/dist/components/drawer/index.d.ts +7 -0
  214. package/dist/components/drawer/index.d.ts.map +1 -0
  215. package/dist/components/duration-picker/duration-picker.d.ts +24 -0
  216. package/dist/components/duration-picker/duration-picker.d.ts.map +1 -0
  217. package/dist/components/duration-picker/index.d.ts +2 -0
  218. package/dist/components/duration-picker/index.d.ts.map +1 -0
  219. package/dist/components/editor/classes.d.ts +52 -0
  220. package/dist/components/editor/classes.d.ts.map +1 -0
  221. package/dist/components/editor/editor.d.ts +15 -0
  222. package/dist/components/editor/editor.d.ts.map +1 -0
  223. package/dist/components/editor/extensions/clear-format.d.ts +3 -0
  224. package/dist/components/editor/extensions/clear-format.d.ts.map +1 -0
  225. package/dist/components/editor/extensions/index.d.ts +3 -0
  226. package/dist/components/editor/extensions/index.d.ts.map +1 -0
  227. package/dist/components/editor/extensions/text-transform.d.ts +20 -0
  228. package/dist/components/editor/extensions/text-transform.d.ts.map +1 -0
  229. package/dist/components/editor/icons/index.d.ts +42 -0
  230. package/dist/components/editor/icons/index.d.ts.map +1 -0
  231. package/dist/components/editor/index.d.ts +44 -0
  232. package/dist/components/editor/index.d.ts.map +1 -0
  233. package/dist/components/editor/index.js +3 -0
  234. package/dist/components/editor/index.js.map +1 -0
  235. package/dist/components/editor/presets.d.ts +3 -0
  236. package/dist/components/editor/presets.d.ts.map +1 -0
  237. package/dist/components/editor/styles.d.ts +2 -0
  238. package/dist/components/editor/styles.d.ts.map +1 -0
  239. package/dist/components/editor/toolbar/bubble-toolbar.d.ts +9 -0
  240. package/dist/components/editor/toolbar/bubble-toolbar.d.ts.map +1 -0
  241. package/dist/components/editor/toolbar/code-highlight-block.d.ts +3 -0
  242. package/dist/components/editor/toolbar/code-highlight-block.d.ts.map +1 -0
  243. package/dist/components/editor/toolbar/heading-block.d.ts +11 -0
  244. package/dist/components/editor/toolbar/heading-block.d.ts.map +1 -0
  245. package/dist/components/editor/toolbar/image-block.d.ts +11 -0
  246. package/dist/components/editor/toolbar/image-block.d.ts.map +1 -0
  247. package/dist/components/editor/toolbar/link-block.d.ts +13 -0
  248. package/dist/components/editor/toolbar/link-block.d.ts.map +1 -0
  249. package/dist/components/editor/toolbar/toolbar-item.d.ts +3 -0
  250. package/dist/components/editor/toolbar/toolbar-item.d.ts.map +1 -0
  251. package/dist/components/editor/toolbar/toolbar.d.ts +3 -0
  252. package/dist/components/editor/toolbar/toolbar.d.ts.map +1 -0
  253. package/dist/components/editor/toolbar/use-toolbar-state.d.ts +24 -0
  254. package/dist/components/editor/toolbar/use-toolbar-state.d.ts.map +1 -0
  255. package/dist/components/editor/types.d.ts +130 -0
  256. package/dist/components/editor/types.d.ts.map +1 -0
  257. package/dist/components/emoji-picker/emoji-picker.d.ts +24 -0
  258. package/dist/components/emoji-picker/emoji-picker.d.ts.map +1 -0
  259. package/dist/components/emoji-picker/emoji-search.d.ts +22 -0
  260. package/dist/components/emoji-picker/emoji-search.d.ts.map +1 -0
  261. package/dist/components/emoji-picker/emoji.d.ts +19 -0
  262. package/dist/components/emoji-picker/emoji.d.ts.map +1 -0
  263. package/dist/components/emoji-picker/index.d.ts +14 -0
  264. package/dist/components/emoji-picker/index.d.ts.map +1 -0
  265. package/dist/components/emoji-picker/index.js +3 -0
  266. package/dist/components/emoji-picker/index.js.map +1 -0
  267. package/dist/components/emoji-picker/twemoji-url.d.ts +26 -0
  268. package/dist/components/emoji-picker/twemoji-url.d.ts.map +1 -0
  269. package/dist/components/emoji-picker/types.d.ts +96 -0
  270. package/dist/components/emoji-picker/types.d.ts.map +1 -0
  271. package/dist/components/emoji-picker/use-emoji-data.d.ts +26 -0
  272. package/dist/components/emoji-picker/use-emoji-data.d.ts.map +1 -0
  273. package/dist/components/emoji-picker/use-recent-emojis.d.ts +16 -0
  274. package/dist/components/emoji-picker/use-recent-emojis.d.ts.map +1 -0
  275. package/dist/components/empty-content/empty-content.d.ts +92 -0
  276. package/dist/components/empty-content/empty-content.d.ts.map +1 -0
  277. package/dist/components/empty-content/index.d.ts +7 -0
  278. package/dist/components/empty-content/index.d.ts.map +1 -0
  279. package/dist/components/error-boundary/error-boundary.d.ts +162 -0
  280. package/dist/components/error-boundary/error-boundary.d.ts.map +1 -0
  281. package/dist/components/error-boundary/index.d.ts +7 -0
  282. package/dist/components/error-boundary/index.d.ts.map +1 -0
  283. package/dist/components/field/field-autocomplete.d.ts +74 -0
  284. package/dist/components/field/field-autocomplete.d.ts.map +1 -0
  285. package/dist/components/field/field-checkbox.d.ts +42 -0
  286. package/dist/components/field/field-checkbox.d.ts.map +1 -0
  287. package/dist/components/field/field-code.d.ts +80 -0
  288. package/dist/components/field/field-code.d.ts.map +1 -0
  289. package/dist/components/field/field-country-select.d.ts +84 -0
  290. package/dist/components/field/field-country-select.d.ts.map +1 -0
  291. package/dist/components/field/field-date-picker.d.ts +58 -0
  292. package/dist/components/field/field-date-picker.d.ts.map +1 -0
  293. package/dist/components/field/field-datetime-picker.d.ts +96 -0
  294. package/dist/components/field/field-datetime-picker.d.ts.map +1 -0
  295. package/dist/components/field/field-editor.d.ts +218 -0
  296. package/dist/components/field/field-editor.d.ts.map +1 -0
  297. package/dist/components/field/field-multi-checkbox.d.ts +91 -0
  298. package/dist/components/field/field-multi-checkbox.d.ts.map +1 -0
  299. package/dist/components/field/field-multi-select.d.ts +85 -0
  300. package/dist/components/field/field-multi-select.d.ts.map +1 -0
  301. package/dist/components/field/field-multi-switch.d.ts +93 -0
  302. package/dist/components/field/field-multi-switch.d.ts.map +1 -0
  303. package/dist/components/field/field-number.d.ts +50 -0
  304. package/dist/components/field/field-number.d.ts.map +1 -0
  305. package/dist/components/field/field-phone.d.ts +82 -0
  306. package/dist/components/field/field-phone.d.ts.map +1 -0
  307. package/dist/components/field/field-radio.d.ts +64 -0
  308. package/dist/components/field/field-radio.d.ts.map +1 -0
  309. package/dist/components/field/field-rating.d.ts +43 -0
  310. package/dist/components/field/field-rating.d.ts.map +1 -0
  311. package/dist/components/field/field-select.d.ts +50 -0
  312. package/dist/components/field/field-select.d.ts.map +1 -0
  313. package/dist/components/field/field-slider.d.ts +56 -0
  314. package/dist/components/field/field-slider.d.ts.map +1 -0
  315. package/dist/components/field/field-switch.d.ts +44 -0
  316. package/dist/components/field/field-switch.d.ts.map +1 -0
  317. package/dist/components/field/field-text.d.ts +38 -0
  318. package/dist/components/field/field-text.d.ts.map +1 -0
  319. package/dist/components/field/field-time-picker.d.ts +79 -0
  320. package/dist/components/field/field-time-picker.d.ts.map +1 -0
  321. package/dist/components/field/field-upload.d.ts +120 -0
  322. package/dist/components/field/field-upload.d.ts.map +1 -0
  323. package/dist/components/field/index.d.ts +149 -0
  324. package/dist/components/field/index.d.ts.map +1 -0
  325. package/dist/components/image/image.d.ts +79 -0
  326. package/dist/components/image/image.d.ts.map +1 -0
  327. package/dist/components/image/index.d.ts +7 -0
  328. package/dist/components/image/index.d.ts.map +1 -0
  329. package/dist/components/index.css +131 -0
  330. package/dist/components/index.css.map +1 -0
  331. package/dist/components/index.d.ts +61 -0
  332. package/dist/components/index.d.ts.map +1 -0
  333. package/dist/components/index.js +13 -0
  334. package/dist/components/index.js.map +1 -0
  335. package/dist/components/label/index.d.ts +7 -0
  336. package/dist/components/label/index.d.ts.map +1 -0
  337. package/dist/components/label/label.d.ts +71 -0
  338. package/dist/components/label/label.d.ts.map +1 -0
  339. package/dist/components/lightbox/classes.d.ts +34 -0
  340. package/dist/components/lightbox/classes.d.ts.map +1 -0
  341. package/dist/components/lightbox/index.d.ts +11 -0
  342. package/dist/components/lightbox/index.d.ts.map +1 -0
  343. package/dist/components/lightbox/lightbox.d.ts +42 -0
  344. package/dist/components/lightbox/lightbox.d.ts.map +1 -0
  345. package/dist/components/lightbox/types.d.ts +233 -0
  346. package/dist/components/lightbox/types.d.ts.map +1 -0
  347. package/dist/components/lightbox/use-lightbox.d.ts +42 -0
  348. package/dist/components/lightbox/use-lightbox.d.ts.map +1 -0
  349. package/dist/components/loading-screen/index.d.ts +8 -0
  350. package/dist/components/loading-screen/index.d.ts.map +1 -0
  351. package/dist/components/loading-screen/loading-screen.d.ts +37 -0
  352. package/dist/components/loading-screen/loading-screen.d.ts.map +1 -0
  353. package/dist/components/loading-screen/splash-screen.d.ts +80 -0
  354. package/dist/components/loading-screen/splash-screen.d.ts.map +1 -0
  355. package/dist/components/map/Map.d.ts +63 -0
  356. package/dist/components/map/Map.d.ts.map +1 -0
  357. package/dist/components/map/MapCoverageLayer.d.ts +25 -0
  358. package/dist/components/map/MapCoverageLayer.d.ts.map +1 -0
  359. package/dist/components/map/MapMarker.d.ts +17 -0
  360. package/dist/components/map/MapMarker.d.ts.map +1 -0
  361. package/dist/components/map/MapPointPicker.d.ts +26 -0
  362. package/dist/components/map/MapPointPicker.d.ts.map +1 -0
  363. package/dist/components/map/index.d.ts +14 -0
  364. package/dist/components/map/index.d.ts.map +1 -0
  365. package/dist/components/mega-menu/index.d.ts +12 -0
  366. package/dist/components/mega-menu/index.d.ts.map +1 -0
  367. package/dist/components/mega-menu/mega-menu-horizontal.d.ts +41 -0
  368. package/dist/components/mega-menu/mega-menu-horizontal.d.ts.map +1 -0
  369. package/dist/components/mega-menu/mega-menu-mobile.d.ts +28 -0
  370. package/dist/components/mega-menu/mega-menu-mobile.d.ts.map +1 -0
  371. package/dist/components/mega-menu/mega-menu-vertical.d.ts +28 -0
  372. package/dist/components/mega-menu/mega-menu-vertical.d.ts.map +1 -0
  373. package/dist/components/mega-menu/styles.d.ts +18 -0
  374. package/dist/components/mega-menu/styles.d.ts.map +1 -0
  375. package/dist/components/mega-menu/types.d.ts +200 -0
  376. package/dist/components/mega-menu/types.d.ts.map +1 -0
  377. package/dist/components/menu/index.d.ts +7 -0
  378. package/dist/components/menu/index.d.ts.map +1 -0
  379. package/dist/components/menu/menu.d.ts +144 -0
  380. package/dist/components/menu/menu.d.ts.map +1 -0
  381. package/dist/components/nav-card/index.d.ts +8 -0
  382. package/dist/components/nav-card/index.d.ts.map +1 -0
  383. package/dist/components/nav-card/nav-card-grid.d.ts +57 -0
  384. package/dist/components/nav-card/nav-card-grid.d.ts.map +1 -0
  385. package/dist/components/nav-card/nav-card.d.ts +69 -0
  386. package/dist/components/nav-card/nav-card.d.ts.map +1 -0
  387. package/dist/components/nav-section/components.d.ts +143 -0
  388. package/dist/components/nav-section/components.d.ts.map +1 -0
  389. package/dist/components/nav-section/index.d.ts +15 -0
  390. package/dist/components/nav-section/index.d.ts.map +1 -0
  391. package/dist/components/nav-section/nav-context.d.ts +80 -0
  392. package/dist/components/nav-section/nav-context.d.ts.map +1 -0
  393. package/dist/components/nav-section/nav-item.d.ts +20 -0
  394. package/dist/components/nav-section/nav-item.d.ts.map +1 -0
  395. package/dist/components/nav-section/nav-list.d.ts +25 -0
  396. package/dist/components/nav-section/nav-list.d.ts.map +1 -0
  397. package/dist/components/nav-section/nav-section-horizontal.d.ts +29 -0
  398. package/dist/components/nav-section/nav-section-horizontal.d.ts.map +1 -0
  399. package/dist/components/nav-section/nav-section-mini.d.ts +30 -0
  400. package/dist/components/nav-section/nav-section-mini.d.ts.map +1 -0
  401. package/dist/components/nav-section/nav-section-vertical.d.ts +37 -0
  402. package/dist/components/nav-section/nav-section-vertical.d.ts.map +1 -0
  403. package/dist/components/nav-section/styles.d.ts +35 -0
  404. package/dist/components/nav-section/styles.d.ts.map +1 -0
  405. package/dist/components/nav-section/types.d.ts +178 -0
  406. package/dist/components/nav-section/types.d.ts.map +1 -0
  407. package/dist/components/navigation-progress/index.d.ts +7 -0
  408. package/dist/components/navigation-progress/index.d.ts.map +1 -0
  409. package/dist/components/navigation-progress/navigation-progress.d.ts +36 -0
  410. package/dist/components/navigation-progress/navigation-progress.d.ts.map +1 -0
  411. package/dist/components/page-content/index.d.ts +7 -0
  412. package/dist/components/page-content/index.d.ts.map +1 -0
  413. package/dist/components/page-content/page-content.d.ts +55 -0
  414. package/dist/components/page-content/page-content.d.ts.map +1 -0
  415. package/dist/components/popover/index.d.ts +7 -0
  416. package/dist/components/popover/index.d.ts.map +1 -0
  417. package/dist/components/popover/popover.d.ts +124 -0
  418. package/dist/components/popover/popover.d.ts.map +1 -0
  419. package/dist/components/progress/countdown-ring.d.ts +60 -0
  420. package/dist/components/progress/countdown-ring.d.ts.map +1 -0
  421. package/dist/components/progress/index.d.ts +8 -0
  422. package/dist/components/progress/index.d.ts.map +1 -0
  423. package/dist/components/progress/progress.d.ts +106 -0
  424. package/dist/components/progress/progress.d.ts.map +1 -0
  425. package/dist/components/rail/index.d.ts +7 -0
  426. package/dist/components/rail/index.d.ts.map +1 -0
  427. package/dist/components/rail/rail.d.ts +39 -0
  428. package/dist/components/rail/rail.d.ts.map +1 -0
  429. package/dist/components/scroll-spy/index.d.ts +3 -0
  430. package/dist/components/scroll-spy/index.d.ts.map +1 -0
  431. package/dist/components/scroll-spy/scroll-spy-provider.d.ts +26 -0
  432. package/dist/components/scroll-spy/scroll-spy-provider.d.ts.map +1 -0
  433. package/dist/components/scroll-spy/scroll-spy-section.d.ts +10 -0
  434. package/dist/components/scroll-spy/scroll-spy-section.d.ts.map +1 -0
  435. package/dist/components/scroll-to-top/index.d.ts +7 -0
  436. package/dist/components/scroll-to-top/index.d.ts.map +1 -0
  437. package/dist/components/scroll-to-top/scroll-to-top.d.ts +25 -0
  438. package/dist/components/scroll-to-top/scroll-to-top.d.ts.map +1 -0
  439. package/dist/components/scrollbar/index.d.ts +7 -0
  440. package/dist/components/scrollbar/index.d.ts.map +1 -0
  441. package/dist/components/scrollbar/scrollbar.d.ts +59 -0
  442. package/dist/components/scrollbar/scrollbar.d.ts.map +1 -0
  443. package/dist/components/search-input/index.d.ts +2 -0
  444. package/dist/components/search-input/index.d.ts.map +1 -0
  445. package/dist/components/search-input/search-input.d.ts +46 -0
  446. package/dist/components/search-input/search-input.d.ts.map +1 -0
  447. package/dist/components/settings/index.d.ts +10 -0
  448. package/dist/components/settings/index.d.ts.map +1 -0
  449. package/dist/components/settings/settings-drawer.d.ts +39 -0
  450. package/dist/components/settings/settings-drawer.d.ts.map +1 -0
  451. package/dist/components/settings/settings-provider.d.ts +106 -0
  452. package/dist/components/settings/settings-provider.d.ts.map +1 -0
  453. package/dist/components/skeleton/index.d.ts +7 -0
  454. package/dist/components/skeleton/index.d.ts.map +1 -0
  455. package/dist/components/skeleton/skeleton.d.ts +77 -0
  456. package/dist/components/skeleton/skeleton.d.ts.map +1 -0
  457. package/dist/components/snackbar/index.d.ts +7 -0
  458. package/dist/components/snackbar/index.d.ts.map +1 -0
  459. package/dist/components/snackbar/snackbar.d.ts +120 -0
  460. package/dist/components/snackbar/snackbar.d.ts.map +1 -0
  461. package/dist/components/sponsored-slot/index.d.ts +3 -0
  462. package/dist/components/sponsored-slot/index.d.ts.map +1 -0
  463. package/dist/components/sponsored-slot/sponsored-slot.d.ts +16 -0
  464. package/dist/components/sponsored-slot/sponsored-slot.d.ts.map +1 -0
  465. package/dist/components/sponsored-slot/types.d.ts +45 -0
  466. package/dist/components/sponsored-slot/types.d.ts.map +1 -0
  467. package/dist/components/stepper/index.d.ts +7 -0
  468. package/dist/components/stepper/index.d.ts.map +1 -0
  469. package/dist/components/stepper/stepper.d.ts +145 -0
  470. package/dist/components/stepper/stepper.d.ts.map +1 -0
  471. package/dist/components/svg-color/index.d.ts +7 -0
  472. package/dist/components/svg-color/index.d.ts.map +1 -0
  473. package/dist/components/svg-color/svg-color.d.ts +80 -0
  474. package/dist/components/svg-color/svg-color.d.ts.map +1 -0
  475. package/dist/components/table/index.d.ts +7 -0
  476. package/dist/components/table/index.d.ts.map +1 -0
  477. package/dist/components/table/table.d.ts +184 -0
  478. package/dist/components/table/table.d.ts.map +1 -0
  479. package/dist/components/tabs/index.d.ts +7 -0
  480. package/dist/components/tabs/index.d.ts.map +1 -0
  481. package/dist/components/tabs/tabs.d.ts +146 -0
  482. package/dist/components/tabs/tabs.d.ts.map +1 -0
  483. package/dist/components/tag-cloud/index.d.ts +7 -0
  484. package/dist/components/tag-cloud/index.d.ts.map +1 -0
  485. package/dist/components/tag-cloud/tag-cloud.d.ts +58 -0
  486. package/dist/components/tag-cloud/tag-cloud.d.ts.map +1 -0
  487. package/dist/components/tiptap-renderer/index.d.ts +2 -0
  488. package/dist/components/tiptap-renderer/index.d.ts.map +1 -0
  489. package/dist/components/tiptap-renderer/tiptap-renderer.d.ts +45 -0
  490. package/dist/components/tiptap-renderer/tiptap-renderer.d.ts.map +1 -0
  491. package/dist/components/tooltip/index.d.ts +7 -0
  492. package/dist/components/tooltip/index.d.ts.map +1 -0
  493. package/dist/components/tooltip/tooltip.d.ts +38 -0
  494. package/dist/components/tooltip/tooltip.d.ts.map +1 -0
  495. package/dist/components/virtual-list/index.d.ts +7 -0
  496. package/dist/components/virtual-list/index.d.ts.map +1 -0
  497. package/dist/components/virtual-list/virtual-list.d.ts +64 -0
  498. package/dist/components/virtual-list/virtual-list.d.ts.map +1 -0
  499. package/dist/core/accessibility/index.d.ts +96 -0
  500. package/dist/core/accessibility/index.d.ts.map +1 -0
  501. package/dist/core/accessibility/skip-link.d.ts +31 -0
  502. package/dist/core/accessibility/skip-link.d.ts.map +1 -0
  503. package/dist/core/context.d.ts +99 -0
  504. package/dist/core/context.d.ts.map +1 -0
  505. package/dist/core/hooks/use-boolean.d.ts +54 -0
  506. package/dist/core/hooks/use-boolean.d.ts.map +1 -0
  507. package/dist/core/hooks/use-breakpoints.d.ts +87 -0
  508. package/dist/core/hooks/use-breakpoints.d.ts.map +1 -0
  509. package/dist/core/hooks/use-click-outside.d.ts +26 -0
  510. package/dist/core/hooks/use-click-outside.d.ts.map +1 -0
  511. package/dist/core/hooks/use-copy-to-clipboard.d.ts +66 -0
  512. package/dist/core/hooks/use-copy-to-clipboard.d.ts.map +1 -0
  513. package/dist/core/hooks/use-countdown.d.ts +105 -0
  514. package/dist/core/hooks/use-countdown.d.ts.map +1 -0
  515. package/dist/core/hooks/use-debounce.d.ts +64 -0
  516. package/dist/core/hooks/use-debounce.d.ts.map +1 -0
  517. package/dist/core/hooks/use-event-listener.d.ts +37 -0
  518. package/dist/core/hooks/use-event-listener.d.ts.map +1 -0
  519. package/dist/core/hooks/use-interval.d.ts +30 -0
  520. package/dist/core/hooks/use-interval.d.ts.map +1 -0
  521. package/dist/core/hooks/use-is-client.d.ts +24 -0
  522. package/dist/core/hooks/use-is-client.d.ts.map +1 -0
  523. package/dist/core/hooks/use-local-storage.d.ts +61 -0
  524. package/dist/core/hooks/use-local-storage.d.ts.map +1 -0
  525. package/dist/core/hooks/use-media-query.d.ts +107 -0
  526. package/dist/core/hooks/use-media-query.d.ts.map +1 -0
  527. package/dist/core/hooks/use-mounted.d.ts +33 -0
  528. package/dist/core/hooks/use-mounted.d.ts.map +1 -0
  529. package/dist/core/hooks/use-multi-select.d.ts +113 -0
  530. package/dist/core/hooks/use-multi-select.d.ts.map +1 -0
  531. package/dist/core/hooks/use-previous.d.ts +23 -0
  532. package/dist/core/hooks/use-previous.d.ts.map +1 -0
  533. package/dist/core/hooks/use-set-state.d.ts +56 -0
  534. package/dist/core/hooks/use-set-state.d.ts.map +1 -0
  535. package/dist/core/hooks/use-tabs.d.ts +74 -0
  536. package/dist/core/hooks/use-tabs.d.ts.map +1 -0
  537. package/dist/core/hooks/use-timeout.d.ts +37 -0
  538. package/dist/core/hooks/use-timeout.d.ts.map +1 -0
  539. package/dist/core/index.d.ts +36 -453
  540. package/dist/core/index.d.ts.map +1 -0
  541. package/dist/core/index.js +6 -7
  542. package/dist/core/provider-stack.d.ts +181 -0
  543. package/dist/core/provider-stack.d.ts.map +1 -0
  544. package/dist/core/provider.d.ts +67 -0
  545. package/dist/core/provider.d.ts.map +1 -0
  546. package/dist/forms/index.d.ts +6 -557
  547. package/dist/forms/index.d.ts.map +1 -0
  548. package/dist/forms/index.js +0 -1
  549. package/dist/forms/index.js.map +1 -1
  550. package/dist/forms/schema-provider.d.ts +282 -0
  551. package/dist/forms/schema-provider.d.ts.map +1 -0
  552. package/dist/forms/schema-utils.d.ts +286 -0
  553. package/dist/forms/schema-utils.d.ts.map +1 -0
  554. package/dist/hooks/index.d.ts +38 -7
  555. package/dist/hooks/index.d.ts.map +1 -0
  556. package/dist/hooks/index.js +8 -8
  557. package/dist/hooks/use-array.d.ts +126 -0
  558. package/dist/hooks/use-array.d.ts.map +1 -0
  559. package/dist/hooks/use-async.d.ts +88 -0
  560. package/dist/hooks/use-async.d.ts.map +1 -0
  561. package/dist/hooks/use-back-to-top.d.ts +57 -0
  562. package/dist/hooks/use-back-to-top.d.ts.map +1 -0
  563. package/dist/hooks/use-client-rect.d.ts +67 -0
  564. package/dist/hooks/use-client-rect.d.ts.map +1 -0
  565. package/dist/hooks/use-config-from-query.d.ts +98 -0
  566. package/dist/hooks/use-config-from-query.d.ts.map +1 -0
  567. package/dist/hooks/use-cookies.d.ts +62 -0
  568. package/dist/hooks/use-cookies.d.ts.map +1 -0
  569. package/dist/hooks/use-countdown-date.d.ts +47 -0
  570. package/dist/hooks/use-countdown-date.d.ts.map +1 -0
  571. package/dist/hooks/use-countdown-seconds.d.ts +83 -0
  572. package/dist/hooks/use-countdown-seconds.d.ts.map +1 -0
  573. package/dist/hooks/use-double-click.d.ts +67 -0
  574. package/dist/hooks/use-double-click.d.ts.map +1 -0
  575. package/dist/hooks/use-focus-trap.d.ts +66 -0
  576. package/dist/hooks/use-focus-trap.d.ts.map +1 -0
  577. package/dist/hooks/use-image-dimensions.d.ts +124 -0
  578. package/dist/hooks/use-image-dimensions.d.ts.map +1 -0
  579. package/dist/hooks/use-infinite-scroll.d.ts +204 -0
  580. package/dist/hooks/use-infinite-scroll.d.ts.map +1 -0
  581. package/dist/hooks/use-intersection-observer.d.ts +93 -0
  582. package/dist/hooks/use-intersection-observer.d.ts.map +1 -0
  583. package/dist/hooks/use-isomorphic-layout-effect.d.ts +34 -0
  584. package/dist/hooks/use-isomorphic-layout-effect.d.ts.map +1 -0
  585. package/dist/hooks/use-keyboard-shortcut.d.ts +112 -0
  586. package/dist/hooks/use-keyboard-shortcut.d.ts.map +1 -0
  587. package/dist/hooks/use-lazy-query.d.ts +132 -0
  588. package/dist/hooks/use-lazy-query.d.ts.map +1 -0
  589. package/dist/hooks/use-mutation.d.ts +141 -0
  590. package/dist/hooks/use-mutation.d.ts.map +1 -0
  591. package/dist/hooks/use-online-status.d.ts +56 -0
  592. package/dist/hooks/use-online-status.d.ts.map +1 -0
  593. package/dist/hooks/use-password-visibility.d.ts +83 -0
  594. package/dist/hooks/use-password-visibility.d.ts.map +1 -0
  595. package/dist/hooks/use-popover-hover.d.ts +78 -0
  596. package/dist/hooks/use-popover-hover.d.ts.map +1 -0
  597. package/dist/hooks/use-scroll-offset-top.d.ts +69 -0
  598. package/dist/hooks/use-scroll-offset-top.d.ts.map +1 -0
  599. package/dist/hooks/use-scroll-position.d.ts +96 -0
  600. package/dist/hooks/use-scroll-position.d.ts.map +1 -0
  601. package/dist/hooks/use-session-storage.d.ts +66 -0
  602. package/dist/hooks/use-session-storage.d.ts.map +1 -0
  603. package/dist/hooks/use-throttle.d.ts +67 -0
  604. package/dist/hooks/use-throttle.d.ts.map +1 -0
  605. package/dist/hooks/use-update-effect.d.ts +53 -0
  606. package/dist/hooks/use-update-effect.d.ts.map +1 -0
  607. package/dist/hooks/use-window-size.d.ts +132 -0
  608. package/dist/hooks/use-window-size.d.ts.map +1 -0
  609. package/dist/http/client.d.ts +74 -0
  610. package/dist/http/client.d.ts.map +1 -0
  611. package/dist/http/index.d.ts +6 -229
  612. package/dist/http/index.d.ts.map +1 -0
  613. package/dist/http/index.js +0 -2
  614. package/dist/http/index.js.map +1 -1
  615. package/dist/http/types.d.ts +158 -0
  616. package/dist/http/types.d.ts.map +1 -0
  617. package/dist/index.d.ts +19 -9108
  618. package/dist/index.d.ts.map +1 -0
  619. package/dist/index.js +107 -11678
  620. package/dist/index.js.map +1 -1
  621. package/dist/layouts/auth/centered.d.ts +49 -0
  622. package/dist/layouts/auth/centered.d.ts.map +1 -0
  623. package/dist/layouts/auth/index.d.ts +12 -0
  624. package/dist/layouts/auth/index.d.ts.map +1 -0
  625. package/dist/layouts/auth/simple.d.ts +58 -0
  626. package/dist/layouts/auth/simple.d.ts.map +1 -0
  627. package/dist/layouts/auth/split.d.ts +81 -0
  628. package/dist/layouts/auth/split.d.ts.map +1 -0
  629. package/dist/layouts/core/context.d.ts +102 -0
  630. package/dist/layouts/core/context.d.ts.map +1 -0
  631. package/dist/layouts/core/css-vars.d.ts +43 -0
  632. package/dist/layouts/core/css-vars.d.ts.map +1 -0
  633. package/dist/layouts/core/header-section.d.ts +79 -0
  634. package/dist/layouts/core/header-section.d.ts.map +1 -0
  635. package/dist/layouts/core/index.d.ts +18 -0
  636. package/dist/layouts/core/index.d.ts.map +1 -0
  637. package/dist/layouts/core/layout-section.d.ts +64 -0
  638. package/dist/layouts/core/layout-section.d.ts.map +1 -0
  639. package/dist/layouts/core/user-menu.d.ts +88 -0
  640. package/dist/layouts/core/user-menu.d.ts.map +1 -0
  641. package/dist/layouts/dashboard/index.d.ts +10 -0
  642. package/dist/layouts/dashboard/index.d.ts.map +1 -0
  643. package/dist/layouts/dashboard/layout.d.ts +90 -0
  644. package/dist/layouts/dashboard/layout.d.ts.map +1 -0
  645. package/dist/layouts/dashboard/sidenav.d.ts +58 -0
  646. package/dist/layouts/dashboard/sidenav.d.ts.map +1 -0
  647. package/dist/layouts/dashboard/topnav.d.ts +41 -0
  648. package/dist/layouts/dashboard/topnav.d.ts.map +1 -0
  649. package/dist/layouts/index.d.ts +27 -850
  650. package/dist/layouts/index.d.ts.map +1 -0
  651. package/dist/layouts/index.js +3 -4
  652. package/dist/layouts/types.d.ts +317 -0
  653. package/dist/layouts/types.d.ts.map +1 -0
  654. package/dist/netron/context.d.ts +18 -0
  655. package/dist/netron/context.d.ts.map +1 -0
  656. package/dist/netron/hooks.d.ts +10 -0
  657. package/dist/netron/hooks.d.ts.map +1 -0
  658. package/dist/netron/index.d.ts +47 -4
  659. package/dist/netron/index.d.ts.map +1 -0
  660. package/dist/netron/index.js +1 -2
  661. package/dist/netron/types.d.ts +12 -0
  662. package/dist/netron/types.d.ts.map +1 -0
  663. package/dist/registry/index.d.ts +8 -341
  664. package/dist/registry/index.d.ts.map +1 -0
  665. package/dist/registry/index.js +1 -2
  666. package/dist/registry/installer.d.ts +137 -0
  667. package/dist/registry/installer.d.ts.map +1 -0
  668. package/dist/registry/manager.d.ts +196 -0
  669. package/dist/registry/manager.d.ts.map +1 -0
  670. package/dist/state/create-store.d.ts +164 -0
  671. package/dist/state/create-store.d.ts.map +1 -0
  672. package/dist/state/index.d.ts +12 -969
  673. package/dist/state/index.d.ts.map +1 -0
  674. package/dist/state/index.js +2 -3
  675. package/dist/state/settings-version.d.ts +255 -0
  676. package/dist/state/settings-version.d.ts.map +1 -0
  677. package/dist/state/stores/auth.d.ts +155 -0
  678. package/dist/state/stores/auth.d.ts.map +1 -0
  679. package/dist/state/stores/index.d.ts +10 -0
  680. package/dist/state/stores/index.d.ts.map +1 -0
  681. package/dist/state/stores/settings.d.ts +151 -0
  682. package/dist/state/stores/settings.d.ts.map +1 -0
  683. package/dist/state/stores/theme.d.ts +87 -0
  684. package/dist/state/stores/theme.d.ts.map +1 -0
  685. package/dist/state/stores/ui.d.ts +204 -0
  686. package/dist/state/stores/ui.d.ts.map +1 -0
  687. package/dist/theme/colors/base.d.ts +61 -0
  688. package/dist/theme/colors/base.d.ts.map +1 -0
  689. package/dist/theme/colors/index.d.ts +10 -0
  690. package/dist/theme/colors/index.d.ts.map +1 -0
  691. package/dist/theme/colors/luxury.d.ts +49 -0
  692. package/dist/theme/colors/luxury.d.ts.map +1 -0
  693. package/dist/theme/components/Autocomplete.d.ts +9 -0
  694. package/dist/theme/components/Autocomplete.d.ts.map +1 -0
  695. package/dist/theme/components/Button.d.ts +33 -0
  696. package/dist/theme/components/Button.d.ts.map +1 -0
  697. package/dist/theme/components/Card.d.ts +20 -0
  698. package/dist/theme/components/Card.d.ts.map +1 -0
  699. package/dist/theme/components/Chip.d.ts +29 -0
  700. package/dist/theme/components/Chip.d.ts.map +1 -0
  701. package/dist/theme/components/DataGrid.d.ts +15 -0
  702. package/dist/theme/components/DataGrid.d.ts.map +1 -0
  703. package/dist/theme/components/DatePicker.d.ts +19 -0
  704. package/dist/theme/components/DatePicker.d.ts.map +1 -0
  705. package/dist/theme/components/Dialog.d.ts +23 -0
  706. package/dist/theme/components/Dialog.d.ts.map +1 -0
  707. package/dist/theme/components/FormControls.d.ts +53 -0
  708. package/dist/theme/components/FormControls.d.ts.map +1 -0
  709. package/dist/theme/components/Tabs.d.ts +21 -0
  710. package/dist/theme/components/Tabs.d.ts.map +1 -0
  711. package/dist/theme/components/TextField.d.ts +87 -0
  712. package/dist/theme/components/TextField.d.ts.map +1 -0
  713. package/dist/theme/components/index.d.ts +27 -0
  714. package/dist/theme/components/index.d.ts.map +1 -0
  715. package/dist/theme/components/theme-utils.d.ts +42 -0
  716. package/dist/theme/components/theme-utils.d.ts.map +1 -0
  717. package/dist/theme/create-theme.d.ts +131 -0
  718. package/dist/theme/create-theme.d.ts.map +1 -0
  719. package/dist/theme/css-variables.d.ts +42 -0
  720. package/dist/theme/css-variables.d.ts.map +1 -0
  721. package/dist/theme/custom-shadows.d.ts +58 -0
  722. package/dist/theme/custom-shadows.d.ts.map +1 -0
  723. package/dist/theme/index.d.ts +23 -1045
  724. package/dist/theme/index.d.ts.map +1 -0
  725. package/dist/theme/index.js +2 -3
  726. package/dist/theme/mixins.d.ts +332 -0
  727. package/dist/theme/mixins.d.ts.map +1 -0
  728. package/dist/theme/opacity.d.ts +51 -0
  729. package/dist/theme/opacity.d.ts.map +1 -0
  730. package/dist/theme/palette/builder.d.ts +138 -0
  731. package/dist/theme/palette/builder.d.ts.map +1 -0
  732. package/dist/theme/palette/index.d.ts +7 -0
  733. package/dist/theme/palette/index.d.ts.map +1 -0
  734. package/dist/theme/palette.d.ts +43 -0
  735. package/dist/theme/palette.d.ts.map +1 -0
  736. package/dist/theme/presets/arctic.d.ts +13 -0
  737. package/dist/theme/presets/arctic.d.ts.map +1 -0
  738. package/dist/theme/presets/default.d.ts +13 -0
  739. package/dist/theme/presets/default.d.ts.map +1 -0
  740. package/dist/theme/presets/dracula.d.ts +27 -0
  741. package/dist/theme/presets/dracula.d.ts.map +1 -0
  742. package/dist/theme/presets/ember.d.ts +23 -0
  743. package/dist/theme/presets/ember.d.ts.map +1 -0
  744. package/dist/theme/presets/index.d.ts +39 -0
  745. package/dist/theme/presets/index.d.ts.map +1 -0
  746. package/dist/theme/presets/luxury.d.ts +13 -0
  747. package/dist/theme/presets/luxury.d.ts.map +1 -0
  748. package/dist/theme/presets/midnight.d.ts +23 -0
  749. package/dist/theme/presets/midnight.d.ts.map +1 -0
  750. package/dist/theme/presets/minimal.d.ts +23 -0
  751. package/dist/theme/presets/minimal.d.ts.map +1 -0
  752. package/dist/theme/presets/nature.d.ts +14 -0
  753. package/dist/theme/presets/nature.d.ts.map +1 -0
  754. package/dist/theme/presets/retro.d.ts +23 -0
  755. package/dist/theme/presets/retro.d.ts.map +1 -0
  756. package/dist/theme/shadows.d.ts +61 -0
  757. package/dist/theme/shadows.d.ts.map +1 -0
  758. package/dist/theme/typography.d.ts +24 -0
  759. package/dist/theme/typography.d.ts.map +1 -0
  760. package/dist/theme/utils/color.d.ts +295 -0
  761. package/dist/theme/utils/color.d.ts.map +1 -0
  762. package/dist/theme/utils/index.d.ts +7 -0
  763. package/dist/theme/utils/index.d.ts.map +1 -0
  764. package/dist/{registry-BrDNftd5.d.ts → types/blocks.d.ts} +30 -191
  765. package/dist/types/blocks.d.ts.map +1 -0
  766. package/dist/types/components.d.ts +139 -0
  767. package/dist/types/components.d.ts.map +1 -0
  768. package/dist/{config-BA6IeTq9.d.ts → types/config.d.ts} +14 -16
  769. package/dist/types/config.d.ts.map +1 -0
  770. package/dist/types/index.d.ts +11 -144
  771. package/dist/types/index.d.ts.map +1 -0
  772. package/dist/types/index.js +1 -2
  773. package/dist/types/registry.d.ts +158 -0
  774. package/dist/types/registry.d.ts.map +1 -0
  775. package/dist/{theme-CrXLfP1c.d.ts → types/theme.d.ts} +31 -34
  776. package/dist/types/theme.d.ts.map +1 -0
  777. package/dist/utils/async-lock.d.ts +169 -0
  778. package/dist/utils/async-lock.d.ts.map +1 -0
  779. package/dist/utils/cn.d.ts +80 -0
  780. package/dist/utils/cn.d.ts.map +1 -0
  781. package/dist/utils/cookies.d.ts +68 -0
  782. package/dist/utils/cookies.d.ts.map +1 -0
  783. package/dist/utils/create-classes.d.ts +90 -0
  784. package/dist/utils/create-classes.d.ts.map +1 -0
  785. package/dist/utils/errors.d.ts +201 -0
  786. package/dist/utils/errors.d.ts.map +1 -0
  787. package/dist/utils/fetch-interceptor.d.ts +230 -0
  788. package/dist/utils/fetch-interceptor.d.ts.map +1 -0
  789. package/dist/utils/font.d.ts +65 -0
  790. package/dist/utils/font.d.ts.map +1 -0
  791. package/dist/utils/format-crypto.d.ts +312 -0
  792. package/dist/utils/format-crypto.d.ts.map +1 -0
  793. package/dist/utils/format-date.d.ts +240 -0
  794. package/dist/utils/format-date.d.ts.map +1 -0
  795. package/dist/utils/format-number.d.ts +245 -0
  796. package/dist/utils/format-number.d.ts.map +1 -0
  797. package/dist/utils/i18n-text.d.ts +68 -0
  798. package/dist/utils/i18n-text.d.ts.map +1 -0
  799. package/dist/utils/index.d.ts +30 -0
  800. package/dist/utils/index.d.ts.map +1 -0
  801. package/dist/utils/jwt.d.ts +227 -0
  802. package/dist/utils/jwt.d.ts.map +1 -0
  803. package/dist/utils/object.d.ts +96 -0
  804. package/dist/utils/object.d.ts.map +1 -0
  805. package/dist/utils/refs.d.ts +60 -0
  806. package/dist/utils/refs.d.ts.map +1 -0
  807. package/dist/utils/rtl.d.ts +75 -0
  808. package/dist/utils/rtl.d.ts.map +1 -0
  809. package/dist/utils/storage.d.ts +190 -0
  810. package/dist/utils/storage.d.ts.map +1 -0
  811. package/dist/utils/string.d.ts +216 -0
  812. package/dist/utils/string.d.ts.map +1 -0
  813. package/dist/utils/template-resolver.d.ts +12 -0
  814. package/dist/utils/template-resolver.d.ts.map +1 -0
  815. package/dist/utils/toast.d.ts +25 -0
  816. package/dist/utils/toast.d.ts.map +1 -0
  817. package/dist/utils/transform-number.d.ts +108 -0
  818. package/dist/utils/transform-number.d.ts.map +1 -0
  819. package/dist/utils/url.d.ts +198 -0
  820. package/dist/utils/url.d.ts.map +1 -0
  821. package/package.json +77 -61
  822. package/dist/chunk-77KIJLPP.js +0 -37
  823. package/dist/chunk-77KIJLPP.js.map +0 -1
  824. package/dist/chunk-BTIT7WYH.js.map +0 -1
  825. package/dist/chunk-BV32OJ2A.js.map +0 -1
  826. package/dist/chunk-DDY7TLUI.js.map +0 -1
  827. package/dist/chunk-DXXZ3ITR.js.map +0 -1
  828. package/dist/chunk-E3XANPTO.js.map +0 -1
  829. package/dist/chunk-GYDT5EKX.js +0 -16505
  830. package/dist/chunk-GYDT5EKX.js.map +0 -1
  831. package/dist/chunk-HO2GKTWJ.js.map +0 -1
  832. package/dist/chunk-JDTC2SBY.js.map +0 -1
  833. package/dist/chunk-LAEY5USO.js.map +0 -1
  834. package/dist/chunk-UR6X3W5I.js.map +0 -1
  835. package/dist/chunk-WC2WM2JD.js.map +0 -1
  836. package/dist/chunk-XWL6J6IO.js.map +0 -1
  837. package/dist/index-odhPSv9I.d.ts +0 -2491
  838. package/dist/settings-plpR26Xk.d.ts +0 -455
  839. package/dist/use-timeout-D7U3EAtH.d.ts +0 -808
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/blocks/dashboard-block/dashboard-block.tsx","../../src/blocks/dashboard-block/use-dashboard-block.ts","../../src/blocks/auth-block/auth-block.tsx","../../src/blocks/auth-block/guards.tsx","../../src/blocks/data-grid-block/data-grid-block.tsx"],"names":["Box","Typography","IconButton","Button","useCallback","useMemo","jsxs","jsx","useState","Fragment","Divider","useEffect","createContext","useContext","ErrorState","Paper"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Dashboard Block Component\n *\n * Reusable dashboard widget/card block with header, content, and footer slots.\n * Supports loading, error states, and collapsible behavior.\n *\n * @module @omnitron-dev/prism/blocks/dashboard-block\n */\n\n'use client';\n\nimport { type ReactNode, createContext, useContext, useMemo, useCallback } from 'react';\nimport Box from '@mui/material/Box';\nimport Paper from '@mui/material/Paper';\nimport Typography from '@mui/material/Typography';\nimport IconButton from '@mui/material/IconButton';\nimport Collapse from '@mui/material/Collapse';\nimport Divider from '@mui/material/Divider';\nimport Skeleton from '@mui/material/Skeleton';\nimport Button from '@mui/material/Button';\nimport { useBoolean } from '../../core/hooks/use-boolean.js';\nimport type {\n DashboardBlockProps,\n DashboardBlockContextValue,\n DashboardBlockHeaderProps,\n DashboardBlockContentProps,\n DashboardBlockFooterProps,\n} from './types.js';\n\n// =============================================================================\n// CONTEXT\n// =============================================================================\n\n/** Stable no-op for non-collapsible blocks */\nconst collapseNoop = () => {};\n\nconst DashboardBlockContext = createContext<DashboardBlockContextValue | null>(null);\n\n/**\n * Hook to access dashboard block context.\n */\nexport function useDashboardBlockContext(): DashboardBlockContextValue {\n const context = useContext(DashboardBlockContext);\n if (!context) {\n throw new Error('useDashboardBlockContext must be used within DashboardBlock');\n }\n return context;\n}\n\n// =============================================================================\n// SIZE CONFIGS\n// =============================================================================\n\nconst sizeConfig = {\n small: {\n headerPx: 2,\n headerPy: 1.5,\n contentPx: 2,\n contentPy: 1.5,\n titleVariant: 'subtitle1' as const,\n subtitleVariant: 'caption' as const,\n },\n medium: {\n headerPx: 2.5,\n headerPy: 2,\n contentPx: 2.5,\n contentPy: 2,\n titleVariant: 'h6' as const,\n subtitleVariant: 'body2' as const,\n },\n large: {\n headerPx: 3,\n headerPy: 2.5,\n contentPx: 3,\n contentPy: 2.5,\n titleVariant: 'h5' as const,\n subtitleVariant: 'body1' as const,\n },\n};\n\n// =============================================================================\n// SUB-COMPONENTS\n// =============================================================================\n\n/**\n * Dashboard block header component.\n */\nexport function DashboardBlockHeader({ title, subtitle, icon, actions, sx }: DashboardBlockHeaderProps): ReactNode {\n const { collapsed, toggleCollapse, variant, size } = useDashboardBlockContext();\n const config = sizeConfig[size];\n\n return (\n <Box\n data-testid=\"prism-dashboard-block-header\"\n sx={[\n {\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n gap: 2,\n px: config.headerPx,\n py: config.headerPy,\n },\n ...(Array.isArray(sx) ? sx : [sx]),\n ]}\n >\n <Box sx={{ display: 'flex', alignItems: 'flex-start', gap: 1.5, flex: 1, minWidth: 0 }}>\n {icon && (\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n mt: 0.25,\n color: 'primary.main',\n }}\n >\n {icon}\n </Box>\n )}\n <Box sx={{ flex: 1, minWidth: 0 }}>\n <Typography variant={config.titleVariant} component=\"h3\" sx={{ fontWeight: 600, lineHeight: 1.4 }} noWrap>\n {title}\n </Typography>\n {subtitle && (\n <Typography variant={config.subtitleVariant} color=\"text.secondary\" sx={{ mt: 0.25 }}>\n {subtitle}\n </Typography>\n )}\n </Box>\n </Box>\n\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5, flexShrink: 0 }}>\n {actions}\n {collapsed !== undefined && (\n <IconButton\n size=\"small\"\n onClick={toggleCollapse}\n aria-expanded={!collapsed}\n aria-label={collapsed ? 'Expand block' : 'Collapse block'}\n data-testid=\"prism-dashboard-block-collapse\"\n >\n <ChevronIcon direction={collapsed ? 'down' : 'up'} />\n </IconButton>\n )}\n </Box>\n </Box>\n );\n}\n\n/**\n * Dashboard block content component.\n */\nexport function DashboardBlockContent({ children, disablePadding = false, sx }: DashboardBlockContentProps): ReactNode {\n const { collapsed, loading, error, size } = useDashboardBlockContext();\n const config = sizeConfig[size];\n\n return (\n <Collapse in={!collapsed} timeout=\"auto\">\n <Box\n data-testid=\"prism-dashboard-block-content\"\n sx={[\n {\n ...(!disablePadding && {\n px: config.contentPx,\n py: config.contentPy,\n }),\n },\n ...(Array.isArray(sx) ? sx : [sx]),\n ]}\n >\n {children}\n </Box>\n </Collapse>\n );\n}\n\n/**\n * Dashboard block footer component.\n */\nexport function DashboardBlockFooter({ children, divider = true, sx }: DashboardBlockFooterProps): ReactNode {\n const { collapsed, size } = useDashboardBlockContext();\n const config = sizeConfig[size];\n\n if (collapsed) return null;\n\n return (\n <>\n {divider && <Divider />}\n <Box\n data-testid=\"prism-dashboard-block-footer\"\n sx={[\n {\n px: config.contentPx,\n py: 1.5,\n },\n ...(Array.isArray(sx) ? sx : [sx]),\n ]}\n >\n {children}\n </Box>\n </>\n );\n}\n\n// =============================================================================\n// LOADING & ERROR STATES\n// =============================================================================\n\ninterface LoadingStateProps {\n rows?: number;\n size: 'small' | 'medium' | 'large';\n}\n\nfunction LoadingState({ rows = 3, size }: LoadingStateProps): ReactNode {\n const config = sizeConfig[size];\n return (\n <Box sx={{ px: config.contentPx, py: config.contentPy }}>\n {Array.from({ length: rows }).map((_, i) => (\n <Skeleton key={i} variant=\"text\" animation=\"wave\" sx={{ height: 20, mb: 1 }} />\n ))}\n </Box>\n );\n}\n\ninterface ErrorStateProps {\n message?: string;\n onRetry?: () => void;\n size: 'small' | 'medium' | 'large';\n}\n\nfunction ErrorState({ message = 'Failed to load data', onRetry, size }: ErrorStateProps): ReactNode {\n const config = sizeConfig[size];\n return (\n <Box\n sx={{\n px: config.contentPx,\n py: config.contentPy,\n textAlign: 'center',\n }}\n >\n <Typography color=\"error\" variant=\"body2\" sx={{ mb: onRetry ? 1.5 : 0 }}>\n {message}\n </Typography>\n {onRetry && (\n <Button size=\"small\" onClick={onRetry}>\n Retry\n </Button>\n )}\n </Box>\n );\n}\n\n// =============================================================================\n// MAIN COMPONENT\n// =============================================================================\n\n/**\n * Dashboard Block - Reusable dashboard widget/card.\n *\n * Features:\n * - Header with title, subtitle, icon, and actions\n * - Content area with optional padding\n * - Footer slot with optional divider\n * - Loading and error states\n * - Collapsible behavior (controlled or uncontrolled)\n * - Three size presets (small, medium, large)\n * - Three variants (default, outlined, filled)\n *\n * @example\n * ```tsx\n * <DashboardBlock\n * title=\"Revenue Overview\"\n * subtitle=\"Last 30 days\"\n * icon={<BarChartIcon />}\n * actions={<IconButton><MoreIcon /></IconButton>}\n * collapsible\n * >\n * <RevenueChart />\n * </DashboardBlock>\n * ```\n */\nexport function DashboardBlock({\n title,\n subtitle,\n icon,\n actions,\n children,\n footer,\n variant = 'default',\n size = 'medium',\n loading = false,\n loadingConfig,\n error = false,\n errorConfig,\n collapsible = false,\n defaultCollapsed = false,\n collapsed: controlledCollapsed,\n onCollapseChange,\n disablePadding = false,\n footerDivider = true,\n sx,\n slotProps,\n}: DashboardBlockProps): ReactNode {\n // Collapse state (controlled or uncontrolled)\n const uncontrolledCollapse = useBoolean(defaultCollapsed);\n const isControlled = controlledCollapsed !== undefined;\n const collapsed = isControlled ? controlledCollapsed : uncontrolledCollapse.value;\n\n const handleToggleCollapse = useCallback(() => {\n if (isControlled) {\n onCollapseChange?.(!controlledCollapsed);\n } else {\n uncontrolledCollapse.onToggle();\n }\n }, [isControlled, controlledCollapsed, onCollapseChange, uncontrolledCollapse]);\n\n const handleSetCollapsed = useCallback(\n (value: boolean) => {\n if (isControlled) {\n onCollapseChange?.(value);\n } else {\n uncontrolledCollapse.setValue(value);\n }\n },\n [isControlled, onCollapseChange, uncontrolledCollapse]\n );\n\n // Context value\n const contextValue = useMemo<DashboardBlockContextValue>(\n () => ({\n collapsed: collapsible ? collapsed : false,\n toggleCollapse: collapsible ? handleToggleCollapse : collapseNoop,\n setCollapsed: collapsible ? handleSetCollapsed : collapseNoop,\n loading,\n error,\n variant,\n size,\n }),\n [collapsed, collapsible, handleToggleCollapse, handleSetCollapsed, loading, error, variant, size]\n );\n\n // Paper variant based on block variant\n const paperVariant = variant === 'outlined' ? 'outlined' : 'elevation';\n const paperElevation = variant === 'default' ? 1 : 0;\n\n return (\n <DashboardBlockContext.Provider value={contextValue}>\n <Paper\n data-testid=\"prism-dashboard-block\"\n variant={paperVariant}\n elevation={paperElevation}\n sx={[\n {\n overflow: 'hidden',\n ...(variant === 'filled' && {\n bgcolor: 'action.hover',\n }),\n },\n ...(Array.isArray(sx) ? sx : [sx]),\n ]}\n >\n {/* Header */}\n {title && (\n <DashboardBlockHeader\n title={title}\n subtitle={subtitle}\n icon={icon}\n actions={actions}\n {...slotProps?.header}\n />\n )}\n\n {/* Divider after header */}\n {title && <Divider />}\n\n {/* Content */}\n <Box aria-live=\"polite\" aria-busy={loading}>\n {loading ? (\n (loadingConfig?.loadingComponent ?? <LoadingState rows={loadingConfig?.skeletonRows ?? 3} size={size} />)\n ) : error ? (\n (errorConfig?.errorComponent ?? (\n <ErrorState message={errorConfig?.message} onRetry={errorConfig?.onRetry} size={size} />\n ))\n ) : children ? (\n <DashboardBlockContent disablePadding={disablePadding} {...slotProps?.content}>\n {children}\n </DashboardBlockContent>\n ) : null}\n </Box>\n\n {/* Footer */}\n {footer && !loading && !error && (\n <DashboardBlockFooter divider={footerDivider} {...slotProps?.footer}>\n {footer}\n </DashboardBlockFooter>\n )}\n </Paper>\n </DashboardBlockContext.Provider>\n );\n}\n\n// =============================================================================\n// CHEVRON ICON\n// =============================================================================\n\ninterface ChevronIconProps {\n direction: 'up' | 'down';\n}\n\nfunction ChevronIcon({ direction }: ChevronIconProps): ReactNode {\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n style={{\n transform: direction === 'up' ? 'rotate(180deg)' : undefined,\n transition: 'transform 0.2s ease',\n }}\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n );\n}\n","/**\n * Dashboard Block Hook\n *\n * Hook for managing dashboard block state and behavior.\n *\n * @module @omnitron-dev/prism/blocks/dashboard-block/use-dashboard-block\n */\n\n'use client';\n\nimport { useState, useCallback, useMemo } from 'react';\nimport type { DashboardBlockProps } from './types.js';\n\n/**\n * Dashboard block state.\n */\nexport interface DashboardBlockState {\n /** Current collapsed state */\n collapsed: boolean;\n /** Current loading state */\n loading: boolean;\n /** Current error state */\n error: boolean;\n /** Error message */\n errorMessage?: string;\n}\n\n/**\n * Dashboard block actions.\n */\nexport interface DashboardBlockActions {\n /** Toggle collapse state */\n toggleCollapse: () => void;\n /** Set collapsed state */\n setCollapsed: (collapsed: boolean) => void;\n /** Expand block */\n expand: () => void;\n /** Collapse block */\n collapse: () => void;\n /** Set loading state */\n setLoading: (loading: boolean) => void;\n /** Set error state */\n setError: (error: boolean, message?: string) => void;\n /** Clear error state */\n clearError: () => void;\n /** Reset to initial state */\n reset: () => void;\n}\n\n/**\n * Dashboard block hook return value.\n */\nexport interface UseDashboardBlockReturn {\n /** Current state */\n state: DashboardBlockState;\n /** Actions to modify state */\n actions: DashboardBlockActions;\n /** Props to spread on DashboardBlock */\n blockProps: Pick<DashboardBlockProps, 'collapsed' | 'onCollapseChange' | 'loading' | 'error' | 'errorConfig'>;\n}\n\n/**\n * Options for useDashboardBlock hook.\n */\nexport interface UseDashboardBlockOptions {\n /** Initial collapsed state */\n defaultCollapsed?: boolean;\n /** Initial loading state */\n defaultLoading?: boolean;\n /** Retry callback for error state */\n onRetry?: () => void;\n}\n\n/**\n * Hook for managing dashboard block state.\n *\n * Provides controlled state management for DashboardBlock component,\n * including collapse, loading, and error states.\n *\n * @example\n * ```tsx\n * function MyWidget() {\n * const { state, actions, blockProps } = useDashboardBlock({\n * defaultCollapsed: false,\n * onRetry: () => fetchData(),\n * });\n *\n * useEffect(() => {\n * actions.setLoading(true);\n * fetchData()\n * .then(() => actions.setLoading(false))\n * .catch((err) => actions.setError(true, err.message));\n * }, []);\n *\n * return (\n * <DashboardBlock title=\"My Widget\" {...blockProps}>\n * <Content />\n * </DashboardBlock>\n * );\n * }\n * ```\n */\nexport function useDashboardBlock(options: UseDashboardBlockOptions = {}): UseDashboardBlockReturn {\n const { defaultCollapsed = false, defaultLoading = false, onRetry } = options;\n\n const [state, setState] = useState<DashboardBlockState>({\n collapsed: defaultCollapsed,\n loading: defaultLoading,\n error: false,\n errorMessage: undefined,\n });\n\n const toggleCollapse = useCallback(() => {\n setState((prev) => ({ ...prev, collapsed: !prev.collapsed }));\n }, []);\n\n const setCollapsed = useCallback((collapsed: boolean) => {\n setState((prev) => ({ ...prev, collapsed }));\n }, []);\n\n const expand = useCallback(() => {\n setState((prev) => ({ ...prev, collapsed: false }));\n }, []);\n\n const collapse = useCallback(() => {\n setState((prev) => ({ ...prev, collapsed: true }));\n }, []);\n\n const setLoading = useCallback((loading: boolean) => {\n setState((prev) => ({ ...prev, loading }));\n }, []);\n\n const setError = useCallback((error: boolean, errorMessage?: string) => {\n setState((prev) => ({ ...prev, error, errorMessage, loading: false }));\n }, []);\n\n const clearError = useCallback(() => {\n setState((prev) => ({ ...prev, error: false, errorMessage: undefined }));\n }, []);\n\n const reset = useCallback(() => {\n setState({\n collapsed: defaultCollapsed,\n loading: defaultLoading,\n error: false,\n errorMessage: undefined,\n });\n }, [defaultCollapsed, defaultLoading]);\n\n const actions = useMemo<DashboardBlockActions>(\n () => ({\n toggleCollapse,\n setCollapsed,\n expand,\n collapse,\n setLoading,\n setError,\n clearError,\n reset,\n }),\n [toggleCollapse, setCollapsed, expand, collapse, setLoading, setError, clearError, reset]\n );\n\n const blockProps = useMemo(\n () => ({\n collapsed: state.collapsed,\n onCollapseChange: setCollapsed,\n loading: state.loading,\n error: state.error,\n errorConfig: state.error\n ? {\n message: state.errorMessage,\n onRetry,\n }\n : undefined,\n }),\n [state.collapsed, state.loading, state.error, state.errorMessage, setCollapsed, onRetry]\n );\n\n return {\n state,\n actions,\n blockProps,\n };\n}\n","'use client';\n\n/**\n * Auth Block Component\n *\n * Reusable authentication forms: login, register, forgot password, etc.\n * Integrates with React Hook Form and Zod for validation.\n *\n * @module @omnitron-dev/prism/blocks/auth-block\n */\n\nimport type { ReactNode } from 'react';\nimport { useState, useEffect, useCallback } from 'react';\nimport { useForm, FormProvider, type Resolver } from 'react-hook-form';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { z } from 'zod';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport Typography from '@mui/material/Typography';\nimport Link from '@mui/material/Link';\nimport Divider from '@mui/material/Divider';\nimport Alert from '@mui/material/Alert';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport IconButton from '@mui/material/IconButton';\nimport { Field } from '../../components/field/index.js';\nimport type {\n LoginFormProps,\n LoginFormData,\n RegisterFormProps,\n RegisterFormData,\n ForgotPasswordFormProps,\n ForgotPasswordFormData,\n ResetPasswordFormProps,\n ResetPasswordFormData,\n VerifyCodeFormProps,\n VerifyCodeFormData,\n} from './types.js';\n\n// =============================================================================\n// ICONS (inline SVG to avoid dependencies)\n// =============================================================================\n\nfunction EyeIcon(): ReactNode {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n );\n}\n\nfunction EyeOffIcon(): ReactNode {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\" />\n <line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\" />\n </svg>\n );\n}\n\n// =============================================================================\n// ERROR SANITIZATION\n// =============================================================================\n\n/**\n * Patterns that indicate a server-internal error message that should not\n * be shown to the user (e.g., stack traces, connection strings, file paths).\n */\nconst UNSAFE_ERROR_PATTERNS = [\n /at\\s+\\w+\\s*\\(/i, // stack trace frames\n /\\b(ECONNREFUSED|ETIMEDOUT|ENOTFOUND)\\b/, // Node.js system errors\n /\\b(SELECT|INSERT|UPDATE|DELETE)\\b.*\\bFROM\\b/i, // SQL fragments\n /\\/[a-z_-]+\\/[a-z_-]+\\//i, // Unix file paths\n /[A-Z]:\\\\[^\\s]+/, // Windows file paths\n /password|secret|token|key/i, // sensitive keywords in error context\n];\n\nconst DEFAULT_AUTH_ERROR = 'An error occurred. Please try again.';\n\n/**\n * Sanitize error messages to prevent information disclosure.\n * Passes through safe, user-facing messages while replacing\n * server-internal details with a generic fallback.\n */\nfunction sanitizeErrorMessage(err: unknown, fallback: string = DEFAULT_AUTH_ERROR): string {\n if (!(err instanceof Error)) return fallback;\n\n const message = err.message;\n\n // Reject messages that look like internal server errors\n for (const pattern of UNSAFE_ERROR_PATTERNS) {\n if (pattern.test(message)) return fallback;\n }\n\n // Reject overly long messages (likely stack traces or debug info)\n if (message.length > 200) return fallback;\n\n return message;\n}\n\n// =============================================================================\n// DEFAULT SCHEMAS\n// =============================================================================\n\nconst defaultLoginSchema = z.object({\n email: z.string().email('Please enter a valid email'),\n password: z.string().min(1, 'Password is required'),\n rememberMe: z.boolean().optional(),\n});\n\nconst createRegisterSchema = (minPasswordLength: number = 8, requireTerms: boolean = true) =>\n z\n .object({\n email: z.string().email('Please enter a valid email'),\n password: z.string().min(minPasswordLength, `Password must be at least ${minPasswordLength} characters`),\n confirmPassword: z.string(),\n firstName: z.string().optional(),\n lastName: z.string().optional(),\n acceptTerms: requireTerms\n ? z.boolean().refine((val) => val === true, { message: 'You must accept the terms' })\n : z.boolean().optional(),\n })\n .refine((data) => data.password === data.confirmPassword, {\n message: 'Passwords do not match',\n path: ['confirmPassword'],\n });\n\nconst defaultForgotPasswordSchema = z.object({\n email: z.string().email('Please enter a valid email'),\n});\n\nconst createResetPasswordSchema = (minPasswordLength: number = 8) =>\n z\n .object({\n password: z.string().min(minPasswordLength, `Password must be at least ${minPasswordLength} characters`),\n confirmPassword: z.string(),\n })\n .refine((data) => data.password === data.confirmPassword, {\n message: 'Passwords do not match',\n path: ['confirmPassword'],\n });\n\nconst createVerifyCodeSchema = (codeLength: number = 6) =>\n z.object({\n code: z.string().length(codeLength, `Code must be ${codeLength} digits`),\n });\n\n// =============================================================================\n// LOGIN FORM\n// =============================================================================\n\n/**\n * Login form component with email/password authentication.\n *\n * @example\n * ```tsx\n * <LoginForm\n * onSubmit={async (data) => {\n * await signIn(data.email, data.password);\n * }}\n * showRememberMe\n * showForgotPassword\n * onForgotPassword={() => navigate('/forgot-password')}\n * />\n * ```\n */\nexport function LoginForm({\n onSubmit,\n loading = false,\n disabled = false,\n showRememberMe = true,\n showForgotPassword = true,\n onForgotPassword,\n showSocialLogin = false,\n socialProviders = [],\n schema,\n labels = {},\n sx,\n slotProps,\n}: LoginFormProps): ReactNode {\n const [showPassword, setShowPassword] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const methods = useForm<LoginFormData>({\n resolver: zodResolver(schema ?? (defaultLoginSchema as any)) as Resolver<LoginFormData>,\n defaultValues: {\n email: '',\n password: '',\n rememberMe: false,\n },\n });\n\n const handleSubmit = methods.handleSubmit(async (data: LoginFormData) => {\n setError(null);\n try {\n await onSubmit(data);\n } catch (err) {\n setError(sanitizeErrorMessage(err));\n }\n });\n\n return (\n <FormProvider {...methods}>\n <Box\n component=\"form\"\n onSubmit={handleSubmit}\n sx={[{ display: 'flex', flexDirection: 'column', gap: 2.5 }, ...(Array.isArray(sx) ? sx : [sx])]}\n {...slotProps?.wrapper}\n >\n {error && (\n <Alert severity=\"error\" onClose={() => setError(null)}>\n {error}\n </Alert>\n )}\n\n <Field.Text\n name=\"email\"\n label={labels.email ?? 'Email'}\n type=\"email\"\n autoComplete=\"email\"\n disabled={disabled || loading}\n {...slotProps?.textField}\n />\n\n <Field.Text\n name=\"password\"\n label={labels.password ?? 'Password'}\n type={showPassword ? 'text' : 'password'}\n autoComplete=\"current-password\"\n disabled={disabled || loading}\n slotProps={{\n input: {\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton\n onClick={() => setShowPassword(!showPassword)}\n edge=\"end\"\n aria-label={showPassword ? 'Hide password' : 'Show password'}\n >\n {showPassword ? <EyeOffIcon /> : <EyeIcon />}\n </IconButton>\n </InputAdornment>\n ),\n },\n }}\n {...slotProps?.textField}\n />\n\n {(showRememberMe || showForgotPassword) && (\n <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n {showRememberMe && (\n <Field.Checkbox\n name=\"rememberMe\"\n label={labels.rememberMe ?? 'Remember me'}\n disabled={disabled || loading}\n />\n )}\n {showForgotPassword && (\n <Link\n component=\"button\"\n type=\"button\"\n variant=\"body2\"\n onClick={onForgotPassword}\n sx={{ textDecoration: 'none' }}\n >\n {labels.forgotPassword ?? 'Forgot password?'}\n </Link>\n )}\n </Box>\n )}\n\n <Button\n type=\"submit\"\n variant=\"contained\"\n size=\"large\"\n fullWidth\n disabled={disabled || loading}\n {...slotProps?.submitButton}\n >\n {loading ? <CircularProgress size={24} color=\"inherit\" /> : (labels.submit ?? 'Sign In')}\n </Button>\n\n {showSocialLogin && socialProviders.length > 0 && (\n <>\n <Divider>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {labels.socialDivider ?? 'or continue with'}\n </Typography>\n </Divider>\n <Box sx={{ display: 'flex', gap: 1.5, justifyContent: 'center' }}>\n {socialProviders.map((provider) => (\n <IconButton\n key={provider.id}\n onClick={provider.onClick}\n disabled={disabled || loading}\n sx={{\n border: 1,\n borderColor: 'divider',\n borderRadius: 1,\n p: 1,\n }}\n aria-label={`Sign in with ${provider.name}`}\n >\n {provider.icon}\n </IconButton>\n ))}\n </Box>\n </>\n )}\n </Box>\n </FormProvider>\n );\n}\n\n// =============================================================================\n// REGISTER FORM\n// =============================================================================\n\n/**\n * Registration form component.\n *\n * @example\n * ```tsx\n * <RegisterForm\n * onSubmit={async (data) => {\n * await signUp(data);\n * }}\n * showNameFields\n * requireTerms\n * onTermsClick={() => window.open('/terms')}\n * />\n * ```\n */\nexport function RegisterForm({\n onSubmit,\n loading = false,\n disabled = false,\n showNameFields = false,\n requireTerms = true,\n onTermsClick,\n onPrivacyClick,\n minPasswordLength = 8,\n schema,\n labels = {},\n sx,\n slotProps,\n}: RegisterFormProps): ReactNode {\n const [showPassword, setShowPassword] = useState(false);\n const [showConfirmPassword, setShowConfirmPassword] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const methods = useForm<RegisterFormData>({\n resolver: zodResolver(\n schema ?? (createRegisterSchema(minPasswordLength, requireTerms) as any)\n ) as Resolver<RegisterFormData>,\n defaultValues: {\n email: '',\n password: '',\n confirmPassword: '',\n firstName: '',\n lastName: '',\n acceptTerms: false,\n },\n });\n\n const handleSubmit = methods.handleSubmit(async (data: RegisterFormData) => {\n setError(null);\n try {\n await onSubmit(data);\n } catch (err) {\n setError(sanitizeErrorMessage(err));\n }\n });\n\n return (\n <FormProvider {...methods}>\n <Box\n component=\"form\"\n onSubmit={handleSubmit}\n sx={[{ display: 'flex', flexDirection: 'column', gap: 2.5 }, ...(Array.isArray(sx) ? sx : [sx])]}\n {...slotProps?.wrapper}\n >\n {error && (\n <Alert severity=\"error\" onClose={() => setError(null)}>\n {error}\n </Alert>\n )}\n\n {showNameFields && (\n <Box sx={{ display: 'flex', gap: 2 }}>\n <Field.Text\n name=\"firstName\"\n label={labels.firstName ?? 'First Name'}\n autoComplete=\"given-name\"\n disabled={disabled || loading}\n {...slotProps?.textField}\n />\n <Field.Text\n name=\"lastName\"\n label={labels.lastName ?? 'Last Name'}\n autoComplete=\"family-name\"\n disabled={disabled || loading}\n {...slotProps?.textField}\n />\n </Box>\n )}\n\n <Field.Text\n name=\"email\"\n label={labels.email ?? 'Email'}\n type=\"email\"\n autoComplete=\"email\"\n disabled={disabled || loading}\n {...slotProps?.textField}\n />\n\n <Field.Text\n name=\"password\"\n label={labels.password ?? 'Password'}\n type={showPassword ? 'text' : 'password'}\n autoComplete=\"new-password\"\n disabled={disabled || loading}\n helperText={`At least ${minPasswordLength} characters`}\n slotProps={{\n input: {\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton\n onClick={() => setShowPassword(!showPassword)}\n edge=\"end\"\n aria-label={showPassword ? 'Hide password' : 'Show password'}\n >\n {showPassword ? <EyeOffIcon /> : <EyeIcon />}\n </IconButton>\n </InputAdornment>\n ),\n },\n }}\n {...slotProps?.textField}\n />\n\n <Field.Text\n name=\"confirmPassword\"\n label={labels.confirmPassword ?? 'Confirm Password'}\n type={showConfirmPassword ? 'text' : 'password'}\n autoComplete=\"new-password\"\n disabled={disabled || loading}\n slotProps={{\n input: {\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton\n onClick={() => setShowConfirmPassword(!showConfirmPassword)}\n edge=\"end\"\n aria-label={showConfirmPassword ? 'Hide password' : 'Show password'}\n >\n {showConfirmPassword ? <EyeOffIcon /> : <EyeIcon />}\n </IconButton>\n </InputAdornment>\n ),\n },\n }}\n {...slotProps?.textField}\n />\n\n {requireTerms && (\n <Field.Checkbox\n name=\"acceptTerms\"\n disabled={disabled || loading}\n label={\n <Typography variant=\"body2\" component=\"span\">\n {labels.acceptTerms ?? 'I agree to the '}\n <Link component=\"button\" type=\"button\" onClick={onTermsClick}>\n {labels.termsLink ?? 'Terms of Service'}\n </Link>\n {' and '}\n <Link component=\"button\" type=\"button\" onClick={onPrivacyClick}>\n {labels.privacyLink ?? 'Privacy Policy'}\n </Link>\n </Typography>\n }\n />\n )}\n\n <Button\n type=\"submit\"\n variant=\"contained\"\n size=\"large\"\n fullWidth\n disabled={disabled || loading}\n {...slotProps?.submitButton}\n >\n {loading ? <CircularProgress size={24} color=\"inherit\" /> : (labels.submit ?? 'Create Account')}\n </Button>\n </Box>\n </FormProvider>\n );\n}\n\n// =============================================================================\n// FORGOT PASSWORD FORM\n// =============================================================================\n\n/**\n * Forgot password form component.\n *\n * @example\n * ```tsx\n * <ForgotPasswordForm\n * onSubmit={async (data) => {\n * await sendPasswordResetEmail(data.email);\n * }}\n * onBackToLogin={() => navigate('/login')}\n * />\n * ```\n */\nexport function ForgotPasswordForm({\n onSubmit,\n loading = false,\n disabled = false,\n onBackToLogin,\n schema,\n labels = {},\n sx,\n slotProps,\n}: ForgotPasswordFormProps): ReactNode {\n const [error, setError] = useState<string | null>(null);\n const [success, setSuccess] = useState(false);\n\n const methods = useForm<ForgotPasswordFormData>({\n resolver: zodResolver(schema ?? (defaultForgotPasswordSchema as any)) as Resolver<ForgotPasswordFormData>,\n defaultValues: {\n email: '',\n },\n });\n\n const handleSubmit = methods.handleSubmit(async (data: ForgotPasswordFormData) => {\n setError(null);\n try {\n await onSubmit(data);\n setSuccess(true);\n } catch (err) {\n setError(sanitizeErrorMessage(err));\n }\n });\n\n if (success) {\n return (\n <Box sx={{ textAlign: 'center' }}>\n <Typography variant=\"h6\" gutterBottom>\n Check your email\n </Typography>\n <Typography variant=\"body2\" color=\"text.secondary\" sx={{ mb: 3 }}>\n We sent a password reset link to your email address.\n </Typography>\n {onBackToLogin && (\n <Button variant=\"text\" onClick={onBackToLogin}>\n {labels.backToLogin ?? 'Back to login'}\n </Button>\n )}\n </Box>\n );\n }\n\n return (\n <FormProvider {...methods}>\n <Box\n component=\"form\"\n onSubmit={handleSubmit}\n sx={[{ display: 'flex', flexDirection: 'column', gap: 2.5 }, ...(Array.isArray(sx) ? sx : [sx])]}\n {...slotProps?.wrapper}\n >\n <Box sx={{ textAlign: 'center', mb: 1 }}>\n <Typography variant=\"h6\" gutterBottom>\n {labels.title ?? 'Forgot password?'}\n </Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {labels.description ?? \"Enter your email and we'll send you a reset link.\"}\n </Typography>\n </Box>\n\n {error && (\n <Alert severity=\"error\" onClose={() => setError(null)}>\n {error}\n </Alert>\n )}\n\n <Field.Text\n name=\"email\"\n label={labels.email ?? 'Email'}\n type=\"email\"\n autoComplete=\"email\"\n disabled={disabled || loading}\n {...slotProps?.textField}\n />\n\n <Button\n type=\"submit\"\n variant=\"contained\"\n size=\"large\"\n fullWidth\n disabled={disabled || loading}\n {...slotProps?.submitButton}\n >\n {loading ? <CircularProgress size={24} color=\"inherit\" /> : (labels.submit ?? 'Send Reset Link')}\n </Button>\n\n {onBackToLogin && (\n <Button variant=\"text\" onClick={onBackToLogin} disabled={loading}>\n {labels.backToLogin ?? 'Back to login'}\n </Button>\n )}\n </Box>\n </FormProvider>\n );\n}\n\n// =============================================================================\n// RESET PASSWORD FORM\n// =============================================================================\n\n/**\n * Reset password form component.\n *\n * @example\n * ```tsx\n * <ResetPasswordForm\n * onSubmit={async (data) => {\n * await resetPassword(token, data.password);\n * }}\n * />\n * ```\n */\nexport function ResetPasswordForm({\n onSubmit,\n loading = false,\n disabled = false,\n minPasswordLength = 8,\n schema,\n labels = {},\n sx,\n slotProps,\n}: ResetPasswordFormProps): ReactNode {\n const [showPassword, setShowPassword] = useState(false);\n const [showConfirmPassword, setShowConfirmPassword] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const methods = useForm<ResetPasswordFormData>({\n resolver: zodResolver(\n schema ?? (createResetPasswordSchema(minPasswordLength) as any)\n ) as Resolver<ResetPasswordFormData>,\n defaultValues: {\n password: '',\n confirmPassword: '',\n },\n });\n\n const handleSubmit = methods.handleSubmit(async (data: ResetPasswordFormData) => {\n setError(null);\n try {\n await onSubmit(data);\n } catch (err) {\n setError(sanitizeErrorMessage(err));\n }\n });\n\n return (\n <FormProvider {...methods}>\n <Box\n component=\"form\"\n onSubmit={handleSubmit}\n sx={[{ display: 'flex', flexDirection: 'column', gap: 2.5 }, ...(Array.isArray(sx) ? sx : [sx])]}\n {...slotProps?.wrapper}\n >\n <Box sx={{ textAlign: 'center', mb: 1 }}>\n <Typography variant=\"h6\" gutterBottom>\n {labels.title ?? 'Set new password'}\n </Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {labels.description ?? 'Create a new password for your account.'}\n </Typography>\n </Box>\n\n {error && (\n <Alert severity=\"error\" onClose={() => setError(null)}>\n {error}\n </Alert>\n )}\n\n <Field.Text\n name=\"password\"\n label={labels.password ?? 'New Password'}\n type={showPassword ? 'text' : 'password'}\n autoComplete=\"new-password\"\n disabled={disabled || loading}\n helperText={`At least ${minPasswordLength} characters`}\n slotProps={{\n input: {\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton\n onClick={() => setShowPassword(!showPassword)}\n edge=\"end\"\n aria-label={showPassword ? 'Hide password' : 'Show password'}\n >\n {showPassword ? <EyeOffIcon /> : <EyeIcon />}\n </IconButton>\n </InputAdornment>\n ),\n },\n }}\n {...slotProps?.textField}\n />\n\n <Field.Text\n name=\"confirmPassword\"\n label={labels.confirmPassword ?? 'Confirm Password'}\n type={showConfirmPassword ? 'text' : 'password'}\n autoComplete=\"new-password\"\n disabled={disabled || loading}\n slotProps={{\n input: {\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton\n onClick={() => setShowConfirmPassword(!showConfirmPassword)}\n edge=\"end\"\n aria-label={showConfirmPassword ? 'Hide password' : 'Show password'}\n >\n {showConfirmPassword ? <EyeOffIcon /> : <EyeIcon />}\n </IconButton>\n </InputAdornment>\n ),\n },\n }}\n {...slotProps?.textField}\n />\n\n <Button\n type=\"submit\"\n variant=\"contained\"\n size=\"large\"\n fullWidth\n disabled={disabled || loading}\n {...slotProps?.submitButton}\n >\n {loading ? <CircularProgress size={24} color=\"inherit\" /> : (labels.submit ?? 'Reset Password')}\n </Button>\n </Box>\n </FormProvider>\n );\n}\n\n// =============================================================================\n// VERIFY CODE FORM\n// =============================================================================\n\n/**\n * Verify code form component (OTP verification).\n *\n * @example\n * ```tsx\n * <VerifyCodeForm\n * onSubmit={async (data) => {\n * await verifyCode(data.code);\n * }}\n * onResendCode={async () => {\n * await resendVerificationCode();\n * }}\n * resendCooldown={60}\n * />\n * ```\n */\nexport function VerifyCodeForm({\n onSubmit,\n loading = false,\n disabled = false,\n codeLength = 6,\n onResendCode,\n resendCooldown = 60,\n schema,\n labels = {},\n sx,\n slotProps,\n}: VerifyCodeFormProps): ReactNode {\n const [error, setError] = useState<string | null>(null);\n const [cooldown, setCooldown] = useState(0);\n\n const methods = useForm<VerifyCodeFormData>({\n resolver: zodResolver(schema ?? (createVerifyCodeSchema(codeLength) as any)) as Resolver<VerifyCodeFormData>,\n defaultValues: {\n code: '',\n },\n });\n\n // Cooldown timer\n useEffect(() => {\n if (cooldown > 0) {\n const timer = setTimeout(() => setCooldown(cooldown - 1), 1000);\n return () => clearTimeout(timer);\n }\n return undefined;\n }, [cooldown]);\n\n const handleResendCode = useCallback(async () => {\n if (cooldown > 0 || !onResendCode) return;\n try {\n await onResendCode();\n setCooldown(resendCooldown);\n } catch (err) {\n setError(sanitizeErrorMessage(err, 'Failed to resend code'));\n }\n }, [cooldown, onResendCode, resendCooldown]);\n\n const handleSubmit = methods.handleSubmit(async (data: VerifyCodeFormData) => {\n setError(null);\n try {\n await onSubmit(data);\n } catch (err) {\n setError(sanitizeErrorMessage(err));\n }\n });\n\n return (\n <FormProvider {...methods}>\n <Box\n component=\"form\"\n onSubmit={handleSubmit}\n sx={[\n { display: 'flex', flexDirection: 'column', gap: 2.5, alignItems: 'center' },\n ...(Array.isArray(sx) ? sx : [sx]),\n ]}\n {...slotProps?.wrapper}\n >\n <Box sx={{ textAlign: 'center', mb: 1 }}>\n <Typography variant=\"h6\" gutterBottom>\n {labels.title ?? 'Enter verification code'}\n </Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {labels.description ?? 'We sent a verification code to your email.'}\n </Typography>\n </Box>\n\n {error && (\n <Alert severity=\"error\" onClose={() => setError(null)} sx={{ width: '100%' }}>\n {error}\n </Alert>\n )}\n\n <Field.Code name=\"code\" length={codeLength} autoFocus disabled={disabled || loading} />\n\n <Button\n type=\"submit\"\n variant=\"contained\"\n size=\"large\"\n fullWidth\n disabled={disabled || loading}\n {...slotProps?.submitButton}\n >\n {loading ? <CircularProgress size={24} color=\"inherit\" /> : (labels.submit ?? 'Verify')}\n </Button>\n\n {onResendCode && (\n <Box sx={{ textAlign: 'center' }}>\n {cooldown > 0 ? (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {labels.resendIn ?? 'Resend code in'} {cooldown}s\n </Typography>\n ) : (\n <Link component=\"button\" type=\"button\" variant=\"body2\" onClick={handleResendCode} disabled={loading}>\n {labels.resendCode ?? \"Didn't receive the code? Resend\"}\n </Link>\n )}\n </Box>\n )}\n </Box>\n </FormProvider>\n );\n}\n\n// =============================================================================\n// EXPORTS\n// =============================================================================\n\n/**\n * AuthBlock namespace for auth-related forms.\n */\nexport const AuthBlock = {\n Login: LoginForm,\n Register: RegisterForm,\n ForgotPassword: ForgotPasswordForm,\n ResetPassword: ResetPasswordForm,\n VerifyCode: VerifyCodeForm,\n} as const;\n","'use client';\n\n/**\n * Route Guards\n *\n * Authentication and authorization guards for route protection.\n * Works with any router (React Router, Next.js, TanStack Router).\n *\n * @module @omnitron-dev/prism/blocks/auth-block\n */\n\nimport { type ReactNode, useEffect, useState } from 'react';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\n/**\n * User role type - string or enum value.\n */\nexport type Role = string;\n\n/**\n * Permission type - string identifier.\n */\nexport type Permission = string;\n\n/**\n * User with roles and permissions for authorization.\n */\nexport interface AuthUser {\n /** User ID */\n id: string | number;\n /** User roles */\n roles?: Role[];\n /** User permissions (fine-grained) */\n permissions?: Permission[];\n /** Email verified status */\n emailVerified?: boolean;\n /** Any additional properties */\n [key: string]: unknown;\n}\n\n/**\n * Auth state for guards.\n */\nexport interface AuthState {\n /** Whether user is authenticated */\n isAuthenticated: boolean;\n /** Whether auth state is still loading */\n isLoading: boolean;\n /** Current user (if authenticated) */\n user?: AuthUser | null;\n}\n\n/**\n * Props for useAuth hook.\n * Guards need this to check auth state.\n */\nexport interface UseAuth {\n (): AuthState;\n}\n\n// =============================================================================\n// AUTH GUARD\n// =============================================================================\n\n/**\n * AuthGuard props.\n */\nexport interface AuthGuardProps {\n /** Children to render when authorized */\n children: ReactNode;\n /** Hook to get auth state */\n useAuth: UseAuth;\n /** Component to show while loading */\n loadingComponent?: ReactNode;\n /** Called when not authenticated (e.g., redirect to login) */\n onUnauthenticated?: () => void;\n /** Component to show when not authenticated (if no redirect) */\n unauthenticatedComponent?: ReactNode;\n}\n\n/**\n * Guard that requires authentication.\n *\n * @example\n * ```tsx\n * import { AuthGuard } from '@omnitron-dev/prism/blocks';\n * import { useAuth } from '../hooks/use-auth';\n *\n * function ProtectedPage() {\n * return (\n * <AuthGuard\n * useAuth={useAuth}\n * onUnauthenticated={() => navigate('/login')}\n * loadingComponent={<LoadingScreen />}\n * >\n * <DashboardContent />\n * </AuthGuard>\n * );\n * }\n * ```\n */\nexport function AuthGuard({\n children,\n useAuth,\n loadingComponent = null,\n onUnauthenticated,\n unauthenticatedComponent = null,\n}: AuthGuardProps): ReactNode {\n const { isAuthenticated, isLoading } = useAuth();\n const [checked, setChecked] = useState(false);\n\n useEffect(() => {\n if (!isLoading) {\n if (!isAuthenticated) {\n onUnauthenticated?.();\n }\n setChecked(true);\n }\n }, [isAuthenticated, isLoading, onUnauthenticated]);\n\n if (isLoading || !checked) {\n return loadingComponent;\n }\n\n if (!isAuthenticated) {\n return unauthenticatedComponent;\n }\n\n return children;\n}\n\n// =============================================================================\n// GUEST GUARD\n// =============================================================================\n\n/**\n * GuestGuard props.\n */\nexport interface GuestGuardProps {\n /** Children to render when not authenticated */\n children: ReactNode;\n /** Hook to get auth state */\n useAuth: UseAuth;\n /** Component to show while loading */\n loadingComponent?: ReactNode;\n /** Called when authenticated (e.g., redirect to dashboard) */\n onAuthenticated?: () => void;\n /** Component to show when authenticated (if no redirect) */\n authenticatedComponent?: ReactNode;\n}\n\n/**\n * Guard that requires NO authentication.\n * Use for login, register, forgot password pages.\n *\n * @example\n * ```tsx\n * import { GuestGuard } from '@omnitron-dev/prism/blocks';\n * import { useAuth } from '../hooks/use-auth';\n *\n * function LoginPage() {\n * return (\n * <GuestGuard\n * useAuth={useAuth}\n * onAuthenticated={() => navigate('/dashboard')}\n * loadingComponent={<LoadingScreen />}\n * >\n * <LoginForm />\n * </GuestGuard>\n * );\n * }\n * ```\n */\nexport function GuestGuard({\n children,\n useAuth,\n loadingComponent = null,\n onAuthenticated,\n authenticatedComponent = null,\n}: GuestGuardProps): ReactNode {\n const { isAuthenticated, isLoading } = useAuth();\n const [checked, setChecked] = useState(false);\n\n useEffect(() => {\n if (!isLoading) {\n if (isAuthenticated) {\n onAuthenticated?.();\n }\n setChecked(true);\n }\n }, [isAuthenticated, isLoading, onAuthenticated]);\n\n if (isLoading || !checked) {\n return loadingComponent;\n }\n\n if (isAuthenticated) {\n return authenticatedComponent;\n }\n\n return children;\n}\n\n// =============================================================================\n// ROLE-BASED GUARD\n// =============================================================================\n\n/**\n * RoleBasedGuard props.\n */\nexport interface RoleBasedGuardProps {\n /** Children to render when authorized */\n children: ReactNode;\n /** Hook to get auth state */\n useAuth: UseAuth;\n /** Required roles (user must have at least one) */\n roles?: Role[];\n /** Required permissions (user must have ALL) */\n permissions?: Permission[];\n /** Require email verification */\n requireEmailVerified?: boolean;\n /** Match strategy for roles: 'any' (default) or 'all' */\n roleMatchStrategy?: 'any' | 'all';\n /** Component to show while loading */\n loadingComponent?: ReactNode;\n /** Called when access denied */\n onAccessDenied?: (reason: AccessDeniedReason) => void;\n /** Component to show when access denied */\n accessDeniedComponent?: ReactNode;\n}\n\n/**\n * Reason for access denial.\n */\nexport type AccessDeniedReason = 'not_authenticated' | 'missing_role' | 'missing_permission' | 'email_not_verified';\n\n/**\n * Guard for role/permission-based access control.\n *\n * @example\n * ```tsx\n * import { RoleBasedGuard } from '@omnitron-dev/prism/blocks';\n * import { useAuth } from '../hooks/use-auth';\n *\n * // Require admin role\n * function AdminPage() {\n * return (\n * <RoleBasedGuard\n * useAuth={useAuth}\n * roles={['admin']}\n * onAccessDenied={() => navigate('/403')}\n * >\n * <AdminPanel />\n * </RoleBasedGuard>\n * );\n * }\n *\n * // Require specific permission\n * function EditUserPage() {\n * return (\n * <RoleBasedGuard\n * useAuth={useAuth}\n * permissions={['users:write']}\n * accessDeniedComponent={<AccessDenied />}\n * >\n * <UserEditForm />\n * </RoleBasedGuard>\n * );\n * }\n *\n * // Require admin OR moderator role\n * function ModeratePage() {\n * return (\n * <RoleBasedGuard\n * useAuth={useAuth}\n * roles={['admin', 'moderator']}\n * roleMatchStrategy=\"any\"\n * >\n * <ModerateContent />\n * </RoleBasedGuard>\n * );\n * }\n *\n * // Require email verified\n * function VerifiedOnlyPage() {\n * return (\n * <RoleBasedGuard\n * useAuth={useAuth}\n * requireEmailVerified\n * onAccessDenied={(reason) => {\n * if (reason === 'email_not_verified') {\n * navigate('/verify-email');\n * }\n * }}\n * >\n * <VerifiedContent />\n * </RoleBasedGuard>\n * );\n * }\n * ```\n */\nexport function RoleBasedGuard({\n children,\n useAuth,\n roles = [],\n permissions = [],\n requireEmailVerified = false,\n roleMatchStrategy = 'any',\n loadingComponent = null,\n onAccessDenied,\n accessDeniedComponent = null,\n}: RoleBasedGuardProps): ReactNode {\n const { isAuthenticated, isLoading, user } = useAuth();\n const [checked, setChecked] = useState(false);\n const [accessGranted, setAccessGranted] = useState(false);\n\n useEffect(() => {\n if (!isLoading) {\n // Check authentication\n if (!isAuthenticated || !user) {\n onAccessDenied?.('not_authenticated');\n setAccessGranted(false);\n setChecked(true);\n return;\n }\n\n // Check email verification\n if (requireEmailVerified && !user.emailVerified) {\n onAccessDenied?.('email_not_verified');\n setAccessGranted(false);\n setChecked(true);\n return;\n }\n\n // Check roles\n if (roles.length > 0) {\n const userRoles = user.roles ?? [];\n const hasRequiredRole =\n roleMatchStrategy === 'all'\n ? roles.every((role) => userRoles.includes(role))\n : roles.some((role) => userRoles.includes(role));\n\n if (!hasRequiredRole) {\n onAccessDenied?.('missing_role');\n setAccessGranted(false);\n setChecked(true);\n return;\n }\n }\n\n // Check permissions (always ALL)\n if (permissions.length > 0) {\n const userPermissions = user.permissions ?? [];\n const hasAllPermissions = permissions.every((perm) => userPermissions.includes(perm));\n\n if (!hasAllPermissions) {\n onAccessDenied?.('missing_permission');\n setAccessGranted(false);\n setChecked(true);\n return;\n }\n }\n\n // Access granted\n setAccessGranted(true);\n setChecked(true);\n }\n }, [isAuthenticated, isLoading, user, roles, permissions, requireEmailVerified, roleMatchStrategy, onAccessDenied]);\n\n if (isLoading || !checked) {\n return loadingComponent;\n }\n\n if (!accessGranted) {\n return accessDeniedComponent;\n }\n\n return children;\n}\n\n// =============================================================================\n// UTILITY HOOKS\n// =============================================================================\n\n/**\n * Check if user has specific role(s).\n *\n * @example\n * ```tsx\n * const isAdmin = hasRole(user, 'admin');\n * const isModerator = hasRole(user, ['admin', 'moderator'], 'any');\n * const isSuperAdmin = hasRole(user, ['admin', 'superuser'], 'all');\n * ```\n */\nexport function hasRole(\n user: AuthUser | null | undefined,\n role: Role | Role[],\n strategy: 'any' | 'all' = 'any'\n): boolean {\n if (!user?.roles?.length) return false;\n\n const roles = Array.isArray(role) ? role : [role];\n\n return strategy === 'all' ? roles.every((r) => user.roles!.includes(r)) : roles.some((r) => user.roles!.includes(r));\n}\n\n/**\n * Check if user has specific permission(s).\n *\n * @example\n * ```tsx\n * const canEdit = hasPermission(user, 'users:write');\n * const canManage = hasPermission(user, ['users:read', 'users:write'], 'all');\n * ```\n */\nexport function hasPermission(\n user: AuthUser | null | undefined,\n permission: Permission | Permission[],\n strategy: 'any' | 'all' = 'all'\n): boolean {\n if (!user?.permissions?.length) return false;\n\n const permissions = Array.isArray(permission) ? permission : [permission];\n\n return strategy === 'all'\n ? permissions.every((p) => user.permissions!.includes(p))\n : permissions.some((p) => user.permissions!.includes(p));\n}\n\n/**\n * Create a conditional render helper based on roles/permissions.\n *\n * @example\n * ```tsx\n * const { canRender } = useConditionalRender(user);\n *\n * return (\n * <div>\n * {canRender({ roles: ['admin'] }) && <AdminPanel />}\n * {canRender({ permissions: ['users:write'] }) && <EditButton />}\n * </div>\n * );\n * ```\n */\nexport function createConditionalRender(user: AuthUser | null | undefined) {\n return {\n canRender: (options: {\n roles?: Role[];\n permissions?: Permission[];\n roleMatchStrategy?: 'any' | 'all';\n }): boolean => {\n const { roles = [], permissions = [], roleMatchStrategy = 'any' } = options;\n\n if (roles.length > 0 && !hasRole(user, roles, roleMatchStrategy)) {\n return false;\n }\n\n if (permissions.length > 0 && !hasPermission(user, permissions, 'all')) {\n return false;\n }\n\n return true;\n },\n };\n}\n","/**\n * DataGrid Block Component\n *\n * Advanced data table block with toolbar, pagination, sorting, filtering,\n * row actions, and server-side data support.\n *\n * @module @omnitron-dev/prism/blocks/data-grid-block\n */\n\n'use client';\n\nimport {\n type ReactNode,\n type MouseEvent,\n createContext,\n useContext,\n useMemo,\n useState,\n useCallback,\n useRef,\n useEffect,\n} from 'react';\nimport Box from '@mui/material/Box';\nimport Paper from '@mui/material/Paper';\nimport Typography from '@mui/material/Typography';\nimport Button from '@mui/material/Button';\nimport IconButton from '@mui/material/IconButton';\nimport Menu from '@mui/material/Menu';\nimport MenuItem from '@mui/material/MenuItem';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport ListItemText from '@mui/material/ListItemText';\nimport Divider from '@mui/material/Divider';\nimport Tooltip from '@mui/material/Tooltip';\nimport { SearchInput } from '../../components/search-input/search-input.js';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport {\n DataGrid,\n type GridColDef,\n type GridRenderCellParams,\n type GridPaginationModel,\n type GridSortModel,\n type GridFilterModel,\n type GridRowSelectionModel,\n type GridCallbackDetails,\n type GridDensity,\n type GridRowId,\n GridToolbarContainer,\n GridToolbarColumnsButton,\n GridToolbarDensitySelector,\n GridToolbarExport,\n} from '@mui/x-data-grid';\nimport type {\n DataGridBlockProps,\n DataGridBlockContextValue,\n DataGridRowAction,\n UseDataGridBlockOptions,\n UseDataGridBlockReturn,\n DataGridFetchParams,\n} from './types.js';\n\n// =============================================================================\n// CONTEXT\n// =============================================================================\n\nconst DataGridBlockContext = createContext<DataGridBlockContextValue | null>(null);\n\n/**\n * Hook to access data grid block context.\n */\nexport function useDataGridBlockContext(): DataGridBlockContextValue {\n const context = useContext(DataGridBlockContext);\n if (!context) {\n throw new Error('useDataGridBlockContext must be used within DataGridBlock');\n }\n return context;\n}\n\n// =============================================================================\n// ICONS\n// =============================================================================\n\nfunction MoreVertIcon(): ReactNode {\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"1\" />\n <circle cx=\"12\" cy=\"5\" r=\"1\" />\n <circle cx=\"12\" cy=\"19\" r=\"1\" />\n </svg>\n );\n}\n\nfunction EmptyIcon(): ReactNode {\n return (\n <svg\n width=\"64\"\n height=\"64\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n style={{ opacity: 0.4 }}\n >\n <path d=\"M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z\" />\n <polyline points=\"13 2 13 9 20 9\" />\n <line x1=\"10\" y1=\"12\" x2=\"10\" y2=\"18\" />\n <line x1=\"14\" y1=\"12\" x2=\"14\" y2=\"18\" />\n <line x1=\"10\" y1=\"15\" x2=\"14\" y2=\"15\" />\n </svg>\n );\n}\n\n// =============================================================================\n// CUSTOM TOOLBAR\n// =============================================================================\n\ninterface CustomToolbarProps {\n quickFilter?: {\n enabled?: boolean;\n placeholder?: string;\n debounceMs?: number;\n };\n exportConfig?: {\n csv?: boolean;\n excel?: boolean;\n print?: boolean;\n };\n showColumnSelector?: boolean;\n showDensitySelector?: boolean;\n startContent?: ReactNode;\n endContent?: ReactNode;\n actions?: ReactNode;\n onQuickFilterChange?: (value: string) => void;\n}\n\nfunction CustomToolbar({\n quickFilter,\n exportConfig,\n showColumnSelector = true,\n showDensitySelector = true,\n startContent,\n endContent,\n actions,\n onQuickFilterChange,\n}: CustomToolbarProps): ReactNode {\n const [searchValue, setSearchValue] = useState('');\n const debounceRef = useRef<NodeJS.Timeout | null>(null);\n\n // Cleanup debounce timer on unmount\n useEffect(\n () => () => {\n if (debounceRef.current) clearTimeout(debounceRef.current);\n },\n []\n );\n\n const handleSearchChange = useCallback(\n (value: string) => {\n setSearchValue(value);\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n }\n debounceRef.current = setTimeout(() => {\n onQuickFilterChange?.(value);\n }, quickFilter?.debounceMs ?? 300);\n },\n [onQuickFilterChange, quickFilter?.debounceMs]\n );\n\n return (\n <GridToolbarContainer\n sx={{\n gap: 1.5,\n p: 2,\n borderBottom: 1,\n borderColor: 'divider',\n }}\n >\n {startContent}\n\n {quickFilter?.enabled !== false && (\n <SearchInput\n value={searchValue}\n onChange={handleSearchChange}\n placeholder={quickFilter?.placeholder ?? 'Search...'}\n fullWidth={false}\n minWidth={200}\n />\n )}\n\n <Box sx={{ flex: 1 }} />\n\n {showColumnSelector && <GridToolbarColumnsButton />}\n {showDensitySelector && <GridToolbarDensitySelector />}\n\n {(exportConfig?.csv !== false || exportConfig?.print !== false) && (\n <GridToolbarExport\n printOptions={exportConfig?.print === false ? { disableToolbarButton: true } : undefined}\n csvOptions={exportConfig?.csv === false ? { disableToolbarButton: true } : undefined}\n />\n )}\n\n {actions}\n {endContent}\n </GridToolbarContainer>\n );\n}\n\n// =============================================================================\n// ROW ACTIONS CELL\n// =============================================================================\n\ninterface RowActionsCellProps<R> {\n row: R;\n actions: DataGridRowAction<R>[];\n}\n\nfunction RowActionsCell<R extends Record<string, unknown>>({ row, actions }: RowActionsCellProps<R>): ReactNode {\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n const open = Boolean(anchorEl);\n\n const handleClick = useCallback((event: MouseEvent<HTMLElement>) => {\n event.stopPropagation();\n setAnchorEl(event.currentTarget);\n }, []);\n\n const handleClose = useCallback(() => {\n setAnchorEl(null);\n }, []);\n\n const handleAction = useCallback(\n (action: DataGridRowAction<R>, event: MouseEvent<HTMLElement>) => {\n setAnchorEl(null);\n action.onClick(row, event);\n },\n [row]\n );\n\n const visibleActions = actions.filter((action) => {\n if (typeof action.hidden === 'function') {\n return !action.hidden(row);\n }\n return !action.hidden;\n });\n\n if (visibleActions.length === 0) {\n return null;\n }\n\n // If only 1-2 actions, show inline buttons\n if (visibleActions.length <= 2) {\n return (\n <Box sx={{ display: 'flex', gap: 0.5 }}>\n {visibleActions.map((action) => {\n const isDisabled = typeof action.disabled === 'function' ? action.disabled(row) : action.disabled;\n\n return (\n <Tooltip key={action.key} title={action.label}>\n <span>\n <IconButton\n size=\"small\"\n color={action.color ?? 'default'}\n disabled={isDisabled}\n onClick={(e) => handleAction(action, e)}\n aria-label={action.label}\n >\n {action.icon ?? action.label.charAt(0)}\n </IconButton>\n </span>\n </Tooltip>\n );\n })}\n </Box>\n );\n }\n\n // More than 2 actions, show menu\n return (\n <>\n <IconButton\n size=\"small\"\n onClick={handleClick}\n aria-label=\"Row actions\"\n aria-controls={open ? 'row-actions-menu' : undefined}\n aria-haspopup=\"true\"\n aria-expanded={open ? 'true' : undefined}\n >\n <MoreVertIcon />\n </IconButton>\n <Menu\n id=\"row-actions-menu\"\n anchorEl={anchorEl}\n open={open}\n onClose={handleClose}\n onClick={(e) => e.stopPropagation()}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n >\n {visibleActions.map((action, index) => {\n const isDisabled = typeof action.disabled === 'function' ? action.disabled(row) : action.disabled;\n\n return [\n <MenuItem key={action.key} disabled={isDisabled} onClick={(e) => handleAction(action, e)}>\n {action.icon && <ListItemIcon>{action.icon}</ListItemIcon>}\n <ListItemText primary={action.label} sx={{ color: action.color ? `${action.color}.main` : undefined }} />\n </MenuItem>,\n action.divider && index < visibleActions.length - 1 && <Divider key={`${action.key}-divider`} />,\n ];\n })}\n </Menu>\n </>\n );\n}\n\n// =============================================================================\n// EMPTY STATE\n// =============================================================================\n\ninterface EmptyStateProps {\n icon?: ReactNode;\n title?: string;\n description?: string;\n action?: {\n label: string;\n onClick: () => void;\n };\n component?: ReactNode;\n}\n\nfunction EmptyState({\n icon,\n title = 'No data',\n description = 'No records to display.',\n action,\n component,\n}: EmptyStateProps): ReactNode {\n if (component) {\n return <>{component}</>;\n }\n\n return (\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n py: 8,\n px: 3,\n textAlign: 'center',\n }}\n >\n <Box sx={{ mb: 2, color: 'text.disabled' }}>{icon ?? <EmptyIcon />}</Box>\n <Typography variant=\"h6\" gutterBottom>\n {title}\n </Typography>\n <Typography variant=\"body2\" color=\"text.secondary\" sx={{ mb: action ? 2 : 0 }}>\n {description}\n </Typography>\n {action && (\n <Button variant=\"contained\" size=\"small\" onClick={action.onClick}>\n {action.label}\n </Button>\n )}\n </Box>\n );\n}\n\n// =============================================================================\n// ERROR STATE\n// =============================================================================\n\ninterface ErrorStateProps {\n message?: string;\n onRetry?: () => void;\n}\n\nfunction ErrorState({ message = 'Failed to load data', onRetry }: ErrorStateProps): ReactNode {\n return (\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n py: 8,\n px: 3,\n textAlign: 'center',\n }}\n >\n <Typography color=\"error\" variant=\"body1\" gutterBottom>\n {message}\n </Typography>\n {onRetry && (\n <Button variant=\"outlined\" size=\"small\" onClick={onRetry} sx={{ mt: 1 }}>\n Retry\n </Button>\n )}\n </Box>\n );\n}\n\n// =============================================================================\n// MAIN COMPONENT\n// =============================================================================\n\n/**\n * DataGridBlock - Advanced data table with common patterns.\n *\n * Features:\n * - Custom toolbar with search, filters, export, and column visibility\n * - Row actions column (inline or dropdown menu)\n * - Server-side pagination, sorting, and filtering support\n * - Custom empty state\n * - Loading and error states\n * - Selection handling\n * - Density customization\n *\n * @example\n * ```tsx\n * <DataGridBlock\n * columns={[\n * { field: 'name', headerName: 'Name', flex: 1 },\n * { field: 'email', headerName: 'Email', flex: 1 },\n * { field: 'status', headerName: 'Status', width: 120 },\n * ]}\n * rows={users}\n * loading={isLoading}\n * rowActions={[\n * { key: 'edit', label: 'Edit', icon: <EditIcon />, onClick: handleEdit },\n * { key: 'delete', label: 'Delete', icon: <DeleteIcon />, color: 'error', onClick: handleDelete },\n * ]}\n * toolbar={{\n * quickFilter: { placeholder: 'Search users...' },\n * export: { csv: true },\n * }}\n * pagination={{\n * mode: 'server',\n * rowCount: totalCount,\n * }}\n * onPaginationChange={handlePaginationChange}\n * />\n * ```\n */\nexport function DataGridBlock<R extends Record<string, unknown> = Record<string, unknown>>({\n columns,\n rows,\n loading = false,\n error = false,\n errorMessage,\n onRetry,\n rowActions,\n rowActionsWidth = 80,\n toolbar,\n pagination,\n selection,\n empty,\n density: defaultDensity = 'standard',\n autoHeight = false,\n height = 500,\n hideFooter = false,\n rowHeight,\n getRowId,\n onRowClick,\n onRowDoubleClick,\n onSelectionChange,\n onPaginationChange,\n onSortChange,\n onFilterChange,\n paginationModel: controlledPaginationModel,\n sortModel: controlledSortModel,\n filterModel: controlledFilterModel,\n selectionModel: controlledSelectionModel,\n columnVisibilityModel,\n onColumnVisibilityChange,\n slots,\n slotProps,\n disableColumnMenu = false,\n disableColumnFilter = false,\n disableColumnSelector = false,\n disableRowSelectionOnClick = true,\n disableVirtualization = false,\n sx,\n}: DataGridBlockProps<R>): ReactNode {\n const [density, setDensity] = useState<GridDensity>(defaultDensity);\n const [internalPaginationModel, setInternalPaginationModel] = useState<GridPaginationModel>({\n page: 0,\n pageSize: pagination?.defaultPageSize ?? 25,\n });\n const [internalSortModel, setInternalSortModel] = useState<GridSortModel>([]);\n const [internalFilterModel, setInternalFilterModel] = useState<GridFilterModel>({ items: [] });\n const [internalSelectionModel, setInternalSelectionModel] = useState<GridRowSelectionModel>({\n type: 'include',\n ids: new Set<GridRowId>(),\n });\n const [quickFilterValue, setQuickFilterValue] = useState('');\n\n // Use controlled or internal state\n const paginationModel = controlledPaginationModel ?? internalPaginationModel;\n const sortModel = controlledSortModel ?? internalSortModel;\n const filterModel = controlledFilterModel ?? internalFilterModel;\n const selectionModelValue = controlledSelectionModel ?? internalSelectionModel;\n\n // Build columns with row actions\n const finalColumns = useMemo<GridColDef<R>[]>(() => {\n if (!rowActions || rowActions.length === 0) {\n return columns;\n }\n\n const actionsColumn: GridColDef<R> = {\n field: '__actions__',\n headerName: '',\n width: rowActionsWidth,\n sortable: false,\n filterable: false,\n disableColumnMenu: true,\n disableReorder: true,\n renderCell: (params: GridRenderCellParams<R>) => <RowActionsCell row={params.row} actions={rowActions} />,\n };\n\n return [...columns, actionsColumn];\n }, [columns, rowActions, rowActionsWidth]);\n\n // Handlers\n const handlePaginationChange = useCallback(\n (model: GridPaginationModel, details: GridCallbackDetails) => {\n if (!controlledPaginationModel) {\n setInternalPaginationModel(model);\n }\n onPaginationChange?.(model);\n },\n [controlledPaginationModel, onPaginationChange]\n );\n\n const handleSortChange = useCallback(\n (model: GridSortModel, details: GridCallbackDetails) => {\n if (!controlledSortModel) {\n setInternalSortModel(model);\n }\n onSortChange?.(model);\n },\n [controlledSortModel, onSortChange]\n );\n\n const handleFilterChange = useCallback(\n (model: GridFilterModel, details: GridCallbackDetails) => {\n if (!controlledFilterModel) {\n setInternalFilterModel(model);\n }\n onFilterChange?.(model);\n },\n [controlledFilterModel, onFilterChange]\n );\n\n const handleSelectionChange = useCallback(\n (model: GridRowSelectionModel, details: GridCallbackDetails) => {\n if (!controlledSelectionModel) {\n setInternalSelectionModel(model);\n }\n onSelectionChange?.(model);\n },\n [controlledSelectionModel, onSelectionChange]\n );\n\n // Context value\n const contextValue = useMemo<DataGridBlockContextValue>(\n () => ({\n loading,\n error,\n density,\n setDensity,\n rowCount: rows.length,\n selectedCount: selectionModelValue.ids.size,\n refresh: onRetry,\n }),\n [loading, error, density, rows.length, selectionModelValue, onRetry]\n );\n\n // Determine row count for pagination\n const rowCount = pagination?.mode === 'server' ? (pagination.rowCount ?? 0) : rows.length;\n\n // Custom toolbar slot\n const toolbarSlot = useMemo(() => {\n if (toolbar?.show === false) {\n return undefined;\n }\n\n return () => (\n <CustomToolbar\n quickFilter={toolbar?.quickFilter}\n exportConfig={toolbar?.export}\n showColumnSelector={toolbar?.columnVisibility?.enabled !== false}\n showDensitySelector={toolbar?.densitySelector !== false}\n startContent={toolbar?.startContent}\n endContent={toolbar?.endContent}\n actions={toolbar?.actions}\n onQuickFilterChange={setQuickFilterValue}\n />\n );\n }, [toolbar]);\n\n // No data overlay\n const noRowsOverlay = useMemo(() => {\n if (error) {\n return () => <ErrorState message={errorMessage} onRetry={onRetry} />;\n }\n return () => (\n <EmptyState\n icon={empty?.icon}\n title={empty?.title}\n description={empty?.description}\n action={empty?.action}\n component={empty?.component}\n />\n );\n }, [error, errorMessage, onRetry, empty]);\n\n return (\n <DataGridBlockContext.Provider value={contextValue}>\n <Paper\n data-testid=\"prism-data-grid-block\"\n variant=\"outlined\"\n sx={[\n {\n width: '100%',\n overflow: 'hidden',\n },\n ...(Array.isArray(sx) ? sx : [sx]),\n ]}\n >\n <Box sx={{ width: '100%', height: autoHeight ? 'auto' : height }}>\n <DataGrid\n rows={rows}\n columns={finalColumns}\n loading={loading}\n density={density}\n autoHeight={autoHeight}\n rowHeight={rowHeight}\n getRowId={getRowId}\n onRowClick={onRowClick}\n onRowDoubleClick={onRowDoubleClick}\n // Pagination\n paginationMode={pagination?.mode ?? 'client'}\n paginationModel={paginationModel}\n onPaginationModelChange={handlePaginationChange}\n pageSizeOptions={pagination?.pageSizeOptions ?? [10, 25, 50, 100]}\n rowCount={rowCount}\n // Sorting\n sortingMode={pagination?.mode === 'server' ? 'server' : 'client'}\n sortModel={sortModel}\n onSortModelChange={handleSortChange}\n // Filtering\n filterMode={pagination?.mode === 'server' ? 'server' : 'client'}\n filterModel={filterModel}\n onFilterModelChange={handleFilterChange}\n // Selection\n checkboxSelection={selection?.checkboxSelection ?? false}\n rowSelectionModel={selectionModelValue}\n onRowSelectionModelChange={handleSelectionChange}\n disableRowSelectionOnClick={selection?.disableSelectionOnClick ?? disableRowSelectionOnClick}\n disableMultipleRowSelection={selection?.mode === 'single'}\n keepNonExistentRowsSelected={selection?.keepNonExistentRowsSelected}\n // Column visibility\n columnVisibilityModel={columnVisibilityModel}\n onColumnVisibilityModelChange={onColumnVisibilityChange}\n // Features\n disableColumnMenu={disableColumnMenu}\n disableColumnFilter={disableColumnFilter}\n disableColumnSelector={disableColumnSelector}\n disableVirtualization={disableVirtualization}\n hideFooter={hideFooter || pagination?.hide}\n // Slots\n slots={{\n toolbar: toolbarSlot,\n noRowsOverlay,\n loadingOverlay: () => <LinearProgress sx={{ position: 'absolute', top: 0, left: 0, right: 0 }} />,\n ...slots,\n }}\n slotProps={slotProps}\n sx={{\n border: 0,\n '& .MuiDataGrid-columnHeaders': {\n bgcolor: 'action.hover',\n },\n '& .MuiDataGrid-cell:focus': {\n outline: 'none',\n },\n '& .MuiDataGrid-row:hover': {\n bgcolor: 'action.hover',\n },\n }}\n />\n </Box>\n </Paper>\n </DataGridBlockContext.Provider>\n );\n}\n\n// =============================================================================\n// USE DATA GRID BLOCK HOOK\n// =============================================================================\n\n/**\n * Hook for managing DataGridBlock with server-side data fetching.\n *\n * @example\n * ```tsx\n * const { rows, loading, error, total, paginationModel, onPaginationChange, refresh } =\n * useDataGridBlock({\n * fetcher: async ({ page, pageSize, sortModel, filterModel }) => {\n * const response = await api.getUsers({ page, pageSize, sort: sortModel[0] });\n * return { rows: response.data, total: response.total };\n * },\n * });\n *\n * return (\n * <DataGridBlock\n * columns={columns}\n * rows={rows}\n * loading={loading}\n * error={!!error}\n * pagination={{ mode: 'server', rowCount: total }}\n * paginationModel={paginationModel}\n * onPaginationChange={onPaginationChange}\n * />\n * );\n * ```\n */\nexport function useDataGridBlock<R extends Record<string, unknown> = Record<string, unknown>>(\n options: UseDataGridBlockOptions<R>\n): UseDataGridBlockReturn<R> {\n const {\n fetcher,\n initialPageSize = 25,\n initialSortModel = [],\n initialFilterModel = { items: [] },\n autoFetch = true,\n keepPreviousData = true,\n } = options;\n\n const [rows, setRows] = useState<R[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [total, setTotal] = useState(0);\n\n const [paginationModel, setPaginationModel] = useState<GridPaginationModel>({\n page: 0,\n pageSize: initialPageSize,\n });\n const [sortModel, setSortModel] = useState<GridSortModel>(initialSortModel);\n const [filterModel, setFilterModel] = useState<GridFilterModel>(initialFilterModel);\n\n const isMountedRef = useRef(true);\n const abortControllerRef = useRef<AbortController | null>(null);\n\n const fetchData = useCallback(\n async (params: DataGridFetchParams) => {\n // Cancel previous request\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n abortControllerRef.current = new AbortController();\n\n setLoading(true);\n setError(null);\n\n try {\n const result = await fetcher(params);\n if (isMountedRef.current) {\n setRows(result.rows);\n setTotal(result.total);\n }\n } catch (err) {\n if (isMountedRef.current && err instanceof Error && err.name !== 'AbortError') {\n setError(err);\n if (!keepPreviousData) {\n setRows([]);\n }\n }\n } finally {\n if (isMountedRef.current) {\n setLoading(false);\n }\n }\n },\n [fetcher, keepPreviousData]\n );\n\n const refresh = useCallback(() => {\n fetchData({\n page: paginationModel.page,\n pageSize: paginationModel.pageSize,\n sortModel,\n filterModel,\n });\n }, [fetchData, paginationModel, sortModel, filterModel]);\n\n const reset = useCallback(() => {\n setPaginationModel({ page: 0, pageSize: initialPageSize });\n setSortModel(initialSortModel);\n setFilterModel(initialFilterModel);\n }, [initialPageSize, initialSortModel, initialFilterModel]);\n\n // Fetch on params change\n useEffect(() => {\n if (autoFetch) {\n fetchData({\n page: paginationModel.page,\n pageSize: paginationModel.pageSize,\n sortModel,\n filterModel,\n });\n }\n }, [fetchData, paginationModel, sortModel, filterModel, autoFetch]);\n\n // Cleanup on unmount\n useEffect(\n () => () => {\n isMountedRef.current = false;\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n },\n []\n );\n\n const handlePaginationChange = useCallback((model: GridPaginationModel, _details: GridCallbackDetails) => {\n setPaginationModel(model);\n }, []);\n\n const handleSortChange = useCallback((model: GridSortModel, _details: GridCallbackDetails) => {\n setSortModel(model);\n // Reset to first page on sort change\n setPaginationModel((prev) => ({ ...prev, page: 0 }));\n }, []);\n\n const handleFilterChange = useCallback((model: GridFilterModel, _details: GridCallbackDetails) => {\n setFilterModel(model);\n // Reset to first page on filter change\n setPaginationModel((prev) => ({ ...prev, page: 0 }));\n }, []);\n\n return {\n rows,\n loading,\n error,\n total,\n paginationModel,\n sortModel,\n filterModel,\n onPaginationChange: handlePaginationChange,\n onSortChange: handleSortChange,\n onFilterChange: handleFilterChange,\n refresh,\n reset,\n };\n}\n"]}
1
+ {"version":3,"sources":["../../src/blocks/dashboard-block/dashboard-block.tsx","../../src/blocks/dashboard-block/use-dashboard-block.ts","../../src/blocks/auth-block/auth-block.tsx","../../src/blocks/auth-block/guards.tsx","../../src/blocks/data-grid-block/data-grid-block.tsx"],"names":["Box","Typography","IconButton","Button","useCallback","useMemo","jsxs","jsx","useState","Fragment","Divider","useEffect","createContext","useContext","useRef","EmptyState","ErrorState","Paper"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Dashboard Block Component\n *\n * Reusable dashboard widget/card block with header, content, and footer slots.\n * Supports loading, error states, and collapsible behavior.\n *\n * @module blocks/dashboard-block\n */\n\n'use client';\n\nimport { type ReactNode, createContext, useContext, useMemo, useCallback } from 'react';\nimport Box from '@mui/material/Box';\nimport Paper from '@mui/material/Paper';\nimport Typography from '@mui/material/Typography';\nimport IconButton from '@mui/material/IconButton';\nimport Collapse from '@mui/material/Collapse';\nimport Divider from '@mui/material/Divider';\nimport Skeleton from '@mui/material/Skeleton';\nimport Button from '@mui/material/Button';\nimport { useBoolean } from '../../core/hooks/use-boolean.js';\nimport { ErrorBoundary } from '../../components/error-boundary/index.js';\nimport { EmptyContent } from '../../components/empty-content/index.js';\nimport type {\n DashboardBlockProps,\n DashboardBlockContextValue,\n DashboardBlockHeaderProps,\n DashboardBlockContentProps,\n DashboardBlockFooterProps,\n DashboardBlockLabels,\n EmptyConfig,\n} from './types.js';\n\n// =============================================================================\n// CONTEXT\n// =============================================================================\n\n/** Stable no-op for non-collapsible blocks */\nconst collapseNoop = () => {};\n\n/** Stable default: no translated strings, the block's English fallbacks apply */\nconst NO_LABELS: DashboardBlockLabels = {};\n\nconst DashboardBlockContext = createContext<DashboardBlockContextValue | null>(null);\n\n/**\n * Hook to access dashboard block context.\n */\nexport function useDashboardBlockContext(): DashboardBlockContextValue {\n const context = useContext(DashboardBlockContext);\n if (!context) {\n throw new Error('useDashboardBlockContext must be used within DashboardBlock');\n }\n return context;\n}\n\n// =============================================================================\n// SIZE CONFIGS\n// =============================================================================\n\nconst sizeConfig = {\n small: {\n headerPx: 2,\n headerPy: 1.5,\n contentPx: 2,\n contentPy: 1.5,\n titleVariant: 'subtitle1' as const,\n subtitleVariant: 'caption' as const,\n },\n medium: {\n headerPx: 2.5,\n headerPy: 2,\n contentPx: 2.5,\n contentPy: 2,\n titleVariant: 'h6' as const,\n subtitleVariant: 'body2' as const,\n },\n large: {\n headerPx: 3,\n headerPy: 2.5,\n contentPx: 3,\n contentPy: 2.5,\n titleVariant: 'h5' as const,\n subtitleVariant: 'body1' as const,\n },\n};\n\n// =============================================================================\n// SUB-COMPONENTS\n// =============================================================================\n\n/**\n * Dashboard block header component.\n */\nexport function DashboardBlockHeader({ title, subtitle, icon, actions, sx }: DashboardBlockHeaderProps): ReactNode {\n const { collapsed, toggleCollapse, variant, size, labels } = useDashboardBlockContext();\n const config = sizeConfig[size];\n\n return (\n <Box\n data-testid=\"prism-dashboard-block-header\"\n sx={[\n {\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n gap: 2,\n px: config.headerPx,\n py: config.headerPy,\n },\n ...(Array.isArray(sx) ? sx : [sx]),\n ]}\n >\n <Box sx={{ display: 'flex', alignItems: 'flex-start', gap: 1.5, flex: 1, minWidth: 0 }}>\n {icon && (\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n mt: 0.25,\n color: 'primary.main',\n }}\n >\n {icon}\n </Box>\n )}\n <Box sx={{ flex: 1, minWidth: 0 }}>\n {/*\n * Two lines, then an ellipsis — not one. On a phone the header\n * shares its row with the block's actions, and «Лента сообществ»\n * beside «Вся лента →» was cut to «Лента сообще…» with the second\n * line empty below it.\n */}\n <Typography\n variant={config.titleVariant}\n component=\"h3\"\n sx={{\n fontWeight: 600,\n lineHeight: 1.4,\n display: '-webkit-box',\n WebkitBoxOrient: 'vertical',\n WebkitLineClamp: 2,\n overflow: 'hidden',\n overflowWrap: 'anywhere',\n }}\n >\n {title}\n </Typography>\n {subtitle && (\n <Typography\n variant={config.subtitleVariant}\n sx={{\n color: \"text.secondary\",\n mt: 0.25\n }}>\n {subtitle}\n </Typography>\n )}\n </Box>\n </Box>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5, flexShrink: 0 }}>\n {actions}\n {collapsed !== undefined && (\n <IconButton\n size=\"small\"\n onClick={toggleCollapse}\n aria-expanded={!collapsed}\n aria-label={collapsed ? (labels.expand ?? 'Expand block') : (labels.collapse ?? 'Collapse block')}\n data-testid=\"prism-dashboard-block-collapse\"\n >\n <ChevronIcon direction={collapsed ? 'down' : 'up'} />\n </IconButton>\n )}\n </Box>\n </Box>\n );\n}\n\n/**\n * Dashboard block content component.\n */\nexport function DashboardBlockContent({ children, disablePadding = false, sx }: DashboardBlockContentProps): ReactNode {\n const { collapsed, loading, error, size } = useDashboardBlockContext();\n const config = sizeConfig[size];\n\n return (\n <Collapse in={!collapsed} timeout=\"auto\">\n <Box\n data-testid=\"prism-dashboard-block-content\"\n sx={[\n {\n ...(!disablePadding && {\n px: config.contentPx,\n py: config.contentPy,\n }),\n },\n ...(Array.isArray(sx) ? sx : [sx]),\n ]}\n >\n {children}\n </Box>\n </Collapse>\n );\n}\n\n/**\n * Dashboard block footer component.\n */\nexport function DashboardBlockFooter({ children, divider = true, sx }: DashboardBlockFooterProps): ReactNode {\n const { collapsed, size } = useDashboardBlockContext();\n const config = sizeConfig[size];\n\n if (collapsed) return null;\n\n return (\n <>\n {divider && <Divider />}\n <Box\n data-testid=\"prism-dashboard-block-footer\"\n sx={[\n {\n px: config.contentPx,\n py: 1.5,\n },\n ...(Array.isArray(sx) ? sx : [sx]),\n ]}\n >\n {children}\n </Box>\n </>\n );\n}\n\n// =============================================================================\n// LOADING & ERROR STATES\n// =============================================================================\n\ninterface LoadingStateProps {\n rows?: number;\n size: 'small' | 'medium' | 'large';\n}\n\nfunction LoadingState({ rows = 3, size }: LoadingStateProps): ReactNode {\n const config = sizeConfig[size];\n return (\n <Box sx={{ px: config.contentPx, py: config.contentPy }}>\n {Array.from({ length: rows }).map((_, i) => (\n <Skeleton key={i} variant=\"text\" animation=\"wave\" sx={{ height: 20, mb: 1 }} />\n ))}\n </Box>\n );\n}\n\ninterface ErrorStateProps {\n message?: string | undefined;\n retryLabel?: string | undefined;\n onRetry?: (() => void) | undefined;\n size: 'small' | 'medium' | 'large';\n}\n\nfunction ErrorState({ message = 'Failed to load data', retryLabel = 'Retry', onRetry, size }: ErrorStateProps): ReactNode {\n const config = sizeConfig[size];\n return (\n <Box\n sx={{\n px: config.contentPx,\n py: config.contentPy,\n textAlign: 'center',\n }}\n >\n <Typography color=\"error\" variant=\"body2\" sx={{ mb: onRetry ? 1.5 : 0 }}>\n {message}\n </Typography>\n {onRetry && (\n <Button size=\"small\" onClick={onRetry}>\n {retryLabel}\n </Button>\n )}\n </Box>\n );\n}\n\ninterface EmptyStateProps {\n config: EmptyConfig | undefined;\n size: 'small' | 'medium' | 'large';\n}\n\nfunction EmptyState({ config, size }: EmptyStateProps): ReactNode {\n const pad = sizeConfig[size];\n if (config?.emptyComponent) return config.emptyComponent;\n return (\n <Box data-testid=\"prism-dashboard-block-empty\" sx={{ px: pad.contentPx, py: pad.contentPy }}>\n {/*\n * `compact`: a block is always a card. Without it EmptyContent centres\n * itself in the VIEWPORT (`minHeight: calc(100vh - 240px)`, `flex: 1`),\n * and every empty module on the portal's home page stood about 400 px\n * tall — the page came out 4060 px at 1440×1000, most of it nothing.\n */}\n <EmptyContent\n compact\n icon={config?.icon}\n iconSize={48}\n title={config?.title}\n description={config?.description}\n action={config?.action}\n />\n </Box>\n );\n}\n\n// =============================================================================\n// MAIN COMPONENT\n// =============================================================================\n\n/**\n * Dashboard Block - Reusable dashboard widget/card.\n *\n * Features:\n * - Header with title, subtitle, icon, and actions\n * - Content area with optional padding\n * - Footer slot with optional divider\n * - Loading and error states\n * - Collapsible behavior (controlled or uncontrolled)\n * - Three size presets (small, medium, large)\n * - Three variants (default, outlined, filled)\n *\n * @example\n * ```tsx\n * <DashboardBlock\n * title=\"Revenue Overview\"\n * subtitle=\"Last 30 days\"\n * icon={<BarChartIcon />}\n * actions={<IconButton><MoreIcon /></IconButton>}\n * collapsible\n * >\n * <RevenueChart />\n * </DashboardBlock>\n * ```\n */\nexport function DashboardBlock({\n title,\n subtitle,\n icon,\n actions,\n children,\n footer,\n variant = 'default',\n size = 'medium',\n loading = false,\n loadingConfig,\n error = false,\n errorConfig,\n empty = false,\n emptyConfig,\n labels = NO_LABELS,\n catchErrors = true,\n collapsible = false,\n defaultCollapsed = false,\n collapsed: controlledCollapsed,\n onCollapseChange,\n disablePadding = false,\n footerDivider = true,\n sx,\n slotProps,\n}: DashboardBlockProps): ReactNode {\n // Collapse state (controlled or uncontrolled)\n const uncontrolledCollapse = useBoolean(defaultCollapsed);\n const isControlled = controlledCollapsed !== undefined;\n const collapsed = isControlled ? controlledCollapsed : uncontrolledCollapse.value;\n\n const handleToggleCollapse = useCallback(() => {\n if (isControlled) {\n onCollapseChange?.(!controlledCollapsed);\n } else {\n uncontrolledCollapse.onToggle();\n }\n }, [isControlled, controlledCollapsed, onCollapseChange, uncontrolledCollapse]);\n\n const handleSetCollapsed = useCallback(\n (value: boolean) => {\n if (isControlled) {\n onCollapseChange?.(value);\n } else {\n uncontrolledCollapse.setValue(value);\n }\n },\n [isControlled, onCollapseChange, uncontrolledCollapse]\n );\n\n // Context value\n const contextValue = useMemo<DashboardBlockContextValue>(\n () => ({\n collapsed: collapsible ? collapsed : false,\n toggleCollapse: collapsible ? handleToggleCollapse : collapseNoop,\n setCollapsed: collapsible ? handleSetCollapsed : collapseNoop,\n loading,\n error,\n variant,\n size,\n labels,\n }),\n [collapsed, collapsible, handleToggleCollapse, handleSetCollapsed, loading, error, variant, size, labels]\n );\n\n const errorMessage = errorConfig?.message ?? labels.error;\n // Loading, then error, then empty, then the content — an error is never\n // drawn as «nothing here».\n const body = loading ? (\n (loadingConfig?.loadingComponent ?? <LoadingState rows={loadingConfig?.skeletonRows ?? 3} size={size} />)\n ) : error ? (\n (errorConfig?.errorComponent ?? (\n <ErrorState message={errorMessage} retryLabel={labels.retry} onRetry={errorConfig?.onRetry} size={size} />\n ))\n ) : empty ? (\n <EmptyState config={emptyConfig} size={size} />\n ) : children ? (\n <DashboardBlockContent disablePadding={disablePadding} {...slotProps?.content}>\n {children}\n </DashboardBlockContent>\n ) : null;\n\n // Paper variant based on block variant\n const paperVariant = variant === 'outlined' ? 'outlined' : 'elevation';\n const paperElevation = variant === 'default' ? 1 : 0;\n\n return (\n <DashboardBlockContext.Provider value={contextValue}>\n <Paper\n data-testid=\"prism-dashboard-block\"\n variant={paperVariant}\n elevation={paperElevation}\n sx={[\n {\n overflow: 'hidden',\n ...(variant === 'filled' && {\n bgcolor: 'action.hover',\n }),\n },\n ...(Array.isArray(sx) ? sx : [sx]),\n ]}\n >\n {/* Header */}\n {title && (\n <DashboardBlockHeader\n title={title}\n subtitle={subtitle}\n icon={icon}\n actions={actions}\n {...slotProps?.header}\n />\n )}\n\n {/* Divider after header */}\n {title && <Divider />}\n\n {/* Content */}\n <Box aria-live=\"polite\" aria-busy={loading}>\n {catchErrors ? (\n <ErrorBoundary\n resetKeys={[loading, error, empty]}\n fallback={({ resetErrorBoundary }) => (\n <ErrorState\n message={labels.error}\n retryLabel={labels.retry}\n onRetry={() => {\n resetErrorBoundary();\n errorConfig?.onRetry?.();\n }}\n size={size}\n />\n )}\n >\n {body}\n </ErrorBoundary>\n ) : (\n body\n )}\n </Box>\n\n {/* Footer */}\n {footer && !loading && !error && (\n <DashboardBlockFooter divider={footerDivider} {...slotProps?.footer}>\n {footer}\n </DashboardBlockFooter>\n )}\n </Paper>\n </DashboardBlockContext.Provider>\n );\n}\n\n// =============================================================================\n// CHEVRON ICON\n// =============================================================================\n\ninterface ChevronIconProps {\n direction: 'up' | 'down';\n}\n\nfunction ChevronIcon({ direction }: ChevronIconProps): ReactNode {\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n style={{\n transform: direction === 'up' ? 'rotate(180deg)' : undefined,\n transition: 'transform 0.2s ease',\n }}\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n );\n}\n","/**\n * Dashboard Block Hook\n *\n * Hook for managing dashboard block state and behavior.\n *\n * @module blocks/dashboard-block/use-dashboard-block\n */\n\n'use client';\n\nimport { useState, useCallback, useMemo } from 'react';\nimport type { DashboardBlockProps } from './types.js';\n\n/**\n * Dashboard block state.\n */\nexport interface DashboardBlockState {\n /** Current collapsed state */\n collapsed: boolean;\n /** Current loading state */\n loading: boolean;\n /** Current error state */\n error: boolean;\n /** Error message */\n errorMessage?: string;\n}\n\n/**\n * Dashboard block actions.\n */\nexport interface DashboardBlockActions {\n /** Toggle collapse state */\n toggleCollapse: () => void;\n /** Set collapsed state */\n setCollapsed: (collapsed: boolean) => void;\n /** Expand block */\n expand: () => void;\n /** Collapse block */\n collapse: () => void;\n /** Set loading state */\n setLoading: (loading: boolean) => void;\n /** Set error state */\n setError: (error: boolean, message?: string) => void;\n /** Clear error state */\n clearError: () => void;\n /** Reset to initial state */\n reset: () => void;\n}\n\n/**\n * Dashboard block hook return value.\n */\nexport interface UseDashboardBlockReturn {\n /** Current state */\n state: DashboardBlockState;\n /** Actions to modify state */\n actions: DashboardBlockActions;\n /** Props to spread on DashboardBlock */\n blockProps: Pick<DashboardBlockProps, 'collapsed' | 'onCollapseChange' | 'loading' | 'error' | 'errorConfig'>;\n}\n\n/**\n * Options for useDashboardBlock hook.\n */\nexport interface UseDashboardBlockOptions {\n /** Initial collapsed state */\n defaultCollapsed?: boolean;\n /** Initial loading state */\n defaultLoading?: boolean;\n /** Retry callback for error state */\n onRetry?: () => void;\n}\n\n/**\n * Hook for managing dashboard block state.\n *\n * Provides controlled state management for DashboardBlock component,\n * including collapse, loading, and error states.\n *\n * @example\n * ```tsx\n * function MyWidget() {\n * const { state, actions, blockProps } = useDashboardBlock({\n * defaultCollapsed: false,\n * onRetry: () => fetchData(),\n * });\n *\n * useEffect(() => {\n * actions.setLoading(true);\n * fetchData()\n * .then(() => actions.setLoading(false))\n * .catch((err) => actions.setError(true, err.message));\n * }, []);\n *\n * return (\n * <DashboardBlock title=\"My Widget\" {...blockProps}>\n * <Content />\n * </DashboardBlock>\n * );\n * }\n * ```\n */\nexport function useDashboardBlock(options: UseDashboardBlockOptions = {}): UseDashboardBlockReturn {\n const { defaultCollapsed = false, defaultLoading = false, onRetry } = options;\n\n const [state, setState] = useState<DashboardBlockState>({\n collapsed: defaultCollapsed,\n loading: defaultLoading,\n error: false,\n errorMessage: undefined,\n });\n\n const toggleCollapse = useCallback(() => {\n setState((prev) => ({ ...prev, collapsed: !prev.collapsed }));\n }, []);\n\n const setCollapsed = useCallback((collapsed: boolean) => {\n setState((prev) => ({ ...prev, collapsed }));\n }, []);\n\n const expand = useCallback(() => {\n setState((prev) => ({ ...prev, collapsed: false }));\n }, []);\n\n const collapse = useCallback(() => {\n setState((prev) => ({ ...prev, collapsed: true }));\n }, []);\n\n const setLoading = useCallback((loading: boolean) => {\n setState((prev) => ({ ...prev, loading }));\n }, []);\n\n const setError = useCallback((error: boolean, errorMessage?: string) => {\n setState((prev) => ({ ...prev, error, errorMessage, loading: false }));\n }, []);\n\n const clearError = useCallback(() => {\n setState((prev) => ({ ...prev, error: false, errorMessage: undefined }));\n }, []);\n\n const reset = useCallback(() => {\n setState({\n collapsed: defaultCollapsed,\n loading: defaultLoading,\n error: false,\n errorMessage: undefined,\n });\n }, [defaultCollapsed, defaultLoading]);\n\n const actions = useMemo<DashboardBlockActions>(\n () => ({\n toggleCollapse,\n setCollapsed,\n expand,\n collapse,\n setLoading,\n setError,\n clearError,\n reset,\n }),\n [toggleCollapse, setCollapsed, expand, collapse, setLoading, setError, clearError, reset]\n );\n\n const blockProps = useMemo(\n () => ({\n collapsed: state.collapsed,\n onCollapseChange: setCollapsed,\n loading: state.loading,\n error: state.error,\n errorConfig: state.error\n ? {\n message: state.errorMessage,\n onRetry,\n }\n : undefined,\n }),\n [state.collapsed, state.loading, state.error, state.errorMessage, setCollapsed, onRetry]\n );\n\n return {\n state,\n actions,\n blockProps,\n };\n}\n","'use client';\n\n/**\n * Auth Block Component\n *\n * Reusable authentication forms: login, register, forgot password, etc.\n * Integrates with React Hook Form and Zod for validation.\n *\n * @module blocks/auth-block\n */\n\nimport type { ReactNode } from 'react';\nimport { useState, useEffect, useCallback, useRef } from 'react';\nimport { useForm, FormProvider, type Resolver } from 'react-hook-form';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { z } from 'zod';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport Typography from '@mui/material/Typography';\nimport Link from '@mui/material/Link';\nimport Divider from '@mui/material/Divider';\nimport Alert from '@mui/material/Alert';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport IconButton from '@mui/material/IconButton';\nimport { Field } from '../../components/field/index.js';\nimport type {\n LoginFormProps,\n LoginFormData,\n RegisterFormProps,\n RegisterFormData,\n ForgotPasswordFormProps,\n ForgotPasswordFormData,\n ResetPasswordFormProps,\n ResetPasswordFormData,\n VerifyCodeFormProps,\n VerifyCodeFormData,\n} from './types.js';\n\n// =============================================================================\n// ICONS (inline SVG to avoid dependencies)\n// =============================================================================\n\nfunction EyeIcon(): ReactNode {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n );\n}\n\nfunction EyeOffIcon(): ReactNode {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\" />\n <line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\" />\n </svg>\n );\n}\n\n// =============================================================================\n// ERROR SANITIZATION\n// =============================================================================\n\n/**\n * Patterns that indicate a server-internal error message that should not\n * be shown to the user (e.g., stack traces, connection strings, file paths).\n *\n * The last group matches a leaked secret *value*, not the words that name one.\n * Matching the words themselves cost more than it bought: measured against the\n * 50 authentication messages the downstream and Omnitron auth services actually\n * throw, `/password|secret|token|key/i` replaced 20 of them with the generic\n * fallback — including every password-policy rule (\"Password must contain at\n * least 2 digits\") and every expiry notice (\"Refresh token expired\"), which\n * are precisely the messages the user needs in order to succeed on the next\n * attempt. The patterns below flag 0 of those 50 and still catch all of:\n * `password=hunter2`, `postgres://user:pw@host`, a JWT, a bearer header, a\n * vendor-prefixed API key, a raw hex or base64 blob, and `JWT_SECRET`.\n */\nconst UNSAFE_ERROR_PATTERNS = [\n /at\\s+\\w+\\s*\\(/i, // stack trace frames\n /\\b(ECONNREFUSED|ETIMEDOUT|ENOTFOUND)\\b/, // Node.js system errors\n /\\b(SELECT|INSERT|UPDATE|DELETE)\\b.*\\bFROM\\b/i, // SQL fragments\n /\\/[a-z_-]+\\/[a-z_-]+\\//i, // Unix file paths\n /[A-Z]:\\\\[^\\s]+/, // Windows file paths\n\n // A secret assigned to a name — `password=hunter2`, `token: eyJ...`. The\n // value must carry a digit or symbol, which is what separates a credential\n // from the English word that follows a colon in \"Password: too short\".\n /\\b(password|passwd|pwd|secret|token|api[-_]?key|private[-_]?key|credentials?)\\b\\s*[:=]\\s*[\"']?(?=[^\\s\"']{6,})[A-Za-z]*[0-9+/=_\\-.]/i,\n /\\b[a-z][a-z0-9+.-]*:\\/\\/[^\\s/@]*:[^\\s/@]+@/i, // credentials inside a connection URL\n /\\bbearer\\s+\\S{8,}/i, // Authorization header\n /\\beyJ[A-Za-z0-9_-]{8,}\\.[A-Za-z0-9_-]{8,}/, // JWT\n /\\b(sk|pk|rk)[-_](live|test|ant|proj)[-_]\\w{8,}/i, // vendor-prefixed API keys\n /\\b[A-Fa-f0-9]{32,}\\b/, // raw hex blob — never meaningful to a reader\n /\\b[A-Za-z0-9+/]{40,}={0,2}\\b/, // raw base64 blob\n /\\b[A-Z][A-Z0-9]*_(SECRET|KEY|TOKEN|PASSWORD|PASSWD|CREDENTIALS?)\\b/, // server env var names\n];\n\nconst DEFAULT_AUTH_ERROR = 'An error occurred. Please try again.';\n\n/**\n * Sanitize error messages to prevent information disclosure.\n * Passes through safe, user-facing messages while replacing\n * server-internal details with a generic fallback.\n *\n * Exported for its own tests: the cost of this function getting it wrong is\n * silent — the user is shown a message that says nothing, and no log records\n * that a specific one was suppressed.\n */\nexport function sanitizeErrorMessage(err: unknown, fallback: string = DEFAULT_AUTH_ERROR): string {\n if (!(err instanceof Error)) return fallback;\n\n const message = err.message;\n\n // Reject messages that look like internal server errors\n for (const pattern of UNSAFE_ERROR_PATTERNS) {\n if (pattern.test(message)) return fallback;\n }\n\n // Reject overly long messages (likely stack traces or debug info)\n if (message.length > 200) return fallback;\n\n return message;\n}\n\n// =============================================================================\n// DEFAULT SCHEMAS\n// =============================================================================\n\nconst defaultLoginSchema = z.object({\n email: z.string().email('Please enter a valid email'),\n password: z.string().min(1, 'Password is required'),\n rememberMe: z.boolean().optional(),\n});\n\nconst createRegisterSchema = (minPasswordLength: number = 8, requireTerms: boolean = true) =>\n z\n .object({\n email: z.string().email('Please enter a valid email'),\n password: z.string().min(minPasswordLength, `Password must be at least ${minPasswordLength} characters`),\n confirmPassword: z.string(),\n firstName: z.string().optional(),\n lastName: z.string().optional(),\n acceptTerms: requireTerms\n ? z.boolean().refine((val) => val === true, { message: 'You must accept the terms' })\n : z.boolean().optional(),\n })\n .refine((data) => data.password === data.confirmPassword, {\n message: 'Passwords do not match',\n path: ['confirmPassword'],\n });\n\nconst defaultForgotPasswordSchema = z.object({\n email: z.string().email('Please enter a valid email'),\n});\n\nconst createResetPasswordSchema = (minPasswordLength: number = 8) =>\n z\n .object({\n password: z.string().min(minPasswordLength, `Password must be at least ${minPasswordLength} characters`),\n confirmPassword: z.string(),\n })\n .refine((data) => data.password === data.confirmPassword, {\n message: 'Passwords do not match',\n path: ['confirmPassword'],\n });\n\nconst createVerifyCodeSchema = (codeLength: number = 6) =>\n z.object({\n code: z.string().length(codeLength, `Code must be ${codeLength} digits`),\n });\n\n// =============================================================================\n// LOGIN FORM\n// =============================================================================\n\n/**\n * Login form component with email/password authentication.\n *\n * @example\n * ```tsx\n * <LoginForm\n * onSubmit={async (data) => {\n * await signIn(data.email, data.password);\n * }}\n * showRememberMe\n * showForgotPassword\n * onForgotPassword={() => navigate('/forgot-password')}\n * />\n * ```\n */\nexport function LoginForm({\n onSubmit,\n loading = false,\n disabled = false,\n showRememberMe = true,\n showForgotPassword = true,\n onForgotPassword,\n showSocialLogin = false,\n socialProviders = [],\n schema,\n labels = {},\n sx,\n slotProps,\n}: LoginFormProps): ReactNode {\n const [showPassword, setShowPassword] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const methods = useForm<LoginFormData>({\n resolver: zodResolver(schema ?? (defaultLoginSchema as any)) as Resolver<LoginFormData>,\n defaultValues: {\n email: '',\n password: '',\n rememberMe: false,\n },\n });\n\n // `loading` is a prop, so a caller that does not track its own pending state\n // leaves every control enabled for the whole of an in-flight submit — two\n // clicks on \"Sign In\" send two logins, and this component is the one that\n // opened the async boundary. react-hook-form already knows its handler is\n // running; `busy` is the disjunction, so a caller that drives `loading`\n // keeps control and one that does not still gets a form that locks itself.\n const busy = loading || methods.formState.isSubmitting;\n\n const handleSubmit = methods.handleSubmit(async (data: LoginFormData) => {\n setError(null);\n try {\n await onSubmit(data);\n } catch (err) {\n setError(sanitizeErrorMessage(err));\n }\n });\n\n return (\n <FormProvider {...methods}>\n <Box\n component=\"form\"\n onSubmit={handleSubmit}\n sx={[{ display: 'flex', flexDirection: 'column', gap: 2.5 }, ...(Array.isArray(sx) ? sx : [sx])]}\n {...slotProps?.wrapper}\n >\n {error && (\n <Alert severity=\"error\" onClose={() => setError(null)}>\n {error}\n </Alert>\n )}\n\n <Field.Text\n name=\"email\"\n label={labels.email ?? 'Email'}\n type=\"email\"\n autoComplete=\"email\"\n disabled={disabled || busy}\n {...slotProps?.textField}\n />\n\n <Field.Text\n name=\"password\"\n label={labels.password ?? 'Password'}\n type={showPassword ? 'text' : 'password'}\n autoComplete=\"current-password\"\n disabled={disabled || busy}\n slotProps={{\n input: {\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton\n onClick={() => setShowPassword(!showPassword)}\n edge=\"end\"\n aria-label={showPassword ? 'Hide password' : 'Show password'}\n >\n {showPassword ? <EyeOffIcon /> : <EyeIcon />}\n </IconButton>\n </InputAdornment>\n ),\n },\n }}\n {...slotProps?.textField}\n />\n\n {(showRememberMe || showForgotPassword) && (\n <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n {showRememberMe && (\n <Field.Checkbox\n name=\"rememberMe\"\n label={labels.rememberMe ?? 'Remember me'}\n disabled={disabled || busy}\n />\n )}\n {showForgotPassword && (\n <Link\n component=\"button\"\n type=\"button\"\n variant=\"body2\"\n onClick={onForgotPassword}\n sx={{ textDecoration: 'none' }}\n >\n {labels.forgotPassword ?? 'Forgot password?'}\n </Link>\n )}\n </Box>\n )}\n\n <Button\n type=\"submit\"\n variant=\"contained\"\n size=\"large\"\n fullWidth\n disabled={disabled || busy}\n {...slotProps?.submitButton}\n >\n {busy ? <CircularProgress size={24} color=\"inherit\" /> : (labels.submit ?? 'Sign In')}\n </Button>\n\n {showSocialLogin && socialProviders.length > 0 && (\n <>\n <Divider>\n <Typography variant=\"body2\" sx={{\n color: \"text.secondary\"\n }}>\n {labels.socialDivider ?? 'or continue with'}\n </Typography>\n </Divider>\n <Box sx={{ display: 'flex', gap: 1.5, justifyContent: 'center' }}>\n {socialProviders.map((provider) => (\n <IconButton\n key={provider.id}\n onClick={provider.onClick}\n disabled={disabled || busy}\n sx={{\n border: 1,\n borderColor: 'divider',\n borderRadius: 1,\n p: 1,\n }}\n aria-label={`Sign in with ${provider.name}`}\n >\n {provider.icon}\n </IconButton>\n ))}\n </Box>\n </>\n )}\n </Box>\n </FormProvider>\n );\n}\n\n// =============================================================================\n// REGISTER FORM\n// =============================================================================\n\n/**\n * Registration form component.\n *\n * @example\n * ```tsx\n * <RegisterForm\n * onSubmit={async (data) => {\n * await signUp(data);\n * }}\n * showNameFields\n * requireTerms\n * onTermsClick={() => window.open('/terms')}\n * />\n * ```\n */\nexport function RegisterForm({\n onSubmit,\n loading = false,\n disabled = false,\n showNameFields = false,\n requireTerms = true,\n onTermsClick,\n onPrivacyClick,\n minPasswordLength = 8,\n schema,\n labels = {},\n sx,\n slotProps,\n}: RegisterFormProps): ReactNode {\n const [showPassword, setShowPassword] = useState(false);\n const [showConfirmPassword, setShowConfirmPassword] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const methods = useForm<RegisterFormData>({\n resolver: zodResolver(\n schema ?? (createRegisterSchema(minPasswordLength, requireTerms) as any)\n ) as Resolver<RegisterFormData>,\n defaultValues: {\n email: '',\n password: '',\n confirmPassword: '',\n firstName: '',\n lastName: '',\n acceptTerms: false,\n },\n });\n\n const busy = loading || methods.formState.isSubmitting;\n\n const handleSubmit = methods.handleSubmit(async (data: RegisterFormData) => {\n setError(null);\n try {\n await onSubmit(data);\n } catch (err) {\n setError(sanitizeErrorMessage(err));\n }\n });\n\n return (\n <FormProvider {...methods}>\n <Box\n component=\"form\"\n onSubmit={handleSubmit}\n sx={[{ display: 'flex', flexDirection: 'column', gap: 2.5 }, ...(Array.isArray(sx) ? sx : [sx])]}\n {...slotProps?.wrapper}\n >\n {error && (\n <Alert severity=\"error\" onClose={() => setError(null)}>\n {error}\n </Alert>\n )}\n\n {showNameFields && (\n <Box sx={{ display: 'flex', gap: 2 }}>\n <Field.Text\n name=\"firstName\"\n label={labels.firstName ?? 'First Name'}\n autoComplete=\"given-name\"\n disabled={disabled || busy}\n {...slotProps?.textField}\n />\n <Field.Text\n name=\"lastName\"\n label={labels.lastName ?? 'Last Name'}\n autoComplete=\"family-name\"\n disabled={disabled || busy}\n {...slotProps?.textField}\n />\n </Box>\n )}\n\n <Field.Text\n name=\"email\"\n label={labels.email ?? 'Email'}\n type=\"email\"\n autoComplete=\"email\"\n disabled={disabled || busy}\n {...slotProps?.textField}\n />\n\n <Field.Text\n name=\"password\"\n label={labels.password ?? 'Password'}\n type={showPassword ? 'text' : 'password'}\n autoComplete=\"new-password\"\n disabled={disabled || busy}\n helperText={`At least ${minPasswordLength} characters`}\n slotProps={{\n input: {\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton\n onClick={() => setShowPassword(!showPassword)}\n edge=\"end\"\n aria-label={showPassword ? 'Hide password' : 'Show password'}\n >\n {showPassword ? <EyeOffIcon /> : <EyeIcon />}\n </IconButton>\n </InputAdornment>\n ),\n },\n }}\n {...slotProps?.textField}\n />\n\n <Field.Text\n name=\"confirmPassword\"\n label={labels.confirmPassword ?? 'Confirm Password'}\n type={showConfirmPassword ? 'text' : 'password'}\n autoComplete=\"new-password\"\n disabled={disabled || busy}\n slotProps={{\n input: {\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton\n onClick={() => setShowConfirmPassword(!showConfirmPassword)}\n edge=\"end\"\n aria-label={showConfirmPassword ? 'Hide password' : 'Show password'}\n >\n {showConfirmPassword ? <EyeOffIcon /> : <EyeIcon />}\n </IconButton>\n </InputAdornment>\n ),\n },\n }}\n {...slotProps?.textField}\n />\n\n {requireTerms && (\n <Field.Checkbox\n name=\"acceptTerms\"\n disabled={disabled || busy}\n label={\n <Typography variant=\"body2\" component=\"span\">\n {labels.acceptTerms ?? 'I agree to the '}\n <Link component=\"button\" type=\"button\" onClick={onTermsClick}>\n {labels.termsLink ?? 'Terms of Service'}\n </Link>\n {' and '}\n <Link component=\"button\" type=\"button\" onClick={onPrivacyClick}>\n {labels.privacyLink ?? 'Privacy Policy'}\n </Link>\n </Typography>\n }\n />\n )}\n\n <Button\n type=\"submit\"\n variant=\"contained\"\n size=\"large\"\n fullWidth\n disabled={disabled || busy}\n {...slotProps?.submitButton}\n >\n {busy ? <CircularProgress size={24} color=\"inherit\" /> : (labels.submit ?? 'Create Account')}\n </Button>\n </Box>\n </FormProvider>\n );\n}\n\n// =============================================================================\n// FORGOT PASSWORD FORM\n// =============================================================================\n\n/**\n * Forgot password form component.\n *\n * @example\n * ```tsx\n * <ForgotPasswordForm\n * onSubmit={async (data) => {\n * await sendPasswordResetEmail(data.email);\n * }}\n * onBackToLogin={() => navigate('/login')}\n * />\n * ```\n */\nexport function ForgotPasswordForm({\n onSubmit,\n loading = false,\n disabled = false,\n onBackToLogin,\n schema,\n labels = {},\n sx,\n slotProps,\n}: ForgotPasswordFormProps): ReactNode {\n const [error, setError] = useState<string | null>(null);\n const [success, setSuccess] = useState(false);\n\n const methods = useForm<ForgotPasswordFormData>({\n resolver: zodResolver(schema ?? (defaultForgotPasswordSchema as any)) as Resolver<ForgotPasswordFormData>,\n defaultValues: {\n email: '',\n },\n });\n\n const busy = loading || methods.formState.isSubmitting;\n\n const handleSubmit = methods.handleSubmit(async (data: ForgotPasswordFormData) => {\n setError(null);\n try {\n await onSubmit(data);\n setSuccess(true);\n } catch (err) {\n setError(sanitizeErrorMessage(err));\n }\n });\n\n if (success) {\n return (\n <Box sx={{ textAlign: 'center' }}>\n <Typography variant=\"h6\" gutterBottom>\n Check your email\n </Typography>\n <Typography\n variant=\"body2\"\n sx={{\n color: \"text.secondary\",\n mb: 3\n }}>\n We sent a password reset link to your email address.\n </Typography>\n {onBackToLogin && (\n <Button variant=\"text\" onClick={onBackToLogin}>\n {labels.backToLogin ?? 'Back to login'}\n </Button>\n )}\n </Box>\n );\n }\n\n return (\n <FormProvider {...methods}>\n <Box\n component=\"form\"\n onSubmit={handleSubmit}\n sx={[{ display: 'flex', flexDirection: 'column', gap: 2.5 }, ...(Array.isArray(sx) ? sx : [sx])]}\n {...slotProps?.wrapper}\n >\n <Box sx={{ textAlign: 'center', mb: 1 }}>\n <Typography variant=\"h6\" gutterBottom>\n {labels.title ?? 'Forgot password?'}\n </Typography>\n <Typography variant=\"body2\" sx={{\n color: \"text.secondary\"\n }}>\n {labels.description ?? \"Enter your email and we'll send you a reset link.\"}\n </Typography>\n </Box>\n\n {error && (\n <Alert severity=\"error\" onClose={() => setError(null)}>\n {error}\n </Alert>\n )}\n\n <Field.Text\n name=\"email\"\n label={labels.email ?? 'Email'}\n type=\"email\"\n autoComplete=\"email\"\n disabled={disabled || busy}\n {...slotProps?.textField}\n />\n\n <Button\n type=\"submit\"\n variant=\"contained\"\n size=\"large\"\n fullWidth\n disabled={disabled || busy}\n {...slotProps?.submitButton}\n >\n {busy ? <CircularProgress size={24} color=\"inherit\" /> : (labels.submit ?? 'Send Reset Link')}\n </Button>\n\n {onBackToLogin && (\n <Button variant=\"text\" onClick={onBackToLogin} disabled={loading}>\n {labels.backToLogin ?? 'Back to login'}\n </Button>\n )}\n </Box>\n </FormProvider>\n );\n}\n\n// =============================================================================\n// RESET PASSWORD FORM\n// =============================================================================\n\n/**\n * Reset password form component.\n *\n * @example\n * ```tsx\n * <ResetPasswordForm\n * onSubmit={async (data) => {\n * await resetPassword(token, data.password);\n * }}\n * />\n * ```\n */\nexport function ResetPasswordForm({\n onSubmit,\n loading = false,\n disabled = false,\n minPasswordLength = 8,\n schema,\n labels = {},\n sx,\n slotProps,\n}: ResetPasswordFormProps): ReactNode {\n const [showPassword, setShowPassword] = useState(false);\n const [showConfirmPassword, setShowConfirmPassword] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const methods = useForm<ResetPasswordFormData>({\n resolver: zodResolver(\n schema ?? (createResetPasswordSchema(minPasswordLength) as any)\n ) as Resolver<ResetPasswordFormData>,\n defaultValues: {\n password: '',\n confirmPassword: '',\n },\n });\n\n const busy = loading || methods.formState.isSubmitting;\n\n const handleSubmit = methods.handleSubmit(async (data: ResetPasswordFormData) => {\n setError(null);\n try {\n await onSubmit(data);\n } catch (err) {\n setError(sanitizeErrorMessage(err));\n }\n });\n\n return (\n <FormProvider {...methods}>\n <Box\n component=\"form\"\n onSubmit={handleSubmit}\n sx={[{ display: 'flex', flexDirection: 'column', gap: 2.5 }, ...(Array.isArray(sx) ? sx : [sx])]}\n {...slotProps?.wrapper}\n >\n <Box sx={{ textAlign: 'center', mb: 1 }}>\n <Typography variant=\"h6\" gutterBottom>\n {labels.title ?? 'Set new password'}\n </Typography>\n <Typography variant=\"body2\" sx={{\n color: \"text.secondary\"\n }}>\n {labels.description ?? 'Create a new password for your account.'}\n </Typography>\n </Box>\n\n {error && (\n <Alert severity=\"error\" onClose={() => setError(null)}>\n {error}\n </Alert>\n )}\n\n <Field.Text\n name=\"password\"\n label={labels.password ?? 'New Password'}\n type={showPassword ? 'text' : 'password'}\n autoComplete=\"new-password\"\n disabled={disabled || busy}\n helperText={`At least ${minPasswordLength} characters`}\n slotProps={{\n input: {\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton\n onClick={() => setShowPassword(!showPassword)}\n edge=\"end\"\n aria-label={showPassword ? 'Hide password' : 'Show password'}\n >\n {showPassword ? <EyeOffIcon /> : <EyeIcon />}\n </IconButton>\n </InputAdornment>\n ),\n },\n }}\n {...slotProps?.textField}\n />\n\n <Field.Text\n name=\"confirmPassword\"\n label={labels.confirmPassword ?? 'Confirm Password'}\n type={showConfirmPassword ? 'text' : 'password'}\n autoComplete=\"new-password\"\n disabled={disabled || busy}\n slotProps={{\n input: {\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton\n onClick={() => setShowConfirmPassword(!showConfirmPassword)}\n edge=\"end\"\n aria-label={showConfirmPassword ? 'Hide password' : 'Show password'}\n >\n {showConfirmPassword ? <EyeOffIcon /> : <EyeIcon />}\n </IconButton>\n </InputAdornment>\n ),\n },\n }}\n {...slotProps?.textField}\n />\n\n <Button\n type=\"submit\"\n variant=\"contained\"\n size=\"large\"\n fullWidth\n disabled={disabled || busy}\n {...slotProps?.submitButton}\n >\n {busy ? <CircularProgress size={24} color=\"inherit\" /> : (labels.submit ?? 'Reset Password')}\n </Button>\n </Box>\n </FormProvider>\n );\n}\n\n// =============================================================================\n// VERIFY CODE FORM\n// =============================================================================\n\n/**\n * Verify code form component (OTP verification).\n *\n * @example\n * ```tsx\n * <VerifyCodeForm\n * onSubmit={async (data) => {\n * await verifyCode(data.code);\n * }}\n * onResendCode={async () => {\n * await resendVerificationCode();\n * }}\n * resendCooldown={60}\n * />\n * ```\n */\nexport function VerifyCodeForm({\n onSubmit,\n loading = false,\n disabled = false,\n codeLength = 6,\n onResendCode,\n resendCooldown = 60,\n schema,\n labels = {},\n sx,\n slotProps,\n}: VerifyCodeFormProps): ReactNode {\n const [error, setError] = useState<string | null>(null);\n const [cooldown, setCooldown] = useState(0);\n const [resending, setResending] = useState(false);\n const resendingRef = useRef(false);\n\n const methods = useForm<VerifyCodeFormData>({\n resolver: zodResolver(schema ?? (createVerifyCodeSchema(codeLength) as any)) as Resolver<VerifyCodeFormData>,\n defaultValues: {\n code: '',\n },\n });\n\n const busy = loading || methods.formState.isSubmitting;\n\n // Cooldown timer\n useEffect(() => {\n if (cooldown > 0) {\n const timer = setTimeout(() => setCooldown(cooldown - 1), 1000);\n return () => clearTimeout(timer);\n }\n return undefined;\n }, [cooldown]);\n\n const handleResendCode = useCallback(async () => {\n // `cooldown` is set after the await, so it gates the caller that arrives\n // once the first request has returned — not the one that arrives while it\n // is still open. Two clicks a moment apart therefore both got through and\n // sent two codes, which on a rate-limited endpoint locks the user out of\n // the flow they are trying to finish. The ref is what closes that window:\n // `resending` state is committed a render too late to guard anything, and\n // exists only to disable the link.\n if (cooldown > 0 || resendingRef.current || !onResendCode) return;\n resendingRef.current = true;\n setResending(true);\n // A resend that fails and is then retried successfully used to leave the\n // failure on screen: the user reads \"Failed to resend code\" with the code\n // already in their inbox.\n setError(null);\n try {\n await onResendCode();\n setCooldown(resendCooldown);\n } catch (err) {\n setError(sanitizeErrorMessage(err, 'Failed to resend code'));\n } finally {\n resendingRef.current = false;\n setResending(false);\n }\n }, [cooldown, onResendCode, resendCooldown]);\n\n const handleSubmit = methods.handleSubmit(async (data: VerifyCodeFormData) => {\n setError(null);\n try {\n await onSubmit(data);\n } catch (err) {\n setError(sanitizeErrorMessage(err));\n }\n });\n\n return (\n <FormProvider {...methods}>\n <Box\n component=\"form\"\n onSubmit={handleSubmit}\n sx={[\n { display: 'flex', flexDirection: 'column', gap: 2.5, alignItems: 'center' },\n ...(Array.isArray(sx) ? sx : [sx]),\n ]}\n {...slotProps?.wrapper}\n >\n <Box sx={{ textAlign: 'center', mb: 1 }}>\n <Typography variant=\"h6\" gutterBottom>\n {labels.title ?? 'Enter verification code'}\n </Typography>\n <Typography variant=\"body2\" sx={{\n color: \"text.secondary\"\n }}>\n {labels.description ?? 'We sent a verification code to your email.'}\n </Typography>\n </Box>\n\n {error && (\n <Alert severity=\"error\" onClose={() => setError(null)} sx={{ width: '100%' }}>\n {error}\n </Alert>\n )}\n\n <Field.Code name=\"code\" length={codeLength} autoFocus disabled={disabled || busy} />\n\n <Button\n type=\"submit\"\n variant=\"contained\"\n size=\"large\"\n fullWidth\n disabled={disabled || busy}\n {...slotProps?.submitButton}\n >\n {busy ? <CircularProgress size={24} color=\"inherit\" /> : (labels.submit ?? 'Verify')}\n </Button>\n\n {onResendCode && (\n <Box sx={{ textAlign: 'center' }}>\n {cooldown > 0 ? (\n <Typography variant=\"body2\" sx={{\n color: \"text.secondary\"\n }}>\n {labels.resendIn ?? 'Resend code in'} {cooldown}s\n </Typography>\n ) : (\n <Link\n component=\"button\"\n type=\"button\"\n variant=\"body2\"\n onClick={handleResendCode}\n disabled={disabled || busy || resending}\n >\n {labels.resendCode ?? \"Didn't receive the code? Resend\"}\n </Link>\n )}\n </Box>\n )}\n </Box>\n </FormProvider>\n );\n}\n\n// =============================================================================\n// EXPORTS\n// =============================================================================\n\n/**\n * AuthBlock namespace for auth-related forms.\n */\nexport const AuthBlock = {\n Login: LoginForm,\n Register: RegisterForm,\n ForgotPassword: ForgotPasswordForm,\n ResetPassword: ResetPasswordForm,\n VerifyCode: VerifyCodeForm,\n} as const;\n","'use client';\n\n/**\n * Route Guards\n *\n * Authentication and authorization guards for route protection.\n * Works with any router (React Router, Next.js, TanStack Router).\n *\n * @module blocks/auth-block\n */\n\nimport { type ReactNode, useEffect, useState } from 'react';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\n/**\n * User role type - string or enum value.\n */\nexport type Role = string;\n\n/**\n * Permission type - string identifier.\n */\nexport type Permission = string;\n\n/**\n * User with roles and permissions for authorization.\n */\nexport interface AuthUser {\n /** User ID */\n id: string | number;\n /** User roles */\n roles?: Role[];\n /** User permissions (fine-grained) */\n permissions?: Permission[];\n /** Email verified status */\n emailVerified?: boolean;\n /** Any additional properties */\n [key: string]: unknown;\n}\n\n/**\n * Auth state for guards.\n */\nexport interface AuthState {\n /** Whether user is authenticated */\n isAuthenticated: boolean;\n /** Whether auth state is still loading */\n isLoading: boolean;\n /** Current user (if authenticated) */\n user?: AuthUser | null;\n}\n\n/**\n * Props for useAuth hook.\n * Guards need this to check auth state.\n */\nexport interface UseAuth {\n (): AuthState;\n}\n\n// =============================================================================\n// AUTH GUARD\n// =============================================================================\n\n/**\n * AuthGuard props.\n */\nexport interface AuthGuardProps {\n /** Children to render when authorized */\n children: ReactNode;\n /** Hook to get auth state */\n useAuth: UseAuth;\n /** Component to show while loading */\n loadingComponent?: ReactNode;\n /** Called when not authenticated (e.g., redirect to login) */\n onUnauthenticated?: () => void;\n /** Component to show when not authenticated (if no redirect) */\n unauthenticatedComponent?: ReactNode;\n}\n\n/**\n * Guard that requires authentication.\n *\n * @example\n * ```tsx\n * import { AuthGuard } from '@omnitron-dev/prism/blocks';\n * import { useAuth } from '../hooks/use-auth';\n *\n * function ProtectedPage() {\n * return (\n * <AuthGuard\n * useAuth={useAuth}\n * onUnauthenticated={() => navigate('/login')}\n * loadingComponent={<LoadingScreen />}\n * >\n * <DashboardContent />\n * </AuthGuard>\n * );\n * }\n * ```\n */\nexport function AuthGuard({\n children,\n useAuth,\n loadingComponent = null,\n onUnauthenticated,\n unauthenticatedComponent = null,\n}: AuthGuardProps): ReactNode {\n const { isAuthenticated, isLoading } = useAuth();\n const [checked, setChecked] = useState(false);\n\n useEffect(() => {\n if (!isLoading) {\n if (!isAuthenticated) {\n onUnauthenticated?.();\n }\n setChecked(true);\n }\n }, [isAuthenticated, isLoading, onUnauthenticated]);\n\n if (isLoading || !checked) {\n return loadingComponent;\n }\n\n if (!isAuthenticated) {\n return unauthenticatedComponent;\n }\n\n return children;\n}\n\n// =============================================================================\n// GUEST GUARD\n// =============================================================================\n\n/**\n * GuestGuard props.\n */\nexport interface GuestGuardProps {\n /** Children to render when not authenticated */\n children: ReactNode;\n /** Hook to get auth state */\n useAuth: UseAuth;\n /** Component to show while loading */\n loadingComponent?: ReactNode;\n /** Called when authenticated (e.g., redirect to dashboard) */\n onAuthenticated?: () => void;\n /** Component to show when authenticated (if no redirect) */\n authenticatedComponent?: ReactNode;\n}\n\n/**\n * Guard that requires NO authentication.\n * Use for login, register, forgot password pages.\n *\n * @example\n * ```tsx\n * import { GuestGuard } from '@omnitron-dev/prism/blocks';\n * import { useAuth } from '../hooks/use-auth';\n *\n * function LoginPage() {\n * return (\n * <GuestGuard\n * useAuth={useAuth}\n * onAuthenticated={() => navigate('/dashboard')}\n * loadingComponent={<LoadingScreen />}\n * >\n * <LoginForm />\n * </GuestGuard>\n * );\n * }\n * ```\n */\nexport function GuestGuard({\n children,\n useAuth,\n loadingComponent = null,\n onAuthenticated,\n authenticatedComponent = null,\n}: GuestGuardProps): ReactNode {\n const { isAuthenticated, isLoading } = useAuth();\n const [checked, setChecked] = useState(false);\n\n useEffect(() => {\n if (!isLoading) {\n if (isAuthenticated) {\n onAuthenticated?.();\n }\n setChecked(true);\n }\n }, [isAuthenticated, isLoading, onAuthenticated]);\n\n if (isLoading || !checked) {\n return loadingComponent;\n }\n\n if (isAuthenticated) {\n return authenticatedComponent;\n }\n\n return children;\n}\n\n// =============================================================================\n// ROLE-BASED GUARD\n// =============================================================================\n\n/**\n * RoleBasedGuard props.\n */\nexport interface RoleBasedGuardProps {\n /** Children to render when authorized */\n children: ReactNode;\n /** Hook to get auth state */\n useAuth: UseAuth;\n /** Required roles (user must have at least one) */\n roles?: Role[];\n /** Required permissions (user must have ALL) */\n permissions?: Permission[];\n /** Require email verification */\n requireEmailVerified?: boolean;\n /** Match strategy for roles: 'any' (default) or 'all' */\n roleMatchStrategy?: 'any' | 'all';\n /** Component to show while loading */\n loadingComponent?: ReactNode;\n /** Called when access denied */\n onAccessDenied?: (reason: AccessDeniedReason) => void;\n /** Component to show when access denied */\n accessDeniedComponent?: ReactNode;\n}\n\n/**\n * Reason for access denial.\n */\nexport type AccessDeniedReason = 'not_authenticated' | 'missing_role' | 'missing_permission' | 'email_not_verified';\n\n/**\n * Guard for role/permission-based access control.\n *\n * @example\n * ```tsx\n * import { RoleBasedGuard } from '@omnitron-dev/prism/blocks';\n * import { useAuth } from '../hooks/use-auth';\n *\n * // Require admin role\n * function AdminPage() {\n * return (\n * <RoleBasedGuard\n * useAuth={useAuth}\n * roles={['admin']}\n * onAccessDenied={() => navigate('/403')}\n * >\n * <AdminPanel />\n * </RoleBasedGuard>\n * );\n * }\n *\n * // Require specific permission\n * function EditUserPage() {\n * return (\n * <RoleBasedGuard\n * useAuth={useAuth}\n * permissions={['users:write']}\n * accessDeniedComponent={<AccessDenied />}\n * >\n * <UserEditForm />\n * </RoleBasedGuard>\n * );\n * }\n *\n * // Require admin OR moderator role\n * function ModeratePage() {\n * return (\n * <RoleBasedGuard\n * useAuth={useAuth}\n * roles={['admin', 'moderator']}\n * roleMatchStrategy=\"any\"\n * >\n * <ModerateContent />\n * </RoleBasedGuard>\n * );\n * }\n *\n * // Require email verified\n * function VerifiedOnlyPage() {\n * return (\n * <RoleBasedGuard\n * useAuth={useAuth}\n * requireEmailVerified\n * onAccessDenied={(reason) => {\n * if (reason === 'email_not_verified') {\n * navigate('/verify-email');\n * }\n * }}\n * >\n * <VerifiedContent />\n * </RoleBasedGuard>\n * );\n * }\n * ```\n */\nexport function RoleBasedGuard({\n children,\n useAuth,\n roles = [],\n permissions = [],\n requireEmailVerified = false,\n roleMatchStrategy = 'any',\n loadingComponent = null,\n onAccessDenied,\n accessDeniedComponent = null,\n}: RoleBasedGuardProps): ReactNode {\n const { isAuthenticated, isLoading, user } = useAuth();\n const [checked, setChecked] = useState(false);\n const [accessGranted, setAccessGranted] = useState(false);\n\n useEffect(() => {\n if (!isLoading) {\n // Check authentication\n if (!isAuthenticated || !user) {\n onAccessDenied?.('not_authenticated');\n setAccessGranted(false);\n setChecked(true);\n return;\n }\n\n // Check email verification\n if (requireEmailVerified && !user.emailVerified) {\n onAccessDenied?.('email_not_verified');\n setAccessGranted(false);\n setChecked(true);\n return;\n }\n\n // Check roles\n if (roles.length > 0) {\n const userRoles = user.roles ?? [];\n const hasRequiredRole =\n roleMatchStrategy === 'all'\n ? roles.every((role) => userRoles.includes(role))\n : roles.some((role) => userRoles.includes(role));\n\n if (!hasRequiredRole) {\n onAccessDenied?.('missing_role');\n setAccessGranted(false);\n setChecked(true);\n return;\n }\n }\n\n // Check permissions (always ALL)\n if (permissions.length > 0) {\n const userPermissions = user.permissions ?? [];\n const hasAllPermissions = permissions.every((perm) => userPermissions.includes(perm));\n\n if (!hasAllPermissions) {\n onAccessDenied?.('missing_permission');\n setAccessGranted(false);\n setChecked(true);\n return;\n }\n }\n\n // Access granted\n setAccessGranted(true);\n setChecked(true);\n }\n }, [isAuthenticated, isLoading, user, roles, permissions, requireEmailVerified, roleMatchStrategy, onAccessDenied]);\n\n if (isLoading || !checked) {\n return loadingComponent;\n }\n\n if (!accessGranted) {\n return accessDeniedComponent;\n }\n\n return children;\n}\n\n// =============================================================================\n// UTILITY HOOKS\n// =============================================================================\n\n/**\n * Check if user has specific role(s).\n *\n * @example\n * ```tsx\n * const isAdmin = hasRole(user, 'admin');\n * const isModerator = hasRole(user, ['admin', 'moderator'], 'any');\n * const isSuperAdmin = hasRole(user, ['admin', 'superuser'], 'all');\n * ```\n */\nexport function hasRole(\n user: AuthUser | null | undefined,\n role: Role | Role[],\n strategy: 'any' | 'all' = 'any'\n): boolean {\n if (!user?.roles?.length) return false;\n\n const roles = Array.isArray(role) ? role : [role];\n // An empty requirement grants nothing. Under `all`, `[].every()` is `true`\n // — a vacuous truth that reads as \"every requirement is met\" and means \"no\n // requirement was checked\". A list arriving empty from config or from a\n // filtered array would open whatever it guards.\n if (roles.length === 0) return false;\n\n return strategy === 'all' ? roles.every((r) => user.roles!.includes(r)) : roles.some((r) => user.roles!.includes(r));\n}\n\n/**\n * Check if user has specific permission(s).\n *\n * @example\n * ```tsx\n * const canEdit = hasPermission(user, 'users:write');\n * const canManage = hasPermission(user, ['users:read', 'users:write'], 'all');\n * ```\n */\nexport function hasPermission(\n user: AuthUser | null | undefined,\n permission: Permission | Permission[],\n strategy: 'any' | 'all' = 'all'\n): boolean {\n if (!user?.permissions?.length) return false;\n\n const permissions = Array.isArray(permission) ? permission : [permission];\n // Same vacuous truth as `hasRole`, and here it was reachable by default:\n // `hasPermission(user, [])` returned `true` for any user holding at least\n // one permission, because the default strategy is `all` and `[].every()`\n // is `true`. Measured before this line existed.\n if (permissions.length === 0) return false;\n\n return strategy === 'all'\n ? permissions.every((p) => user.permissions!.includes(p))\n : permissions.some((p) => user.permissions!.includes(p));\n}\n\n/**\n * Create a conditional render helper based on roles/permissions.\n *\n * @example\n * ```tsx\n * const { canRender } = useConditionalRender(user);\n *\n * return (\n * <div>\n * {canRender({ roles: ['admin'] }) && <AdminPanel />}\n * {canRender({ permissions: ['users:write'] }) && <EditButton />}\n * </div>\n * );\n * ```\n */\nexport function createConditionalRender(user: AuthUser | null | undefined) {\n return {\n canRender: (options: {\n roles?: Role[];\n permissions?: Permission[];\n roleMatchStrategy?: 'any' | 'all';\n }): boolean => {\n const { roles = [], permissions = [], roleMatchStrategy = 'any' } = options;\n\n if (roles.length > 0 && !hasRole(user, roles, roleMatchStrategy)) {\n return false;\n }\n\n if (permissions.length > 0 && !hasPermission(user, permissions, 'all')) {\n return false;\n }\n\n return true;\n },\n };\n}\n","/**\n * DataGrid Block Component\n *\n * Advanced data table block with toolbar, pagination, sorting, filtering,\n * row actions, and server-side data support.\n *\n * @module blocks/data-grid-block\n */\n\n'use client';\n\nimport {\n type ReactNode,\n type MouseEvent,\n createContext,\n useContext,\n useMemo,\n useState,\n useCallback,\n useRef,\n useEffect,\n} from 'react';\nimport Box from '@mui/material/Box';\nimport Paper from '@mui/material/Paper';\nimport Typography from '@mui/material/Typography';\nimport Button from '@mui/material/Button';\nimport IconButton from '@mui/material/IconButton';\nimport Menu from '@mui/material/Menu';\nimport MenuItem from '@mui/material/MenuItem';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport ListItemText from '@mui/material/ListItemText';\nimport Divider from '@mui/material/Divider';\nimport Tooltip from '@mui/material/Tooltip';\nimport { SearchInput } from '../../components/search-input/search-input.js';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport {\n DataGrid,\n type GridColDef,\n type GridRenderCellParams,\n type GridPaginationModel,\n type GridSortModel,\n type GridFilterModel,\n type GridRowSelectionModel,\n type GridCallbackDetails,\n type GridDensity,\n type GridRowId,\n GridToolbarContainer,\n GridToolbarColumnsButton,\n GridToolbarDensitySelector,\n GridToolbarExport,\n} from '@mui/x-data-grid';\nimport type {\n DataGridBlockProps,\n DataGridBlockContextValue,\n DataGridRowAction,\n UseDataGridBlockOptions,\n UseDataGridBlockReturn,\n DataGridFetchParams,\n} from './types.js';\n\n// =============================================================================\n// CONTEXT\n// =============================================================================\n\nconst DataGridBlockContext = createContext<DataGridBlockContextValue | null>(null);\n\n/**\n * Hook to access data grid block context.\n */\nexport function useDataGridBlockContext(): DataGridBlockContextValue {\n const context = useContext(DataGridBlockContext);\n if (!context) {\n throw new Error('useDataGridBlockContext must be used within DataGridBlock');\n }\n return context;\n}\n\n// =============================================================================\n// ICONS\n// =============================================================================\n\nfunction MoreVertIcon(): ReactNode {\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"1\" />\n <circle cx=\"12\" cy=\"5\" r=\"1\" />\n <circle cx=\"12\" cy=\"19\" r=\"1\" />\n </svg>\n );\n}\n\nfunction EmptyIcon(): ReactNode {\n return (\n <svg\n width=\"64\"\n height=\"64\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n style={{ opacity: 0.4 }}\n >\n <path d=\"M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z\" />\n <polyline points=\"13 2 13 9 20 9\" />\n <line x1=\"10\" y1=\"12\" x2=\"10\" y2=\"18\" />\n <line x1=\"14\" y1=\"12\" x2=\"14\" y2=\"18\" />\n <line x1=\"10\" y1=\"15\" x2=\"14\" y2=\"15\" />\n </svg>\n );\n}\n\n// =============================================================================\n// CUSTOM TOOLBAR\n// =============================================================================\n\ninterface CustomToolbarProps {\n quickFilter?: {\n enabled?: boolean;\n placeholder?: string;\n debounceMs?: number;\n };\n exportConfig?: {\n csv?: boolean;\n excel?: boolean;\n print?: boolean;\n };\n showColumnSelector?: boolean;\n showDensitySelector?: boolean;\n startContent?: ReactNode;\n endContent?: ReactNode;\n actions?: ReactNode;\n onQuickFilterChange?: (value: string) => void;\n}\n\nfunction CustomToolbar({\n quickFilter,\n exportConfig,\n showColumnSelector = true,\n showDensitySelector = true,\n startContent,\n endContent,\n actions,\n onQuickFilterChange,\n}: CustomToolbarProps): ReactNode {\n const [searchValue, setSearchValue] = useState('');\n const debounceRef = useRef<NodeJS.Timeout | null>(null);\n\n // Cleanup debounce timer on unmount\n useEffect(\n () => () => {\n if (debounceRef.current) clearTimeout(debounceRef.current);\n },\n []\n );\n\n const handleSearchChange = useCallback(\n (value: string) => {\n setSearchValue(value);\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n }\n debounceRef.current = setTimeout(() => {\n onQuickFilterChange?.(value);\n }, quickFilter?.debounceMs ?? 300);\n },\n [onQuickFilterChange, quickFilter?.debounceMs]\n );\n\n return (\n <GridToolbarContainer\n sx={{\n gap: 1.5,\n p: 2,\n borderBottom: 1,\n borderColor: 'divider',\n }}\n >\n {startContent}\n\n {quickFilter?.enabled !== false && (\n <SearchInput\n value={searchValue}\n onChange={handleSearchChange}\n placeholder={quickFilter?.placeholder ?? 'Search...'}\n fullWidth={false}\n minWidth={200}\n />\n )}\n\n <Box sx={{ flex: 1 }} />\n\n {showColumnSelector && <GridToolbarColumnsButton />}\n {showDensitySelector && <GridToolbarDensitySelector />}\n\n {(exportConfig?.csv !== false || exportConfig?.print !== false) && (\n <GridToolbarExport\n printOptions={exportConfig?.print === false ? { disableToolbarButton: true } : undefined}\n csvOptions={exportConfig?.csv === false ? { disableToolbarButton: true } : undefined}\n />\n )}\n\n {actions}\n {endContent}\n </GridToolbarContainer>\n );\n}\n\n// =============================================================================\n// ROW ACTIONS CELL\n// =============================================================================\n\ninterface RowActionsCellProps<R> {\n row: R;\n actions: DataGridRowAction<R>[];\n}\n\nfunction RowActionsCell<R extends Record<string, unknown>>({ row, actions }: RowActionsCellProps<R>): ReactNode {\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n const open = Boolean(anchorEl);\n\n const handleClick = useCallback((event: MouseEvent<HTMLElement>) => {\n event.stopPropagation();\n setAnchorEl(event.currentTarget);\n }, []);\n\n const handleClose = useCallback(() => {\n setAnchorEl(null);\n }, []);\n\n const handleAction = useCallback(\n (action: DataGridRowAction<R>, event: MouseEvent<HTMLElement>) => {\n setAnchorEl(null);\n action.onClick(row, event);\n },\n [row]\n );\n\n const visibleActions = actions.filter((action) => {\n if (typeof action.hidden === 'function') {\n return !action.hidden(row);\n }\n return !action.hidden;\n });\n\n if (visibleActions.length === 0) {\n return null;\n }\n\n // If only 1-2 actions, show inline buttons\n if (visibleActions.length <= 2) {\n return (\n <Box sx={{ display: 'flex', gap: 0.5 }}>\n {visibleActions.map((action) => {\n const isDisabled = typeof action.disabled === 'function' ? action.disabled(row) : action.disabled;\n\n return (\n <Tooltip key={action.key} title={action.label}>\n <span>\n <IconButton\n size=\"small\"\n color={action.color ?? 'default'}\n disabled={isDisabled}\n onClick={(e) => handleAction(action, e)}\n aria-label={action.label}\n >\n {action.icon ?? action.label.charAt(0)}\n </IconButton>\n </span>\n </Tooltip>\n );\n })}\n </Box>\n );\n }\n\n // More than 2 actions, show menu\n return (\n <>\n <IconButton\n size=\"small\"\n onClick={handleClick}\n aria-label=\"Row actions\"\n aria-controls={open ? 'row-actions-menu' : undefined}\n aria-haspopup=\"true\"\n aria-expanded={open ? 'true' : undefined}\n >\n <MoreVertIcon />\n </IconButton>\n <Menu\n id=\"row-actions-menu\"\n anchorEl={anchorEl}\n open={open}\n onClose={handleClose}\n onClick={(e) => e.stopPropagation()}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n >\n {visibleActions.map((action, index) => {\n const isDisabled = typeof action.disabled === 'function' ? action.disabled(row) : action.disabled;\n\n return [\n <MenuItem key={action.key} disabled={isDisabled} onClick={(e) => handleAction(action, e)}>\n {action.icon && <ListItemIcon>{action.icon}</ListItemIcon>}\n <ListItemText primary={action.label} sx={{ color: action.color ? `${action.color}.main` : undefined }} />\n </MenuItem>,\n action.divider && index < visibleActions.length - 1 && <Divider key={`${action.key}-divider`} />,\n ];\n })}\n </Menu>\n </>\n );\n}\n\n// =============================================================================\n// EMPTY STATE\n// =============================================================================\n\ninterface EmptyStateProps {\n icon?: ReactNode;\n title?: string;\n description?: string;\n action?: {\n label: string;\n onClick: () => void;\n };\n component?: ReactNode;\n}\n\nfunction EmptyState({\n icon,\n title = 'No data',\n description = 'No records to display.',\n action,\n component,\n}: EmptyStateProps): ReactNode {\n if (component) {\n return <>{component}</>;\n }\n\n return (\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n py: 8,\n px: 3,\n textAlign: 'center',\n }}\n >\n <Box sx={{ mb: 2, color: 'text.disabled' }}>{icon ?? <EmptyIcon />}</Box>\n <Typography variant=\"h6\" gutterBottom>\n {title}\n </Typography>\n <Typography\n variant=\"body2\"\n sx={{\n color: \"text.secondary\",\n mb: action ? 2 : 0\n }}>\n {description}\n </Typography>\n {action && (\n <Button variant=\"contained\" size=\"small\" onClick={action.onClick}>\n {action.label}\n </Button>\n )}\n </Box>\n );\n}\n\n// =============================================================================\n// ERROR STATE\n// =============================================================================\n\ninterface ErrorStateProps {\n message?: string;\n onRetry?: () => void;\n}\n\nfunction ErrorState({ message = 'Failed to load data', onRetry }: ErrorStateProps): ReactNode {\n return (\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n py: 8,\n px: 3,\n textAlign: 'center',\n }}\n >\n <Typography color=\"error\" variant=\"body1\" gutterBottom>\n {message}\n </Typography>\n {onRetry && (\n <Button variant=\"outlined\" size=\"small\" onClick={onRetry} sx={{ mt: 1 }}>\n Retry\n </Button>\n )}\n </Box>\n );\n}\n\n// =============================================================================\n// MAIN COMPONENT\n// =============================================================================\n\n/**\n * DataGridBlock - Advanced data table with common patterns.\n *\n * Features:\n * - Custom toolbar with search, filters, export, and column visibility\n * - Row actions column (inline or dropdown menu)\n * - Server-side pagination, sorting, and filtering support\n * - Custom empty state\n * - Loading and error states\n * - Selection handling\n * - Density customization\n *\n * @example\n * ```tsx\n * <DataGridBlock\n * columns={[\n * { field: 'name', headerName: 'Name', flex: 1 },\n * { field: 'email', headerName: 'Email', flex: 1 },\n * { field: 'status', headerName: 'Status', width: 120 },\n * ]}\n * rows={users}\n * loading={isLoading}\n * rowActions={[\n * { key: 'edit', label: 'Edit', icon: <EditIcon />, onClick: handleEdit },\n * { key: 'delete', label: 'Delete', icon: <DeleteIcon />, color: 'error', onClick: handleDelete },\n * ]}\n * toolbar={{\n * quickFilter: { placeholder: 'Search users...' },\n * export: { csv: true },\n * }}\n * pagination={{\n * mode: 'server',\n * rowCount: totalCount,\n * }}\n * onPaginationChange={handlePaginationChange}\n * />\n * ```\n */\nexport function DataGridBlock<R extends Record<string, unknown> = Record<string, unknown>>({\n columns,\n rows,\n loading = false,\n error = false,\n errorMessage,\n onRetry,\n rowActions,\n rowActionsWidth = 80,\n toolbar,\n pagination,\n selection,\n empty,\n density: defaultDensity = 'standard',\n autoHeight = false,\n height = 500,\n hideFooter = false,\n rowHeight,\n getRowId,\n onRowClick,\n onRowDoubleClick,\n onSelectionChange,\n onPaginationChange,\n onSortChange,\n onFilterChange,\n paginationModel: controlledPaginationModel,\n sortModel: controlledSortModel,\n filterModel: controlledFilterModel,\n selectionModel: controlledSelectionModel,\n columnVisibilityModel,\n onColumnVisibilityChange,\n slots,\n slotProps,\n disableColumnMenu = false,\n disableColumnFilter = false,\n disableColumnSelector = false,\n disableRowSelectionOnClick = true,\n disableVirtualization = false,\n sx,\n}: DataGridBlockProps<R>): ReactNode {\n const [density, setDensity] = useState<GridDensity>(defaultDensity);\n const [internalPaginationModel, setInternalPaginationModel] = useState<GridPaginationModel>({\n page: 0,\n pageSize: pagination?.defaultPageSize ?? 25,\n });\n const [internalSortModel, setInternalSortModel] = useState<GridSortModel>([]);\n const [internalFilterModel, setInternalFilterModel] = useState<GridFilterModel>({ items: [] });\n const [internalSelectionModel, setInternalSelectionModel] = useState<GridRowSelectionModel>({\n type: 'include',\n ids: new Set<GridRowId>(),\n });\n const [quickFilterValue, setQuickFilterValue] = useState('');\n\n // Use controlled or internal state\n const paginationModel = controlledPaginationModel ?? internalPaginationModel;\n const sortModel = controlledSortModel ?? internalSortModel;\n const filterModel = controlledFilterModel ?? internalFilterModel;\n const selectionModelValue = controlledSelectionModel ?? internalSelectionModel;\n\n // Build columns with row actions\n const finalColumns = useMemo<GridColDef<R>[]>(() => {\n if (!rowActions || rowActions.length === 0) {\n return columns;\n }\n\n const actionsColumn: GridColDef<R> = {\n field: '__actions__',\n headerName: '',\n width: rowActionsWidth,\n sortable: false,\n filterable: false,\n disableColumnMenu: true,\n disableReorder: true,\n renderCell: (params: GridRenderCellParams<R>) => <RowActionsCell row={params.row} actions={rowActions} />,\n };\n\n return [...columns, actionsColumn];\n }, [columns, rowActions, rowActionsWidth]);\n\n // Handlers\n const handlePaginationChange = useCallback(\n (model: GridPaginationModel, details: GridCallbackDetails) => {\n if (!controlledPaginationModel) {\n setInternalPaginationModel(model);\n }\n onPaginationChange?.(model);\n },\n [controlledPaginationModel, onPaginationChange]\n );\n\n const handleSortChange = useCallback(\n (model: GridSortModel, details: GridCallbackDetails) => {\n if (!controlledSortModel) {\n setInternalSortModel(model);\n }\n onSortChange?.(model);\n },\n [controlledSortModel, onSortChange]\n );\n\n const handleFilterChange = useCallback(\n (model: GridFilterModel, details: GridCallbackDetails) => {\n if (!controlledFilterModel) {\n setInternalFilterModel(model);\n }\n onFilterChange?.(model);\n },\n [controlledFilterModel, onFilterChange]\n );\n\n const handleSelectionChange = useCallback(\n (model: GridRowSelectionModel, details: GridCallbackDetails) => {\n if (!controlledSelectionModel) {\n setInternalSelectionModel(model);\n }\n onSelectionChange?.(model);\n },\n [controlledSelectionModel, onSelectionChange]\n );\n\n // Context value\n const contextValue = useMemo<DataGridBlockContextValue>(\n () => ({\n loading,\n error,\n density,\n setDensity,\n rowCount: rows.length,\n selectedCount: selectionModelValue.ids.size,\n refresh: onRetry,\n }),\n [loading, error, density, rows.length, selectionModelValue, onRetry]\n );\n\n // Determine row count for pagination\n const rowCount = pagination?.mode === 'server' ? (pagination.rowCount ?? 0) : rows.length;\n\n // Custom toolbar slot\n const toolbarSlot = useMemo(() => {\n if (toolbar?.show === false) {\n return undefined;\n }\n\n return () => (\n <CustomToolbar\n quickFilter={toolbar?.quickFilter}\n exportConfig={toolbar?.export}\n showColumnSelector={toolbar?.columnVisibility?.enabled !== false}\n showDensitySelector={toolbar?.densitySelector !== false}\n startContent={toolbar?.startContent}\n endContent={toolbar?.endContent}\n actions={toolbar?.actions}\n onQuickFilterChange={setQuickFilterValue}\n />\n );\n }, [toolbar]);\n\n // No data overlay\n const noRowsOverlay = useMemo(() => {\n if (error) {\n return () => <ErrorState message={errorMessage} onRetry={onRetry} />;\n }\n return () => (\n <EmptyState\n icon={empty?.icon}\n title={empty?.title}\n description={empty?.description}\n action={empty?.action}\n component={empty?.component}\n />\n );\n }, [error, errorMessage, onRetry, empty]);\n\n return (\n <DataGridBlockContext.Provider value={contextValue}>\n <Paper\n data-testid=\"prism-data-grid-block\"\n variant=\"outlined\"\n sx={[\n {\n width: '100%',\n overflow: 'hidden',\n },\n ...(Array.isArray(sx) ? sx : [sx]),\n ]}\n >\n <Box sx={{ width: '100%', height: autoHeight ? 'auto' : height }}>\n <DataGrid\n rows={rows}\n columns={finalColumns}\n loading={loading}\n density={density}\n autoHeight={autoHeight}\n rowHeight={rowHeight}\n getRowId={getRowId}\n onRowClick={onRowClick}\n onRowDoubleClick={onRowDoubleClick}\n // Pagination\n paginationMode={pagination?.mode ?? 'client'}\n paginationModel={paginationModel}\n onPaginationModelChange={handlePaginationChange}\n pageSizeOptions={pagination?.pageSizeOptions ?? [10, 25, 50, 100]}\n rowCount={rowCount}\n // Sorting\n sortingMode={pagination?.mode === 'server' ? 'server' : 'client'}\n sortModel={sortModel}\n onSortModelChange={handleSortChange}\n // Filtering\n filterMode={pagination?.mode === 'server' ? 'server' : 'client'}\n filterModel={filterModel}\n onFilterModelChange={handleFilterChange}\n // Selection\n checkboxSelection={selection?.checkboxSelection ?? false}\n rowSelectionModel={selectionModelValue}\n onRowSelectionModelChange={handleSelectionChange}\n disableRowSelectionOnClick={selection?.disableSelectionOnClick ?? disableRowSelectionOnClick}\n disableMultipleRowSelection={selection?.mode === 'single'}\n keepNonExistentRowsSelected={selection?.keepNonExistentRowsSelected}\n // Column visibility\n columnVisibilityModel={columnVisibilityModel}\n onColumnVisibilityModelChange={onColumnVisibilityChange}\n // Features\n disableColumnMenu={disableColumnMenu}\n disableColumnFilter={disableColumnFilter}\n disableColumnSelector={disableColumnSelector}\n disableVirtualization={disableVirtualization}\n hideFooter={hideFooter || pagination?.hide}\n // Slots\n slots={{\n toolbar: toolbarSlot,\n noRowsOverlay,\n loadingOverlay: () => <LinearProgress sx={{ position: 'absolute', top: 0, left: 0, right: 0 }} />,\n ...slots,\n }}\n slotProps={slotProps}\n sx={{\n border: 0,\n '& .MuiDataGrid-columnHeaders': {\n bgcolor: 'action.hover',\n },\n '& .MuiDataGrid-cell:focus': {\n outline: 'none',\n },\n '& .MuiDataGrid-row:hover': {\n bgcolor: 'action.hover',\n },\n }}\n />\n </Box>\n </Paper>\n </DataGridBlockContext.Provider>\n );\n}\n\n// =============================================================================\n// USE DATA GRID BLOCK HOOK\n// =============================================================================\n\n/**\n * Hook for managing DataGridBlock with server-side data fetching.\n *\n * @example\n * ```tsx\n * const { rows, loading, error, total, paginationModel, onPaginationChange, refresh } =\n * useDataGridBlock({\n * fetcher: async ({ page, pageSize, sortModel, filterModel }) => {\n * const response = await api.getUsers({ page, pageSize, sort: sortModel[0] });\n * return { rows: response.data, total: response.total };\n * },\n * });\n *\n * return (\n * <DataGridBlock\n * columns={columns}\n * rows={rows}\n * loading={loading}\n * error={!!error}\n * pagination={{ mode: 'server', rowCount: total }}\n * paginationModel={paginationModel}\n * onPaginationChange={onPaginationChange}\n * />\n * );\n * ```\n */\nexport function useDataGridBlock<R extends Record<string, unknown> = Record<string, unknown>>(\n options: UseDataGridBlockOptions<R>\n): UseDataGridBlockReturn<R> {\n const {\n fetcher,\n initialPageSize = 25,\n initialSortModel = [],\n initialFilterModel = { items: [] },\n autoFetch = true,\n keepPreviousData = true,\n } = options;\n\n const [rows, setRows] = useState<R[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [total, setTotal] = useState(0);\n\n const [paginationModel, setPaginationModel] = useState<GridPaginationModel>({\n page: 0,\n pageSize: initialPageSize,\n });\n const [sortModel, setSortModel] = useState<GridSortModel>(initialSortModel);\n const [filterModel, setFilterModel] = useState<GridFilterModel>(initialFilterModel);\n\n const isMountedRef = useRef(true);\n const abortControllerRef = useRef<AbortController | null>(null);\n\n const fetchData = useCallback(\n async (params: DataGridFetchParams) => {\n // Cancel previous request\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n abortControllerRef.current = new AbortController();\n\n setLoading(true);\n setError(null);\n\n try {\n const result = await fetcher(params);\n if (isMountedRef.current) {\n setRows(result.rows);\n setTotal(result.total);\n }\n } catch (err) {\n if (isMountedRef.current && err instanceof Error && err.name !== 'AbortError') {\n setError(err);\n if (!keepPreviousData) {\n setRows([]);\n }\n }\n } finally {\n if (isMountedRef.current) {\n setLoading(false);\n }\n }\n },\n [fetcher, keepPreviousData]\n );\n\n const refresh = useCallback(() => {\n fetchData({\n page: paginationModel.page,\n pageSize: paginationModel.pageSize,\n sortModel,\n filterModel,\n });\n }, [fetchData, paginationModel, sortModel, filterModel]);\n\n const reset = useCallback(() => {\n setPaginationModel({ page: 0, pageSize: initialPageSize });\n setSortModel(initialSortModel);\n setFilterModel(initialFilterModel);\n }, [initialPageSize, initialSortModel, initialFilterModel]);\n\n // Fetch on params change\n useEffect(() => {\n if (autoFetch) {\n fetchData({\n page: paginationModel.page,\n pageSize: paginationModel.pageSize,\n sortModel,\n filterModel,\n });\n }\n }, [fetchData, paginationModel, sortModel, filterModel, autoFetch]);\n\n // Cleanup on unmount\n useEffect(\n () => () => {\n isMountedRef.current = false;\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n },\n []\n );\n\n const handlePaginationChange = useCallback((model: GridPaginationModel, _details: GridCallbackDetails) => {\n setPaginationModel(model);\n }, []);\n\n const handleSortChange = useCallback((model: GridSortModel, _details: GridCallbackDetails) => {\n setSortModel(model);\n // Reset to first page on sort change\n setPaginationModel((prev) => ({ ...prev, page: 0 }));\n }, []);\n\n const handleFilterChange = useCallback((model: GridFilterModel, _details: GridCallbackDetails) => {\n setFilterModel(model);\n // Reset to first page on filter change\n setPaginationModel((prev) => ({ ...prev, page: 0 }));\n }, []);\n\n return {\n rows,\n loading,\n error,\n total,\n paginationModel,\n sortModel,\n filterModel,\n onPaginationChange: handlePaginationChange,\n onSortChange: handleSortChange,\n onFilterChange: handleFilterChange,\n refresh,\n reset,\n };\n}\n"]}