@omnitron-dev/prism 0.2.0 → 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 +139 -42
  32. package/dist/blocks/index.js.map +1 -1
  33. package/dist/{chunk-VAAIHNWQ.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-SNKGGHBT.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-XXP3ZGU6.js → chunk-BZOL7GMU.js} +21 -13
  44. package/dist/chunk-BZOL7GMU.js.map +1 -0
  45. package/dist/{chunk-2FYNRDXR.js → chunk-DRFNMZLG.js} +2 -2
  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-KTCWPGON.js → chunk-OBJ244BO.js} +558 -75
  50. package/dist/chunk-OBJ244BO.js.map +1 -0
  51. package/dist/{chunk-IZOIO7PA.js → chunk-S6SEGBX6.js} +31 -22
  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-YJMAQL3S.js → chunk-WFD54GQQ.js} +122 -69
  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-A2Z7NVGL.js → chunk-YQW43BDH.js} +1274 -792
  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-MEFT6XPH.js → chunk-ZTATTUH7.js} +170 -85
  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 +31 -37
  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 +41 -104
  232. package/dist/components/editor/index.d.ts.map +1 -0
  233. package/dist/components/editor/index.js +1 -2
  234. package/dist/components/editor/presets.d.ts +3 -0
  235. package/dist/components/editor/presets.d.ts.map +1 -0
  236. package/dist/components/editor/styles.d.ts +2 -0
  237. package/dist/components/editor/styles.d.ts.map +1 -0
  238. package/dist/components/editor/toolbar/bubble-toolbar.d.ts +9 -0
  239. package/dist/components/editor/toolbar/bubble-toolbar.d.ts.map +1 -0
  240. package/dist/components/editor/toolbar/code-highlight-block.d.ts +3 -0
  241. package/dist/components/editor/toolbar/code-highlight-block.d.ts.map +1 -0
  242. package/dist/components/editor/toolbar/heading-block.d.ts +11 -0
  243. package/dist/components/editor/toolbar/heading-block.d.ts.map +1 -0
  244. package/dist/components/editor/toolbar/image-block.d.ts +11 -0
  245. package/dist/components/editor/toolbar/image-block.d.ts.map +1 -0
  246. package/dist/components/editor/toolbar/link-block.d.ts +13 -0
  247. package/dist/components/editor/toolbar/link-block.d.ts.map +1 -0
  248. package/dist/components/editor/toolbar/toolbar-item.d.ts +3 -0
  249. package/dist/components/editor/toolbar/toolbar-item.d.ts.map +1 -0
  250. package/dist/components/editor/toolbar/toolbar.d.ts +3 -0
  251. package/dist/components/editor/toolbar/toolbar.d.ts.map +1 -0
  252. package/dist/components/editor/toolbar/use-toolbar-state.d.ts +24 -0
  253. package/dist/components/editor/toolbar/use-toolbar-state.d.ts.map +1 -0
  254. package/dist/components/editor/types.d.ts +130 -0
  255. package/dist/components/editor/types.d.ts.map +1 -0
  256. package/dist/components/emoji-picker/emoji-picker.d.ts +24 -0
  257. package/dist/components/emoji-picker/emoji-picker.d.ts.map +1 -0
  258. package/dist/components/emoji-picker/emoji-search.d.ts +22 -0
  259. package/dist/components/emoji-picker/emoji-search.d.ts.map +1 -0
  260. package/dist/components/emoji-picker/emoji.d.ts +19 -0
  261. package/dist/components/emoji-picker/emoji.d.ts.map +1 -0
  262. package/dist/components/emoji-picker/index.d.ts +14 -0
  263. package/dist/components/emoji-picker/index.d.ts.map +1 -0
  264. package/dist/components/emoji-picker/index.js +3 -0
  265. package/dist/components/emoji-picker/index.js.map +1 -0
  266. package/dist/components/emoji-picker/twemoji-url.d.ts +26 -0
  267. package/dist/components/emoji-picker/twemoji-url.d.ts.map +1 -0
  268. package/dist/components/emoji-picker/types.d.ts +96 -0
  269. package/dist/components/emoji-picker/types.d.ts.map +1 -0
  270. package/dist/components/emoji-picker/use-emoji-data.d.ts +26 -0
  271. package/dist/components/emoji-picker/use-emoji-data.d.ts.map +1 -0
  272. package/dist/components/emoji-picker/use-recent-emojis.d.ts +16 -0
  273. package/dist/components/emoji-picker/use-recent-emojis.d.ts.map +1 -0
  274. package/dist/components/empty-content/empty-content.d.ts +92 -0
  275. package/dist/components/empty-content/empty-content.d.ts.map +1 -0
  276. package/dist/components/empty-content/index.d.ts +7 -0
  277. package/dist/components/empty-content/index.d.ts.map +1 -0
  278. package/dist/components/error-boundary/error-boundary.d.ts +162 -0
  279. package/dist/components/error-boundary/error-boundary.d.ts.map +1 -0
  280. package/dist/components/error-boundary/index.d.ts +7 -0
  281. package/dist/components/error-boundary/index.d.ts.map +1 -0
  282. package/dist/components/field/field-autocomplete.d.ts +74 -0
  283. package/dist/components/field/field-autocomplete.d.ts.map +1 -0
  284. package/dist/components/field/field-checkbox.d.ts +42 -0
  285. package/dist/components/field/field-checkbox.d.ts.map +1 -0
  286. package/dist/components/field/field-code.d.ts +80 -0
  287. package/dist/components/field/field-code.d.ts.map +1 -0
  288. package/dist/components/field/field-country-select.d.ts +84 -0
  289. package/dist/components/field/field-country-select.d.ts.map +1 -0
  290. package/dist/components/field/field-date-picker.d.ts +58 -0
  291. package/dist/components/field/field-date-picker.d.ts.map +1 -0
  292. package/dist/components/field/field-datetime-picker.d.ts +96 -0
  293. package/dist/components/field/field-datetime-picker.d.ts.map +1 -0
  294. package/dist/components/field/field-editor.d.ts +218 -0
  295. package/dist/components/field/field-editor.d.ts.map +1 -0
  296. package/dist/components/field/field-multi-checkbox.d.ts +91 -0
  297. package/dist/components/field/field-multi-checkbox.d.ts.map +1 -0
  298. package/dist/components/field/field-multi-select.d.ts +85 -0
  299. package/dist/components/field/field-multi-select.d.ts.map +1 -0
  300. package/dist/components/field/field-multi-switch.d.ts +93 -0
  301. package/dist/components/field/field-multi-switch.d.ts.map +1 -0
  302. package/dist/components/field/field-number.d.ts +50 -0
  303. package/dist/components/field/field-number.d.ts.map +1 -0
  304. package/dist/components/field/field-phone.d.ts +82 -0
  305. package/dist/components/field/field-phone.d.ts.map +1 -0
  306. package/dist/components/field/field-radio.d.ts +64 -0
  307. package/dist/components/field/field-radio.d.ts.map +1 -0
  308. package/dist/components/field/field-rating.d.ts +43 -0
  309. package/dist/components/field/field-rating.d.ts.map +1 -0
  310. package/dist/components/field/field-select.d.ts +50 -0
  311. package/dist/components/field/field-select.d.ts.map +1 -0
  312. package/dist/components/field/field-slider.d.ts +56 -0
  313. package/dist/components/field/field-slider.d.ts.map +1 -0
  314. package/dist/components/field/field-switch.d.ts +44 -0
  315. package/dist/components/field/field-switch.d.ts.map +1 -0
  316. package/dist/components/field/field-text.d.ts +38 -0
  317. package/dist/components/field/field-text.d.ts.map +1 -0
  318. package/dist/components/field/field-time-picker.d.ts +79 -0
  319. package/dist/components/field/field-time-picker.d.ts.map +1 -0
  320. package/dist/components/field/field-upload.d.ts +120 -0
  321. package/dist/components/field/field-upload.d.ts.map +1 -0
  322. package/dist/components/field/index.d.ts +149 -0
  323. package/dist/components/field/index.d.ts.map +1 -0
  324. package/dist/components/image/image.d.ts +79 -0
  325. package/dist/components/image/image.d.ts.map +1 -0
  326. package/dist/components/image/index.d.ts +7 -0
  327. package/dist/components/image/index.d.ts.map +1 -0
  328. package/dist/components/index.d.ts +60 -7072
  329. package/dist/components/index.d.ts.map +1 -0
  330. package/dist/components/index.js +11 -11
  331. package/dist/components/label/index.d.ts +7 -0
  332. package/dist/components/label/index.d.ts.map +1 -0
  333. package/dist/components/label/label.d.ts +71 -0
  334. package/dist/components/label/label.d.ts.map +1 -0
  335. package/dist/components/lightbox/classes.d.ts +34 -0
  336. package/dist/components/lightbox/classes.d.ts.map +1 -0
  337. package/dist/components/lightbox/index.d.ts +11 -0
  338. package/dist/components/lightbox/index.d.ts.map +1 -0
  339. package/dist/components/lightbox/lightbox.d.ts +42 -0
  340. package/dist/components/lightbox/lightbox.d.ts.map +1 -0
  341. package/dist/components/lightbox/types.d.ts +233 -0
  342. package/dist/components/lightbox/types.d.ts.map +1 -0
  343. package/dist/components/lightbox/use-lightbox.d.ts +42 -0
  344. package/dist/components/lightbox/use-lightbox.d.ts.map +1 -0
  345. package/dist/components/loading-screen/index.d.ts +8 -0
  346. package/dist/components/loading-screen/index.d.ts.map +1 -0
  347. package/dist/components/loading-screen/loading-screen.d.ts +37 -0
  348. package/dist/components/loading-screen/loading-screen.d.ts.map +1 -0
  349. package/dist/components/loading-screen/splash-screen.d.ts +80 -0
  350. package/dist/components/loading-screen/splash-screen.d.ts.map +1 -0
  351. package/dist/components/map/Map.d.ts +63 -0
  352. package/dist/components/map/Map.d.ts.map +1 -0
  353. package/dist/components/map/MapCoverageLayer.d.ts +25 -0
  354. package/dist/components/map/MapCoverageLayer.d.ts.map +1 -0
  355. package/dist/components/map/MapMarker.d.ts +17 -0
  356. package/dist/components/map/MapMarker.d.ts.map +1 -0
  357. package/dist/components/map/MapPointPicker.d.ts +26 -0
  358. package/dist/components/map/MapPointPicker.d.ts.map +1 -0
  359. package/dist/components/map/index.d.ts +14 -0
  360. package/dist/components/map/index.d.ts.map +1 -0
  361. package/dist/components/mega-menu/index.d.ts +12 -0
  362. package/dist/components/mega-menu/index.d.ts.map +1 -0
  363. package/dist/components/mega-menu/mega-menu-horizontal.d.ts +41 -0
  364. package/dist/components/mega-menu/mega-menu-horizontal.d.ts.map +1 -0
  365. package/dist/components/mega-menu/mega-menu-mobile.d.ts +28 -0
  366. package/dist/components/mega-menu/mega-menu-mobile.d.ts.map +1 -0
  367. package/dist/components/mega-menu/mega-menu-vertical.d.ts +28 -0
  368. package/dist/components/mega-menu/mega-menu-vertical.d.ts.map +1 -0
  369. package/dist/components/mega-menu/styles.d.ts +18 -0
  370. package/dist/components/mega-menu/styles.d.ts.map +1 -0
  371. package/dist/components/mega-menu/types.d.ts +200 -0
  372. package/dist/components/mega-menu/types.d.ts.map +1 -0
  373. package/dist/components/menu/index.d.ts +7 -0
  374. package/dist/components/menu/index.d.ts.map +1 -0
  375. package/dist/components/menu/menu.d.ts +144 -0
  376. package/dist/components/menu/menu.d.ts.map +1 -0
  377. package/dist/components/nav-card/index.d.ts +8 -0
  378. package/dist/components/nav-card/index.d.ts.map +1 -0
  379. package/dist/components/nav-card/nav-card-grid.d.ts +57 -0
  380. package/dist/components/nav-card/nav-card-grid.d.ts.map +1 -0
  381. package/dist/components/nav-card/nav-card.d.ts +69 -0
  382. package/dist/components/nav-card/nav-card.d.ts.map +1 -0
  383. package/dist/components/nav-section/components.d.ts +143 -0
  384. package/dist/components/nav-section/components.d.ts.map +1 -0
  385. package/dist/components/nav-section/index.d.ts +15 -0
  386. package/dist/components/nav-section/index.d.ts.map +1 -0
  387. package/dist/components/nav-section/nav-context.d.ts +80 -0
  388. package/dist/components/nav-section/nav-context.d.ts.map +1 -0
  389. package/dist/components/nav-section/nav-item.d.ts +20 -0
  390. package/dist/components/nav-section/nav-item.d.ts.map +1 -0
  391. package/dist/components/nav-section/nav-list.d.ts +25 -0
  392. package/dist/components/nav-section/nav-list.d.ts.map +1 -0
  393. package/dist/components/nav-section/nav-section-horizontal.d.ts +29 -0
  394. package/dist/components/nav-section/nav-section-horizontal.d.ts.map +1 -0
  395. package/dist/components/nav-section/nav-section-mini.d.ts +30 -0
  396. package/dist/components/nav-section/nav-section-mini.d.ts.map +1 -0
  397. package/dist/components/nav-section/nav-section-vertical.d.ts +37 -0
  398. package/dist/components/nav-section/nav-section-vertical.d.ts.map +1 -0
  399. package/dist/components/nav-section/styles.d.ts +35 -0
  400. package/dist/components/nav-section/styles.d.ts.map +1 -0
  401. package/dist/components/nav-section/types.d.ts +178 -0
  402. package/dist/components/nav-section/types.d.ts.map +1 -0
  403. package/dist/components/navigation-progress/index.d.ts +7 -0
  404. package/dist/components/navigation-progress/index.d.ts.map +1 -0
  405. package/dist/components/navigation-progress/navigation-progress.d.ts +36 -0
  406. package/dist/components/navigation-progress/navigation-progress.d.ts.map +1 -0
  407. package/dist/components/page-content/index.d.ts +7 -0
  408. package/dist/components/page-content/index.d.ts.map +1 -0
  409. package/dist/components/page-content/page-content.d.ts +55 -0
  410. package/dist/components/page-content/page-content.d.ts.map +1 -0
  411. package/dist/components/popover/index.d.ts +7 -0
  412. package/dist/components/popover/index.d.ts.map +1 -0
  413. package/dist/{popover-Dmw7SJLR.d.ts → components/popover/popover.d.ts} +11 -14
  414. package/dist/components/popover/popover.d.ts.map +1 -0
  415. package/dist/components/progress/countdown-ring.d.ts +60 -0
  416. package/dist/components/progress/countdown-ring.d.ts.map +1 -0
  417. package/dist/components/progress/index.d.ts +8 -0
  418. package/dist/components/progress/index.d.ts.map +1 -0
  419. package/dist/components/progress/progress.d.ts +106 -0
  420. package/dist/components/progress/progress.d.ts.map +1 -0
  421. package/dist/components/rail/index.d.ts +7 -0
  422. package/dist/components/rail/index.d.ts.map +1 -0
  423. package/dist/components/rail/rail.d.ts +39 -0
  424. package/dist/components/rail/rail.d.ts.map +1 -0
  425. package/dist/components/scroll-spy/index.d.ts +3 -0
  426. package/dist/components/scroll-spy/index.d.ts.map +1 -0
  427. package/dist/components/scroll-spy/scroll-spy-provider.d.ts +26 -0
  428. package/dist/components/scroll-spy/scroll-spy-provider.d.ts.map +1 -0
  429. package/dist/components/scroll-spy/scroll-spy-section.d.ts +10 -0
  430. package/dist/components/scroll-spy/scroll-spy-section.d.ts.map +1 -0
  431. package/dist/components/scroll-to-top/index.d.ts +7 -0
  432. package/dist/components/scroll-to-top/index.d.ts.map +1 -0
  433. package/dist/components/scroll-to-top/scroll-to-top.d.ts +25 -0
  434. package/dist/components/scroll-to-top/scroll-to-top.d.ts.map +1 -0
  435. package/dist/components/scrollbar/index.d.ts +7 -0
  436. package/dist/components/scrollbar/index.d.ts.map +1 -0
  437. package/dist/components/scrollbar/scrollbar.d.ts +59 -0
  438. package/dist/components/scrollbar/scrollbar.d.ts.map +1 -0
  439. package/dist/components/search-input/index.d.ts +2 -0
  440. package/dist/components/search-input/index.d.ts.map +1 -0
  441. package/dist/components/search-input/search-input.d.ts +46 -0
  442. package/dist/components/search-input/search-input.d.ts.map +1 -0
  443. package/dist/components/settings/index.d.ts +10 -0
  444. package/dist/components/settings/index.d.ts.map +1 -0
  445. package/dist/components/settings/settings-drawer.d.ts +39 -0
  446. package/dist/components/settings/settings-drawer.d.ts.map +1 -0
  447. package/dist/components/settings/settings-provider.d.ts +106 -0
  448. package/dist/components/settings/settings-provider.d.ts.map +1 -0
  449. package/dist/components/skeleton/index.d.ts +7 -0
  450. package/dist/components/skeleton/index.d.ts.map +1 -0
  451. package/dist/components/skeleton/skeleton.d.ts +77 -0
  452. package/dist/components/skeleton/skeleton.d.ts.map +1 -0
  453. package/dist/components/snackbar/index.d.ts +7 -0
  454. package/dist/components/snackbar/index.d.ts.map +1 -0
  455. package/dist/components/snackbar/snackbar.d.ts +120 -0
  456. package/dist/components/snackbar/snackbar.d.ts.map +1 -0
  457. package/dist/components/sponsored-slot/index.d.ts +3 -0
  458. package/dist/components/sponsored-slot/index.d.ts.map +1 -0
  459. package/dist/components/sponsored-slot/sponsored-slot.d.ts +16 -0
  460. package/dist/components/sponsored-slot/sponsored-slot.d.ts.map +1 -0
  461. package/dist/components/sponsored-slot/types.d.ts +45 -0
  462. package/dist/components/sponsored-slot/types.d.ts.map +1 -0
  463. package/dist/components/stepper/index.d.ts +7 -0
  464. package/dist/components/stepper/index.d.ts.map +1 -0
  465. package/dist/components/stepper/stepper.d.ts +145 -0
  466. package/dist/components/stepper/stepper.d.ts.map +1 -0
  467. package/dist/components/svg-color/index.d.ts +7 -0
  468. package/dist/components/svg-color/index.d.ts.map +1 -0
  469. package/dist/components/svg-color/svg-color.d.ts +80 -0
  470. package/dist/components/svg-color/svg-color.d.ts.map +1 -0
  471. package/dist/components/table/index.d.ts +7 -0
  472. package/dist/components/table/index.d.ts.map +1 -0
  473. package/dist/components/table/table.d.ts +184 -0
  474. package/dist/components/table/table.d.ts.map +1 -0
  475. package/dist/components/tabs/index.d.ts +7 -0
  476. package/dist/components/tabs/index.d.ts.map +1 -0
  477. package/dist/components/tabs/tabs.d.ts +146 -0
  478. package/dist/components/tabs/tabs.d.ts.map +1 -0
  479. package/dist/components/tag-cloud/index.d.ts +7 -0
  480. package/dist/components/tag-cloud/index.d.ts.map +1 -0
  481. package/dist/components/tag-cloud/tag-cloud.d.ts +58 -0
  482. package/dist/components/tag-cloud/tag-cloud.d.ts.map +1 -0
  483. package/dist/components/tiptap-renderer/index.d.ts +2 -0
  484. package/dist/components/tiptap-renderer/index.d.ts.map +1 -0
  485. package/dist/components/tiptap-renderer/tiptap-renderer.d.ts +45 -0
  486. package/dist/components/tiptap-renderer/tiptap-renderer.d.ts.map +1 -0
  487. package/dist/components/tooltip/index.d.ts +7 -0
  488. package/dist/components/tooltip/index.d.ts.map +1 -0
  489. package/dist/components/tooltip/tooltip.d.ts +38 -0
  490. package/dist/components/tooltip/tooltip.d.ts.map +1 -0
  491. package/dist/components/virtual-list/index.d.ts +7 -0
  492. package/dist/components/virtual-list/index.d.ts.map +1 -0
  493. package/dist/components/virtual-list/virtual-list.d.ts +64 -0
  494. package/dist/components/virtual-list/virtual-list.d.ts.map +1 -0
  495. package/dist/core/accessibility/index.d.ts +96 -0
  496. package/dist/core/accessibility/index.d.ts.map +1 -0
  497. package/dist/core/accessibility/skip-link.d.ts +31 -0
  498. package/dist/core/accessibility/skip-link.d.ts.map +1 -0
  499. package/dist/core/context.d.ts +99 -0
  500. package/dist/core/context.d.ts.map +1 -0
  501. package/dist/core/hooks/use-boolean.d.ts +54 -0
  502. package/dist/core/hooks/use-boolean.d.ts.map +1 -0
  503. package/dist/core/hooks/use-breakpoints.d.ts +87 -0
  504. package/dist/core/hooks/use-breakpoints.d.ts.map +1 -0
  505. package/dist/core/hooks/use-click-outside.d.ts +26 -0
  506. package/dist/core/hooks/use-click-outside.d.ts.map +1 -0
  507. package/dist/core/hooks/use-copy-to-clipboard.d.ts +66 -0
  508. package/dist/core/hooks/use-copy-to-clipboard.d.ts.map +1 -0
  509. package/dist/core/hooks/use-countdown.d.ts +105 -0
  510. package/dist/core/hooks/use-countdown.d.ts.map +1 -0
  511. package/dist/core/hooks/use-debounce.d.ts +64 -0
  512. package/dist/core/hooks/use-debounce.d.ts.map +1 -0
  513. package/dist/core/hooks/use-event-listener.d.ts +37 -0
  514. package/dist/core/hooks/use-event-listener.d.ts.map +1 -0
  515. package/dist/core/hooks/use-interval.d.ts +30 -0
  516. package/dist/core/hooks/use-interval.d.ts.map +1 -0
  517. package/dist/core/hooks/use-is-client.d.ts +24 -0
  518. package/dist/core/hooks/use-is-client.d.ts.map +1 -0
  519. package/dist/core/hooks/use-local-storage.d.ts +61 -0
  520. package/dist/core/hooks/use-local-storage.d.ts.map +1 -0
  521. package/dist/core/hooks/use-media-query.d.ts +107 -0
  522. package/dist/core/hooks/use-media-query.d.ts.map +1 -0
  523. package/dist/core/hooks/use-mounted.d.ts +33 -0
  524. package/dist/core/hooks/use-mounted.d.ts.map +1 -0
  525. package/dist/core/hooks/use-multi-select.d.ts +113 -0
  526. package/dist/core/hooks/use-multi-select.d.ts.map +1 -0
  527. package/dist/core/hooks/use-previous.d.ts +23 -0
  528. package/dist/core/hooks/use-previous.d.ts.map +1 -0
  529. package/dist/core/hooks/use-set-state.d.ts +56 -0
  530. package/dist/core/hooks/use-set-state.d.ts.map +1 -0
  531. package/dist/core/hooks/use-tabs.d.ts +74 -0
  532. package/dist/core/hooks/use-tabs.d.ts.map +1 -0
  533. package/dist/core/hooks/use-timeout.d.ts +37 -0
  534. package/dist/core/hooks/use-timeout.d.ts.map +1 -0
  535. package/dist/core/index.d.ts +36 -468
  536. package/dist/core/index.d.ts.map +1 -0
  537. package/dist/core/index.js +6 -7
  538. package/dist/core/provider-stack.d.ts +181 -0
  539. package/dist/core/provider-stack.d.ts.map +1 -0
  540. package/dist/core/provider.d.ts +67 -0
  541. package/dist/core/provider.d.ts.map +1 -0
  542. package/dist/forms/index.d.ts +6 -557
  543. package/dist/forms/index.d.ts.map +1 -0
  544. package/dist/forms/index.js +0 -1
  545. package/dist/forms/index.js.map +1 -1
  546. package/dist/forms/schema-provider.d.ts +282 -0
  547. package/dist/forms/schema-provider.d.ts.map +1 -0
  548. package/dist/forms/schema-utils.d.ts +286 -0
  549. package/dist/forms/schema-utils.d.ts.map +1 -0
  550. package/dist/hooks/index.d.ts +38 -8
  551. package/dist/hooks/index.d.ts.map +1 -0
  552. package/dist/hooks/index.js +8 -9
  553. package/dist/hooks/use-array.d.ts +126 -0
  554. package/dist/hooks/use-array.d.ts.map +1 -0
  555. package/dist/hooks/use-async.d.ts +88 -0
  556. package/dist/hooks/use-async.d.ts.map +1 -0
  557. package/dist/hooks/use-back-to-top.d.ts +57 -0
  558. package/dist/hooks/use-back-to-top.d.ts.map +1 -0
  559. package/dist/hooks/use-client-rect.d.ts +67 -0
  560. package/dist/hooks/use-client-rect.d.ts.map +1 -0
  561. package/dist/hooks/use-config-from-query.d.ts +98 -0
  562. package/dist/hooks/use-config-from-query.d.ts.map +1 -0
  563. package/dist/hooks/use-cookies.d.ts +62 -0
  564. package/dist/hooks/use-cookies.d.ts.map +1 -0
  565. package/dist/hooks/use-countdown-date.d.ts +47 -0
  566. package/dist/hooks/use-countdown-date.d.ts.map +1 -0
  567. package/dist/hooks/use-countdown-seconds.d.ts +83 -0
  568. package/dist/hooks/use-countdown-seconds.d.ts.map +1 -0
  569. package/dist/hooks/use-double-click.d.ts +67 -0
  570. package/dist/hooks/use-double-click.d.ts.map +1 -0
  571. package/dist/hooks/use-focus-trap.d.ts +66 -0
  572. package/dist/hooks/use-focus-trap.d.ts.map +1 -0
  573. package/dist/hooks/use-image-dimensions.d.ts +124 -0
  574. package/dist/hooks/use-image-dimensions.d.ts.map +1 -0
  575. package/dist/hooks/use-infinite-scroll.d.ts +204 -0
  576. package/dist/hooks/use-infinite-scroll.d.ts.map +1 -0
  577. package/dist/hooks/use-intersection-observer.d.ts +93 -0
  578. package/dist/hooks/use-intersection-observer.d.ts.map +1 -0
  579. package/dist/hooks/use-isomorphic-layout-effect.d.ts +34 -0
  580. package/dist/hooks/use-isomorphic-layout-effect.d.ts.map +1 -0
  581. package/dist/hooks/use-keyboard-shortcut.d.ts +112 -0
  582. package/dist/hooks/use-keyboard-shortcut.d.ts.map +1 -0
  583. package/dist/hooks/use-lazy-query.d.ts +132 -0
  584. package/dist/hooks/use-lazy-query.d.ts.map +1 -0
  585. package/dist/hooks/use-mutation.d.ts +141 -0
  586. package/dist/hooks/use-mutation.d.ts.map +1 -0
  587. package/dist/hooks/use-online-status.d.ts +56 -0
  588. package/dist/hooks/use-online-status.d.ts.map +1 -0
  589. package/dist/hooks/use-password-visibility.d.ts +83 -0
  590. package/dist/hooks/use-password-visibility.d.ts.map +1 -0
  591. package/dist/hooks/use-popover-hover.d.ts +78 -0
  592. package/dist/hooks/use-popover-hover.d.ts.map +1 -0
  593. package/dist/hooks/use-scroll-offset-top.d.ts +69 -0
  594. package/dist/hooks/use-scroll-offset-top.d.ts.map +1 -0
  595. package/dist/hooks/use-scroll-position.d.ts +96 -0
  596. package/dist/hooks/use-scroll-position.d.ts.map +1 -0
  597. package/dist/hooks/use-session-storage.d.ts +66 -0
  598. package/dist/hooks/use-session-storage.d.ts.map +1 -0
  599. package/dist/hooks/use-throttle.d.ts +67 -0
  600. package/dist/hooks/use-throttle.d.ts.map +1 -0
  601. package/dist/hooks/use-update-effect.d.ts +53 -0
  602. package/dist/hooks/use-update-effect.d.ts.map +1 -0
  603. package/dist/hooks/use-window-size.d.ts +132 -0
  604. package/dist/hooks/use-window-size.d.ts.map +1 -0
  605. package/dist/http/client.d.ts +74 -0
  606. package/dist/http/client.d.ts.map +1 -0
  607. package/dist/http/index.d.ts +6 -229
  608. package/dist/http/index.d.ts.map +1 -0
  609. package/dist/http/index.js +0 -2
  610. package/dist/http/index.js.map +1 -1
  611. package/dist/http/types.d.ts +158 -0
  612. package/dist/http/types.d.ts.map +1 -0
  613. package/dist/index.d.ts +19 -2758
  614. package/dist/index.d.ts.map +1 -0
  615. package/dist/index.js +35 -63
  616. package/dist/index.js.map +1 -1
  617. package/dist/layouts/auth/centered.d.ts +49 -0
  618. package/dist/layouts/auth/centered.d.ts.map +1 -0
  619. package/dist/layouts/auth/index.d.ts +12 -0
  620. package/dist/layouts/auth/index.d.ts.map +1 -0
  621. package/dist/layouts/auth/simple.d.ts +58 -0
  622. package/dist/layouts/auth/simple.d.ts.map +1 -0
  623. package/dist/layouts/auth/split.d.ts +81 -0
  624. package/dist/layouts/auth/split.d.ts.map +1 -0
  625. package/dist/layouts/core/context.d.ts +102 -0
  626. package/dist/layouts/core/context.d.ts.map +1 -0
  627. package/dist/layouts/core/css-vars.d.ts +43 -0
  628. package/dist/layouts/core/css-vars.d.ts.map +1 -0
  629. package/dist/layouts/core/header-section.d.ts +79 -0
  630. package/dist/layouts/core/header-section.d.ts.map +1 -0
  631. package/dist/layouts/core/index.d.ts +18 -0
  632. package/dist/layouts/core/index.d.ts.map +1 -0
  633. package/dist/layouts/core/layout-section.d.ts +64 -0
  634. package/dist/layouts/core/layout-section.d.ts.map +1 -0
  635. package/dist/layouts/core/user-menu.d.ts +88 -0
  636. package/dist/layouts/core/user-menu.d.ts.map +1 -0
  637. package/dist/layouts/dashboard/index.d.ts +10 -0
  638. package/dist/layouts/dashboard/index.d.ts.map +1 -0
  639. package/dist/layouts/dashboard/layout.d.ts +90 -0
  640. package/dist/layouts/dashboard/layout.d.ts.map +1 -0
  641. package/dist/layouts/dashboard/sidenav.d.ts +58 -0
  642. package/dist/layouts/dashboard/sidenav.d.ts.map +1 -0
  643. package/dist/layouts/dashboard/topnav.d.ts +41 -0
  644. package/dist/layouts/dashboard/topnav.d.ts.map +1 -0
  645. package/dist/layouts/index.d.ts +27 -850
  646. package/dist/layouts/index.d.ts.map +1 -0
  647. package/dist/layouts/index.js +3 -4
  648. package/dist/layouts/types.d.ts +317 -0
  649. package/dist/layouts/types.d.ts.map +1 -0
  650. package/dist/netron/context.d.ts +18 -0
  651. package/dist/netron/context.d.ts.map +1 -0
  652. package/dist/netron/hooks.d.ts +10 -0
  653. package/dist/netron/hooks.d.ts.map +1 -0
  654. package/dist/netron/index.d.ts +47 -4
  655. package/dist/netron/index.d.ts.map +1 -0
  656. package/dist/netron/index.js +1 -2
  657. package/dist/netron/types.d.ts +12 -0
  658. package/dist/netron/types.d.ts.map +1 -0
  659. package/dist/registry/index.d.ts +8 -341
  660. package/dist/registry/index.d.ts.map +1 -0
  661. package/dist/registry/index.js +1 -2
  662. package/dist/registry/installer.d.ts +137 -0
  663. package/dist/registry/installer.d.ts.map +1 -0
  664. package/dist/registry/manager.d.ts +196 -0
  665. package/dist/registry/manager.d.ts.map +1 -0
  666. package/dist/state/create-store.d.ts +164 -0
  667. package/dist/state/create-store.d.ts.map +1 -0
  668. package/dist/state/index.d.ts +12 -969
  669. package/dist/state/index.d.ts.map +1 -0
  670. package/dist/state/index.js +2 -3
  671. package/dist/state/settings-version.d.ts +255 -0
  672. package/dist/state/settings-version.d.ts.map +1 -0
  673. package/dist/state/stores/auth.d.ts +155 -0
  674. package/dist/state/stores/auth.d.ts.map +1 -0
  675. package/dist/state/stores/index.d.ts +10 -0
  676. package/dist/state/stores/index.d.ts.map +1 -0
  677. package/dist/state/stores/settings.d.ts +151 -0
  678. package/dist/state/stores/settings.d.ts.map +1 -0
  679. package/dist/state/stores/theme.d.ts +87 -0
  680. package/dist/state/stores/theme.d.ts.map +1 -0
  681. package/dist/state/stores/ui.d.ts +204 -0
  682. package/dist/state/stores/ui.d.ts.map +1 -0
  683. package/dist/theme/colors/base.d.ts +61 -0
  684. package/dist/theme/colors/base.d.ts.map +1 -0
  685. package/dist/theme/colors/index.d.ts +10 -0
  686. package/dist/theme/colors/index.d.ts.map +1 -0
  687. package/dist/theme/colors/luxury.d.ts +49 -0
  688. package/dist/theme/colors/luxury.d.ts.map +1 -0
  689. package/dist/theme/components/Autocomplete.d.ts +9 -0
  690. package/dist/theme/components/Autocomplete.d.ts.map +1 -0
  691. package/dist/theme/components/Button.d.ts +33 -0
  692. package/dist/theme/components/Button.d.ts.map +1 -0
  693. package/dist/theme/components/Card.d.ts +20 -0
  694. package/dist/theme/components/Card.d.ts.map +1 -0
  695. package/dist/theme/components/Chip.d.ts +29 -0
  696. package/dist/theme/components/Chip.d.ts.map +1 -0
  697. package/dist/theme/components/DataGrid.d.ts +15 -0
  698. package/dist/theme/components/DataGrid.d.ts.map +1 -0
  699. package/dist/theme/components/DatePicker.d.ts +19 -0
  700. package/dist/theme/components/DatePicker.d.ts.map +1 -0
  701. package/dist/theme/components/Dialog.d.ts +23 -0
  702. package/dist/theme/components/Dialog.d.ts.map +1 -0
  703. package/dist/theme/components/FormControls.d.ts +53 -0
  704. package/dist/theme/components/FormControls.d.ts.map +1 -0
  705. package/dist/theme/components/Tabs.d.ts +21 -0
  706. package/dist/theme/components/Tabs.d.ts.map +1 -0
  707. package/dist/theme/components/TextField.d.ts +87 -0
  708. package/dist/theme/components/TextField.d.ts.map +1 -0
  709. package/dist/theme/components/index.d.ts +27 -0
  710. package/dist/theme/components/index.d.ts.map +1 -0
  711. package/dist/theme/components/theme-utils.d.ts +42 -0
  712. package/dist/theme/components/theme-utils.d.ts.map +1 -0
  713. package/dist/theme/create-theme.d.ts +131 -0
  714. package/dist/theme/create-theme.d.ts.map +1 -0
  715. package/dist/theme/css-variables.d.ts +42 -0
  716. package/dist/theme/css-variables.d.ts.map +1 -0
  717. package/dist/theme/custom-shadows.d.ts +58 -0
  718. package/dist/theme/custom-shadows.d.ts.map +1 -0
  719. package/dist/theme/index.d.ts +23 -1045
  720. package/dist/theme/index.d.ts.map +1 -0
  721. package/dist/theme/index.js +2 -3
  722. package/dist/theme/mixins.d.ts +332 -0
  723. package/dist/theme/mixins.d.ts.map +1 -0
  724. package/dist/theme/opacity.d.ts +51 -0
  725. package/dist/theme/opacity.d.ts.map +1 -0
  726. package/dist/theme/palette/builder.d.ts +138 -0
  727. package/dist/theme/palette/builder.d.ts.map +1 -0
  728. package/dist/theme/palette/index.d.ts +7 -0
  729. package/dist/theme/palette/index.d.ts.map +1 -0
  730. package/dist/theme/palette.d.ts +43 -0
  731. package/dist/theme/palette.d.ts.map +1 -0
  732. package/dist/theme/presets/arctic.d.ts +13 -0
  733. package/dist/theme/presets/arctic.d.ts.map +1 -0
  734. package/dist/theme/presets/default.d.ts +13 -0
  735. package/dist/theme/presets/default.d.ts.map +1 -0
  736. package/dist/theme/presets/dracula.d.ts +27 -0
  737. package/dist/theme/presets/dracula.d.ts.map +1 -0
  738. package/dist/theme/presets/ember.d.ts +23 -0
  739. package/dist/theme/presets/ember.d.ts.map +1 -0
  740. package/dist/theme/presets/index.d.ts +39 -0
  741. package/dist/theme/presets/index.d.ts.map +1 -0
  742. package/dist/theme/presets/luxury.d.ts +13 -0
  743. package/dist/theme/presets/luxury.d.ts.map +1 -0
  744. package/dist/theme/presets/midnight.d.ts +23 -0
  745. package/dist/theme/presets/midnight.d.ts.map +1 -0
  746. package/dist/theme/presets/minimal.d.ts +23 -0
  747. package/dist/theme/presets/minimal.d.ts.map +1 -0
  748. package/dist/theme/presets/nature.d.ts +14 -0
  749. package/dist/theme/presets/nature.d.ts.map +1 -0
  750. package/dist/theme/presets/retro.d.ts +23 -0
  751. package/dist/theme/presets/retro.d.ts.map +1 -0
  752. package/dist/theme/shadows.d.ts +61 -0
  753. package/dist/theme/shadows.d.ts.map +1 -0
  754. package/dist/theme/typography.d.ts +24 -0
  755. package/dist/theme/typography.d.ts.map +1 -0
  756. package/dist/theme/utils/color.d.ts +295 -0
  757. package/dist/theme/utils/color.d.ts.map +1 -0
  758. package/dist/theme/utils/index.d.ts +7 -0
  759. package/dist/theme/utils/index.d.ts.map +1 -0
  760. package/dist/{registry-DQcIzW2s.d.ts → types/blocks.d.ts} +30 -191
  761. package/dist/types/blocks.d.ts.map +1 -0
  762. package/dist/{components-BCGZ-Rwt.d.ts → types/components.d.ts} +17 -20
  763. package/dist/types/components.d.ts.map +1 -0
  764. package/dist/{config-Pct0n_Kq.d.ts → types/config.d.ts} +14 -16
  765. package/dist/types/config.d.ts.map +1 -0
  766. package/dist/types/index.d.ts +13 -7
  767. package/dist/types/index.d.ts.map +1 -0
  768. package/dist/types/index.js +1 -2
  769. package/dist/types/registry.d.ts +158 -0
  770. package/dist/types/registry.d.ts.map +1 -0
  771. package/dist/{theme-B4Q3Bg5o.d.ts → types/theme.d.ts} +31 -34
  772. package/dist/types/theme.d.ts.map +1 -0
  773. package/dist/utils/async-lock.d.ts +169 -0
  774. package/dist/utils/async-lock.d.ts.map +1 -0
  775. package/dist/utils/cn.d.ts +80 -0
  776. package/dist/utils/cn.d.ts.map +1 -0
  777. package/dist/utils/cookies.d.ts +68 -0
  778. package/dist/utils/cookies.d.ts.map +1 -0
  779. package/dist/utils/create-classes.d.ts +90 -0
  780. package/dist/utils/create-classes.d.ts.map +1 -0
  781. package/dist/utils/errors.d.ts +201 -0
  782. package/dist/utils/errors.d.ts.map +1 -0
  783. package/dist/utils/fetch-interceptor.d.ts +230 -0
  784. package/dist/utils/fetch-interceptor.d.ts.map +1 -0
  785. package/dist/utils/font.d.ts +65 -0
  786. package/dist/utils/font.d.ts.map +1 -0
  787. package/dist/utils/format-crypto.d.ts +312 -0
  788. package/dist/utils/format-crypto.d.ts.map +1 -0
  789. package/dist/utils/format-date.d.ts +240 -0
  790. package/dist/utils/format-date.d.ts.map +1 -0
  791. package/dist/utils/format-number.d.ts +245 -0
  792. package/dist/utils/format-number.d.ts.map +1 -0
  793. package/dist/utils/i18n-text.d.ts +68 -0
  794. package/dist/utils/i18n-text.d.ts.map +1 -0
  795. package/dist/utils/index.d.ts +30 -0
  796. package/dist/utils/index.d.ts.map +1 -0
  797. package/dist/utils/jwt.d.ts +227 -0
  798. package/dist/utils/jwt.d.ts.map +1 -0
  799. package/dist/utils/object.d.ts +96 -0
  800. package/dist/utils/object.d.ts.map +1 -0
  801. package/dist/utils/refs.d.ts +60 -0
  802. package/dist/utils/refs.d.ts.map +1 -0
  803. package/dist/utils/rtl.d.ts +75 -0
  804. package/dist/utils/rtl.d.ts.map +1 -0
  805. package/dist/utils/storage.d.ts +190 -0
  806. package/dist/utils/storage.d.ts.map +1 -0
  807. package/dist/utils/string.d.ts +216 -0
  808. package/dist/utils/string.d.ts.map +1 -0
  809. package/dist/utils/template-resolver.d.ts +12 -0
  810. package/dist/utils/template-resolver.d.ts.map +1 -0
  811. package/dist/utils/toast.d.ts +25 -0
  812. package/dist/utils/toast.d.ts.map +1 -0
  813. package/dist/utils/transform-number.d.ts +108 -0
  814. package/dist/utils/transform-number.d.ts.map +1 -0
  815. package/dist/utils/url.d.ts +198 -0
  816. package/dist/utils/url.d.ts.map +1 -0
  817. package/package.json +69 -59
  818. package/dist/chunk-2FYNRDXR.js.map +0 -1
  819. package/dist/chunk-77KIJLPP.js +0 -37
  820. package/dist/chunk-77KIJLPP.js.map +0 -1
  821. package/dist/chunk-A2Z7NVGL.js.map +0 -1
  822. package/dist/chunk-BV32OJ2A.js.map +0 -1
  823. package/dist/chunk-DDY7TLUI.js.map +0 -1
  824. package/dist/chunk-HO2GKTWJ.js.map +0 -1
  825. package/dist/chunk-IZOIO7PA.js.map +0 -1
  826. package/dist/chunk-JDTC2SBY.js.map +0 -1
  827. package/dist/chunk-KTCWPGON.js.map +0 -1
  828. package/dist/chunk-MEFT6XPH.js.map +0 -1
  829. package/dist/chunk-SNKGGHBT.js.map +0 -1
  830. package/dist/chunk-VAAIHNWQ.js.map +0 -1
  831. package/dist/chunk-XQXGE2PW.js +0 -16793
  832. package/dist/chunk-XQXGE2PW.js.map +0 -1
  833. package/dist/chunk-XWL6J6IO.js.map +0 -1
  834. package/dist/chunk-XXP3ZGU6.js.map +0 -1
  835. package/dist/chunk-YJMAQL3S.js.map +0 -1
  836. package/dist/index-nmJ8Muwg.d.ts +0 -2368
  837. package/dist/settings-CAC0qFjS.d.ts +0 -455
  838. package/dist/text-transform-D6MzzF7V.d.ts +0 -165
  839. package/dist/use-timeout-D7U3EAtH.d.ts +0 -808
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/date-range-picker/date-range-picker.tsx","../src/components/date-range-picker/date-range-input.tsx","../src/components/admin-filters/filter-toolbar.tsx","../src/components/admin-filters/admin-data-table.tsx","../src/components/admin-filters/status-chip.tsx","../src/components/admin-filters/amount-cell.tsx","../src/components/date-range-picker/use-date-range-picker.ts","../src/components/country-select/flag-icon.tsx","../src/components/country-select/country-select.tsx","../src/utils/create-classes.ts","../src/components/animate/animate-border.tsx","../src/components/animate/motion-lazy.tsx","../src/components/avatar/avatar.tsx","../src/components/badge/badge.tsx","../src/components/card/card.tsx","../src/components/confirm-dialog/confirm-dialog.tsx","../src/components/empty-content/empty-content.tsx","../src/components/page-content/page-content.tsx","../src/components/image/image.tsx","../src/components/label/label.tsx","../src/components/loading-screen/loading-screen.tsx","../src/components/loading-screen/splash-screen.tsx","../src/components/tag-cloud/tag-cloud.tsx","../src/components/scrollbar/scrollbar.tsx","../src/components/snackbar/snackbar.tsx","../src/components/svg-color/svg-color.tsx","../src/components/table/table.tsx","../src/components/skeleton/skeleton.tsx","../src/components/progress/progress.tsx","../src/components/progress/countdown-ring.tsx","../src/components/virtual-list/virtual-list.tsx","../src/components/command-palette/command-palette.tsx","../src/components/tabs/tabs.tsx","../src/components/accordion/accordion.tsx","../src/components/menu/menu.tsx","../src/components/navigation-progress/navigation-progress.tsx","../src/components/scroll-to-top/scroll-to-top.tsx","../src/components/error-boundary/error-boundary.tsx","../src/components/settings/settings-provider.tsx","../src/components/settings/settings-drawer.tsx","../src/components/tooltip/tooltip.tsx","../src/components/alert/alert.tsx","../src/components/breadcrumbs/breadcrumbs.tsx","../src/components/nav-card/nav-card.tsx","../src/components/nav-card/nav-card-grid.tsx","../src/components/drawer/drawer.tsx","../src/components/stepper/stepper.tsx","../src/utils/cn.ts","../src/components/chart/classes.ts","../src/components/chart/components/chart-loading.tsx","../src/components/chart/components/chart-legends.tsx","../src/components/chart/chart.tsx","../src/components/chart/use-chart.ts","../src/components/lightbox/classes.ts","../src/components/lightbox/lightbox.tsx","../src/components/lightbox/use-lightbox.ts","../src/components/carousel/classes.ts","../src/components/carousel/carousel.tsx","../src/components/carousel/use-carousel.ts","../src/components/nav-section/styles.ts","../src/components/nav-section/components.tsx","../src/utils/url.ts","../src/components/nav-section/nav-item.tsx","../src/components/nav-section/nav-context.tsx","../src/components/nav-section/nav-list.tsx","../src/components/nav-section/nav-section-vertical.tsx","../src/components/nav-section/nav-section-horizontal.tsx","../src/components/nav-section/nav-section-mini.tsx","../src/components/mega-menu/styles.ts","../src/components/mega-menu/mega-menu-horizontal.tsx","../src/components/mega-menu/mega-menu-vertical.tsx","../src/components/mega-menu/mega-menu-mobile.tsx","../src/components/scroll-spy/scroll-spy-provider.tsx","../src/components/scroll-spy/scroll-spy-section.tsx","../src/components/doc-layout/doc-layout.tsx","../src/components/doc-layout/doc-sidebar.tsx","../src/components/doc-layout/doc-section-nav.tsx","../src/components/content-renderer/classes.ts","../src/components/content-renderer/styles.ts","../src/components/tiptap-renderer/tiptap-renderer.tsx","../src/components/content-renderer/html-tags.ts","../src/components/content-renderer/html-to-markdown.ts","../src/components/content-renderer/remark-spoiler.ts","../src/components/content-renderer/markdown.tsx","../src/components/content-renderer/content-renderer.tsx","../src/components/duration-picker/duration-picker.tsx","../src/components/changelog/changelog-timeline.tsx","../src/components/changelog/changelog-entry.tsx"],"names":["jsxs","jsx","useCallback","Fragment","TextField","IconButton","useState","useMemo","Typography","Box","Button","alpha","Stack","Chip","dayjs","styled","InputAdornment","useRef","useEffect","useTheme","Avatar","MuiBadge","Badge","forwardRef","Card","Skeleton","Dialog","DialogTitle","DialogContent","DialogActions","Image","Label","LinearProgress","Portal","List","Scrollbar","Alert","CloseIcon","SvgColor","StyledTableContainer","Paper","StyledTableHead","TableHead","StyledTableRow","TableRow","MuiTable","TableCell","Checkbox","TableSortLabel","TableBody","TablePagination","MuiSkeleton","formatLabel","CircularProgress","MuiCircularProgress","Divider","Children","MenuItem","ListItemText","ExpandMoreIcon","createContext","useContext","Tooltip","MuiTooltip","CardContent","Drawer","MuiDrawer","ItemRoot","ItemIcon","ChevronRightIcon","MIN_ZOOM","MAX_ZOOM","ZOOM_STEP","ChevronLeftIcon","Nav","NavUl","NavLi","NavSubheader","NavItemBase","IconWrapper","NavArrow","origin","NavItem","Collapse","Popover","ArrowIcon","Link","NavButton","DropdownContent","SectionHeader","SubItemLink","MegaMenuList","ListItemButton","Tabs","Tag","isExternalLink","useId","ToggleButtonGroup","ToggleButton"],"mappings":"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","file":"chunk-A2Z7NVGL.js","sourcesContent":["'use client';\n\n/**\n * DateRangePicker — Dialog-based date range selector.\n *\n * Responsive: shows calendar view on desktop, input fields on mobile.\n * Based on @mui/x-date-pickers DatePicker and DateCalendar.\n */\n\nimport type { DialogProps } from '@mui/material/Dialog';\nimport type { PaperProps } from '@mui/material/Paper';\nimport type { UseDateRangePickerReturn } from './use-date-range-picker.js';\n\nimport { useCallback } from 'react';\n\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport useMediaQuery from '@mui/material/useMediaQuery';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport { DatePicker } from '@mui/x-date-pickers/DatePicker';\nimport { DateCalendar, dateCalendarClasses } from '@mui/x-date-pickers/DateCalendar';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/**\n * Translatable strings rendered inside the picker dialog.\n *\n * Prism components stay framework-agnostic: we don't depend on\n * react-i18next here. Consumers pass already-translated strings via\n * this prop. Every key is optional so callers can override only the\n * ones they need; missing keys fall back to English.\n */\nexport interface DateRangePickerTranslations {\n /** Dialog title — \"Select date range\" */\n title?: string;\n /** Start-date input label (mobile/input variant) — \"Start date\" */\n startDate?: string;\n /** End-date input label (mobile/input variant) — \"End date\" */\n endDate?: string;\n /** Helper text when end < start — \"End date must be later than start date\" */\n errorRange?: string;\n /** Cancel button — \"Cancel\" */\n cancel?: string;\n /** Apply button — \"Apply\" */\n apply?: string;\n}\n\nexport type DateRangePickerProps = DialogProps &\n UseDateRangePickerReturn & {\n onSubmit?: () => void;\n variant?: 'calendar' | 'input';\n /** @deprecated Use `translations.title` instead. */\n title?: string;\n translations?: DateRangePickerTranslations;\n };\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport function DateRangePicker({\n open,\n error,\n onClose,\n onSubmit,\n startDate,\n endDate,\n onChangeStartDate,\n onChangeEndDate,\n slotProps,\n variant = 'input',\n title,\n translations,\n // Exclude hook props that shouldn't go to Dialog\n selected: _selected,\n label: _label,\n shortLabel: _shortLabel,\n onOpen: _onOpen,\n onReset: _onReset,\n setStartDate: _setStartDate,\n setEndDate: _setEndDate,\n ...other\n}: DateRangePickerProps) {\n // Precedence: explicit translations > legacy `title` prop > English default.\n const txTitle = translations?.title ?? title ?? 'Select date range';\n const txStart = translations?.startDate ?? 'Start date';\n const txEnd = translations?.endDate ?? 'End date';\n const txErrorRange = translations?.errorRange ?? 'End date must be later than start date';\n const txCancel = translations?.cancel ?? 'Cancel';\n const txApply = translations?.apply ?? 'Apply';\n const mdUp = useMediaQuery((theme: any) => theme.breakpoints.up('md'));\n const isCalendarView = mdUp && variant === 'calendar';\n\n const handleSubmit = useCallback(() => {\n onClose({}, 'backdropClick');\n onSubmit?.();\n }, [onClose, onSubmit]);\n\n const handleClose = useCallback(() => {\n onClose({}, 'backdropClick');\n }, [onClose]);\n\n const dialogPaperSx = (slotProps?.paper as PaperProps)?.sx;\n\n return (\n <Dialog\n fullWidth\n open={open}\n onClose={onClose}\n maxWidth={isCalendarView ? false : 'xs'}\n slotProps={{\n ...slotProps,\n paper: {\n ...slotProps?.paper,\n sx: [\n { ...(isCalendarView && { maxWidth: 720 }) },\n ...(Array.isArray(dialogPaperSx) ? dialogPaperSx : dialogPaperSx ? [dialogPaperSx] : []),\n ],\n },\n }}\n {...other}\n >\n <DialogTitle>{txTitle}</DialogTitle>\n\n <DialogContent\n sx={[\n (theme) => ({\n gap: 3,\n display: 'flex',\n overflow: 'unset',\n flexDirection: isCalendarView ? 'row' : 'column',\n [`& .${dateCalendarClasses.root}`]: {\n borderRadius: 2,\n border: `dashed 1px ${theme.palette.divider}`,\n },\n }),\n ]}\n >\n {isCalendarView ? (\n <>\n <DateCalendar value={startDate} onChange={onChangeStartDate} />\n <DateCalendar value={endDate} onChange={onChangeEndDate} />\n </>\n ) : (\n <>\n <DatePicker label={txStart} value={startDate} onChange={onChangeStartDate} />\n <DatePicker label={txEnd} value={endDate} onChange={onChangeEndDate} />\n </>\n )}\n\n {error && (\n <FormHelperText error sx={{ px: 2 }}>\n {txErrorRange}\n </FormHelperText>\n )}\n </DialogContent>\n\n <DialogActions>\n <Button variant=\"outlined\" color=\"inherit\" onClick={handleClose}>\n {txCancel}\n </Button>\n <Button disabled={error} variant=\"contained\" onClick={handleSubmit}>\n {txApply}\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n","'use client';\n\n/**\n * DateRangeInput — Compact inline date range selector for filter toolbars.\n *\n * Renders as a clickable TextField that opens a DateRangePicker dialog.\n * Shows the selected range as a short label or placeholder.\n */\n\nimport type { DateRangeValue } from './use-date-range-picker.js';\nimport type { DateRangePickerTranslations } from './date-range-picker.js';\n\nimport { useState, useCallback, useMemo } from 'react';\nimport dayjs from 'dayjs';\n\nimport TextField from '@mui/material/TextField';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport IconButton from '@mui/material/IconButton';\nimport { DateRangePicker } from './date-range-picker.js';\n\n// ---------------------------------------------------------------------------\n// Icons (inline to avoid external deps)\n// ---------------------------------------------------------------------------\n\nfunction CalendarIcon() {\n return (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\" />\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\" />\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\" />\n </svg>\n );\n}\n\nfunction ClearIcon() {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/**\n * Translatable strings rendered around the input field.\n *\n * Stays prop-driven so prism doesn't pull in a translation library.\n * Pass already-translated strings; missing keys fall back to English.\n *\n * For the picker dialog's own strings (Cancel, Apply, etc.) see\n * `DateRangePickerTranslations` — those can be passed via\n * `pickerTranslations` and are threaded through to the dialog.\n */\nexport interface DateRangeInputTranslations {\n /** Placeholder shown when both ends are empty — \"Select dates...\" */\n placeholder?: string;\n /** Prefix for partial range with only start — \"From\" → \"From 12 Jan 2026\" */\n from?: string;\n /** Prefix for partial range with only end — \"To\" → \"To 31 Dec 2026\" */\n to?: string;\n}\n\nexport interface DateRangeInputProps {\n /** Label displayed on the field */\n label?: string;\n /** Start date as ISO string (YYYY-MM-DD) */\n startDate: string;\n /** End date as ISO string (YYYY-MM-DD) */\n endDate: string;\n /** Called when dates change */\n onChange: (startDate: string, endDate: string) => void;\n /** Minimum width */\n width?: number | string;\n /** Picker variant */\n variant?: 'calendar' | 'input';\n /** Size of the field */\n size?: 'small' | 'medium';\n /** Translations for the input field surface (placeholder, \"From\"/\"To\") */\n translations?: DateRangeInputTranslations;\n /** Translations forwarded into the embedded picker dialog */\n pickerTranslations?: DateRangePickerTranslations;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction toDayjs(value: string): DateRangeValue {\n if (!value) return null;\n const d = dayjs(value);\n return d.isValid() ? d : null;\n}\n\nfunction toIso(value: DateRangeValue): string {\n if (!value || !value.isValid()) return '';\n return value.format('YYYY-MM-DD');\n}\n\nfunction formatLabel(\n start: string,\n end: string,\n fromPrefix: string,\n toPrefix: string,\n): string {\n if (!start && !end) return '';\n const s = toDayjs(start);\n const e = toDayjs(end);\n if (s && e) {\n if (s.isSame(e, 'day')) return e.format('DD MMM YYYY');\n if (s.isSame(e, 'month')) return `${s.format('DD')} – ${e.format('DD MMM YYYY')}`;\n if (s.isSame(e, 'year')) return `${s.format('DD MMM')} – ${e.format('DD MMM YYYY')}`;\n return `${s.format('DD MMM YYYY')} – ${e.format('DD MMM YYYY')}`;\n }\n if (s) return `${fromPrefix} ${s.format('DD MMM YYYY')}`;\n if (e) return `${toPrefix} ${e.format('DD MMM YYYY')}`;\n return '';\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport function DateRangeInput({\n label = 'Date range',\n startDate,\n endDate,\n onChange,\n width = 220,\n variant = 'input',\n size = 'small',\n translations,\n pickerTranslations,\n}: DateRangeInputProps) {\n const [open, setOpen] = useState(false);\n const [tempStart, setTempStart] = useState<DateRangeValue>(toDayjs(startDate));\n const [tempEnd, setTempEnd] = useState<DateRangeValue>(toDayjs(endDate));\n\n const txPlaceholder = translations?.placeholder ?? 'Select dates...';\n const txFrom = translations?.from ?? 'From';\n const txTo = translations?.to ?? 'To';\n\n const displayLabel = useMemo(\n () => formatLabel(startDate, endDate, txFrom, txTo),\n [startDate, endDate, txFrom, txTo],\n );\n const hasValue = !!startDate || !!endDate;\n\n const handleOpen = useCallback(() => {\n setTempStart(toDayjs(startDate));\n setTempEnd(toDayjs(endDate));\n setOpen(true);\n }, [startDate, endDate]);\n\n const handleClose = useCallback(() => {\n setOpen(false);\n }, []);\n\n const handleSubmit = useCallback(() => {\n onChange(toIso(tempStart), toIso(tempEnd));\n setOpen(false);\n }, [tempStart, tempEnd, onChange]);\n\n const handleClear = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onChange('', '');\n },\n [onChange]\n );\n\n const error = !!(tempStart && tempEnd && tempStart.isAfter(tempEnd));\n\n return (\n <>\n <TextField\n size={size}\n label={label}\n value={displayLabel}\n placeholder={txPlaceholder}\n onClick={handleOpen}\n slotProps={{\n input: {\n readOnly: true,\n sx: { cursor: 'pointer' },\n startAdornment: (\n <InputAdornment position=\"start\" sx={{ color: 'text.disabled' }}>\n <CalendarIcon />\n </InputAdornment>\n ),\n ...(hasValue && {\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton size=\"small\" onClick={handleClear} sx={{ p: 0.25 }}>\n <ClearIcon />\n </IconButton>\n </InputAdornment>\n ),\n }),\n },\n inputLabel: { shrink: true },\n }}\n sx={{\n minWidth: width,\n '& .MuiOutlinedInput-root': { borderRadius: 1 },\n '& .MuiInputBase-input': { cursor: 'pointer' },\n }}\n />\n\n <DateRangePicker\n open={open}\n error={error}\n onClose={handleClose}\n onSubmit={handleSubmit}\n startDate={tempStart}\n endDate={tempEnd}\n onChangeStartDate={setTempStart}\n onChangeEndDate={setTempEnd}\n variant={variant}\n translations={pickerTranslations}\n selected={!!(tempStart && tempEnd)}\n label=\"\"\n shortLabel=\"\"\n onOpen={handleOpen}\n onReset={() => {\n setTempStart(null);\n setTempEnd(null);\n }}\n setStartDate={setTempStart}\n setEndDate={setTempEnd}\n />\n </>\n );\n}\n","'use client';\n\n/**\n * Filter Toolbar Component\n *\n * Declarative filter toolbar for admin sections. Renders filters based on\n * a configuration array, supporting search, select, multi-select, date ranges,\n * boolean toggles, and number ranges.\n *\n * @module @omnitron-dev/prism/components/admin-filters\n */\n\nimport type { ReactNode, ChangeEvent } from 'react';\nimport { useState, useCallback, useMemo, useRef, useEffect, useTransition } from 'react';\nimport Stack from '@mui/material/Stack';\nimport TextField from '@mui/material/TextField';\nimport Chip from '@mui/material/Chip';\nimport MenuItem from '@mui/material/MenuItem';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport Typography from '@mui/material/Typography';\nimport Badge from '@mui/material/Badge';\nimport { alpha } from '@mui/material/styles';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\nimport { DateRangeInput } from '../date-range-picker/date-range-input.js';\nimport { SearchInput } from '../search-input/search-input.js';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport type FilterType = 'search' | 'select' | 'multi-select' | 'date-range' | 'boolean' | 'number-range';\n\nexport interface FilterOption {\n value: string;\n label: string;\n color?: string;\n}\n\nexport interface FilterConfig {\n /** Unique key used as the property name in FilterValues */\n key: string;\n /** Type of filter to render */\n type: FilterType;\n /** Display label */\n label: string;\n /** Placeholder text */\n placeholder?: string;\n /** Options for select / multi-select filters */\n options?: FilterOption[];\n /** Width of the filter control */\n width?: number | string;\n /** Default value */\n defaultValue?: unknown;\n}\n\nexport interface FilterValues {\n [key: string]: unknown;\n search?: string;\n dateFrom?: string;\n dateTo?: string;\n}\n\nexport interface FilterToolbarProps {\n /** Filter configurations */\n filters: FilterConfig[];\n /** Current filter values */\n values: FilterValues;\n /** Called when any filter value changes */\n onChange: (values: FilterValues) => void;\n /** Called when the reset button is clicked */\n onReset?: () => void;\n /** Total count to display */\n total?: number;\n /** Debounce delay for search input in ms */\n searchDebounce?: number;\n /** Compact mode (single row) */\n compact?: boolean;\n /** Additional styles */\n sx?: SxProps<Theme>;\n /**\n * Localized label for the Reset button. Defaults to \"Reset\" so\n * existing call sites still work; pass `t('common.reset')` from\n * the host app to translate.\n */\n resetLabel?: string;\n /**\n * Formatter for the \"N results\" counter below the toolbar.\n * Defaults to English pluralisation. Pass a function from the host\n * app's i18n to get plural-aware translation, e.g.\n * (n) => t('common.resultsCount', { count: n })\n * Receives the already-formatted number string for direct use.\n */\n resultsLabel?: (count: number) => string;\n}\n\n// =============================================================================\n// SEARCH ICON (inline SVG to avoid external dependency)\n// =============================================================================\n\nfunction FilterIcon(): ReactNode {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polygon points=\"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3\" />\n </svg>\n );\n}\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\nfunction useDebounce(value: string, delay: number): string {\n const [debouncedValue, setDebouncedValue] = useState(value);\n\n useEffect(() => {\n const timer = setTimeout(() => setDebouncedValue(value), delay);\n return () => clearTimeout(timer);\n }, [value, delay]);\n\n return debouncedValue;\n}\n\nfunction isFilterActive(config: FilterConfig, value: unknown): boolean {\n if (value === undefined || value === null || value === '') return false;\n if (Array.isArray(value) && value.length === 0) return false;\n if (config.type === 'boolean' && value === false) return false;\n if (config.type === 'select' && value === '') return false;\n return true;\n}\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\n/**\n * FilterToolbar - Declarative filter toolbar for admin sections.\n *\n * Renders a row of filter controls based on a configuration array.\n * Supports search (debounced), select, multi-select, date-range,\n * boolean, and number-range filters.\n *\n * @example\n * ```tsx\n * const filters: FilterConfig[] = [\n * { key: 'search', type: 'search', label: 'Search', placeholder: 'Search users...' },\n * { key: 'status', type: 'select', label: 'Status', options: [\n * { value: 'active', label: 'Active' },\n * { value: 'blocked', label: 'Blocked' },\n * ]},\n * { key: 'verified', type: 'boolean', label: 'Verified' },\n * ];\n *\n * <FilterToolbar\n * filters={filters}\n * values={filterValues}\n * onChange={setFilterValues}\n * total={245}\n * />\n * ```\n */\nexport function FilterToolbar({\n filters,\n values,\n onChange,\n onReset,\n total,\n searchDebounce = 300,\n compact = false,\n sx,\n resetLabel = 'Reset',\n resultsLabel,\n}: FilterToolbarProps): ReactNode {\n const [, startTransition] = useTransition();\n\n // Track local search text so the input feels responsive (debounce only propagates)\n const searchFilter = filters.find((f) => f.type === 'search');\n const [localSearch, setLocalSearch] = useState<string>((values[searchFilter?.key ?? 'search'] as string) ?? '');\n const debouncedSearch = useDebounce(localSearch, searchDebounce);\n const prevDebouncedRef = useRef(debouncedSearch);\n\n // Propagate debounced search to parent\n useEffect(() => {\n if (debouncedSearch !== prevDebouncedRef.current) {\n prevDebouncedRef.current = debouncedSearch;\n const key = searchFilter?.key ?? 'search';\n startTransition(() => {\n onChange({ ...values, [key]: debouncedSearch });\n });\n }\n }, [debouncedSearch, searchFilter?.key, onChange, values]);\n\n // Count active filters (excluding search)\n const activeCount = useMemo(\n () => filters.filter((f) => f.type !== 'search' && isFilterActive(f, values[f.key])).length,\n [filters, values]\n );\n\n const hasAnyActive = useMemo(\n () => filters.some((f) => isFilterActive(f, f.type === 'search' ? localSearch : values[f.key])),\n [filters, values, localSearch]\n );\n\n // Handlers\n const handleChange = useCallback(\n (key: string, value: unknown) => {\n startTransition(() => {\n onChange({ ...values, [key]: value });\n });\n },\n [onChange, values]\n );\n\n const handleReset = useCallback(() => {\n setLocalSearch('');\n if (onReset) {\n onReset();\n } else {\n const resetValues: FilterValues = {};\n for (const f of filters) {\n if (f.type === 'search') resetValues[f.key] = '';\n else if (f.type === 'multi-select') resetValues[f.key] = [];\n else if (f.type === 'boolean') resetValues[f.key] = false;\n else if (f.type === 'date-range') {\n resetValues[`${f.key}From`] = '';\n resetValues[`${f.key}To`] = '';\n } else if (f.type === 'number-range') {\n resetValues[`${f.key}Min`] = '';\n resetValues[`${f.key}Max`] = '';\n } else {\n resetValues[f.key] = '';\n }\n }\n onChange(resetValues);\n }\n }, [onReset, onChange, filters]);\n\n // Render individual filter\n const renderFilter = useCallback(\n (config: FilterConfig): ReactNode => {\n const { key, type, label, placeholder, options, width } = config;\n\n switch (type) {\n case 'search':\n return (\n <SearchInput\n key={key}\n value={localSearch}\n onChange={setLocalSearch}\n placeholder={placeholder ?? 'Search...'}\n fullWidth={false}\n minWidth={width ?? 220}\n />\n );\n\n case 'select':\n return (\n <TextField\n key={key}\n select\n size=\"small\"\n value={(values[key] as string) ?? ''}\n onChange={(e: ChangeEvent<HTMLInputElement>) => handleChange(key, e.target.value)}\n slotProps={{ select: { displayEmpty: true } }}\n sx={{\n minWidth: width ?? 150,\n '& .MuiOutlinedInput-root': { borderRadius: 1 },\n '& .MuiOutlinedInput-notchedOutline legend': { width: 0 },\n }}\n >\n <MenuItem value=\"\">\n <Typography variant=\"body2\" sx={{\n color: \"text.secondary\"\n }}>\n {label}\n </Typography>\n </MenuItem>\n {options?.map((opt) => (\n <MenuItem key={opt.value} value={opt.value}>\n {opt.label}\n </MenuItem>\n ))}\n </TextField>\n );\n\n case 'multi-select': {\n const selectedValues = (values[key] as string[] | undefined) ?? [];\n return (\n <TextField\n key={key}\n select\n size=\"small\"\n value={selectedValues}\n onChange={(e: any) => handleChange(key, e.target.value)}\n slotProps={{\n select: {\n multiple: true,\n displayEmpty: true,\n renderValue: (selected: unknown) => {\n const sel = selected as string[];\n if (sel.length === 0) {\n return (\n <Typography variant=\"body2\" sx={{\n color: \"text.secondary\"\n }}>\n {label}\n </Typography>\n );\n }\n return (\n <Stack direction=\"row\" spacing={0.5} sx={{ overflow: 'hidden' }}>\n {sel.map((val) => {\n const opt = options?.find((o) => o.value === val);\n return (\n <Chip\n key={val}\n label={opt?.label ?? val}\n size=\"small\"\n sx={{ height: 20, fontSize: '0.75rem' }}\n />\n );\n })}\n </Stack>\n );\n },\n },\n }}\n sx={{\n minWidth: width ?? 180,\n '& .MuiOutlinedInput-root': { borderRadius: 1 },\n '& .MuiOutlinedInput-notchedOutline legend': { width: 0 },\n }}\n >\n {options?.map((opt) => (\n <MenuItem key={opt.value} value={opt.value}>\n {opt.label}\n </MenuItem>\n ))}\n </TextField>\n );\n }\n\n case 'date-range':\n return (\n <DateRangeInput\n key={key}\n label={label}\n startDate={(values[`${key}From`] as string) ?? ''}\n endDate={(values[`${key}To`] as string) ?? ''}\n onChange={(from, to) => {\n handleChange(`${key}From`, from);\n handleChange(`${key}To`, to);\n }}\n width={width ?? 220}\n size=\"small\"\n />\n );\n\n case 'boolean':\n return (\n <Chip\n key={key}\n label={label}\n variant={values[key] ? 'filled' : 'outlined'}\n color={values[key] ? 'primary' : 'default'}\n onClick={() => handleChange(key, !values[key])}\n size=\"small\"\n sx={{\n borderRadius: 1,\n fontWeight: 500,\n height: 32,\n cursor: 'pointer',\n transition: (theme) =>\n theme.transitions.create(['background-color', 'color', 'border-color'], {\n duration: theme.transitions.duration.shorter,\n }),\n }}\n />\n );\n\n case 'number-range':\n return (\n <Stack key={key} direction=\"row\" spacing={1} sx={{\n alignItems: \"center\"\n }}>\n <TextField\n type=\"number\"\n size=\"small\"\n label={`${label} min`}\n value={(values[`${key}Min`] as string) ?? ''}\n onChange={(e: ChangeEvent<HTMLInputElement>) => handleChange(`${key}Min`, e.target.value)}\n sx={{ minWidth: width ?? 100 }}\n />\n <Typography\n variant=\"body2\"\n sx={{\n color: \"text.disabled\",\n px: 0.5\n }}>\n —\n </Typography>\n <TextField\n type=\"number\"\n size=\"small\"\n label={`${label} max`}\n value={(values[`${key}Max`] as string) ?? ''}\n onChange={(e: ChangeEvent<HTMLInputElement>) => handleChange(`${key}Max`, e.target.value)}\n sx={{ minWidth: width ?? 100 }}\n />\n </Stack>\n );\n\n default:\n return null;\n }\n },\n [localSearch, values, handleChange]\n );\n\n return (\n <Stack\n spacing={compact ? 0 : 1.5}\n sx={{\n p: 2,\n borderRadius: 1,\n border: (theme) => `1px solid ${theme.palette.divider}`,\n bgcolor: (theme) => alpha(theme.palette.background.default, 0.5),\n ...sx,\n }}\n >\n {/* Filter controls row */}\n <Stack\n direction=\"row\"\n sx={{\n alignItems: \"center\",\n flexWrap: \"wrap\",\n gap: 1.5\n }}>\n {filters.map(renderFilter)}\n\n {/* Active filter count + reset */}\n <Stack\n direction=\"row\"\n spacing={1}\n sx={{\n alignItems: \"center\",\n ml: 'auto'\n }}>\n {activeCount > 0 && (\n <Badge badgeContent={activeCount} color=\"primary\" sx={{ '& .MuiBadge-badge': { fontSize: '0.65rem' } }}>\n <Box sx={{ color: 'text.secondary', display: 'flex', alignItems: 'center' }}>\n <FilterIcon />\n </Box>\n </Badge>\n )}\n\n {hasAnyActive && (\n <Button\n size=\"small\"\n onClick={handleReset}\n sx={{\n minWidth: 0,\n px: 1.5,\n fontSize: '0.75rem',\n fontWeight: 500,\n color: 'text.secondary',\n '&:hover': { color: 'text.primary' },\n }}\n >\n {resetLabel}\n </Button>\n )}\n </Stack>\n </Stack>\n {/* Results count */}\n {total !== undefined && !compact && (\n <Typography\n variant=\"caption\"\n sx={{\n color: \"text.disabled\",\n mt: 0.5\n }}>\n {resultsLabel\n ? resultsLabel(total)\n : `${total.toLocaleString()} result${total !== 1 ? 's' : ''}`}\n </Typography>\n )}\n </Stack>\n );\n}\n","'use client';\n\n/**\n * Admin Data Table Component\n *\n * Optimized table for admin data displays with built-in sorting,\n * skeleton loading, empty states, and pagination.\n *\n * @module @omnitron-dev/prism/components/admin-filters\n */\n\nimport type { ReactNode } from 'react';\nimport { useCallback, useMemo } from 'react';\nimport MuiTable from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport TableCell from '@mui/material/TableCell';\nimport TableContainer from '@mui/material/TableContainer';\nimport TableHead from '@mui/material/TableHead';\nimport TableRow from '@mui/material/TableRow';\nimport TableSortLabel from '@mui/material/TableSortLabel';\nimport TablePagination from '@mui/material/TablePagination';\nimport Paper from '@mui/material/Paper';\nimport Box from '@mui/material/Box';\nimport Stack from '@mui/material/Stack';\nimport Checkbox from '@mui/material/Checkbox';\nimport Typography from '@mui/material/Typography';\nimport Skeleton from '@mui/material/Skeleton';\nimport { styled, alpha } from '@mui/material/styles';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface ColumnDef<T> {\n /** Unique column identifier */\n key: string;\n /** Column header label */\n header: string;\n /** Column width */\n width?: number | string;\n /** Whether column is sortable */\n sortable?: boolean;\n /** Cell alignment */\n align?: 'left' | 'center' | 'right';\n /** Custom cell renderer */\n render: (row: T, index: number) => ReactNode;\n}\n\nexport interface AdminDataTableProps<T> {\n /** Column definitions */\n columns: ColumnDef<T>[];\n /** Data rows */\n data: T[];\n /** Total number of rows (for pagination) */\n total: number;\n /** Loading state */\n loading?: boolean;\n /** Current page (0-indexed) */\n page: number;\n /** Rows per page */\n pageSize: number;\n /** Page change handler */\n onPageChange: (page: number) => void;\n /** Page size change handler */\n onPageSizeChange?: (size: number) => void;\n /** Current sort column key */\n sortBy?: string;\n /** Current sort direction */\n sortOrder?: 'asc' | 'desc';\n /** Sort change handler */\n onSort?: (column: string) => void;\n /** Message shown when no data */\n emptyMessage?: string;\n /** Extract unique key from row */\n rowKey?: (row: T) => string;\n /** Row click handler */\n onRowClick?: (row: T) => void;\n /** Page size options for the selector */\n pageSizeOptions?: number[];\n /** Sticky header */\n stickyHeader?: boolean;\n /** Dense mode (less padding) */\n dense?: boolean;\n /** Container max height */\n maxHeight?: number | string;\n /** Additional styles */\n sx?: SxProps<Theme>;\n /**\n * Multi-select mode — adds a leading checkbox column and a header\n * checkbox that toggles all rows on the current page. Selection\n * state is controlled: pass `selectedKeys` and `onSelectionChange`.\n */\n selectable?: boolean;\n /** Currently-selected row keys (matched against `rowKey(row)`). */\n selectedKeys?: ReadonlySet<string>;\n /** Selection change handler. The new set is rebuilt every change. */\n onSelectionChange?: (keys: Set<string>) => void;\n /**\n * Render slot displayed above the table whenever `selectedKeys` is\n * non-empty — typically a row of bulk-action buttons. Receives the\n * current selection so callers can wire actions without re-tracking\n * state externally.\n */\n bulkActions?: (selected: ReadonlySet<string>) => ReactNode;\n}\n\n// =============================================================================\n// STYLED COMPONENTS\n// =============================================================================\n\nconst StyledTableContainer = styled(Paper)(({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n border: `1px solid ${theme.palette.divider}`,\n overflow: 'auto',\n}));\n\nconst StyledTableHead = styled(TableHead)(({ theme }) => ({\n backgroundColor: alpha(theme.palette.grey[500], 0.08),\n '& .MuiTableCell-head': {\n fontWeight: 600,\n fontSize: theme.typography.pxToRem(13),\n color: theme.palette.text.secondary,\n backgroundColor: 'transparent',\n whiteSpace: 'nowrap',\n borderBottom: `1px solid ${theme.palette.divider}`,\n },\n}));\n\nconst StyledTableRow = styled(TableRow)(({ theme }) => ({\n transition: theme.transitions.create('background-color', {\n duration: theme.transitions.duration.shortest,\n }),\n '&:nth-of-type(even)': {\n backgroundColor: alpha(theme.palette.grey[500], 0.02),\n },\n '&:hover': {\n backgroundColor: alpha(theme.palette.primary.main, 0.04),\n },\n '& .MuiTableCell-body': {\n borderBottom: `1px solid ${alpha(theme.palette.divider, 0.6)}`,\n },\n}));\n\n// Single shared empty Set so default `selection` doesn't churn references\n// when `selectedKeys` is omitted.\nconst EMPTY_SELECTION: ReadonlySet<string> = new Set<string>();\n\n// =============================================================================\n// EMPTY STATE ICON\n// =============================================================================\n\nfunction EmptyIcon(): ReactNode {\n return (\n <svg\n width=\"48\"\n height=\"48\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n opacity=\"0.3\"\n >\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"9\" y1=\"15\" x2=\"15\" y2=\"15\" />\n </svg>\n );\n}\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\n/**\n * AdminDataTable - Data table optimized for admin sections.\n *\n * Features skeleton loading rows, sortable column headers, empty states,\n * alternating row colors, sticky header support, and compact pagination.\n *\n * @example\n * ```tsx\n * const columns: ColumnDef<Transaction>[] = [\n * { key: 'id', header: 'ID', width: 80, render: (row) => row.id },\n * { key: 'amount', header: 'Amount', align: 'right', sortable: true,\n * render: (row) => <AmountCell amount={row.amount} currency=\"BTC\" /> },\n * { key: 'status', header: 'Status', render: (row) => <StatusChip status={row.status} /> },\n * ];\n *\n * <AdminDataTable\n * columns={columns}\n * data={transactions}\n * total={1200}\n * page={0}\n * pageSize={25}\n * onPageChange={setPage}\n * loading={isLoading}\n * sortBy=\"amount\"\n * sortOrder=\"desc\"\n * onSort={handleSort}\n * />\n * ```\n */\nexport function AdminDataTable<T>({\n columns,\n data,\n total,\n loading = false,\n page,\n pageSize,\n onPageChange,\n onPageSizeChange,\n sortBy,\n sortOrder = 'asc',\n onSort,\n emptyMessage = 'No data found',\n rowKey,\n onRowClick,\n pageSizeOptions = [10, 25, 50, 100],\n stickyHeader = false,\n dense = false,\n maxHeight,\n sx,\n selectable = false,\n selectedKeys,\n onSelectionChange,\n bulkActions,\n}: AdminDataTableProps<T>): ReactNode {\n const getRowKey = useCallback(\n (row: T, index: number): string => {\n if (rowKey) return rowKey(row);\n const record = row as Record<string, unknown>;\n if (record['id'] !== undefined) return String(record['id']);\n return String(index);\n },\n [rowKey]\n );\n\n // Stable empty set so callers can omit `selectedKeys` without us\n // creating a fresh Set every render (which would defeat memoisation\n // downstream).\n const selection = selectedKeys ?? EMPTY_SELECTION;\n\n const pageRowKeys = useMemo(\n () => (selectable ? data.map((row, index) => getRowKey(row, index)) : []),\n [selectable, data, getRowKey]\n );\n\n const allPageSelected = pageRowKeys.length > 0 && pageRowKeys.every((k) => selection.has(k));\n const somePageSelected = !allPageSelected && pageRowKeys.some((k) => selection.has(k));\n\n const toggleAllOnPage = useCallback(() => {\n if (!onSelectionChange) return;\n const next = new Set(selection);\n if (allPageSelected) {\n pageRowKeys.forEach((k) => next.delete(k));\n } else {\n pageRowKeys.forEach((k) => next.add(k));\n }\n onSelectionChange(next);\n }, [onSelectionChange, selection, allPageSelected, pageRowKeys]);\n\n const toggleRow = useCallback(\n (key: string) => {\n if (!onSelectionChange) return;\n const next = new Set(selection);\n if (next.has(key)) next.delete(key);\n else next.add(key);\n onSelectionChange(next);\n },\n [onSelectionChange, selection]\n );\n\n const handleSort = useCallback(\n (columnKey: string) => {\n onSort?.(columnKey);\n },\n [onSort]\n );\n\n const handlePageChange = useCallback(\n (_: unknown, newPage: number) => {\n onPageChange(newPage);\n },\n [onPageChange]\n );\n\n const handlePageSizeChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n onPageSizeChange?.(parseInt(event.target.value, 10));\n onPageChange(0);\n },\n [onPageSizeChange, onPageChange]\n );\n\n // Skeleton rows for loading state\n const skeletonRows = useMemo(\n () =>\n Array.from({ length: pageSize }, (_, i) => (\n <TableRow key={`skeleton-${i}`}>\n {selectable && (\n <TableCell padding=\"checkbox\">\n <Skeleton variant=\"rectangular\" width={18} height={18} sx={{ borderRadius: 0.5 }} />\n </TableCell>\n )}\n {columns.map((col) => (\n <TableCell key={col.key} align={col.align ?? 'left'}>\n <Skeleton\n variant=\"text\"\n width={col.align === 'right' ? '60%' : '80%'}\n sx={{\n ml: col.align === 'right' ? 'auto' : 0,\n borderRadius: 0.5,\n }}\n />\n </TableCell>\n ))}\n </TableRow>\n )),\n [pageSize, columns, selectable]\n );\n\n const showBulkBar = selectable && selection.size > 0 && !!bulkActions;\n\n // Empty state\n if (!loading && data.length === 0) {\n return (\n <StyledTableContainer sx={sx}>\n <MuiTable size={dense ? 'small' : 'medium'} stickyHeader={stickyHeader}>\n <StyledTableHead>\n <TableRow>\n {selectable && <TableCell padding=\"checkbox\" />}\n {columns.map((col) => (\n <TableCell key={col.key} align={col.align ?? 'left'} style={{ width: col.width }}>\n {col.header}\n </TableCell>\n ))}\n </TableRow>\n </StyledTableHead>\n </MuiTable>\n <Box\n sx={{\n py: 6,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: 1.5,\n }}\n >\n <EmptyIcon />\n <Typography variant=\"body2\" sx={{\n color: \"text.disabled\"\n }}>\n {emptyMessage}\n </Typography>\n </Box>\n </StyledTableContainer>\n );\n }\n\n return (\n <StyledTableContainer sx={{ maxHeight, ...sx }}>\n {showBulkBar && (\n <Stack\n direction=\"row\"\n spacing={2}\n sx={{\n alignItems: \"center\",\n px: 2,\n py: 1,\n borderBottom: (theme) => `1px solid ${theme.palette.divider}`,\n bgcolor: (theme) => alpha(theme.palette.primary.main, 0.06)\n }}>\n <Typography variant=\"body2\" sx={{\n fontWeight: 600\n }}>\n {selection.size} selected\n </Typography>\n <Box sx={{ flex: 1 }} />\n {bulkActions(selection)}\n </Stack>\n )}\n <TableContainer>\n <MuiTable size={dense ? 'small' : 'medium'} stickyHeader={stickyHeader}>\n <StyledTableHead>\n <TableRow>\n {selectable && (\n <TableCell padding=\"checkbox\">\n <Checkbox\n size=\"small\"\n indeterminate={somePageSelected}\n checked={allPageSelected}\n disabled={loading || pageRowKeys.length === 0}\n onChange={toggleAllOnPage}\n slotProps={{\n input: { 'aria-label': 'select all rows on page' }\n }}\n />\n </TableCell>\n )}\n {columns.map((col) => (\n <TableCell\n key={col.key}\n align={col.align ?? 'left'}\n style={{ width: col.width }}\n sortDirection={sortBy === col.key ? sortOrder : false}\n >\n {col.sortable && onSort ? (\n <TableSortLabel\n active={sortBy === col.key}\n direction={sortBy === col.key ? sortOrder : 'asc'}\n onClick={() => handleSort(col.key)}\n >\n {col.header}\n </TableSortLabel>\n ) : (\n col.header\n )}\n </TableCell>\n ))}\n </TableRow>\n </StyledTableHead>\n\n <TableBody>\n {loading\n ? skeletonRows\n : data.map((row, index) => {\n const key = getRowKey(row, index);\n const isSelected = selectable && selection.has(key);\n return (\n <StyledTableRow\n key={key}\n hover\n selected={isSelected}\n onClick={onRowClick ? () => onRowClick(row) : undefined}\n sx={{ cursor: onRowClick ? 'pointer' : 'default' }}\n >\n {selectable && (\n <TableCell\n padding=\"checkbox\"\n // Stop row-click bubbling so toggling a row's\n // checkbox doesn't also fire onRowClick.\n onClick={(e) => e.stopPropagation()}\n >\n <Checkbox\n size=\"small\"\n checked={isSelected}\n onChange={() => toggleRow(key)}\n slotProps={{\n input: { 'aria-label': 'select row' }\n }}\n />\n </TableCell>\n )}\n {columns.map((col) => (\n <TableCell key={col.key} align={col.align ?? 'left'}>\n {col.render(row, index)}\n </TableCell>\n ))}\n </StyledTableRow>\n );\n })}\n </TableBody>\n </MuiTable>\n </TableContainer>\n <TablePagination\n component=\"div\"\n count={total}\n page={page}\n rowsPerPage={pageSize}\n rowsPerPageOptions={pageSizeOptions}\n onPageChange={handlePageChange}\n onRowsPerPageChange={handlePageSizeChange}\n sx={{\n borderTop: (theme) => `1px solid ${theme.palette.divider}`,\n '& .MuiTablePagination-displayedRows': {\n fontSize: '0.8rem',\n },\n '& .MuiTablePagination-selectLabel': {\n fontSize: '0.8rem',\n },\n }}\n />\n </StyledTableContainer>\n );\n}\n","'use client';\n\n/**\n * Status Chip Component\n *\n * Universal status badge with automatic color mapping.\n *\n * @module @omnitron-dev/prism/components/admin-filters\n */\n\nimport type { ReactNode } from 'react';\nimport Chip from '@mui/material/Chip';\nimport { alpha } from '@mui/material/styles';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport type StatusColor = 'success' | 'error' | 'warning' | 'info' | 'default';\n\nexport interface StatusChipProps {\n /** Status string to display */\n status: string;\n /** Map status values to colors */\n colorMap?: Record<string, StatusColor>;\n /** Chip size */\n size?: 'small' | 'medium';\n /** Additional styles */\n sx?: SxProps<Theme>;\n}\n\n// =============================================================================\n// DEFAULT COLOR MAP\n// =============================================================================\n\nconst DEFAULT_COLOR_MAP: Record<string, StatusColor> = {\n active: 'success',\n completed: 'success',\n confirmed: 'success',\n approved: 'success',\n enabled: 'success',\n online: 'success',\n paid: 'success',\n resolved: 'success',\n success: 'success',\n\n pending: 'warning',\n processing: 'warning',\n waiting: 'warning',\n review: 'warning',\n draft: 'warning',\n\n failed: 'error',\n error: 'error',\n rejected: 'error',\n blocked: 'error',\n banned: 'error',\n disabled: 'error',\n cancelled: 'error',\n expired: 'error',\n suspended: 'error',\n offline: 'error',\n\n info: 'info',\n new: 'info',\n open: 'info',\n};\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\n/**\n * StatusChip - Universal status badge with color mapping.\n *\n * Automatically maps common status strings to appropriate colors.\n * Provide a custom `colorMap` to override or extend the defaults.\n *\n * @example\n * ```tsx\n * <StatusChip status=\"active\" />\n * <StatusChip status=\"pending\" size=\"small\" />\n * <StatusChip\n * status=\"custom\"\n * colorMap={{ custom: 'info', special: 'success' }}\n * />\n * ```\n */\nexport function StatusChip({ status, colorMap, size = 'small', sx }: StatusChipProps): ReactNode {\n const normalizedStatus = status.toLowerCase();\n const mergedMap = colorMap ? { ...DEFAULT_COLOR_MAP, ...colorMap } : DEFAULT_COLOR_MAP;\n const color: StatusColor = mergedMap[normalizedStatus] ?? 'default';\n\n // Capitalize first letter\n const displayLabel = status.charAt(0).toUpperCase() + status.slice(1).toLowerCase();\n\n return (\n <Chip\n label={displayLabel}\n size={size}\n sx={{\n height: size === 'small' ? 22 : 28,\n fontSize: size === 'small' ? '0.7rem' : '0.775rem',\n fontWeight: 600,\n borderRadius: 0.75,\n letterSpacing: '0.01em',\n ...(color !== 'default' && {\n color: (theme) => theme.palette[color].main,\n bgcolor: (theme) => alpha(theme.palette[color].main, 0.1),\n border: (theme) => `1px solid ${alpha(theme.palette[color].main, 0.2)}`,\n }),\n ...(color === 'default' && {\n color: 'text.secondary',\n bgcolor: (theme) => alpha(theme.palette.grey[500], 0.08),\n border: (theme) => `1px solid ${alpha(theme.palette.grey[500], 0.16)}`,\n }),\n ...sx,\n }}\n />\n );\n}\n","'use client';\n\n/**\n * Amount Cell Component\n *\n * Formatted amount display for financial tables with monospace font,\n * optional sign coloring, and currency display.\n *\n * @module @omnitron-dev/prism/components/admin-filters\n */\n\nimport type { ReactNode } from 'react';\nimport { useMemo } from 'react';\nimport Typography from '@mui/material/Typography';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface AmountCellProps {\n /** Amount as string (to preserve precision for crypto values) */\n amount: string;\n /** Currency code (e.g. \"BTC\", \"USD\", \"XMR\") */\n currency?: string;\n /** Number of decimal places */\n decimals?: number;\n /** Show +/- sign prefix */\n showSign?: boolean;\n /** Color positive green / negative red */\n color?: boolean;\n /** Additional styles */\n sx?: SxProps<Theme>;\n}\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\nfunction formatAmount(amount: string, decimals?: number): string {\n const num = parseFloat(amount);\n if (Number.isNaN(num)) return amount;\n\n const fixed = decimals !== undefined ? num.toFixed(decimals) : amount;\n const [intPart, decPart] = fixed.split('.');\n const absInt = intPart.replace('-', '');\n\n // Add thousands separators\n const formatted = absInt.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n\n const prefix = num < 0 ? '-' : '';\n return decPart !== undefined ? `${prefix}${formatted}.${decPart}` : `${prefix}${formatted}`;\n}\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\n/**\n * AmountCell - Formatted amount display for financial data.\n *\n * Uses monospace font for alignment. Supports sign display, color coding\n * (green for positive, red for negative), and currency suffixes.\n *\n * @example\n * ```tsx\n * <AmountCell amount=\"1234.56\" currency=\"BTC\" decimals={8} />\n * <AmountCell amount=\"-500.00\" currency=\"USD\" showSign color />\n * <AmountCell amount=\"0.00045123\" currency=\"XMR\" decimals={12} />\n * ```\n */\nexport function AmountCell({\n amount,\n currency,\n decimals,\n showSign = false,\n color = false,\n sx,\n}: AmountCellProps): ReactNode {\n const num = parseFloat(amount);\n const isNegative = num < 0;\n const isPositive = num > 0;\n\n const formatted = useMemo(() => formatAmount(amount, decimals), [amount, decimals]);\n\n const signPrefix = useMemo(() => {\n if (!showSign) return '';\n if (isPositive) return '+';\n return '';\n }, [showSign, isPositive]);\n\n const textColor = useMemo(() => {\n if (!color) return undefined;\n if (isPositive) return 'success.main';\n if (isNegative) return 'error.main';\n return 'text.secondary';\n }, [color, isPositive, isNegative]);\n\n return (\n <Typography\n variant=\"body2\"\n color={textColor}\n sx={{\n fontFamily: '\"JetBrains Mono\", \"Fira Code\", \"SF Mono\", \"Consolas\", monospace',\n fontVariantNumeric: 'tabular-nums',\n fontSize: '0.8rem',\n fontWeight: 500,\n whiteSpace: 'nowrap',\n textAlign: 'right',\n ...sx,\n }}\n >\n {signPrefix}\n {formatted}\n {currency && (\n <Typography\n component=\"span\"\n variant=\"caption\"\n sx={{\n color: \"text.disabled\",\n ml: 0.5,\n fontFamily: 'inherit',\n fontSize: '0.7rem',\n fontWeight: 400\n }}>\n {currency}\n </Typography>\n )}\n </Typography>\n );\n}\n","'use client';\n\nimport type { Dayjs } from 'dayjs';\n\nimport { useState, useCallback } from 'react';\nimport dayjs from 'dayjs';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type DateRangeValue = Dayjs | null;\n\nexport interface UseDateRangePickerReturn {\n startDate: DateRangeValue;\n endDate: DateRangeValue;\n onChangeStartDate: (value: DateRangeValue) => void;\n onChangeEndDate: (value: DateRangeValue) => void;\n open: boolean;\n onOpen: () => void;\n onClose: () => void;\n onReset: () => void;\n selected: boolean;\n error: boolean;\n label: string;\n shortLabel: string;\n setStartDate: React.Dispatch<React.SetStateAction<DateRangeValue>>;\n setEndDate: React.Dispatch<React.SetStateAction<DateRangeValue>>;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction isAfter(start: DateRangeValue, end: DateRangeValue): boolean {\n if (!start || !end) return false;\n return start.isAfter(end);\n}\n\nfunction formatRangeLabel(start: DateRangeValue, end: DateRangeValue, full?: boolean): string {\n if (!start || !end) return '';\n if (!start.isValid() || !end.isValid() || start.isAfter(end)) return '';\n\n if (full) {\n return `${start.format('DD MMM YYYY')} - ${end.format('DD MMM YYYY')}`;\n }\n\n if (start.isSame(end, 'day')) return end.format('DD MMM YYYY');\n if (start.isSame(end, 'month')) return `${start.format('DD')} - ${end.format('DD MMM YYYY')}`;\n if (start.isSame(end, 'year')) return `${start.format('DD MMM')} - ${end.format('DD MMM YYYY')}`;\n return `${start.format('DD MMM YYYY')} - ${end.format('DD MMM YYYY')}`;\n}\n\n// ---------------------------------------------------------------------------\n// Hook\n// ---------------------------------------------------------------------------\n\nexport function useDateRangePicker(\n initialStart: DateRangeValue = null,\n initialEnd: DateRangeValue = null\n): UseDateRangePickerReturn {\n const [open, setOpen] = useState(false);\n const [startDate, setStartDate] = useState<DateRangeValue>(initialStart);\n const [endDate, setEndDate] = useState<DateRangeValue>(initialEnd);\n\n const error = isAfter(startDate, endDate);\n\n const onOpen = useCallback(() => setOpen(true), []);\n const onClose = useCallback(() => setOpen(false), []);\n\n const onChangeStartDate = useCallback((value: DateRangeValue) => {\n setStartDate(value);\n }, []);\n\n const onChangeEndDate = useCallback(\n (value: DateRangeValue) => {\n if (error) setEndDate(null);\n setEndDate(value);\n },\n [error]\n );\n\n const onReset = useCallback(() => {\n setStartDate(null);\n setEndDate(null);\n }, []);\n\n return {\n startDate,\n endDate,\n onChangeStartDate,\n onChangeEndDate,\n open,\n onOpen,\n onClose,\n onReset,\n error,\n selected: !!startDate && !!endDate,\n label: formatRangeLabel(startDate, endDate, true),\n shortLabel: formatRangeLabel(startDate, endDate),\n setStartDate,\n setEndDate,\n };\n}\n\n/**\n * Parse a YYYY-MM-DD string to Dayjs or null.\n */\nexport function parseDateString(value: string | undefined | null): DateRangeValue {\n if (!value) return null;\n const d = dayjs(value);\n return d.isValid() ? d : null;\n}\n\n/**\n * Format a Dayjs value to YYYY-MM-DD string or empty string.\n */\nexport function formatDateString(value: DateRangeValue): string {\n if (!value || !value.isValid()) return '';\n return value.format('YYYY-MM-DD');\n}\n","'use client';\n\n/**\n * FlagIcon — purely visual country-flag wrapper.\n *\n * Asset-free by design. The consumer supplies the SVG / PNG URL via\n * the `src` prop; Prism stays publishable without bundling 250+ flag\n * images. The wrapper handles the chrome — fixed aspect ratio,\n * border-radius variants (rounded / circle / square), graceful\n * fallback when `src` is missing or fails to load (an outlined\n * neutral globe glyph).\n *\n * Usage:\n * <FlagIcon src=\"/assets/countries/ru.svg\" alt=\"Russia\" />\n * <FlagIcon src={getFlagSrc('ru')} shape=\"circle\" size={20} />\n */\n\nimport type { ReactNode } from 'react';\nimport { useState } from 'react';\nimport Box from '@mui/material/Box';\nimport { styled } from '@mui/material/styles';\n\nexport type FlagShape = 'rounded' | 'circle' | 'square';\n\nexport interface FlagIconProps {\n /** Flag image URL. When missing, falls back to a neutral globe glyph. */\n src?: string | null;\n /** Accessible label (country name). Falls back to `code` or empty string. */\n alt?: string;\n /** Optional ISO code — surfaced in the `aria-label` when `alt` isn't provided. */\n code?: string | null;\n /** Visual shape. Default `rounded` (4px radius); `circle` clips to a disc. */\n shape?: FlagShape;\n /**\n * Height in pixels. Width is computed at the 4:3 aspect that\n * matches the bundled SVG set; the wrapper stays square in\n * `circle` mode so the disc isn't squashed.\n */\n size?: number;\n /** Additional className. */\n className?: string;\n}\n\nexport function FlagIcon({\n src,\n alt,\n code,\n shape = 'rounded',\n size = 20,\n className,\n}: FlagIconProps): ReactNode {\n const [errored, setErrored] = useState(false);\n // Circle mode forces a 1:1 frame (otherwise the 4:3 SVG becomes an\n // oval). Other shapes keep the natural aspect ratio.\n const width = shape === 'circle' ? size : Math.round((size * 4) / 3);\n const radius = shape === 'circle' ? '50%' : shape === 'square' ? '0' : '3px';\n const accessibleLabel = alt ?? (code ? code.toUpperCase() : '');\n\n if (!src || errored) {\n return (\n <FlagFallback\n className={className}\n sx={{ width, height: size, borderRadius: radius }}\n aria-label={accessibleLabel || undefined}\n >\n {/* Inline globe glyph — cheaper than a font / emoji,\n renders identically across platforms. */}\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" width=\"60%\" height=\"60%\">\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <path d=\"M3 12h18M12 3a14 14 0 010 18M12 3a14 14 0 000 18\" />\n </svg>\n </FlagFallback>\n );\n }\n\n return (\n <FlagFrame\n className={className}\n sx={{ width, height: size, borderRadius: radius }}\n >\n <FlagImg\n src={src}\n alt={accessibleLabel}\n loading=\"lazy\"\n onError={() => setErrored(true)}\n />\n </FlagFrame>\n );\n}\n\nconst FlagFrame = styled('span')(({ theme }) => ({\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'hidden',\n flexShrink: 0,\n // Neutral 1px outline so flags with white edges (e.g. JP, CY) stay\n // legible on light surfaces. Uses an `inset` shadow rather than a\n // border to avoid disturbing the flag's intrinsic size.\n boxShadow: `inset 0 0 0 1px ${theme.palette.divider}`,\n}));\n\nconst FlagImg = styled('img')({\n width: '100%',\n height: '100%',\n display: 'block',\n objectFit: 'cover',\n // Sharpen the rasterised SVG on Hi-DPI; no effect on vector but\n // costs nothing. Pixelated would be wrong for a flag, so the\n // browser default (auto smoothing) wins.\n});\n\nconst FlagFallback = styled('span')(({ theme }) => ({\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n color: theme.palette.text.disabled,\n backgroundColor:\n theme.palette.mode === 'dark'\n ? theme.palette.action.hover\n : theme.palette.action.selected,\n boxShadow: `inset 0 0 0 1px ${theme.palette.divider}`,\n}));\n","'use client';\n\n/**\n * CountrySelect — minimalist, localised country picker.\n *\n * Asset-free design: the consumer passes a typed `options` array\n * (Prism does not bundle the ISO 3166-1 list) and a `getFlagSrc`\n * resolver (Prism does not bundle 250+ flag SVGs). The portal supplies\n * both from its own `data/countries.ts` + `assets/countries/`, so\n * `@omnitron-dev/prism` stays under its current weight.\n *\n * The picker is Autocomplete-backed:\n * - searchable by the visible label (locale-resolved), the iso2\n * code, AND the alternate-locale name — typing \"Russ\" or \"Рос\"\n * both surface the same row.\n * - keyboard-friendly (arrow keys, Enter, Esc work natively from\n * MUI Autocomplete).\n * - rounded flag in the input adornment so the chosen country\n * reads at a glance even without expanding the dropdown.\n *\n * Value contract: `value` is the lowercase iso2 code (`\"ru\"`, `\"us\"`,\n * …) or `null`. The component never returns the country object —\n * callers look up the rest from their own dictionary if needed,\n * keeping the surface narrow and JSON-serialisable for forms.\n *\n * Usage:\n * <CountrySelect\n * value={form.countryCode}\n * onChange={(iso2) => form.setField('countryCode', iso2)}\n * options={COUNTRIES}\n * getFlagSrc={(iso2) => `/assets/countries/${iso2}.svg`}\n * getOptionLabel={(c) => locale === 'ru' ? c.ru : c.en}\n * label=\"Country\"\n * />\n */\n\nimport type { ReactNode, SyntheticEvent } from 'react';\nimport { useCallback, useMemo } from 'react';\nimport Autocomplete from '@mui/material/Autocomplete';\nimport TextField from '@mui/material/TextField';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport type { TextFieldProps } from '@mui/material/TextField';\nimport type { AutocompleteProps } from '@mui/material/Autocomplete';\n\nimport { FlagIcon } from './flag-icon';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\n/**\n * Generic shape the picker understands. The consumer's full Country\n * type can extend this — we only read what we need.\n *\n * `iso2` MUST be lowercase. Renderers compare and lookup by lowercase\n * throughout the picker; mixing case will quietly desynchronise the\n * selected state from the option list.\n */\nexport interface CountryOption {\n iso2: string;\n en: string;\n ru: string;\n /** Optional extras (iso3, phone, …) the consumer may use elsewhere. */\n [key: string]: unknown;\n}\n\nexport interface CountrySelectProps {\n /** Currently selected ISO 3166-1 alpha-2 code (lowercase) or null. */\n value: string | null;\n /** Called with the new iso2 code (lowercase) or null when cleared. */\n onChange: (iso2: string | null) => void;\n /** Full country list. Consumer owns the data; Prism does not bundle. */\n options: ReadonlyArray<CountryOption>;\n /** Flag URL resolver. Receives lowercase iso2, returns absolute or relative URL. */\n getFlagSrc?: (iso2: string) => string | null | undefined;\n /**\n * Locale-aware label resolver. Defaults to the `en` field.\n * Pass `(c) => locale === 'ru' ? c.ru : c.en` from the host app's\n * i18n hook to render in the active language.\n */\n getOptionLabel?: (c: CountryOption) => string;\n /** Field label (rendered by the underlying TextField). */\n label?: string;\n /** Placeholder text. */\n placeholder?: string;\n /** Helper text below the input. */\n helperText?: ReactNode;\n /** Error state (shows the input red, helperText switches to error.main). */\n error?: boolean;\n /** Disable the field entirely. */\n disabled?: boolean;\n /** Take full width of the container. */\n fullWidth?: boolean;\n /** Compact / dense variant. */\n size?: 'small' | 'medium';\n /** Override the underlying TextField props (variant, sx, slotProps, …). */\n textFieldProps?: Partial<TextFieldProps>;\n /** Forwarded Autocomplete props for niche tweaks (sx, ListboxProps, …). */\n autocompleteProps?: Partial<\n Omit<\n AutocompleteProps<CountryOption, false, false, false>,\n 'value' | 'onChange' | 'options' | 'renderInput' | 'getOptionLabel'\n >\n >;\n /**\n * Sentinel value emitted when the user picks the synthetic\n * \"Worldwide\" row. When set, an extra pinned row appears at the\n * top of the dropdown with a globe icon instead of a flag.\n * Use a value that cannot collide with any ISO 3166-1 alpha-2\n * code (e.g. `'world'` or `'*'`). Defaults to undefined → no row.\n */\n worldwideValue?: string;\n /**\n * Already-localised label for the worldwide row. Consumer pulls\n * this from i18n (e.g. `t('common.worldwide')`). Required when\n * `worldwideValue` is set.\n */\n worldwideLabel?: string;\n}\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\nexport function CountrySelect({\n value,\n onChange,\n options,\n getFlagSrc,\n getOptionLabel,\n label,\n placeholder,\n helperText,\n error,\n disabled,\n fullWidth = true,\n size = 'small',\n textFieldProps,\n autocompleteProps,\n worldwideValue,\n worldwideLabel,\n}: CountrySelectProps): ReactNode {\n // Resolve the visible label per option. Defaults to `en` so the\n // picker still renders something sensible when the host app forgets\n // to pass `getOptionLabel`.\n const label_ = useCallback(\n (c: CountryOption) => {\n // Synthetic worldwide row carries its localised label directly\n // in the `en` field (we mirror it into `ru` too, see below).\n if (worldwideValue && c.iso2 === worldwideValue) {\n return worldwideLabel ?? c.en;\n }\n return getOptionLabel ? getOptionLabel(c) : c.en;\n },\n [getOptionLabel, worldwideValue, worldwideLabel],\n );\n\n // Build the option set. When `worldwideValue` is set, prepend a\n // synthetic row so it sits at the top of the dropdown. We use a\n // pseudo iso2 that the consumer controls (e.g. `'world'`) so it\n // never collides with real ISO codes.\n const optionsWithWorld = useMemo(() => {\n if (!worldwideValue) return options as CountryOption[];\n const synthetic: CountryOption = {\n iso2: worldwideValue,\n en: worldwideLabel ?? 'Worldwide',\n ru: worldwideLabel ?? 'Worldwide',\n };\n return [synthetic, ...options];\n }, [options, worldwideValue, worldwideLabel]);\n\n // Lookup map for O(1) value→option resolution. Recomputed when the\n // `options` reference changes — callers should memoise the array\n // so this map stays stable.\n const byIso2 = useMemo(() => {\n const map = new Map<string, CountryOption>();\n for (const o of optionsWithWorld) map.set(o.iso2.toLowerCase(), o);\n return map;\n }, [optionsWithWorld]);\n\n const selected = value ? byIso2.get(value.toLowerCase()) ?? null : null;\n const isWorld = !!(worldwideValue && selected && selected.iso2 === worldwideValue);\n\n const handleChange = useCallback(\n (_: SyntheticEvent, next: CountryOption | null) => {\n onChange(next ? next.iso2.toLowerCase() : null);\n },\n [onChange],\n );\n\n // Search filter — match against the resolved label, iso2, AND the\n // other-locale name so the user can type \"Russ\" or \"Рос\" and find\n // the same row regardless of the active UI language.\n const filterOptions = useCallback(\n (opts: CountryOption[], state: { inputValue: string }) => {\n const q = state.inputValue.trim().toLowerCase();\n if (!q) return opts;\n return opts.filter((o) => {\n if (o.iso2.toLowerCase().includes(q)) return true;\n if (label_(o).toLowerCase().includes(q)) return true;\n // Cross-locale search: always check both en and ru.\n if (o.en.toLowerCase().includes(q)) return true;\n if (o.ru.toLowerCase().includes(q)) return true;\n return false;\n });\n },\n [label_],\n );\n\n return (\n <Autocomplete<CountryOption, false, false, false>\n value={selected}\n onChange={handleChange}\n options={optionsWithWorld}\n getOptionLabel={label_}\n isOptionEqualToValue={(a, b) => a.iso2.toLowerCase() === b.iso2.toLowerCase()}\n filterOptions={filterOptions}\n disabled={disabled}\n fullWidth={fullWidth}\n size={size}\n autoHighlight\n // Keep popup snappy on long lists — virtualisation would be\n // nicer for >500 rows but 250 ISO countries paint in well\n // under one frame at the default rendering cost.\n renderOption={(props, option) => {\n const { key, ...rest } = props as React.HTMLAttributes<HTMLLIElement> & { key: string };\n const isWorldRow = worldwideValue !== undefined && option.iso2 === worldwideValue;\n const src = isWorldRow ? null : getFlagSrc?.(option.iso2.toLowerCase()) ?? null;\n return (\n <Box\n component=\"li\"\n key={key}\n {...rest}\n sx={{\n display: 'flex',\n alignItems: 'center',\n gap: 1.25,\n px: 1.25,\n py: 0.75,\n // Pin the worldwide row visually with a divider so the\n // user reads it as a separate semantic group.\n ...(isWorldRow && {\n borderBottom: '1px solid',\n borderColor: 'divider',\n mb: 0.5,\n }),\n }}\n >\n <FlagIcon src={src} alt={label_(option)} code={option.iso2} />\n <Typography\n variant=\"body2\"\n sx={{ flex: 1, fontWeight: isWorldRow ? 600 : 400 }}\n >\n {label_(option)}\n </Typography>\n {!isWorldRow && (\n <Typography\n variant=\"caption\"\n sx={{\n color: 'text.disabled',\n fontFamily: 'monospace',\n textTransform: 'uppercase',\n }}\n >\n {option.iso2}\n </Typography>\n )}\n </Box>\n );\n }}\n renderInput={(params) => {\n const src = !isWorld && selected && getFlagSrc\n ? getFlagSrc(selected.iso2.toLowerCase()) ?? null\n : null;\n const startAdornment = selected ? (\n <InputAdornment position=\"start\" sx={{ ml: 0.75, mr: -0.5 }}>\n <FlagIcon\n src={src}\n alt={selected ? label_(selected) : ''}\n code={isWorld ? undefined : selected?.iso2}\n />\n </InputAdornment>\n ) : null;\n\n return (\n <TextField\n {...params}\n label={label}\n placeholder={placeholder}\n helperText={helperText}\n error={error}\n {...textFieldProps}\n slotProps={{\n ...(textFieldProps?.slotProps ?? {}),\n // MUI v9 renamed Autocomplete renderInput's\n // `InputProps` / `inputProps` to `slotProps.{input,\n // htmlInput}`. Merge our flag adornment on top of the\n // input slot while keeping the chevron+clear adornments\n // that Autocomplete itself injects.\n input: {\n ...params.slotProps.input,\n ...((textFieldProps?.slotProps as { input?: object } | undefined)?.input ?? {}),\n startAdornment: startAdornment ?? params.slotProps.input.startAdornment,\n },\n htmlInput: {\n ...params.slotProps.htmlInput,\n autoComplete: 'off',\n },\n }}\n />\n );\n }}\n {...(autocompleteProps as object)}\n />\n );\n}\n","/**\n * Class Name Factory\n *\n * Creates prefixed CSS class names for consistent component styling.\n * Uses a configurable prefix to avoid collisions with other libraries.\n *\n * @module @omnitron-dev/prism/utils/create-classes\n */\n\n// =============================================================================\n// CONFIGURATION\n// =============================================================================\n\n/**\n * Default class prefix for Prism components.\n * Can be overridden via PRISM_CLASS_PREFIX environment variable.\n */\nexport const DEFAULT_CLASS_PREFIX = 'prism';\n\nlet classPrefix = DEFAULT_CLASS_PREFIX;\n\n/**\n * Set the global class prefix for all Prism components.\n *\n * @param prefix - New class prefix to use\n *\n * @example\n * ```ts\n * setClassPrefix('my-app');\n * createClasses('button__root'); // => \"my-app__button__root\"\n * ```\n */\nexport function setClassPrefix(prefix: string): void {\n classPrefix = prefix;\n}\n\n/**\n * Get the current class prefix.\n *\n * @returns Current class prefix\n */\nexport function getClassPrefix(): string {\n return classPrefix;\n}\n\n// =============================================================================\n// CLASS FACTORY\n// =============================================================================\n\n/**\n * Create a prefixed CSS class name.\n *\n * @param className - Class name suffix (e.g., \"button__root\")\n * @returns Prefixed class name (e.g., \"prism__button__root\")\n *\n * @example\n * ```ts\n * createClasses('chart__root')\n * // => \"prism__chart__root\"\n *\n * createClasses('chart__loading')\n * // => \"prism__chart__loading\"\n * ```\n */\nexport function createClasses(className: string): string {\n return `${classPrefix}__${className}`;\n}\n\n/**\n * Create multiple prefixed CSS class names.\n *\n * @param classNames - Array of class name suffixes\n * @returns Object mapping original names to prefixed names\n *\n * @example\n * ```ts\n * const classes = createClassesObject(['root', 'loading', 'label']);\n * // => { root: \"prism__root\", loading: \"prism__loading\", label: \"prism__label\" }\n * ```\n */\nexport function createClassesObject<T extends string>(classNames: readonly T[]): Record<T, string> {\n return classNames.reduce(\n (acc, name) => {\n acc[name] = createClasses(name);\n return acc;\n },\n {} as Record<T, string>\n );\n}\n\n/**\n * Create a class name factory for a specific component.\n *\n * @param componentName - Component name (e.g., \"chart\", \"button\")\n * @returns Function that creates prefixed class names for that component\n *\n * @example\n * ```ts\n * const chartClass = createComponentClasses('chart');\n * chartClass('root'); // => \"prism__chart__root\"\n * chartClass('loading'); // => \"prism__chart__loading\"\n * ```\n */\nexport function createComponentClasses(componentName: string): (suffix: string) => string;\n\n/**\n * Create a class name object for a specific component with predefined suffixes.\n *\n * @param componentName - Component name (e.g., \"chart\", \"button\")\n * @param suffixes - Array of class name suffixes\n * @returns Object mapping suffix names to prefixed class names\n *\n * @example\n * ```ts\n * const chartClasses = createComponentClasses('chart', ['root', 'loading', 'label'] as const);\n * chartClasses.root; // => \"prism__chart__root\"\n * chartClasses.loading; // => \"prism__chart__loading\"\n * ```\n */\nexport function createComponentClasses<T extends string>(\n componentName: string,\n suffixes: readonly T[]\n): Record<T, string>;\n\nexport function createComponentClasses<T extends string>(\n componentName: string,\n suffixes?: readonly T[]\n): ((suffix: string) => string) | Record<T, string> {\n if (suffixes) {\n return suffixes.reduce(\n (acc, suffix) => {\n acc[suffix] = createClasses(`${componentName}__${suffix}`);\n return acc;\n },\n {} as Record<T, string>\n );\n }\n return (suffix: string) => createClasses(`${componentName}__${suffix}`);\n}\n","import type { BoxProps } from '@mui/material/Box';\nimport type { Theme, SxProps, CSSObject } from '@mui/material/styles';\n\nimport { useRef, useState, useEffect } from 'react';\nimport { m, useTransform, useMotionValue, useAnimationFrame, useMotionTemplate } from 'framer-motion';\n\nimport Box from '@mui/material/Box';\nimport { useTheme } from '@mui/material/styles';\n\nimport { createClasses } from '../../utils/create-classes.js';\n\n// ----------------------------------------------------------------------\n\nexport const animateBorderClasses = {\n root: createClasses('animate__border__root'),\n primaryBorder: createClasses('animate__border__primary'),\n secondaryBorder: createClasses('animate__border__secondary'),\n svgWrapper: createClasses('animate__border__svg__wrapper'),\n movingShape: createClasses('animate__border__moving__shape'),\n};\n\n// ----------------------------------------------------------------------\n\n/**\n * Portal-old compatible borderGradient mixin.\n * Uses CSS mask to create a ring from the padding area.\n * `currentColor` controls the ring color when no explicit color is given.\n */\nfunction borderGradient(props?: { color?: string; padding?: string }): CSSObject {\n const { color, padding = '2px' } = props ?? {};\n\n return {\n padding,\n inset: 0,\n width: '100%',\n content: '\"\"',\n height: '100%',\n margin: 'auto',\n position: 'absolute',\n borderRadius: 'inherit',\n mask: 'linear-gradient(#FFF 0 0) content-box, linear-gradient(#FFF 0 0)',\n WebkitMask: 'linear-gradient(#FFF 0 0) content-box, linear-gradient(#FFF 0 0)',\n maskComposite: 'exclude',\n WebkitMaskComposite: 'xor',\n ...(color && { background: color }),\n };\n}\n\n// ----------------------------------------------------------------------\n\ntype BorderStyleProps = {\n /** Border stroke width as CSS string (e.g. '1px', '2px'). Default '2px'. */\n width?: string;\n /** Size (px) of the radial gradient glow that moves along the border. */\n size?: number;\n sx?: SxProps<Theme>;\n};\n\nexport type AnimateBorderProps = BoxProps & {\n /** Animation duration in seconds. Default 8. */\n duration?: number;\n slotProps?: {\n primaryBorder?: BorderStyleProps;\n secondaryBorder?: BorderStyleProps;\n /** Static outline color behind the animation. */\n outlineColor?: string | ((theme: Theme) => string);\n svgSettings?: {\n rx?: string;\n ry?: string;\n };\n };\n};\n\n// ----------------------------------------------------------------------\n\nexport function AnimateBorder({ sx, children, duration, slotProps, className, ...other }: AnimateBorderProps) {\n const theme = useTheme();\n\n const rootRef = useRef<HTMLDivElement>(null);\n const primaryBorderRef = useRef<HTMLSpanElement>(null);\n\n const [isHidden, setIsHidden] = useState(false);\n\n const secondaryBorderStyles = useComputedElementStyles(theme, primaryBorderRef);\n\n useEffect(() => {\n const handleVisibility = () => {\n if (rootRef.current) {\n const displayStyle = getComputedStyle(rootRef.current).display;\n setIsHidden(displayStyle === 'none');\n }\n };\n\n handleVisibility();\n\n window.addEventListener('resize', handleVisibility);\n\n return () => {\n window.removeEventListener('resize', handleVisibility);\n };\n }, []);\n\n const outlineColor =\n typeof slotProps?.outlineColor === 'function' ? slotProps?.outlineColor(theme) : slotProps?.outlineColor;\n\n const borderProps = {\n duration,\n isHidden,\n rx: slotProps?.svgSettings?.rx,\n ry: slotProps?.svgSettings?.ry,\n };\n\n const renderPrimaryBorder = () => (\n <MovingBorder\n {...borderProps}\n ref={primaryBorderRef}\n size={slotProps?.primaryBorder?.size}\n sx={[\n {\n ...borderGradient({ padding: slotProps?.primaryBorder?.width }),\n },\n ...(Array.isArray(slotProps?.primaryBorder?.sx)\n ? (slotProps!.primaryBorder!.sx as any[])\n : [slotProps?.primaryBorder?.sx]),\n ]}\n />\n );\n\n const renderSecondaryBorder = () =>\n slotProps?.secondaryBorder && (\n <MovingBorder\n {...borderProps}\n size={slotProps?.secondaryBorder?.size ?? slotProps?.primaryBorder?.size}\n sx={[\n {\n ...borderGradient({\n padding: slotProps?.secondaryBorder?.width ?? secondaryBorderStyles.padding,\n }),\n borderRadius: secondaryBorderStyles.borderRadius,\n transform: 'scale(-1, -1)',\n },\n ...(Array.isArray(slotProps?.secondaryBorder?.sx)\n ? (slotProps!.secondaryBorder!.sx as any[])\n : [slotProps?.secondaryBorder?.sx]),\n ]}\n />\n );\n\n return (\n <Box\n dir=\"ltr\"\n ref={rootRef}\n className={[animateBorderClasses.root, className].filter(Boolean).join(' ')}\n sx={[\n {\n minWidth: 40,\n minHeight: 40,\n overflow: 'hidden',\n position: 'relative',\n width: 'fit-content',\n '&::before': borderGradient({\n color: outlineColor,\n padding: slotProps?.primaryBorder?.width,\n }),\n ...(!!children && {\n minWidth: 'unset',\n minHeight: 'unset',\n }),\n },\n ...(Array.isArray(sx) ? sx : [sx]),\n ]}\n {...other}\n >\n {renderPrimaryBorder()}\n {renderSecondaryBorder()}\n {children}\n </Box>\n );\n}\n\n// ----------------------------------------------------------------------\n\ntype MovingBorderProps = BoxProps<'span'> & {\n rx?: string;\n ry?: string;\n duration?: number;\n isHidden?: boolean;\n size?: BorderStyleProps['size'];\n};\n\nfunction MovingBorder({ sx, size, isHidden, rx = '30%', ry = '30%', duration = 8, ...other }: MovingBorderProps) {\n const svgRectRef = useRef<SVGRectElement>(null);\n const progress = useMotionValue<number>(0);\n\n const updateAnimationFrame = (time: number) => {\n if (!svgRectRef.current) return;\n try {\n const pathLength = svgRectRef.current.getTotalLength();\n const pixelsPerMs = pathLength / (duration * 1000);\n progress.set((time * pixelsPerMs) % pathLength);\n } catch {\n return;\n }\n };\n\n const calculateTransform = (val: number) => {\n if (!svgRectRef.current) return { x: 0, y: 0 };\n try {\n const point = svgRectRef.current.getPointAtLength(val);\n return point ? { x: point.x, y: point.y } : { x: 0, y: 0 };\n } catch {\n return { x: 0, y: 0 };\n }\n };\n\n useAnimationFrame((time) => (!isHidden ? updateAnimationFrame(time) : undefined));\n\n const x = useTransform(progress, (val) => calculateTransform(val).x);\n const y = useTransform(progress, (val) => calculateTransform(val).y);\n const transform = useMotionTemplate`translateX(${x}px) translateY(${y}px) translateX(-50%) translateY(-50%)`;\n\n return (\n <Box component=\"span\" sx={[{ textAlign: 'initial' }, ...(Array.isArray(sx) ? sx : [sx])]} {...other}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n preserveAspectRatio=\"none\"\n width=\"100%\"\n height=\"100%\"\n className={animateBorderClasses.svgWrapper}\n style={{ position: 'absolute' }}\n >\n <rect ref={svgRectRef} fill=\"none\" width=\"100%\" height=\"100%\" rx={rx} ry={ry} />\n </svg>\n\n <Box\n component={m.span}\n style={{ transform }}\n className={animateBorderClasses.movingShape}\n sx={{\n width: size,\n height: size,\n filter: 'blur(8px)',\n position: 'absolute',\n background: 'radial-gradient(currentColor 40%, transparent 80%)',\n }}\n />\n </Box>\n );\n}\n\n// ----------------------------------------------------------------------\n\nfunction useComputedElementStyles(theme: Theme, ref: React.RefObject<HTMLSpanElement | null>) {\n const [computedStyles, setComputedStyles] = useState<CSSObject | null>(null);\n\n const isRtl = theme.direction === 'rtl';\n\n useEffect(() => {\n if (ref.current) {\n const style = getComputedStyle(ref.current);\n setComputedStyles({\n paddingTop: style.paddingBottom,\n paddingBottom: style.paddingTop,\n paddingLeft: isRtl ? style.paddingLeft : style.paddingRight,\n paddingRight: isRtl ? style.paddingRight : style.paddingLeft,\n borderTopLeftRadius: isRtl ? style.borderBottomLeftRadius : style.borderBottomRightRadius,\n borderTopRightRadius: isRtl ? style.borderBottomRightRadius : style.borderBottomLeftRadius,\n borderBottomLeftRadius: isRtl ? style.borderTopLeftRadius : style.borderTopRightRadius,\n borderBottomRightRadius: isRtl ? style.borderTopRightRadius : style.borderTopLeftRadius,\n });\n }\n }, [ref, isRtl]);\n\n return {\n padding: `${computedStyles?.paddingTop} ${computedStyles?.paddingRight} ${computedStyles?.paddingBottom} ${computedStyles?.paddingLeft}`,\n borderRadius: `${computedStyles?.borderTopLeftRadius} ${computedStyles?.borderTopRightRadius} ${computedStyles?.borderBottomRightRadius} ${computedStyles?.borderBottomLeftRadius}`,\n };\n}\n","import { domMax, LazyMotion } from 'framer-motion';\n\n// ----------------------------------------------------------------------\n\nexport type MotionLazyProps = {\n children: React.ReactNode;\n};\n\nexport function MotionLazy({ children }: MotionLazyProps) {\n return (\n <LazyMotion strict features={domMax}>\n {children}\n </LazyMotion>\n );\n}\n","'use client';\n\n/**\n * Avatar Component\n *\n * Enhanced avatar with fallback initials and group support.\n *\n * @module @omnitron-dev/prism/components/avatar\n */\n\nimport type { ReactNode, CSSProperties } from 'react';\nimport { forwardRef, useMemo } from 'react';\nimport MuiAvatar from '@mui/material/Avatar';\nimport AvatarGroup from '@mui/material/AvatarGroup';\nimport { styled, useTheme } from '@mui/material/styles';\nimport type { AvatarProps as MuiAvatarProps } from '@mui/material/Avatar';\nimport type { AvatarGroupProps as MuiAvatarGroupProps } from '@mui/material/AvatarGroup';\nimport type { Palette } from '@mui/material/styles';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nexport type AvatarShape = 'circular' | 'rounded' | 'square';\n\nexport interface AvatarProps extends Omit<MuiAvatarProps, 'variant'> {\n /** Avatar size preset */\n size?: AvatarSize;\n /** Avatar shape */\n shape?: AvatarShape;\n /** User name for fallback initials */\n name?: string;\n /** Show online indicator */\n online?: boolean;\n /** Show offline indicator */\n offline?: boolean;\n /** Badge content (e.g., notification count) */\n badge?: ReactNode;\n /** Custom badge color */\n badgeColor?: 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info';\n}\n\n// =============================================================================\n// UTILS\n// =============================================================================\n\nconst SIZES: Record<AvatarSize, number> = {\n xs: 24,\n sm: 32,\n md: 40,\n lg: 56,\n xl: 80,\n};\n\nconst FONT_SIZES: Record<AvatarSize, number> = {\n xs: 10,\n sm: 12,\n md: 14,\n lg: 20,\n xl: 28,\n};\n\n/**\n * Generate initials from a name.\n */\nfunction getInitials(name: string): string {\n const words = name.trim().split(/\\s+/);\n if (words.length === 1) {\n return words[0].slice(0, 2).toUpperCase();\n }\n return (words[0][0] + words[words.length - 1][0]).toUpperCase();\n}\n\n/**\n * Generate a consistent color based on a string.\n */\nfunction stringToColor(str: string): string {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n hash = str.charCodeAt(i) + ((hash << 5) - hash);\n }\n\n const colors = [\n '#F44336',\n '#E91E63',\n '#9C27B0',\n '#673AB7',\n '#3F51B5',\n '#2196F3',\n '#03A9F4',\n '#00BCD4',\n '#009688',\n '#4CAF50',\n '#8BC34A',\n '#CDDC39',\n '#FFC107',\n '#FF9800',\n '#FF5722',\n '#795548',\n ];\n\n return colors[Math.abs(hash) % colors.length];\n}\n\n// =============================================================================\n// STYLED COMPONENT\n// =============================================================================\n\ninterface StyledAvatarProps {\n ownerState: {\n size: AvatarSize;\n shape: AvatarShape;\n hasImage: boolean;\n bgColor?: string;\n };\n}\n\nconst StyledAvatar = styled(MuiAvatar, {\n shouldForwardProp: (prop) => prop !== 'ownerState',\n})<StyledAvatarProps>(({ theme, ownerState }) => {\n const { size, shape, hasImage, bgColor } = ownerState;\n const dimension = SIZES[size];\n const fontSize = FONT_SIZES[size];\n\n const borderRadius = typeof theme.shape.borderRadius === 'number' ? theme.shape.borderRadius : 4;\n\n return {\n width: dimension,\n height: dimension,\n fontSize,\n fontWeight: 600,\n ...(shape === 'rounded' && {\n borderRadius: borderRadius * 1.5,\n }),\n ...(shape === 'square' && {\n borderRadius: 0,\n }),\n ...(!hasImage &&\n bgColor && {\n backgroundColor: bgColor,\n color: theme.palette.getContrastText(bgColor),\n }),\n };\n});\n\n// =============================================================================\n// WRAPPER FOR BADGES\n// =============================================================================\n\ninterface AvatarWrapperProps {\n children: ReactNode;\n online?: boolean;\n offline?: boolean;\n badge?: ReactNode;\n badgeColor?: 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info';\n size: AvatarSize;\n}\n\nfunction AvatarWrapper({\n children,\n online,\n offline,\n badge,\n badgeColor = 'error',\n size,\n}: AvatarWrapperProps): ReactNode {\n const theme = useTheme();\n const showIndicator = online || offline;\n const indicatorSize = size === 'xs' ? 6 : size === 'sm' ? 8 : 10;\n\n if (!showIndicator && !badge) {\n return children;\n }\n\n // Get theme-aware badge color\n const getBadgeBackgroundColor = (color: keyof Palette): string => {\n const paletteColor = theme.palette[color];\n if (paletteColor && typeof paletteColor === 'object' && 'main' in paletteColor) {\n return paletteColor.main;\n }\n return theme.palette.error.main;\n };\n\n const wrapperStyle: CSSProperties = {\n position: 'relative',\n display: 'inline-flex',\n };\n\n const indicatorStyle: CSSProperties = {\n position: 'absolute',\n bottom: 0,\n right: 0,\n width: indicatorSize,\n height: indicatorSize,\n borderRadius: '50%',\n border: `2px solid ${theme.palette.background.paper}`,\n backgroundColor: online ? theme.palette.success.main : theme.palette.grey[400],\n };\n\n const badgeStyle: CSSProperties = {\n position: 'absolute',\n top: -4,\n right: -4,\n minWidth: 18,\n height: 18,\n padding: '0 4px',\n borderRadius: 9,\n fontSize: 10,\n fontWeight: 600,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.palette.common.white,\n backgroundColor: getBadgeBackgroundColor(badgeColor as keyof Palette),\n };\n\n return (\n <span style={wrapperStyle}>\n {children}\n {showIndicator && <span style={indicatorStyle} />}\n {badge && <span style={badgeStyle}>{badge}</span>}\n </span>\n );\n}\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\n/**\n * Avatar - Enhanced avatar with fallback initials.\n *\n * @example\n * ```tsx\n * // With image\n * <Avatar src=\"/avatar.jpg\" name=\"John Doe\" />\n *\n * // Fallback to initials\n * <Avatar name=\"John Doe\" />\n *\n * // With online indicator\n * <Avatar src=\"/avatar.jpg\" name=\"John Doe\" online />\n *\n * // With badge\n * <Avatar src=\"/avatar.jpg\" name=\"John Doe\" badge={3} />\n * ```\n */\nexport const Avatar = forwardRef<HTMLDivElement, AvatarProps>(function Avatar(\n { size = 'md', shape = 'circular', name, src, alt, online, offline, badge, badgeColor, children, sx, ...other },\n ref\n) {\n const initials = useMemo(() => {\n if (children) return null;\n return name ? getInitials(name) : null;\n }, [name, children]);\n\n const bgColor = useMemo(() => {\n if (src) return undefined;\n return name ? stringToColor(name) : undefined;\n }, [src, name]);\n\n const ownerState = {\n size,\n shape,\n hasImage: Boolean(src),\n bgColor,\n };\n\n const avatarContent = (\n <StyledAvatar ref={ref} src={src} alt={alt || name} ownerState={ownerState} sx={sx} {...other}>\n {children || initials}\n </StyledAvatar>\n );\n\n return (\n <AvatarWrapper online={online} offline={offline} badge={badge} badgeColor={badgeColor} size={size}>\n {avatarContent}\n </AvatarWrapper>\n );\n});\n\n// =============================================================================\n// AVATAR GROUP\n// =============================================================================\n\nexport interface CustomAvatarGroupProps extends Omit<MuiAvatarGroupProps, 'children'> {\n /** Avatar items */\n avatars: Array<{\n name?: string;\n src?: string;\n alt?: string;\n }>;\n /** Avatar size */\n size?: AvatarSize;\n /** Maximum avatars to show */\n max?: number;\n}\n\n/**\n * CustomAvatarGroup - Display multiple avatars in a group.\n *\n * @example\n * ```tsx\n * <CustomAvatarGroup\n * avatars={[\n * { name: 'John Doe', src: '/avatar1.jpg' },\n * { name: 'Jane Smith', src: '/avatar2.jpg' },\n * { name: 'Bob Wilson' },\n * ]}\n * max={3}\n * />\n * ```\n */\nexport function CustomAvatarGroup({ avatars, size = 'sm', max = 4, sx, ...other }: CustomAvatarGroupProps): ReactNode {\n return (\n <AvatarGroup max={max} sx={sx} {...other}>\n {avatars.map((avatar, index) => (\n <Avatar key={index} name={avatar.name} src={avatar.src} alt={avatar.alt || avatar.name} size={size} />\n ))}\n </AvatarGroup>\n );\n}\n","'use client';\n\n/**\n * Badge Component\n *\n * Notification badge and status indicator components.\n *\n * @module @omnitron-dev/prism/components/badge\n */\n\nimport type { ReactNode } from 'react';\nimport { forwardRef } from 'react';\nimport MuiBadge from '@mui/material/Badge';\nimport Box from '@mui/material/Box';\nimport { styled } from '@mui/material/styles';\nimport type { BadgeProps as MuiBadgeProps } from '@mui/material/Badge';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport type BadgeSize = 'small' | 'medium' | 'large';\n\nexport type BadgeVariant = 'standard' | 'dot' | 'online' | 'offline' | 'busy';\n\nexport type BadgeColor = 'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info';\n\nexport interface BadgeProps extends Omit<MuiBadgeProps, 'variant' | 'color' | 'content'> {\n /** Badge variant */\n variant?: BadgeVariant;\n /** Badge color */\n color?: BadgeColor;\n /** Badge size */\n size?: BadgeSize;\n}\n\n// =============================================================================\n// STYLED COMPONENT\n// =============================================================================\n\ninterface StyledBadgeProps {\n ownerState: {\n variant: BadgeVariant;\n color: BadgeColor;\n size: BadgeSize;\n };\n}\n\nconst StyledBadge = styled(MuiBadge, {\n shouldForwardProp: (prop) => prop !== 'ownerState',\n})<StyledBadgeProps>(({ theme, ownerState }) => {\n const { variant, color, size } = ownerState;\n\n // Size dimensions\n const sizeDimensions: Record<BadgeSize, { width: number; height: number; fontSize: number }> = {\n small: { width: 16, height: 16, fontSize: 10 },\n medium: { width: 20, height: 20, fontSize: 12 },\n large: { width: 24, height: 24, fontSize: 14 },\n };\n\n const { width, height, fontSize } = sizeDimensions[size];\n\n // Color mapping\n const colorMap: Record<BadgeColor, string> = {\n default: theme.palette.grey[500],\n primary: theme.palette.primary.main,\n secondary: theme.palette.secondary.main,\n success: theme.palette.success.main,\n warning: theme.palette.warning.main,\n error: theme.palette.error.main,\n info: theme.palette.info.main,\n };\n\n // Status color mapping\n const statusColors: Record<string, string> = {\n online: theme.palette.success.main,\n offline: theme.palette.grey[500],\n busy: theme.palette.error.main,\n };\n\n const isStatusVariant = variant === 'online' || variant === 'offline' || variant === 'busy';\n const isDotVariant = variant === 'dot' || isStatusVariant;\n const badgeColor = isStatusVariant ? statusColors[variant] : colorMap[color];\n\n return {\n '& .MuiBadge-badge': {\n minWidth: isDotVariant ? height / 2 : width,\n height: isDotVariant ? height / 2 : height,\n padding: isDotVariant ? 0 : '0 4px',\n fontSize,\n fontWeight: 600,\n backgroundColor: badgeColor,\n color: theme.palette.getContrastText(badgeColor),\n ...(isDotVariant && {\n borderRadius: '50%',\n }),\n // Add pulsing animation for online status\n ...(variant === 'online' && {\n '&::after': {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n borderRadius: '50%',\n animation: 'ripple 1.2s infinite ease-in-out',\n border: `1px solid ${theme.palette.success.main}`,\n content: '\"\"',\n },\n '@keyframes ripple': {\n '0%': {\n transform: 'scale(.8)',\n opacity: 1,\n },\n '100%': {\n transform: 'scale(2.4)',\n opacity: 0,\n },\n },\n }),\n },\n };\n});\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\n/**\n * Badge - Notification badge and status indicator.\n *\n * @example\n * ```tsx\n * // Standard badge with count\n * <Badge badgeContent={4} color=\"error\">\n * <MailIcon />\n * </Badge>\n *\n * // Dot badge\n * <Badge variant=\"dot\" color=\"primary\">\n * <NotificationsIcon />\n * </Badge>\n *\n * // Online status\n * <Badge variant=\"online\">\n * <Avatar src=\"/avatar.jpg\" />\n * </Badge>\n * ```\n */\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(function Badge(\n { variant = 'standard', color = 'error', size = 'medium', badgeContent, children, sx, ...other },\n ref\n) {\n const ownerState = { variant, color, size };\n\n const isStatusVariant = variant === 'online' || variant === 'offline' || variant === 'busy';\n const isDotVariant = variant === 'dot' || isStatusVariant;\n\n return (\n <StyledBadge\n ref={ref}\n ownerState={ownerState}\n badgeContent={isDotVariant ? undefined : badgeContent}\n variant={isDotVariant ? 'dot' : 'standard'}\n sx={sx}\n {...other}\n >\n {children}\n </StyledBadge>\n );\n});\n\n// =============================================================================\n// COUNT BADGE\n// =============================================================================\n\nexport interface CountBadgeProps {\n /** Count value */\n count: number;\n /** Maximum count before showing + */\n max?: number;\n /** Show zero count */\n showZero?: boolean;\n /** Color */\n color?: BadgeColor;\n /** Size */\n size?: BadgeSize;\n /** Additional styles */\n sx?: SxProps<Theme>;\n}\n\n/**\n * CountBadge - Standalone count badge without children.\n *\n * @example\n * ```tsx\n * <CountBadge count={42} />\n * <CountBadge count={150} max={99} /> // Shows \"99+\"\n * ```\n */\nexport function CountBadge({\n count,\n max = 99,\n showZero = false,\n color = 'error',\n size = 'medium',\n sx,\n}: CountBadgeProps): ReactNode {\n if (!showZero && count === 0) {\n return null;\n }\n\n const displayCount = count > max ? `${max}+` : count.toString();\n\n const sizeDimensions: Record<BadgeSize, { minWidth: number; height: number; fontSize: number }> = {\n small: { minWidth: 16, height: 16, fontSize: 10 },\n medium: { minWidth: 20, height: 20, fontSize: 12 },\n large: { minWidth: 24, height: 24, fontSize: 14 },\n };\n\n const { minWidth, height, fontSize } = sizeDimensions[size];\n\n const colorMap: Record<BadgeColor, string> = {\n default: '#9ca3af',\n primary: '#2563eb',\n secondary: '#7c3aed',\n success: '#22c55e',\n warning: '#f59e0b',\n error: '#ef4444',\n info: '#06b6d4',\n };\n\n const bgColor = colorMap[color];\n\n return (\n <Box\n component=\"span\"\n sx={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n minWidth,\n height,\n padding: '0 4px',\n borderRadius: height / 2,\n fontSize,\n fontWeight: 600,\n backgroundColor: bgColor,\n color: 'white',\n ...sx,\n }}\n >\n {displayCount}\n </Box>\n );\n}\n\n// =============================================================================\n// STATUS DOT\n// =============================================================================\n\nexport type StatusDotStatus = 'online' | 'offline' | 'busy' | 'away';\n\nexport interface StatusDotProps {\n /** Status type */\n status: StatusDotStatus;\n /** Size in pixels */\n size?: number;\n /** Show pulsing animation for online */\n pulse?: boolean;\n /** Additional styles */\n sx?: SxProps<Theme>;\n}\n\n/**\n * StatusDot - Standalone status indicator.\n *\n * @example\n * ```tsx\n * <StatusDot status=\"online\" />\n * <StatusDot status=\"busy\" size={12} />\n * ```\n */\nexport function StatusDot({ status, size = 8, pulse = true, sx }: StatusDotProps): ReactNode {\n const statusColors: Record<StatusDotStatus, string> = {\n online: '#22c55e',\n offline: '#9ca3af',\n busy: '#ef4444',\n away: '#f59e0b',\n };\n\n const color = statusColors[status];\n\n return (\n <Box\n component=\"span\"\n sx={{\n display: 'inline-block',\n width: size,\n height: size,\n borderRadius: '50%',\n backgroundColor: color,\n ...(pulse &&\n status === 'online' && {\n animation: 'pulse 2s infinite',\n }),\n ...sx,\n }}\n />\n );\n}\n","'use client';\n\n/**\n * Card Component\n *\n * Enhanced card component with variants and sections.\n *\n * @module @omnitron-dev/prism/components/card\n */\n\nimport type { ReactNode } from 'react';\nimport { forwardRef } from 'react';\nimport Box from '@mui/material/Box';\nimport MuiCard from '@mui/material/Card';\nimport CardHeader from '@mui/material/CardHeader';\nimport CardContent from '@mui/material/CardContent';\nimport CardActions from '@mui/material/CardActions';\nimport Typography from '@mui/material/Typography';\nimport Skeleton from '@mui/material/Skeleton';\nimport { styled, alpha } from '@mui/material/styles';\nimport type { CardProps as MuiCardProps } from '@mui/material/Card';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport type CardVariant = 'elevation' | 'outlined' | 'soft';\n\nexport interface CardProps extends Omit<MuiCardProps, 'variant' | 'title'> {\n /** Card variant */\n variant?: CardVariant;\n /** Card header title */\n title?: ReactNode;\n /** Card header subtitle */\n subheader?: ReactNode;\n /** Card header action */\n headerAction?: ReactNode;\n /** Card header styles */\n headerSx?: SxProps<Theme>;\n /** Card content styles */\n contentSx?: SxProps<Theme>;\n /** Card actions */\n actions?: ReactNode;\n /** Card actions styles */\n actionsSx?: SxProps<Theme>;\n /** Disable content padding */\n disablePadding?: boolean;\n}\n\n// =============================================================================\n// STYLED COMPONENT\n// =============================================================================\n\ninterface StyledCardProps {\n ownerState: {\n variant: CardVariant;\n };\n}\n\nconst StyledCard = styled(MuiCard, {\n shouldForwardProp: (prop) => prop !== 'ownerState',\n})<StyledCardProps>(({ theme, ownerState }) => {\n const { variant } = ownerState;\n\n const borderRadius = typeof theme.shape.borderRadius === 'number' ? theme.shape.borderRadius : 4;\n\n const softStyles = {\n border: 'none',\n boxShadow: 'none',\n backgroundColor: alpha(theme.palette.grey[500], 0.08),\n };\n\n return {\n position: 'relative',\n borderRadius: borderRadius * 2,\n ...(variant === 'soft' && softStyles),\n ...(variant === 'outlined' && {\n boxShadow: 'none',\n }),\n };\n});\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\n/**\n * Card - Enhanced card component with variants.\n *\n * @example\n * ```tsx\n * <Card title=\"Card Title\" subheader=\"Subtitle\">\n * Card content goes here\n * </Card>\n * ```\n *\n * @example\n * ```tsx\n * // Soft variant\n * <Card variant=\"soft\" title=\"Settings\">\n * <TextField label=\"Name\" />\n * </Card>\n * ```\n *\n * @example\n * ```tsx\n * // With actions\n * <Card\n * title=\"Confirm Action\"\n * actions={\n * <>\n * <Button>Cancel</Button>\n * <Button variant=\"contained\">Confirm</Button>\n * </>\n * }\n * >\n * Are you sure you want to proceed?\n * </Card>\n * ```\n */\nexport const Card = forwardRef<HTMLDivElement, CardProps>(function Card(\n {\n variant = 'elevation',\n title,\n subheader,\n headerAction,\n headerSx,\n contentSx,\n actions,\n actionsSx,\n disablePadding,\n children,\n sx,\n ...other\n },\n ref\n) {\n const ownerState = { variant };\n\n const hasHeader = title || subheader || headerAction;\n\n return (\n <StyledCard\n ref={ref}\n ownerState={ownerState}\n variant={variant === 'outlined' ? 'outlined' : 'elevation'}\n sx={sx}\n {...other}\n >\n {hasHeader && <CardHeader title={title} subheader={subheader} action={headerAction} sx={headerSx} />}\n\n {children && (\n <CardContent\n sx={{\n ...(disablePadding && { p: 0, '&:last-child': { pb: 0 } }),\n ...contentSx,\n }}\n >\n {children}\n </CardContent>\n )}\n\n {actions && <CardActions sx={actionsSx}>{actions}</CardActions>}\n </StyledCard>\n );\n});\n\n// =============================================================================\n// CARD SECTION\n// =============================================================================\n\nexport interface CardSectionProps {\n /** Section title */\n title?: ReactNode;\n /** Section description */\n description?: ReactNode;\n /** Section content */\n children?: ReactNode;\n /** Additional styles */\n sx?: SxProps<Theme>;\n}\n\n/**\n * CardSection - A section within a card with title and description.\n *\n * @example\n * ```tsx\n * <Card>\n * <CardSection title=\"Personal Information\">\n * <TextField label=\"Name\" />\n * <TextField label=\"Email\" />\n * </CardSection>\n * <CardSection title=\"Preferences\">\n * <Switch label=\"Notifications\" />\n * </CardSection>\n * </Card>\n * ```\n */\nexport function CardSection({ title, description, children, sx }: CardSectionProps): ReactNode {\n return (\n <Box sx={{ mb: 3, ...sx }}>\n {title && (\n <Typography\n variant=\"subtitle1\"\n sx={{\n fontWeight: 600,\n mb: 1\n }}>\n {title}\n </Typography>\n )}\n {description && (\n <Typography\n variant=\"body2\"\n sx={{\n color: \"text.secondary\",\n mb: 2\n }}>\n {description}\n </Typography>\n )}\n {children}\n </Box>\n );\n}\n\n// =============================================================================\n// STAT CARD\n// =============================================================================\n\nexport interface StatCardProps extends Omit<CardProps, 'children'> {\n /** Stat title */\n label: string;\n /** Stat value */\n value: string | number;\n /** Change percentage */\n change?: number;\n /** Icon */\n icon?: ReactNode;\n /** Color theme */\n color?: 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info';\n /** Loading state — shows skeletons instead of values */\n loading?: boolean;\n /** Optional subtitle below the value */\n subtitle?: string;\n}\n\n/**\n * StatCard - A card for displaying statistics.\n *\n * @example\n * ```tsx\n * <StatCard\n * label=\"Total Sales\"\n * value=\"$24,500\"\n * change={12.5}\n * icon={<TrendingUpIcon />}\n * color=\"success\"\n * />\n * ```\n */\nexport function StatCard({\n label,\n value,\n change,\n icon,\n color = 'primary',\n loading,\n subtitle,\n variant = 'outlined',\n sx,\n ...other\n}: StatCardProps): ReactNode {\n const isPositive = change && change > 0;\n const isNegative = change && change < 0;\n\n return (\n <Card variant={variant} contentSx={{ p: 2, '&:last-child': { pb: 2 } }} sx={sx} {...other}>\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'flex-start' }}>\n <Box>\n {loading ? (\n <>\n <Skeleton width={80} height={16} />\n <Skeleton width={50} height={32} sx={{ mt: 0.5 }} />\n </>\n ) : (\n <>\n <Typography\n variant=\"caption\"\n sx={{\n fontWeight: 600,\n color: \"text.secondary\",\n textTransform: \"uppercase\",\n letterSpacing: 0.5\n }}>\n {label}\n </Typography>\n <Typography\n variant=\"h4\"\n sx={{\n fontWeight: 700,\n color: `${color}.main`,\n mt: 0.5\n }}>\n {value}\n </Typography>\n {change !== undefined && (\n <Typography\n variant=\"caption\"\n color={isPositive ? 'success.main' : isNegative ? 'error.main' : 'text.secondary'}\n sx={{\n fontWeight: 500,\n mt: 0.5,\n display: 'block'\n }}>\n {isPositive ? '+' : ''}\n {change}%\n </Typography>\n )}\n {subtitle && (\n <Typography variant=\"caption\" sx={{\n color: \"text.secondary\"\n }}>\n {subtitle}\n </Typography>\n )}\n </>\n )}\n </Box>\n {icon && !loading && <Box sx={{ color: `${color}.main` }}>{icon}</Box>}\n </Box>\n </Card>\n );\n}\n","'use client';\n\n/**\n * Confirm Dialog Component\n *\n * Reusable confirmation dialog with customizable actions.\n * Implements WCAG 2.1 accessibility with proper ARIA attributes.\n *\n * @module @omnitron-dev/prism/components/confirm-dialog\n */\n\nimport { useId, type ReactNode } from 'react';\nimport Dialog from '@mui/material/Dialog';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport DialogActions from '@mui/material/DialogActions';\nimport Button from '@mui/material/Button';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface ConfirmDialogProps {\n /** Whether the dialog is open */\n open: boolean;\n /** Called when dialog should close */\n onClose: () => void;\n /** Called when user confirms */\n onConfirm: () => void | Promise<void>;\n /** Dialog title */\n title?: string;\n /** Dialog content/message */\n content?: ReactNode;\n /** Confirm button text */\n confirmLabel?: string;\n /** Cancel button text */\n cancelLabel?: string;\n /** Confirm button color */\n confirmColor?: 'primary' | 'secondary' | 'error' | 'warning' | 'info' | 'success';\n /** Loading state for async confirm */\n loading?: boolean;\n /** Disable confirm button */\n disabled?: boolean;\n /** Maximum width of dialog */\n maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | false;\n /** Additional styles for dialog */\n sx?: SxProps<Theme>;\n}\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\n/**\n * ConfirmDialog - Reusable confirmation dialog.\n *\n * @example\n * ```tsx\n * const [open, setOpen] = useState(false);\n *\n * <ConfirmDialog\n * open={open}\n * onClose={() => setOpen(false)}\n * onConfirm={handleDelete}\n * title=\"Delete item?\"\n * content=\"This action cannot be undone.\"\n * confirmColor=\"error\"\n * confirmLabel=\"Delete\"\n * />\n * ```\n *\n * @example\n * ```tsx\n * // With async confirm\n * <ConfirmDialog\n * open={open}\n * onClose={() => setOpen(false)}\n * onConfirm={async () => {\n * await deleteItem();\n * setOpen(false);\n * }}\n * loading={isDeleting}\n * title=\"Confirm deletion\"\n * />\n * ```\n */\nexport function ConfirmDialog({\n open,\n onClose,\n onConfirm,\n title = 'Confirm',\n content,\n confirmLabel = 'Confirm',\n cancelLabel = 'Cancel',\n confirmColor = 'primary',\n loading = false,\n disabled = false,\n maxWidth = 'xs',\n sx,\n}: ConfirmDialogProps): ReactNode {\n const titleId = useId();\n const descriptionId = useId();\n\n const handleConfirm = () => {\n const result = onConfirm();\n if (result instanceof Promise) {\n result.catch(() => {\n // Error handling should be done in the parent component\n });\n }\n };\n\n return (\n <Dialog\n open={open}\n onClose={loading ? undefined : onClose}\n maxWidth={maxWidth}\n fullWidth\n aria-labelledby={titleId}\n aria-describedby={content ? descriptionId : undefined}\n sx={sx}\n >\n <DialogTitle id={titleId}>{title}</DialogTitle>\n\n {content && (\n <DialogContent>\n {typeof content === 'string' ? (\n <DialogContentText id={descriptionId}>{content}</DialogContentText>\n ) : (\n <div id={descriptionId}>{content}</div>\n )}\n </DialogContent>\n )}\n\n <DialogActions sx={{ px: 3, pb: 2 }}>\n <Button onClick={onClose} color=\"inherit\" disabled={loading} variant=\"outlined\">\n {cancelLabel}\n </Button>\n\n <Button onClick={handleConfirm} color={confirmColor} variant=\"contained\" loading={loading} disabled={disabled}>\n {confirmLabel}\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n\n// =============================================================================\n// DELETE DIALOG\n// =============================================================================\n\nexport interface DeleteDialogProps extends Omit<ConfirmDialogProps, 'title' | 'confirmLabel' | 'confirmColor'> {\n /** Name of the item being deleted */\n itemName?: string;\n}\n\n/**\n * DeleteDialog - Specialized confirmation for delete actions.\n *\n * @example\n * ```tsx\n * <DeleteDialog\n * open={open}\n * onClose={() => setOpen(false)}\n * onConfirm={handleDelete}\n * itemName=\"Project Alpha\"\n * />\n * ```\n */\nexport function DeleteDialog({ itemName, content, ...props }: DeleteDialogProps): ReactNode {\n return (\n <ConfirmDialog\n title={itemName ? `Delete \"${itemName}\"?` : 'Delete item?'}\n content={content ?? 'This action cannot be undone. Are you sure you want to proceed?'}\n confirmLabel=\"Delete\"\n confirmColor=\"error\"\n {...props}\n />\n );\n}\n","'use client';\n\n/**\n * Empty Content Component\n *\n * Universal placeholder for empty states across the application.\n * Supports icon-based illustrations, multiple action buttons,\n * filled backgrounds, and compact mode.\n *\n * @module @omnitron-dev/prism/components/empty-content\n */\n\nimport type { ReactNode } from 'react';\nimport Box from '@mui/material/Box';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\nimport { alpha } from '@mui/material/styles';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface EmptyContentProps {\n /** Custom illustration (SVG, image, or any ReactNode) */\n illustration?: ReactNode;\n /** Icon element — rendered inside a circular colored wrapper */\n icon?: ReactNode;\n /** Color for the icon wrapper background (palette path like 'primary.main') */\n iconColor?: string;\n /** Size of the icon wrapper (default 64) */\n iconSize?: number;\n /** Main title text */\n title?: string;\n /** Description text or ReactNode */\n description?: ReactNode;\n /** Single action button (backward compatible) */\n action?: ReactNode;\n /** Multiple action buttons rendered in a row */\n actions?: ReactNode[];\n /** Max width of the container */\n maxWidth?: number | string;\n /** Fill the entire available space (height: 100%) */\n filled?: boolean;\n /** Additional styles for root container */\n sx?: SxProps<Theme>;\n /** Illustration wrapper styles */\n illustrationSx?: SxProps<Theme>;\n /** Slot overrides */\n slotProps?: {\n title?: SxProps<Theme>;\n description?: SxProps<Theme>;\n actions?: SxProps<Theme>;\n };\n /** Compact mode — reduces spacing and font sizes */\n compact?: boolean;\n}\n\n// =============================================================================\n// DEFAULT ILLUSTRATION\n// =============================================================================\n\nfunction DefaultIllustration({ sx }: { sx?: SxProps<Theme> }) {\n return (\n <Box\n component=\"svg\"\n viewBox=\"0 0 480 360\"\n sx={{\n width: 240,\n height: 'auto',\n color: 'text.disabled',\n ...sx,\n }}\n >\n <defs>\n <linearGradient id=\"emptyGradient\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\">\n <stop offset=\"0%\" style={{ stopColor: 'currentColor', stopOpacity: 0.2 }} />\n <stop offset=\"100%\" style={{ stopColor: 'currentColor', stopOpacity: 0.05 }} />\n </linearGradient>\n </defs>\n <ellipse cx=\"240\" cy=\"300\" rx=\"160\" ry=\"30\" fill=\"url(#emptyGradient)\" />\n <rect x=\"140\" y=\"120\" width=\"200\" height=\"140\" rx=\"8\" fill=\"currentColor\" opacity=\"0.08\" />\n <rect x=\"160\" y=\"140\" width=\"160\" height=\"8\" rx=\"4\" fill=\"currentColor\" opacity=\"0.12\" />\n <rect x=\"160\" y=\"160\" width=\"120\" height=\"8\" rx=\"4\" fill=\"currentColor\" opacity=\"0.12\" />\n <rect x=\"160\" y=\"180\" width=\"140\" height=\"8\" rx=\"4\" fill=\"currentColor\" opacity=\"0.12\" />\n <circle cx=\"240\" cy=\"80\" r=\"40\" fill=\"currentColor\" opacity=\"0.1\" />\n <path\n d=\"M225 75 L230 80 L255 55\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n fill=\"none\"\n opacity=\"0.2\"\n />\n </Box>\n );\n}\n\n// =============================================================================\n// ICON WRAPPER\n// =============================================================================\n\nfunction IconWrapper({ icon, color = 'primary.main', size = 64 }: { icon: ReactNode; color?: string; size?: number }) {\n return (\n <Box\n sx={{\n width: size,\n height: size,\n borderRadius: '50%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n bgcolor: (theme) => {\n // Resolve palette path (e.g. 'primary.main' → theme.palette.primary.main)\n const parts = color.split('.');\n let resolved: any = theme.palette;\n for (const part of parts) {\n resolved = resolved?.[part];\n }\n return typeof resolved === 'string' ? alpha(resolved, 0.08) : alpha(theme.palette.primary.main, 0.08);\n },\n }}\n >\n {icon}\n </Box>\n );\n}\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\n/**\n * EmptyContent - Universal empty state placeholder.\n *\n * @example Basic\n * ```tsx\n * <EmptyContent title=\"No data found\" description=\"Try adjusting your filters\" />\n * ```\n *\n * @example With icon\n * ```tsx\n * <EmptyContent\n * icon={<ChatIcon sx={{ width: 28, height: 28, color: 'primary.main', opacity: 0.6 }} />}\n * title=\"Select a conversation\"\n * description=\"Choose a room from the sidebar\"\n * />\n * ```\n *\n * @example With multiple actions\n * ```tsx\n * <EmptyContent\n * icon={<FolderIcon sx={{ fontSize: 28, color: 'text.disabled' }} />}\n * title=\"No files yet\"\n * description=\"Upload files or create a folder to get started\"\n * actions={[\n * <Button variant=\"contained\" startIcon={<UploadIcon />}>Upload</Button>,\n * <Button variant=\"outlined\" startIcon={<FolderIcon />}>New folder</Button>,\n * ]}\n * />\n * ```\n *\n * @example Filled (full height)\n * ```tsx\n * <EmptyContent filled title=\"No messages\" compact />\n * ```\n */\nexport function EmptyContent({\n illustration,\n icon,\n iconColor = 'primary.main',\n iconSize = 64,\n title = 'No data',\n description,\n action,\n actions,\n maxWidth = 400,\n filled = false,\n sx,\n illustrationSx,\n slotProps,\n compact = false,\n}: EmptyContentProps): ReactNode {\n // Determine visual: icon > illustration > nothing (no default for clean minimal states)\n const visual = icon ? (\n <IconWrapper icon={icon} color={iconColor} size={iconSize} />\n ) : illustration ? (\n <Box sx={illustrationSx}>{illustration}</Box>\n ) : null;\n\n // Merge actions: single action + array\n const allActions = [...(actions ?? []), ...(action ? [action] : [])];\n\n return (\n <Stack\n sx={{\n alignItems: \"center\",\n justifyContent: \"center\",\n textAlign: 'center',\n py: compact ? 4 : 8,\n px: 2,\n\n // Default non-compact behavior: vertically center inside the\n // available \"main content\" area. Two complementary anchors:\n // * `flex: 1, alignSelf: 'stretch'` — when the parent IS a\n // flex column with explicit height (DashboardLayout main,\n // full-height page wrappers), EmptyContent grows to fill\n // the column and the inner `justifyContent: center` puts\n // the message in the middle of that column.\n // * `minHeight: calc(100vh - 240px)` — fallback for the\n // common case where the page wrapper is just a content-\n // sized `<Stack>` or `<Box>`. 240px is the typical\n // vertical chrome (header ~64 + breadcrumbs ~60 + page\n // padding ~80 + a small margin), so this leaves enough\n // space below the breadcrumbs for the message to sit at\n // the optical center of the visible viewport.\n //\n // `compact` keeps the inline-sized behavior for callers that\n // drop EmptyContent inside a card cell or sidebar.\n // `filled` is the explicit \"fill my parent\" mode and shares\n // the same fallback so the visual is consistent.\n ...(!compact && {\n flex: 1,\n alignSelf: 'stretch',\n minHeight: 'calc(100vh - 240px)',\n }),\n\n ...(filled && { height: '100%' }),\n ...sx\n }}>\n <Box\n sx={{\n maxWidth,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: compact ? 1.5 : 2.5,\n }}\n >\n {/* Visual (icon or illustration) */}\n {visual}\n\n {/* Text */}\n <Stack spacing={0.5} sx={{\n alignItems: \"center\"\n }}>\n {title && (\n <Typography\n variant={compact ? 'subtitle1' : 'h6'}\n sx={{\n color: \"text.secondary\",\n fontWeight: 600,\n ...slotProps?.title\n }}>\n {title}\n </Typography>\n )}\n\n {description && (\n <Typography\n variant=\"body2\"\n sx={{\n color: \"text.disabled\",\n lineHeight: 1.6,\n ...slotProps?.description\n }}>\n {description}\n </Typography>\n )}\n </Stack>\n\n {/* Actions */}\n {allActions.length > 0 && (\n <Stack\n direction=\"row\"\n spacing={1}\n sx={{ mt: compact ? 0.5 : 1, flexWrap: 'wrap', justifyContent: 'center', ...slotProps?.actions }}\n >\n {allActions.map((a, i) => (\n <Box key={i}>{a}</Box>\n ))}\n </Stack>\n )}\n </Box>\n </Stack>\n );\n}\n\n/**\n * Search Empty Content - Specialized empty state for search results.\n */\nexport function SearchEmptyContent({\n query,\n ...props\n}: Omit<EmptyContentProps, 'title' | 'description'> & { query?: string }): ReactNode {\n return (\n <EmptyContent\n title=\"No results found\"\n description={\n query ? `Your search for \"${query}\" did not match any results.` : 'Try adjusting your search criteria.'\n }\n {...props}\n />\n );\n}\n\n/**\n * Loading Empty Content - Placeholder while loading.\n */\nexport function LoadingEmptyContent({ ...props }: Omit<EmptyContentProps, 'title'>): ReactNode {\n return (\n <EmptyContent\n title=\"Loading...\"\n illustration={\n <Box\n sx={{\n width: 64,\n height: 64,\n borderRadius: '50%',\n border: '3px solid',\n borderColor: 'divider',\n borderTopColor: 'primary.main',\n animation: 'spin 1s linear infinite',\n '@keyframes spin': {\n from: { transform: 'rotate(0deg)' },\n to: { transform: 'rotate(360deg)' },\n },\n }}\n />\n }\n compact\n {...props}\n />\n );\n}\n","'use client';\n\n/**\n * PageContent — Unified page layout primitives\n *\n * Provides consistent spacing across all pages:\n * - PageContent: vertical stack with standardized gap\n * - PageContent.CardGrid: responsive grid for cards with equal height\n *\n * @example\n * <PageContent>\n * <Breadcrumbs ... />\n * <PageContent.CardGrid columns={2}>\n * <Card>...</Card>\n * <Card>...</Card>\n * </PageContent.CardGrid>\n * </PageContent>\n *\n * @module @omnitron-dev/prism/components/page-content\n */\n\nimport type { ReactNode } from 'react';\nimport { forwardRef, Children } from 'react';\nimport Stack from '@mui/material/Stack';\nimport Grid from '@mui/material/Grid';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\n// =============================================================================\n// CONSTANTS\n// =============================================================================\n\n/** Default spacing between top-level page sections (theme spacing units) */\nconst PAGE_GAP = 3;\n\n/** Default spacing between grid items (theme spacing units) */\nconst GRID_GAP = 3;\n\n// =============================================================================\n// PageContent\n// =============================================================================\n\nexport interface PageContentProps {\n children: ReactNode;\n /** Override gap between sections. Default: 3 (24px). */\n gap?: number;\n /** Stretch to fill available height (for centered empty states). */\n fill?: boolean;\n sx?: SxProps<Theme>;\n}\n\n/**\n * Page-level vertical layout with consistent spacing.\n *\n * Wraps children in a `Stack` with standardized gap.\n * Use `fill` to stretch for empty-state centering.\n */\nexport const PageContent = forwardRef<HTMLDivElement, PageContentProps>(\n ({ children, gap = PAGE_GAP, fill, sx, ...rest }, ref) => (\n <Stack\n ref={ref}\n spacing={gap}\n sx={{ ...(fill && { flex: 1 }), ...sx as any }}\n {...rest}\n >\n {children}\n </Stack>\n ),\n);\n\nPageContent.displayName = 'PageContent';\n\n// =============================================================================\n// CardGrid\n// =============================================================================\n\nexport interface CardGridProps {\n children: ReactNode;\n /** Number of columns at `md` breakpoint. Default: 2. */\n columns?: 1 | 2 | 3 | 4;\n /** Override gap between cards. Default: 3 (24px). */\n gap?: number;\n sx?: SxProps<Theme>;\n}\n\nconst COLUMN_SIZE: Record<number, { xs: number; sm?: number; md: number }> = {\n 1: { xs: 12, md: 12 },\n 2: { xs: 12, md: 6 },\n 3: { xs: 12, sm: 6, md: 4 },\n 4: { xs: 12, sm: 6, md: 3 },\n};\n\n/**\n * Responsive card grid with equal-height items.\n *\n * Each direct child is wrapped in a Grid item sized by `columns`.\n * Cards should use `height: '100%'` or be wrapped in a full-height container.\n */\nexport function CardGrid({ children, columns = 2, gap = GRID_GAP, sx }: CardGridProps) {\n const size = COLUMN_SIZE[columns] ?? COLUMN_SIZE[2];\n\n return (\n <Grid container spacing={gap} sx={sx}>\n {Children.map(children, (child) =>\n child != null ? (\n <Grid size={size} sx={{ display: 'flex' }}>\n {child}\n </Grid>\n ) : null,\n )}\n </Grid>\n );\n}\n","'use client';\n\n/**\n * Image Component\n *\n * Enhanced image component with lazy loading, aspect ratio, and fallback support.\n *\n * @module @omnitron-dev/prism/components/image\n */\n\nimport type { ReactNode, ImgHTMLAttributes } from 'react';\nimport { useState, useCallback, forwardRef } from 'react';\nimport Box from '@mui/material/Box';\nimport { styled, alpha } from '@mui/material/styles';\nimport type { SxProps, Theme, Breakpoint } from '@mui/material/styles';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport type AspectRatio = '2/3' | '3/2' | '4/3' | '3/4' | '16/9' | '9/16' | '21/9' | '1/1' | `${number}/${number}`;\n\nexport interface ImageProps extends Omit<ImgHTMLAttributes<HTMLImageElement>, 'onError'> {\n /** Image source URL */\n src: string;\n /** Alt text */\n alt: string;\n /** Aspect ratio (auto-sizes based on width) */\n ratio?: AspectRatio | Partial<Record<Breakpoint, AspectRatio>>;\n /** Fallback content on error */\n fallback?: ReactNode;\n /** Fallback image URL */\n fallbackSrc?: string;\n /** Disable lazy loading */\n disableLazy?: boolean;\n /** Object fit style */\n objectFit?: 'cover' | 'contain' | 'fill' | 'none' | 'scale-down';\n /** Show loading placeholder */\n placeholder?: boolean;\n /** Overlay content */\n overlay?: ReactNode;\n /** Additional styles */\n sx?: SxProps<Theme>;\n /** Image styles */\n imgSx?: SxProps<Theme>;\n /** Called when image loads */\n onLoad?: () => void;\n /** Called when image fails to load */\n onError?: () => void;\n}\n\n// =============================================================================\n// STYLED COMPONENTS\n// =============================================================================\n\ninterface ImageRootProps {\n ownerState: {\n ratio?: AspectRatio | Partial<Record<Breakpoint, AspectRatio>>;\n hasError: boolean;\n };\n}\n\nconst ImageRoot = styled(Box, {\n shouldForwardProp: (prop) => prop !== 'ownerState',\n})<ImageRootProps>(({ theme, ownerState }) => {\n const { ratio, hasError } = ownerState;\n\n const getRatioStyles = () => {\n if (!ratio) return {};\n\n if (typeof ratio === 'string') {\n return {\n width: '100%',\n aspectRatio: ratio,\n };\n }\n\n // Responsive ratio\n const breakpointStyles: Record<string, string | Record<string, string>> = { width: '100%' };\n for (const [bp, r] of Object.entries(ratio)) {\n if (bp === 'xs') {\n breakpointStyles.aspectRatio = r;\n } else {\n breakpointStyles[theme.breakpoints.up(bp as Breakpoint)] = {\n aspectRatio: r,\n };\n }\n }\n return breakpointStyles;\n };\n\n return {\n position: 'relative',\n display: 'block',\n overflow: 'hidden',\n borderRadius: 'inherit',\n ...getRatioStyles(),\n ...(hasError && {\n backgroundColor: alpha(theme.palette.grey[500], 0.08),\n }),\n };\n});\n\nconst StyledImg = styled('img')(() => ({\n width: '100%',\n height: '100%',\n objectFit: 'cover',\n display: 'block',\n}));\n\nconst PlaceholderBox = styled(Box)(({ theme }) => ({\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: alpha(theme.palette.grey[500], 0.08),\n '&::after': {\n content: '\"\"',\n width: 32,\n height: 32,\n borderRadius: '50%',\n border: '3px solid',\n borderColor: alpha(theme.palette.grey[500], 0.16),\n borderTopColor: theme.palette.primary.main,\n animation: 'spin 1s linear infinite',\n '@keyframes spin': {\n from: { transform: 'rotate(0deg)' },\n to: { transform: 'rotate(360deg)' },\n },\n },\n}));\n\nconst OverlayBox = styled(Box)(() => ({\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n}));\n\nconst FallbackBox = styled(Box)(({ theme }) => ({\n width: '100%',\n height: '100%',\n minHeight: 100,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.palette.text.disabled,\n}));\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\n/**\n * Image - Enhanced image component with lazy loading and fallback.\n *\n * @example\n * ```tsx\n * <Image\n * src=\"/avatar.jpg\"\n * alt=\"User avatar\"\n * ratio=\"1/1\"\n * sx={{ width: 100, borderRadius: 1 }}\n * />\n * ```\n *\n * @example\n * ```tsx\n * // With aspect ratio\n * <Image\n * src=\"/banner.jpg\"\n * alt=\"Banner\"\n * ratio=\"16/9\"\n * />\n * ```\n *\n * @example\n * ```tsx\n * // With fallback\n * <Image\n * src=\"/product.jpg\"\n * alt=\"Product\"\n * fallback={<ProductPlaceholder />}\n * />\n * ```\n */\nexport const Image = forwardRef<HTMLDivElement, ImageProps>(function Image(\n {\n src,\n alt,\n ratio,\n fallback,\n fallbackSrc,\n disableLazy = false,\n objectFit = 'cover',\n placeholder = true,\n overlay,\n sx,\n imgSx,\n onLoad,\n onError,\n ...imgProps\n },\n ref\n) {\n const [isLoaded, setIsLoaded] = useState(false);\n const [hasError, setHasError] = useState(false);\n const [currentSrc, setCurrentSrc] = useState(src);\n\n const handleLoad = useCallback(() => {\n setIsLoaded(true);\n onLoad?.();\n }, [onLoad]);\n\n const handleError = useCallback(() => {\n if (fallbackSrc && currentSrc !== fallbackSrc) {\n setCurrentSrc(fallbackSrc);\n } else {\n setHasError(true);\n }\n onError?.();\n }, [fallbackSrc, currentSrc, onError]);\n\n const ownerState = {\n ratio,\n hasError,\n };\n\n // Render fallback content on error\n if (hasError && fallback) {\n return (\n <ImageRoot ref={ref} ownerState={ownerState} sx={sx}>\n <FallbackBox>{fallback}</FallbackBox>\n </ImageRoot>\n );\n }\n\n return (\n <ImageRoot ref={ref} ownerState={ownerState} sx={sx}>\n {/* Loading placeholder */}\n {placeholder && !isLoaded && !hasError && <PlaceholderBox />}\n\n {/* Main image */}\n <StyledImg\n src={currentSrc}\n alt={alt}\n loading={disableLazy ? 'eager' : 'lazy'}\n onLoad={handleLoad}\n onError={handleError}\n sx={[\n {\n objectFit,\n opacity: isLoaded ? 1 : 0,\n transition: 'opacity 300ms ease-in-out',\n },\n ...(Array.isArray(imgSx) ? imgSx : [imgSx]),\n ]}\n {...imgProps}\n />\n\n {/* Overlay */}\n {overlay && <OverlayBox>{overlay}</OverlayBox>}\n </ImageRoot>\n );\n});\n\n// =============================================================================\n// DEFAULT FALLBACK\n// =============================================================================\n\nfunction DefaultImageIcon() {\n return (\n <Box component=\"svg\" viewBox=\"0 0 24 24\" sx={{ width: 48, height: 48, opacity: 0.5 }}>\n <path\n fill=\"currentColor\"\n d=\"M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z\"\n />\n </Box>\n );\n}\n\n/**\n * ImageWithDefault - Image with default fallback icon.\n */\nexport function ImageWithDefault(props: ImageProps): ReactNode {\n return <Image fallback={<DefaultImageIcon />} {...props} />;\n}\n","'use client';\n\n/**\n * Label Component\n *\n * A versatile label/badge component for status indicators, categories, and tags.\n *\n * @module @omnitron-dev/prism/components/label\n */\n\nimport type { ReactNode } from 'react';\nimport { forwardRef } from 'react';\nimport Box from '@mui/material/Box';\nimport { alpha, styled } from '@mui/material/styles';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport type LabelColor = 'default' | 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error';\n\nexport type LabelVariant = 'filled' | 'outlined' | 'soft' | 'inverted';\n\nexport interface LabelProps {\n /** Content of the label */\n children?: ReactNode;\n /** Color scheme */\n color?: LabelColor;\n /** Visual variant */\n variant?: LabelVariant;\n /** Start icon */\n startIcon?: ReactNode;\n /** End icon */\n endIcon?: ReactNode;\n /** Additional styles */\n sx?: SxProps<Theme>;\n /** Disabled state */\n disabled?: boolean;\n}\n\n// =============================================================================\n// STYLED COMPONENT\n// =============================================================================\n\ninterface StyledLabelProps {\n ownerState: {\n color: LabelColor;\n variant: LabelVariant;\n disabled?: boolean;\n };\n}\n\nconst StyledLabel = styled('span', {\n shouldForwardProp: (prop) => prop !== 'ownerState',\n})<StyledLabelProps>(({ theme, ownerState }) => {\n const isLight = theme.palette.mode === 'light';\n const { color, variant, disabled } = ownerState;\n\n // Get palette color for non-default colors (guaranteed defined when used below)\n const paletteColor = color !== 'default' ? theme.palette[color] : null;\n\n // Fallback palette for safe access (uses grey as safe default)\n const safePalette = paletteColor ?? {\n main: theme.palette.grey[500],\n light: theme.palette.grey[300],\n dark: theme.palette.grey[700],\n contrastText: theme.palette.common.white,\n };\n\n // Border radius as number for arithmetic\n const borderRadius = typeof theme.shape.borderRadius === 'number' ? theme.shape.borderRadius : 4;\n\n const baseStyles = {\n height: 24,\n minWidth: 24,\n lineHeight: 0,\n cursor: 'default',\n borderRadius: borderRadius * 0.75,\n alignItems: 'center',\n whiteSpace: 'nowrap' as const,\n display: 'inline-flex',\n justifyContent: 'center',\n textTransform: 'capitalize' as const,\n padding: theme.spacing(0, 0.75),\n fontSize: theme.typography.pxToRem(12),\n fontWeight: theme.typography.fontWeightBold,\n transition: theme.transitions.create(['all'], {\n duration: theme.transitions.duration.shorter,\n }),\n ...(disabled && {\n opacity: 0.48,\n pointerEvents: 'none' as const,\n }),\n };\n\n // Filled variant\n const filledStyles = {\n color:\n color === 'default' ? (isLight ? theme.palette.common.white : theme.palette.grey[800]) : safePalette.contrastText,\n backgroundColor: color === 'default' ? theme.palette.text.primary : safePalette.main,\n };\n\n // Outlined variant\n const outlinedStyles = {\n color: color === 'default' ? theme.palette.text.primary : safePalette.main,\n backgroundColor: 'transparent',\n border: `2px solid ${color === 'default' ? alpha(theme.palette.grey[500], 0.32) : alpha(safePalette.main, 0.48)}`,\n };\n\n // Soft variant\n const softStyles = {\n color: color === 'default' ? theme.palette.text.secondary : isLight ? safePalette.dark : safePalette.light,\n backgroundColor: color === 'default' ? alpha(theme.palette.grey[500], 0.16) : alpha(safePalette.main, 0.16),\n };\n\n // Inverted variant (white background with colored text)\n const invertedStyles = {\n color: color === 'default' ? theme.palette.text.primary : safePalette.dark,\n backgroundColor: theme.palette.common.white,\n border: `1px solid ${alpha(theme.palette.grey[500], 0.16)}`,\n ...(paletteColor && {\n boxShadow: `inset 0 0 0 1px ${alpha(paletteColor.main, 0.24)}`,\n }),\n };\n\n const variantStyles = {\n filled: filledStyles,\n outlined: outlinedStyles,\n soft: softStyles,\n inverted: invertedStyles,\n };\n\n return {\n ...baseStyles,\n ...variantStyles[variant],\n };\n});\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\n/**\n * Label - A versatile label/badge component.\n *\n * @example\n * ```tsx\n * <Label>Default</Label>\n * <Label color=\"success\">Active</Label>\n * <Label color=\"error\" variant=\"outlined\">Failed</Label>\n * <Label color=\"warning\" variant=\"soft\">Pending</Label>\n * ```\n *\n * @example\n * ```tsx\n * // With icons\n * <Label\n * color=\"success\"\n * startIcon={<CheckIcon sx={{ width: 14, height: 14 }} />}\n * >\n * Verified\n * </Label>\n * ```\n */\nexport const Label = forwardRef<HTMLSpanElement, LabelProps>(function Label(\n { children, color = 'default', variant = 'soft', startIcon, endIcon, sx, disabled, ...other },\n ref\n) {\n const ownerState = {\n color,\n variant,\n disabled,\n };\n\n const iconStyles = {\n width: 16,\n height: 16,\n flexShrink: 0,\n '& svg, & img': { width: '100%', height: '100%' },\n };\n\n return (\n <StyledLabel ref={ref} ownerState={ownerState} sx={sx} {...other}>\n {startIcon && <Box sx={{ mr: 0.5, ...iconStyles }}>{startIcon}</Box>}\n\n {children}\n\n {endIcon && <Box sx={{ ml: 0.5, ...iconStyles }}>{endIcon}</Box>}\n </StyledLabel>\n );\n});\n\n// =============================================================================\n// PRESET LABELS\n// =============================================================================\n\n/**\n * Status label with preset colors based on common status types.\n */\nexport function StatusLabel({\n status,\n ...props\n}: Omit<LabelProps, 'color' | 'children'> & {\n status: 'active' | 'inactive' | 'pending' | 'banned' | 'rejected';\n}): ReactNode {\n const statusConfig: Record<typeof status, { color: LabelColor; label: string }> = {\n active: { color: 'success', label: 'Active' },\n inactive: { color: 'default', label: 'Inactive' },\n pending: { color: 'warning', label: 'Pending' },\n banned: { color: 'error', label: 'Banned' },\n rejected: { color: 'error', label: 'Rejected' },\n };\n\n const config = statusConfig[status];\n\n return (\n <Label color={config.color} {...props}>\n {config.label}\n </Label>\n );\n}\n\n/**\n * Boolean label that shows Yes/No or custom text.\n */\nexport function BooleanLabel({\n value,\n trueText = 'Yes',\n falseText = 'No',\n ...props\n}: Omit<LabelProps, 'color' | 'children'> & {\n value: boolean;\n trueText?: string;\n falseText?: string;\n}): ReactNode {\n return (\n <Label color={value ? 'success' : 'error'} {...props}>\n {value ? trueText : falseText}\n </Label>\n );\n}\n","'use client';\n\n/**\n * Loading Screen Component\n *\n * Lightweight content loading indicator with centered LinearProgress.\n * Use for lazy-loaded route content within layouts.\n *\n * @module @omnitron-dev/prism/components/loading-screen\n */\n\nimport type { ReactNode } from 'react';\nimport { Fragment } from 'react';\nimport Portal from '@mui/material/Portal';\nimport { styled } from '@mui/material/styles';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport type { LinearProgressProps } from '@mui/material/LinearProgress';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface LoadingScreenProps extends React.ComponentProps<'div'> {\n /** Render in a portal */\n portal?: boolean;\n /** Additional styles */\n sx?: SxProps<Theme>;\n /** Slot overrides */\n slots?: {\n progress?: ReactNode;\n };\n /** Slot props */\n slotProps?: {\n progress?: LinearProgressProps;\n };\n}\n\n// =============================================================================\n// STYLED COMPONENTS\n// =============================================================================\n\nconst LoadingContent = styled('div')(({ theme }) => ({\n flexGrow: 1,\n width: '100%',\n display: 'flex',\n minHeight: '100%',\n alignItems: 'center',\n justifyContent: 'center',\n paddingLeft: theme.spacing(5),\n paddingRight: theme.spacing(5),\n}));\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\n/**\n * LoadingScreen - Lightweight content loading indicator.\n *\n * @example\n * ```tsx\n * <Suspense fallback={<LoadingScreen />}>\n * <Outlet />\n * </Suspense>\n * ```\n */\nexport function LoadingScreen({ portal, slots, slotProps, sx, ...other }: LoadingScreenProps): ReactNode {\n const Wrapper = portal ? Portal : Fragment;\n\n return (\n <Wrapper>\n <LoadingContent sx={sx} {...other}>\n {slots?.progress ?? (\n <LinearProgress\n color=\"inherit\"\n sx={[\n { width: 1, maxWidth: 360 },\n ...(Array.isArray(slotProps?.progress?.sx) ? slotProps.progress.sx : [slotProps?.progress?.sx]),\n ]}\n {...slotProps?.progress}\n />\n )}\n </LoadingContent>\n </Wrapper>\n );\n}\n","'use client';\n\n/**\n * Splash Screen Component\n *\n * Full-screen or contained loading states with customizable indicators.\n * Use for app-level loading (initial boot, auth checks).\n *\n * @module @omnitron-dev/prism/components/loading-screen\n */\n\nimport type { ReactNode } from 'react';\nimport { Fragment } from 'react';\nimport Box from '@mui/material/Box';\nimport Portal from '@mui/material/Portal';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport Typography from '@mui/material/Typography';\nimport { styled } from '@mui/material/styles';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface SplashScreenProps {\n /** Loading indicator variant */\n variant?: 'circular' | 'linear';\n /** Loading message */\n message?: string;\n /** Custom loading indicator */\n indicator?: ReactNode;\n /** Render in a portal (useful for overlays) */\n portal?: boolean;\n /** Size of circular indicator */\n size?: number;\n /** Progress value (0-100) for determinate mode */\n progress?: number;\n /** Full screen overlay mode */\n fullScreen?: boolean;\n /** Additional styles */\n sx?: SxProps<Theme>;\n}\n\n// =============================================================================\n// STYLED COMPONENTS\n// =============================================================================\n\nconst SplashContainer = styled(Box, {\n shouldForwardProp: (prop) => prop !== 'fullScreen',\n})<{ fullScreen?: boolean }>(({ theme, fullScreen }) => ({\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: theme.spacing(2),\n padding: theme.spacing(3),\n ...(fullScreen\n ? {\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: theme.zIndex.modal + 1,\n backgroundColor: theme.palette.background.default,\n }\n : {\n flexGrow: 1,\n width: '100%',\n minHeight: 200,\n }),\n}));\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\n/**\n * SplashScreen - Full-screen or contained loading indicator.\n *\n * @example\n * ```tsx\n * // Simple splash\n * <SplashScreen />\n * ```\n *\n * @example\n * ```tsx\n * // With message\n * <SplashScreen message=\"Loading data...\" />\n * ```\n *\n * @example\n * ```tsx\n * // Determinate progress\n * <SplashScreen\n * variant=\"linear\"\n * progress={65}\n * message=\"Uploading files...\"\n * />\n * ```\n *\n * @example\n * ```tsx\n * // Full screen overlay\n * <SplashScreen fullScreen portal />\n * ```\n */\nexport function SplashScreen({\n variant = 'circular',\n message,\n indicator,\n portal = false,\n size = 48,\n progress,\n fullScreen = false,\n sx,\n}: SplashScreenProps): ReactNode {\n const Wrapper = portal ? Portal : Fragment;\n const isDeterminate = progress !== undefined;\n\n const renderIndicator = () => {\n if (indicator) return indicator;\n\n if (variant === 'linear') {\n return (\n <LinearProgress\n variant={isDeterminate ? 'determinate' : 'indeterminate'}\n value={progress}\n color=\"primary\"\n sx={{ width: '100%', maxWidth: 360, borderRadius: 1 }}\n />\n );\n }\n\n return (\n <CircularProgress\n variant={isDeterminate ? 'determinate' : 'indeterminate'}\n value={progress}\n size={size}\n thickness={3}\n color=\"primary\"\n />\n );\n };\n\n return (\n <Wrapper>\n <SplashContainer fullScreen={fullScreen} sx={sx}>\n {renderIndicator()}\n\n {message && (\n <Typography\n variant=\"body2\"\n sx={{\n color: \"text.secondary\",\n mt: 1,\n textAlign: 'center'\n }}>\n {message}\n </Typography>\n )}\n\n {isDeterminate && (\n <Typography variant=\"caption\" sx={{\n color: \"text.disabled\"\n }}>\n {Math.round(progress)}%\n </Typography>\n )}\n </SplashContainer>\n </Wrapper>\n );\n}\n\n// =============================================================================\n// SPINNER COMPONENT\n// =============================================================================\n\nexport interface SpinnerProps {\n /** Size of the spinner */\n size?: 'small' | 'medium' | 'large' | number;\n /** Color */\n color?: 'primary' | 'secondary' | 'inherit';\n /** Additional styles */\n sx?: SxProps<Theme>;\n}\n\nconst sizeMap = {\n small: 20,\n medium: 32,\n large: 48,\n};\n\n/**\n * Spinner - Simple spinning indicator.\n *\n * @example\n * ```tsx\n * <Button disabled={loading}>\n * {loading ? <Spinner size=\"small\" /> : 'Submit'}\n * </Button>\n * ```\n */\nexport function Spinner({ size = 'medium', color = 'primary', sx }: SpinnerProps): ReactNode {\n const computedSize = typeof size === 'number' ? size : sizeMap[size];\n\n return <CircularProgress size={computedSize} color={color} thickness={3.5} sx={sx} />;\n}\n","'use client';\n\n/**\n * Tag Cloud — visualises a list of tags as either a sized chip cloud\n * (font-size proportional to popularity) or a vertical list with\n * count + description.\n *\n * Generic over `T extends TagCloudItem` so callers pass their domain\n * tag DTOs directly without mapping. Renders no domain assumptions;\n * navigation is delegated via `onTagClick`, which is the consumer's\n * job (react-router, next/link, etc.).\n *\n * Accessibility:\n * - List variant: each item is a button (MUI ListItemButton) with\n * aria-label that spells out the popularity rather than relying\n * on the visible count alone (\"4 posts\" not just \"4\").\n * - Cloud variant: chips carry an aria-label that names both the\n * tag and the relative weight, so screen readers don't see only\n * a font-size signal.\n * - Optional `trending` flag highlights a tag visually AND\n * semantically (aria-label suffix).\n *\n * @module @omnitron-dev/prism/components/tag-cloud\n */\n\nimport type { ReactNode } from 'react';\nimport Chip from '@mui/material/Chip';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\nimport List from '@mui/material/List';\nimport ListItemButton from '@mui/material/ListItemButton';\nimport ListItemText from '@mui/material/ListItemText';\nimport Box from '@mui/material/Box';\nimport { alpha, useTheme } from '@mui/material/styles';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\nexport interface TagCloudItem {\n id: string;\n name: string;\n slug: string;\n postCount: number;\n description?: string | null;\n /** Optional badge — drives the trending highlight. */\n trending?: boolean;\n /** Optional moderation status — 'featured' adds a subtle accent. */\n status?: string;\n}\n\nexport interface TagCloudProps<T extends TagCloudItem = TagCloudItem> {\n tags: T[];\n variant?: 'cloud' | 'list';\n /** Called on activation. The consumer routes to the tag page. */\n onTagClick?: (tag: T) => void;\n /** Truncate to first N items. */\n maxItems?: number;\n /**\n * Render the right-hand stat of a list-variant row. Defaults to\n * the formatted postCount; override for custom signals\n * (e.g. follower count, freshness).\n */\n renderStat?: (tag: T) => ReactNode;\n /**\n * Optional adornment shown after the tag name on cloud variant.\n * Used to slot in a 🔥 / ⭐ icon component without bloating this\n * file with icon assets.\n */\n renderAdornment?: (tag: T) => ReactNode;\n sx?: SxProps<Theme>;\n}\n\n/** Map a postCount to a font-size multiplier (0.75rem – 1.5rem). */\nfunction computeSize(count: number, min: number, max: number): number {\n if (max === min) return 1;\n const t = (count - min) / (max - min);\n return 0.75 + t * 0.75;\n}\n\nfunction formatShort(n: number): string {\n if (n < 1_000) return String(n);\n if (n < 1_000_000) return `${(n / 1_000).toFixed(1).replace(/\\.0$/, '')}K`;\n return `${(n / 1_000_000).toFixed(1).replace(/\\.0$/, '')}M`;\n}\n\nexport function TagCloud<T extends TagCloudItem = TagCloudItem>({\n tags,\n variant = 'cloud',\n onTagClick,\n maxItems,\n renderStat,\n renderAdornment,\n sx,\n}: TagCloudProps<T>): ReactNode {\n const theme = useTheme();\n const visible = maxItems ? tags.slice(0, maxItems) : tags;\n\n // --- List variant -----------------------------------------------------\n if (variant === 'list') {\n return (\n <List disablePadding sx={sx}>\n {visible.map((tag) => (\n <ListItemButton\n key={tag.id}\n onClick={onTagClick ? () => onTagClick(tag) : undefined}\n aria-label={`Tag ${tag.name}, ${tag.postCount} posts${tag.trending ? ', trending' : ''}`}\n sx={{\n borderRadius: 1,\n px: 1.5,\n py: 0.75,\n '&:hover': { bgcolor: alpha(theme.palette.primary.main, 0.08) },\n }}\n >\n <ListItemText\n primary={\n <Box component=\"span\" sx={{ display: 'inline-flex', alignItems: 'center', gap: 0.5 }}>\n <span>{`#${tag.name}`}</span>\n {tag.trending && (\n <Box\n component=\"span\"\n sx={{\n ml: 0.5,\n px: 0.75,\n py: 0.125,\n fontSize: 10,\n lineHeight: 1.4,\n fontWeight: 700,\n borderRadius: 0.75,\n color: theme.palette.warning.contrastText,\n bgcolor: theme.palette.warning.main,\n }}\n >\n TRENDING\n </Box>\n )}\n {renderAdornment?.(tag)}\n </Box>\n }\n secondary={tag.description}\n slotProps={{\n primary: { variant: 'body2', sx: { fontWeight: 500 } },\n\n secondary: {\n variant: 'caption',\n noWrap: true,\n sx: { mt: 0.25 },\n }\n }} />\n <Typography\n variant=\"caption\"\n sx={{\n color: \"text.disabled\",\n ml: 1,\n flexShrink: 0\n }}>\n {renderStat ? renderStat(tag) : formatShort(tag.postCount)}\n </Typography>\n </ListItemButton>\n ))}\n </List>\n );\n }\n\n // --- Cloud variant ---------------------------------------------------\n const counts = visible.map((t) => t.postCount);\n const min = counts.length > 0 ? Math.min(...counts) : 0;\n const max = counts.length > 0 ? Math.max(...counts) : 0;\n\n return (\n <Stack\n direction=\"row\"\n useFlexGap\n sx={[{\n flexWrap: \"wrap\",\n gap: 1,\n alignItems: \"center\"\n }, ...(Array.isArray(sx) ? sx : [sx])]}>\n {visible.map((tag) => {\n const size = computeSize(tag.postCount, min, max);\n const isFeatured = tag.status === 'featured';\n return (\n <Chip\n key={tag.id}\n label={\n <Box component=\"span\" sx={{ display: 'inline-flex', alignItems: 'center', gap: 0.5 }}>\n <span>{`#${tag.name}`}</span>\n {renderAdornment?.(tag)}\n </Box>\n }\n variant={tag.trending || isFeatured ? 'filled' : 'outlined'}\n color={tag.trending ? 'warning' : isFeatured ? 'primary' : 'default'}\n onClick={onTagClick ? () => onTagClick(tag) : undefined}\n aria-label={`Tag ${tag.name}, ${tag.postCount} posts${tag.trending ? ', trending' : ''}${isFeatured ? ', featured' : ''}`}\n sx={{\n height: 'auto',\n fontSize: `${size}rem`,\n fontWeight: 500,\n borderRadius: 1.5,\n cursor: onTagClick ? 'pointer' : 'default',\n transition: 'all 0.15s',\n '& .MuiChip-label': { px: 1.25, py: 0.5 },\n '&:hover': onTagClick\n ? {\n bgcolor: alpha(theme.palette.primary.main, 0.08),\n borderColor: 'primary.main',\n color: 'primary.main',\n }\n : undefined,\n }}\n />\n );\n })}\n </Stack>\n );\n}\n","'use client';\n\n/**\n * Scrollbar Component\n *\n * Custom scrollbar wrapper with themed styling.\n *\n * @module @omnitron-dev/prism/components/scrollbar\n */\n\nimport type { ReactNode } from 'react';\nimport { forwardRef } from 'react';\nimport Box from '@mui/material/Box';\nimport { styled, alpha } from '@mui/material/styles';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface ScrollbarProps {\n /** Content to scroll */\n children?: ReactNode;\n /** Additional styles */\n sx?: SxProps<Theme>;\n /** Fill available content space */\n fillContent?: boolean;\n /** Hide scrollbar (content still scrollable) */\n hideScrollbar?: boolean;\n /** Scrollbar axis */\n axis?: 'x' | 'y' | 'both';\n /** Max height constraint */\n maxHeight?: number | string;\n /** Min height constraint */\n minHeight?: number | string;\n /** Additional class name */\n className?: string;\n /** Scroll event handler */\n onScroll?: React.UIEventHandler<HTMLDivElement>;\n}\n\n// =============================================================================\n// STYLED COMPONENT\n// =============================================================================\n\ninterface ScrollbarRootProps {\n ownerState: {\n fillContent: boolean;\n hideScrollbar: boolean;\n axis: 'x' | 'y' | 'both';\n };\n}\n\nconst ScrollbarRoot = styled(Box, {\n shouldForwardProp: (prop) => prop !== 'ownerState',\n})<ScrollbarRootProps>(({ theme, ownerState }) => {\n const { fillContent, hideScrollbar, axis } = ownerState;\n\n const scrollbarColor = alpha(theme.palette.text.disabled, 0.4);\n const scrollbarHoverColor = alpha(theme.palette.text.disabled, 0.6);\n const scrollbarTrackColor = alpha(theme.palette.grey[500], 0.08);\n\n const getOverflow = () => {\n if (axis === 'x') return { overflowX: 'auto', overflowY: 'hidden' } as const;\n if (axis === 'y') return { overflowX: 'hidden', overflowY: 'auto' } as const;\n return { overflow: 'auto' } as const;\n };\n\n return {\n minWidth: 0,\n minHeight: 0,\n ...getOverflow(),\n ...(fillContent && {\n flexGrow: 1,\n display: 'flex',\n flexDirection: 'column',\n }),\n // Custom scrollbar styles\n ...(!hideScrollbar && {\n scrollbarWidth: 'thin',\n scrollbarColor: `${scrollbarColor} ${scrollbarTrackColor}`,\n // Webkit browsers\n '&::-webkit-scrollbar': {\n width: 8,\n height: 8,\n },\n '&::-webkit-scrollbar-track': {\n backgroundColor: scrollbarTrackColor,\n borderRadius: 4,\n },\n '&::-webkit-scrollbar-thumb': {\n backgroundColor: scrollbarColor,\n borderRadius: 4,\n '&:hover': {\n backgroundColor: scrollbarHoverColor,\n },\n },\n '&::-webkit-scrollbar-corner': {\n backgroundColor: 'transparent',\n },\n }),\n ...(hideScrollbar && {\n scrollbarWidth: 'none',\n msOverflowStyle: 'none',\n '&::-webkit-scrollbar': {\n display: 'none',\n },\n }),\n };\n});\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\n/**\n * Scrollbar - Custom scrollbar wrapper with themed styling.\n *\n * @example\n * ```tsx\n * <Scrollbar maxHeight={400}>\n * <List>...</List>\n * </Scrollbar>\n * ```\n *\n * @example\n * ```tsx\n * // Horizontal scrollbar\n * <Scrollbar axis=\"x\">\n * <Stack direction=\"row\" spacing={2}>...</Stack>\n * </Scrollbar>\n * ```\n *\n * @example\n * ```tsx\n * // Fill available space\n * <Scrollbar fillContent>\n * {content}\n * </Scrollbar>\n * ```\n */\nexport const Scrollbar = forwardRef<HTMLDivElement, ScrollbarProps>(function Scrollbar(\n { children, sx, fillContent = false, hideScrollbar = false, axis = 'y', maxHeight, minHeight, className, ...other },\n ref\n) {\n const ownerState = {\n fillContent,\n hideScrollbar,\n axis,\n };\n\n return (\n <ScrollbarRoot\n ref={ref}\n ownerState={ownerState}\n className={className}\n sx={[\n {\n ...(maxHeight !== undefined && { maxHeight }),\n ...(minHeight !== undefined && { minHeight }),\n },\n ...(Array.isArray(sx) ? sx : [sx]),\n ]}\n {...other}\n >\n {children}\n </ScrollbarRoot>\n );\n});\n","'use client';\n\n/**\n * Snackbar Component\n *\n * Enhanced snackbar with context-based API for easy notifications.\n *\n * @module @omnitron-dev/prism/components/snackbar\n */\n\nimport type { ReactNode } from 'react';\nimport { createContext, useContext, useState, useCallback, useMemo } from 'react';\nimport Snackbar from '@mui/material/Snackbar';\nimport Alert from '@mui/material/Alert';\nimport IconButton from '@mui/material/IconButton';\nimport CloseIcon from '@mui/icons-material/Close';\nimport type { AlertColor } from '@mui/material/Alert';\nimport type { SnackbarOrigin } from '@mui/material/Snackbar';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface SnackbarOptions {\n /** Message to display */\n message: string;\n /** Severity/type of the snackbar */\n severity?: AlertColor;\n /** Auto-hide duration in milliseconds */\n duration?: number;\n /** Position on screen */\n position?: SnackbarOrigin;\n /** Action button */\n action?: ReactNode;\n /** Unique key for the snackbar */\n key?: string | number;\n}\n\nexport interface SnackbarContextValue {\n /** Show a snackbar notification */\n show: (options: SnackbarOptions | string) => void;\n /** Show a success notification */\n success: (message: string, options?: Partial<SnackbarOptions>) => void;\n /** Show an error notification */\n error: (message: string, options?: Partial<SnackbarOptions>) => void;\n /** Show a warning notification */\n warning: (message: string, options?: Partial<SnackbarOptions>) => void;\n /** Show an info notification */\n info: (message: string, options?: Partial<SnackbarOptions>) => void;\n /** Close the current snackbar */\n close: () => void;\n}\n\nexport interface SnackbarProviderProps {\n /** Children to wrap */\n children: ReactNode;\n /** Default auto-hide duration */\n defaultDuration?: number;\n /** Default position */\n defaultPosition?: SnackbarOrigin;\n /** Maximum number of snackbars to show */\n maxSnackbars?: number;\n /** Additional styles */\n sx?: SxProps<Theme>;\n}\n\n// =============================================================================\n// CONTEXT\n// =============================================================================\n\nconst SnackbarContext = createContext<SnackbarContextValue | null>(null);\n\n// =============================================================================\n// HOOK\n// =============================================================================\n\n/**\n * useSnackbar - Hook for showing snackbar notifications.\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const snackbar = useSnackbar();\n *\n * const handleSave = async () => {\n * try {\n * await saveData();\n * snackbar.success('Data saved successfully!');\n * } catch (err) {\n * snackbar.error('Failed to save data');\n * }\n * };\n * }\n * ```\n */\nexport function useSnackbar(): SnackbarContextValue {\n const context = useContext(SnackbarContext);\n\n if (!context) {\n throw new Error('useSnackbar must be used within a SnackbarProvider');\n }\n\n return context;\n}\n\n// =============================================================================\n// PROVIDER\n// =============================================================================\n\ninterface SnackbarState {\n open: boolean;\n message: string;\n severity: AlertColor;\n duration: number;\n position: SnackbarOrigin;\n action?: ReactNode;\n key: string | number;\n}\n\nconst defaultState: SnackbarState = {\n open: false,\n message: '',\n severity: 'info',\n duration: 5000,\n position: { vertical: 'bottom', horizontal: 'left' },\n key: 0,\n};\n\n/**\n * SnackbarProvider - Provider for snackbar notifications.\n *\n * @example\n * ```tsx\n * // Wrap your app with the provider\n * function App() {\n * return (\n * <SnackbarProvider>\n * <MyApp />\n * </SnackbarProvider>\n * );\n * }\n * ```\n */\nexport function SnackbarProvider({\n children,\n defaultDuration = 5000,\n defaultPosition = { vertical: 'bottom', horizontal: 'left' },\n sx,\n}: SnackbarProviderProps): ReactNode {\n const [state, setState] = useState<SnackbarState>({\n ...defaultState,\n duration: defaultDuration,\n position: defaultPosition,\n });\n\n const show = useCallback(\n (options: SnackbarOptions | string) => {\n const opts = typeof options === 'string' ? { message: options } : options;\n\n setState((prev) => ({\n open: true,\n message: opts.message,\n severity: opts.severity ?? 'info',\n duration: opts.duration ?? defaultDuration,\n position: opts.position ?? defaultPosition,\n action: opts.action,\n key: opts.key ?? Date.now(),\n }));\n },\n [defaultDuration, defaultPosition]\n );\n\n const success = useCallback(\n (message: string, options?: Partial<SnackbarOptions>) => {\n show({ message, severity: 'success', ...options });\n },\n [show]\n );\n\n const error = useCallback(\n (message: string, options?: Partial<SnackbarOptions>) => {\n show({ message, severity: 'error', ...options });\n },\n [show]\n );\n\n const warning = useCallback(\n (message: string, options?: Partial<SnackbarOptions>) => {\n show({ message, severity: 'warning', ...options });\n },\n [show]\n );\n\n const info = useCallback(\n (message: string, options?: Partial<SnackbarOptions>) => {\n show({ message, severity: 'info', ...options });\n },\n [show]\n );\n\n const close = useCallback(() => {\n setState((prev) => ({ ...prev, open: false }));\n }, []);\n\n const handleClose = useCallback(\n (_event?: React.SyntheticEvent | Event, reason?: string) => {\n if (reason === 'clickaway') return;\n close();\n },\n [close]\n );\n\n const value = useMemo<SnackbarContextValue>(\n () => ({\n show,\n success,\n error,\n warning,\n info,\n close,\n }),\n [show, success, error, warning, info, close]\n );\n\n return (\n <SnackbarContext.Provider value={value}>\n {children}\n\n <Snackbar\n key={state.key}\n open={state.open}\n autoHideDuration={state.duration}\n onClose={handleClose}\n anchorOrigin={state.position}\n sx={sx}\n >\n <Alert\n severity={state.severity}\n variant=\"filled\"\n onClose={handleClose}\n action={\n state.action || (\n <IconButton size=\"small\" aria-label=\"close\" color=\"inherit\" onClick={close}>\n <CloseIcon fontSize=\"small\" />\n </IconButton>\n )\n }\n sx={{ width: '100%', alignItems: 'center' }}\n >\n {state.message}\n </Alert>\n </Snackbar>\n </SnackbarContext.Provider>\n );\n}\n\n// =============================================================================\n// STANDALONE SNACKBAR\n// =============================================================================\n\nexport interface SimpleSnackbarProps {\n /** Whether the snackbar is open */\n open: boolean;\n /** Close handler */\n onClose: () => void;\n /** Message to display */\n message: string;\n /** Severity/type */\n severity?: AlertColor;\n /** Auto-hide duration in milliseconds */\n duration?: number;\n /** Position on screen */\n position?: SnackbarOrigin;\n /** Additional styles */\n sx?: SxProps<Theme>;\n}\n\n/**\n * SimpleSnackbar - Standalone snackbar component (without context).\n *\n * @example\n * ```tsx\n * const [open, setOpen] = useState(false);\n *\n * <SimpleSnackbar\n * open={open}\n * onClose={() => setOpen(false)}\n * message=\"Changes saved!\"\n * severity=\"success\"\n * />\n * ```\n */\nexport function SimpleSnackbar({\n open,\n onClose,\n message,\n severity = 'info',\n duration = 5000,\n position = { vertical: 'bottom', horizontal: 'left' },\n sx,\n}: SimpleSnackbarProps): ReactNode {\n const handleClose = (_event?: React.SyntheticEvent | Event, reason?: string) => {\n if (reason === 'clickaway') return;\n onClose();\n };\n\n return (\n <Snackbar open={open} autoHideDuration={duration} onClose={handleClose} anchorOrigin={position} sx={sx}>\n <Alert severity={severity} variant=\"filled\" onClose={handleClose} sx={{ width: '100%' }}>\n {message}\n </Alert>\n </Snackbar>\n );\n}\n","'use client';\n\n/**\n * SvgColor Component\n *\n * Colorable SVG icon component using CSS mask.\n *\n * @module @omnitron-dev/prism/components/svg-color\n */\n\nimport type { ReactNode } from 'react';\nimport { forwardRef } from 'react';\nimport { styled } from '@mui/material/styles';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface SvgColorProps {\n /** SVG file URL */\n src: string;\n /** Color (uses currentColor by default, inheriting from parent) */\n color?: string;\n /** Width and height */\n size?: number | string;\n /** Width */\n width?: number | string;\n /** Height */\n height?: number | string;\n /** Additional class name */\n className?: string;\n /** Additional styles */\n sx?: SxProps<Theme>;\n}\n\n// =============================================================================\n// STYLED COMPONENT\n// =============================================================================\n\nconst SvgRoot = styled('span')(() => ({\n flexShrink: 0,\n display: 'inline-flex',\n backgroundColor: 'currentColor',\n}));\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\n/**\n * SvgColor - Colorable SVG component.\n *\n * This component uses CSS mask to allow SVG icons to inherit text color.\n * The SVG file is loaded via URL and can be colored using the color prop\n * or by inheriting from parent's color/text color.\n *\n * @example\n * ```tsx\n * // Basic usage\n * <SvgColor src=\"/icons/check.svg\" />\n * ```\n *\n * @example\n * ```tsx\n * // With custom color\n * <SvgColor\n * src=\"/icons/star.svg\"\n * color=\"primary.main\"\n * size={32}\n * />\n * ```\n *\n * @example\n * ```tsx\n * // Inherit color from parent\n * <Box color=\"error.main\">\n * <SvgColor src=\"/icons/alert.svg\" />\n * Error message\n * </Box>\n * ```\n */\nexport const SvgColor = forwardRef<HTMLSpanElement, SvgColorProps>(function SvgColor(\n { src, color, size = 24, width, height, className, sx },\n ref\n) {\n const computedWidth = width ?? size;\n const computedHeight = height ?? size;\n\n return (\n <SvgRoot\n ref={ref}\n className={className}\n sx={[\n {\n width: computedWidth,\n height: computedHeight,\n mask: `url(${src}) no-repeat center / contain`,\n WebkitMask: `url(${src}) no-repeat center / contain`,\n ...(color && { color }),\n },\n ...(Array.isArray(sx) ? sx : [sx]),\n ]}\n />\n );\n});\n\n// =============================================================================\n// ICON SET COMPONENT\n// =============================================================================\n\nexport interface IconProps extends Omit<SvgColorProps, 'src'> {\n /** Icon name (without extension) */\n name: string;\n /** Base path for icons */\n basePath?: string;\n}\n\n/**\n * Creates an Icon component factory with a custom base path.\n *\n * @example\n * ```tsx\n * // Create icon component\n * const Icon = createIconComponent('/assets/icons');\n *\n * // Use it\n * <Icon name=\"home\" size={24} />\n * ```\n */\nexport function createIconComponent(basePath: string) {\n function Icon({ name, ...props }: IconProps): ReactNode {\n return <SvgColor src={`${basePath}/${name}.svg`} {...props} />;\n }\n return Icon;\n}\n","'use client';\n\n/**\n * Table Component\n *\n * Enhanced table component with sorting, selection, and pagination.\n *\n * @module @omnitron-dev/prism/components/table\n */\n\nimport type { ReactNode, ChangeEvent } from 'react';\nimport { forwardRef, useCallback, useState, useMemo } from 'react';\nimport MuiTable from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport TableCell from '@mui/material/TableCell';\nimport TableHead from '@mui/material/TableHead';\nimport TableRow from '@mui/material/TableRow';\nimport TableSortLabel from '@mui/material/TableSortLabel';\nimport TablePagination from '@mui/material/TablePagination';\nimport Checkbox from '@mui/material/Checkbox';\nimport Paper from '@mui/material/Paper';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport { styled, alpha } from '@mui/material/styles';\nimport type { TableProps as MuiTableProps } from '@mui/material/Table';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport type SortOrder = 'asc' | 'desc';\n\nexport interface TableColumn<T> {\n /** Unique column identifier */\n id: keyof T | string;\n /** Column header label */\n label: string;\n /** Column width */\n width?: number | string;\n /** Minimum width */\n minWidth?: number;\n /** Alignment */\n align?: 'left' | 'center' | 'right';\n /** Whether column is sortable */\n sortable?: boolean;\n /** Custom render function */\n render?: (row: T, index: number) => ReactNode;\n /** Format value for display */\n format?: (value: unknown) => string;\n}\n\nexport interface TableProps<T> extends Omit<MuiTableProps, 'children'> {\n /** Table columns configuration */\n columns: TableColumn<T>[];\n /** Data rows */\n data: T[];\n /** Row key accessor */\n rowKey?: keyof T | ((row: T) => string | number);\n /** Enable row selection */\n selectable?: boolean;\n /** Selected row keys */\n selected?: (string | number)[];\n /** Selection change handler */\n onSelectChange?: (selected: (string | number)[]) => void;\n /** Enable sorting */\n sortable?: boolean;\n /** Current sort column */\n sortBy?: string;\n /** Current sort order */\n sortOrder?: SortOrder;\n /** Sort change handler */\n onSortChange?: (column: string, order: SortOrder) => void;\n /** Enable pagination */\n paginated?: boolean;\n /** Current page (0-indexed) */\n page?: number;\n /** Rows per page */\n rowsPerPage?: number;\n /** Total row count (for server-side pagination) */\n totalRows?: number;\n /** Page change handler */\n onPageChange?: (page: number) => void;\n /** Rows per page change handler */\n onRowsPerPageChange?: (rowsPerPage: number) => void;\n /** Rows per page options */\n rowsPerPageOptions?: number[];\n /** Empty state content */\n emptyContent?: ReactNode;\n /** Loading state */\n loading?: boolean;\n /** Dense padding */\n dense?: boolean;\n /** Sticky header */\n stickyHeader?: boolean;\n /** Container max height */\n maxHeight?: number | string;\n /** Row click handler */\n onRowClick?: (row: T, index: number) => void;\n /** Container styles */\n containerSx?: SxProps<Theme>;\n}\n\n// =============================================================================\n// STYLED COMPONENTS\n// =============================================================================\n\nconst StyledTableContainer = styled(Paper)(({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n border: `1px solid ${theme.palette.divider}`,\n overflow: 'auto',\n}));\n\nconst StyledTableHead = styled(TableHead)(({ theme }) => ({\n backgroundColor: alpha(theme.palette.grey[500], 0.08),\n '& .MuiTableCell-head': {\n fontWeight: 600,\n backgroundColor: 'transparent',\n },\n}));\n\nconst StyledTableRow = styled(TableRow)(({ theme }) => ({\n '&:hover': {\n backgroundColor: alpha(theme.palette.primary.main, 0.04),\n },\n '&.Mui-selected': {\n backgroundColor: alpha(theme.palette.primary.main, 0.08),\n '&:hover': {\n backgroundColor: alpha(theme.palette.primary.main, 0.12),\n },\n },\n}));\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\n/**\n * Table - Enhanced data table with sorting, selection, and pagination.\n *\n * @example\n * ```tsx\n * const columns: TableColumn<User>[] = [\n * { id: 'name', label: 'Name', sortable: true },\n * { id: 'email', label: 'Email' },\n * { id: 'status', label: 'Status', render: (row) => <Label>{row.status}</Label> },\n * ];\n *\n * <Table\n * columns={columns}\n * data={users}\n * rowKey=\"id\"\n * selectable\n * paginated\n * />\n * ```\n */\nfunction TableInner<T>(\n {\n columns,\n data,\n rowKey = 'id' as keyof T,\n selectable = false,\n selected = [],\n onSelectChange,\n sortable = false,\n sortBy,\n sortOrder = 'asc',\n onSortChange,\n paginated = false,\n page = 0,\n rowsPerPage = 10,\n totalRows,\n onPageChange,\n onRowsPerPageChange,\n rowsPerPageOptions = [5, 10, 25, 50],\n emptyContent,\n loading = false,\n dense = false,\n stickyHeader = false,\n maxHeight,\n onRowClick,\n containerSx,\n sx,\n ...other\n }: TableProps<T>,\n ref: React.Ref<HTMLTableElement>\n): ReactNode {\n // Get row key\n const getRowKey = useCallback(\n (row: T, index: number): string | number => {\n if (typeof rowKey === 'function') {\n return rowKey(row);\n }\n const keyValue = row[rowKey as keyof T];\n return keyValue !== undefined ? String(keyValue) : index;\n },\n [rowKey]\n );\n\n // Selection handlers\n const isAllSelected = useMemo(\n () => data.length > 0 && selected.length === data.length,\n [data.length, selected.length]\n );\n\n const isIndeterminate = useMemo(\n () => selected.length > 0 && selected.length < data.length,\n [data.length, selected.length]\n );\n\n const handleSelectAll = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n if (event.target.checked) {\n const allKeys = data.map((row, index) => getRowKey(row, index));\n onSelectChange?.(allKeys);\n } else {\n onSelectChange?.([]);\n }\n },\n [data, getRowKey, onSelectChange]\n );\n\n const handleSelectRow = useCallback(\n (key: string | number) => {\n const newSelected = selected.includes(key) ? selected.filter((k) => k !== key) : [...selected, key];\n onSelectChange?.(newSelected);\n },\n [selected, onSelectChange]\n );\n\n // Sort handler\n const handleSort = useCallback(\n (columnId: string) => {\n const isAsc = sortBy === columnId && sortOrder === 'asc';\n onSortChange?.(columnId, isAsc ? 'desc' : 'asc');\n },\n [sortBy, sortOrder, onSortChange]\n );\n\n // Pagination handlers\n const handlePageChange = useCallback(\n (_: unknown, newPage: number) => {\n onPageChange?.(newPage);\n },\n [onPageChange]\n );\n\n const handleRowsPerPageChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n onRowsPerPageChange?.(parseInt(event.target.value, 10));\n onPageChange?.(0);\n },\n [onRowsPerPageChange, onPageChange]\n );\n\n // Calculate total rows\n const total = totalRows ?? data.length;\n\n // Slice data for client-side pagination\n const displayData = useMemo(() => {\n if (paginated && !totalRows) {\n return data.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage);\n }\n return data;\n }, [data, paginated, page, rowsPerPage, totalRows]);\n\n // Empty state\n if (!loading && data.length === 0) {\n return (\n <StyledTableContainer sx={containerSx}>\n <Box sx={{ p: 4, textAlign: 'center' }}>\n {emptyContent || <Typography sx={{\n color: \"text.secondary\"\n }}>No data available</Typography>}\n </Box>\n </StyledTableContainer>\n );\n }\n\n return (\n <StyledTableContainer\n sx={{\n maxHeight,\n ...containerSx,\n }}\n >\n <MuiTable ref={ref} stickyHeader={stickyHeader} size={dense ? 'small' : 'medium'} sx={sx} {...other}>\n <StyledTableHead>\n <TableRow>\n {selectable && (\n <TableCell padding=\"checkbox\">\n <Checkbox indeterminate={isIndeterminate} checked={isAllSelected} onChange={handleSelectAll} />\n </TableCell>\n )}\n {columns.map((column) => (\n <TableCell\n key={String(column.id)}\n align={column.align || 'left'}\n style={{ width: column.width, minWidth: column.minWidth }}\n sortDirection={sortBy === column.id ? sortOrder : false}\n >\n {sortable && column.sortable !== false ? (\n <TableSortLabel\n active={sortBy === column.id}\n direction={sortBy === column.id ? sortOrder : 'asc'}\n onClick={() => handleSort(String(column.id))}\n >\n {column.label}\n </TableSortLabel>\n ) : (\n column.label\n )}\n </TableCell>\n ))}\n </TableRow>\n </StyledTableHead>\n\n <TableBody>\n {displayData.map((row, index) => {\n const key = getRowKey(row, index);\n const isSelected = selected.includes(key);\n\n return (\n <StyledTableRow\n key={key}\n hover\n selected={isSelected}\n onClick={() => onRowClick?.(row, index)}\n sx={{ cursor: onRowClick ? 'pointer' : 'default' }}\n >\n {selectable && (\n <TableCell padding=\"checkbox\">\n <Checkbox\n checked={isSelected}\n onClick={(e) => e.stopPropagation()}\n onChange={() => handleSelectRow(key)}\n />\n </TableCell>\n )}\n {columns.map((column) => {\n const value = row[column.id as keyof T];\n\n return (\n <TableCell key={String(column.id)} align={column.align || 'left'}>\n {column.render\n ? column.render(row, index)\n : column.format\n ? column.format(value)\n : String(value ?? '')}\n </TableCell>\n );\n })}\n </StyledTableRow>\n );\n })}\n </TableBody>\n </MuiTable>\n\n {paginated && (\n <TablePagination\n component=\"div\"\n count={total}\n page={page}\n rowsPerPage={rowsPerPage}\n rowsPerPageOptions={rowsPerPageOptions}\n onPageChange={handlePageChange}\n onRowsPerPageChange={handleRowsPerPageChange}\n />\n )}\n </StyledTableContainer>\n );\n}\n\n// Type assertion to preserve generics with forwardRef\nexport const Table = forwardRef(TableInner) as <T>(\n props: TableProps<T> & { ref?: React.Ref<HTMLTableElement> }\n) => ReactNode;\n\n// =============================================================================\n// USE TABLE HOOK\n// =============================================================================\n\nexport interface UseTableOptions<T> {\n /** Initial data */\n data: T[];\n /** Row key accessor */\n rowKey?: keyof T | ((row: T) => string | number);\n /** Default page */\n defaultPage?: number;\n /** Default rows per page */\n defaultRowsPerPage?: number;\n /** Default sort column */\n defaultSortBy?: string;\n /** Default sort order */\n defaultSortOrder?: SortOrder;\n}\n\nexport interface UseTableReturn<T> {\n /** Current page */\n page: number;\n /** Set page */\n setPage: (page: number) => void;\n /** Rows per page */\n rowsPerPage: number;\n /** Set rows per page */\n setRowsPerPage: (rowsPerPage: number) => void;\n /** Sort column */\n sortBy: string | undefined;\n /** Sort order */\n sortOrder: SortOrder;\n /** Sort handler */\n handleSort: (column: string, order: SortOrder) => void;\n /** Selected keys */\n selected: (string | number)[];\n /** Set selected */\n setSelected: (selected: (string | number)[]) => void;\n /** Sorted and paginated data */\n displayData: T[];\n /** Total row count */\n totalRows: number;\n /** Reset all state */\n reset: () => void;\n}\n\n/**\n * useTable - Hook for managing table state.\n *\n * @example\n * ```tsx\n * function UserTable() {\n * const table = useTable({\n * data: users,\n * rowKey: 'id',\n * defaultSortBy: 'name',\n * });\n *\n * return (\n * <Table\n * columns={columns}\n * data={table.displayData}\n * rowKey=\"id\"\n * selectable\n * selected={table.selected}\n * onSelectChange={table.setSelected}\n * sortable\n * sortBy={table.sortBy}\n * sortOrder={table.sortOrder}\n * onSortChange={table.handleSort}\n * paginated\n * page={table.page}\n * rowsPerPage={table.rowsPerPage}\n * totalRows={table.totalRows}\n * onPageChange={table.setPage}\n * onRowsPerPageChange={table.setRowsPerPage}\n * />\n * );\n * }\n * ```\n */\nexport function useTable<T>({\n data,\n defaultPage = 0,\n defaultRowsPerPage = 10,\n defaultSortBy,\n defaultSortOrder = 'asc',\n}: UseTableOptions<T>): UseTableReturn<T> {\n const [page, setPage] = useState(defaultPage);\n const [rowsPerPage, setRowsPerPage] = useState(defaultRowsPerPage);\n const [sortBy, setSortBy] = useState<string | undefined>(defaultSortBy);\n const [sortOrder, setSortOrder] = useState<SortOrder>(defaultSortOrder);\n const [selected, setSelected] = useState<(string | number)[]>([]);\n\n const handleSort = useCallback((column: string, order: SortOrder) => {\n setSortBy(column);\n setSortOrder(order);\n }, []);\n\n // Sort data\n const sortedData = useMemo(() => {\n if (!sortBy) return data;\n\n return [...data].sort((a, b) => {\n const aValue = a[sortBy as keyof T];\n const bValue = b[sortBy as keyof T];\n\n if (aValue === bValue) return 0;\n if (aValue === null || aValue === undefined) return 1;\n if (bValue === null || bValue === undefined) return -1;\n\n const comparison = aValue < bValue ? -1 : 1;\n return sortOrder === 'asc' ? comparison : -comparison;\n });\n }, [data, sortBy, sortOrder]);\n\n // Paginate data\n const displayData = useMemo(() => {\n const start = page * rowsPerPage;\n return sortedData.slice(start, start + rowsPerPage);\n }, [sortedData, page, rowsPerPage]);\n\n const reset = useCallback(() => {\n setPage(defaultPage);\n setRowsPerPage(defaultRowsPerPage);\n setSortBy(defaultSortBy);\n setSortOrder(defaultSortOrder);\n setSelected([]);\n }, [defaultPage, defaultRowsPerPage, defaultSortBy, defaultSortOrder]);\n\n return {\n page,\n setPage,\n rowsPerPage,\n setRowsPerPage,\n sortBy,\n sortOrder,\n handleSort,\n selected,\n setSelected,\n displayData,\n totalRows: data.length,\n reset,\n };\n}\n","'use client';\n\n/**\n * Skeleton Component\n *\n * Loading placeholder with multiple variants.\n *\n * @module @omnitron-dev/prism/components/skeleton\n */\n\nimport type { ReactNode, ComponentProps } from 'react';\nimport MuiSkeleton from '@mui/material/Skeleton';\nimport Box from '@mui/material/Box';\n\n/**\n * Skeleton variant types.\n */\nexport type SkeletonVariant = 'text' | 'circular' | 'rectangular' | 'rounded';\n\n/**\n * Props for Skeleton component.\n */\nexport interface SkeletonProps extends ComponentProps<typeof MuiSkeleton> {\n /** Skeleton variant */\n variant?: SkeletonVariant;\n}\n\n/**\n * Skeleton - Loading placeholder component.\n *\n * @example\n * ```tsx\n * // Text skeleton\n * <Skeleton variant=\"text\" width={200} />\n *\n * // Circular skeleton (avatar placeholder)\n * <Skeleton variant=\"circular\" width={40} height={40} />\n *\n * // Rectangular skeleton (image placeholder)\n * <Skeleton variant=\"rectangular\" width={210} height={118} />\n * ```\n */\nexport function Skeleton({ variant = 'text', ...props }: SkeletonProps): ReactNode {\n return <MuiSkeleton variant={variant} {...props} />;\n}\n\n/**\n * Props for CardSkeleton component.\n */\nexport interface CardSkeletonProps {\n /** Show avatar placeholder */\n hasAvatar?: boolean;\n /** Number of text lines */\n lines?: number;\n /** Card width */\n width?: number | string;\n}\n\n/**\n * CardSkeleton - Pre-composed card loading skeleton.\n *\n * @example\n * ```tsx\n * <CardSkeleton hasAvatar lines={3} />\n * ```\n */\nexport function CardSkeleton({ hasAvatar = true, lines = 2, width = '100%' }: CardSkeletonProps): ReactNode {\n return (\n <Box sx={{ width, p: 2 }}>\n {hasAvatar && (\n <Box sx={{ display: 'flex', alignItems: 'center', mb: 2 }}>\n <Skeleton variant=\"circular\" width={40} height={40} />\n <Box sx={{ ml: 1, flex: 1 }}>\n <Skeleton variant=\"text\" width=\"60%\" />\n <Skeleton variant=\"text\" width=\"40%\" />\n </Box>\n </Box>\n )}\n <Skeleton variant=\"rectangular\" width=\"100%\" height={118} sx={{ borderRadius: 1 }} />\n <Box sx={{ mt: 1 }}>\n {Array.from({ length: lines }, (_, i) => (\n <Skeleton key={i} variant=\"text\" width={i === lines - 1 ? '80%' : '100%'} />\n ))}\n </Box>\n </Box>\n );\n}\n\n/**\n * Props for TableSkeleton component.\n */\nexport interface TableSkeletonProps {\n /** Number of rows */\n rows?: number;\n /** Number of columns */\n columns?: number;\n /** Show header */\n hasHeader?: boolean;\n}\n\n/**\n * TableSkeleton - Pre-composed table loading skeleton.\n *\n * @example\n * ```tsx\n * <TableSkeleton rows={5} columns={4} />\n * ```\n */\nexport function TableSkeleton({ rows = 5, columns = 4, hasHeader = true }: TableSkeletonProps): ReactNode {\n return (\n <Box sx={{ width: '100%' }}>\n {hasHeader && (\n <Box sx={{ display: 'flex', gap: 2, mb: 1, pb: 1, borderBottom: 1, borderColor: 'divider' }}>\n {Array.from({ length: columns }, (_, i) => (\n <Skeleton key={i} variant=\"text\" sx={{ flex: 1 }} height={24} />\n ))}\n </Box>\n )}\n {Array.from({ length: rows }, (_row, rowIndex) => (\n <Box key={rowIndex} sx={{ display: 'flex', gap: 2, py: 1 }}>\n {Array.from({ length: columns }, (_col, colIndex) => (\n <Skeleton key={colIndex} variant=\"text\" sx={{ flex: 1 }} />\n ))}\n </Box>\n ))}\n </Box>\n );\n}\n","'use client';\n\n/**\n * Progress Components\n *\n * Linear and circular progress indicators.\n *\n * @module @omnitron-dev/prism/components/progress\n */\n\nimport type { ReactNode, ComponentProps } from 'react';\nimport MuiLinearProgress from '@mui/material/LinearProgress';\nimport MuiCircularProgress from '@mui/material/CircularProgress';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\n\n/**\n * Progress color variants.\n */\nexport type ProgressColor = 'primary' | 'secondary' | 'success' | 'error' | 'warning' | 'info' | 'inherit';\n\n/**\n * Props for LinearProgress component.\n */\nexport interface LinearProgressProps extends Omit<ComponentProps<typeof MuiLinearProgress>, 'color'> {\n /** Progress color */\n color?: ProgressColor;\n /** Show percentage label */\n showLabel?: boolean;\n /** Label position */\n labelPosition?: 'end' | 'below';\n /** Custom label formatter */\n formatLabel?: (value: number) => string;\n}\n\n/**\n * LinearProgress - Horizontal progress indicator.\n *\n * @example\n * ```tsx\n * // Determinate\n * <LinearProgress value={75} showLabel />\n *\n * // Indeterminate (loading)\n * <LinearProgress />\n *\n * // With custom label\n * <LinearProgress\n * value={50}\n * showLabel\n * formatLabel={(v) => `${v}/100 completed`}\n * />\n * ```\n */\nexport function LinearProgress({\n color = 'primary',\n showLabel = false,\n labelPosition = 'end',\n formatLabel,\n value,\n variant = value !== undefined ? 'determinate' : 'indeterminate',\n sx,\n ...props\n}: LinearProgressProps): ReactNode {\n const label = formatLabel ? formatLabel(value ?? 0) : `${Math.round(value ?? 0)}%`;\n\n if (!showLabel) {\n return (\n <MuiLinearProgress variant={variant} value={value} color={color} sx={{ borderRadius: 1, ...sx }} {...props} />\n );\n }\n\n if (labelPosition === 'below') {\n return (\n <Box sx={{ width: '100%' }}>\n <MuiLinearProgress variant={variant} value={value} color={color} sx={{ borderRadius: 1, ...sx }} {...props} />\n <Typography\n variant=\"caption\"\n sx={{\n color: \"text.secondary\",\n mt: 0.5,\n display: 'block',\n textAlign: 'center'\n }}>\n {label}\n </Typography>\n </Box>\n );\n }\n\n return (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <Box sx={{ flex: 1 }}>\n <MuiLinearProgress variant={variant} value={value} color={color} sx={{ borderRadius: 1, ...sx }} {...props} />\n </Box>\n <Typography\n variant=\"body2\"\n sx={{\n color: \"text.secondary\",\n minWidth: 40\n }}>\n {label}\n </Typography>\n </Box>\n );\n}\n\n/**\n * Props for CircularProgress component.\n */\nexport interface CircularProgressProps extends Omit<ComponentProps<typeof MuiCircularProgress>, 'color'> {\n /** Progress color */\n color?: ProgressColor;\n /** Show percentage label in center */\n showLabel?: boolean;\n /** Custom label formatter */\n formatLabel?: (value: number) => string;\n}\n\n/**\n * CircularProgress - Circular progress indicator.\n *\n * @example\n * ```tsx\n * // Determinate with label\n * <CircularProgress value={75} showLabel />\n *\n * // Indeterminate spinner\n * <CircularProgress />\n *\n * // Custom size\n * <CircularProgress value={50} size={80} thickness={5} showLabel />\n * ```\n */\nexport function CircularProgress({\n color = 'primary',\n showLabel = false,\n formatLabel,\n value,\n variant = value !== undefined ? 'determinate' : 'indeterminate',\n size = 40,\n ...props\n}: CircularProgressProps): ReactNode {\n if (!showLabel || variant === 'indeterminate') {\n return <MuiCircularProgress variant={variant} value={value} color={color} size={size} {...props} />;\n }\n\n const label = formatLabel ? formatLabel(value ?? 0) : `${Math.round(value ?? 0)}%`;\n\n return (\n <Box sx={{ position: 'relative', display: 'inline-flex' }}>\n <MuiCircularProgress variant={variant} value={value} color={color} size={size} {...props} />\n <Box\n sx={{\n position: 'absolute',\n top: 0,\n left: 0,\n bottom: 0,\n right: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <Typography\n variant=\"caption\"\n sx={{\n color: \"text.secondary\",\n fontSize: typeof size === 'number' ? size * 0.25 : undefined\n }}>\n {label}\n </Typography>\n </Box>\n </Box>\n );\n}\n\n/**\n * Props for ProgressBar component (segmented).\n */\nexport interface ProgressBarProps {\n /** Segments with value and optional color */\n segments: Array<{\n value: number;\n color?: ProgressColor;\n label?: string;\n }>;\n /** Bar height */\n height?: number;\n /** Show segment labels */\n showLabels?: boolean;\n}\n\n/**\n * ProgressBar - Segmented progress bar for multiple values.\n *\n * @example\n * ```tsx\n * <ProgressBar\n * segments={[\n * { value: 30, color: 'success', label: 'Complete' },\n * { value: 20, color: 'warning', label: 'In Progress' },\n * { value: 50, color: 'error', label: 'Failed' },\n * ]}\n * showLabels\n * />\n * ```\n */\nexport function ProgressBar({ segments, height = 8, showLabels = false }: ProgressBarProps): ReactNode {\n const colorMap: Record<ProgressColor, string> = {\n primary: 'primary.main',\n secondary: 'secondary.main',\n success: 'success.main',\n error: 'error.main',\n warning: 'warning.main',\n info: 'info.main',\n inherit: 'text.primary',\n };\n\n return (\n <Box sx={{ width: '100%' }}>\n <Box\n sx={{\n display: 'flex',\n borderRadius: 1,\n overflow: 'hidden',\n height,\n bgcolor: 'action.hover',\n }}\n >\n {segments.map((segment, index) => (\n <Box\n key={index}\n sx={{\n width: `${segment.value}%`,\n bgcolor: colorMap[segment.color ?? 'primary'],\n transition: 'width 0.3s ease-in-out',\n }}\n />\n ))}\n </Box>\n {showLabels && (\n <Box sx={{ display: 'flex', gap: 2, mt: 1 }}>\n {segments.map((segment, index) => (\n <Box key={index} sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <Box\n sx={{\n width: 8,\n height: 8,\n borderRadius: '50%',\n bgcolor: colorMap[segment.color ?? 'primary'],\n }}\n />\n <Typography variant=\"caption\" sx={{\n color: \"text.secondary\"\n }}>\n {segment.label ?? `${segment.value}%`}\n </Typography>\n </Box>\n ))}\n </Box>\n )}\n </Box>\n );\n}\n","/**\n * CountdownRing — circular countdown indicator that animates from\n * full to empty as a deadline approaches. Useful for time-limited\n * artifacts (quote expiry, OTP windows, session timers, signed-URL\n * lifetimes, etc.).\n *\n * Renders a CircularProgress whose `value` shrinks from 100 to 0\n * over the remaining window. The center label defaults to \"Ns\"\n * but can be customized via `formatLabel`. When the deadline has\n * passed, color flips to `error` and label switches to the\n * supplied `expiredLabel` (or \"Expired\").\n *\n * @example\n * ```tsx\n * <CountdownRing\n * deadline={quote.expiresAt}\n * totalMs={quote.ttlMs}\n * onExpire={() => setQuote(null)}\n * />\n * ```\n */\nimport { useEffect, useState, type ReactNode } from 'react';\nimport { CircularProgress, type ProgressColor } from './progress.js';\n\nexport interface CountdownRingProps {\n /** Deadline to count down to. Accepts Date or ISO string. */\n deadline: Date | string | null;\n /**\n * Total window length in ms — used as the denominator for the\n * progress percentage. If omitted, the ring is filled at mount\n * and tracks elapsed time relative to remaining.\n */\n totalMs?: number;\n /** Diameter in px. Default 40. */\n size?: number;\n /** Color while the timer is healthy. Default `primary`. */\n color?: ProgressColor;\n /** Color when remaining drops below `warningThresholdMs`. Default `warning`. */\n warningColor?: ProgressColor;\n /** Color after expiry. Default `error`. */\n expiredColor?: ProgressColor;\n /**\n * Switch to `warningColor` when remaining is below this.\n * Default 10s.\n */\n warningThresholdMs?: number;\n /** Tick interval in ms. Default 250. */\n tickIntervalMs?: number;\n /** Callback fired once when the deadline first elapses. */\n onExpire?: () => void;\n /**\n * Center-label formatter. Receives `(remainingMs, expired)` and\n * returns the string. Default: `Ns` while running, `expiredLabel`\n * after expiry.\n */\n formatLabel?: (remainingMs: number, expired: boolean) => string;\n /** Override the default expired label. */\n expiredLabel?: string;\n}\n\nexport function CountdownRing({\n deadline,\n totalMs,\n size = 40,\n color = 'primary',\n warningColor = 'warning',\n expiredColor = 'error',\n warningThresholdMs = 10_000,\n tickIntervalMs = 250,\n onExpire,\n formatLabel,\n expiredLabel = 'Expired',\n}: CountdownRingProps): ReactNode {\n const target = parseDeadline(deadline);\n const [now, setNow] = useState<number>(() => Date.now());\n\n useEffect(() => {\n if (!target) return undefined;\n const id = setInterval(() => setNow(Date.now()), tickIntervalMs);\n return () => clearInterval(id);\n }, [target, tickIntervalMs]);\n\n // Fire onExpire exactly once per deadline transition. We track the\n // previous \"expired\" status in state-derived form rather than a ref\n // to keep the hook order stable across renders.\n const remainingMs = target ? Math.max(0, target - now) : 0;\n const expired = target != null && remainingMs <= 0;\n useEffect(() => {\n if (expired && onExpire) onExpire();\n // intentional: re-fire only when transitioning from running → expired\n }, [expired, onExpire]);\n\n const denom = totalMs && totalMs > 0 ? totalMs : remainingMs > 0 ? remainingMs : 1;\n const value = expired ? 0 : Math.min(100, (remainingMs / denom) * 100);\n\n const activeColor: ProgressColor = expired\n ? expiredColor\n : remainingMs <= warningThresholdMs\n ? warningColor\n : color;\n\n const label = formatLabel\n ? formatLabel(remainingMs, expired)\n : expired\n ? expiredLabel\n : `${Math.ceil(remainingMs / 1000)}s`;\n\n return (\n <CircularProgress\n value={value}\n size={size}\n color={activeColor}\n showLabel\n formatLabel={() => label}\n />\n );\n}\n\nfunction parseDeadline(d: Date | string | null): number | null {\n if (!d) return null;\n if (d instanceof Date) return d.getTime();\n const t = Date.parse(d);\n return Number.isFinite(t) ? t : null;\n}\n","/**\n * VirtualList — windowed list for variable-height rows.\n *\n * Wraps `@tanstack/react-virtual` with the most common ergonomic\n * defaults: a scrolling viewport, dynamic height measurement (rows\n * may expand and the list rebalances), and an optional infinite-load\n * hook that fires when the user scrolls within `loadMoreThreshold`\n * px of the bottom.\n *\n * Use cases that drove the API: audit log dialogs (rows can expand\n * to reveal payloads), chat/message histories, paginated transaction\n * tables. Items are keyed by the caller-supplied `getKey` so row\n * identity survives reorder.\n *\n * @example\n * ```tsx\n * <VirtualList\n * items={trades}\n * getKey={(t) => t.id}\n * estimateSize={48}\n * maxHeight={500}\n * onEndReached={() => fetchNextPage()}\n * >\n * {(trade) => <TradeRow trade={trade} />}\n * </VirtualList>\n * ```\n */\nimport { useEffect, useRef, type ReactNode } from 'react';\nimport Box, { type BoxProps } from '@mui/material/Box';\nimport { useVirtualizer } from '@tanstack/react-virtual';\n\nexport interface VirtualListProps<T> {\n /** Source items, in render order. */\n items: readonly T[];\n /** Stable key for each row — needed for reorders and dynamic measurement. */\n getKey: (item: T, index: number) => string | number;\n /** Render a single row. */\n children: (item: T, index: number) => ReactNode;\n /**\n * Initial size estimate per row in px. The virtualizer will replace\n * this with the measured size once each row mounts.\n */\n estimateSize?: number;\n /**\n * Number of items to render outside the visible window on each\n * side. Higher values reduce blank flashes on fast scroll at the\n * cost of more DOM. Default 5.\n */\n overscan?: number;\n /**\n * Cap on the scroll viewport height. The Box auto-fills its parent\n * if not supplied — set this when the parent isn't height-bounded\n * (e.g. inside a Dialog without `fullHeight`).\n */\n maxHeight?: number | string;\n /** Fires when the user scrolls within `loadMoreThreshold` of the bottom. */\n onEndReached?: () => void;\n /** Distance from the bottom (px) at which `onEndReached` fires. Default 200. */\n loadMoreThreshold?: number;\n /** Forwarded to the outer scrolling Box for layout overrides. */\n sx?: BoxProps['sx'];\n /** Inner padding (px) — applied as content offset, not scroll padding. */\n paddingY?: number;\n}\n\nexport function VirtualList<T>({\n items,\n getKey,\n children,\n estimateSize = 48,\n overscan = 5,\n maxHeight,\n onEndReached,\n loadMoreThreshold = 200,\n sx,\n paddingY = 0,\n}: VirtualListProps<T>): ReactNode {\n const parentRef = useRef<HTMLDivElement | null>(null);\n\n const virtualizer = useVirtualizer({\n count: items.length,\n getScrollElement: () => parentRef.current,\n estimateSize: () => estimateSize,\n overscan,\n getItemKey: (index) => {\n const item = items[index];\n return item === undefined ? index : getKey(item, index);\n },\n });\n\n // Fire onEndReached when the last virtual item is within the\n // threshold of the visible area. We sample every render — cheap,\n // since virtualizer.getVirtualItems is already memoized.\n const virtualItems = virtualizer.getVirtualItems();\n const lastItem = virtualItems[virtualItems.length - 1];\n useEffect(() => {\n if (!onEndReached || !lastItem) return;\n if (lastItem.index >= items.length - 1) {\n // Already at the actual end — nothing more to load yet.\n return;\n }\n const scrollEl = parentRef.current;\n if (!scrollEl) return;\n const distanceToBottom =\n virtualizer.getTotalSize() - (scrollEl.scrollTop + scrollEl.clientHeight);\n if (distanceToBottom <= loadMoreThreshold) {\n onEndReached();\n }\n }, [lastItem, virtualizer, items.length, loadMoreThreshold, onEndReached]);\n\n return (\n <Box\n ref={parentRef}\n sx={{\n overflow: 'auto',\n contain: 'strict',\n maxHeight,\n height: maxHeight === undefined ? '100%' : undefined,\n ...sx,\n }}\n >\n <Box\n sx={{\n height: virtualizer.getTotalSize() + paddingY * 2,\n width: '100%',\n position: 'relative',\n }}\n >\n {virtualItems.map((virtualRow) => {\n const item = items[virtualRow.index];\n if (item === undefined) return null;\n return (\n <Box\n key={virtualRow.key}\n data-index={virtualRow.index}\n ref={virtualizer.measureElement}\n sx={{\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n transform: `translateY(${virtualRow.start + paddingY}px)`,\n }}\n >\n {children(item, virtualRow.index)}\n </Box>\n );\n })}\n </Box>\n </Box>\n );\n}\n","/**\n * CommandPalette — keyboard-driven action launcher.\n *\n * A modal palette opened by a global shortcut (default Cmd/Ctrl+K)\n * that lets the user search and trigger any `CommandAction` in the\n * registered set. Actions can be grouped (`group`) for visual\n * separation and filtered with case-insensitive matching against\n * `title`, `subtitle`, and any `keywords`. Arrow keys move the\n * highlight, Enter selects, Escape closes.\n *\n * Use cases: app-wide navigation jumps, frequently used admin\n * actions, contextual menus that need a quick-search affordance.\n *\n * @example\n * ```tsx\n * <CommandPalette\n * actions={[\n * {\n * id: 'go-users',\n * title: 'Go to Users',\n * group: 'Navigation',\n * keywords: ['admin', 'list'],\n * onSelect: () => navigate('/admin/users'),\n * },\n * ]}\n * />\n * ```\n */\nimport {\n type ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport Dialog from '@mui/material/Dialog';\nimport DialogContent from '@mui/material/DialogContent';\nimport TextField from '@mui/material/TextField';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport Box from '@mui/material/Box';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\nimport Divider from '@mui/material/Divider';\nimport Chip from '@mui/material/Chip';\nimport { alpha } from '@mui/material/styles';\n\nexport interface CommandAction {\n /** Stable action identifier — used as React key. */\n id: string;\n /** Primary text shown in the row. */\n title: string;\n /** Optional secondary text shown beside the title. */\n subtitle?: string;\n /** Group label — actions sharing a group are visually clustered. */\n group?: string;\n /** Extra search terms (synonyms, aliases). */\n keywords?: readonly string[];\n /** Optional leading icon. */\n icon?: ReactNode;\n /** Optional shortcut hint (e.g. ['⌘', 'P']) shown right-aligned. */\n shortcut?: readonly string[];\n /** Disable the action without removing it from the list. */\n disabled?: boolean;\n /** Action handler. The palette closes after `onSelect` resolves. */\n onSelect: () => void | Promise<void>;\n}\n\nexport interface CommandPaletteProps {\n /** Registered actions. Re-render to update; use a memoized array. */\n actions: readonly CommandAction[];\n /**\n * Controlled open state. If omitted, the palette opens itself when\n * `triggerKey` is pressed and closes on Escape/select.\n */\n open?: boolean;\n /** Open-state setter for the controlled mode. */\n onOpenChange?: (open: boolean) => void;\n /**\n * Global keyboard shortcut to open. Default `'k'` (paired with the\n * platform meta key — ⌘ on macOS, Ctrl elsewhere).\n */\n triggerKey?: string;\n /** Disable the global shortcut (useful in nested palettes). */\n disableShortcut?: boolean;\n /** Placeholder for the search field. */\n placeholder?: string;\n /** Empty-state copy shown when no actions match. */\n emptyMessage?: string;\n}\n\nexport function CommandPalette({\n actions,\n open: controlledOpen,\n onOpenChange,\n triggerKey = 'k',\n disableShortcut = false,\n placeholder = 'Type a command or search…',\n emptyMessage = 'No matching commands',\n}: CommandPaletteProps) {\n const [internalOpen, setInternalOpen] = useState(false);\n const open = controlledOpen ?? internalOpen;\n const setOpen = useCallback(\n (next: boolean) => {\n if (controlledOpen === undefined) setInternalOpen(next);\n onOpenChange?.(next);\n },\n [controlledOpen, onOpenChange],\n );\n\n const [query, setQuery] = useState('');\n const [highlight, setHighlight] = useState(0);\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n // Global shortcut. We listen on `keydown` capture-phase so editors\n // (TipTap, Monaco, etc.) can preventDefault before us if they need\n // the same key for something — they own focus, so they get priority.\n useEffect(() => {\n if (disableShortcut) return undefined;\n const onKey = (e: KeyboardEvent) => {\n const meta = e.metaKey || e.ctrlKey;\n if (meta && e.key.toLowerCase() === triggerKey.toLowerCase() && !e.altKey && !e.shiftKey) {\n e.preventDefault();\n setOpen(!open);\n }\n };\n window.addEventListener('keydown', onKey);\n return () => window.removeEventListener('keydown', onKey);\n }, [triggerKey, disableShortcut, open, setOpen]);\n\n // Reset query + highlight every time the palette opens.\n useEffect(() => {\n if (open) {\n setQuery('');\n setHighlight(0);\n // Defer focus to the next frame so the dialog's transition has\n // mounted the input.\n const id = requestAnimationFrame(() => inputRef.current?.focus());\n return () => cancelAnimationFrame(id);\n }\n return undefined;\n }, [open]);\n\n const filtered = useMemo(() => filterActions(actions, query), [actions, query]);\n\n // Re-clamp the highlight when filtering changes.\n useEffect(() => {\n if (highlight >= filtered.length) setHighlight(0);\n }, [filtered.length, highlight]);\n\n const runAction = useCallback(\n async (action: CommandAction) => {\n if (action.disabled) return;\n setOpen(false);\n try {\n await action.onSelect();\n } catch {\n // Swallow — the caller's onSelect is responsible for surfacing\n // its own errors. We just don't want a rejected promise to\n // crash the palette host.\n }\n },\n [setOpen],\n );\n\n const onKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n setHighlight((h) => (filtered.length === 0 ? 0 : (h + 1) % filtered.length));\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n setHighlight((h) => (filtered.length === 0 ? 0 : (h - 1 + filtered.length) % filtered.length));\n } else if (e.key === 'Enter') {\n e.preventDefault();\n const target = filtered[highlight];\n if (target) void runAction(target);\n } else if (e.key === 'Escape') {\n e.preventDefault();\n setOpen(false);\n }\n },\n [filtered, highlight, runAction, setOpen],\n );\n\n // Group rows for rendering. Within each group we record the absolute\n // index so the highlight cursor can address rows by their position\n // in the flat filtered list.\n const grouped = useMemo(() => groupActions(filtered), [filtered]);\n\n return (\n <Dialog\n open={open}\n onClose={() => setOpen(false)}\n fullWidth\n maxWidth=\"sm\"\n slotProps={{\n paper: {\n sx: { borderRadius: 2, mt: '10vh', alignSelf: 'flex-start' },\n },\n }}\n >\n <DialogContent sx={{ p: 0 }}>\n <Box sx={{ p: 2, pb: 1 }}>\n <TextField\n inputRef={inputRef}\n fullWidth\n variant=\"standard\"\n value={query}\n onChange={(e) => {\n setQuery(e.target.value);\n setHighlight(0);\n }}\n onKeyDown={onKeyDown}\n placeholder={placeholder}\n slotProps={{\n input: {\n disableUnderline: true,\n startAdornment: (\n <InputAdornment position=\"start\" sx={{ ml: 0.5, mr: 1 }}>\n <Box component=\"span\" sx={{ fontSize: 18, opacity: 0.6 }}>\n ⌘\n </Box>\n </InputAdornment>\n ),\n },\n }}\n />\n </Box>\n <Divider />\n <Box\n sx={{\n maxHeight: 360,\n overflowY: 'auto',\n py: 0.5,\n }}\n >\n {filtered.length === 0 ? (\n <Box sx={{ p: 3, textAlign: 'center' }}>\n <Typography variant=\"body2\" sx={{\n color: \"text.secondary\"\n }}>\n {emptyMessage}\n </Typography>\n </Box>\n ) : (\n grouped.map((g) => (\n <Box key={g.label ?? '__none__'}>\n {g.label ? (\n <Typography\n variant=\"caption\"\n sx={{\n color: \"text.secondary\",\n px: 2,\n py: 0.75,\n display: 'block',\n textTransform: 'uppercase',\n letterSpacing: 0.5\n }}>\n {g.label}\n </Typography>\n ) : null}\n {g.items.map((entry) => (\n <Row\n key={entry.action.id}\n action={entry.action}\n selected={entry.flatIndex === highlight}\n onSelect={() => void runAction(entry.action)}\n onHover={() => setHighlight(entry.flatIndex)}\n />\n ))}\n </Box>\n ))\n )}\n </Box>\n </DialogContent>\n </Dialog>\n );\n}\n\nfunction Row({\n action,\n selected,\n onSelect,\n onHover,\n}: {\n action: CommandAction;\n selected: boolean;\n onSelect: () => void;\n onHover: () => void;\n}) {\n const ref = useRef<HTMLDivElement | null>(null);\n\n // Keep the highlighted row in view as the user navigates.\n useEffect(() => {\n if (selected && ref.current) {\n ref.current.scrollIntoView({ block: 'nearest' });\n }\n }, [selected]);\n\n return (\n <Box\n ref={ref}\n onMouseEnter={onHover}\n onClick={onSelect}\n sx={(theme) => ({\n px: 2,\n py: 1.25,\n display: 'flex',\n alignItems: 'center',\n gap: 1.5,\n cursor: action.disabled ? 'not-allowed' : 'pointer',\n opacity: action.disabled ? 0.5 : 1,\n bgcolor: selected ? alpha(theme.palette.primary.main, 0.12) : 'transparent',\n '&:hover': {\n bgcolor: selected\n ? alpha(theme.palette.primary.main, 0.16)\n : alpha(theme.palette.action.hover, 1),\n },\n })}\n >\n {action.icon ? (\n <Box sx={{ display: 'flex', alignItems: 'center', width: 20, opacity: 0.8 }}>\n {action.icon}\n </Box>\n ) : null}\n <Box sx={{ flex: 1, minWidth: 0 }}>\n <Stack direction=\"row\" spacing={1} sx={{\n alignItems: \"baseline\"\n }}>\n <Typography variant=\"body2\" sx={{ fontWeight: 500 }} noWrap>\n {action.title}\n </Typography>\n {action.subtitle ? (\n <Typography variant=\"caption\" noWrap sx={{\n color: \"text.secondary\"\n }}>\n {action.subtitle}\n </Typography>\n ) : null}\n </Stack>\n </Box>\n {action.shortcut?.length ? (\n <Stack direction=\"row\" spacing={0.5}>\n {action.shortcut.map((k, i) => (\n <Chip\n key={i}\n size=\"small\"\n label={k}\n variant=\"outlined\"\n sx={{ height: 20, fontSize: 10, fontFamily: 'monospace' }}\n />\n ))}\n </Stack>\n ) : null}\n </Box>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Filtering — case-insensitive substring match across title, subtitle,\n// and any explicit keywords. We intentionally avoid full fuzzy matching\n// at this size; a substring score keeps the most-recently-typed prefix\n// at the top, which matches user mental models for command palettes.\n// ---------------------------------------------------------------------------\n\nfunction filterActions(\n actions: readonly CommandAction[],\n query: string,\n): readonly CommandAction[] {\n const q = query.trim().toLowerCase();\n if (!q) return actions;\n\n type Scored = { action: CommandAction; score: number };\n const scored: Scored[] = [];\n\n for (const action of actions) {\n const haystacks: string[] = [action.title.toLowerCase()];\n if (action.subtitle) haystacks.push(action.subtitle.toLowerCase());\n if (action.keywords?.length) {\n for (const k of action.keywords) haystacks.push(k.toLowerCase());\n }\n\n let bestScore = -1;\n for (const h of haystacks) {\n const idx = h.indexOf(q);\n if (idx === -1) continue;\n // Prefix matches outrank mid-string matches.\n const score = idx === 0 ? 1000 - h.length : 100 - idx;\n if (score > bestScore) bestScore = score;\n }\n if (bestScore >= 0) scored.push({ action, score: bestScore });\n }\n\n scored.sort((a, b) => b.score - a.score);\n return scored.map((s) => s.action);\n}\n\ninterface GroupedRow {\n label: string | undefined;\n items: { action: CommandAction; flatIndex: number }[];\n}\n\nfunction groupActions(actions: readonly CommandAction[]): GroupedRow[] {\n const out = new Map<string, GroupedRow>();\n let flatIndex = 0;\n for (const action of actions) {\n const label = action.group;\n const key = label ?? '__none__';\n let bucket = out.get(key);\n if (!bucket) {\n bucket = { label, items: [] };\n out.set(key, bucket);\n }\n bucket.items.push({ action, flatIndex });\n flatIndex += 1;\n }\n return [...out.values()];\n}\n","'use client';\n\n/**\n * Tabs Component\n *\n * Tabbed interface with panel support.\n *\n * @module @omnitron-dev/prism/components/tabs\n */\n\nimport type { ReactNode, ReactElement, SyntheticEvent, ComponentProps } from 'react';\nimport { useState, useCallback, Children, isValidElement, useMemo } from 'react';\nimport MuiTabs from '@mui/material/Tabs';\nimport MuiTab from '@mui/material/Tab';\nimport Box from '@mui/material/Box';\n\n/**\n * Tab item definition.\n */\nexport interface TabItem {\n /** Unique value for the tab */\n value: string;\n /** Tab label */\n label: string;\n /** Optional icon (must be a React element, not arbitrary ReactNode) */\n icon?: ReactElement;\n /** Tab content */\n content?: ReactNode;\n /** Disabled state */\n disabled?: boolean;\n}\n\n/**\n * Props for Tabs component.\n */\n// `action` clashes with MUI's imperative `action: Ref<TabsActions>` —\n// we're not exposing the imperative ref API (it's almost never used\n// in app code) and reclaim the name for the actions slot instead.\nexport interface TabsProps extends Omit<ComponentProps<typeof MuiTabs>, 'onChange' | 'value' | 'action'> {\n /** Tab items configuration */\n tabs?: TabItem[];\n /** Controlled value */\n value?: string;\n /** Default value (uncontrolled) */\n defaultValue?: string;\n /** Change handler */\n onChange?: (value: string) => void;\n /** Tab panel children (alternative to tabs prop) */\n children?: ReactNode;\n /** Keep unmounted tabs in DOM */\n keepMounted?: boolean;\n /**\n * Optional actions area rendered to the right of the tab strip\n * (e.g. a primary \"Create\" button). Mirrors the action slot on\n * `Breadcrumbs`. When set, the tab strip's bottom border moves\n * onto the surrounding flex row so the divider runs full-width\n * past the action area without breaking.\n */\n action?: ReactNode;\n}\n\n/**\n * Tabs - Tabbed interface component.\n *\n * @example\n * ```tsx\n * // Using tabs prop\n * <Tabs\n * tabs={[\n * { value: 'tab1', label: 'General', content: <GeneralSettings /> },\n * { value: 'tab2', label: 'Security', content: <SecuritySettings /> },\n * { value: 'tab3', label: 'Notifications', content: <NotificationSettings /> },\n * ]}\n * defaultValue=\"tab1\"\n * />\n *\n * // Using children\n * <Tabs defaultValue=\"overview\">\n * <TabPanel value=\"overview\" label=\"Overview\">\n * Overview content\n * </TabPanel>\n * <TabPanel value=\"details\" label=\"Details\">\n * Details content\n * </TabPanel>\n * </Tabs>\n * ```\n */\nexport function Tabs({\n tabs,\n value: controlledValue,\n defaultValue,\n onChange,\n children,\n keepMounted = false,\n action,\n ...muiProps\n}: TabsProps): ReactNode {\n const [internalValue, setInternalValue] = useState(defaultValue ?? tabs?.[0]?.value ?? '');\n\n const value = controlledValue ?? internalValue;\n\n const handleChange = useCallback(\n (_event: SyntheticEvent, newValue: string) => {\n if (controlledValue === undefined) {\n setInternalValue(newValue);\n }\n onChange?.(newValue);\n },\n [controlledValue, onChange]\n );\n\n // Extract tab items from children if using TabPanel pattern\n const tabItems = useMemo(() => {\n if (tabs) return tabs;\n\n const items: TabItem[] = [];\n Children.forEach(children, (child) => {\n if (isValidElement(child) && child.type === TabPanel) {\n const props = child.props as TabPanelProps;\n items.push({\n value: props.value,\n label: props.label ?? props.value,\n icon: props.icon,\n content: props.children,\n disabled: props.disabled,\n });\n }\n });\n return items;\n }, [tabs, children]);\n\n // Flex wrapper exists only to host the optional action node to\n // the right of the tab strip — no bottom divider; MuiTabs keeps\n // its own active-tab indicator track and that's the only line\n // we want under the strip.\n const hasAction = action !== undefined && action !== null && action !== false;\n\n return (\n <Box sx={{ width: '100%' }}>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 2,\n }}\n >\n <MuiTabs value={value} onChange={handleChange} {...muiProps}>\n {tabItems.map((tab) => (\n <MuiTab\n key={tab.value}\n value={tab.value}\n label={tab.label}\n icon={tab.icon}\n iconPosition=\"start\"\n disabled={tab.disabled}\n />\n ))}\n </MuiTabs>\n {hasAction && (\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n gap: 1,\n flexShrink: 0,\n }}\n >\n {action}\n </Box>\n )}\n </Box>\n {tabItems.map((tab) => {\n const isActive = tab.value === value;\n if (!isActive && !keepMounted) return null;\n // Strip-only usage (`tabs` entries without `content`):\n // the page renders its own content below the tabs and\n // just needs the navigation strip. Skipping the panel\n // box keeps the layout flush.\n if (tab.content === undefined) return null;\n\n return (\n <Box\n key={tab.value}\n role=\"tabpanel\"\n hidden={!isActive}\n id={`tabpanel-${tab.value}`}\n aria-labelledby={`tab-${tab.value}`}\n sx={{ pt: 2 }}\n >\n {tab.content}\n </Box>\n );\n })}\n </Box>\n );\n}\n\n/**\n * Props for TabPanel component.\n */\nexport interface TabPanelProps {\n /** Unique value (must match Tabs value) */\n value: string;\n /** Tab label */\n label?: string;\n /** Optional icon (must be a React element, not arbitrary ReactNode) */\n icon?: ReactElement;\n /** Panel content */\n children?: ReactNode;\n /** Disabled state */\n disabled?: boolean;\n}\n\n/**\n * TabPanel - Individual tab panel for use with Tabs children pattern.\n *\n * @example\n * ```tsx\n * <Tabs defaultValue=\"tab1\">\n * <TabPanel value=\"tab1\" label=\"First\">\n * First panel content\n * </TabPanel>\n * <TabPanel value=\"tab2\" label=\"Second\">\n * Second panel content\n * </TabPanel>\n * </Tabs>\n * ```\n */\nexport function TabPanel({ children }: TabPanelProps): ReactNode {\n // This component is only used for configuration extraction\n // The actual rendering happens in the Tabs component\n return <>{children}</>;\n}\n\n/**\n * Hook for managing tab state externally.\n */\nexport interface UseTabsOptions {\n /** Initial tab value */\n defaultValue?: string;\n /** Callback when tab changes */\n onChange?: (value: string) => void;\n}\n\nexport interface UseTabsReturn {\n /** Current tab value */\n value: string;\n /** Set the active tab */\n setValue: (value: string) => void;\n /** Props to spread on Tabs component */\n tabsProps: {\n value: string;\n onChange: (value: string) => void;\n };\n}\n\n/**\n * useTabs - Hook for external tab state management.\n *\n * Uses proper memoization to prevent unnecessary re-renders.\n *\n * @example\n * ```tsx\n * const { tabsProps, value, setValue } = useTabs({ defaultValue: 'tab1' });\n *\n * return (\n * <>\n * <button onClick={() => setValue('tab2')}>Go to Tab 2</button>\n * <Tabs {...tabsProps} tabs={tabs} />\n * </>\n * );\n * ```\n */\nexport function useTabs({ defaultValue = '', onChange }: UseTabsOptions = {}): UseTabsReturn {\n const [value, setValueInternal] = useState(defaultValue);\n\n const setValue = useCallback(\n (newValue: string) => {\n setValueInternal(newValue);\n onChange?.(newValue);\n },\n [onChange]\n );\n\n // Memoize the return value to prevent unnecessary re-renders\n return useMemo(\n () => ({\n value,\n setValue,\n tabsProps: {\n value,\n onChange: setValue,\n },\n }),\n [value, setValue]\n );\n}\n","'use client';\n\n/**\n * Accordion Component\n *\n * Expandable content panels.\n *\n * @module @omnitron-dev/prism/components/accordion\n */\n\nimport type { ReactNode, ComponentProps } from 'react';\nimport { useState, useCallback } from 'react';\nimport MuiAccordion from '@mui/material/Accordion';\nimport MuiAccordionSummary from '@mui/material/AccordionSummary';\nimport MuiAccordionDetails from '@mui/material/AccordionDetails';\nimport Typography from '@mui/material/Typography';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\n\n/**\n * Accordion item definition.\n */\nexport interface AccordionItem {\n /** Unique identifier */\n id: string;\n /** Header title */\n title: string;\n /** Optional subtitle */\n subtitle?: string;\n /** Panel content */\n content: ReactNode;\n /** Disabled state */\n disabled?: boolean;\n /** Optional icon */\n icon?: ReactNode;\n}\n\n/**\n * Props for Accordion component.\n */\nexport interface AccordionProps {\n /** Accordion items */\n items: AccordionItem[];\n /** Allow multiple panels open (default: false for single-open mode) */\n multiple?: boolean;\n /** Default expanded panel(s) */\n defaultExpanded?: string | string[];\n /** Controlled expanded state */\n expanded?: string | string[];\n /** Change handler */\n onChange?: (expanded: string[]) => void;\n /** Accordion variant */\n variant?: 'default' | 'outlined' | 'elevated';\n /** Disable gutter between panels */\n disableGutters?: boolean;\n}\n\n/**\n * Accordion - Expandable content panels.\n *\n * @example\n * ```tsx\n * // Single-open mode (default)\n * <Accordion\n * items={[\n * { id: 'panel1', title: 'Section 1', content: <Panel1Content /> },\n * { id: 'panel2', title: 'Section 2', content: <Panel2Content /> },\n * { id: 'panel3', title: 'Section 3', content: <Panel3Content /> },\n * ]}\n * defaultExpanded=\"panel1\"\n * />\n *\n * // Multiple-open mode\n * <Accordion\n * items={items}\n * multiple\n * defaultExpanded={['panel1', 'panel3']}\n * />\n * ```\n */\nexport function Accordion({\n items,\n multiple = false,\n defaultExpanded,\n expanded: controlledExpanded,\n onChange,\n variant = 'default',\n disableGutters = false,\n}: AccordionProps): ReactNode {\n const [internalExpanded, setInternalExpanded] = useState<string[]>(() => {\n if (defaultExpanded === undefined) return [];\n return Array.isArray(defaultExpanded) ? defaultExpanded : [defaultExpanded];\n });\n\n const expanded =\n controlledExpanded !== undefined\n ? Array.isArray(controlledExpanded)\n ? controlledExpanded\n : [controlledExpanded]\n : internalExpanded;\n\n const handleChange = useCallback(\n (panelId: string) => (_event: React.SyntheticEvent, isExpanded: boolean) => {\n let newExpanded: string[];\n\n if (multiple) {\n newExpanded = isExpanded ? [...expanded, panelId] : expanded.filter((id) => id !== panelId);\n } else {\n newExpanded = isExpanded ? [panelId] : [];\n }\n\n if (controlledExpanded === undefined) {\n setInternalExpanded(newExpanded);\n }\n onChange?.(newExpanded);\n },\n [expanded, multiple, controlledExpanded, onChange]\n );\n\n const getAccordionSx = (): ComponentProps<typeof MuiAccordion>['sx'] => {\n switch (variant) {\n case 'outlined':\n return {\n border: 1,\n borderColor: 'divider',\n '&:not(:last-child)': { borderBottom: 0 },\n '&::before': { display: 'none' },\n boxShadow: 'none',\n };\n case 'elevated':\n return {\n boxShadow: 2,\n '&::before': { display: 'none' },\n mb: disableGutters ? 0 : 1,\n };\n default:\n return {};\n }\n };\n\n return (\n <>\n {items.map((item) => (\n <MuiAccordion\n key={item.id}\n expanded={expanded.includes(item.id)}\n onChange={handleChange(item.id)}\n disabled={item.disabled}\n disableGutters={disableGutters}\n sx={getAccordionSx()}\n >\n <MuiAccordionSummary\n expandIcon={<ExpandMoreIcon />}\n aria-controls={`${item.id}-content`}\n id={`${item.id}-header`}\n >\n {item.icon && (\n <Typography component=\"span\" sx={{ mr: 1, display: 'flex', alignItems: 'center' }}>\n {item.icon}\n </Typography>\n )}\n <Typography component=\"span\" sx={{ fontWeight: 500 }}>\n {item.title}\n </Typography>\n {item.subtitle && (\n <Typography\n component=\"span\"\n sx={{\n color: \"text.secondary\",\n ml: 1\n }}>\n {item.subtitle}\n </Typography>\n )}\n </MuiAccordionSummary>\n <MuiAccordionDetails>{item.content}</MuiAccordionDetails>\n </MuiAccordion>\n ))}\n </>\n );\n}\n\n/**\n * Props for SimpleAccordion component.\n */\nexport interface SimpleAccordionProps extends Omit<ComponentProps<typeof MuiAccordion>, 'children'> {\n /** Header title */\n title: string;\n /** Optional subtitle */\n subtitle?: string;\n /** Panel content */\n children: ReactNode;\n /** Optional icon */\n icon?: ReactNode;\n}\n\n/**\n * SimpleAccordion - Single expandable panel.\n *\n * @example\n * ```tsx\n * <SimpleAccordion title=\"Advanced Settings\" defaultExpanded>\n * <AdvancedSettings />\n * </SimpleAccordion>\n * ```\n */\nexport function SimpleAccordion({ title, subtitle, children, icon, ...props }: SimpleAccordionProps): ReactNode {\n return (\n <MuiAccordion {...props}>\n <MuiAccordionSummary expandIcon={<ExpandMoreIcon />}>\n {icon && (\n <Typography component=\"span\" sx={{ mr: 1, display: 'flex', alignItems: 'center' }}>\n {icon}\n </Typography>\n )}\n <Typography component=\"span\" sx={{ fontWeight: 500 }}>\n {title}\n </Typography>\n {subtitle && (\n <Typography\n component=\"span\"\n sx={{\n color: \"text.secondary\",\n ml: 1\n }}>\n {subtitle}\n </Typography>\n )}\n </MuiAccordionSummary>\n <MuiAccordionDetails>{children}</MuiAccordionDetails>\n </MuiAccordion>\n );\n}\n\n/**\n * Hook for managing accordion state externally.\n */\nexport interface UseAccordionOptions {\n /** Allow multiple panels open */\n multiple?: boolean;\n /** Default expanded panel(s) */\n defaultExpanded?: string | string[];\n /** Callback when expanded panels change */\n onChange?: (expanded: string[]) => void;\n}\n\nexport interface UseAccordionReturn {\n /** Currently expanded panel(s) */\n expanded: string[];\n /** Check if a panel is expanded */\n isExpanded: (id: string) => boolean;\n /** Toggle a panel */\n toggle: (id: string) => void;\n /** Expand a panel */\n expand: (id: string) => void;\n /** Collapse a panel */\n collapse: (id: string) => void;\n /** Expand all panels */\n expandAll: (ids: string[]) => void;\n /** Collapse all panels */\n collapseAll: () => void;\n /** Props to spread on Accordion component */\n accordionProps: {\n expanded: string[];\n multiple: boolean;\n onChange: (expanded: string[]) => void;\n };\n}\n\n/**\n * useAccordion - Hook for external accordion state management.\n *\n * @example\n * ```tsx\n * const { accordionProps, expandAll, collapseAll } = useAccordion({\n * multiple: true,\n * defaultExpanded: ['panel1'],\n * });\n *\n * return (\n * <>\n * <button onClick={() => expandAll(['panel1', 'panel2', 'panel3'])}>\n * Expand All\n * </button>\n * <button onClick={collapseAll}>Collapse All</button>\n * <Accordion {...accordionProps} items={items} />\n * </>\n * );\n * ```\n */\nexport function useAccordion({\n multiple = false,\n defaultExpanded,\n onChange,\n}: UseAccordionOptions = {}): UseAccordionReturn {\n const [expanded, setExpanded] = useState<string[]>(() => {\n if (defaultExpanded === undefined) return [];\n return Array.isArray(defaultExpanded) ? defaultExpanded : [defaultExpanded];\n });\n\n const isExpanded = useCallback((id: string) => expanded.includes(id), [expanded]);\n\n const updateExpanded = useCallback(\n (newExpanded: string[]) => {\n setExpanded(newExpanded);\n onChange?.(newExpanded);\n },\n [onChange]\n );\n\n const toggle = useCallback(\n (id: string) => {\n if (expanded.includes(id)) {\n updateExpanded(expanded.filter((e) => e !== id));\n } else if (multiple) {\n updateExpanded([...expanded, id]);\n } else {\n updateExpanded([id]);\n }\n },\n [expanded, multiple, updateExpanded]\n );\n\n const expand = useCallback(\n (id: string) => {\n if (!expanded.includes(id)) {\n if (multiple) {\n updateExpanded([...expanded, id]);\n } else {\n updateExpanded([id]);\n }\n }\n },\n [expanded, multiple, updateExpanded]\n );\n\n const collapse = useCallback(\n (id: string) => {\n updateExpanded(expanded.filter((e) => e !== id));\n },\n [expanded, updateExpanded]\n );\n\n const expandAll = useCallback(\n (ids: string[]) => {\n if (multiple) {\n updateExpanded(ids);\n } else if (ids.length > 0) {\n updateExpanded([ids[0]]);\n }\n },\n [multiple, updateExpanded]\n );\n\n const collapseAll = useCallback(() => {\n updateExpanded([]);\n }, [updateExpanded]);\n\n return {\n expanded,\n isExpanded,\n toggle,\n expand,\n collapse,\n expandAll,\n collapseAll,\n accordionProps: {\n expanded,\n multiple,\n onChange: updateExpanded,\n },\n };\n}\n","'use client';\n\n/**\n * Menu Component\n *\n * Dropdown menu with various item types.\n *\n * @module @omnitron-dev/prism/components/menu\n */\n\nimport type { ReactNode, MouseEvent } from 'react';\nimport { useState, useCallback } from 'react';\nimport MuiMenu 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 Typography from '@mui/material/Typography';\n\n// =============================================================================\n// SHARED RENDERING\n// =============================================================================\n\n/**\n * Render menu items (shared between Menu and ContextMenu).\n *\n * @param items - Array of menu item definitions\n * @param onItemClick - Click handler for menu items\n * @returns Array of rendered menu elements\n */\nfunction renderMenuItems(items: MenuItemDef[], onItemClick: (item: MenuItemDef) => void): ReactNode[] {\n return items.map((item, index) => {\n if (item.type === 'divider') {\n return <Divider key={`divider-${index}`} sx={{ my: 0.5 }} />;\n }\n\n if (item.type === 'header') {\n return (\n <Typography\n key={`header-${index}`}\n variant=\"overline\"\n sx={{ px: 2, py: 0.5, display: 'block', color: 'text.secondary' }}\n >\n {item.label}\n </Typography>\n );\n }\n\n return (\n <MenuItem\n key={item.key ?? `item-${index}`}\n onClick={() => onItemClick(item)}\n disabled={item.disabled}\n sx={{\n color: item.danger ? 'error.main' : undefined,\n '&:hover': item.danger ? { bgcolor: 'error.lighter' } : undefined,\n }}\n >\n {item.icon && <ListItemIcon sx={{ color: item.danger ? 'error.main' : undefined }}>{item.icon}</ListItemIcon>}\n <ListItemText>{item.label}</ListItemText>\n {item.shortcut && (\n <Typography\n variant=\"caption\"\n sx={{\n color: \"text.secondary\",\n ml: 2\n }}>\n {item.shortcut}\n </Typography>\n )}\n </MenuItem>\n );\n });\n}\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\n/**\n * Menu item types.\n */\nexport type MenuItemType = 'item' | 'divider' | 'header';\n\n/**\n * Menu item definition.\n */\nexport interface MenuItemDef {\n /** Item type */\n type?: MenuItemType;\n /** Unique key (required for items) */\n key?: string;\n /** Item label */\n label?: string;\n /** Optional icon */\n icon?: ReactNode;\n /** Click handler */\n onClick?: () => void;\n /** Disabled state */\n disabled?: boolean;\n /** Danger/destructive action styling */\n danger?: boolean;\n /** Shortcut hint text */\n shortcut?: string;\n}\n\n/**\n * Props for Menu component.\n */\nexport interface MenuProps {\n /** Menu items */\n items: MenuItemDef[];\n /** Anchor element */\n anchorEl: HTMLElement | null;\n /** Open state */\n open: boolean;\n /** Close handler */\n onClose: () => void;\n /** Minimum width */\n minWidth?: number;\n /** Anchor origin */\n anchorOrigin?: {\n vertical: 'top' | 'center' | 'bottom';\n horizontal: 'left' | 'center' | 'right';\n };\n /** Transform origin */\n transformOrigin?: {\n vertical: 'top' | 'center' | 'bottom';\n horizontal: 'left' | 'center' | 'right';\n };\n}\n\n/**\n * Menu - Dropdown menu component.\n *\n * @example\n * ```tsx\n * const { anchorEl, open, handleOpen, handleClose } = useMenu();\n *\n * <Button onClick={handleOpen}>Open Menu</Button>\n * <Menu\n * anchorEl={anchorEl}\n * open={open}\n * onClose={handleClose}\n * items={[\n * { key: 'edit', label: 'Edit', icon: <EditIcon /> },\n * { key: 'duplicate', label: 'Duplicate', icon: <CopyIcon /> },\n * { type: 'divider' },\n * { key: 'delete', label: 'Delete', icon: <DeleteIcon />, danger: true },\n * ]}\n * />\n * ```\n */\nexport function Menu({\n items,\n anchorEl,\n open,\n onClose,\n minWidth = 180,\n anchorOrigin = { vertical: 'bottom', horizontal: 'right' },\n transformOrigin = { vertical: 'top', horizontal: 'right' },\n}: MenuProps): ReactNode {\n const handleItemClick = useCallback(\n (item: MenuItemDef) => {\n item.onClick?.();\n onClose();\n },\n [onClose]\n );\n\n return (\n <MuiMenu\n anchorEl={anchorEl}\n open={open}\n onClose={onClose}\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n slotProps={{\n paper: {\n sx: { minWidth },\n },\n }}\n >\n {renderMenuItems(items, handleItemClick)}\n </MuiMenu>\n );\n}\n\n/**\n * Return type for useMenu hook.\n */\nexport interface UseMenuReturn {\n /** Anchor element for menu positioning */\n anchorEl: HTMLElement | null;\n /** Whether menu is open */\n open: boolean;\n /** Open menu handler (pass as onClick) */\n handleOpen: (event: MouseEvent<HTMLElement>) => void;\n /** Close menu handler */\n handleClose: () => void;\n /** Toggle menu handler */\n handleToggle: (event: MouseEvent<HTMLElement>) => void;\n /** Props to spread on Menu component */\n menuProps: {\n anchorEl: HTMLElement | null;\n open: boolean;\n onClose: () => void;\n };\n}\n\n/**\n * useMenu - Hook for managing menu state.\n *\n * @example\n * ```tsx\n * const menu = useMenu();\n *\n * return (\n * <>\n * <IconButton onClick={menu.handleOpen}>\n * <MoreVertIcon />\n * </IconButton>\n * <Menu {...menu.menuProps} items={menuItems} />\n * </>\n * );\n * ```\n */\nexport function useMenu(): UseMenuReturn {\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n\n const open = Boolean(anchorEl);\n\n const handleOpen = useCallback((event: MouseEvent<HTMLElement>) => {\n setAnchorEl(event.currentTarget);\n }, []);\n\n const handleClose = useCallback(() => {\n setAnchorEl(null);\n }, []);\n\n const handleToggle = useCallback((event: MouseEvent<HTMLElement>) => {\n setAnchorEl((prev) => (prev ? null : event.currentTarget));\n }, []);\n\n return {\n anchorEl,\n open,\n handleOpen,\n handleClose,\n handleToggle,\n menuProps: {\n anchorEl,\n open,\n onClose: handleClose,\n },\n };\n}\n\n/**\n * Props for ContextMenu component.\n */\nexport interface ContextMenuProps extends Omit<MenuProps, 'anchorEl' | 'open' | 'onClose'> {\n /** Children to wrap with context menu */\n children: ReactNode;\n}\n\n/**\n * ContextMenu - Right-click context menu wrapper.\n *\n * @example\n * ```tsx\n * <ContextMenu\n * items={[\n * { key: 'cut', label: 'Cut', shortcut: '⌘X' },\n * { key: 'copy', label: 'Copy', shortcut: '⌘C' },\n * { key: 'paste', label: 'Paste', shortcut: '⌘V' },\n * ]}\n * >\n * <div>Right-click me!</div>\n * </ContextMenu>\n * ```\n */\nexport function ContextMenu({ items, children, ...menuProps }: ContextMenuProps): ReactNode {\n const [contextMenu, setContextMenu] = useState<{\n mouseX: number;\n mouseY: number;\n } | null>(null);\n\n const handleContextMenu = useCallback((event: MouseEvent) => {\n event.preventDefault();\n setContextMenu({\n mouseX: event.clientX + 2,\n mouseY: event.clientY - 6,\n });\n }, []);\n\n const handleClose = useCallback(() => {\n setContextMenu(null);\n }, []);\n\n const handleItemClick = useCallback(\n (item: MenuItemDef) => {\n item.onClick?.();\n handleClose();\n },\n [handleClose]\n );\n\n return (\n <>\n <div onContextMenu={handleContextMenu}>{children}</div>\n <MuiMenu\n open={contextMenu !== null}\n onClose={handleClose}\n anchorReference=\"anchorPosition\"\n anchorPosition={contextMenu !== null ? { top: contextMenu.mouseY, left: contextMenu.mouseX } : undefined}\n slotProps={{\n paper: {\n sx: { minWidth: menuProps.minWidth ?? 180 },\n },\n }}\n >\n {renderMenuItems(items, handleItemClick)}\n </MuiMenu>\n </>\n );\n}\n","'use client';\n\n/**\n * NavigationProgress\n *\n * NProgress-based top-of-page progress bar for route transitions.\n * Starts on internal anchor clicks and history changes, completes on pathname change.\n *\n * Framework-agnostic: accepts `pathname` as a prop (pass from your router).\n *\n * @module @omnitron-dev/prism/components/navigation-progress\n */\n\nimport NProgress from 'nprogress';\nimport { useRef, useEffect } from 'react';\n\n// ---------------------------------------------------------------------------\n// Styles (injected via <style> tag to avoid CSS import requirement)\n// ---------------------------------------------------------------------------\n\nconst PRIMARY = 'var(--prism-palette-primary-main, var(--palette-primary-main, #1976d2))';\n\nconst STYLES = `\n#nprogress {\n top: 0;\n left: 0;\n width: 100%;\n height: 2.5px;\n z-index: 9999;\n position: fixed;\n pointer-events: none;\n}\n#nprogress .bar {\n height: 100%;\n background-color: ${PRIMARY};\n box-shadow: 0 0 2.5px ${PRIMARY};\n}\n#nprogress .peg {\n right: 0;\n opacity: 1;\n width: 100px;\n height: 100%;\n display: block;\n position: absolute;\n transform: rotate(3deg) translate(0px, -4px);\n box-shadow:\n 0 0 10px ${PRIMARY},\n 0 0 5px ${PRIMARY};\n}\n`;\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface NavigationProgressProps {\n /** Current route pathname. */\n pathname: string;\n /**\n * Current route search string (including the leading `?`, as react-router's\n * `useLocation().search` returns it). Optional for backwards compat — when\n * provided, the bar also completes on search-only navigation (e.g. tab\n * switches encoded in query params). When omitted, only pathname changes\n * trigger completion, which leaves the bar stuck on `?tab=foo` style\n * transitions.\n */\n search?: string;\n /** Completion delay in ms (avoids flashing on fast transitions). Default: 100 */\n delay?: number;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Check if an anchor should trigger the progress bar. */\nfunction isValidAnchor(element: HTMLAnchorElement): boolean {\n const href = element.getAttribute('href')?.trim() ?? '';\n const target = element.getAttribute('target');\n return href.startsWith('/') && target !== '_blank';\n}\n\n/** Compare two URLs ignoring hash. */\nfunction isSamePath(a: string, b: string): boolean {\n try {\n const urlA = new URL(a, window.location.origin);\n const urlB = new URL(b, window.location.origin);\n return urlA.pathname === urlB.pathname && urlA.search === urlB.search;\n } catch {\n return a === b;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Hook\n// ---------------------------------------------------------------------------\n\nfunction useProgressBar(pathname: string, search: string, delay: number) {\n const currentUrlRef = useRef('');\n\n // Initialize\n useEffect(() => {\n currentUrlRef.current = window.location.href;\n }, []);\n\n // Start on navigation\n useEffect(() => {\n const handleNavigation = (newUrl: string) => {\n if (newUrl && !isSamePath(newUrl, currentUrlRef.current)) {\n currentUrlRef.current = newUrl;\n NProgress.start();\n }\n };\n\n // Click delegation for anchor tags\n const handleClick = (event: MouseEvent) => {\n const target = event.target as HTMLElement;\n const anchor = target.closest('a[href]') as HTMLAnchorElement | null;\n if (anchor && isValidAnchor(anchor)) {\n handleNavigation(anchor.href);\n }\n };\n\n // Browser back/forward\n const handlePopState = () => {\n handleNavigation(window.location.href);\n };\n\n // Patch history methods for programmatic navigation\n const patchHistory = (method: 'pushState' | 'replaceState') => {\n const original = window.history[method];\n window.history[method] = new Proxy(original, {\n apply: (target, thisArg, args: [data: unknown, unused: string, url?: string | URL | null]) => {\n const newUrl = args[2];\n if (typeof newUrl === 'string') {\n handleNavigation(new URL(newUrl, window.location.origin).href);\n }\n return target.apply(thisArg, args);\n },\n });\n };\n\n patchHistory('pushState');\n patchHistory('replaceState');\n\n document.addEventListener('click', handleClick);\n window.addEventListener('popstate', handlePopState);\n\n return () => {\n document.removeEventListener('click', handleClick);\n window.removeEventListener('popstate', handlePopState);\n };\n }, []);\n\n // Done on full URL change.\n //\n // Pre-fix this only depended on `pathname`, so search-only navigation\n // (tab switches, filter changes, anything that updates `?…=…` while\n // staying on the same route) started the bar via `pushState` but\n // never completed it — `pathname` never changed, so the effect didn't\n // re-fire. The bar then stuck at the top of the page indefinitely.\n // Keying on `pathname + search` makes start and completion symmetric.\n useEffect(() => {\n const timeout = setTimeout(() => NProgress.done(), delay);\n return () => clearTimeout(timeout);\n }, [pathname, search, delay]);\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\n/**\n * NavigationProgress - Top-of-page progress bar for route transitions.\n *\n * @example\n * ```tsx\n * import { useLocation } from 'react-router-dom';\n * import { NavigationProgress } from '@omnitron-dev/prism';\n *\n * function App() {\n * const { pathname } = useLocation();\n * return (\n * <>\n * <NavigationProgress pathname={pathname} />\n * <Routes>...</Routes>\n * </>\n * );\n * }\n * ```\n */\nexport function NavigationProgress({ pathname, search = '', delay = 100 }: NavigationProgressProps) {\n useEffect(() => {\n NProgress.configure({ showSpinner: false });\n return () => {\n NProgress.done();\n };\n }, []);\n\n useProgressBar(pathname, search, delay);\n\n return <style>{STYLES}</style>;\n}\n","'use client';\n\n/**\n * ScrollToTop\n *\n * Scrolls the window to the top on pathname change.\n * Framework-agnostic: accepts `pathname` as a prop.\n *\n * @module @omnitron-dev/prism/components/scroll-to-top\n */\n\nimport { useEffect } from 'react';\n\nexport interface ScrollToTopProps {\n /** Current route pathname. Scrolls to top on change. */\n pathname: string;\n}\n\n/**\n * ScrollToTop - Restores scroll position to top on route change.\n *\n * @example\n * ```tsx\n * import { useLocation } from 'react-router-dom';\n * import { ScrollToTop } from '@omnitron-dev/prism';\n *\n * function App() {\n * const { pathname } = useLocation();\n * return (\n * <>\n * <ScrollToTop pathname={pathname} />\n * <Routes>...</Routes>\n * </>\n * );\n * }\n * ```\n */\nexport function ScrollToTop({ pathname }: ScrollToTopProps) {\n useEffect(() => {\n window.scrollTo(0, 0);\n }, [pathname]);\n\n return null;\n}\n","'use client';\n\n/**\n * Error Boundary Component\n *\n * React error boundary for graceful error handling.\n * Includes stack trace parsing for improved debugging.\n *\n * @module @omnitron-dev/prism/components/error-boundary\n */\n\nimport { Component, useState, type ReactNode, type ErrorInfo } from 'react';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport Typography from '@mui/material/Typography';\nimport Collapse from '@mui/material/Collapse';\nimport IconButton from '@mui/material/IconButton';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport ContentCopyIcon from '@mui/icons-material/ContentCopy';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\n// =============================================================================\n// STACK TRACE PARSING\n// =============================================================================\n\n/**\n * Parsed stack frame information.\n */\nexport interface StackFrame {\n /** Function or method name */\n functionName: string | null;\n /** Source file path */\n filePath: string | null;\n /** Line number in the file */\n lineNumber: number | null;\n /** Column number in the file */\n columnNumber: number | null;\n /** Whether this frame is from app code (src/) vs node_modules */\n isAppCode: boolean;\n}\n\n/**\n * Parsed stack trace result.\n */\nexport interface ParsedStackTrace {\n /** Primary error location (first app code frame) */\n primary: StackFrame | null;\n /** All parsed frames */\n frames: StackFrame[];\n /** Original stack trace string */\n raw: string;\n}\n\n/**\n * Parse a single stack frame line.\n *\n * @param line - Stack trace line\n * @returns Parsed stack frame or null if couldn't parse\n */\nfunction parseStackFrame(line: string): StackFrame | null {\n // Match patterns like:\n // \"at functionName (file.tsx:123:45)\"\n // \"at Object.functionName (file.tsx:123:45)\"\n // \"at file.tsx:123:45\"\n // \"at async functionName (file.tsx:123:45)\"\n const patterns = [\n // Named function with file: at functionName (file:line:col)\n /at\\s+(?:async\\s+)?([^\\s(]+)\\s+\\((.+?):(\\d+):(\\d+)\\)/,\n // Anonymous at file: at file:line:col\n /at\\s+(.+?):(\\d+):(\\d+)/,\n // Webpack/Vite transformed: at Module.functionName (file?xxx:line:col)\n /at\\s+(?:async\\s+)?(?:Module\\.)?([^\\s(]+)\\s+\\((.+?)\\?[^:]*:(\\d+):(\\d+)\\)/,\n ];\n\n for (const pattern of patterns) {\n const match = line.match(pattern);\n if (match) {\n const [, funcOrFile, file, lineStr, colStr] = match;\n\n // Check if first capture is actually a function name or file path\n const hasFile = file !== undefined;\n const functionName = hasFile ? funcOrFile : null;\n const filePath = hasFile ? file : funcOrFile;\n const lineNumber = parseInt(hasFile ? lineStr : (file as string), 10);\n const columnNumber = parseInt(hasFile ? colStr : lineStr, 10);\n\n // Determine if this is app code vs library code\n const isAppCode = filePath.includes('/src/') || (filePath.includes('src/') && !filePath.includes('node_modules'));\n\n return {\n functionName: functionName || null,\n filePath: cleanFilePath(filePath),\n lineNumber: isNaN(lineNumber) ? null : lineNumber,\n columnNumber: isNaN(columnNumber) ? null : columnNumber,\n isAppCode,\n };\n }\n }\n\n return null;\n}\n\n/**\n * Clean file path for display.\n */\nfunction cleanFilePath(path: string): string {\n // Remove webpack/vite query strings\n const cleaned = path.replace(/\\?.*$/, '');\n\n // Try to extract relative path from src/\n const srcIndex = cleaned.indexOf('/src/');\n if (srcIndex !== -1) {\n return cleaned.slice(srcIndex + 1);\n }\n\n // Try to get a reasonable path from the end\n const parts = cleaned.split('/');\n if (parts.length > 3) {\n return parts.slice(-3).join('/');\n }\n\n return cleaned;\n}\n\n/**\n * Parse an error stack trace into structured data.\n *\n * Extracts function names, file paths, and line numbers from stack traces.\n * Identifies app code vs library code for better debugging.\n *\n * @param stack - Error stack trace string\n * @returns Parsed stack trace with frames\n *\n * @example\n * ```tsx\n * try {\n * throw new Error('Something went wrong');\n * } catch (error) {\n * const parsed = parseStackTrace(error.stack);\n * console.log('Error in:', parsed.primary?.filePath);\n * console.log('Function:', parsed.primary?.functionName);\n * console.log('Line:', parsed.primary?.lineNumber);\n * }\n * ```\n */\nexport function parseStackTrace(stack?: string): ParsedStackTrace {\n if (!stack) {\n return { primary: null, frames: [], raw: '' };\n }\n\n const lines = stack.split('\\n');\n const frames: StackFrame[] = [];\n\n for (const line of lines) {\n const frame = parseStackFrame(line.trim());\n if (frame) {\n frames.push(frame);\n }\n }\n\n // Find the first app code frame as the primary location\n const primary = frames.find((f) => f.isAppCode) ?? frames[0] ?? null;\n\n return { primary, frames, raw: stack };\n}\n\n/**\n * Get a summary of the error location.\n *\n * @param error - Error object\n * @returns Human-readable error location\n */\nexport function getErrorLocation(error: Error): string {\n const parsed = parseStackTrace(error.stack);\n const { primary } = parsed;\n\n if (!primary) {\n return 'Unknown location';\n }\n\n const parts: string[] = [];\n\n if (primary.functionName) {\n parts.push(`in ${primary.functionName}`);\n }\n\n if (primary.filePath) {\n const location = primary.lineNumber ? `${primary.filePath}:${primary.lineNumber}` : primary.filePath;\n parts.push(`(${location})`);\n }\n\n return parts.join(' ') || 'Unknown location';\n}\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\n/**\n * Error fallback component props.\n */\nexport interface FallbackProps {\n /** The error that was caught */\n error: Error;\n /** Error info from React */\n errorInfo: ErrorInfo | null;\n /** Parsed stack trace for debugging */\n parsedStack: ParsedStackTrace;\n /** Reset error boundary state */\n resetErrorBoundary: () => void;\n}\n\n/**\n * Error boundary props.\n */\nexport interface ErrorBoundaryProps {\n /** Child components to render */\n children: ReactNode;\n /** Custom fallback component */\n fallback?: ReactNode | ((props: FallbackProps) => ReactNode);\n /** Callback when error is caught */\n onError?: (error: Error, errorInfo: ErrorInfo, parsedStack: ParsedStackTrace) => void;\n /** Callback when error is reset */\n onReset?: () => void;\n /** Reset keys - boundary resets when these change */\n resetKeys?: unknown[];\n /** Custom sx props for default fallback */\n sx?: SxProps<Theme>;\n /** Show detailed stack info in default fallback (auto-detects dev mode if not set) */\n showDetails?: boolean;\n}\n\ninterface ErrorBoundaryState {\n hasError: boolean;\n error: Error | null;\n errorInfo: ErrorInfo | null;\n}\n\n// =============================================================================\n// DEFAULT FALLBACK\n// =============================================================================\n\ninterface DefaultFallbackProps extends FallbackProps {\n sx?: SxProps<Theme>;\n /** Show detailed stack info (auto-detected in dev) */\n showDetails?: boolean;\n}\n\nfunction DefaultErrorFallback({\n error,\n parsedStack,\n resetErrorBoundary,\n sx,\n showDetails,\n}: DefaultFallbackProps): ReactNode {\n const [expanded, setExpanded] = useState(false);\n const [copied, setCopied] = useState(false);\n\n // Auto-detect dev mode if not specified\n const shouldShowDetails = showDetails ?? (typeof process !== 'undefined' && process.env.NODE_ENV === 'development');\n\n const handleCopyStack = async () => {\n try {\n const text = [\n `Error: ${error.message}`,\n `Location: ${getErrorLocation(error)}`,\n '',\n 'Stack Trace:',\n parsedStack.raw,\n ].join('\\n');\n\n await navigator.clipboard.writeText(text);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch {\n // Clipboard API not available\n }\n };\n\n return (\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n minHeight: 200,\n p: 3,\n textAlign: 'center',\n ...sx,\n }}\n >\n <Typography variant=\"h6\" color=\"error\" gutterBottom>\n Something went wrong\n </Typography>\n <Typography\n variant=\"body2\"\n sx={{\n color: \"text.secondary\",\n mb: 1,\n maxWidth: 400\n }}>\n {error.message || 'An unexpected error occurred'}\n </Typography>\n {shouldShowDetails && parsedStack.primary && (\n <Typography\n variant=\"caption\"\n sx={{\n color: \"text.secondary\",\n mb: 2,\n fontFamily: 'monospace'\n }}>\n {parsedStack.primary.filePath}\n {parsedStack.primary.lineNumber && `:${parsedStack.primary.lineNumber}`}\n {parsedStack.primary.functionName && ` (${parsedStack.primary.functionName})`}\n </Typography>\n )}\n <Box sx={{ display: 'flex', gap: 1, mb: 2 }}>\n <Button variant=\"outlined\" onClick={resetErrorBoundary}>\n Try Again\n </Button>\n\n {shouldShowDetails && (\n <>\n <IconButton\n size=\"small\"\n onClick={() => setExpanded(!expanded)}\n sx={{\n transform: expanded ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 0.2s',\n }}\n >\n <ExpandMoreIcon />\n </IconButton>\n\n <IconButton size=\"small\" onClick={handleCopyStack} title=\"Copy error details\">\n <ContentCopyIcon fontSize=\"small\" />\n </IconButton>\n {copied && (\n <Typography\n variant=\"caption\"\n sx={{\n color: \"success.main\",\n alignSelf: 'center'\n }}>\n Copied!\n </Typography>\n )}\n </>\n )}\n </Box>\n {shouldShowDetails && (\n <Collapse in={expanded}>\n <Box\n sx={{\n mt: 1,\n p: 2,\n bgcolor: 'grey.100',\n borderRadius: 1,\n maxWidth: 600,\n maxHeight: 300,\n overflow: 'auto',\n textAlign: 'left',\n }}\n >\n <Typography variant=\"caption\" component=\"pre\" sx={{ fontFamily: 'monospace', m: 0 }}>\n {parsedStack.frames.map((frame, i) => (\n <Box\n key={i}\n component=\"span\"\n sx={{\n display: 'block',\n color: frame.isAppCode ? 'error.main' : 'text.secondary',\n fontWeight: frame.isAppCode ? 600 : 400,\n }}\n >\n {frame.functionName || '(anonymous)'} at {frame.filePath || 'unknown'}\n {frame.lineNumber && `:${frame.lineNumber}`}\n </Box>\n ))}\n </Typography>\n </Box>\n </Collapse>\n )}\n </Box>\n );\n}\n\n// =============================================================================\n// ERROR BOUNDARY\n// =============================================================================\n\n/**\n * Error Boundary - Catches JavaScript errors in child components.\n *\n * @example\n * ```tsx\n * <ErrorBoundary\n * fallback={({ error, resetErrorBoundary }) => (\n * <div>\n * <p>Error: {error.message}</p>\n * <button onClick={resetErrorBoundary}>Retry</button>\n * </div>\n * )}\n * onError={(error, info) => logErrorToService(error, info)}\n * >\n * <MyComponent />\n * </ErrorBoundary>\n * ```\n *\n * @example\n * ```tsx\n * // With reset keys\n * <ErrorBoundary resetKeys={[userId, postId]}>\n * <UserPost userId={userId} postId={postId} />\n * </ErrorBoundary>\n * ```\n */\nexport class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {\n constructor(props: ErrorBoundaryProps) {\n super(props);\n this.state = {\n hasError: false,\n error: null,\n errorInfo: null,\n };\n }\n\n static getDerivedStateFromError(error: Error): Partial<ErrorBoundaryState> {\n return {\n hasError: true,\n error,\n };\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo): void {\n const parsedStack = parseStackTrace(error.stack);\n this.setState({ errorInfo });\n this.props.onError?.(error, errorInfo, parsedStack);\n }\n\n componentDidUpdate(prevProps: ErrorBoundaryProps): void {\n const { resetKeys } = this.props;\n const { hasError } = this.state;\n\n if (hasError && resetKeys && prevProps.resetKeys) {\n // Check if any reset key has changed\n const hasKeyChanged = resetKeys.some((key, index) => key !== prevProps.resetKeys?.[index]);\n\n if (hasKeyChanged) {\n this.resetErrorBoundary();\n }\n }\n }\n\n resetErrorBoundary = (): void => {\n this.props.onReset?.();\n this.setState({\n hasError: false,\n error: null,\n errorInfo: null,\n });\n };\n\n render(): ReactNode {\n const { hasError, error, errorInfo } = this.state;\n const { children, fallback, sx, showDetails } = this.props;\n\n if (hasError && error) {\n const parsedStack = parseStackTrace(error.stack);\n\n const fallbackProps: FallbackProps = {\n error,\n errorInfo,\n parsedStack,\n resetErrorBoundary: this.resetErrorBoundary,\n };\n\n if (typeof fallback === 'function') {\n return fallback(fallbackProps);\n }\n\n if (fallback) {\n return fallback;\n }\n\n return <DefaultErrorFallback {...fallbackProps} sx={sx} showDetails={showDetails} />;\n }\n\n return children;\n }\n}\n\n// =============================================================================\n// HOOK FOR THROWING ERRORS\n// =============================================================================\n\n/**\n * Hook to throw errors from event handlers.\n * Useful for triggering error boundary from async code.\n *\n * @returns Function to throw an error\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const throwError = useErrorBoundary();\n *\n * const handleClick = async () => {\n * try {\n * await fetchData();\n * } catch (error) {\n * throwError(error as Error);\n * }\n * };\n *\n * return <button onClick={handleClick}>Fetch</button>;\n * }\n * ```\n */\nexport function useErrorBoundary(): (error: Error) => void {\n const [, setError] = useState<Error | null>(null);\n\n return (error: Error) => {\n setError(() => {\n throw error;\n });\n };\n}\n","'use client';\n\n/**\n * Settings Provider\n *\n * Provides settings context and drawer state management.\n * Wraps the application to enable settings drawer access anywhere.\n *\n * @module @omnitron-dev/prism/components/settings\n */\n\nimport { createContext, useContext, useState, useCallback, useMemo, type ReactNode } from 'react';\nimport { useSettingsStore, type SettingsState, type SettingsValues } from '../../state/stores/settings.js';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\n/**\n * Settings drawer state and controls.\n */\nexport interface SettingsDrawerState {\n /** Whether the drawer is open */\n open: boolean;\n /** Open the drawer */\n onOpen: () => void;\n /** Close the drawer */\n onClose: () => void;\n /** Toggle the drawer */\n onToggle: () => void;\n}\n\n/**\n * Settings context value.\n */\nexport interface SettingsContextValue {\n /** Current settings values */\n settings: SettingsValues;\n /** Settings actions */\n actions: Pick<\n SettingsState,\n | 'setMode'\n | 'toggleMode'\n | 'setPreset'\n | 'setPrimaryColor'\n | 'setContrast'\n | 'setDirection'\n | 'setFontSize'\n | 'setFontFamily'\n | 'setDensity'\n | 'setCompactSidebar'\n | 'setNavLayout'\n | 'setNavColor'\n | 'setStretch'\n | 'updateSettings'\n | 'reset'\n >;\n /** Whether settings can be reset (differ from defaults) */\n canReset: boolean;\n /** Drawer state and controls */\n drawer: SettingsDrawerState;\n}\n\n/**\n * Settings provider props.\n */\nexport interface SettingsProviderProps {\n /** Child components */\n children: ReactNode;\n /** Initial drawer open state */\n defaultOpen?: boolean;\n}\n\n// =============================================================================\n// CONTEXT\n// =============================================================================\n\nconst SettingsContext = createContext<SettingsContextValue | null>(null);\n\n// =============================================================================\n// PROVIDER\n// =============================================================================\n\n/**\n * Settings Provider - Provides settings state and drawer controls.\n *\n * @example\n * ```tsx\n * // In your app root\n * function App() {\n * return (\n * <SettingsProvider>\n * <ThemeProvider theme={theme}>\n * <MyApp />\n * <SettingsDrawer />\n * </ThemeProvider>\n * </SettingsProvider>\n * );\n * }\n *\n * // In any component\n * function Header() {\n * const { drawer } = useSettings();\n * return <IconButton onClick={drawer.onOpen}><SettingsIcon /></IconButton>;\n * }\n * ```\n */\nexport function SettingsProvider({ children, defaultOpen = false }: SettingsProviderProps): ReactNode {\n // Drawer state\n const [open, setOpen] = useState(defaultOpen);\n\n // Get store state and actions\n const store = useSettingsStore();\n\n // Drawer controls\n const onOpen = useCallback(() => setOpen(true), []);\n const onClose = useCallback(() => setOpen(false), []);\n const onToggle = useCallback(() => setOpen((prev) => !prev), []);\n\n // Extract settings values (without actions)\n const settings: SettingsValues = useMemo(\n () => ({\n mode: store.mode,\n preset: store.preset,\n primaryColor: store.primaryColor,\n contrast: store.contrast,\n direction: store.direction,\n fontSize: store.fontSize,\n fontFamily: store.fontFamily,\n density: store.density,\n compactSidebar: store.compactSidebar,\n sidebarCollapsed: store.sidebarCollapsed,\n navLayout: store.navLayout,\n navColor: store.navColor,\n stretch: store.stretch,\n tableRowsPerPage: store.tableRowsPerPage,\n }),\n [\n store.mode,\n store.preset,\n store.primaryColor,\n store.contrast,\n store.direction,\n store.fontSize,\n store.fontFamily,\n store.density,\n store.compactSidebar,\n store.sidebarCollapsed,\n store.navLayout,\n store.navColor,\n store.stretch,\n store.tableRowsPerPage,\n ]\n );\n\n // Extract actions\n const actions = useMemo(\n () => ({\n setMode: store.setMode,\n toggleMode: store.toggleMode,\n setPreset: store.setPreset,\n setPrimaryColor: store.setPrimaryColor,\n setContrast: store.setContrast,\n setDirection: store.setDirection,\n setFontSize: store.setFontSize,\n setFontFamily: store.setFontFamily,\n setDensity: store.setDensity,\n setCompactSidebar: store.setCompactSidebar,\n setNavLayout: store.setNavLayout,\n setNavColor: store.setNavColor,\n setStretch: store.setStretch,\n updateSettings: store.updateSettings,\n reset: store.reset,\n }),\n [\n store.setMode,\n store.toggleMode,\n store.setPreset,\n store.setPrimaryColor,\n store.setContrast,\n store.setDirection,\n store.setFontSize,\n store.setFontFamily,\n store.setDensity,\n store.setCompactSidebar,\n store.setNavLayout,\n store.setNavColor,\n store.setStretch,\n store.updateSettings,\n store.reset,\n ]\n );\n\n // Context value\n const value: SettingsContextValue = useMemo(\n () => ({\n settings,\n actions,\n canReset: store.canReset(),\n drawer: { open, onOpen, onClose, onToggle },\n }),\n [settings, actions, store, open, onOpen, onClose, onToggle]\n );\n\n return <SettingsContext.Provider value={value}>{children}</SettingsContext.Provider>;\n}\n\n// =============================================================================\n// HOOKS\n// =============================================================================\n\n/**\n * Hook to access settings context.\n *\n * @returns Settings context value\n * @throws If used outside of SettingsProvider\n *\n * @example\n * ```tsx\n * function ThemeToggle() {\n * const { settings, actions } = useSettings();\n * return (\n * <Switch\n * checked={settings.mode === 'dark'}\n * onChange={() => actions.toggleMode()}\n * />\n * );\n * }\n * ```\n */\nexport function useSettings(): SettingsContextValue {\n const context = useContext(SettingsContext);\n\n if (!context) {\n throw new Error('useSettings must be used within a SettingsProvider');\n }\n\n return context;\n}\n\n/**\n * Hook to access only the drawer controls.\n *\n * @returns Drawer state and controls\n * @throws If used outside of SettingsProvider\n *\n * @example\n * ```tsx\n * function SettingsButton() {\n * const drawer = useSettingsDrawer();\n * return <IconButton onClick={drawer.onOpen}><SettingsIcon /></IconButton>;\n * }\n * ```\n */\nexport function useSettingsDrawer(): SettingsDrawerState {\n const { drawer } = useSettings();\n return drawer;\n}\n","'use client';\n\n/**\n * Settings Drawer\n *\n * UI component for managing application settings.\n * Displays configurable sections for theme, layout, and preferences.\n *\n * @module @omnitron-dev/prism/components/settings\n */\n\nimport { type ReactNode } from 'react';\nimport Box from '@mui/material/Box';\nimport Drawer from '@mui/material/Drawer';\nimport IconButton from '@mui/material/IconButton';\nimport Typography from '@mui/material/Typography';\nimport Button from '@mui/material/Button';\nimport Tooltip from '@mui/material/Tooltip';\nimport Stack from '@mui/material/Stack';\nimport Switch from '@mui/material/Switch';\nimport Slider from '@mui/material/Slider';\nimport ToggleButton from '@mui/material/ToggleButton';\nimport ToggleButtonGroup from '@mui/material/ToggleButtonGroup';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport { alpha, useTheme } from '@mui/material/styles';\n\n// Icons - using unicode/text since we don't have icon package\nconst CloseIcon = () => <span style={{ fontSize: 20 }}>✕</span>;\nconst RefreshIcon = () => <span style={{ fontSize: 16 }}>↻</span>;\nconst SunIcon = () => <span style={{ fontSize: 18 }}>☀</span>;\nconst MoonIcon = () => <span style={{ fontSize: 18 }}>☾</span>;\n\nimport { useSettings } from './settings-provider.js';\nimport type { ComponentDensity } from '../../types/theme.js';\nimport type { NavLayout } from '../../state/stores/settings.js';\nimport { PRESET_NAMES, PRESET_DISPLAY_NAMES } from '../../theme/create-theme.js';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\n/**\n * Settings drawer props.\n */\nexport interface SettingsDrawerProps {\n /** Drawer width */\n width?: number;\n /** Sections to display */\n sections?: SettingsSection[];\n}\n\n/**\n * Available settings sections.\n */\nexport type SettingsSection =\n | 'mode'\n | 'contrast'\n | 'direction'\n | 'presets'\n | 'primaryColor'\n | 'fontSize'\n | 'density'\n | 'navLayout'\n | 'stretch';\n\n// =============================================================================\n// PRESET COLORS\n// =============================================================================\n\nconst PRESET_COLORS: Record<string, string> = {\n 'default-light': '#3385F0',\n 'default-dark': '#3385F0',\n luxury: '#B8860B',\n arctic: '#1E88E5',\n nature: '#22C55E',\n ember: '#FF5F11',\n dracula: '#BD93F9',\n midnight: '#6366F1',\n retro: '#F59E0B',\n minimal: '#64748B',\n};\n\n// =============================================================================\n// SECTION COMPONENTS\n// =============================================================================\n\ninterface SectionProps {\n title: string;\n children: ReactNode;\n}\n\nfunction Section({ title, children }: SectionProps): ReactNode {\n return (\n <Box sx={{ mb: 3 }}>\n <Typography\n variant=\"caption\"\n sx={{\n display: 'block',\n mb: 1.5,\n fontWeight: 600,\n color: 'text.secondary',\n textTransform: 'uppercase',\n letterSpacing: '0.5px',\n }}\n >\n {title}\n </Typography>\n {children}\n </Box>\n );\n}\n\n// =============================================================================\n// MODE SECTION\n// =============================================================================\n\nfunction ModeSection(): ReactNode {\n const { settings, actions } = useSettings();\n const theme = useTheme();\n\n return (\n <Section title=\"Mode\">\n <ToggleButtonGroup\n exclusive\n fullWidth\n value={settings.mode}\n onChange={(_, value) => value && actions.setMode(value)}\n sx={{ gap: 1 }}\n >\n <ToggleButton\n value=\"light\"\n sx={{\n flex: 1,\n py: 1.5,\n gap: 1,\n border: `1px solid ${theme.palette.divider}`,\n '&.Mui-selected': {\n bgcolor: alpha(theme.palette.primary.main, 0.08),\n borderColor: theme.palette.primary.main,\n },\n }}\n >\n <SunIcon /> Light\n </ToggleButton>\n <ToggleButton\n value=\"dark\"\n sx={{\n flex: 1,\n py: 1.5,\n gap: 1,\n border: `1px solid ${theme.palette.divider}`,\n '&.Mui-selected': {\n bgcolor: alpha(theme.palette.primary.main, 0.08),\n borderColor: theme.palette.primary.main,\n },\n }}\n >\n <MoonIcon /> Dark\n </ToggleButton>\n </ToggleButtonGroup>\n </Section>\n );\n}\n\n// =============================================================================\n// CONTRAST SECTION\n// =============================================================================\n\nfunction ContrastSection(): ReactNode {\n const { settings, actions } = useSettings();\n\n return (\n <Section title=\"Contrast\">\n <FormControlLabel\n control={\n <Switch\n checked={settings.contrast === 'high'}\n onChange={(e) => actions.setContrast(e.target.checked ? 'high' : 'default')}\n />\n }\n label=\"High Contrast\"\n sx={{ ml: 0 }}\n />\n </Section>\n );\n}\n\n// =============================================================================\n// DIRECTION SECTION\n// =============================================================================\n\nfunction DirectionSection(): ReactNode {\n const { settings, actions } = useSettings();\n const theme = useTheme();\n\n return (\n <Section title=\"Direction\">\n <ToggleButtonGroup\n exclusive\n fullWidth\n value={settings.direction}\n onChange={(_, value) => value && actions.setDirection(value)}\n sx={{ gap: 1 }}\n >\n <ToggleButton\n value=\"ltr\"\n sx={{\n flex: 1,\n py: 1,\n border: `1px solid ${theme.palette.divider}`,\n '&.Mui-selected': {\n bgcolor: alpha(theme.palette.primary.main, 0.08),\n borderColor: theme.palette.primary.main,\n },\n }}\n >\n LTR\n </ToggleButton>\n <ToggleButton\n value=\"rtl\"\n sx={{\n flex: 1,\n py: 1,\n border: `1px solid ${theme.palette.divider}`,\n '&.Mui-selected': {\n bgcolor: alpha(theme.palette.primary.main, 0.08),\n borderColor: theme.palette.primary.main,\n },\n }}\n >\n RTL\n </ToggleButton>\n </ToggleButtonGroup>\n </Section>\n );\n}\n\n// =============================================================================\n// PRESETS SECTION\n// =============================================================================\n\nfunction PresetsSection(): ReactNode {\n const { settings, actions } = useSettings();\n const theme = useTheme();\n\n return (\n <Section title=\"Presets\">\n <Box\n sx={{\n display: 'grid',\n gridTemplateColumns: 'repeat(5, 1fr)',\n gap: 1.5,\n }}\n >\n {PRESET_NAMES.map((preset) => {\n const isSelected = settings.preset === preset;\n const color = PRESET_COLORS[preset] || '#666';\n\n return (\n <Tooltip key={preset} title={PRESET_DISPLAY_NAMES[preset]} placement=\"top\">\n <Box\n onClick={() => actions.setPreset(preset)}\n sx={{\n width: 40,\n height: 40,\n borderRadius: '50%',\n bgcolor: color,\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n border: isSelected ? `3px solid ${theme.palette.text.primary}` : '3px solid transparent',\n boxShadow: isSelected ? `0 0 0 2px ${color}` : 'none',\n transition: 'all 0.2s',\n '&:hover': {\n transform: 'scale(1.1)',\n },\n }}\n >\n {isSelected && (\n <Box\n sx={{\n width: 8,\n height: 8,\n borderRadius: '50%',\n bgcolor: 'white',\n }}\n />\n )}\n </Box>\n </Tooltip>\n );\n })}\n </Box>\n </Section>\n );\n}\n\n// =============================================================================\n// PRIMARY COLOR SECTION\n// =============================================================================\n\nconst COLOR_OPTIONS = [\n { label: 'Blue', value: '#3385F0' },\n { label: 'Green', value: '#22C55E' },\n { label: 'Purple', value: '#8B5CF6' },\n { label: 'Red', value: '#EF4444' },\n { label: 'Orange', value: '#F97316' },\n { label: 'Cyan', value: '#06B6D4' },\n { label: 'Pink', value: '#EC4899' },\n { label: 'Amber', value: '#F59E0B' },\n];\n\nfunction PrimaryColorSection(): ReactNode {\n const { settings, actions } = useSettings();\n const theme = useTheme();\n\n return (\n <Section title=\"Primary Color\">\n <Box sx={{ display: 'flex', gap: 1, flexWrap: 'wrap' }}>\n {COLOR_OPTIONS.map((option) => {\n const isSelected = settings.primaryColor === option.value;\n\n return (\n <Tooltip key={option.value} title={option.label} placement=\"top\">\n <Box\n onClick={() => actions.setPrimaryColor(option.value)}\n sx={{\n width: 32,\n height: 32,\n borderRadius: '50%',\n bgcolor: option.value,\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n border: isSelected ? `2px solid ${theme.palette.text.primary}` : '2px solid transparent',\n transition: 'transform 0.2s',\n '&:hover': {\n transform: 'scale(1.15)',\n },\n }}\n >\n {isSelected && (\n <Box\n sx={{\n width: 6,\n height: 6,\n borderRadius: '50%',\n bgcolor: 'white',\n }}\n />\n )}\n </Box>\n </Tooltip>\n );\n })}\n {settings.primaryColor && (\n <Tooltip title=\"Reset to default\" placement=\"top\">\n <Box\n onClick={() => actions.setPrimaryColor(null)}\n sx={{\n width: 32,\n height: 32,\n borderRadius: '50%',\n border: `1px dashed ${theme.palette.divider}`,\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: 'text.secondary',\n fontSize: 14,\n '&:hover': {\n borderColor: theme.palette.text.primary,\n },\n }}\n >\n <RefreshIcon />\n </Box>\n </Tooltip>\n )}\n </Box>\n </Section>\n );\n}\n\n// =============================================================================\n// FONT SIZE SECTION\n// =============================================================================\n\nfunction FontSizeSection(): ReactNode {\n const { settings, actions } = useSettings();\n\n return (\n <Section title=\"Font Size\">\n <Stack direction=\"row\" spacing={2} sx={{\n alignItems: \"center\"\n }}>\n <Typography variant=\"body2\" sx={{ minWidth: 24, color: 'text.secondary' }}>\n A\n </Typography>\n <Slider\n min={14}\n max={18}\n step={1}\n value={settings.fontSize}\n onChange={(_, value) => actions.setFontSize(value as number)}\n valueLabelDisplay=\"auto\"\n marks\n sx={{ flex: 1 }}\n />\n <Typography variant=\"body1\" sx={{ minWidth: 24, fontWeight: 600 }}>\n A\n </Typography>\n </Stack>\n </Section>\n );\n}\n\n// =============================================================================\n// DENSITY SECTION\n// =============================================================================\n\nfunction DensitySection(): ReactNode {\n const { settings, actions } = useSettings();\n const theme = useTheme();\n\n const densityOptions: { value: ComponentDensity; label: string }[] = [\n { value: 'compact', label: 'Compact' },\n { value: 'standard', label: 'Standard' },\n { value: 'comfortable', label: 'Comfortable' },\n ];\n\n return (\n <Section title=\"Density\">\n <ToggleButtonGroup\n exclusive\n fullWidth\n value={settings.density}\n onChange={(_, value) => value && actions.setDensity(value)}\n sx={{ gap: 1 }}\n >\n {densityOptions.map((option) => (\n <ToggleButton\n key={option.value}\n value={option.value}\n sx={{\n flex: 1,\n py: 1,\n fontSize: '0.75rem',\n border: `1px solid ${theme.palette.divider}`,\n '&.Mui-selected': {\n bgcolor: alpha(theme.palette.primary.main, 0.08),\n borderColor: theme.palette.primary.main,\n },\n }}\n >\n {option.label}\n </ToggleButton>\n ))}\n </ToggleButtonGroup>\n </Section>\n );\n}\n\n// =============================================================================\n// NAV LAYOUT SECTION\n// =============================================================================\n\nfunction NavLayoutSection(): ReactNode {\n const { settings, actions } = useSettings();\n const theme = useTheme();\n\n const layoutOptions: { value: NavLayout; label: string; icon: string }[] = [\n { value: 'vertical', label: 'Vertical', icon: '▌' },\n { value: 'horizontal', label: 'Horizontal', icon: '▬' },\n { value: 'mini', label: 'Mini', icon: '│' },\n ];\n\n return (\n <Section title=\"Navigation Layout\">\n <Box sx={{ display: 'flex', gap: 1.5 }}>\n {layoutOptions.map((option) => {\n const isSelected = settings.navLayout === option.value;\n\n return (\n <Box\n key={option.value}\n onClick={() => actions.setNavLayout(option.value)}\n sx={{\n flex: 1,\n py: 2,\n px: 1,\n borderRadius: 1,\n cursor: 'pointer',\n textAlign: 'center',\n border: `1px solid ${isSelected ? theme.palette.primary.main : theme.palette.divider}`,\n bgcolor: isSelected ? alpha(theme.palette.primary.main, 0.08) : 'transparent',\n transition: 'all 0.2s',\n '&:hover': {\n borderColor: theme.palette.primary.main,\n },\n }}\n >\n <Typography sx={{ fontSize: 24, mb: 0.5, lineHeight: 1 }}>{option.icon}</Typography>\n <Typography variant=\"caption\" sx={{ color: 'text.secondary' }}>\n {option.label}\n </Typography>\n </Box>\n );\n })}\n </Box>\n </Section>\n );\n}\n\n// =============================================================================\n// STRETCH SECTION\n// =============================================================================\n\nfunction StretchSection(): ReactNode {\n const { settings, actions } = useSettings();\n\n return (\n <Section title=\"Layout\">\n <FormControlLabel\n control={<Switch checked={settings.stretch} onChange={(e) => actions.setStretch(e.target.checked)} />}\n label=\"Stretch to full width\"\n sx={{ ml: 0 }}\n />\n </Section>\n );\n}\n\n// =============================================================================\n// SECTION MAP\n// =============================================================================\n\nconst SECTION_COMPONENTS: Record<SettingsSection, () => ReactNode> = {\n mode: ModeSection,\n contrast: ContrastSection,\n direction: DirectionSection,\n presets: PresetsSection,\n primaryColor: PrimaryColorSection,\n fontSize: FontSizeSection,\n density: DensitySection,\n navLayout: NavLayoutSection,\n stretch: StretchSection,\n};\n\nconst DEFAULT_SECTIONS: SettingsSection[] = ['mode', 'presets', 'primaryColor', 'density', 'navLayout', 'stretch'];\n\n// =============================================================================\n// SETTINGS DRAWER\n// =============================================================================\n\n/**\n * Settings Drawer - Configurable settings panel.\n *\n * @example\n * ```tsx\n * // Basic usage - must be inside SettingsProvider\n * <SettingsDrawer />\n *\n * // With custom sections\n * <SettingsDrawer\n * sections={['mode', 'presets', 'primaryColor']}\n * width={320}\n * />\n * ```\n */\nexport function SettingsDrawer({ width = 300, sections = DEFAULT_SECTIONS }: SettingsDrawerProps): ReactNode {\n const { drawer, canReset, actions } = useSettings();\n const theme = useTheme();\n\n return (\n <Drawer\n anchor=\"right\"\n open={drawer.open}\n onClose={drawer.onClose}\n slotProps={{\n paper: {\n sx: {\n width,\n backgroundImage: 'none',\n },\n }\n }}\n >\n {/* Header */}\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n p: 2,\n borderBottom: `1px solid ${theme.palette.divider}`,\n }}\n >\n <Typography variant=\"h6\" sx={{ fontWeight: 600 }}>\n Settings\n </Typography>\n <Stack direction=\"row\" spacing={0.5}>\n {canReset && (\n <Tooltip title=\"Reset to defaults\">\n <IconButton size=\"small\" onClick={actions.reset} aria-label=\"Reset settings to defaults\">\n <RefreshIcon />\n </IconButton>\n </Tooltip>\n )}\n <IconButton size=\"small\" onClick={drawer.onClose} aria-label=\"Close settings\">\n <CloseIcon />\n </IconButton>\n </Stack>\n </Box>\n {/* Content */}\n <Box sx={{ p: 2.5, flex: 1, overflowY: 'auto' }}>\n {sections.map((section) => {\n const SectionComponent = SECTION_COMPONENTS[section];\n return SectionComponent ? <SectionComponent key={section} /> : null;\n })}\n </Box>\n {/* Footer */}\n <Box sx={{ p: 2, borderTop: `1px solid ${theme.palette.divider}` }}>\n <Button fullWidth variant=\"soft\" color=\"primary\" onClick={drawer.onClose}>\n Close\n </Button>\n </Box>\n </Drawer>\n );\n}\n","'use client';\n\n/**\n * Tooltip Component\n *\n * Enhanced tooltip with custom styling and arrow support.\n *\n * @module @omnitron-dev/prism/components/tooltip\n */\n\nimport type { ReactNode, ReactElement } from 'react';\nimport MuiTooltip from '@mui/material/Tooltip';\nimport type { TooltipProps as MuiTooltipProps } from '@mui/material/Tooltip';\n\n/**\n * Props for Tooltip component.\n */\nexport interface TooltipProps extends Omit<MuiTooltipProps, 'children'> {\n /** Tooltip content */\n title: ReactNode;\n /** Element to attach tooltip to */\n children: ReactElement;\n /** Show arrow */\n arrow?: boolean;\n /** Tooltip placement */\n placement?: MuiTooltipProps['placement'];\n /** Max width */\n maxWidth?: number | string;\n}\n\n/**\n * Tooltip - Enhanced tooltip with custom styling.\n *\n * @example\n * ```tsx\n * <Tooltip title=\"Delete item\" placement=\"top\">\n * <IconButton>\n * <DeleteIcon />\n * </IconButton>\n * </Tooltip>\n * ```\n */\nexport function Tooltip({\n title,\n children,\n arrow = true,\n placement = 'top',\n maxWidth = 300,\n ...other\n}: TooltipProps): ReactNode {\n if (!title) {\n return children;\n }\n\n return (\n <MuiTooltip\n title={title}\n arrow={arrow}\n placement={placement}\n slotProps={{\n tooltip: {\n sx: {\n maxWidth,\n },\n },\n ...other.slotProps,\n }}\n {...other}\n >\n {children}\n </MuiTooltip>\n );\n}\n","'use client';\n\n/**\n * Alert Component\n *\n * Enhanced alert with custom styling and variants.\n *\n * @module @omnitron-dev/prism/components/alert\n */\n\nimport { useEffect, useRef, type ReactNode } from 'react';\nimport MuiAlert from '@mui/material/Alert';\nimport AlertTitle from '@mui/material/AlertTitle';\nimport { alpha } from '@mui/material/styles';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\n/**\n * Alert severity levels.\n */\nexport type AlertSeverity = 'success' | 'info' | 'warning' | 'error';\n\n/**\n * Alert variants.\n */\nexport type AlertVariant = 'standard' | 'filled' | 'outlined' | 'soft';\n\n/**\n * Props for Alert component.\n */\nexport interface AlertProps {\n /** Alert severity */\n severity?: AlertSeverity;\n /** Alert variant */\n variant?: AlertVariant;\n /** Alert title */\n title?: ReactNode;\n /** Alert content */\n children?: ReactNode;\n /** On close handler */\n onClose?: () => void;\n /** Show close button */\n closable?: boolean;\n /** Custom icon */\n icon?: ReactNode | false;\n /** Custom action */\n action?: ReactNode;\n /** Custom sx props */\n sx?: SxProps<Theme>;\n}\n\n/**\n * Alert - Enhanced alert with custom styling.\n *\n * @example\n * ```tsx\n * <Alert severity=\"success\" title=\"Success!\">\n * Your changes have been saved.\n * </Alert>\n *\n * <Alert severity=\"error\" variant=\"filled\" closable onClose={() => {}}>\n * An error occurred.\n * </Alert>\n * ```\n */\nexport function Alert({\n severity = 'info',\n variant = 'standard',\n title,\n children,\n onClose,\n closable = false,\n icon,\n action,\n sx,\n}: AlertProps): ReactNode {\n // Map 'soft' variant to 'standard' with custom styling\n const muiVariant = variant === 'soft' ? 'standard' : variant;\n\n return (\n <MuiAlert\n severity={severity}\n variant={muiVariant}\n onClose={closable ? onClose : undefined}\n icon={icon}\n action={action}\n sx={{\n ...(variant === 'soft' && {\n backgroundColor: (theme) => alpha(theme.palette[severity].main, theme.palette.mode === 'light' ? 0.12 : 0.16),\n color: (theme) =>\n theme.palette.mode === 'light' ? theme.palette[severity].dark : theme.palette[severity].light,\n '& .MuiAlert-icon': {\n color: 'inherit',\n },\n }),\n ...sx,\n }}\n >\n {title && <AlertTitle>{title}</AlertTitle>}\n {children}\n </MuiAlert>\n );\n}\n\n/**\n * Props for InlineAlert component.\n */\nexport interface InlineAlertProps {\n /** Alert severity */\n severity?: AlertSeverity;\n /** Alert message */\n message: ReactNode;\n /** Icon to display */\n icon?: ReactNode;\n}\n\n/**\n * InlineAlert - Compact inline alert for form feedback.\n *\n * @example\n * ```tsx\n * <InlineAlert severity=\"error\" message=\"This field is required\" />\n * ```\n */\nexport function InlineAlert({ severity = 'info', message, icon }: InlineAlertProps): ReactNode {\n return (\n <MuiAlert\n severity={severity}\n icon={icon}\n sx={{\n py: 0,\n px: 1,\n '& .MuiAlert-message': {\n py: 0.5,\n },\n }}\n >\n {message}\n </MuiAlert>\n );\n}\n\n/**\n * Props for FormAlert component.\n */\nexport interface FormAlertProps {\n /** Severity — defaults to 'error' since this primitive is most\n * commonly used to surface form submission failures. */\n severity?: AlertSeverity;\n /** Optional heading rendered above the message. Use for a short\n * categorisation (\"Couldn't save\") when the message body is a\n * detailed reason. */\n title?: ReactNode;\n /** The alert body. Pass `null` to keep the slot rendered but\n * empty — useful for conditional rendering without unmounting. */\n children?: ReactNode;\n /** Renders a close (x) icon button when provided. Should clear the\n * underlying error state in the parent. */\n onClose?: () => void;\n /** When true, scroll the alert into view on mount so the user\n * sees it even if the dialog content has been scrolled away from\n * the top. Default: true. */\n autoScroll?: boolean;\n /** Custom sx overrides for niche layouts. */\n sx?: SxProps<Theme>;\n}\n\n/**\n * FormAlert — the platform's canonical surface for **form-level**\n * errors inside dialogs and inline forms.\n *\n * UX policy (see CLAUDE.md \"Error UX\"):\n *\n * Form submission failure → `<FormAlert>` at the top of the form\n * Background / cross-cutting event → `toast`\n *\n * Why a dedicated primitive vs. plain `<Alert>`:\n *\n * - `role=\"alert\"` + `aria-live=\"assertive\"` so screen readers\n * immediately announce the message, not just visually-sighted\n * users.\n * - Auto-scrolls into view on mount — a form often has fields\n * below the fold; surfacing an error you can't see is a dark\n * pattern. (Disable with `autoScroll={false}` if your dialog\n * manages focus differently.)\n * - Sensible defaults: `severity='error'`, top margin baked in so\n * it sits naturally above the first field, `flex-start`\n * alignment so multi-line messages don't push the close button\n * out of place.\n *\n * @example\n * ```tsx\n * const [error, setError] = useState<string | null>(null);\n *\n * <DialogContent>\n * {error && <FormAlert onClose={() => setError(null)}>{error}</FormAlert>}\n * <TextField ... />\n * </DialogContent>\n * ```\n */\nexport function FormAlert({\n severity = 'error',\n title,\n children,\n onClose,\n autoScroll = true,\n sx,\n}: FormAlertProps): ReactNode {\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!autoScroll) return;\n // Schedule after paint so we measure the alert in its final\n // position. `nearest` keeps the dialog stable instead of\n // jumping to the very top, which would feel jarring if the\n // alert is already visible.\n const id = requestAnimationFrame(() => {\n ref.current?.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n });\n return () => cancelAnimationFrame(id);\n }, [autoScroll]);\n\n return (\n <MuiAlert\n ref={ref}\n severity={severity}\n onClose={onClose}\n // role/aria-live are normally set by MUI based on severity, but\n // form-level surfacing of submission errors warrants assertive\n // announcement regardless of severity. aria-atomic ensures the\n // whole alert is read together (title + body), not piecewise.\n role=\"alert\"\n aria-live=\"assertive\"\n aria-atomic=\"true\"\n sx={{\n alignItems: 'flex-start',\n mb: 2,\n ...sx,\n }}\n >\n {title && <AlertTitle sx={{ mb: 0.5 }}>{title}</AlertTitle>}\n {children}\n </MuiAlert>\n );\n}\n","'use client';\n\n/**\n * Custom Breadcrumbs Component\n *\n * Full-featured navigation breadcrumbs with heading, back link, action slot,\n * and more links section. Adapted from minimal-vite-ts patterns.\n *\n * @module @omnitron-dev/prism/components/breadcrumbs\n */\n\nimport type { ReactNode, ElementType } from 'react';\nimport { styled } from '@mui/material/styles';\nimport MuiBreadcrumbs from '@mui/material/Breadcrumbs';\nimport Link from '@mui/material/Link';\nimport SvgIcon from '@mui/material/SvgIcon';\nimport type { SxProps, Theme } from '@mui/material/styles';\nimport type { BreadcrumbsProps as MuiBreadcrumbsProps } from '@mui/material/Breadcrumbs';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\n/** Individual breadcrumb link definition. */\nexport interface BreadcrumbLinkProps {\n /** Link label */\n name?: string;\n /** Link href */\n href?: string;\n /** Link icon */\n icon?: ReactNode;\n /** Whether the link is disabled */\n disabled?: boolean;\n}\n\n/** Props for the MoreLinks sub-component. */\nexport interface MoreLinksProps extends React.ComponentProps<'ul'> {\n /** Array of external link URLs */\n links?: string[];\n /** MUI sx prop */\n sx?: SxProps<Theme>;\n}\n\n/** Slot props for customizing sub-components. */\nexport interface BreadcrumbsSlotProps {\n breadcrumbs?: Partial<MuiBreadcrumbsProps>;\n heading?: React.ComponentProps<'h6'>;\n content?: React.ComponentProps<'div'>;\n container?: React.ComponentProps<'div'>;\n moreLinks?: Omit<MoreLinksProps, 'links'>;\n}\n\n/** Custom slot overrides. */\nexport interface BreadcrumbsSlots {\n /** Override the entire breadcrumbs section */\n breadcrumbs?: ReactNode;\n}\n\n/** Props for the Breadcrumbs component. */\nexport interface BreadcrumbsProps extends React.ComponentProps<'div'> {\n /** MUI sx prop */\n sx?: SxProps<Theme>;\n /** Page heading displayed above breadcrumbs */\n heading?: string;\n /** Keep the last breadcrumb link active (clickable) */\n activeLast?: boolean;\n /** Back navigation href — displays arrow icon before heading */\n backHref?: string;\n /** Action element rendered on the right side */\n action?: ReactNode;\n /** Breadcrumb link items */\n links?: BreadcrumbLinkProps[];\n /** External reference links displayed below breadcrumbs */\n moreLinks?: string[];\n /**\n * Custom link component for client-side routing (e.g. react-router's Link).\n * The component receives `to` (from href) and `children` props.\n * When provided, breadcrumb links use this instead of native `<a>` tags.\n */\n linkComponent?: ElementType;\n /** Slot overrides */\n slots?: BreadcrumbsSlots;\n /** Slot prop overrides */\n slotProps?: Partial<BreadcrumbsSlotProps>;\n}\n\n// =============================================================================\n// STYLED COMPONENTS\n// =============================================================================\n\nconst BreadcrumbsRoot = styled('div')(({ theme }) => ({\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(2),\n}));\n\nconst BreadcrumbsHeading = styled('h6')(({ theme }) => ({\n ...theme.typography.h4,\n margin: 0,\n padding: 0,\n display: 'inline-flex',\n}));\n\nconst BreadcrumbsContainer = styled('div')(({ theme }) => ({\n display: 'flex',\n flexWrap: 'wrap',\n gap: theme.spacing(2),\n alignItems: 'flex-start',\n justifyContent: 'flex-end',\n}));\n\nconst BreadcrumbsContent = styled('div')(({ theme }) => ({\n display: 'flex',\n flex: '1 1 auto',\n gap: theme.spacing(2),\n flexDirection: 'column',\n}));\n\nconst BreadcrumbsSeparator = styled('span')(({ theme }) => ({\n width: 4,\n height: 4,\n borderRadius: '50%',\n backgroundColor: theme.palette.text.disabled,\n}));\n\n/**\n * Breadcrumb item base. Three visual states:\n *\n * - `clickable` (default — link with `href`) → `text.secondary`\n * so the user can distinguish \"I can navigate here\" from\n * \"you are here\" at rest, not just on hover. Pre-fix every\n * item rendered in `text.primary` and the only differentiator\n * was the link underline, which appears only on hover.\n *\n * - `disabled` (terminal / current page — the last link by\n * default) → `text.primary` and `fontWeight: 600`. The current\n * location should be the MOST prominent crumb in the trail;\n * the prior styling greyed it out, which read as \"this item is\n * unavailable\" instead of \"this is where you are\".\n */\nconst ItemRoot = styled('div', {\n shouldForwardProp: (prop: string) => prop !== 'disabled',\n})<{ disabled?: boolean }>(({ disabled, theme }) => ({\n ...theme.typography.body2,\n alignItems: 'center',\n gap: theme.spacing(0.5),\n display: 'inline-flex',\n color: theme.palette.text.secondary,\n ...(disabled && {\n cursor: 'default',\n pointerEvents: 'none',\n color: theme.palette.text.primary,\n fontWeight: 600,\n }),\n}));\n\nconst ItemIcon = styled('span')({\n display: 'inherit',\n '& > :first-of-type:not(style):not(:first-of-type ~ *)': {\n width: 20,\n height: 20,\n },\n});\n\nconst MoreLinksRoot = styled('ul')({\n display: 'flex',\n flexDirection: 'column',\n '& > li': { display: 'flex' },\n});\n\n// =============================================================================\n// ARROW BACK ICON\n// =============================================================================\n\nfunction ArrowBackIcon() {\n return (\n <SvgIcon sx={{ fontSize: 18 }}>\n <path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\" />\n </SvgIcon>\n );\n}\n\n// =============================================================================\n// SUB-COMPONENTS\n// =============================================================================\n\n/** Back link with arrow icon for navigation. */\nfunction BackLink({\n href,\n label,\n sx,\n linkComponent,\n}: {\n href: string;\n label?: string;\n sx?: SxProps<Theme>;\n linkComponent?: ElementType;\n}) {\n const linkProps = linkComponent ? { component: linkComponent, to: href } : { href };\n\n return (\n <Link\n color=\"inherit\"\n underline=\"none\"\n sx={[\n (theme) => ({\n verticalAlign: 'middle',\n display: 'inline-flex',\n alignItems: 'center',\n '& .PrismBackLinkIcon': {\n verticalAlign: 'inherit',\n transform: 'translateY(-1px)',\n ml: { xs: '-14px', md: '-18px' },\n transition: theme.transitions.create('opacity', {\n duration: theme.transitions.duration.shorter,\n }),\n },\n '&:hover .PrismBackLinkIcon': { opacity: 0.48 },\n }),\n ...(Array.isArray(sx) ? sx : [sx]),\n ]}\n {...linkProps}\n >\n <span className=\"PrismBackLinkIcon\">\n <ArrowBackIcon />\n </span>\n {label}\n </Link>\n );\n}\n\n/** Individual breadcrumb link with optional icon. */\nfunction BreadcrumbLink({\n href,\n icon,\n name,\n disabled,\n linkComponent,\n}: BreadcrumbLinkProps & { linkComponent?: ElementType }) {\n const content = (\n <ItemRoot disabled={disabled}>\n {icon && <ItemIcon>{icon}</ItemIcon>}\n {name}\n </ItemRoot>\n );\n\n if (href && !disabled) {\n const linkProps = linkComponent ? { component: linkComponent, to: href } : { href };\n\n return (\n <Link color=\"inherit\" sx={{ display: 'inline-flex' }} {...linkProps}>\n {content}\n </Link>\n );\n }\n\n return content;\n}\n\n/** List of external reference links. */\nfunction MoreLinks({ links, sx, ...other }: MoreLinksProps) {\n return (\n <MoreLinksRoot sx={sx} {...other}>\n {links?.map((href) => (\n <li key={href}>\n <Link href={href} variant=\"body2\" target=\"_blank\" rel=\"noopener noreferrer\">\n {href}\n </Link>\n </li>\n ))}\n </MoreLinksRoot>\n );\n}\n\n// =============================================================================\n// MAIN COMPONENT\n// =============================================================================\n\n/**\n * Breadcrumbs - Full-featured navigation breadcrumbs with heading, back link,\n * action slot, and more links section.\n *\n * @example\n * ```tsx\n * // Simple usage\n * <Breadcrumbs\n * heading=\"Product List\"\n * links={[\n * { name: 'Home', href: '/' },\n * { name: 'Products', href: '/products' },\n * { name: 'Electronics' },\n * ]}\n * />\n *\n * // With back link and action\n * <Breadcrumbs\n * heading=\"Edit Product\"\n * backHref=\"/products\"\n * action={<Button variant=\"contained\">Save</Button>}\n * links={[\n * { name: 'Home', href: '/' },\n * { name: 'Products', href: '/products' },\n * { name: 'Edit' },\n * ]}\n * />\n * ```\n */\nexport function Breadcrumbs({\n sx,\n action,\n backHref,\n heading,\n slots = {},\n links = [],\n moreLinks = [],\n slotProps = {},\n activeLast = false,\n linkComponent,\n ...other\n}: BreadcrumbsProps): ReactNode {\n const lastLink = links[links.length - 1]?.name;\n\n const renderHeading = () => (\n <BreadcrumbsHeading {...slotProps?.heading}>\n {backHref ? <BackLink href={backHref} label={heading} linkComponent={linkComponent} /> : heading}\n </BreadcrumbsHeading>\n );\n\n const renderLinks = () =>\n slots?.breadcrumbs ?? (\n <MuiBreadcrumbs separator={<BreadcrumbsSeparator />} {...slotProps?.breadcrumbs}>\n {links.map((link, index) => (\n <BreadcrumbLink\n key={link.name ?? index}\n icon={link.icon}\n href={link.href}\n name={link.name}\n disabled={link.name === lastLink && !activeLast}\n linkComponent={linkComponent}\n />\n ))}\n </MuiBreadcrumbs>\n );\n\n const renderMoreLinks = () => <MoreLinks links={moreLinks} {...slotProps?.moreLinks} />;\n\n return (\n <BreadcrumbsRoot sx={sx} {...other}>\n <BreadcrumbsContainer {...slotProps?.container}>\n <BreadcrumbsContent {...slotProps?.content}>\n {(heading || backHref) && renderHeading()}\n {(!!links.length || slots?.breadcrumbs) && renderLinks()}\n </BreadcrumbsContent>\n {action}\n </BreadcrumbsContainer>\n\n {!!moreLinks?.length && renderMoreLinks()}\n </BreadcrumbsRoot>\n );\n}\n","'use client';\n\n/**\n * Nav Card\n *\n * Horizontal navigation tile used on admin/dashboard overview pages:\n * colored icon on the left, title + description in the middle, and a\n * trailing chevron on the right. Renders as a router link when `to`\n * is supplied, otherwise as a button-like Card with `onClick`.\n *\n * Equal-height rows are guaranteed by `height: 100%` — pair the card\n * with a `<Grid container>` whose items share the same column span.\n *\n * @module @omnitron-dev/prism/components/nav-card\n */\n\nimport type { ElementType, ReactNode } from 'react';\nimport Box from '@mui/material/Box';\nimport Card from '@mui/material/Card';\nimport CardContent from '@mui/material/CardContent';\nimport Chip from '@mui/material/Chip';\nimport Typography from '@mui/material/Typography';\nimport ChevronRightIcon from '@mui/icons-material/ChevronRight';\nimport { alpha, type SxProps, type Theme } from '@mui/material/styles';\n\nexport interface NavCardProps {\n /** Card title (rendered as subtitle1, weight 600). */\n title: ReactNode;\n /** Secondary line below the title. */\n description?: ReactNode;\n /** Icon element rendered inside a colored square on the left. */\n icon?: ReactNode;\n /**\n * `'horizontal'` (default) — icon left, text right; works well in\n * 2-column rows (`md: 6`) where each card is wide.\n * `'vertical'` — icon top, text below; required when the card lives\n * in 4-column rows (`md: 3`) or narrower, because the horizontal\n * variant runs out of room for the text and starts breaking letters.\n * Pick orientation per row, not per card.\n */\n orientation?: 'horizontal' | 'vertical';\n /**\n * Palette key for the icon background (e.g. `'primary'`, `'error'`,\n * `'warning.dark'`). Defaults to `'primary'`. The hover border picks\n * up the same color.\n */\n color?: string;\n /**\n * Optional counter shown as a small chip next to the title. Falsy\n * values (`0`, `undefined`, `null`) hide the chip.\n */\n badge?: number | string | null;\n /** Palette key for the badge chip (defaults to `'warning'`). */\n badgeColor?: 'default' | 'primary' | 'secondary' | 'error' | 'info' | 'success' | 'warning';\n /**\n * Navigate to this route. When set, the card renders as the\n * supplied `linkComponent` (e.g. `RouterLink` from react-router) and\n * the whole card becomes a real anchor — Cmd/Ctrl-click opens a new\n * tab, screen readers expose link semantics.\n */\n to?: string;\n /** Custom router link component. Required when `to` is used. */\n linkComponent?: ElementType;\n /** Click handler — used when `to` is not supplied. */\n onClick?: () => void;\n /**\n * Trailing chevron. Pass `false` to suppress, or a ReactNode to\n * substitute (e.g. a status indicator). Default `true`.\n */\n arrow?: boolean | ReactNode;\n /** Square icon size in pixels (default 48). */\n iconSize?: number;\n /** Extra styles applied to the outer Card. */\n sx?: SxProps<Theme>;\n /** Accessible label override. Defaults to `${title} — ${description}`. */\n ariaLabel?: string;\n}\n\nexport function NavCard({\n title,\n description,\n icon,\n color = 'primary',\n badge,\n badgeColor = 'warning',\n orientation = 'horizontal',\n to,\n linkComponent,\n onClick,\n arrow = true,\n iconSize = 48,\n sx,\n ariaLabel,\n}: NavCardProps) {\n const interactive = Boolean(to) || Boolean(onClick);\n const linkProps = to && linkComponent ? { component: linkComponent, to } : {};\n\n const showBadge =\n badge !== undefined && badge !== null && badge !== '' && !(typeof badge === 'number' && badge === 0);\n\n const label =\n ariaLabel ??\n (typeof title === 'string' && typeof description === 'string' ? `${title} — ${description}` : undefined);\n\n const isVertical = orientation === 'vertical';\n\n return (\n <Card\n variant=\"outlined\"\n {...linkProps}\n onClick={!to ? onClick : undefined}\n aria-label={label}\n role={interactive && !to ? 'button' : undefined}\n tabIndex={interactive && !to ? 0 : undefined}\n onKeyDown={\n interactive && !to\n ? (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick?.();\n }\n }\n : undefined\n }\n sx={{\n height: '100%',\n cursor: interactive ? 'pointer' : 'default',\n textDecoration: 'none',\n color: 'inherit',\n // Explicit elevated paper background so the card pops on both\n // light and dark themes — the default `background.paper` is\n // very close to the page background in some dark presets,\n // which made the 1px border read as a faint vertical line\n // rather than a card outline. Falls back gracefully when a\n // theme doesn't define `elevation1`.\n bgcolor: (theme) =>\n theme.palette.background?.elevation2 ??\n theme.palette.background?.neutral ??\n theme.palette.background.paper,\n // On dark themes the default outlined-Paper border (alpha\n // 0.16 on grey) is too close to both the page bg and the\n // card body — the right edge of each card ends up reading\n // as a free-floating vertical line. Use `text.primary` at\n // a small alpha so the border is unambiguously a card edge\n // regardless of theme contrast, then let hover swap to the\n // accent colour for tactile feedback.\n borderColor: (theme) =>\n alpha(theme.palette.text.primary, theme.palette.mode === 'dark' ? 0.16 : 0.12),\n // Suppress the theme-level Card box-shadow halo for the\n // outlined variant — replicates prism's `Card` wrapper logic\n // so a raw MuiCard (which NavCard uses to be a real anchor)\n // doesn't get a glow that swallows the border.\n boxShadow: 'none',\n transition: 'border-color 0.2s, transform 0.2s, background-color 0.2s',\n '&:hover': interactive\n ? {\n borderColor: `${color}.main`,\n transform: 'translateY(-2px)',\n bgcolor: (theme) =>\n theme.palette.background?.elevation2 ??\n theme.palette.background?.elevation1 ??\n theme.palette.background.paper,\n }\n : undefined,\n '&:focus-visible': {\n outline: 2,\n outlineColor: `${color}.main`,\n outlineOffset: 2,\n },\n ...sx,\n }}\n >\n <CardContent\n sx={{\n p: isVertical ? 2.5 : 3,\n '&:last-child': { pb: isVertical ? 2.5 : 3 },\n height: '100%',\n display: 'flex',\n flexDirection: isVertical ? 'column' : 'row',\n alignItems: isVertical ? 'stretch' : 'center',\n gap: isVertical ? 1.25 : 0,\n }}\n >\n {isVertical ? (\n // Vertical: icon top, title + description stacked below, no\n // chevron (the entire card is the affordance — adding an\n // arrow into a narrow tile just steals text space).\n (<>\n {icon && (\n <Box\n sx={{\n width: 40,\n height: 40,\n borderRadius: 1.5,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n bgcolor: `${color}.main`,\n color: `${color}.contrastText`,\n flexShrink: 0,\n }}\n >\n {icon}\n </Box>\n )}\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, flexWrap: 'wrap' }}>\n <Typography\n variant=\"subtitle1\"\n sx={{\n fontWeight: 600,\n lineHeight: 1.2\n }}>\n {title}\n </Typography>\n {showBadge && (\n <Chip\n size=\"small\"\n label={badge}\n color={badgeColor}\n sx={{ height: 20, fontSize: '0.7rem', fontWeight: 700 }}\n />\n )}\n </Box>\n {description && (\n <Typography\n variant=\"body2\"\n sx={{\n color: \"text.secondary\",\n lineHeight: 1.35,\n\n // Clamp the description to 2 lines so an unusually\n // long copy doesn't push a tile out of its row.\n display: '-webkit-box',\n\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n overflow: 'hidden'\n }}>\n {description}\n </Typography>\n )}\n </>)\n ) : (\n <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', width: '100%', gap: 1 }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2, minWidth: 0 }}>\n {icon && (\n <Box\n sx={{\n width: iconSize,\n height: iconSize,\n borderRadius: 1.5,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n bgcolor: `${color}.main`,\n color: `${color}.contrastText`,\n flexShrink: 0,\n }}\n >\n {icon}\n </Box>\n )}\n <Box sx={{ minWidth: 0, flex: 1 }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, flexWrap: 'wrap' }}>\n <Typography\n variant=\"subtitle1\"\n sx={{\n fontWeight: 600,\n lineHeight: 1.3\n }}>\n {title}\n </Typography>\n {showBadge && (\n <Chip\n size=\"small\"\n label={badge}\n color={badgeColor}\n sx={{ height: 20, fontSize: '0.7rem', fontWeight: 700 }}\n />\n )}\n </Box>\n {description && (\n <Typography\n variant=\"body2\"\n sx={{\n color: \"text.secondary\",\n lineHeight: 1.4\n }}>\n {description}\n </Typography>\n )}\n </Box>\n </Box>\n {arrow !== false && (\n <Box sx={{ display: 'flex', alignItems: 'center', flexShrink: 0, color: 'text.secondary' }}>\n {arrow === true ? <ChevronRightIcon /> : arrow}\n </Box>\n )}\n </Box>\n )}\n </CardContent>\n </Card>\n );\n}\n","'use client';\n\n/**\n * NavCardGrid\n *\n * Canonical container for `<NavCard>` rows on admin/dashboard\n * overview pages. Replaces the ad-hoc `<Grid container spacing={3}>`\n * + `<Grid size={{md:3}}>` pattern, which has two failure modes\n * when the tile count is uneven against the column count:\n *\n * 1. The empty trailing cells visually extend the row above's\n * column borders into nothing — reading as orphan vertical\n * \"sticks\" between cards on dark themes.\n * 2. Cards across rows can end up with different heights when\n * their descriptions wrap differently.\n *\n * NavCardGrid solves both with a CSS Grid:\n *\n * - `auto-fit` (not `auto-fill`) collapses empty trailing tracks,\n * so the last row's cards expand to fill the width and their\n * right edges no longer align with the row above.\n * - `minmax(<min>, 1fr)` caps the column count on wide viewports\n * (otherwise 5+ tiny tiles can pack a row).\n * - `grid-auto-rows: 1fr` guarantees equal card height across\n * rows regardless of per-card content length.\n *\n * Use as a drop-in replacement for the Grid wrapper around NavCards\n * in admin dashboards. The contained `<NavCard>` should typically\n * use `orientation=\"vertical\"` so the tiles work at narrow widths.\n *\n * @example\n * ```tsx\n * <NavCardGrid>\n * <NavCard title=\"Users\" icon={<UsersIcon />} to=\"/admin/users\" />\n * <NavCard title=\"Shops\" icon={<ShopsIcon />} to=\"/admin/shops\" />\n * ...\n * </NavCardGrid>\n * ```\n *\n * @module @omnitron-dev/prism/components/nav-card\n */\n\nimport type { ReactNode } from 'react';\nimport Box from '@mui/material/Box';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\nexport interface NavCardGridProps {\n children: ReactNode;\n /**\n * Minimum tile width before wrap. Effectively caps the column\n * count via `minmax`. Default 260px which gives 4 columns on a\n * typical 1200px content area, 3 on tablet, 2 on small laptops,\n * and 1 on mobile.\n */\n minTileWidth?: number;\n /** Gap between tiles in spacing units. Default 3 (24px). */\n gap?: number;\n /** Custom sx overrides. */\n sx?: SxProps<Theme>;\n}\n\nexport function NavCardGrid({\n children,\n minTileWidth = 260,\n gap = 3,\n sx,\n}: NavCardGridProps) {\n return (\n <Box\n sx={{\n display: 'grid',\n gap,\n // Always 1 column on xs to avoid horizontal overflow on tiny\n // viewports; `auto-fit` from sm upward.\n gridTemplateColumns: {\n xs: '1fr',\n sm: `repeat(auto-fit, minmax(${minTileWidth}px, 1fr))`,\n },\n gridAutoRows: '1fr',\n ...sx,\n }}\n >\n {children}\n </Box>\n );\n}\n","'use client';\n\n/**\n * Drawer Component\n *\n * Enhanced drawer/side panel with custom styling.\n *\n * @module @omnitron-dev/prism/components/drawer\n */\n\nimport type { ReactNode } from 'react';\nimport MuiDrawer from '@mui/material/Drawer';\nimport Box from '@mui/material/Box';\nimport IconButton from '@mui/material/IconButton';\nimport Typography from '@mui/material/Typography';\nimport Divider from '@mui/material/Divider';\nimport type { PaperProps } from '@mui/material/Paper';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\n/**\n * Drawer anchor positions.\n */\nexport type DrawerAnchor = 'left' | 'right' | 'top' | 'bottom';\n\n/**\n * Props for Drawer component.\n */\nexport interface DrawerProps {\n /** Whether the drawer is open */\n open?: boolean;\n /** Drawer anchor position */\n anchor?: DrawerAnchor;\n /** Drawer title */\n title?: ReactNode;\n /** Drawer width (for left/right anchors) */\n width?: number | string;\n /** Drawer height (for top/bottom anchors) */\n height?: number | string;\n /** Show close button */\n showCloseButton?: boolean;\n /** Close button icon */\n closeIcon?: ReactNode;\n /** Header actions */\n headerActions?: ReactNode;\n /** Footer content */\n footer?: ReactNode;\n /** Drawer content */\n children?: ReactNode;\n /** On close handler */\n onClose?: () => void;\n /** Variant: permanent, persistent, or temporary */\n variant?: 'permanent' | 'persistent' | 'temporary';\n /** Props for the Paper component */\n PaperProps?: Partial<PaperProps>;\n /** Custom sx props */\n sx?: SxProps<Theme>;\n}\n\n/**\n * Default close icon.\n */\nfunction DefaultCloseIcon(): ReactNode {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n </svg>\n );\n}\n\n/**\n * Drawer - Enhanced drawer/side panel.\n *\n * @example\n * ```tsx\n * <Drawer\n * open={isOpen}\n * onClose={() => setIsOpen(false)}\n * title=\"Edit Profile\"\n * anchor=\"right\"\n * width={400}\n * >\n * <ProfileForm />\n * </Drawer>\n * ```\n */\nexport function Drawer({\n open,\n anchor = 'right',\n title,\n width = 320,\n height = 'auto',\n showCloseButton = true,\n closeIcon,\n headerActions,\n footer,\n children,\n onClose,\n variant = 'temporary',\n PaperProps,\n sx,\n}: DrawerProps): ReactNode {\n const isHorizontal = anchor === 'left' || anchor === 'right';\n const drawerSize = isHorizontal ? { width } : { height };\n\n return (\n <MuiDrawer\n open={open}\n anchor={anchor}\n variant={variant}\n onClose={onClose}\n transitionDuration={{ enter: 300, exit: 250 }}\n sx={sx}\n slotProps={{\n backdrop: { sx: { backdropFilter: 'blur(2px)' } },\n\n paper: {\n sx: {\n ...drawerSize,\n display: 'flex',\n flexDirection: 'column',\n },\n ...PaperProps,\n }\n }}>\n {/* Header */}\n {(title || showCloseButton || headerActions) && (\n <>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n p: 2,\n minHeight: 64,\n }}\n >\n {title && (\n <Typography variant=\"h6\" component=\"div\">\n {title}\n </Typography>\n )}\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, ml: 'auto' }}>\n {headerActions}\n {showCloseButton && onClose && (\n <IconButton onClick={onClose} edge=\"end\" size=\"small\" aria-label=\"Close drawer\">\n {closeIcon ?? <DefaultCloseIcon />}\n </IconButton>\n )}\n </Box>\n </Box>\n <Divider />\n </>\n )}\n {/* Content */}\n <Box\n sx={{\n flex: 1,\n overflow: 'auto',\n p: 2,\n }}\n >\n {children}\n </Box>\n {/* Footer */}\n {footer && (\n <>\n <Divider />\n <Box sx={{ p: 2 }}>{footer}</Box>\n </>\n )}\n </MuiDrawer>\n );\n}\n","'use client';\n\n/**\n * Stepper Component\n *\n * Multi-step wizard/stepper with custom styling.\n *\n * @module @omnitron-dev/prism/components/stepper\n */\n\nimport { useState, useCallback, type ReactNode } from 'react';\nimport MuiStepper from '@mui/material/Stepper';\nimport Step from '@mui/material/Step';\nimport StepLabel from '@mui/material/StepLabel';\nimport StepContent from '@mui/material/StepContent';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport type { StepperProps as MuiStepperProps } from '@mui/material/Stepper';\n\n/**\n * Step definition.\n */\nexport interface StepItem {\n /** Step label */\n label: string;\n /** Step description */\n description?: string;\n /** Step content */\n content?: ReactNode;\n /** Optional step (can be skipped) */\n optional?: boolean;\n /** Step icon */\n icon?: ReactNode;\n /** Step is completed */\n completed?: boolean;\n /** Step has error */\n error?: boolean;\n}\n\n/**\n * Props for Stepper component.\n */\nexport interface StepperProps extends Omit<MuiStepperProps, 'children'> {\n /** Steps to display */\n steps: StepItem[];\n /** Active step index */\n activeStep?: number;\n /** On step change */\n onStepChange?: (step: number) => void;\n /** Stepper orientation */\n orientation?: 'horizontal' | 'vertical';\n /** Allow non-linear navigation */\n nonLinear?: boolean;\n /** Alternative label placement (horizontal only) */\n alternativeLabel?: boolean;\n /** Show step content (vertical only) */\n showContent?: boolean;\n}\n\n/**\n * Stepper - Multi-step wizard/stepper.\n *\n * @example\n * ```tsx\n * <Stepper\n * steps={[\n * { label: 'Account', description: 'Create account' },\n * { label: 'Profile', description: 'Complete profile', optional: true },\n * { label: 'Verify', description: 'Verify email' },\n * ]}\n * activeStep={1}\n * onStepChange={(step) => setActiveStep(step)}\n * />\n * ```\n */\nexport function Stepper({\n steps,\n activeStep = 0,\n onStepChange,\n orientation = 'horizontal',\n nonLinear = false,\n alternativeLabel = false,\n showContent = false,\n ...other\n}: StepperProps): ReactNode {\n const handleStepClick = (index: number) => {\n if (nonLinear && onStepChange) {\n onStepChange(index);\n }\n };\n\n return (\n <MuiStepper\n activeStep={activeStep}\n orientation={orientation}\n nonLinear={nonLinear}\n alternativeLabel={alternativeLabel}\n {...other}\n >\n {steps.map((step, index) => (\n <Step key={index} completed={step.completed ?? index < activeStep}>\n <StepLabel\n optional={\n step.optional ? (\n <span style={{ fontSize: '0.75rem', color: 'text.secondary' }}>Optional</span>\n ) : step.description ? (\n <span style={{ fontSize: '0.75rem', color: 'text.secondary' }}>{step.description}</span>\n ) : undefined\n }\n error={step.error}\n icon={step.icon}\n sx={{\n cursor: nonLinear ? 'pointer' : 'default',\n }}\n onClick={() => handleStepClick(index)}\n >\n {step.label}\n </StepLabel>\n {orientation === 'vertical' && showContent && step.content && <StepContent>{step.content}</StepContent>}\n </Step>\n ))}\n </MuiStepper>\n );\n}\n\n/**\n * Return type for useStepper hook.\n */\nexport interface UseStepperReturn {\n /** Current active step */\n activeStep: number;\n /** Go to next step */\n nextStep: () => void;\n /** Go to previous step */\n prevStep: () => void;\n /** Go to specific step */\n goToStep: (step: number) => void;\n /** Reset to first step */\n reset: () => void;\n /** Is first step */\n isFirstStep: boolean;\n /** Is last step */\n isLastStep: boolean;\n /** Step is completed */\n isCompleted: boolean;\n}\n\n/**\n * Options for useStepper hook.\n */\nexport interface UseStepperOptions {\n /** Initial step */\n initialStep?: number;\n /** Total steps */\n totalSteps: number;\n /** On step change callback */\n onStepChange?: (step: number) => void;\n /** On complete callback */\n onComplete?: () => void;\n}\n\n/**\n * useStepper - Hook for managing stepper state.\n *\n * @example\n * ```tsx\n * const stepper = useStepper({\n * totalSteps: 3,\n * onComplete: () => console.log('Done!'),\n * });\n *\n * <Stepper steps={steps} activeStep={stepper.activeStep} />\n * <Button onClick={stepper.prevStep} disabled={stepper.isFirstStep}>\n * Back\n * </Button>\n * <Button onClick={stepper.nextStep}>\n * {stepper.isLastStep ? 'Finish' : 'Next'}\n * </Button>\n * ```\n */\nexport function useStepper({\n initialStep = 0,\n totalSteps,\n onStepChange,\n onComplete,\n}: UseStepperOptions): UseStepperReturn {\n const [activeStep, setActiveStep] = useState(initialStep);\n const [isCompleted, setIsCompleted] = useState(false);\n\n const goToStep = useCallback(\n (step: number) => {\n if (step >= 0 && step < totalSteps) {\n setActiveStep(step);\n onStepChange?.(step);\n }\n },\n [totalSteps, onStepChange]\n );\n\n const nextStep = useCallback(() => {\n if (activeStep === totalSteps - 1) {\n setIsCompleted(true);\n onComplete?.();\n } else {\n goToStep(activeStep + 1);\n }\n }, [activeStep, totalSteps, goToStep, onComplete]);\n\n const prevStep = useCallback(() => {\n goToStep(activeStep - 1);\n }, [activeStep, goToStep]);\n\n const reset = useCallback(() => {\n setActiveStep(0);\n setIsCompleted(false);\n onStepChange?.(0);\n }, [onStepChange]);\n\n return {\n activeStep,\n nextStep,\n prevStep,\n goToStep,\n reset,\n isFirstStep: activeStep === 0,\n isLastStep: activeStep === totalSteps - 1,\n isCompleted,\n };\n}\n\n/**\n * Props for StepperActions component.\n */\nexport interface StepperActionsProps {\n /** Stepper hook return */\n stepper: UseStepperReturn;\n /** Back button label */\n backLabel?: string;\n /** Next button label */\n nextLabel?: string;\n /** Finish button label */\n finishLabel?: string;\n /** Disable next button */\n disableNext?: boolean;\n /** Custom actions */\n actions?: ReactNode;\n}\n\n/**\n * StepperActions - Common action buttons for stepper.\n *\n * @example\n * ```tsx\n * <StepperActions stepper={stepper} />\n * ```\n */\nexport function StepperActions({\n stepper,\n backLabel = 'Back',\n nextLabel = 'Next',\n finishLabel = 'Finish',\n disableNext = false,\n actions,\n}: StepperActionsProps): ReactNode {\n return (\n <Box sx={{ display: 'flex', gap: 2, mt: 3 }}>\n <Button variant=\"outlined\" onClick={stepper.prevStep} disabled={stepper.isFirstStep}>\n {backLabel}\n </Button>\n <Box sx={{ flex: 1 }} />\n {actions}\n <Button variant=\"contained\" onClick={stepper.nextStep} disabled={disableNext}>\n {stepper.isLastStep ? finishLabel : nextLabel}\n </Button>\n </Box>\n );\n}\n","/**\n * Class Name Utility\n *\n * Combines clsx for conditional classes with optional Tailwind merge.\n * Inspired by shadcn/ui's cn() utility and minimal-shared's mergeClasses.\n *\n * @module @omnitron-dev/prism/utils/cn\n */\n\nimport { clsx, type ClassValue } from 'clsx';\n\n/**\n * Combines class names using clsx.\n *\n * This is a simplified version without tailwind-merge since Prism\n * primarily uses MUI's sx prop for styling. For Tailwind projects,\n * consider adding tailwind-merge.\n *\n * @example\n * ```tsx\n * // Basic usage\n * cn('px-4 py-2', 'bg-blue-500')\n *\n * // Conditional classes\n * cn('base-class', isActive && 'active', isDisabled && 'disabled')\n *\n * // With objects\n * cn('base', { active: isActive, disabled: isDisabled })\n *\n * // With arrays\n * cn(['class1', 'class2'], condition && 'class3')\n * ```\n */\nexport function cn(...inputs: ClassValue[]): string {\n return clsx(inputs);\n}\n\n/**\n * Type for class value inputs.\n * Re-exported for convenience.\n */\nexport type { ClassValue };\n\n// =============================================================================\n// STATE-BASED CLASS MERGING (minimal-shared pattern)\n// =============================================================================\n\n/**\n * State props for mergeClasses.\n * Values can be:\n * - boolean: includes key as class name if true\n * - undefined: excluded\n * - [boolean, string]: includes string as class name if boolean is true\n */\nexport type StateProps = {\n [key: string]: boolean | undefined | [boolean, string];\n};\n\n/**\n * Merges class names with state-based class names.\n *\n * This utility provides an alternative API for state-based class toggling,\n * particularly useful when class names differ from state keys.\n *\n * @param className - Base class name(s)\n * @param state - State object with boolean or [boolean, className] values\n * @returns Merged class names string\n *\n * @example\n * ```tsx\n * // Basic state-based merging\n * mergeClasses('item', {\n * 'item--active': isActive,\n * 'item--disabled': isDisabled,\n * });\n * // Output: 'item item--active' (if isActive is true)\n *\n * // With tuple format for different class names\n * mergeClasses('btn', {\n * primary: [isPrimary, 'btn-primary'],\n * secondary: [isSecondary, 'btn-secondary'],\n * });\n *\n * // With array of base classes\n * mergeClasses(['nav', 'nav--main'], {\n * 'nav--open': isOpen,\n * });\n * ```\n */\nexport function mergeClasses(className?: string | (string | undefined)[] | null, state?: StateProps): string {\n const classList = className ? (Array.isArray(className) ? className.filter(Boolean) : [className]) : [];\n\n if (!state) {\n return classList.join(' ');\n }\n\n const stateClasses = Object.entries(state)\n .filter(([, value]) => value !== undefined && value !== false)\n .map(([key, value]) => {\n if (Array.isArray(value)) {\n return value[0] ? value[1] : '';\n }\n return value ? key : '';\n })\n .filter(Boolean);\n\n return [...classList, ...stateClasses].join(' ');\n}\n","/**\n * Chart Component CSS Classes\n *\n * @module @omnitron-dev/prism/components/chart\n */\n\nimport { createClasses } from '../../utils/create-classes.js';\n\n// =============================================================================\n// CHART CLASSES\n// =============================================================================\n\n/**\n * CSS class names for the Chart component.\n */\nexport const chartClasses = {\n root: createClasses('chart__root'),\n loading: createClasses('chart__loading'),\n legends: {\n root: createClasses('chart__legends__root'),\n item: {\n wrap: createClasses('chart__legends__item__wrap'),\n root: createClasses('chart__legends__item__root'),\n dot: createClasses('chart__legends__item__dot'),\n icon: createClasses('chart__legends__item__icon'),\n label: createClasses('chart__legends__item__label'),\n value: createClasses('chart__legends__item__value'),\n },\n },\n};\n","'use client';\n\n/**\n * Chart Loading Component\n *\n * Skeleton placeholder shown while chart is loading.\n *\n * @module @omnitron-dev/prism/components/chart\n */\n\nimport type { ChartLoadingProps, ChartType } from '../types.js';\n\nimport Box from '@mui/material/Box';\nimport Skeleton from '@mui/material/Skeleton';\n\nimport { cn } from '../../../utils/cn.js';\nimport { chartClasses } from '../classes.js';\n\n// =============================================================================\n// CIRCULAR CHART TYPES\n// =============================================================================\n\nconst CIRCULAR_TYPES: ChartType[] = ['donut', 'radialBar', 'pie', 'polarArea'];\n\n// =============================================================================\n// CHART LOADING\n// =============================================================================\n\n/**\n * Loading skeleton for charts.\n *\n * Displays a skeleton placeholder with shape appropriate for the chart type.\n *\n * @example\n * ```tsx\n * <ChartLoading type=\"pie\" />\n * <ChartLoading type=\"bar\" />\n * ```\n */\nexport function ChartLoading({ sx, className, type, ...other }: ChartLoadingProps) {\n const isCircular = type && CIRCULAR_TYPES.includes(type);\n\n return (\n <Box\n className={cn(chartClasses.loading, className)}\n sx={[\n {\n top: 0,\n left: 0,\n width: 1,\n zIndex: 9,\n height: 1,\n p: 'inherit',\n overflow: 'hidden',\n alignItems: 'center',\n position: 'absolute',\n borderRadius: 'inherit',\n justifyContent: 'center',\n display: 'flex',\n },\n ...(Array.isArray(sx) ? sx : [sx]),\n ]}\n {...other}\n >\n <Skeleton\n variant=\"circular\"\n sx={{\n width: 1,\n height: 1,\n borderRadius: 'inherit',\n ...(isCircular && { borderRadius: '50%' }),\n }}\n />\n </Box>\n );\n}\n","'use client';\n\n/**\n * Chart Legends Component\n *\n * Custom legend display for charts.\n *\n * @module @omnitron-dev/prism/components/chart\n */\n\nimport type { ChartLegendsProps } from '../types.js';\n\nimport { styled } from '@mui/material/styles';\n\nimport { cn } from '../../../utils/cn.js';\nimport { chartClasses } from '../classes.js';\n\n// =============================================================================\n// CHART LEGENDS\n// =============================================================================\n\n/**\n * Custom chart legends component.\n *\n * Displays chart legends with support for colors, icons, values, and sublabels.\n *\n * @example\n * ```tsx\n * <ChartLegends\n * labels={['Series A', 'Series B']}\n * colors={['#ff0000', '#00ff00']}\n * values={['100', '200']}\n * />\n * ```\n */\nexport function ChartLegends({\n sx,\n className,\n slotProps,\n icons = [],\n values = [],\n labels = [],\n colors = [],\n sublabels = [],\n ...other\n}: ChartLegendsProps) {\n return (\n <ListRoot className={cn(chartClasses.legends.root, className)} sx={sx} {...other}>\n {labels.map((series, index) => (\n <ItemWrap\n key={series}\n className={chartClasses.legends.item.wrap}\n sx={[\n {\n '--icon-color': colors[index],\n },\n ...(Array.isArray(slotProps?.wrapper?.sx) ? slotProps.wrapper.sx : [slotProps?.wrapper?.sx]),\n ]}\n {...slotProps?.wrapper}\n >\n <ItemRoot className={chartClasses.legends.item.root} {...slotProps?.root}>\n {icons.length ? (\n <ItemIcon className={chartClasses.legends.item.icon} {...slotProps?.icon}>\n {icons[index]}\n </ItemIcon>\n ) : (\n <ItemDot className={chartClasses.legends.item.dot} {...slotProps?.dot} />\n )}\n\n <ItemLabel className={chartClasses.legends.item.label} {...slotProps?.label}>\n {series}\n {!!sublabels.length && <> {` (${sublabels[index]})`}</>}\n </ItemLabel>\n </ItemRoot>\n\n {values.length > 0 && (\n <ItemValue className={chartClasses.legends.item.value} {...slotProps?.value}>\n {values[index]}\n </ItemValue>\n )}\n </ItemWrap>\n ))}\n </ListRoot>\n );\n}\n\n// =============================================================================\n// STYLED COMPONENTS\n// =============================================================================\n\nconst ListRoot = styled('ul')(({ theme }) => ({\n display: 'flex',\n flexWrap: 'wrap',\n gap: theme.spacing(2),\n margin: 0,\n padding: 0,\n listStyle: 'none',\n}));\n\nconst ItemWrap = styled('li')({\n display: 'inline-flex',\n flexDirection: 'column',\n});\n\nconst ItemRoot = styled('div')(({ theme }) => ({\n gap: 6,\n alignItems: 'center',\n display: 'inline-flex',\n justifyContent: 'flex-start',\n fontSize: theme.typography.pxToRem(13),\n fontWeight: theme.typography.fontWeightMedium,\n}));\n\nconst ItemIcon = styled('span')({\n display: 'inline-flex',\n color: 'var(--icon-color)',\n '& > svg': {\n width: 20,\n height: 20,\n },\n});\n\nconst ItemDot = styled('span')({\n width: 12,\n height: 12,\n flexShrink: 0,\n display: 'flex',\n borderRadius: '50%',\n position: 'relative',\n alignItems: 'center',\n justifyContent: 'center',\n color: 'var(--icon-color)',\n backgroundColor: 'currentColor',\n});\n\nconst ItemLabel = styled('span')({\n flexShrink: 0,\n});\n\nconst ItemValue = styled('span')(({ theme }) => ({\n ...theme.typography.h6,\n marginTop: theme.spacing(1),\n}));\n","'use client';\n\n/**\n * Chart Component\n *\n * Lazy-loaded ApexCharts wrapper with theme integration and SSR support.\n *\n * @module @omnitron-dev/prism/components/chart\n */\n\nimport type { ChartProps } from './types.js';\n\nimport { lazy, Suspense, useState, useEffect, type ComponentType } from 'react';\n\nimport { styled } from '@mui/material/styles';\n\nimport { cn } from '../../utils/cn.js';\nimport { chartClasses } from './classes.js';\nimport { ChartLoading } from './components/index.js';\n\n// =============================================================================\n// LAZY LOADED APEX CHARTS\n// =============================================================================\n\n/**\n * ApexChart component props (minimal type for lazy loading).\n */\ninterface ApexChartProps {\n type?: string;\n series?: unknown;\n options?: unknown;\n width?: string | number;\n height?: string | number;\n}\n\nconst LazyApexChart = lazy(() =>\n import('react-apexcharts').then((module) => ({\n default: module.default as ComponentType<ApexChartProps>,\n }))\n);\n\n// =============================================================================\n// CHART COMPONENT\n// =============================================================================\n\n/**\n * Theme-aware chart component using ApexCharts.\n *\n * Features:\n * - Lazy loading with Suspense\n * - SSR-safe (only renders on client)\n * - Theme-integrated styles\n * - Loading skeleton placeholder\n *\n * @example\n * ```tsx\n * import { Chart, useChart } from '@omnitron-dev/prism/components';\n *\n * function MyChart() {\n * const chartOptions = useChart({\n * xaxis: { categories: ['Jan', 'Feb', 'Mar'] },\n * });\n *\n * return (\n * <Chart\n * type=\"line\"\n * series={[{ name: 'Sales', data: [10, 20, 30] }]}\n * options={chartOptions}\n * height={320}\n * />\n * );\n * }\n * ```\n */\nexport function Chart({\n type,\n series,\n options,\n width = '100%',\n height = '100%',\n slotProps,\n className,\n sx,\n ...other\n}: ChartProps) {\n const [isClient, setIsClient] = useState(false);\n\n // SSR safety: only render chart on client\n useEffect(() => {\n setIsClient(true);\n }, []);\n\n const renderFallback = () => <ChartLoading type={type} sx={slotProps?.loading} />;\n\n return (\n <ChartRoot dir=\"ltr\" className={cn(chartClasses.root, className)} sx={sx} {...other}>\n {isClient ? (\n <Suspense fallback={renderFallback()}>\n <LazyApexChart type={type} series={series} options={options} width={width} height={height} />\n </Suspense>\n ) : (\n renderFallback()\n )}\n </ChartRoot>\n );\n}\n\n// =============================================================================\n// STYLED COMPONENTS\n// =============================================================================\n\nconst ChartRoot = styled('div')(({ theme }) => ({\n width: '100%',\n flexShrink: 0,\n position: 'relative',\n borderRadius: Number(theme.shape.borderRadius) * 1.5,\n}));\n","/**\n * useChart Hook\n *\n * Creates theme-aware ApexCharts options with sensible defaults.\n * Merges custom options with base theme-integrated options.\n *\n * @module @omnitron-dev/prism/components/chart\n */\n\nimport type { Theme } from '@mui/material/styles';\nimport type { ChartOptions } from './types.js';\n\nimport { useTheme } from '@mui/material/styles';\n\n// =============================================================================\n// USE CHART HOOK\n// =============================================================================\n\n/**\n * Create theme-aware chart options.\n *\n * @param updatedOptions - Custom options to merge with base options\n * @returns Merged chart options with theme integration\n *\n * @example\n * ```tsx\n * function MyChart() {\n * const chartOptions = useChart({\n * xaxis: { categories: ['Jan', 'Feb', 'Mar'] },\n * });\n *\n * return (\n * <Chart\n * type=\"line\"\n * series={[{ name: 'Sales', data: [10, 20, 30] }]}\n * options={chartOptions}\n * />\n * );\n * }\n * ```\n */\nexport function useChart(updatedOptions?: ChartOptions): ChartOptions {\n const theme = useTheme();\n\n const baseOptions = baseChartOptions(theme) ?? {};\n\n return deepMerge(baseOptions, updatedOptions ?? {});\n}\n\n// =============================================================================\n// BASE CHART OPTIONS\n// =============================================================================\n\n/**\n * Generate base chart options from theme.\n */\nfunction baseChartOptions(theme: Theme): ChartOptions {\n // Access CSS variables safely\n const vars = theme.vars?.palette;\n const palette = theme.palette;\n\n // Label styles for donut/radialBar charts\n const LABEL_TOTAL = {\n show: true,\n label: 'Total',\n color: vars?.text.secondary ?? palette.text.secondary,\n fontSize: theme.typography.subtitle2.fontSize as string,\n fontWeight: theme.typography.subtitle2.fontWeight,\n };\n\n const LABEL_VALUE = {\n offsetY: 8,\n color: vars?.text.primary ?? palette.text.primary,\n fontSize: theme.typography.h4.fontSize as string,\n fontWeight: theme.typography.h4.fontWeight,\n };\n\n // Get grey channel for opacity calculations\n const greyChannel = getColorChannel(theme, 'grey', '500');\n const dividerColor = vars?.divider ?? palette.divider;\n const paperColor = vars?.background.paper ?? palette.background.paper;\n\n return {\n // =========================================================================\n // Chart\n // https://apexcharts.com/docs/options/chart/animations/\n // =========================================================================\n chart: {\n toolbar: { show: false },\n zoom: { enabled: false },\n parentHeightOffset: 0,\n fontFamily: theme.typography.fontFamily,\n foreColor: vars?.text.disabled ?? palette.text.disabled,\n animations: {\n enabled: true,\n speed: 360,\n animateGradually: { enabled: true, delay: 120 },\n dynamicAnimation: { enabled: true, speed: 360 },\n },\n },\n\n // =========================================================================\n // Colors\n // https://apexcharts.com/docs/options/colors/\n // =========================================================================\n colors: [\n palette.primary.main,\n palette.warning.main,\n palette.info.main,\n palette.error.main,\n palette.success.main,\n palette.warning.dark,\n palette.success.dark,\n palette.info.dark,\n palette.primary.dark,\n ],\n\n // =========================================================================\n // States\n // https://apexcharts.com/docs/options/states/\n // =========================================================================\n states: {\n hover: { filter: { type: 'darken' } },\n active: { filter: { type: 'darken' } },\n },\n\n // =========================================================================\n // Fill\n // https://apexcharts.com/docs/options/fill/\n // =========================================================================\n fill: {\n opacity: 1,\n gradient: {\n type: 'vertical',\n shadeIntensity: 0,\n opacityFrom: 0.4,\n opacityTo: 0,\n stops: [0, 100],\n },\n },\n\n // =========================================================================\n // Data Labels\n // https://apexcharts.com/docs/options/datalabels/\n // =========================================================================\n dataLabels: { enabled: false },\n\n // =========================================================================\n // Stroke\n // https://apexcharts.com/docs/options/stroke/\n // =========================================================================\n stroke: { width: 2.5, curve: 'smooth', lineCap: 'round' },\n\n // =========================================================================\n // Grid\n // https://apexcharts.com/docs/options/grid/\n // =========================================================================\n grid: {\n strokeDashArray: 3,\n borderColor: dividerColor,\n padding: { top: 0, right: 0, bottom: 0 },\n xaxis: { lines: { show: false } },\n },\n\n // =========================================================================\n // Axis\n // https://apexcharts.com/docs/options/xaxis/\n // https://apexcharts.com/docs/options/yaxis/\n // =========================================================================\n xaxis: { axisBorder: { show: false }, axisTicks: { show: false } },\n yaxis: { tickAmount: 5 },\n\n // =========================================================================\n // Markers\n // https://apexcharts.com/docs/options/markers/\n // =========================================================================\n markers: {\n size: 0,\n strokeColors: paperColor,\n },\n\n // =========================================================================\n // Tooltip\n // =========================================================================\n tooltip: { theme: 'false', fillSeriesColor: false, x: { show: true } },\n\n // =========================================================================\n // Legend\n // https://apexcharts.com/docs/options/legend/\n // =========================================================================\n legend: {\n show: false,\n position: 'top',\n fontWeight: 500,\n fontSize: '13px',\n horizontalAlign: 'right',\n markers: { shape: 'circle' },\n labels: { colors: vars?.text.primary ?? palette.text.primary },\n itemMargin: { horizontal: 8, vertical: 8 },\n },\n\n // =========================================================================\n // Plot Options\n // =========================================================================\n plotOptions: {\n // Bar charts\n // https://apexcharts.com/docs/options/plotoptions/bar/\n bar: { borderRadius: 4, columnWidth: '48%', borderRadiusApplication: 'end' },\n\n // Pie & Donut charts\n // https://apexcharts.com/docs/options/plotoptions/pie/\n pie: {\n donut: {\n labels: {\n show: true,\n value: { ...LABEL_VALUE },\n total: { ...LABEL_TOTAL },\n },\n },\n },\n\n // RadialBar charts\n // https://apexcharts.com/docs/options/plotoptions/radialbar/\n radialBar: {\n hollow: { margin: -8, size: '100%' },\n track: {\n margin: -8,\n strokeWidth: '50%',\n background: `rgba(${greyChannel} / 0.16)`,\n },\n dataLabels: { value: { ...LABEL_VALUE }, total: { ...LABEL_TOTAL } },\n },\n\n // Radar charts\n // https://apexcharts.com/docs/options/plotoptions/radar/\n radar: {\n polygons: {\n fill: { colors: ['transparent'] },\n strokeColors: dividerColor,\n connectorColors: dividerColor,\n },\n },\n\n // Polar Area charts\n // https://apexcharts.com/docs/options/plotoptions/polararea/\n polarArea: {\n rings: { strokeColor: dividerColor },\n spokes: { connectorColors: dividerColor },\n },\n\n // Heatmap charts\n // https://apexcharts.com/docs/options/plotoptions/heatmap/\n heatmap: { distributed: true },\n },\n\n // =========================================================================\n // Responsive\n // https://apexcharts.com/docs/options/responsive/\n // =========================================================================\n responsive: [\n {\n breakpoint: theme.breakpoints.values.sm,\n options: { plotOptions: { bar: { borderRadius: 3, columnWidth: '80%' } } },\n },\n {\n breakpoint: theme.breakpoints.values.md,\n options: { plotOptions: { bar: { columnWidth: '60%' } } },\n },\n ],\n };\n}\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\n/**\n * Get color channel from theme safely.\n */\nfunction getColorChannel(theme: Theme, color: 'grey' | 'primary' | 'secondary', shade?: string): string {\n const channelKey = shade ? `${shade}Channel` : 'mainChannel';\n const vars = theme.vars?.palette[color] as Record<string, string> | undefined;\n\n const fallbacks: Record<string, string> = {\n '500Channel': '145 158 171',\n '900Channel': '0 0 0',\n mainChannel: '51 133 240',\n };\n\n return vars?.[channelKey] ?? fallbacks[channelKey] ?? '145 158 171';\n}\n\n/**\n * Deep merge two objects.\n */\nfunction deepMerge<T extends object>(target: T, source: Partial<T>): T {\n const output = { ...target };\n\n for (const key of Object.keys(source) as Array<keyof T>) {\n const sourceValue = source[key];\n const targetValue = target[key];\n\n if (\n sourceValue !== null &&\n typeof sourceValue === 'object' &&\n !Array.isArray(sourceValue) &&\n targetValue !== null &&\n typeof targetValue === 'object' &&\n !Array.isArray(targetValue)\n ) {\n output[key] = deepMerge(targetValue as object, sourceValue as object) as T[keyof T];\n } else if (sourceValue !== undefined) {\n output[key] = sourceValue as T[keyof T];\n }\n }\n\n return output;\n}\n","/**\n * Lightbox CSS Classes\n *\n * @module @omnitron-dev/prism/components/lightbox\n */\n\nimport { createClasses } from '../../utils/create-classes.js';\n\n/**\n * CSS class names for Lightbox component.\n */\nexport const lightboxClasses = {\n root: createClasses('lightbox__root'),\n backdrop: createClasses('lightbox__backdrop'),\n container: createClasses('lightbox__container'),\n slide: createClasses('lightbox__slide'),\n slideActive: createClasses('lightbox__slide--active'),\n image: createClasses('lightbox__image'),\n video: createClasses('lightbox__video'),\n caption: createClasses('lightbox__caption'),\n toolbar: createClasses('lightbox__toolbar'),\n toolbarTop: createClasses('lightbox__toolbar--top'),\n toolbarBottom: createClasses('lightbox__toolbar--bottom'),\n toolbarButton: createClasses('lightbox__toolbar__button'),\n navButton: createClasses('lightbox__nav'),\n navPrev: createClasses('lightbox__nav--prev'),\n navNext: createClasses('lightbox__nav--next'),\n counter: createClasses('lightbox__counter'),\n thumbnails: createClasses('lightbox__thumbnails'),\n thumbnail: createClasses('lightbox__thumbnail'),\n thumbnailActive: createClasses('lightbox__thumbnail--active'),\n zoom: createClasses('lightbox__zoom'),\n zoomed: createClasses('lightbox__zoomed'),\n loading: createClasses('lightbox__loading'),\n error: createClasses('lightbox__error'),\n};\n","'use client';\n\n/**\n * Lightbox Component\n *\n * Premium modal image/video viewer with smooth crossfade transitions,\n * glassmorphism UI, zoom, pan, touch gestures, and keyboard navigation.\n *\n * @module @omnitron-dev/prism/components/lightbox\n */\n\nimport type { LightboxProps, LightboxSlide } from './types.js';\n\nimport { useState, useEffect, useCallback, useRef, useMemo } from 'react';\n\nimport Box from '@mui/material/Box';\nimport Dialog from '@mui/material/Dialog';\nimport IconButton from '@mui/material/IconButton';\nimport Typography from '@mui/material/Typography';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport { styled, alpha, useTheme } from '@mui/material/styles';\n\n// MUI Icons (standard for design system components)\nimport CloseIcon from '@mui/icons-material/Close';\nimport ChevronLeftIcon from '@mui/icons-material/ChevronLeft';\nimport ChevronRightIcon from '@mui/icons-material/ChevronRight';\nimport ZoomInIcon from '@mui/icons-material/ZoomIn';\nimport ZoomOutIcon from '@mui/icons-material/ZoomOut';\nimport FullscreenIcon from '@mui/icons-material/Fullscreen';\nimport FullscreenExitIcon from '@mui/icons-material/FullscreenExit';\nimport DownloadIcon from '@mui/icons-material/Download';\nimport ShareIcon from '@mui/icons-material/Share';\nimport PlayArrowIcon from '@mui/icons-material/PlayArrow';\n\nimport { cn } from '../../utils/cn.js';\nimport { lightboxClasses } from './classes.js';\n\n// =============================================================================\n// CONSTANTS\n// =============================================================================\n\nconst MIN_ZOOM = 1;\nconst MAX_ZOOM = 4;\nconst ZOOM_STEP = 0.5;\nconst SWIPE_THRESHOLD = 60;\nconst TRANSITION_DURATION = 400;\n\n// =============================================================================\n// LIGHTBOX COMPONENT\n// =============================================================================\n\n/**\n * Full-screen modal image/video viewer with smooth crossfade transitions.\n *\n * @example\n * ```tsx\n * import { Lightbox, useLightbox } from '@omnitron-dev/prism/components';\n *\n * function Gallery() {\n * const lightbox = useLightbox({ totalSlides: images.length });\n *\n * return (\n * <>\n * <ImageList>\n * {images.map((img, i) => (\n * <ImageListItem key={i} onClick={() => lightbox.onOpen(i)}>\n * <img src={img.thumbnail} />\n * </ImageListItem>\n * ))}\n * </ImageList>\n *\n * <Lightbox\n * slides={images}\n * thumbnails\n * zoom\n * {...lightbox.getLightboxProps()}\n * />\n * </>\n * );\n * }\n * ```\n */\nexport function Lightbox({\n open,\n onClose,\n slides,\n index: controlledIndex = 0,\n onIndexChange,\n thumbnails = false,\n zoom = true,\n fullscreen = true,\n counter = true,\n download = false,\n share = false,\n loop = false,\n keyboard = true,\n swipe = true,\n animation = TRANSITION_DURATION,\n closeOnBackdropClick = true,\n closeOnEsc = true,\n toolbar = { show: true, position: 'top' },\n sx,\n slotProps,\n className,\n ...dialogProps\n}: LightboxProps) {\n const theme = useTheme();\n\n // State\n const [currentIndex, setCurrentIndex] = useState(controlledIndex);\n const [zoomLevel, setZoomLevel] = useState(MIN_ZOOM);\n const [isFullscreen, setIsFullscreen] = useState(false);\n const [isLoading, setIsLoading] = useState(true);\n const [position, setPosition] = useState({ x: 0, y: 0 });\n const [isDragging, setIsDragging] = useState(false);\n\n // Transition state: track previous index for crossfade direction\n const [transitionState, setTransitionState] = useState<'idle' | 'transitioning'>('idle');\n const [prevIndex, setPrevIndex] = useState(controlledIndex);\n const [slideDirection, setSlideDirection] = useState<'left' | 'right' | 'none'>('none');\n\n // Refs\n const containerRef = useRef<HTMLDivElement>(null);\n const dragStart = useRef({ x: 0, y: 0 });\n const touchStart = useRef({ x: 0, y: 0 });\n const thumbnailsRef = useRef<HTMLDivElement>(null);\n\n // Sync with controlled index\n useEffect(() => {\n if (controlledIndex !== currentIndex) {\n navigateToSlide(controlledIndex);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [controlledIndex]);\n\n // Reset state when opening\n useEffect(() => {\n if (open) {\n setZoomLevel(MIN_ZOOM);\n setPosition({ x: 0, y: 0 });\n setIsLoading(true);\n setTransitionState('idle');\n setSlideDirection('none');\n }\n }, [open]);\n\n // Current slide\n const currentSlide = slides[currentIndex] as LightboxSlide | undefined;\n const totalSlides = slides.length;\n const hasNext = loop || currentIndex < totalSlides - 1;\n const hasPrev = loop || currentIndex > 0;\n const isZoomed = zoomLevel > MIN_ZOOM;\n\n // Navigation with crossfade transition\n const navigateToSlide = useCallback(\n (newIndex: number) => {\n const targetIndex = loop\n ? (newIndex + totalSlides) % totalSlides\n : Math.max(0, Math.min(newIndex, totalSlides - 1));\n\n if (targetIndex === currentIndex) return;\n\n // Determine direction\n const direction = targetIndex > currentIndex ? 'left' : 'right';\n\n setPrevIndex(currentIndex);\n setSlideDirection(direction);\n setTransitionState('transitioning');\n setCurrentIndex(targetIndex);\n onIndexChange?.(targetIndex);\n setZoomLevel(MIN_ZOOM);\n setPosition({ x: 0, y: 0 });\n setIsLoading(true);\n\n // End transition after animation\n setTimeout(() => {\n setTransitionState('idle');\n setSlideDirection('none');\n }, animation);\n },\n [loop, totalSlides, currentIndex, onIndexChange, animation]\n );\n\n const next = useCallback(() => {\n if (hasNext) navigateToSlide(currentIndex + 1);\n }, [hasNext, currentIndex, navigateToSlide]);\n\n const prev = useCallback(() => {\n if (hasPrev) navigateToSlide(currentIndex - 1);\n }, [hasPrev, currentIndex, navigateToSlide]);\n\n // Direct navigation (from thumbnails — no directional slide)\n const goTo = useCallback(\n (newIndex: number) => {\n navigateToSlide(newIndex);\n },\n [navigateToSlide]\n );\n\n // Zoom handlers\n const zoomIn = useCallback(() => {\n setZoomLevel((prevZoom) => Math.min(prevZoom + ZOOM_STEP, MAX_ZOOM));\n }, []);\n\n const zoomOut = useCallback(() => {\n setZoomLevel((prevZoom) => {\n const newZoom = Math.max(prevZoom - ZOOM_STEP, MIN_ZOOM);\n if (newZoom === MIN_ZOOM) {\n setPosition({ x: 0, y: 0 });\n }\n return newZoom;\n });\n }, []);\n\n const zoomReset = useCallback(() => {\n setZoomLevel(MIN_ZOOM);\n setPosition({ x: 0, y: 0 });\n }, []);\n\n // Fullscreen\n const toggleFullscreen = useCallback(async () => {\n if (!document.fullscreenElement) {\n await containerRef.current?.requestFullscreen();\n setIsFullscreen(true);\n } else {\n await document.exitFullscreen();\n setIsFullscreen(false);\n }\n }, []);\n\n // Download\n const handleDownload = useCallback(async () => {\n if (!currentSlide?.src) return;\n try {\n const response = await fetch(currentSlide.src);\n const blob = await response.blob();\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = currentSlide.title || `image-${currentIndex + 1}`;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n } catch (error) {\n console.error('Download failed:', error);\n }\n }, [currentSlide, currentIndex]);\n\n // Share\n const handleShare = useCallback(async () => {\n if (!currentSlide?.src) return;\n try {\n if (navigator.share) {\n await navigator.share({\n title: currentSlide.title || 'Image',\n url: currentSlide.src,\n });\n } else {\n await navigator.clipboard.writeText(currentSlide.src);\n }\n } catch (error) {\n console.error('Share failed:', error);\n }\n }, [currentSlide]);\n\n // Keyboard navigation\n useEffect(() => {\n if (!open || !keyboard) return undefined;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n switch (e.key) {\n case 'ArrowLeft':\n prev();\n break;\n case 'ArrowRight':\n next();\n break;\n case 'Escape':\n if (closeOnEsc) onClose();\n break;\n case '+':\n case '=':\n if (zoom) zoomIn();\n break;\n case '-':\n if (zoom) zoomOut();\n break;\n case '0':\n if (zoom) zoomReset();\n break;\n case 'f':\n if (fullscreen) toggleFullscreen();\n break;\n // no default\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [open, keyboard, zoom, fullscreen, closeOnEsc, prev, next, zoomIn, zoomOut, zoomReset, toggleFullscreen, onClose]);\n\n // Mouse drag for panning when zoomed\n const handleMouseDown = useCallback(\n (e: React.MouseEvent) => {\n if (!isZoomed) return;\n e.preventDefault();\n setIsDragging(true);\n dragStart.current = { x: e.clientX - position.x, y: e.clientY - position.y };\n },\n [isZoomed, position]\n );\n\n const handleMouseMove = useCallback(\n (e: React.MouseEvent) => {\n if (!isDragging || !isZoomed) return;\n setPosition({\n x: e.clientX - dragStart.current.x,\n y: e.clientY - dragStart.current.y,\n });\n },\n [isDragging, isZoomed]\n );\n\n const handleMouseUp = useCallback(() => {\n setIsDragging(false);\n }, []);\n\n // Touch swipe for navigation and panning\n const handleTouchStart = useCallback(\n (e: React.TouchEvent) => {\n const touch = e.touches[0];\n if (!touch) return;\n touchStart.current = { x: touch.clientX, y: touch.clientY };\n if (isZoomed) {\n setIsDragging(true);\n dragStart.current = { x: touch.clientX - position.x, y: touch.clientY - position.y };\n }\n },\n [isZoomed, position]\n );\n\n const handleTouchMove = useCallback(\n (e: React.TouchEvent) => {\n const touch = e.touches[0];\n if (!touch) return;\n if (isDragging && isZoomed) {\n setPosition({\n x: touch.clientX - dragStart.current.x,\n y: touch.clientY - dragStart.current.y,\n });\n }\n },\n [isDragging, isZoomed]\n );\n\n const handleTouchEnd = useCallback(\n (e: React.TouchEvent) => {\n if (isDragging) {\n setIsDragging(false);\n return;\n }\n\n if (!swipe || isZoomed) return;\n\n const touch = e.changedTouches[0];\n if (!touch) return;\n const deltaX = touch.clientX - touchStart.current.x;\n const deltaY = touch.clientY - touchStart.current.y;\n\n if (Math.abs(deltaX) > Math.abs(deltaY) && Math.abs(deltaX) > SWIPE_THRESHOLD) {\n if (deltaX > 0) {\n prev();\n } else {\n next();\n }\n }\n },\n [swipe, isZoomed, isDragging, prev, next]\n );\n\n // Image load handler\n const handleImageLoad = useCallback(() => {\n setIsLoading(false);\n }, []);\n\n // Backdrop click\n const handleBackdropClick = useCallback(\n (e: React.MouseEvent) => {\n if (closeOnBackdropClick && e.target === e.currentTarget && !isZoomed) {\n onClose();\n }\n },\n [closeOnBackdropClick, isZoomed, onClose]\n );\n\n // Double click to zoom\n const handleDoubleClick = useCallback(() => {\n if (!zoom) return;\n if (isZoomed) {\n zoomReset();\n } else {\n setZoomLevel(2);\n }\n }, [zoom, isZoomed, zoomReset]);\n\n // Scroll active thumbnail into view\n useEffect(() => {\n if (!thumbnails || !thumbnailsRef.current) return;\n const container = thumbnailsRef.current;\n const activeThumb = container.children[currentIndex] as HTMLElement | undefined;\n if (activeThumb) {\n activeThumb.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'center' });\n }\n }, [currentIndex, thumbnails]);\n\n // Previous slide data (for crossfade)\n const prevSlide = slides[prevIndex] as LightboxSlide | undefined;\n\n // Zoom percentage text\n const zoomPercent = useMemo(() => Math.round(zoomLevel * 100), [zoomLevel]);\n\n if (!currentSlide) return null;\n\n const isVideo = Boolean(currentSlide.video);\n const isPrevVideo = Boolean(prevSlide?.video);\n const transitionMs = animation;\n\n return (\n <StyledDialog\n open={open}\n onClose={onClose}\n maxWidth={false}\n fullScreen\n className={cn(lightboxClasses.root, className)}\n sx={sx}\n {...dialogProps}\n >\n <LightboxContainer ref={containerRef} className={lightboxClasses.container} sx={slotProps?.root}>\n {/* Toolbar - Top */}\n {toolbar?.show && toolbar?.position === 'top' && (\n <GlassToolbar\n className={cn(lightboxClasses.toolbar, lightboxClasses.toolbarTop)}\n placement=\"top\"\n sx={slotProps?.toolbar}\n >\n {counter && (\n <CounterChip className={lightboxClasses.counter} sx={slotProps?.counter}>\n {currentIndex + 1}\n <Typography component=\"span\" sx={{ mx: 0.5, opacity: 0.5 }}>\n /\n </Typography>\n {totalSlides}\n </CounterChip>\n )}\n\n <Box sx={{ flex: 1 }} />\n\n {/* Zoom controls with level indicator */}\n {zoom && (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.25 }}>\n <GlassButton\n onClick={zoomOut}\n disabled={zoomLevel <= MIN_ZOOM}\n aria-label=\"Zoom out\"\n className={lightboxClasses.toolbarButton}\n size=\"small\"\n >\n <ZoomOutIcon fontSize=\"small\" />\n </GlassButton>\n\n {isZoomed && (\n <Typography\n sx={{\n color: 'common.white',\n fontSize: '0.6875rem',\n fontWeight: 600,\n minWidth: 36,\n textAlign: 'center',\n opacity: 0.8,\n }}\n >\n {zoomPercent}%\n </Typography>\n )}\n\n <GlassButton\n onClick={zoomIn}\n disabled={zoomLevel >= MAX_ZOOM}\n aria-label=\"Zoom in\"\n className={lightboxClasses.toolbarButton}\n size=\"small\"\n >\n <ZoomInIcon fontSize=\"small\" />\n </GlassButton>\n </Box>\n )}\n\n {fullscreen && (\n <GlassButton\n onClick={toggleFullscreen}\n aria-label={isFullscreen ? 'Exit fullscreen' : 'Fullscreen'}\n className={lightboxClasses.toolbarButton}\n size=\"small\"\n >\n {isFullscreen ? <FullscreenExitIcon fontSize=\"small\" /> : <FullscreenIcon fontSize=\"small\" />}\n </GlassButton>\n )}\n\n {download && (\n <GlassButton\n onClick={handleDownload}\n aria-label=\"Download\"\n className={lightboxClasses.toolbarButton}\n size=\"small\"\n >\n <DownloadIcon fontSize=\"small\" />\n </GlassButton>\n )}\n\n {share && (\n <GlassButton\n onClick={handleShare}\n aria-label=\"Share\"\n className={lightboxClasses.toolbarButton}\n size=\"small\"\n >\n <ShareIcon fontSize=\"small\" />\n </GlassButton>\n )}\n\n {toolbar?.buttons}\n\n <GlassButton onClick={onClose} aria-label=\"Close\" className={lightboxClasses.toolbarButton} size=\"small\">\n <CloseIcon fontSize=\"small\" />\n </GlassButton>\n </GlassToolbar>\n )}\n\n {/* Main content area — layered slides for crossfade */}\n <SlideContainer\n className={cn(lightboxClasses.slide, lightboxClasses.slideActive, {\n [lightboxClasses.zoomed]: isZoomed,\n })}\n onClick={handleBackdropClick}\n onMouseDown={handleMouseDown}\n onMouseMove={handleMouseMove}\n onMouseUp={handleMouseUp}\n onMouseLeave={handleMouseUp}\n onTouchStart={handleTouchStart}\n onTouchMove={handleTouchMove}\n onTouchEnd={handleTouchEnd}\n onDoubleClick={handleDoubleClick}\n sx={{\n ...slotProps?.imageContainer,\n cursor: isZoomed ? (isDragging ? 'grabbing' : 'grab') : 'default',\n }}\n >\n {/* === Outgoing (previous) slide — fades out with directional shift === */}\n {transitionState === 'transitioning' && prevSlide && prevIndex !== currentIndex && (\n <SlideLayer\n sx={{\n opacity: 0,\n transform:\n slideDirection === 'left'\n ? 'translateX(-8%) scale(0.95)'\n : slideDirection === 'right'\n ? 'translateX(8%) scale(0.95)'\n : 'scale(0.95)',\n transition: `opacity ${transitionMs}ms cubic-bezier(0.4, 0, 0.2, 1), transform ${transitionMs}ms cubic-bezier(0.4, 0, 0.2, 1)`,\n zIndex: 1,\n }}\n >\n {isPrevVideo && prevSlide.video ? (\n <StyledVideo poster={prevSlide.video.poster}>\n {prevSlide.video.sources.map((source, i) => (\n <source key={i} src={source.src} type={source.type} />\n ))}\n </StyledVideo>\n ) : (\n <StyledImage src={prevSlide.src} alt=\"\" draggable={false} />\n )}\n </SlideLayer>\n )}\n\n {/* === Current (incoming) slide — fades in with directional entrance === */}\n <SlideLayer\n sx={{\n opacity: transitionState === 'transitioning' ? 0 : 1,\n transform:\n transitionState === 'transitioning'\n ? slideDirection === 'left'\n ? 'translateX(8%) scale(0.95)'\n : slideDirection === 'right'\n ? 'translateX(-8%) scale(0.95)'\n : 'scale(0.95)'\n : 'translateX(0) scale(1)',\n transition:\n transitionState === 'idle'\n ? `opacity ${transitionMs}ms cubic-bezier(0.4, 0, 0.2, 1), transform ${transitionMs}ms cubic-bezier(0.4, 0, 0.2, 1)`\n : 'none',\n zIndex: 2,\n // Force repaint trick: on next tick the idle state kicks in with transition\n animation:\n transitionState === 'transitioning'\n ? `lightboxSlideIn ${transitionMs}ms cubic-bezier(0.16, 1, 0.3, 1) forwards`\n : undefined,\n '@keyframes lightboxSlideIn': {\n from: {\n opacity: 0,\n transform:\n slideDirection === 'left'\n ? 'translateX(5%) scale(0.97)'\n : slideDirection === 'right'\n ? 'translateX(-5%) scale(0.97)'\n : 'scale(0.97)',\n },\n to: {\n opacity: 1,\n transform: 'translateX(0) scale(1)',\n },\n },\n }}\n >\n {/* Loading indicator */}\n {isLoading && !isVideo && (\n <LoadingOverlay className={lightboxClasses.loading}>\n <CircularProgress\n size={40}\n thickness={2.5}\n sx={{\n color: alpha(theme.palette.primary.main, 0.8),\n }}\n />\n </LoadingOverlay>\n )}\n\n {/* Image/Video content */}\n {isVideo && currentSlide.video ? (\n <VideoWrapper>\n <StyledVideo\n className={lightboxClasses.video}\n controls\n autoPlay={currentSlide.video.autoPlay}\n loop={currentSlide.video.loop}\n muted={currentSlide.video.muted}\n poster={currentSlide.video.poster}\n onLoadedData={handleImageLoad}\n style={{\n transform: `scale(${zoomLevel}) translate(${position.x / zoomLevel}px, ${position.y / zoomLevel}px)`,\n transition: isDragging ? 'none' : `transform ${animation}ms ease`,\n }}\n />\n </VideoWrapper>\n ) : (\n <StyledImage\n className={lightboxClasses.image}\n src={currentSlide.src}\n alt={currentSlide.alt || `Slide ${currentIndex + 1}`}\n onLoad={handleImageLoad}\n draggable={false}\n style={{\n transform: `scale(${zoomLevel}) translate(${position.x / zoomLevel}px, ${position.y / zoomLevel}px)`,\n transition: isDragging ? 'none' : `transform ${animation}ms ease`,\n opacity: isLoading ? 0 : 1,\n }}\n />\n )}\n </SlideLayer>\n\n {/* Caption */}\n {(currentSlide.title || currentSlide.description) && !isZoomed && (\n <GlassCaption className={lightboxClasses.caption}>\n {currentSlide.title && (\n <Typography variant=\"subtitle1\" component=\"div\" sx={{ fontWeight: 600, lineHeight: 1.3 }}>\n {currentSlide.title}\n </Typography>\n )}\n {currentSlide.description && (\n <Typography variant=\"body2\" sx={{ opacity: 0.7, mt: 0.25 }}>\n {currentSlide.description}\n </Typography>\n )}\n </GlassCaption>\n )}\n </SlideContainer>\n\n {/* Navigation arrows */}\n {hasPrev && !isZoomed && (\n <NavArrow\n className={cn(lightboxClasses.navButton, lightboxClasses.navPrev)}\n side=\"left\"\n onClick={prev}\n aria-label=\"Previous\"\n sx={slotProps?.navButton}\n >\n <ChevronLeftIcon sx={{ fontSize: 28 }} />\n </NavArrow>\n )}\n\n {hasNext && !isZoomed && (\n <NavArrow\n className={cn(lightboxClasses.navButton, lightboxClasses.navNext)}\n side=\"right\"\n onClick={next}\n aria-label=\"Next\"\n sx={slotProps?.navButton}\n >\n <ChevronRightIcon sx={{ fontSize: 28 }} />\n </NavArrow>\n )}\n\n {/* Thumbnails */}\n {thumbnails && !isZoomed && (\n <ThumbnailStrip ref={thumbnailsRef} className={lightboxClasses.thumbnails} sx={slotProps?.thumbnails}>\n {slides.map((slide, i) => {\n const isThumbVideo = Boolean(slide.video);\n\n return (\n <ThumbItem\n key={i}\n className={cn(lightboxClasses.thumbnail, {\n [lightboxClasses.thumbnailActive]: i === currentIndex,\n })}\n active={i === currentIndex}\n onClick={() => goTo(i)}\n >\n <img\n src={slide.thumbnail || slide.video?.poster || slide.src}\n alt={slide.alt || `Thumbnail ${i + 1}`}\n draggable={false}\n />\n {/* Video indicator on thumbnail */}\n {isThumbVideo && (\n <Box\n sx={{\n position: 'absolute',\n inset: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n bgcolor: alpha(theme.palette.common.black, 0.35),\n }}\n >\n <PlayArrowIcon sx={{ fontSize: 18, color: 'common.white', opacity: 0.9 }} />\n </Box>\n )}\n </ThumbItem>\n );\n })}\n </ThumbnailStrip>\n )}\n\n {/* Toolbar - Bottom */}\n {toolbar?.show && toolbar?.position === 'bottom' && (\n <GlassToolbar\n className={cn(lightboxClasses.toolbar, lightboxClasses.toolbarBottom)}\n placement=\"bottom\"\n sx={slotProps?.toolbar}\n >\n {counter && (\n <CounterChip className={lightboxClasses.counter} sx={slotProps?.counter}>\n {currentIndex + 1}\n <Typography component=\"span\" sx={{ mx: 0.5, opacity: 0.5 }}>\n /\n </Typography>\n {totalSlides}\n </CounterChip>\n )}\n <Box sx={{ flex: 1 }} />\n <GlassButton onClick={onClose} aria-label=\"Close\" size=\"small\">\n <CloseIcon fontSize=\"small\" />\n </GlassButton>\n </GlassToolbar>\n )}\n </LightboxContainer>\n </StyledDialog>\n );\n}\n\n// =============================================================================\n// STYLED COMPONENTS\n// =============================================================================\n\nconst StyledDialog = styled(Dialog)(({ theme }) => ({\n '& .MuiDialog-paper': {\n backgroundColor: 'transparent',\n boxShadow: 'none',\n margin: 0,\n maxWidth: '100%',\n maxHeight: '100%',\n borderRadius: 0,\n },\n '& .MuiBackdrop-root': {\n backgroundColor: alpha(theme.palette.common.black, 0.92),\n backdropFilter: 'blur(8px)',\n },\n}));\n\nconst LightboxContainer = styled(Box)({\n display: 'flex',\n flexDirection: 'column',\n width: '100vw',\n height: '100vh',\n position: 'relative',\n overflow: 'hidden',\n userSelect: 'none',\n});\n\n// --- Glassmorphism Toolbar ---\n\nconst GlassToolbar = styled(Box)<{ placement: 'top' | 'bottom' }>(({ theme, placement }) => ({\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(0.5),\n padding: theme.spacing(1, 1.5),\n position: 'absolute',\n left: 0,\n right: 0,\n zIndex: 10,\n ...(placement === 'top' && { top: 0 }),\n ...(placement === 'bottom' && { bottom: 0 }),\n background: `linear-gradient(${placement === 'top' ? 'to bottom' : 'to top'}, ${alpha(theme.palette.common.black, 0.55)} 0%, ${alpha(theme.palette.common.black, 0.2)} 60%, transparent 100%)`,\n transition: 'opacity 0.3s ease',\n}));\n\nconst GlassButton = styled(IconButton)(({ theme }) => ({\n color: alpha(theme.palette.common.white, 0.85),\n borderRadius: Number(theme.shape.borderRadius) * 1.5,\n padding: 6,\n transition: theme.transitions.create(['background-color', 'color', 'transform'], {\n duration: 200,\n }),\n '&:hover': {\n backgroundColor: alpha(theme.palette.common.white, 0.12),\n color: theme.palette.common.white,\n transform: 'scale(1.05)',\n },\n '&:active': {\n transform: 'scale(0.95)',\n },\n '&.Mui-disabled': {\n color: alpha(theme.palette.common.white, 0.2),\n },\n}));\n\nconst CounterChip = styled(Typography)(({ theme }) => ({\n color: alpha(theme.palette.common.white, 0.9),\n fontSize: '0.75rem',\n fontWeight: 600,\n fontVariantNumeric: 'tabular-nums',\n padding: theme.spacing(0.375, 1),\n borderRadius: Number(theme.shape.borderRadius) * 2,\n backgroundColor: alpha(theme.palette.common.white, 0.1),\n backdropFilter: 'blur(12px)',\n border: `1px solid ${alpha(theme.palette.common.white, 0.08)}`,\n display: 'flex',\n alignItems: 'center',\n letterSpacing: '0.02em',\n}));\n\n// --- Slide Area ---\n\nconst SlideContainer = styled(Box)({\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n position: 'relative',\n overflow: 'hidden',\n});\n\n/** Absolute layer for crossfade transitions */\nconst SlideLayer = styled(Box)({\n position: 'absolute',\n inset: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n willChange: 'opacity, transform',\n});\n\nconst LoadingOverlay = styled(Box)({\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n zIndex: 5,\n});\n\nconst StyledImage = styled('img')({\n maxWidth: '100%',\n maxHeight: '100%',\n objectFit: 'contain',\n willChange: 'transform, opacity',\n borderRadius: 2,\n});\n\nconst VideoWrapper = styled(Box)({\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n maxWidth: '100%',\n maxHeight: '100%',\n});\n\nconst StyledVideo = styled('video')(({ theme }) => ({\n maxWidth: '100%',\n maxHeight: '100%',\n objectFit: 'contain',\n willChange: 'transform',\n borderRadius: 4,\n // Custom video controls styling\n '&::-webkit-media-controls-panel': {\n backgroundColor: alpha(theme.palette.common.black, 0.6),\n backdropFilter: 'blur(8px)',\n },\n '&::-webkit-media-controls-current-time-display, &::-webkit-media-controls-time-remaining-display': {\n color: theme.palette.common.white,\n fontSize: 12,\n },\n}));\n\n// --- Caption ---\n\nconst GlassCaption = styled(Box)(({ theme }) => ({\n position: 'absolute',\n bottom: theme.spacing(2.5),\n left: '50%',\n transform: 'translateX(-50%)',\n textAlign: 'center',\n color: theme.palette.common.white,\n padding: theme.spacing(1, 2.5),\n borderRadius: Number(theme.shape.borderRadius) * 2,\n backgroundColor: alpha(theme.palette.common.black, 0.45),\n backdropFilter: 'blur(16px)',\n border: `1px solid ${alpha(theme.palette.common.white, 0.08)}`,\n maxWidth: '70%',\n zIndex: 5,\n animation: 'lightboxCaptionIn 0.3s ease-out',\n '@keyframes lightboxCaptionIn': {\n from: { opacity: 0, transform: 'translateX(-50%) translateY(8px)' },\n to: { opacity: 1, transform: 'translateX(-50%) translateY(0)' },\n },\n}));\n\n// --- Navigation Arrows ---\n\nconst NavArrow = styled(IconButton)<{ side: 'left' | 'right' }>(({ theme, side }) => ({\n position: 'absolute',\n top: '50%',\n transform: 'translateY(-50%)',\n color: alpha(theme.palette.common.white, 0.85),\n zIndex: 10,\n width: 44,\n height: 44,\n borderRadius: '50%',\n backgroundColor: alpha(theme.palette.common.white, 0.08),\n backdropFilter: 'blur(12px)',\n border: `1px solid ${alpha(theme.palette.common.white, 0.06)}`,\n ...(side === 'left' && { left: theme.spacing(2) }),\n ...(side === 'right' && { right: theme.spacing(2) }),\n transition: theme.transitions.create(['background-color', 'color', 'transform', 'box-shadow'], {\n duration: 200,\n }),\n '&:hover': {\n backgroundColor: alpha(theme.palette.common.white, 0.16),\n color: theme.palette.common.white,\n transform: 'translateY(-50%) scale(1.08)',\n boxShadow: `0 0 20px ${alpha(theme.palette.primary.main, 0.15)}`,\n },\n '&:active': {\n transform: 'translateY(-50%) scale(0.95)',\n },\n}));\n\n// --- Thumbnails ---\n\nconst ThumbnailStrip = styled(Box)(({ theme }) => ({\n display: 'flex',\n gap: theme.spacing(0.75),\n padding: theme.spacing(1, 2),\n justifyContent: 'center',\n overflowX: 'auto',\n backgroundColor: alpha(theme.palette.common.black, 0.5),\n backdropFilter: 'blur(12px)',\n borderTop: `1px solid ${alpha(theme.palette.common.white, 0.06)}`,\n // Hide scrollbar\n scrollbarWidth: 'none',\n '&::-webkit-scrollbar': {\n display: 'none',\n },\n}));\n\nconst ThumbItem = styled(Box)<{ active: boolean }>(({ theme, active }) => ({\n flexShrink: 0,\n width: 56,\n height: 56,\n borderRadius: Number(theme.shape.borderRadius) * 1.5,\n overflow: 'hidden',\n cursor: 'pointer',\n position: 'relative',\n border: `2px solid ${active ? theme.palette.primary.main : alpha(theme.palette.common.white, 0.08)}`,\n opacity: active ? 1 : 0.55,\n transform: active ? 'scale(1)' : 'scale(0.92)',\n transition: theme.transitions.create(['border-color', 'opacity', 'transform', 'box-shadow'], {\n duration: 200,\n easing: 'cubic-bezier(0.4, 0, 0.2, 1)',\n }),\n ...(active && {\n boxShadow: `0 0 12px ${alpha(theme.palette.primary.main, 0.3)}`,\n }),\n '& img': {\n width: '100%',\n height: '100%',\n objectFit: 'cover',\n },\n '&:hover': {\n opacity: 1,\n transform: 'scale(1)',\n borderColor: active ? theme.palette.primary.main : alpha(theme.palette.common.white, 0.25),\n },\n}));\n","/**\n * useLightbox Hook\n *\n * State management hook for the Lightbox component.\n * Handles open/close, navigation, and zoom state.\n *\n * @module @omnitron-dev/prism/components/lightbox\n */\n\n'use client';\n\nimport { useState, useCallback } from 'react';\n\nimport type { UseLightboxReturn } from './types.js';\n\n// =============================================================================\n// CONSTANTS\n// =============================================================================\n\nconst MIN_ZOOM = 1;\nconst MAX_ZOOM = 4;\nconst ZOOM_STEP = 0.5;\n\n// =============================================================================\n// USE LIGHTBOX HOOK\n// =============================================================================\n\n/**\n * Options for useLightbox hook.\n */\nexport interface UseLightboxOptions {\n /** Initial open state */\n defaultOpen?: boolean;\n /** Initial slide index */\n defaultIndex?: number;\n /** Total number of slides (for navigation bounds) */\n totalSlides?: number;\n /** Enable infinite loop */\n loop?: boolean;\n}\n\n/**\n * Hook for managing lightbox state.\n *\n * @example\n * ```tsx\n * const lightbox = useLightbox({ totalSlides: images.length });\n *\n * return (\n * <>\n * {images.map((img, i) => (\n * <img key={i} src={img.src} onClick={() => lightbox.onOpen(i)} />\n * ))}\n * <Lightbox slides={images} {...lightbox.getLightboxProps()} />\n * </>\n * );\n * ```\n */\nexport function useLightbox(options: UseLightboxOptions = {}): UseLightboxReturn {\n const { defaultOpen = false, defaultIndex = 0, totalSlides = 0, loop = false } = options;\n\n const [open, setOpen] = useState(defaultOpen);\n const [index, setIndex] = useState(defaultIndex);\n const [zoomLevel, setZoomLevel] = useState(MIN_ZOOM);\n\n // Navigation\n const goTo = useCallback(\n (newIndex: number) => {\n if (totalSlides === 0) {\n setIndex(newIndex);\n return;\n }\n\n if (loop) {\n setIndex((newIndex + totalSlides) % totalSlides);\n } else {\n setIndex(Math.max(0, Math.min(newIndex, totalSlides - 1)));\n }\n // Reset zoom when changing slides\n setZoomLevel(MIN_ZOOM);\n },\n [totalSlides, loop]\n );\n\n const next = useCallback(() => {\n goTo(index + 1);\n }, [index, goTo]);\n\n const prev = useCallback(() => {\n goTo(index - 1);\n }, [index, goTo]);\n\n // Open/Close\n const onOpen = useCallback((slideIndex = 0) => {\n setIndex(slideIndex);\n setZoomLevel(MIN_ZOOM);\n setOpen(true);\n }, []);\n\n const onClose = useCallback(() => {\n setOpen(false);\n setZoomLevel(MIN_ZOOM);\n }, []);\n\n // Zoom\n const zoomIn = useCallback(() => {\n setZoomLevel((prevZoom) => Math.min(prevZoom + ZOOM_STEP, MAX_ZOOM));\n }, []);\n\n const zoomOut = useCallback(() => {\n setZoomLevel((prevZoom) => Math.max(prevZoom - ZOOM_STEP, MIN_ZOOM));\n }, []);\n\n const zoomReset = useCallback(() => {\n setZoomLevel(MIN_ZOOM);\n }, []);\n\n // Index change handler for Lightbox\n const onIndexChange = useCallback(\n (newIndex: number) => {\n goTo(newIndex);\n },\n [goTo]\n );\n\n // Props getter\n const getLightboxProps = useCallback(\n () => ({\n open,\n onClose,\n index,\n onIndexChange,\n }),\n [open, onClose, index, onIndexChange]\n );\n\n return {\n open,\n index,\n onOpen,\n onClose,\n goTo,\n next,\n prev,\n zoomLevel,\n zoomIn,\n zoomOut,\n zoomReset,\n getLightboxProps,\n };\n}\n","/**\n * Carousel CSS Classes\n *\n * @module @omnitron-dev/prism/components/carousel\n */\n\nimport { createClasses } from '../../utils/create-classes.js';\n\n/**\n * CSS class names for Carousel component.\n */\nexport const carouselClasses = {\n root: createClasses('carousel__root'),\n container: createClasses('carousel__container'),\n track: createClasses('carousel__track'),\n slide: createClasses('carousel__slide'),\n slideActive: createClasses('carousel__slide--active'),\n slidePrev: createClasses('carousel__slide--prev'),\n slideNext: createClasses('carousel__slide--next'),\n arrow: createClasses('carousel__arrow'),\n arrowPrev: createClasses('carousel__arrow--prev'),\n arrowNext: createClasses('carousel__arrow--next'),\n arrowInside: createClasses('carousel__arrow--inside'),\n arrowOutside: createClasses('carousel__arrow--outside'),\n arrowDisabled: createClasses('carousel__arrow--disabled'),\n dots: createClasses('carousel__dots'),\n dotsTop: createClasses('carousel__dots--top'),\n dotsBottom: createClasses('carousel__dots--bottom'),\n dotsLeft: createClasses('carousel__dots--left'),\n dotsRight: createClasses('carousel__dots--right'),\n dot: createClasses('carousel__dot'),\n dotActive: createClasses('carousel__dot--active'),\n horizontal: createClasses('carousel__horizontal'),\n vertical: createClasses('carousel__vertical'),\n dragging: createClasses('carousel__dragging'),\n fade: createClasses('carousel__fade'),\n};\n","'use client';\n\n/**\n * Carousel Component\n *\n * Responsive slider with autoplay, navigation arrows, dots,\n * and touch/drag support.\n *\n * @module @omnitron-dev/prism/components/carousel\n */\n\nimport type { CarouselProps } from './types.js';\n\nimport { useState, useEffect, useCallback, useRef, Children, useMemo } from 'react';\n\nimport Box from '@mui/material/Box';\nimport IconButton from '@mui/material/IconButton';\nimport { styled, alpha } from '@mui/material/styles';\n\n// MUI Icons\nimport ChevronLeftIcon from '@mui/icons-material/ChevronLeft';\nimport ChevronRightIcon from '@mui/icons-material/ChevronRight';\nimport KeyboardArrowUpIcon from '@mui/icons-material/KeyboardArrowUp';\nimport KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\n\nimport { cn } from '../../utils/cn.js';\nimport { carouselClasses } from './classes.js';\n\n// =============================================================================\n// CAROUSEL COMPONENT\n// =============================================================================\n\n/**\n * Responsive carousel/slider component.\n *\n * @example\n * ```tsx\n * import { Carousel } from '@omnitron-dev/prism/components';\n *\n * function Gallery() {\n * return (\n * <Carousel\n * slidesToShow={3}\n * spacing={16}\n * autoplay\n * arrows\n * dots\n * >\n * {images.map((img, i) => (\n * <img key={i} src={img.src} alt={img.alt} />\n * ))}\n * </Carousel>\n * );\n * }\n * ```\n */\nexport function Carousel({\n children,\n slidesToShow = 1,\n slidesToScroll = 1,\n spacing = 0,\n autoplay = false,\n autoplayInterval = 4000,\n pauseOnHover = true,\n loop = false,\n draggable = true,\n speed = 400,\n direction = 'horizontal',\n arrows = true,\n dots = false,\n dotsPosition = 'bottom',\n keyboard = true,\n initialSlide = 0,\n onSlideChange,\n centerMode = false,\n fade = false,\n responsive,\n sx,\n slotProps,\n className,\n ...other\n}: CarouselProps) {\n // State\n const [currentIndex, setCurrentIndex] = useState(initialSlide);\n const [isPlaying, setIsPlaying] = useState(autoplay);\n const [isDragging, setIsDragging] = useState(false);\n const [dragOffset, setDragOffset] = useState(0);\n const [containerWidth, setContainerWidth] = useState(0);\n\n // Refs\n const containerRef = useRef<HTMLDivElement>(null);\n const trackRef = useRef<HTMLDivElement>(null);\n const autoplayRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const dragStartRef = useRef({ x: 0, y: 0 });\n\n // Responsive settings\n const [activeSettings, setActiveSettings] = useState({\n slidesToShow,\n slidesToScroll,\n spacing,\n arrows,\n dots,\n });\n\n // Get slides from children\n const slides = Children.toArray(children);\n const totalSlides = slides.length;\n\n // Calculate settings based on responsive breakpoints\n useEffect(() => {\n if (!responsive?.length) {\n setActiveSettings({ slidesToShow, slidesToScroll, spacing, arrows, dots });\n return undefined;\n }\n\n const handleResize = () => {\n const width = window.innerWidth;\n let newSettings = { slidesToShow, slidesToScroll, spacing, arrows, dots };\n\n // Find matching breakpoint (smallest matching)\n const sortedBreakpoints = [...responsive].sort((a, b) => a.breakpoint - b.breakpoint);\n for (const bp of sortedBreakpoints) {\n if (width <= bp.breakpoint) {\n newSettings = { ...newSettings, ...bp.settings };\n break;\n }\n }\n\n setActiveSettings(newSettings);\n };\n\n handleResize();\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, [responsive, slidesToShow, slidesToScroll, spacing, arrows, dots]);\n\n // Calculate dimensions\n const maxIndex = Math.max(0, totalSlides - activeSettings.slidesToShow);\n const canPrev = loop || currentIndex > 0;\n const canNext = loop || currentIndex < maxIndex;\n const isHorizontal = direction === 'horizontal';\n\n // Calculate slide width percentage\n const slideWidth = useMemo(() => {\n if (activeSettings.slidesToShow <= 0) return 100;\n return 100 / activeSettings.slidesToShow;\n }, [activeSettings.slidesToShow]);\n\n // Track container width for drag calculations\n useEffect(() => {\n if (!containerRef.current) return undefined;\n\n const observer = new ResizeObserver((entries) => {\n for (const entry of entries) {\n setContainerWidth(entry.contentRect.width);\n }\n });\n\n observer.observe(containerRef.current);\n return () => observer.disconnect();\n }, []);\n\n // Navigation\n const goTo = useCallback(\n (index: number) => {\n let newIndex = index;\n\n if (loop) {\n if (index < 0) {\n newIndex = maxIndex;\n } else if (index > maxIndex) {\n newIndex = 0;\n }\n } else {\n newIndex = Math.max(0, Math.min(index, maxIndex));\n }\n\n setCurrentIndex(newIndex);\n onSlideChange?.(newIndex);\n },\n [loop, maxIndex, onSlideChange]\n );\n\n const next = useCallback(() => {\n if (canNext) {\n goTo(currentIndex + activeSettings.slidesToScroll);\n }\n }, [canNext, currentIndex, activeSettings.slidesToScroll, goTo]);\n\n const prev = useCallback(() => {\n if (canPrev) {\n goTo(currentIndex - activeSettings.slidesToScroll);\n }\n }, [canPrev, currentIndex, activeSettings.slidesToScroll, goTo]);\n\n // Autoplay\n useEffect(() => {\n if (isPlaying && totalSlides > activeSettings.slidesToShow) {\n autoplayRef.current = setInterval(next, autoplayInterval);\n return () => {\n if (autoplayRef.current) clearInterval(autoplayRef.current);\n };\n }\n return undefined;\n }, [isPlaying, totalSlides, activeSettings.slidesToShow, autoplayInterval, next]);\n\n // Pause on hover\n const handleMouseEnter = useCallback(() => {\n if (pauseOnHover && autoplay) {\n setIsPlaying(false);\n }\n }, [pauseOnHover, autoplay]);\n\n const handleMouseLeave = useCallback(() => {\n if (pauseOnHover && autoplay) {\n setIsPlaying(true);\n }\n }, [pauseOnHover, autoplay]);\n\n // Keyboard navigation\n useEffect(() => {\n if (!keyboard) return undefined;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (!containerRef.current?.contains(document.activeElement)) return;\n\n if (isHorizontal) {\n if (e.key === 'ArrowLeft') prev();\n if (e.key === 'ArrowRight') next();\n } else {\n if (e.key === 'ArrowUp') prev();\n if (e.key === 'ArrowDown') next();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [keyboard, isHorizontal, prev, next]);\n\n // Drag/Touch handlers\n const handleDragStart = useCallback(\n (clientX: number, clientY: number) => {\n if (!draggable) return;\n setIsDragging(true);\n dragStartRef.current = { x: clientX, y: clientY };\n setDragOffset(0);\n },\n [draggable]\n );\n\n const handleDragMove = useCallback(\n (clientX: number, clientY: number) => {\n if (!isDragging) return;\n const delta = isHorizontal ? clientX - dragStartRef.current.x : clientY - dragStartRef.current.y;\n setDragOffset(delta);\n },\n [isDragging, isHorizontal]\n );\n\n const handleDragEnd = useCallback(() => {\n if (!isDragging) return;\n setIsDragging(false);\n\n const threshold = containerWidth * 0.15; // 15% threshold\n if (Math.abs(dragOffset) > threshold) {\n if (dragOffset > 0) {\n prev();\n } else {\n next();\n }\n }\n\n setDragOffset(0);\n }, [isDragging, containerWidth, dragOffset, prev, next]);\n\n // Mouse handlers\n const handleMouseDown = useCallback(\n (e: React.MouseEvent) => {\n handleDragStart(e.clientX, e.clientY);\n },\n [handleDragStart]\n );\n\n const handleMouseMove = useCallback(\n (e: React.MouseEvent) => {\n handleDragMove(e.clientX, e.clientY);\n },\n [handleDragMove]\n );\n\n const handleMouseUp = useCallback(() => {\n handleDragEnd();\n }, [handleDragEnd]);\n\n // Touch handlers\n const handleTouchStart = useCallback(\n (e: React.TouchEvent) => {\n const touch = e.touches[0];\n if (touch) handleDragStart(touch.clientX, touch.clientY);\n },\n [handleDragStart]\n );\n\n const handleTouchMove = useCallback(\n (e: React.TouchEvent) => {\n const touch = e.touches[0];\n if (touch) handleDragMove(touch.clientX, touch.clientY);\n },\n [handleDragMove]\n );\n\n const handleTouchEnd = useCallback(() => {\n handleDragEnd();\n }, [handleDragEnd]);\n\n // Calculate track transform\n const trackTransform = useMemo(() => {\n const baseOffset = currentIndex * slideWidth;\n const dragPercent = containerWidth > 0 ? (dragOffset / containerWidth) * 100 : 0;\n\n if (fade) return 'none';\n\n if (isHorizontal) {\n return `translateX(calc(-${baseOffset}% + ${dragPercent}%))`;\n }\n return `translateY(calc(-${baseOffset}% + ${dragPercent}%))`;\n }, [currentIndex, slideWidth, dragOffset, containerWidth, fade, isHorizontal]);\n\n // Dots count (number of pages)\n const dotsCount = Math.ceil(totalSlides / activeSettings.slidesToScroll);\n\n return (\n <CarouselRoot\n ref={containerRef}\n className={cn(\n carouselClasses.root,\n isHorizontal ? carouselClasses.horizontal : carouselClasses.vertical,\n isDragging && carouselClasses.dragging,\n fade && carouselClasses.fade,\n className\n )}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n tabIndex={0}\n sx={sx}\n {...other}\n >\n <CarouselContainer className={carouselClasses.container} sx={slotProps?.container}>\n <CarouselTrack\n ref={trackRef}\n className={carouselClasses.track}\n onMouseDown={handleMouseDown}\n onMouseMove={handleMouseMove}\n onMouseUp={handleMouseUp}\n onMouseLeave={handleMouseUp}\n onTouchStart={handleTouchStart}\n onTouchMove={handleTouchMove}\n onTouchEnd={handleTouchEnd}\n sx={{\n ...slotProps?.track,\n transform: trackTransform,\n transition: isDragging ? 'none' : `transform ${speed}ms ease`,\n flexDirection: isHorizontal ? 'row' : 'column',\n cursor: draggable ? (isDragging ? 'grabbing' : 'grab') : 'default',\n }}\n >\n {slides.map((slide, index) => (\n <CarouselSlide\n key={index}\n className={cn(carouselClasses.slide, {\n [carouselClasses.slideActive]: index === currentIndex,\n })}\n sx={{\n ...slotProps?.slide,\n width: isHorizontal ? `${slideWidth}%` : '100%',\n height: !isHorizontal ? `${slideWidth}%` : 'auto',\n padding: isHorizontal ? `0 ${activeSettings.spacing / 2}px` : `${activeSettings.spacing / 2}px 0`,\n opacity: fade ? (index === currentIndex ? 1 : 0) : 1,\n transition: fade ? `opacity ${speed}ms ease` : 'none',\n position: fade ? (index === currentIndex ? 'relative' : 'absolute') : 'relative',\n ...(fade && { top: 0, left: 0 }),\n }}\n >\n {slide}\n </CarouselSlide>\n ))}\n </CarouselTrack>\n </CarouselContainer>\n\n {/* Navigation Arrows */}\n {activeSettings.arrows && totalSlides > activeSettings.slidesToShow && (\n <>\n <ArrowButton\n className={cn(carouselClasses.arrow, carouselClasses.arrowPrev, {\n [carouselClasses.arrowDisabled]: !canPrev,\n })}\n onClick={prev}\n disabled={!canPrev}\n aria-label=\"Previous slide\"\n isHorizontal={isHorizontal}\n direction=\"prev\"\n sx={slotProps?.arrow}\n >\n {isHorizontal ? <ChevronLeftIcon /> : <KeyboardArrowUpIcon />}\n </ArrowButton>\n <ArrowButton\n className={cn(carouselClasses.arrow, carouselClasses.arrowNext, {\n [carouselClasses.arrowDisabled]: !canNext,\n })}\n onClick={next}\n disabled={!canNext}\n aria-label=\"Next slide\"\n isHorizontal={isHorizontal}\n direction=\"next\"\n sx={slotProps?.arrow}\n >\n {isHorizontal ? <ChevronRightIcon /> : <KeyboardArrowDownIcon />}\n </ArrowButton>\n </>\n )}\n\n {/* Dots Indicator */}\n {activeSettings.dots && totalSlides > activeSettings.slidesToShow && (\n <DotsContainer\n className={cn(carouselClasses.dots, {\n [carouselClasses.dotsTop]: dotsPosition === 'top',\n [carouselClasses.dotsBottom]: dotsPosition === 'bottom',\n [carouselClasses.dotsLeft]: dotsPosition === 'left',\n [carouselClasses.dotsRight]: dotsPosition === 'right',\n })}\n dotsPosition={dotsPosition}\n sx={slotProps?.dots}\n >\n {Array.from({ length: dotsCount }, (_, i) => (\n <Dot\n key={i}\n className={cn(carouselClasses.dot, {\n [carouselClasses.dotActive]: Math.floor(currentIndex / activeSettings.slidesToScroll) === i,\n })}\n active={Math.floor(currentIndex / activeSettings.slidesToScroll) === i}\n onClick={() => goTo(i * activeSettings.slidesToScroll)}\n aria-label={`Go to slide ${i + 1}`}\n sx={slotProps?.dot}\n />\n ))}\n </DotsContainer>\n )}\n </CarouselRoot>\n );\n}\n\n// =============================================================================\n// STYLED COMPONENTS\n// =============================================================================\n\nconst CarouselRoot = styled(Box)({\n position: 'relative',\n width: '100%',\n overflow: 'hidden',\n outline: 'none',\n});\n\nconst CarouselContainer = styled(Box)({\n position: 'relative',\n width: '100%',\n overflow: 'hidden',\n});\n\nconst CarouselTrack = styled(Box)({\n display: 'flex',\n width: '100%',\n willChange: 'transform',\n userSelect: 'none',\n});\n\nconst CarouselSlide = styled(Box)({\n flexShrink: 0,\n '& > *': {\n width: '100%',\n height: '100%',\n },\n});\n\nconst ArrowButton = styled(IconButton)<{ isHorizontal: boolean; direction: 'prev' | 'next' }>(\n ({ theme, isHorizontal, direction }) => ({\n position: 'absolute',\n zIndex: 10,\n backgroundColor: alpha(theme.palette.background.paper, 0.9),\n boxShadow: theme.shadows[2],\n '&:hover': {\n backgroundColor: theme.palette.background.paper,\n },\n '&.Mui-disabled': {\n backgroundColor: alpha(theme.palette.background.paper, 0.5),\n },\n ...(isHorizontal\n ? {\n top: '50%',\n transform: 'translateY(-50%)',\n ...(direction === 'prev' ? { left: 8 } : { right: 8 }),\n }\n : {\n left: '50%',\n transform: 'translateX(-50%)',\n ...(direction === 'prev' ? { top: 8 } : { bottom: 8 }),\n }),\n })\n);\n\nconst DotsContainer = styled(Box)<{ dotsPosition: 'bottom' | 'top' | 'left' | 'right' }>(({ theme, dotsPosition }) => ({\n display: 'flex',\n gap: theme.spacing(1),\n position: 'absolute',\n zIndex: 10,\n ...(dotsPosition === 'bottom' && {\n bottom: theme.spacing(2),\n left: '50%',\n transform: 'translateX(-50%)',\n flexDirection: 'row',\n }),\n ...(dotsPosition === 'top' && {\n top: theme.spacing(2),\n left: '50%',\n transform: 'translateX(-50%)',\n flexDirection: 'row',\n }),\n ...(dotsPosition === 'left' && {\n left: theme.spacing(2),\n top: '50%',\n transform: 'translateY(-50%)',\n flexDirection: 'column',\n }),\n ...(dotsPosition === 'right' && {\n right: theme.spacing(2),\n top: '50%',\n transform: 'translateY(-50%)',\n flexDirection: 'column',\n }),\n}));\n\nconst Dot = styled('button')<{ active: boolean }>(({ theme, active }) => ({\n width: 8,\n height: 8,\n padding: 0,\n border: 'none',\n borderRadius: '50%',\n cursor: 'pointer',\n backgroundColor: active ? theme.palette.primary.main : alpha(theme.palette.common.black, 0.3),\n transition: theme.transitions.create(['background-color', 'transform'], {\n duration: theme.transitions.duration.short,\n }),\n '&:hover': {\n backgroundColor: active ? theme.palette.primary.main : alpha(theme.palette.common.black, 0.5),\n transform: 'scale(1.2)',\n },\n}));\n","'use client';\n\n/**\n * useCarousel Hook\n *\n * State management hook for the Carousel component.\n * Handles navigation, autoplay, and responsive behavior.\n *\n * @module @omnitron-dev/prism/components/carousel\n */\n\nimport { useState, useCallback, useRef, useEffect } from 'react';\n\nimport type { UseCarouselReturn } from './types.js';\n\n// =============================================================================\n// USE CAROUSEL OPTIONS\n// =============================================================================\n\n/**\n * Options for useCarousel hook.\n */\nexport interface UseCarouselOptions {\n /** Total number of slides */\n totalSlides: number;\n /** Initial slide index */\n initialSlide?: number;\n /** Number of slides to show */\n slidesToShow?: number;\n /** Number of slides to scroll */\n slidesToScroll?: number;\n /** Enable infinite loop */\n loop?: boolean;\n /** Enable autoplay */\n autoplay?: boolean;\n /** Autoplay interval in ms */\n autoplayInterval?: number;\n /** Callback when slide changes */\n onSlideChange?: (index: number) => void;\n}\n\n// =============================================================================\n// USE CAROUSEL HOOK\n// =============================================================================\n\n/**\n * Hook for managing carousel state.\n *\n * @example\n * ```tsx\n * const carousel = useCarousel({\n * totalSlides: items.length,\n * slidesToShow: 3,\n * autoplay: true,\n * });\n *\n * return (\n * <Carousel ref={carousel.carouselRef}>\n * {items.map((item, i) => (\n * <CarouselSlide key={i}>{item}</CarouselSlide>\n * ))}\n * </Carousel>\n * );\n * ```\n */\nexport function useCarousel(options: UseCarouselOptions): UseCarouselReturn {\n const {\n totalSlides,\n initialSlide = 0,\n slidesToShow = 1,\n slidesToScroll = 1,\n loop = false,\n autoplay = false,\n autoplayInterval = 3000,\n onSlideChange,\n } = options;\n\n const [currentIndex, setCurrentIndex] = useState(initialSlide);\n const [isPlaying, setIsPlaying] = useState(autoplay);\n const carouselRef = useRef<HTMLDivElement | null>(null);\n const autoplayRef = useRef<ReturnType<typeof setInterval> | null>(null);\n\n // Calculate max index\n const maxIndex = Math.max(0, totalSlides - slidesToShow);\n\n // Can navigate\n const canPrev = loop || currentIndex > 0;\n const canNext = loop || currentIndex < maxIndex;\n\n // Navigation handlers\n const goTo = useCallback(\n (index: number) => {\n let newIndex = index;\n\n if (loop) {\n if (index < 0) {\n newIndex = maxIndex;\n } else if (index > maxIndex) {\n newIndex = 0;\n }\n } else {\n newIndex = Math.max(0, Math.min(index, maxIndex));\n }\n\n setCurrentIndex(newIndex);\n onSlideChange?.(newIndex);\n },\n [loop, maxIndex, onSlideChange]\n );\n\n const next = useCallback(() => {\n if (canNext) {\n goTo(currentIndex + slidesToScroll);\n }\n }, [canNext, currentIndex, slidesToScroll, goTo]);\n\n const prev = useCallback(() => {\n if (canPrev) {\n goTo(currentIndex - slidesToScroll);\n }\n }, [canPrev, currentIndex, slidesToScroll, goTo]);\n\n // Autoplay handlers\n const pause = useCallback(() => {\n setIsPlaying(false);\n if (autoplayRef.current) {\n clearInterval(autoplayRef.current);\n autoplayRef.current = null;\n }\n }, []);\n\n const play = useCallback(() => {\n setIsPlaying(true);\n }, []);\n\n // Autoplay effect\n useEffect(() => {\n if (isPlaying && totalSlides > slidesToShow) {\n autoplayRef.current = setInterval(() => {\n goTo(currentIndex + slidesToScroll);\n }, autoplayInterval);\n\n return () => {\n if (autoplayRef.current) {\n clearInterval(autoplayRef.current);\n autoplayRef.current = null;\n }\n };\n }\n return undefined;\n }, [isPlaying, currentIndex, slidesToScroll, autoplayInterval, totalSlides, slidesToShow, goTo]);\n\n // Cleanup on unmount\n useEffect(\n () => () => {\n if (autoplayRef.current) {\n clearInterval(autoplayRef.current);\n }\n },\n []\n );\n\n return {\n currentIndex,\n totalSlides,\n canPrev,\n canNext,\n goTo,\n next,\n prev,\n pause,\n play,\n isPlaying,\n carouselRef,\n };\n}\n","/**\n * Navigation Section Styles\n *\n * CSS custom properties and class names for nav sections.\n *\n * @module @omnitron-dev/prism/components/nav-section\n */\n\nimport type { Theme, CSSObject } from '@mui/material/styles';\nimport type { NavVariant } from './types.js';\nimport { createComponentClasses } from '../../utils/create-classes.js';\n\n// =============================================================================\n// CLASS NAMES\n// =============================================================================\n\n/**\n * CSS class names for nav section components.\n */\nexport const navSectionClasses = createComponentClasses('nav-section', [\n 'root',\n 'vertical',\n 'horizontal',\n 'mini',\n 'ul',\n 'li',\n 'subheader',\n 'item',\n 'icon',\n 'texts',\n 'title',\n 'caption',\n 'info',\n 'arrow',\n 'active',\n 'disabled',\n 'open',\n] as const);\n\n// =============================================================================\n// CSS CUSTOM PROPERTIES\n// =============================================================================\n\n/**\n * Default CSS variables for nav sections.\n */\nexport const navSectionCssVars = {\n /**\n * Get CSS variables for vertical variant.\n */\n vertical: (theme: Theme): CSSObject => ({\n // Item spacing\n '--nav-item-gap': '4px',\n '--nav-item-padding': '4px 8px 4px 12px',\n '--nav-item-padding-top': '4px',\n '--nav-item-padding-right': '8px',\n '--nav-item-padding-bottom': '4px',\n '--nav-item-padding-left': '12px',\n '--nav-item-radius': '8px',\n '--nav-item-min-height': '44px',\n // Icon\n '--nav-icon-size': '24px',\n '--nav-icon-margin': '0 16px 0 0',\n // Text\n '--nav-item-font-size': '0.875rem',\n '--nav-item-caption-size': '0.75rem',\n // Colors - inactive\n '--nav-item-color': theme.palette.text.secondary,\n '--nav-icon-color': theme.palette.text.secondary,\n '--nav-item-bg': 'transparent',\n // Colors - hover\n '--nav-item-hover-bg': theme.palette.action.hover,\n '--nav-item-hover-color': theme.palette.text.primary,\n // Colors - active\n '--nav-item-active-bg': theme.palette.action.selected,\n '--nav-item-active-color': theme.palette.primary.main,\n '--nav-icon-active-color': theme.palette.primary.main,\n // Colors - disabled\n '--nav-item-disabled-color': theme.palette.text.disabled,\n // Subheader\n '--nav-subheader-font-size': '0.6875rem',\n '--nav-subheader-font-weight': '700',\n '--nav-subheader-color': theme.palette.text.disabled,\n '--nav-subheader-padding': '8px 8px 8px 12px',\n // Sub-item adjustments\n '--nav-sub-item-padding': '4px 8px 4px 12px',\n '--nav-sub-item-margin-left': '40px',\n '--nav-sub-item-radius': '8px',\n }),\n\n /**\n * Get CSS variables for horizontal variant.\n */\n horizontal: (theme: Theme): CSSObject => ({\n // Item spacing\n '--nav-item-gap': '6px',\n '--nav-item-padding': '8px 14px',\n '--nav-item-radius': '8px',\n '--nav-item-min-height': '36px',\n // Icon\n '--nav-icon-size': '22px',\n '--nav-icon-margin': '0 8px 0 0',\n // Text\n '--nav-item-font-size': '0.875rem',\n // Colors - inactive\n '--nav-item-color': theme.palette.text.primary,\n '--nav-icon-color': theme.palette.text.secondary,\n '--nav-item-bg': 'transparent',\n // Colors - hover\n '--nav-item-hover-bg': theme.palette.action.hover,\n '--nav-item-hover-color': theme.palette.text.primary,\n // Colors - active\n '--nav-item-active-bg': theme.palette.action.selected,\n '--nav-item-active-color': theme.palette.primary.main,\n '--nav-icon-active-color': theme.palette.primary.main,\n // Colors - disabled\n '--nav-item-disabled-color': theme.palette.text.disabled,\n // Dropdown\n '--nav-dropdown-paper-width': '180px',\n '--nav-dropdown-paper-radius': '8px',\n '--nav-dropdown-paper-shadow': theme.shadows[8],\n }),\n\n /**\n * Get CSS variables for mini variant.\n */\n mini: (theme: Theme): CSSObject => ({\n // Item spacing\n '--nav-item-gap': '4px',\n '--nav-item-padding': '8px',\n '--nav-item-radius': '8px',\n '--nav-item-min-height': 'auto',\n // Icon\n '--nav-icon-size': '22px',\n '--nav-icon-margin': '0',\n // Text\n '--nav-item-font-size': '0.625rem',\n // Colors - inactive\n '--nav-item-color': theme.palette.text.secondary,\n '--nav-icon-color': theme.palette.text.secondary,\n '--nav-item-bg': 'transparent',\n // Colors - hover\n '--nav-item-hover-bg': theme.palette.action.hover,\n '--nav-item-hover-color': theme.palette.text.primary,\n // Colors - active\n '--nav-item-active-bg': theme.palette.action.selected,\n '--nav-item-active-color': theme.palette.primary.main,\n '--nav-icon-active-color': theme.palette.primary.main,\n // Colors - disabled\n '--nav-item-disabled-color': theme.palette.text.disabled,\n // Tooltip/Popover\n '--nav-tooltip-paper-width': '160px',\n }),\n};\n\n/**\n * Get CSS variables for a specific nav variant.\n */\nexport function getNavCssVars(theme: Theme, variant: NavVariant): CSSObject {\n switch (variant) {\n case 'horizontal':\n return navSectionCssVars.horizontal(theme);\n case 'mini':\n return navSectionCssVars.mini(theme);\n default:\n return navSectionCssVars.vertical(theme);\n }\n}\n","'use client';\n\n/**\n * Navigation Base Components\n *\n * Foundational components for building navigation sections.\n *\n * @module @omnitron-dev/prism/components/nav-section\n */\n\nimport { forwardRef } from 'react';\nimport Box from '@mui/material/Box';\nimport ButtonBase from '@mui/material/ButtonBase';\nimport { styled, alpha } from '@mui/material/styles';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\nimport { cn } from '../../utils/cn.js';\nimport { navSectionClasses } from './styles.js';\n\n// =============================================================================\n// NAV (ROOT ELEMENT)\n// =============================================================================\n\n/**\n * Props for Nav component.\n */\nexport interface NavProps extends Omit<React.ComponentPropsWithoutRef<'nav'>, 'sx'> {\n children: React.ReactNode;\n sx?: SxProps<Theme>;\n}\n\n/**\n * Nav - Root navigation element for navigation sections.\n */\nexport const Nav = forwardRef<HTMLElement, NavProps>(function Nav({ className, sx, ...other }, ref) {\n return (\n <Box\n component=\"nav\"\n ref={ref}\n className={cn(navSectionClasses.root, className)}\n sx={[\n {\n flexShrink: 0,\n display: 'flex',\n flexDirection: 'column',\n },\n ...(Array.isArray(sx) ? sx : [sx]),\n ]}\n {...other}\n />\n );\n});\n\n// =============================================================================\n// NAV UL (UNORDERED LIST)\n// =============================================================================\n\n/**\n * Props for NavUl component.\n */\nexport interface NavUlProps extends Omit<React.ComponentPropsWithoutRef<'ul'>, 'sx'> {\n children: React.ReactNode;\n sx?: SxProps<Theme>;\n}\n\n/**\n * NavUl - Styled unordered list for navigation.\n */\nexport const NavUl = forwardRef<HTMLUListElement, NavUlProps>(function NavUl({ className, sx, ...other }, ref) {\n return (\n <Box\n component=\"ul\"\n ref={ref}\n className={cn(navSectionClasses.ul, className)}\n sx={[\n {\n display: 'flex',\n flexDirection: 'column',\n listStyle: 'none',\n padding: 0,\n margin: 0,\n },\n ...(Array.isArray(sx) ? sx : [sx]),\n ]}\n {...other}\n />\n );\n});\n\n// =============================================================================\n// NAV LI (LIST ITEM)\n// =============================================================================\n\n/**\n * Props for NavLi component.\n */\nexport interface NavLiProps extends React.ComponentPropsWithoutRef<'li'> {\n children: React.ReactNode;\n}\n\n/**\n * NavLi - Styled list item for navigation.\n */\nexport const NavLi = forwardRef<HTMLLIElement, NavLiProps>(function NavLi({ className, ...other }, ref) {\n return (\n <Box\n component=\"li\"\n ref={ref}\n className={cn(navSectionClasses.li, className)}\n sx={{\n display: 'flex',\n flexDirection: 'column',\n }}\n {...other}\n />\n );\n});\n\n// =============================================================================\n// NAV SUBHEADER\n// =============================================================================\n\n/**\n * Props for NavSubheader component.\n */\nexport interface NavSubheaderProps extends React.ComponentPropsWithoutRef<typeof ButtonBase> {\n /** Whether the section is open */\n open?: boolean;\n /** Click handler for toggle */\n onClick?: () => void;\n children: React.ReactNode;\n}\n\nconst StyledSubheader = styled(ButtonBase)(({ theme }) => ({\n width: '100%',\n cursor: 'pointer',\n padding: 'var(--nav-subheader-padding, 8px 8px 8px 12px)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-start',\n fontSize: 'var(--nav-subheader-font-size, 0.6875rem)',\n fontWeight: 'var(--nav-subheader-font-weight, 700)',\n color: 'var(--nav-subheader-color, inherit)',\n textTransform: 'uppercase',\n letterSpacing: '0.08em',\n borderRadius: theme.shape.borderRadius,\n transition: theme.transitions.create(['background-color', 'color'], {\n duration: theme.transitions.duration.shorter,\n }),\n '&:hover': {\n backgroundColor: alpha(theme.palette.grey[500], 0.08),\n },\n}));\n\nconst ArrowIcon = styled('span')<{ open?: boolean }>(({ open }) => ({\n marginLeft: 'auto',\n width: 16,\n height: 16,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'transform 0.2s',\n transform: open ? 'rotate(0deg)' : 'rotate(-90deg)',\n '&::before': {\n content: '\"\"',\n width: 6,\n height: 6,\n borderStyle: 'solid',\n borderWidth: '0 0 1.5px 1.5px',\n borderColor: 'currentColor',\n transform: 'rotate(-45deg)',\n },\n}));\n\n/**\n * NavSubheader - Section header with collapse toggle.\n */\nexport const NavSubheader = forwardRef<HTMLButtonElement, NavSubheaderProps>(function NavSubheader(\n { className, open, onClick, children, ...other },\n ref\n) {\n return (\n <StyledSubheader ref={ref} className={cn(navSectionClasses.subheader, className)} onClick={onClick} {...other}>\n {children}\n {onClick && <ArrowIcon open={open} />}\n </StyledSubheader>\n );\n});\n\n// =============================================================================\n// NAV ITEM (BASE)\n// =============================================================================\n\n/**\n * Props for NavItemBase component.\n */\nexport interface NavItemBaseProps extends React.ComponentPropsWithoutRef<typeof ButtonBase> {\n /** Whether the item is active */\n active?: boolean;\n /** Whether the item is disabled */\n disabled?: boolean;\n /** Whether the submenu is open */\n open?: boolean;\n /** Item depth level */\n depth?: number;\n /** Whether item has children */\n hasChild?: boolean;\n children: React.ReactNode;\n}\n\nconst StyledNavItem = styled(ButtonBase, {\n shouldForwardProp: (prop) => !['active', 'open', 'depth', 'hasChild'].includes(prop as string),\n})<{ active?: boolean; open?: boolean; depth?: number; hasChild?: boolean }>(\n ({ theme, active, open, depth = 1, hasChild }) => ({\n width: '100%',\n minHeight: 'var(--nav-item-min-height, 44px)',\n padding: depth === 1 ? 'var(--nav-item-padding)' : 'var(--nav-sub-item-padding)',\n marginLeft: depth > 1 ? `calc(var(--nav-sub-item-margin-left, 40px) * ${depth - 1})` : 0,\n borderRadius: `var(--nav-item-radius, ${theme.shape.borderRadius}px)`,\n color: 'var(--nav-item-color)',\n backgroundColor: 'var(--nav-item-bg, transparent)',\n transition: theme.transitions.create(['background-color', 'color'], {\n duration: theme.transitions.duration.shorter,\n }),\n '&:hover': {\n backgroundColor: 'var(--nav-item-hover-bg)',\n color: 'var(--nav-item-hover-color)',\n },\n // Active state\n ...(active && {\n backgroundColor: 'var(--nav-item-active-bg)',\n color: 'var(--nav-item-active-color)',\n '& .nav-icon': {\n color: 'var(--nav-icon-active-color)',\n },\n }),\n // Open state (submenu open)\n ...(open && {\n backgroundColor: 'var(--nav-item-hover-bg)',\n color: 'var(--nav-item-hover-color)',\n }),\n // Disabled state\n '&.Mui-disabled': {\n color: 'var(--nav-item-disabled-color)',\n pointerEvents: 'none',\n },\n })\n);\n\n/**\n * NavItemBase - Base button component for nav items.\n */\nexport const NavItemBase = forwardRef<HTMLButtonElement, NavItemBaseProps>(function NavItemBase(\n { className, active, disabled, open, depth, hasChild, ...other },\n ref\n) {\n return (\n <StyledNavItem\n ref={ref}\n className={cn(\n navSectionClasses.item,\n active && navSectionClasses.active,\n disabled && navSectionClasses.disabled,\n open && navSectionClasses.open,\n className\n )}\n active={active}\n open={open}\n depth={depth}\n hasChild={hasChild}\n disabled={disabled}\n {...other}\n />\n );\n});\n\n// =============================================================================\n// NAV ICON\n// =============================================================================\n\n/**\n * Props for NavIcon component.\n */\nexport interface NavIconProps {\n /** Icon element */\n icon?: React.ReactNode;\n /** Custom className */\n className?: string;\n}\n\nconst IconWrapper = styled('span')({\n width: 'var(--nav-icon-size, 24px)',\n height: 'var(--nav-icon-size, 24px)',\n flexShrink: 0,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n margin: 'var(--nav-icon-margin, 0 16px 0 0)',\n color: 'var(--nav-icon-color)',\n '& svg': {\n width: '100%',\n height: '100%',\n },\n});\n\n/**\n * NavIcon - Icon wrapper for nav items.\n */\nexport function NavIcon({ icon, className }: NavIconProps): React.ReactNode {\n if (!icon) return null;\n return <IconWrapper className={cn('nav-icon', navSectionClasses.icon, className)}>{icon}</IconWrapper>;\n}\n\n// =============================================================================\n// NAV TEXTS\n// =============================================================================\n\n/**\n * Props for NavTexts component.\n */\nexport interface NavTextsProps {\n /** Title text */\n title: string;\n /** Caption text */\n caption?: string;\n /** Custom className */\n className?: string;\n}\n\nconst TextsWrapper = styled('span')({\n flex: '1 1 auto',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-start',\n minWidth: 0,\n});\n\nconst Title = styled('span')({\n fontSize: 'var(--nav-item-font-size, 0.875rem)',\n fontWeight: 500,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n maxWidth: '100%',\n lineHeight: 1.5,\n});\n\nconst Caption = styled('span')(({ theme }) => ({\n fontSize: 'var(--nav-item-caption-size, 0.75rem)',\n color: theme.palette.text.disabled,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n maxWidth: '100%',\n lineHeight: 1.5,\n}));\n\n/**\n * NavTexts - Text content for nav items.\n */\nexport function NavTexts({ title, caption, className }: NavTextsProps): React.ReactNode {\n return (\n <TextsWrapper className={cn(navSectionClasses.texts, className)}>\n <Title className={navSectionClasses.title}>{title}</Title>\n {caption && <Caption className={navSectionClasses.caption}>{caption}</Caption>}\n </TextsWrapper>\n );\n}\n\n// =============================================================================\n// NAV ARROW\n// =============================================================================\n\n/**\n * Props for NavArrow component.\n */\nexport interface NavArrowProps {\n /** Whether submenu is open */\n open?: boolean;\n /** Arrow direction */\n direction?: 'down' | 'right';\n /** Custom className */\n className?: string;\n}\n\nconst ArrowWrapper = styled('span')<{ open?: boolean; direction?: 'down' | 'right' }>(\n ({ open, direction = 'right' }) => ({\n width: 16,\n height: 16,\n flexShrink: 0,\n marginLeft: 6,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'transform 0.2s',\n transform: open ? (direction === 'down' ? 'rotate(180deg)' : 'rotate(90deg)') : 'rotate(0deg)',\n '&::before': {\n content: '\"\"',\n width: 5,\n height: 5,\n borderStyle: 'solid',\n borderWidth: '0 1.5px 1.5px 0',\n borderColor: 'currentColor',\n transform: direction === 'down' ? 'rotate(45deg)' : 'rotate(45deg)',\n },\n })\n);\n\n/**\n * NavArrow - Arrow indicator for items with children.\n */\nexport function NavArrow({ open, direction = 'right', className }: NavArrowProps): React.ReactNode {\n return <ArrowWrapper className={cn(navSectionClasses.arrow, className)} open={open} direction={direction} />;\n}\n\n// =============================================================================\n// NAV INFO\n// =============================================================================\n\n/**\n * Props for NavInfo component.\n */\nexport interface NavInfoProps {\n /** Info content */\n info?: React.ReactNode;\n /** Custom className */\n className?: string;\n}\n\nconst InfoWrapper = styled('span')({\n marginLeft: 6,\n display: 'inline-flex',\n alignItems: 'center',\n});\n\n/**\n * NavInfo - Info badge/content for nav items.\n */\nexport function NavInfo({ info, className }: NavInfoProps): React.ReactNode {\n if (!info) return null;\n return <InfoWrapper className={cn(navSectionClasses.info, className)}>{info}</InfoWrapper>;\n}\n","/**\n * URL Utilities\n *\n * Safe URL handling, navigation helpers, and link utilities.\n *\n * @module @omnitron-dev/prism/utils/url\n */\n\n/**\n * Options for safe return URL validation.\n */\nexport interface SafeReturnUrlOptions {\n /** Allowed URL schemes (default: ['http:', 'https:']) */\n allowedSchemes?: string[];\n /** Allowed hosts (if empty, only relative URLs allowed) */\n allowedHosts?: string[];\n /** Whether to allow relative URLs (default: true) */\n allowRelative?: boolean;\n /** Default URL if validation fails */\n fallback?: string;\n}\n\n/**\n * Validate and sanitize a return URL to prevent open redirect vulnerabilities.\n * Only allows relative paths or URLs to explicitly allowed hosts.\n *\n * @example\n * ```tsx\n * // In a login callback\n * const returnUrl = safeReturnUrl(searchParams.get('redirect'), {\n * allowedHosts: ['app.example.com'],\n * fallback: '/dashboard',\n * });\n * router.push(returnUrl);\n * ```\n *\n * @param url - URL to validate\n * @param options - Validation options\n * @returns Safe URL or fallback\n */\nexport function safeReturnUrl(url: string | null | undefined, options: SafeReturnUrlOptions = {}): string {\n const { allowedSchemes = ['http:', 'https:'], allowedHosts = [], allowRelative = true, fallback = '/' } = options;\n\n if (!url) {\n return fallback;\n }\n\n try {\n // Handle relative URLs\n if (url.startsWith('/') && !url.startsWith('//')) {\n if (allowRelative) {\n // Ensure it's a valid path (no protocol injection)\n return sanitizePath(url);\n }\n return fallback;\n }\n\n // Parse absolute URL\n const parsed = new URL(url, 'http://dummy.local');\n\n // Check scheme\n if (!allowedSchemes.includes(parsed.protocol)) {\n return fallback;\n }\n\n // Check host (only for absolute URLs)\n if (parsed.host !== 'dummy.local' && allowedHosts.length > 0) {\n if (!allowedHosts.includes(parsed.host)) {\n return fallback;\n }\n }\n\n // If parsed from a relative URL, return the pathname\n if (parsed.host === 'dummy.local') {\n return allowRelative ? sanitizePath(parsed.pathname + parsed.search + parsed.hash) : fallback;\n }\n\n return url;\n } catch {\n return fallback;\n }\n}\n\n/**\n * Sanitize a URL path to prevent injection attacks.\n *\n * @param path - Path to sanitize\n * @returns Sanitized path\n */\nfunction sanitizePath(path: string): string {\n let sanitized = path;\n\n // Iteratively strip protocol-like patterns (handles javascript:javascript:... nesting)\n let prev = '';\n while (prev !== sanitized) {\n prev = sanitized;\n sanitized = sanitized.replace(/^[a-z]+:/gi, '');\n // Also strip whitespace/control chars that could bypass regex (e.g. java\\x00script:)\n // eslint-disable-next-line no-control-regex\n sanitized = sanitized.replace(/^[\\s\\x00-\\x1f]+/, '');\n }\n\n // Remove double slashes that could be interpreted as protocol-relative URLs\n sanitized = sanitized.replace(/^\\/\\/+/, '/');\n\n // Ensure it starts with a single slash\n if (!sanitized.startsWith('/')) {\n sanitized = '/' + sanitized;\n }\n\n return sanitized;\n}\n\n/**\n * Check if a navigation link is currently active.\n *\n * Features:\n * - Removes trailing slashes and query parameters before comparison\n * - Ignores external links (https://...) and hash links (#section)\n * - Supports deep matching for nested routes\n * - Handles query parameter paths correctly\n *\n * @example\n * ```tsx\n * // Basic usage\n * isActiveLink('/dashboard', '/dashboard/user/list'); // true (deep match)\n * isActiveLink('/dashboard', '/dashboard/user/list', false); // false (exact match)\n *\n * // Query parameters\n * isActiveLink('/users', '/users?page=1'); // true\n *\n * // Hash links and external links\n * isActiveLink('/home', '#section'); // false\n * isActiveLink('/home', 'https://example.com'); // false\n *\n * // Navigation items\n * const navItems = [\n * { path: '/dashboard', label: 'Dashboard', exact: true },\n * { path: '/users', label: 'Users' },\n * { path: '/settings', label: 'Settings' },\n * ];\n *\n * navItems.map(item => (\n * <NavItem\n * key={item.path}\n * active={isActiveLink(location.pathname, item.path, !item.exact)}\n * >\n * {item.label}\n * </NavItem>\n * ));\n * ```\n *\n * @param currentPathname - Current location pathname\n * @param targetPath - The link's target path (can include query parameters)\n * @param deep - Whether to perform deep matching for nested routes (default: true)\n * @returns True if the link is active\n */\nexport function isActiveLink(currentPathname: string, targetPath: string, deep: boolean = true): boolean {\n // Validate inputs\n if (!currentPathname || !targetPath) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('[isActiveLink] currentPathname or targetPath is empty');\n }\n return false;\n }\n\n // Ignore hash links and external links\n if (targetPath.startsWith('#') || isExternalLink(targetPath)) {\n return false;\n }\n\n // Normalize paths: remove trailing slashes and query parameters\n const pathname = removeLastSlash(currentPathname);\n const cleanedTargetPath = removeLastSlash(removeParams(targetPath));\n\n // If target has query params, always do deep matching\n const shouldDeepMatch = deep || hasParams(targetPath);\n\n // Root path special case\n if (cleanedTargetPath === '/') {\n return pathname === '/';\n }\n\n // Deep match: current path starts with target path\n if (shouldDeepMatch) {\n return pathname === cleanedTargetPath || pathname.startsWith(`${cleanedTargetPath}/`);\n }\n\n // Exact match\n return pathname === cleanedTargetPath;\n}\n\n/**\n * Check if a URL is external (different origin).\n *\n * @param url - URL to check\n * @param currentOrigin - Current page origin (default: window.location.origin)\n * @returns True if the URL is external\n */\nexport function isExternalUrl(url: string, currentOrigin?: string): boolean {\n try {\n // Relative URLs are internal\n if (url.startsWith('/') && !url.startsWith('//')) {\n return false;\n }\n\n // Protocol-relative URLs\n if (url.startsWith('//')) {\n const origin = currentOrigin ?? (typeof window !== 'undefined' ? window.location.origin : '');\n const currentHost = new URL(origin).host;\n const urlHost = url.slice(2).split('/')[0];\n return urlHost !== currentHost;\n }\n\n // Absolute URLs\n const origin = currentOrigin ?? (typeof window !== 'undefined' ? window.location.origin : '');\n const urlOrigin = new URL(url).origin;\n return urlOrigin !== origin;\n } catch {\n return false;\n }\n}\n\n/**\n * Build a URL with query parameters.\n *\n * @example\n * ```tsx\n * const url = buildUrl('/search', {\n * q: 'hello world',\n * page: 1,\n * filter: ['active', 'recent'],\n * });\n * // Returns: '/search?q=hello+world&page=1&filter=active&filter=recent'\n * ```\n *\n * @param base - Base URL path\n * @param params - Query parameters\n * @returns URL with query string\n */\nexport function buildUrl(\n base: string,\n params: Record<string, string | number | boolean | (string | number | boolean)[] | null | undefined>\n): string {\n const searchParams = new URLSearchParams();\n\n for (const [key, value] of Object.entries(params)) {\n if (value === null || value === undefined) {\n continue;\n }\n\n if (Array.isArray(value)) {\n for (const item of value) {\n searchParams.append(key, String(item));\n }\n } else {\n searchParams.set(key, String(value));\n }\n }\n\n const queryString = searchParams.toString();\n if (!queryString) {\n return base;\n }\n\n const separator = base.includes('?') ? '&' : '?';\n return base + separator + queryString;\n}\n\n/**\n * Parse query parameters from a URL string.\n *\n * @param url - URL or query string\n * @returns Parsed parameters\n */\nexport function parseQueryParams(url: string): Record<string, string | string[]> {\n const queryString = url.includes('?') ? url.split('?')[1] : url;\n const params = new URLSearchParams(queryString);\n const result: Record<string, string | string[]> = {};\n\n for (const [key, value] of params.entries()) {\n const existing = result[key];\n if (existing) {\n result[key] = Array.isArray(existing) ? [...existing, value] : [existing, value];\n } else {\n result[key] = value;\n }\n }\n\n return result;\n}\n\n/**\n * Get a single query parameter value.\n *\n * @param url - URL or query string\n * @param key - Parameter key\n * @returns Parameter value or undefined\n */\nexport function getQueryParam(url: string, key: string): string | undefined {\n const params = parseQueryParams(url);\n const value = params[key];\n return Array.isArray(value) ? value[0] : value;\n}\n\n/**\n * Check if a URL has query parameters.\n *\n * @param url - URL to check\n * @returns True if URL has query parameters\n *\n * @example\n * ```ts\n * hasParams('/search?q=hello'); // true\n * hasParams('/search'); // false\n * ```\n */\nexport function hasParams(url: string): boolean {\n return url.includes('?') && url.split('?')[1]?.length > 0;\n}\n\n/**\n * Remove query parameters from a URL.\n *\n * @param url - URL to process\n * @returns URL without query parameters\n *\n * @example\n * ```ts\n * removeParams('/search?q=hello'); // '/search'\n * removeParams('/search'); // '/search'\n * ```\n */\nexport function removeParams(url: string): string {\n const index = url.indexOf('?');\n return index === -1 ? url : url.slice(0, index);\n}\n\n/**\n * Remove trailing slash from a path.\n *\n * @param pathname - Path to process\n * @returns Path without trailing slash\n *\n * @example\n * ```ts\n * removeLastSlash('/users/'); // '/users'\n * removeLastSlash('/users'); // '/users'\n * removeLastSlash('/'); // '/'\n * ```\n */\nexport function removeLastSlash(pathname: string): string {\n if (pathname === '/') {\n return pathname;\n }\n return pathname.endsWith('/') ? pathname.slice(0, -1) : pathname;\n}\n\n/**\n * Check if a URL is an external link (starts with http:// or https://).\n *\n * @param url - URL to check\n * @returns True if external link\n *\n * @example\n * ```ts\n * isExternalLink('https://example.com'); // true\n * isExternalLink('/about'); // false\n * isExternalLink('#section'); // false\n * ```\n */\nexport function isExternalLink(url: string): boolean {\n return /^https?:\\/\\//.test(url);\n}\n\n/**\n * Compare two paths for equality (ignoring trailing slashes and query params).\n *\n * @param targetUrl - Target URL\n * @param currentUrl - Current URL\n * @param options - Comparison options\n * @returns True if paths are equal\n *\n * @example\n * ```ts\n * isEqualPath('/users/', '/users'); // true\n * isEqualPath('/users?page=1', '/users'); // true\n * isEqualPath('/users', '/users/1', { deep: true }); // false\n * ```\n */\nexport function isEqualPath(targetUrl: string, currentUrl: string, options: { deep?: boolean } = {}): boolean {\n const { deep = false } = options;\n\n // Normalize both paths\n const target = removeLastSlash(removeParams(targetUrl));\n const current = removeLastSlash(removeParams(currentUrl));\n\n if (deep) {\n return current === target || current.startsWith(target + '/');\n }\n\n return target === current;\n}\n","'use client';\n\n/**\n * Navigation Item Component\n *\n * Individual navigation item with icon, text, and optional children indicator.\n *\n * @module @omnitron-dev/prism/components/nav-section\n */\n\nimport { forwardRef, useMemo } from 'react';\nimport Box from '@mui/material/Box';\nimport Tooltip from '@mui/material/Tooltip';\n\nimport type { NavItemProps, NavItemRenderProps } from './types.js';\nimport { NavItemBase, NavIcon, NavTexts, NavArrow, NavInfo } from './components.js';\nimport { isExternalLink } from '../../utils/url.js';\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\n/**\n * Resolve icon from render props or direct node.\n */\nfunction resolveIcon(\n icon: string | React.ReactNode | undefined,\n render?: NavItemRenderProps\n): React.ReactNode | undefined {\n if (!icon) return undefined;\n if (typeof icon === 'string' && render?.navIcon) {\n return render.navIcon[icon];\n }\n return icon as React.ReactNode;\n}\n\n/**\n * Resolve info from render props or direct node.\n */\nfunction resolveInfo(\n info: string[] | React.ReactNode | undefined,\n render?: NavItemRenderProps\n): React.ReactNode | undefined {\n if (!info) return undefined;\n if (Array.isArray(info) && render?.navInfo) {\n const infoComponents = info.map((key) => render.navInfo?.(key));\n return (\n <>\n {infoComponents.map((comp, idx) => (\n <Box key={idx} component=\"span\">\n {comp && Object.values(comp)[0]}\n </Box>\n ))}\n </>\n );\n }\n return info as React.ReactNode;\n}\n\n// =============================================================================\n// NAV ITEM COMPONENT\n// =============================================================================\n\n/**\n * NavItem - Individual navigation item.\n *\n * @example\n * ```tsx\n * <NavItem\n * title=\"Dashboard\"\n * path=\"/dashboard\"\n * icon={<DashboardIcon />}\n * active={pathname === '/dashboard'}\n * />\n * ```\n */\nexport const NavItem = forwardRef<HTMLButtonElement, NavItemProps>(function NavItem(props, ref) {\n const {\n // Data props\n path,\n title,\n icon,\n info,\n caption,\n disabled,\n children,\n // State props\n open,\n active,\n // Options\n depth = 1,\n hasChild,\n externalLink,\n enabledRootRedirect,\n render,\n slotProps,\n // ButtonBase props\n onClick,\n ...other\n } = props;\n\n // Resolve icon and info from render props\n const resolvedIcon = useMemo(() => resolveIcon(icon, render), [icon, render]);\n const resolvedInfo = useMemo(() => resolveInfo(info, render), [info, render]);\n\n // Check if external link\n const isExternal = externalLink ?? isExternalLink(path);\n\n // Determine if item should be clickable\n const isClickable = !disabled && (enabledRootRedirect || !hasChild || depth > 1);\n\n // Build anchor props for external links\n const linkProps = isExternal\n ? {\n component: 'a' as const,\n href: path,\n target: '_blank',\n rel: 'noopener noreferrer',\n }\n : {};\n\n const content = (\n <NavItemBase\n ref={ref}\n active={active}\n disabled={disabled}\n open={open}\n depth={depth}\n hasChild={hasChild}\n onClick={isClickable ? onClick : undefined}\n sx={slotProps?.sx}\n {...linkProps}\n {...other}\n >\n <NavIcon icon={resolvedIcon} className={slotProps?.icon as string} />\n <NavTexts title={title} caption={caption} className={slotProps?.texts as string} />\n {resolvedInfo && <NavInfo info={resolvedInfo} className={slotProps?.info as string} />}\n {hasChild && <NavArrow open={open} className={slotProps?.arrow as string} />}\n </NavItemBase>\n );\n\n // Wrap with tooltip for caption in mini mode or when needed\n if (caption && depth === 1) {\n return (\n <Tooltip title={caption} placement=\"right\" arrow>\n {content}\n </Tooltip>\n );\n }\n\n return content;\n});\n\n// =============================================================================\n// NAV ITEM EXPORTS\n// =============================================================================\n\nexport type { NavItemProps };\n","'use client';\n\n/**\n * Navigation Context\n *\n * Context for managing navigation state (pathname, router).\n *\n * @module @omnitron-dev/prism/components/nav-section\n */\n\nimport { createContext, useContext, useMemo } from 'react';\nimport type { ReactNode } from 'react';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\n/**\n * Router functions for navigation.\n */\nexport interface NavRouter {\n /** Navigate to a path */\n push: (path: string) => void;\n /** Replace current path */\n replace?: (path: string) => void;\n}\n\n/**\n * Navigation context value.\n */\nexport interface NavContextValue {\n /** Current pathname */\n pathname: string;\n /** Optional router */\n router?: NavRouter;\n}\n\n/**\n * Props for NavProvider.\n */\nexport interface NavProviderProps {\n /** Current pathname */\n pathname: string;\n /** Optional router */\n router?: NavRouter;\n children: ReactNode;\n}\n\n// =============================================================================\n// CONTEXT\n// =============================================================================\n\nconst NavContext = createContext<NavContextValue | undefined>(undefined);\n\n/**\n * NavProvider - Provides navigation context to nav components.\n *\n * @example\n * ```tsx\n * // With Next.js\n * import { usePathname, useRouter } from 'next/navigation';\n *\n * function App() {\n * const pathname = usePathname();\n * const router = useRouter();\n *\n * return (\n * <NavProvider pathname={pathname} router={router}>\n * <NavSection data={navConfig} />\n * </NavProvider>\n * );\n * }\n *\n * // With React Router\n * import { useLocation, useNavigate } from 'react-router-dom';\n *\n * function App() {\n * const { pathname } = useLocation();\n * const navigate = useNavigate();\n *\n * return (\n * <NavProvider pathname={pathname} router={{ push: navigate }}>\n * <NavSection data={navConfig} />\n * </NavProvider>\n * );\n * }\n * ```\n */\nexport function NavProvider({ pathname, router, children }: NavProviderProps): ReactNode {\n const value = useMemo(() => ({ pathname, router }), [pathname, router]);\n\n return <NavContext.Provider value={value}>{children}</NavContext.Provider>;\n}\n\n/**\n * useNav - Hook to access navigation context.\n */\nexport function useNav(): NavContextValue {\n const context = useContext(NavContext);\n if (context === undefined) {\n throw new Error('useNav must be used within a NavProvider');\n }\n return context;\n}\n\n/**\n * useNavPathname - Hook to get current pathname with fallback.\n *\n * Returns pathname from context if available, otherwise returns '/'.\n * This allows components to work without NavProvider for simpler use cases.\n */\nexport function useNavPathname(): string {\n const context = useContext(NavContext);\n return context?.pathname ?? '/';\n}\n\n/**\n * useNavRouter - Hook to get router from context.\n */\nexport function useNavRouter(): NavRouter | undefined {\n const context = useContext(NavContext);\n return context?.router;\n}\n","'use client';\n\n/**\n * Navigation List Component\n *\n * Renders a navigation item with its children, handling collapse and active states.\n *\n * @module @omnitron-dev/prism/components/nav-section\n */\n\nimport { useState, useCallback, useEffect, useMemo } from 'react';\nimport Collapse from '@mui/material/Collapse';\n\nimport type { NavListProps, NavSubListProps, NavItemDataProps } from './types.js';\nimport { NavUl, NavLi } from './components.js';\nimport { NavItem } from './nav-item.js';\nimport { useNavPathname } from './nav-context.js';\nimport { isActiveLink } from '../../utils/url.js';\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\n/**\n * Check if any child route is active.\n */\nfunction hasActiveChild(data: NavItemDataProps, currentPath: string, deepMatch = false): boolean {\n if (!data.children?.length) return false;\n\n return data.children.some((child) => {\n const childActive = deepMatch ? isActiveLink(currentPath, child.path, true) : currentPath === child.path;\n\n if (childActive) return true;\n if (child.children?.length) {\n return hasActiveChild(child, currentPath, deepMatch);\n }\n return false;\n });\n}\n\n// =============================================================================\n// NAV LIST COMPONENT\n// =============================================================================\n\n/**\n * NavList - Renders a navigation item with its children.\n *\n * @example\n * ```tsx\n * <NavList\n * data={{\n * title: 'Users',\n * path: '/users',\n * children: [\n * { title: 'List', path: '/users/list' },\n * { title: 'Create', path: '/users/create' },\n * ],\n * }}\n * depth={1}\n * />\n * ```\n */\nexport function NavList({\n data,\n depth = 1,\n render,\n slotProps,\n cssVars,\n checkPermissions,\n enabledRootRedirect,\n}: NavListProps): React.ReactNode {\n const pathname = useNavPathname();\n\n // Check if this item is active\n const isActive = useMemo(\n () => isActiveLink(pathname, data.path, data.deepMatch),\n [pathname, data.path, data.deepMatch]\n );\n\n // Check if any child is active\n const hasChild = Boolean(data.children?.length);\n const childActive = useMemo(\n () => hasChild && hasActiveChild(data, pathname, data.deepMatch),\n [data, pathname, hasChild]\n );\n\n // Open state for collapse (default open if child is active)\n const [open, setOpen] = useState(childActive);\n\n // Update open state when child becomes active\n useEffect(() => {\n if (childActive) {\n setOpen(true);\n }\n }, [childActive]);\n\n // Toggle collapse\n const handleToggle = useCallback(() => {\n if (hasChild) {\n setOpen((prev) => !prev);\n }\n }, [hasChild]);\n\n // Handle navigation click\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n if (hasChild && !enabledRootRedirect) {\n event.preventDefault();\n handleToggle();\n }\n },\n [hasChild, enabledRootRedirect, handleToggle]\n );\n\n // Check permissions\n if (checkPermissions && data.allowedRoles) {\n const hasPermission = checkPermissions(data.allowedRoles);\n if (!hasPermission) return null;\n }\n\n return (\n <NavLi>\n <NavItem\n // Data\n path={data.path}\n title={data.title}\n icon={data.icon}\n info={data.info}\n caption={data.caption}\n disabled={data.disabled}\n // State\n active={isActive || childActive}\n open={open}\n // Options\n depth={depth}\n hasChild={hasChild}\n enabledRootRedirect={enabledRootRedirect}\n render={render}\n slotProps={depth === 1 ? slotProps?.rootItem : slotProps?.subItem}\n // Events\n onClick={handleClick}\n />\n\n {hasChild && (\n <Collapse in={open} unmountOnExit>\n <NavSubList\n data={data.children!}\n depth={depth + 1}\n render={render}\n slotProps={slotProps}\n checkPermissions={checkPermissions}\n enabledRootRedirect={enabledRootRedirect}\n />\n </Collapse>\n )}\n </NavLi>\n );\n}\n\n// =============================================================================\n// NAV SUB LIST COMPONENT\n// =============================================================================\n\n/**\n * NavSubList - Renders a list of child navigation items.\n */\nexport function NavSubList({\n data,\n depth,\n render,\n slotProps,\n cssVars,\n checkPermissions,\n enabledRootRedirect,\n}: NavSubListProps): React.ReactNode {\n return (\n <NavUl sx={{ gap: 'var(--nav-item-gap)' }}>\n {data.map((item) => (\n <NavList\n key={item.title}\n data={item}\n depth={depth}\n render={render}\n slotProps={slotProps}\n cssVars={cssVars}\n checkPermissions={checkPermissions}\n enabledRootRedirect={enabledRootRedirect}\n />\n ))}\n </NavUl>\n );\n}\n","'use client';\n\n/**\n * Vertical Navigation Section\n *\n * Collapsible navigation groups for sidebar layouts.\n *\n * @module @omnitron-dev/prism/components/nav-section\n */\n\nimport { useTheme } from '@mui/material/styles';\nimport Collapse from '@mui/material/Collapse';\n\nimport type { NavGroupProps, NavSectionProps } from './types.js';\nimport { Nav, NavUl, NavLi, NavSubheader } from './components.js';\nimport { NavList } from './nav-list.js';\nimport { navSectionClasses, navSectionCssVars } from './styles.js';\nimport { cn } from '../../utils/cn.js';\nimport { useBoolean } from '../../core/index.js';\n\n// =============================================================================\n// NAV GROUP COMPONENT\n// =============================================================================\n\n/**\n * NavGroup - A collapsible group of navigation items with optional subheader.\n */\nfunction NavGroup({\n items,\n render,\n subheader,\n slotProps,\n checkPermissions,\n enabledRootRedirect,\n}: NavGroupProps): React.ReactNode {\n const groupOpen = useBoolean(true);\n\n const renderContent = () => (\n <NavUl sx={{ gap: 'var(--nav-item-gap)' }}>\n {items.map((list) => (\n <NavList\n key={list.title}\n data={list}\n render={render}\n depth={1}\n slotProps={slotProps}\n checkPermissions={checkPermissions}\n enabledRootRedirect={enabledRootRedirect}\n />\n ))}\n </NavUl>\n );\n\n return (\n <NavLi>\n {subheader ? (\n <>\n <NavSubheader\n data-title={subheader}\n open={groupOpen.value}\n onClick={groupOpen.onToggle}\n sx={slotProps?.subheader}\n >\n {subheader}\n </NavSubheader>\n\n <Collapse in={groupOpen.value}>{renderContent()}</Collapse>\n </>\n ) : (\n renderContent()\n )}\n </NavLi>\n );\n}\n\n// =============================================================================\n// NAV SECTION VERTICAL\n// =============================================================================\n\n/**\n * NavSectionVertical - Vertical navigation section for sidebar layouts.\n *\n * @example\n * ```tsx\n * const navConfig = [\n * {\n * subheader: 'Overview',\n * items: [\n * { title: 'Dashboard', path: '/dashboard', icon: <DashboardIcon /> },\n * { title: 'Analytics', path: '/analytics', icon: <ChartIcon /> },\n * ],\n * },\n * {\n * subheader: 'Management',\n * items: [\n * {\n * title: 'Users',\n * path: '/users',\n * icon: <UsersIcon />,\n * children: [\n * { title: 'List', path: '/users/list' },\n * { title: 'Create', path: '/users/create' },\n * ],\n * },\n * ],\n * },\n * ];\n *\n * <NavProvider pathname={pathname}>\n * <NavSectionVertical data={navConfig} />\n * </NavProvider>\n * ```\n */\nexport function NavSectionVertical({\n sx,\n data,\n render,\n className,\n slotProps,\n checkPermissions,\n enabledRootRedirect,\n cssVars: overridesVars,\n ...other\n}: NavSectionProps): React.ReactNode {\n const theme = useTheme();\n\n const cssVars = { ...navSectionCssVars.vertical(theme), ...overridesVars };\n\n return (\n <Nav\n className={cn(navSectionClasses.root, navSectionClasses.vertical, className)}\n sx={[{ ...cssVars }, ...(Array.isArray(sx) ? sx : [sx])]}\n {...other}\n >\n <NavUl sx={{ flex: '1 1 auto', gap: 'var(--nav-item-gap)' }}>\n {data.map((group) => (\n <NavGroup\n key={group.subheader ?? group.items[0]?.title}\n subheader={group.subheader}\n items={group.items}\n render={render}\n slotProps={slotProps}\n checkPermissions={checkPermissions}\n enabledRootRedirect={enabledRootRedirect}\n />\n ))}\n </NavUl>\n </Nav>\n );\n}\n","'use client';\n\n/**\n * Horizontal Navigation Section\n *\n * Horizontal navigation for header/top bar layouts.\n *\n * @module @omnitron-dev/prism/components/nav-section\n */\n\nimport { useState, useCallback, useMemo, useEffect, useRef } from 'react';\nimport { useTheme } from '@mui/material/styles';\nimport Popover from '@mui/material/Popover';\nimport Paper from '@mui/material/Paper';\n\nimport type { NavItemDataProps, NavListProps, NavSectionProps } from './types.js';\nimport { Nav, NavUl, NavLi } from './components.js';\nimport { NavItem } from './nav-item.js';\nimport { useNavPathname } from './nav-context.js';\nimport { navSectionClasses, navSectionCssVars } from './styles.js';\nimport { cn } from '../../utils/cn.js';\nimport { isActiveLink } from '../../utils/url.js';\n\n// =============================================================================\n// HORIZONTAL NAV LIST\n// =============================================================================\n\n/**\n * HorizontalNavList - Navigation item with dropdown for horizontal layout.\n */\nfunction HorizontalNavList({\n data,\n render,\n slotProps,\n checkPermissions,\n enabledRootRedirect,\n}: NavListProps): React.ReactNode {\n const pathname = useNavPathname();\n const anchorRef = useRef<HTMLButtonElement>(null);\n\n // Check if this item is active\n const isActive = useMemo(\n () => isActiveLink(pathname, data.path, data.deepMatch),\n [pathname, data.path, data.deepMatch]\n );\n\n // Check if any child is active\n const hasChild = Boolean(data.children?.length);\n const childActive = useMemo(() => {\n if (!hasChild) return false;\n return data.children!.some((child) => isActiveLink(pathname, child.path, child.deepMatch));\n }, [data.children, pathname, hasChild]);\n\n // Popover state\n const [open, setOpen] = useState(false);\n\n const handleOpen = useCallback(() => {\n if (hasChild) {\n setOpen(true);\n }\n }, [hasChild]);\n\n const handleClose = useCallback(() => {\n setOpen(false);\n }, []);\n\n // Close on route change\n useEffect(() => {\n handleClose();\n }, [pathname, handleClose]);\n\n // Check permissions\n if (checkPermissions && data.allowedRoles) {\n const hasPermission = checkPermissions(data.allowedRoles);\n if (!hasPermission) return null;\n }\n\n return (\n <NavLi>\n <NavItem\n ref={anchorRef}\n // Data\n path={data.path}\n title={data.title}\n icon={data.icon}\n info={data.info}\n caption={data.caption}\n disabled={data.disabled}\n // State\n active={isActive || childActive}\n open={open}\n // Options\n depth={1}\n hasChild={hasChild}\n enabledRootRedirect={enabledRootRedirect}\n render={render}\n slotProps={slotProps?.rootItem}\n // Events\n onMouseEnter={handleOpen}\n onMouseLeave={handleClose}\n />\n\n {hasChild && (\n <Popover\n open={open}\n anchorEl={anchorRef.current}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'left',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'left',\n }}\n slotProps={{\n paper: {\n onMouseEnter: handleOpen,\n onMouseLeave: handleClose,\n sx: {\n pointerEvents: 'auto',\n minWidth: 'var(--nav-dropdown-paper-width, 180px)',\n borderRadius: 'var(--nav-dropdown-paper-radius, 8px)',\n boxShadow: 'var(--nav-dropdown-paper-shadow)',\n ...slotProps?.dropdown?.paper,\n },\n },\n }}\n sx={{\n pointerEvents: 'none',\n }}\n disableRestoreFocus\n >\n <HorizontalDropdown\n data={data.children!}\n render={render}\n slotProps={slotProps}\n checkPermissions={checkPermissions}\n enabledRootRedirect={enabledRootRedirect}\n />\n </Popover>\n )}\n </NavLi>\n );\n}\n\n// =============================================================================\n// HORIZONTAL DROPDOWN\n// =============================================================================\n\ninterface HorizontalDropdownProps {\n data: NavItemDataProps[];\n render?: NavListProps['render'];\n slotProps?: NavListProps['slotProps'];\n checkPermissions?: NavListProps['checkPermissions'];\n enabledRootRedirect?: boolean;\n}\n\n/**\n * HorizontalDropdown - Dropdown content for horizontal nav items.\n */\nfunction HorizontalDropdown({\n data,\n render,\n slotProps,\n checkPermissions,\n enabledRootRedirect,\n}: HorizontalDropdownProps): React.ReactNode {\n const pathname = useNavPathname();\n\n return (\n <Paper elevation={0} sx={{ p: 1 }}>\n <NavUl sx={{ gap: 0.5 }}>\n {data.map((item) => {\n // Check permissions\n if (checkPermissions && item.allowedRoles) {\n const hasPermission = checkPermissions(item.allowedRoles);\n if (!hasPermission) return null;\n }\n\n const isActive = isActiveLink(pathname, item.path, item.deepMatch);\n\n return (\n <NavLi key={item.title}>\n <NavItem\n path={item.path}\n title={item.title}\n icon={item.icon}\n disabled={item.disabled}\n active={isActive}\n depth={2}\n render={render}\n slotProps={slotProps?.subItem}\n enabledRootRedirect={enabledRootRedirect}\n />\n </NavLi>\n );\n })}\n </NavUl>\n </Paper>\n );\n}\n\n// =============================================================================\n// NAV SECTION HORIZONTAL\n// =============================================================================\n\n/**\n * NavSectionHorizontal - Horizontal navigation section for header layouts.\n *\n * @example\n * ```tsx\n * const navConfig = [\n * {\n * items: [\n * { title: 'Home', path: '/', icon: <HomeIcon /> },\n * {\n * title: 'Products',\n * path: '/products',\n * children: [\n * { title: 'All', path: '/products' },\n * { title: 'New', path: '/products/new' },\n * ],\n * },\n * ],\n * },\n * ];\n *\n * <NavProvider pathname={pathname}>\n * <NavSectionHorizontal data={navConfig} />\n * </NavProvider>\n * ```\n */\nexport function NavSectionHorizontal({\n sx,\n data,\n render,\n className,\n slotProps,\n checkPermissions,\n enabledRootRedirect,\n cssVars: overridesVars,\n ...other\n}: NavSectionProps): React.ReactNode {\n const theme = useTheme();\n\n const cssVars = { ...navSectionCssVars.horizontal(theme), ...overridesVars };\n\n // Flatten all items from all groups\n const items = useMemo(() => data.flatMap((group) => group.items), [data]);\n\n return (\n <Nav\n className={cn(navSectionClasses.root, navSectionClasses.horizontal, className)}\n sx={[{ ...cssVars }, ...(Array.isArray(sx) ? sx : [sx])]}\n {...other}\n >\n <NavUl sx={{ flexDirection: 'row', gap: 'var(--nav-item-gap)' }}>\n {items.map((item) => (\n <HorizontalNavList\n key={item.title}\n data={item}\n render={render}\n slotProps={slotProps}\n checkPermissions={checkPermissions}\n enabledRootRedirect={enabledRootRedirect}\n />\n ))}\n </NavUl>\n </Nav>\n );\n}\n","'use client';\n\n/**\n * Mini Navigation Section\n *\n * Compact icon-only navigation for collapsed sidebars.\n *\n * @module @omnitron-dev/prism/components/nav-section\n */\n\nimport { useState, useCallback, useMemo, useEffect, useRef } from 'react';\nimport { useTheme, styled } from '@mui/material/styles';\nimport Popover from '@mui/material/Popover';\nimport Paper from '@mui/material/Paper';\nimport Tooltip from '@mui/material/Tooltip';\n\nimport type { NavItemDataProps, NavListProps, NavSectionProps } from './types.js';\nimport { Nav, NavUl, NavLi, NavItemBase, NavIcon } from './components.js';\nimport { NavItem } from './nav-item.js';\nimport { useNavPathname } from './nav-context.js';\nimport { navSectionClasses, navSectionCssVars } from './styles.js';\nimport { cn } from '../../utils/cn.js';\nimport { isActiveLink } from '../../utils/url.js';\n\n// =============================================================================\n// MINI NAV ITEM\n// =============================================================================\n\nconst MiniNavButton = styled(NavItemBase)(({ theme }) => ({\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n textAlign: 'center',\n padding: 'var(--nav-item-padding, 8px)',\n gap: 4,\n}));\n\nconst MiniTitle = styled('span')({\n fontSize: 'var(--nav-item-font-size, 0.625rem)',\n fontWeight: 500,\n lineHeight: 1.5,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n maxWidth: '100%',\n});\n\n// =============================================================================\n// MINI NAV LIST\n// =============================================================================\n\n/**\n * MiniNavList - Navigation item for mini layout with tooltip popover.\n */\nfunction MiniNavList({\n data,\n render,\n slotProps,\n checkPermissions,\n enabledRootRedirect,\n}: NavListProps): React.ReactNode {\n const pathname = useNavPathname();\n const anchorRef = useRef<HTMLButtonElement>(null);\n\n // Check if this item is active\n const isActive = useMemo(\n () => isActiveLink(pathname, data.path, data.deepMatch),\n [pathname, data.path, data.deepMatch]\n );\n\n // Check if any child is active\n const hasChild = Boolean(data.children?.length);\n const childActive = useMemo(() => {\n if (!hasChild) return false;\n return data.children!.some((child) => isActiveLink(pathname, child.path, child.deepMatch));\n }, [data.children, pathname, hasChild]);\n\n // Popover state\n const [open, setOpen] = useState(false);\n\n const handleOpen = useCallback(() => {\n if (hasChild) {\n setOpen(true);\n }\n }, [hasChild]);\n\n const handleClose = useCallback(() => {\n setOpen(false);\n }, []);\n\n // Close on route change\n useEffect(() => {\n handleClose();\n }, [pathname, handleClose]);\n\n // Check permissions\n if (checkPermissions && data.allowedRoles) {\n const hasPermission = checkPermissions(data.allowedRoles);\n if (!hasPermission) return null;\n }\n\n // Resolve icon\n const icon = typeof data.icon === 'string' && render?.navIcon ? render.navIcon[data.icon] : data.icon;\n\n const content = (\n <MiniNavButton\n ref={anchorRef}\n active={isActive || childActive}\n disabled={data.disabled}\n open={open}\n onMouseEnter={handleOpen}\n onMouseLeave={handleClose}\n sx={slotProps?.rootItem?.sx}\n >\n <NavIcon icon={icon} className={slotProps?.rootItem?.icon as string} />\n <MiniTitle>{data.title}</MiniTitle>\n </MiniNavButton>\n );\n\n return (\n <NavLi>\n {hasChild ? (\n <>\n {content}\n <Popover\n open={open}\n anchorEl={anchorRef.current}\n anchorOrigin={{\n vertical: 'center',\n horizontal: 'right',\n }}\n transformOrigin={{\n vertical: 'center',\n horizontal: 'left',\n }}\n slotProps={{\n paper: {\n onMouseEnter: handleOpen,\n onMouseLeave: handleClose,\n sx: {\n pointerEvents: 'auto',\n ml: 1,\n minWidth: 'var(--nav-tooltip-paper-width, 160px)',\n borderRadius: 1,\n ...slotProps?.dropdown?.paper,\n },\n },\n }}\n sx={{\n pointerEvents: 'none',\n }}\n disableRestoreFocus\n >\n <MiniDropdown\n data={data.children!}\n render={render}\n slotProps={slotProps}\n checkPermissions={checkPermissions}\n enabledRootRedirect={enabledRootRedirect}\n />\n </Popover>\n </>\n ) : (\n <Tooltip title={data.title} placement=\"right\" arrow>\n {content}\n </Tooltip>\n )}\n </NavLi>\n );\n}\n\n// =============================================================================\n// MINI DROPDOWN\n// =============================================================================\n\ninterface MiniDropdownProps {\n data: NavItemDataProps[];\n render?: NavListProps['render'];\n slotProps?: NavListProps['slotProps'];\n checkPermissions?: NavListProps['checkPermissions'];\n enabledRootRedirect?: boolean;\n}\n\n/**\n * MiniDropdown - Dropdown content for mini nav items.\n */\nfunction MiniDropdown({\n data,\n render,\n slotProps,\n checkPermissions,\n enabledRootRedirect,\n}: MiniDropdownProps): React.ReactNode {\n const pathname = useNavPathname();\n\n return (\n <Paper elevation={0} sx={{ p: 1 }}>\n <NavUl sx={{ gap: 0.5 }}>\n {data.map((item) => {\n // Check permissions\n if (checkPermissions && item.allowedRoles) {\n const hasPermission = checkPermissions(item.allowedRoles);\n if (!hasPermission) return null;\n }\n\n const isActive = isActiveLink(pathname, item.path, item.deepMatch);\n\n return (\n <NavLi key={item.title}>\n <NavItem\n path={item.path}\n title={item.title}\n icon={item.icon}\n disabled={item.disabled}\n active={isActive}\n depth={2}\n render={render}\n slotProps={slotProps?.subItem}\n enabledRootRedirect={enabledRootRedirect}\n />\n </NavLi>\n );\n })}\n </NavUl>\n </Paper>\n );\n}\n\n// =============================================================================\n// NAV SECTION MINI\n// =============================================================================\n\n/**\n * NavSectionMini - Compact navigation for collapsed sidebars.\n *\n * @example\n * ```tsx\n * const navConfig = [\n * {\n * items: [\n * { title: 'Dashboard', path: '/dashboard', icon: <DashboardIcon /> },\n * {\n * title: 'Users',\n * path: '/users',\n * icon: <UsersIcon />,\n * children: [\n * { title: 'List', path: '/users/list' },\n * { title: 'Create', path: '/users/create' },\n * ],\n * },\n * ],\n * },\n * ];\n *\n * <NavProvider pathname={pathname}>\n * <NavSectionMini data={navConfig} />\n * </NavProvider>\n * ```\n */\nexport function NavSectionMini({\n sx,\n data,\n render,\n className,\n slotProps,\n checkPermissions,\n enabledRootRedirect,\n cssVars: overridesVars,\n ...other\n}: NavSectionProps): React.ReactNode {\n const theme = useTheme();\n\n const cssVars = { ...navSectionCssVars.mini(theme), ...overridesVars };\n\n // Flatten all items from all groups\n const items = useMemo(() => data.flatMap((group) => group.items), [data]);\n\n return (\n <Nav\n className={cn(navSectionClasses.root, navSectionClasses.mini, className)}\n sx={[\n {\n ...cssVars,\n alignItems: 'center',\n },\n ...(Array.isArray(sx) ? sx : [sx]),\n ]}\n {...other}\n >\n <NavUl sx={{ gap: 'var(--nav-item-gap)', alignItems: 'center' }}>\n {items.map((item) => (\n <MiniNavList\n key={item.title}\n data={item}\n render={render}\n slotProps={slotProps}\n checkPermissions={checkPermissions}\n enabledRootRedirect={enabledRootRedirect}\n />\n ))}\n </NavUl>\n </Nav>\n );\n}\n","/**\n * Mega Menu Styles\n *\n * CSS custom properties and class names for mega menus.\n *\n * @module @omnitron-dev/prism/components/mega-menu\n */\n\nimport type { Theme, CSSObject } from '@mui/material/styles';\nimport type { MegaMenuVariant } from './types.js';\nimport { createComponentClasses } from '../../utils/create-classes.js';\n\n// =============================================================================\n// CLASS NAMES\n// =============================================================================\n\n/**\n * CSS class names for mega menu components.\n */\nexport const megaMenuClasses = createComponentClasses('mega-menu', [\n 'root',\n 'horizontal',\n 'vertical',\n 'mobile',\n 'ul',\n 'li',\n 'item',\n 'icon',\n 'title',\n 'info',\n 'arrow',\n 'dropdown',\n 'subheader',\n 'subItem',\n 'tags',\n 'moreLink',\n 'slide',\n 'active',\n 'disabled',\n 'open',\n] as const);\n\n// =============================================================================\n// CSS CUSTOM PROPERTIES\n// =============================================================================\n\n/**\n * Get CSS variables for mega menu based on variant.\n */\nexport function megaMenuCssVars(theme: Theme, variant: MegaMenuVariant): CSSObject {\n const commonVars: CSSObject = {\n // Item spacing\n '--nav-item-gap': '6px',\n '--nav-item-radius': '8px',\n // Icon\n '--nav-icon-size': '22px',\n '--nav-icon-margin': '0 8px 0 0',\n // Text\n '--nav-item-font-size': '0.875rem',\n '--nav-subheader-font-size': '0.6875rem',\n '--nav-subheader-font-weight': '700',\n // Colors - inactive\n '--nav-item-color': theme.palette.text.primary,\n '--nav-icon-color': theme.palette.text.secondary,\n '--nav-item-bg': 'transparent',\n // Colors - hover\n '--nav-item-hover-bg': theme.palette.action.hover,\n '--nav-item-hover-color': theme.palette.text.primary,\n // Colors - active\n '--nav-item-active-bg': theme.palette.action.selected,\n '--nav-item-active-color': theme.palette.primary.main,\n '--nav-icon-active-color': theme.palette.primary.main,\n // Colors - disabled\n '--nav-item-disabled-color': theme.palette.text.disabled,\n };\n\n switch (variant) {\n case 'horizontal':\n return {\n ...commonVars,\n '--nav-item-padding': '8px 14px',\n '--nav-item-min-height': '36px',\n // Dropdown\n '--nav-dropdown-width': '800px',\n '--nav-dropdown-max-height': '400px',\n '--nav-dropdown-radius': '12px',\n '--nav-dropdown-shadow': theme.shadows[20],\n '--nav-dropdown-padding': '24px',\n };\n\n case 'vertical':\n return {\n ...commonVars,\n '--nav-item-padding': '8px 12px',\n '--nav-item-min-height': '40px',\n // Dropdown\n '--nav-dropdown-width': '280px',\n '--nav-dropdown-max-height': '350px',\n '--nav-dropdown-radius': '10px',\n '--nav-dropdown-shadow': theme.shadows[16],\n '--nav-dropdown-padding': '16px',\n };\n\n case 'mobile':\n return {\n ...commonVars,\n '--nav-item-padding': '12px 16px',\n '--nav-item-min-height': '44px',\n // No dropdown for mobile - uses accordion style\n };\n\n default:\n return commonVars;\n }\n}\n","'use client';\n\n/**\n * Horizontal Mega Menu\n *\n * Rich dropdown navigation for header layouts.\n *\n * @module @omnitron-dev/prism/components/mega-menu\n */\n\nimport { useState, useCallback, useMemo, useRef, useEffect } from 'react';\nimport Box from '@mui/material/Box';\nimport { useNavPathname } from '../nav-section/nav-context.js';\nimport Link from '@mui/material/Link';\nimport Paper from '@mui/material/Paper';\nimport Popover from '@mui/material/Popover';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\nimport { styled, useTheme, alpha } from '@mui/material/styles';\n\nimport type { MegaMenuProps, MegaMenuListProps } from './types.js';\nimport { megaMenuClasses, megaMenuCssVars } from './styles.js';\nimport { cn } from '../../utils/cn.js';\nimport { isActiveLink, isExternalLink } from '../../utils/url.js';\n\n// =============================================================================\n// STYLED COMPONENTS\n// =============================================================================\n\nconst Nav = styled('nav')({\n display: 'flex',\n flexShrink: 0,\n});\n\nconst NavUl = styled('ul')({\n display: 'flex',\n listStyle: 'none',\n padding: 0,\n margin: 0,\n});\n\nconst NavLi = styled('li')({\n display: 'flex',\n});\n\nconst NavButton = styled('button')<{ active?: boolean; open?: boolean }>(({ theme, active, open }) => ({\n all: 'unset',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n padding: 'var(--nav-item-padding)',\n minHeight: 'var(--nav-item-min-height)',\n borderRadius: 'var(--nav-item-radius)',\n fontSize: 'var(--nav-item-font-size)',\n fontWeight: 500,\n color: 'var(--nav-item-color)',\n backgroundColor: 'var(--nav-item-bg)',\n transition: theme.transitions.create(['background-color', 'color'], {\n duration: theme.transitions.duration.shorter,\n }),\n '&:hover': {\n backgroundColor: 'var(--nav-item-hover-bg)',\n color: 'var(--nav-item-hover-color)',\n },\n ...(active && {\n backgroundColor: 'var(--nav-item-active-bg)',\n color: 'var(--nav-item-active-color)',\n }),\n ...(open && {\n backgroundColor: 'var(--nav-item-hover-bg)',\n }),\n '&:disabled': {\n color: 'var(--nav-item-disabled-color)',\n cursor: 'not-allowed',\n },\n}));\n\nconst IconWrapper = styled('span')({\n width: 'var(--nav-icon-size)',\n height: 'var(--nav-icon-size)',\n marginRight: 8,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: 'var(--nav-icon-color)',\n '& svg': {\n width: '100%',\n height: '100%',\n },\n});\n\nconst ArrowIcon = styled('span')<{ open?: boolean }>(({ open }) => ({\n marginLeft: 6,\n width: 16,\n height: 16,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'transform 0.2s',\n transform: open ? 'rotate(180deg)' : 'rotate(0deg)',\n '&::before': {\n content: '\"\"',\n width: 6,\n height: 6,\n borderStyle: 'solid',\n borderWidth: '0 0 1.5px 1.5px',\n borderColor: 'currentColor',\n transform: 'rotate(-45deg)',\n },\n}));\n\nconst DropdownContent = styled(Paper)(({ theme }) => ({\n width: 'var(--nav-dropdown-width)',\n maxHeight: 'var(--nav-dropdown-max-height)',\n borderRadius: 'var(--nav-dropdown-radius)',\n padding: 'var(--nav-dropdown-padding)',\n overflow: 'auto',\n display: 'flex',\n gap: 24,\n}));\n\nconst SectionColumn = styled('div')({\n flex: 1,\n minWidth: 0,\n});\n\nconst SectionHeader = styled(Typography)(({ theme }) => ({\n fontSize: 'var(--nav-subheader-font-size)',\n fontWeight: 'var(--nav-subheader-font-weight)',\n color: theme.palette.text.disabled,\n textTransform: 'uppercase',\n letterSpacing: '0.08em',\n marginBottom: 12,\n}));\n\nconst SubItemLink = styled(Link, {\n shouldForwardProp: (prop) => prop !== 'active',\n})<{ active?: boolean }>(({ theme, active }) => ({\n display: 'block',\n padding: '6px 0',\n fontSize: '0.875rem',\n color: active ? theme.palette.primary.main : theme.palette.text.secondary,\n textDecoration: 'none',\n transition: theme.transitions.create('color', {\n duration: theme.transitions.duration.shorter,\n }),\n '&:hover': {\n color: theme.palette.text.primary,\n },\n}));\n\nconst TagsContainer = styled(Box)(({ theme }) => ({\n display: 'flex',\n flexWrap: 'wrap',\n gap: 8,\n marginTop: 16,\n}));\n\nconst Tag = styled(Link)(({ theme }) => ({\n display: 'inline-flex',\n padding: '4px 10px',\n fontSize: '0.75rem',\n fontWeight: 500,\n color: theme.palette.text.secondary,\n backgroundColor: alpha(theme.palette.grey[500], 0.08),\n borderRadius: 6,\n textDecoration: 'none',\n transition: theme.transitions.create(['background-color', 'color'], {\n duration: theme.transitions.duration.shorter,\n }),\n '&:hover': {\n backgroundColor: alpha(theme.palette.grey[500], 0.16),\n color: theme.palette.text.primary,\n },\n}));\n\nconst MoreLink = styled(Link)(({ theme }) => ({\n display: 'inline-flex',\n alignItems: 'center',\n padding: '8px 0',\n fontSize: '0.875rem',\n fontWeight: 600,\n color: theme.palette.primary.main,\n textDecoration: 'none',\n '&:hover': {\n textDecoration: 'underline',\n },\n '&::after': {\n content: '\"→\"',\n marginLeft: 4,\n },\n}));\n\n// =============================================================================\n// MEGA MENU LIST\n// =============================================================================\n\nfunction MegaMenuList({ data, render, slotProps, slots, enabledRootRedirect }: MegaMenuListProps): React.ReactNode {\n const pathname = useNavPathname();\n const anchorRef = useRef<HTMLButtonElement>(null);\n\n const isActive = useMemo(\n () => isActiveLink(pathname, data.path, data.deepMatch),\n [pathname, data.path, data.deepMatch]\n );\n\n const hasChild = Boolean(data.children?.length || data.tags?.length || data.slides?.length);\n\n const childActive = useMemo(() => {\n if (!data.children?.length) return false;\n return data.children.some((section) => section.items.some((item) => isActiveLink(pathname, item.path)));\n }, [data.children, pathname]);\n\n const [open, setOpen] = useState(false);\n\n const handleOpen = useCallback(() => {\n if (hasChild) {\n setOpen(true);\n }\n }, [hasChild]);\n\n const handleClose = useCallback(() => {\n setOpen(false);\n }, []);\n\n useEffect(() => {\n handleClose();\n }, [pathname, handleClose]);\n\n // Resolve icon\n const icon = typeof data.icon === 'string' && render?.navIcon ? render.navIcon[data.icon] : data.icon;\n\n return (\n <NavLi className={megaMenuClasses.li}>\n <NavButton\n ref={anchorRef}\n className={cn(\n megaMenuClasses.item,\n (isActive || childActive) && megaMenuClasses.active,\n open && megaMenuClasses.open\n )}\n active={isActive || childActive}\n open={open}\n disabled={data.disabled}\n onMouseEnter={handleOpen}\n onMouseLeave={handleClose}\n >\n {icon && <IconWrapper className={megaMenuClasses.icon}>{icon}</IconWrapper>}\n <span className={megaMenuClasses.title}>{data.title}</span>\n {hasChild && <ArrowIcon open={open} className={megaMenuClasses.arrow} />}\n </NavButton>\n\n {hasChild && (\n <Popover\n open={open}\n anchorEl={anchorRef.current}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'left',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'left',\n }}\n slotProps={{\n paper: {\n onMouseEnter: handleOpen,\n onMouseLeave: handleClose,\n sx: {\n pointerEvents: 'auto',\n ...slotProps?.dropdown,\n },\n },\n }}\n sx={{\n pointerEvents: 'none',\n }}\n disableRestoreFocus\n >\n {slots?.topArea}\n\n <DropdownContent elevation={0} className={megaMenuClasses.dropdown}>\n {/* Child sections */}\n {data.children?.map((section, idx) => (\n <SectionColumn key={section.subheader ?? idx}>\n {section.subheader && (\n <SectionHeader className={megaMenuClasses.subheader}>{section.subheader}</SectionHeader>\n )}\n <Stack spacing={0.5}>\n {section.items.map((item) => {\n const itemActive = isActiveLink(pathname, item.path);\n const isExternal = isExternalLink(item.path);\n\n return (\n <SubItemLink\n key={item.title}\n href={item.path}\n active={itemActive}\n target={isExternal ? '_blank' : undefined}\n rel={isExternal ? 'noopener noreferrer' : undefined}\n className={cn(megaMenuClasses.subItem, itemActive && megaMenuClasses.active)}\n sx={slotProps?.subItem}\n >\n {item.title}\n </SubItemLink>\n );\n })}\n </Stack>\n\n {/* More link at bottom of section */}\n {idx === 0 && data.moreLink && (\n <Box sx={{ mt: 2 }}>\n <MoreLink href={data.moreLink.path} className={megaMenuClasses.moreLink} sx={slotProps?.moreLink}>\n {data.moreLink.title}\n </MoreLink>\n </Box>\n )}\n </SectionColumn>\n ))}\n </DropdownContent>\n\n {/* Tags */}\n {data.tags && data.tags.length > 0 && (\n <Box sx={{ px: 'var(--nav-dropdown-padding)', pb: 'var(--nav-dropdown-padding)' }}>\n <TagsContainer className={megaMenuClasses.tags} sx={slotProps?.tags}>\n {data.tags.map((tag) => (\n <Tag key={tag.title} href={tag.path}>\n {tag.title}\n </Tag>\n ))}\n </TagsContainer>\n </Box>\n )}\n\n {slots?.bottomArea}\n </Popover>\n )}\n </NavLi>\n );\n}\n\n// =============================================================================\n// MEGA MENU HORIZONTAL\n// =============================================================================\n\n/**\n * MegaMenuHorizontal - Rich dropdown navigation for header layouts.\n *\n * @example\n * ```tsx\n * const menuData = [\n * {\n * title: 'Products',\n * path: '/products',\n * icon: <ProductsIcon />,\n * children: [\n * {\n * subheader: 'Categories',\n * items: [\n * { title: 'Electronics', path: '/products/electronics' },\n * { title: 'Clothing', path: '/products/clothing' },\n * ],\n * },\n * {\n * subheader: 'Featured',\n * items: [\n * { title: 'New Arrivals', path: '/products/new' },\n * { title: 'Best Sellers', path: '/products/best' },\n * ],\n * },\n * ],\n * tags: [\n * { title: 'Sale', path: '/products?filter=sale' },\n * { title: 'Trending', path: '/products?filter=trending' },\n * ],\n * moreLink: { title: 'View All Products', path: '/products' },\n * },\n * { title: 'About', path: '/about' },\n * ];\n *\n * <MegaMenuHorizontal data={menuData} />\n * ```\n */\nexport function MegaMenuHorizontal({\n sx,\n data,\n render,\n slotProps,\n slots,\n className,\n enabledRootRedirect,\n cssVars: overridesVars,\n ...other\n}: MegaMenuProps): React.ReactNode {\n const theme = useTheme();\n\n const cssVars = { ...megaMenuCssVars(theme, 'horizontal'), ...overridesVars };\n\n return (\n <Nav\n className={cn(megaMenuClasses.root, megaMenuClasses.horizontal, className)}\n sx={[{ ...cssVars }, ...(Array.isArray(sx) ? sx : [sx])]}\n {...other}\n >\n <NavUl className={megaMenuClasses.ul} sx={{ gap: 'var(--nav-item-gap)' }}>\n {data.map((item) => (\n <MegaMenuList\n key={item.title}\n data={item}\n render={render}\n slotProps={slotProps}\n slots={slots}\n enabledRootRedirect={enabledRootRedirect}\n />\n ))}\n </NavUl>\n </Nav>\n );\n}\n","'use client';\n\n/**\n * Vertical Mega Menu\n *\n * Rich dropdown navigation for sidebar layouts.\n *\n * @module @omnitron-dev/prism/components/mega-menu\n */\n\nimport { useState, useCallback, useMemo, useRef, useEffect } from 'react';\nimport Box from '@mui/material/Box';\nimport { useNavPathname } from '../nav-section/nav-context.js';\nimport Link from '@mui/material/Link';\nimport Paper from '@mui/material/Paper';\nimport Popover from '@mui/material/Popover';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\nimport { styled, useTheme } from '@mui/material/styles';\n\nimport type { MegaMenuProps, MegaMenuListProps } from './types.js';\nimport { megaMenuClasses, megaMenuCssVars } from './styles.js';\nimport { cn } from '../../utils/cn.js';\nimport { isActiveLink, isExternalLink } from '../../utils/url.js';\n\n// =============================================================================\n// STYLED COMPONENTS\n// =============================================================================\n\nconst Nav = styled('nav')({\n display: 'flex',\n flexDirection: 'column',\n flexShrink: 0,\n});\n\nconst NavUl = styled('ul')({\n display: 'flex',\n flexDirection: 'column',\n listStyle: 'none',\n padding: 0,\n margin: 0,\n});\n\nconst NavLi = styled('li')({\n display: 'flex',\n flexDirection: 'column',\n});\n\nconst NavButton = styled('button')<{ active?: boolean; open?: boolean }>(({ theme, active, open }) => ({\n all: 'unset',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n padding: 'var(--nav-item-padding)',\n minHeight: 'var(--nav-item-min-height)',\n borderRadius: 'var(--nav-item-radius)',\n fontSize: 'var(--nav-item-font-size)',\n fontWeight: 500,\n color: 'var(--nav-item-color)',\n backgroundColor: 'var(--nav-item-bg)',\n transition: theme.transitions.create(['background-color', 'color'], {\n duration: theme.transitions.duration.shorter,\n }),\n '&:hover': {\n backgroundColor: 'var(--nav-item-hover-bg)',\n color: 'var(--nav-item-hover-color)',\n },\n ...(active && {\n backgroundColor: 'var(--nav-item-active-bg)',\n color: 'var(--nav-item-active-color)',\n }),\n ...(open && {\n backgroundColor: 'var(--nav-item-hover-bg)',\n }),\n '&:disabled': {\n color: 'var(--nav-item-disabled-color)',\n cursor: 'not-allowed',\n },\n}));\n\nconst IconWrapper = styled('span')({\n width: 'var(--nav-icon-size)',\n height: 'var(--nav-icon-size)',\n marginRight: 12,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: 'var(--nav-icon-color)',\n '& svg': {\n width: '100%',\n height: '100%',\n },\n});\n\nconst ArrowIcon = styled('span')<{ open?: boolean }>(({ open }) => ({\n marginLeft: 'auto',\n width: 16,\n height: 16,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'transform 0.2s',\n '&::before': {\n content: '\"\"',\n width: 5,\n height: 5,\n borderStyle: 'solid',\n borderWidth: '0 1.5px 1.5px 0',\n borderColor: 'currentColor',\n transform: 'rotate(-45deg)',\n },\n}));\n\nconst DropdownContent = styled(Paper)(({ theme }) => ({\n width: 'var(--nav-dropdown-width)',\n maxHeight: 'var(--nav-dropdown-max-height)',\n borderRadius: 'var(--nav-dropdown-radius)',\n padding: 'var(--nav-dropdown-padding)',\n overflow: 'auto',\n}));\n\nconst SectionHeader = styled(Typography)(({ theme }) => ({\n fontSize: 'var(--nav-subheader-font-size)',\n fontWeight: 'var(--nav-subheader-font-weight)',\n color: theme.palette.text.disabled,\n textTransform: 'uppercase',\n letterSpacing: '0.08em',\n marginBottom: 8,\n marginTop: 16,\n '&:first-of-type': {\n marginTop: 0,\n },\n}));\n\nconst SubItemLink = styled(Link, {\n shouldForwardProp: (prop) => prop !== 'active',\n})<{ active?: boolean }>(({ theme, active }) => ({\n display: 'block',\n padding: '6px 0',\n fontSize: '0.875rem',\n color: active ? theme.palette.primary.main : theme.palette.text.secondary,\n textDecoration: 'none',\n transition: theme.transitions.create('color', {\n duration: theme.transitions.duration.shorter,\n }),\n '&:hover': {\n color: theme.palette.text.primary,\n },\n}));\n\n// =============================================================================\n// MEGA MENU LIST\n// =============================================================================\n\nfunction MegaMenuList({ data, render, slotProps, slots, enabledRootRedirect }: MegaMenuListProps): React.ReactNode {\n const pathname = useNavPathname();\n const anchorRef = useRef<HTMLButtonElement>(null);\n\n const isActive = useMemo(\n () => isActiveLink(pathname, data.path, data.deepMatch),\n [pathname, data.path, data.deepMatch]\n );\n\n const hasChild = Boolean(data.children?.length);\n\n const childActive = useMemo(() => {\n if (!data.children?.length) return false;\n return data.children.some((section) => section.items.some((item) => isActiveLink(pathname, item.path)));\n }, [data.children, pathname]);\n\n const [open, setOpen] = useState(false);\n\n const handleOpen = useCallback(() => {\n if (hasChild) {\n setOpen(true);\n }\n }, [hasChild]);\n\n const handleClose = useCallback(() => {\n setOpen(false);\n }, []);\n\n useEffect(() => {\n handleClose();\n }, [pathname, handleClose]);\n\n // Resolve icon\n const icon = typeof data.icon === 'string' && render?.navIcon ? render.navIcon[data.icon] : data.icon;\n\n return (\n <NavLi className={megaMenuClasses.li}>\n <NavButton\n ref={anchorRef}\n className={cn(\n megaMenuClasses.item,\n (isActive || childActive) && megaMenuClasses.active,\n open && megaMenuClasses.open\n )}\n active={isActive || childActive}\n open={open}\n disabled={data.disabled}\n onMouseEnter={handleOpen}\n onMouseLeave={handleClose}\n >\n {icon && <IconWrapper className={megaMenuClasses.icon}>{icon}</IconWrapper>}\n <span className={megaMenuClasses.title}>{data.title}</span>\n {hasChild && <ArrowIcon open={open} className={megaMenuClasses.arrow} />}\n </NavButton>\n\n {hasChild && (\n <Popover\n open={open}\n anchorEl={anchorRef.current}\n anchorOrigin={{\n vertical: 'center',\n horizontal: 'right',\n }}\n transformOrigin={{\n vertical: 'center',\n horizontal: 'left',\n }}\n slotProps={{\n paper: {\n onMouseEnter: handleOpen,\n onMouseLeave: handleClose,\n sx: {\n pointerEvents: 'auto',\n ml: 1,\n ...slotProps?.dropdown,\n },\n },\n }}\n sx={{\n pointerEvents: 'none',\n }}\n disableRestoreFocus\n >\n {slots?.topArea}\n\n <DropdownContent elevation={0} className={megaMenuClasses.dropdown}>\n {data.children?.map((section, idx) => (\n <Box key={section.subheader ?? idx}>\n {section.subheader && (\n <SectionHeader className={megaMenuClasses.subheader}>{section.subheader}</SectionHeader>\n )}\n <Stack spacing={0.5}>\n {section.items.map((item) => {\n const itemActive = isActiveLink(pathname, item.path);\n const isExternal = isExternalLink(item.path);\n\n return (\n <SubItemLink\n key={item.title}\n href={item.path}\n active={itemActive}\n target={isExternal ? '_blank' : undefined}\n rel={isExternal ? 'noopener noreferrer' : undefined}\n className={cn(megaMenuClasses.subItem, itemActive && megaMenuClasses.active)}\n sx={slotProps?.subItem}\n >\n {item.title}\n </SubItemLink>\n );\n })}\n </Stack>\n </Box>\n ))}\n </DropdownContent>\n\n {slots?.bottomArea}\n </Popover>\n )}\n </NavLi>\n );\n}\n\n// =============================================================================\n// MEGA MENU VERTICAL\n// =============================================================================\n\n/**\n * MegaMenuVertical - Rich dropdown navigation for sidebar layouts.\n *\n * @example\n * ```tsx\n * const menuData = [\n * {\n * title: 'Products',\n * path: '/products',\n * icon: <ProductsIcon />,\n * children: [\n * {\n * subheader: 'Categories',\n * items: [\n * { title: 'Electronics', path: '/products/electronics' },\n * { title: 'Clothing', path: '/products/clothing' },\n * ],\n * },\n * ],\n * },\n * ];\n *\n * <MegaMenuVertical data={menuData} />\n * ```\n */\nexport function MegaMenuVertical({\n sx,\n data,\n render,\n slotProps,\n slots,\n className,\n enabledRootRedirect,\n cssVars: overridesVars,\n ...other\n}: MegaMenuProps): React.ReactNode {\n const theme = useTheme();\n\n const cssVars = { ...megaMenuCssVars(theme, 'vertical'), ...overridesVars };\n\n return (\n <Nav\n className={cn(megaMenuClasses.root, megaMenuClasses.vertical, className)}\n sx={[{ ...cssVars }, ...(Array.isArray(sx) ? sx : [sx])]}\n {...other}\n >\n <NavUl className={megaMenuClasses.ul} sx={{ gap: 'var(--nav-item-gap)' }}>\n {data.map((item) => (\n <MegaMenuList\n key={item.title}\n data={item}\n render={render}\n slotProps={slotProps}\n slots={slots}\n enabledRootRedirect={enabledRootRedirect}\n />\n ))}\n </NavUl>\n </Nav>\n );\n}\n","'use client';\n\n/**\n * Mobile Mega Menu\n *\n * Accordion-style navigation for mobile layouts.\n *\n * @module @omnitron-dev/prism/components/mega-menu\n */\n\nimport { useState, useCallback, useMemo } from 'react';\nimport Box from '@mui/material/Box';\nimport { useNavPathname } from '../nav-section/nav-context.js';\nimport Link from '@mui/material/Link';\nimport Collapse from '@mui/material/Collapse';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\nimport { styled, useTheme, type Theme } from '@mui/material/styles';\n\nimport type { MegaMenuProps, MegaMenuListProps } from './types.js';\nimport { megaMenuClasses, megaMenuCssVars } from './styles.js';\nimport { cn } from '../../utils/cn.js';\nimport { isActiveLink, isExternalLink } from '../../utils/url.js';\n\n// =============================================================================\n// STYLED COMPONENTS\n// =============================================================================\n\nconst Nav = styled('nav')({\n display: 'flex',\n flexDirection: 'column',\n flexShrink: 0,\n width: '100%',\n});\n\nconst NavUl = styled('ul')({\n display: 'flex',\n flexDirection: 'column',\n listStyle: 'none',\n padding: 0,\n margin: 0,\n width: '100%',\n});\n\nconst NavLi = styled('li')({\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n});\n\nconst navItemStyles = (theme: Theme, active?: boolean) => ({\n all: 'unset' as const,\n boxSizing: 'border-box' as const,\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n padding: 'var(--nav-item-padding)',\n minHeight: 'var(--nav-item-min-height)',\n fontSize: 'var(--nav-item-font-size)',\n fontWeight: 500,\n color: 'var(--nav-item-color)',\n borderBottom: `1px solid ${theme.palette.divider}`,\n transition: theme.transitions.create(['background-color', 'color'], {\n duration: theme.transitions.duration.shorter,\n }),\n '&:hover': {\n backgroundColor: 'var(--nav-item-hover-bg)',\n color: 'var(--nav-item-hover-color)',\n },\n ...(active && {\n color: 'var(--nav-item-active-color)',\n }),\n});\n\nconst NavButton = styled('button')<{ active?: boolean; open?: boolean }>(({ theme, active }) => ({\n ...navItemStyles(theme, active),\n '&:disabled': {\n color: 'var(--nav-item-disabled-color)',\n cursor: 'not-allowed',\n },\n}));\n\nconst NavLink = styled('a')<{ active?: boolean }>(({ theme, active }) => navItemStyles(theme, active));\n\nconst IconWrapper = styled('span')({\n width: 'var(--nav-icon-size)',\n height: 'var(--nav-icon-size)',\n marginRight: 12,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: 'var(--nav-icon-color)',\n '& svg': {\n width: '100%',\n height: '100%',\n },\n});\n\nconst ArrowIcon = styled('span')<{ open?: boolean }>(({ open }) => ({\n marginLeft: 'auto',\n width: 20,\n height: 20,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'transform 0.2s',\n transform: open ? 'rotate(180deg)' : 'rotate(0deg)',\n '&::before': {\n content: '\"\"',\n width: 6,\n height: 6,\n borderStyle: 'solid',\n borderWidth: '0 0 2px 2px',\n borderColor: 'currentColor',\n transform: 'rotate(-45deg)',\n },\n}));\n\nconst CollapseContent = styled(Box)(({ theme }) => ({\n padding: '8px 0',\n paddingLeft: 40,\n backgroundColor: theme.palette.background.neutral,\n}));\n\nconst SectionHeader = styled(Typography)(({ theme }) => ({\n fontSize: 'var(--nav-subheader-font-size)',\n fontWeight: 'var(--nav-subheader-font-weight)',\n color: theme.palette.text.disabled,\n textTransform: 'uppercase',\n letterSpacing: '0.08em',\n padding: '12px 16px 8px',\n}));\n\nconst SubItemLink = styled(Link, {\n shouldForwardProp: (prop) => prop !== 'active',\n})<{ active?: boolean }>(({ theme, active }) => ({\n display: 'block',\n padding: '10px 16px',\n fontSize: '0.875rem',\n color: active ? theme.palette.primary.main : theme.palette.text.secondary,\n textDecoration: 'none',\n transition: theme.transitions.create('color', {\n duration: theme.transitions.duration.shorter,\n }),\n '&:hover': {\n color: theme.palette.text.primary,\n },\n}));\n\n// =============================================================================\n// MEGA MENU LIST\n// =============================================================================\n\nfunction MegaMenuList({ data, render, slotProps, enabledRootRedirect }: MegaMenuListProps): React.ReactNode {\n const pathname = useNavPathname();\n\n const isActive = useMemo(\n () => isActiveLink(pathname, data.path, data.deepMatch),\n [pathname, data.path, data.deepMatch]\n );\n\n const hasChild = Boolean(data.children?.length);\n\n const childActive = useMemo(() => {\n if (!data.children?.length) return false;\n return data.children.some((section) => section.items.some((item) => isActiveLink(pathname, item.path)));\n }, [data.children, pathname]);\n\n // Start open if child is active\n const [open, setOpen] = useState(childActive);\n\n const handleToggle = useCallback(() => {\n if (hasChild) {\n setOpen((prev) => !prev);\n }\n }, [hasChild]);\n\n // Resolve icon\n const icon = typeof data.icon === 'string' && render?.navIcon ? render.navIcon[data.icon] : data.icon;\n\n // Simple link for items without children\n if (!hasChild) {\n const isExternal = isExternalLink(data.path);\n return (\n <NavLi className={megaMenuClasses.li}>\n <NavLink\n href={data.path}\n className={cn(megaMenuClasses.item, isActive && megaMenuClasses.active)}\n active={isActive}\n target={isExternal ? '_blank' : undefined}\n rel={isExternal ? 'noopener noreferrer' : undefined}\n >\n {icon && <IconWrapper className={megaMenuClasses.icon}>{icon}</IconWrapper>}\n <span className={megaMenuClasses.title}>{data.title}</span>\n </NavLink>\n </NavLi>\n );\n }\n\n return (\n <NavLi className={megaMenuClasses.li}>\n <NavButton\n className={cn(\n megaMenuClasses.item,\n (isActive || childActive) && megaMenuClasses.active,\n open && megaMenuClasses.open\n )}\n active={isActive || childActive}\n open={open}\n disabled={data.disabled}\n onClick={handleToggle}\n >\n {icon && <IconWrapper className={megaMenuClasses.icon}>{icon}</IconWrapper>}\n <span className={megaMenuClasses.title}>{data.title}</span>\n <ArrowIcon open={open} className={megaMenuClasses.arrow} />\n </NavButton>\n\n <Collapse in={open} unmountOnExit>\n <CollapseContent>\n {data.children?.map((section, idx) => (\n <Box key={section.subheader ?? idx}>\n {section.subheader && (\n <SectionHeader className={megaMenuClasses.subheader}>{section.subheader}</SectionHeader>\n )}\n <Stack>\n {section.items.map((item) => {\n const itemActive = isActiveLink(pathname, item.path);\n const isExternal = isExternalLink(item.path);\n\n return (\n <SubItemLink\n key={item.title}\n href={item.path}\n active={itemActive}\n target={isExternal ? '_blank' : undefined}\n rel={isExternal ? 'noopener noreferrer' : undefined}\n className={cn(megaMenuClasses.subItem, itemActive && megaMenuClasses.active)}\n sx={slotProps?.subItem}\n >\n {item.title}\n </SubItemLink>\n );\n })}\n </Stack>\n </Box>\n ))}\n </CollapseContent>\n </Collapse>\n </NavLi>\n );\n}\n\n// =============================================================================\n// MEGA MENU MOBILE\n// =============================================================================\n\n/**\n * MegaMenuMobile - Accordion-style navigation for mobile layouts.\n *\n * @example\n * ```tsx\n * const menuData = [\n * {\n * title: 'Products',\n * path: '/products',\n * icon: <ProductsIcon />,\n * children: [\n * {\n * subheader: 'Categories',\n * items: [\n * { title: 'Electronics', path: '/products/electronics' },\n * { title: 'Clothing', path: '/products/clothing' },\n * ],\n * },\n * ],\n * },\n * ];\n *\n * <MegaMenuMobile data={menuData} />\n * ```\n */\nexport function MegaMenuMobile({\n sx,\n data,\n render,\n slotProps,\n className,\n enabledRootRedirect,\n cssVars: overridesVars,\n ...other\n}: MegaMenuProps): React.ReactNode {\n const theme = useTheme();\n\n const cssVars = { ...megaMenuCssVars(theme, 'mobile'), ...overridesVars };\n\n return (\n <Nav\n className={cn(megaMenuClasses.root, megaMenuClasses.mobile, className)}\n sx={[{ ...cssVars }, ...(Array.isArray(sx) ? sx : [sx])]}\n {...other}\n >\n <NavUl className={megaMenuClasses.ul}>\n {data.map((item) => (\n <MegaMenuList\n key={item.title}\n data={item}\n render={render}\n slotProps={slotProps}\n enabledRootRedirect={enabledRootRedirect}\n />\n ))}\n </NavUl>\n </Nav>\n );\n}\n","'use client';\n\nimport { createContext, useContext, useState, useEffect, useRef, useCallback, type ReactNode } from 'react';\n\ninterface ScrollSpyContextValue {\n activeId: string | null;\n registerSection: (id: string, element: HTMLElement) => void;\n unregisterSection: (id: string) => void;\n}\n\nconst ScrollSpyContext = createContext<ScrollSpyContextValue>({\n activeId: null,\n registerSection: () => {},\n unregisterSection: () => {},\n});\n\nexport function useScrollSpy() {\n return useContext(ScrollSpyContext);\n}\n\ninterface ScrollSpyProviderProps {\n children: ReactNode;\n /** Offset from top in pixels for activation threshold */\n offset?: number;\n /** Root element to observe (defaults to viewport) */\n root?: HTMLElement | null;\n /**\n * CSS selector for heading elements to auto-observe.\n * When set, headings matching this selector inside the container\n * are automatically registered (no need for ScrollSpySection wrappers).\n * @default 'h1[id], h2[id], h3[id], h4[id], h5[id], h6[id]'\n */\n headingSelector?: string;\n /** Ref to the container to scan for headings. Defaults to document. */\n containerRef?: React.RefObject<HTMLElement | null>;\n}\n\nexport function ScrollSpyProvider({\n children,\n offset = 80,\n root = null,\n headingSelector = 'h1[id], h2[id], h3[id], h4[id], h5[id], h6[id]',\n containerRef,\n}: ScrollSpyProviderProps) {\n const [activeId, setActiveId] = useState<string | null>(null);\n const sectionsRef = useRef<Map<string, HTMLElement>>(new Map());\n const observerRef = useRef<IntersectionObserver | null>(null);\n const wrapperRef = useRef<HTMLDivElement>(null);\n\n // Create IntersectionObserver\n const createObserver = useCallback(() => {\n observerRef.current?.disconnect();\n\n const observer = new IntersectionObserver(\n (entries) => {\n // Find the topmost visible entry\n const visible = entries\n .filter((e) => e.isIntersecting)\n .sort((a, b) => a.boundingClientRect.top - b.boundingClientRect.top);\n\n if (visible.length > 0) {\n setActiveId(visible[0].target.id);\n }\n },\n {\n root,\n rootMargin: `-${offset}px 0px -60% 0px`,\n threshold: 0,\n }\n );\n\n sectionsRef.current.forEach((element) => observer.observe(element));\n observerRef.current = observer;\n }, [offset, root]);\n\n // Auto-scan for headings with IDs\n useEffect(() => {\n if (!headingSelector) return undefined;\n\n // Wait a tick for content to render\n const timer = setTimeout(() => {\n const container = containerRef?.current ?? wrapperRef.current;\n if (!container) return;\n\n const headings = container.querySelectorAll<HTMLElement>(headingSelector);\n headings.forEach((heading) => {\n if (heading.id) {\n sectionsRef.current.set(heading.id, heading);\n }\n });\n\n createObserver();\n }, 100);\n\n return () => {\n clearTimeout(timer);\n observerRef.current?.disconnect();\n };\n }, [headingSelector, containerRef, createObserver]);\n\n // Also observe via MutationObserver to catch dynamically added headings\n useEffect(() => {\n if (!headingSelector) return undefined;\n\n const container = containerRef?.current ?? wrapperRef.current;\n if (!container) return undefined;\n\n const mutationObserver = new MutationObserver(() => {\n const headings = container.querySelectorAll<HTMLElement>(headingSelector);\n let changed = false;\n\n headings.forEach((heading) => {\n if (heading.id && !sectionsRef.current.has(heading.id)) {\n sectionsRef.current.set(heading.id, heading);\n changed = true;\n }\n });\n\n if (changed) {\n createObserver();\n }\n });\n\n mutationObserver.observe(container, { childList: true, subtree: true });\n\n return () => mutationObserver.disconnect();\n }, [headingSelector, containerRef, createObserver]);\n\n const registerSection = useCallback((id: string, element: HTMLElement) => {\n sectionsRef.current.set(id, element);\n observerRef.current?.observe(element);\n }, []);\n\n const unregisterSection = useCallback((id: string) => {\n const element = sectionsRef.current.get(id);\n if (element) observerRef.current?.unobserve(element);\n sectionsRef.current.delete(id);\n }, []);\n\n return (\n <ScrollSpyContext.Provider value={{ activeId, registerSection, unregisterSection }}>\n <div ref={wrapperRef}>{children}</div>\n </ScrollSpyContext.Provider>\n );\n}\n","'use client';\n\nimport { useEffect, useRef, type ReactNode } from 'react';\nimport Box from '@mui/material/Box';\nimport type { SxProps, Theme } from '@mui/material/styles';\nimport { useScrollSpy } from './scroll-spy-provider';\n\ninterface ScrollSpySectionProps {\n id: string;\n children: ReactNode;\n sx?: SxProps<Theme>;\n}\n\nexport function ScrollSpySection({ id, children, sx }: ScrollSpySectionProps) {\n const ref = useRef<HTMLDivElement>(null);\n const { registerSection, unregisterSection } = useScrollSpy();\n\n useEffect(() => {\n const element = ref.current;\n if (!element) return undefined;\n registerSection(id, element);\n return () => unregisterSection(id);\n }, [id, registerSection, unregisterSection]);\n\n return (\n <Box ref={ref} id={id} sx={sx}>\n {children}\n </Box>\n );\n}\n","'use client';\n\nimport { type ReactNode } from 'react';\nimport Box from '@mui/material/Box';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\ninterface DocLayoutProps {\n sidebar?: ReactNode;\n sectionNav?: ReactNode;\n children: ReactNode;\n sx?: SxProps<Theme>;\n}\n\n/**\n * 3-column responsive documentation layout.\n * - Left: sidebar (collapsible tree nav)\n * - Center: content (fills available width)\n * - Right: section nav (ToC from headings)\n */\nexport function DocLayout({ sidebar, sectionNav, children, sx }: DocLayoutProps) {\n return (\n <Box\n sx={{\n display: 'flex',\n width: '100%',\n ...(sx as any),\n }}\n >\n {sidebar && (\n <Box\n component=\"nav\"\n sx={{\n width: 272,\n flexShrink: 0,\n display: { xs: 'none', md: 'block' },\n position: 'sticky',\n top: 80,\n alignSelf: 'flex-start',\n maxHeight: 'calc(100vh - 100px)',\n overflowY: 'auto',\n pr: 3,\n borderRight: 1,\n borderColor: 'divider',\n }}\n >\n {sidebar}\n </Box>\n )}\n\n <Box\n component=\"main\"\n sx={{\n flex: 1,\n minWidth: 0,\n px: { xs: 2, md: 4 },\n }}\n >\n {children}\n </Box>\n\n {sectionNav && (\n <Box\n component=\"aside\"\n sx={{\n width: 240,\n flexShrink: 0,\n display: { xs: 'none', lg: 'block' },\n position: 'sticky',\n top: 80,\n alignSelf: 'flex-start',\n maxHeight: 'calc(100vh - 100px)',\n overflowY: 'auto',\n pl: 3,\n }}\n >\n {sectionNav}\n </Box>\n )}\n </Box>\n );\n}\n","'use client';\n\nimport { useState } from 'react';\nimport Box from '@mui/material/Box';\nimport List from '@mui/material/List';\nimport ListItemButton from '@mui/material/ListItemButton';\nimport ListItemText from '@mui/material/ListItemText';\nimport Collapse from '@mui/material/Collapse';\nimport Typography from '@mui/material/Typography';\nimport { alpha } from '@mui/material/styles';\n\nexport interface DocSidebarItem {\n id: string;\n label: string;\n href?: string;\n children?: DocSidebarItem[];\n}\n\ninterface DocSidebarProps {\n items: DocSidebarItem[];\n activeId?: string;\n onItemClick?: (item: DocSidebarItem) => void;\n title?: string;\n}\n\nexport function DocSidebar({ items, activeId, onItemClick, title }: DocSidebarProps) {\n return (\n <Box>\n {title && (\n <Typography\n variant=\"subtitle2\"\n sx={{\n px: 1.5,\n pt: 0.5,\n pb: 2,\n fontWeight: 700,\n fontSize: '0.8125rem',\n color: 'text.secondary',\n letterSpacing: '0.01em',\n }}\n >\n {title}\n </Typography>\n )}\n <List dense disablePadding>\n {items.map((item) => (\n <SidebarNode key={item.id} item={item} activeId={activeId} onItemClick={onItemClick} depth={0} />\n ))}\n </List>\n </Box>\n );\n}\n\nfunction SidebarNode({\n item,\n activeId,\n onItemClick,\n depth,\n}: {\n item: DocSidebarItem;\n activeId?: string;\n onItemClick?: (item: DocSidebarItem) => void;\n depth: number;\n}) {\n const hasChildren = item.children && item.children.length > 0;\n const isActive = activeId === item.id;\n const [open, setOpen] = useState(true);\n const isCategory = hasChildren && !item.href;\n\n return (\n <>\n <ListItemButton\n selected={isActive}\n onClick={() => {\n if (hasChildren) setOpen(!open);\n onItemClick?.(item);\n }}\n sx={{\n pl: 1.5 + depth * 1.5,\n pr: 1,\n py: isCategory ? 0.75 : 0.5,\n borderRadius: 1,\n mx: 0.5,\n mb: 0.25,\n minHeight: 0,\n ...(isCategory && {\n mt: depth === 0 ? 1 : 0.5,\n }),\n ...(isActive && {\n bgcolor: (theme) => alpha(theme.palette.primary.main, 0.08),\n color: 'primary.main',\n }),\n }}\n >\n <ListItemText\n primary={item.label}\n slotProps={{\n primary: {\n variant: 'body2',\n noWrap: true,\n sx: {\n fontWeight: isCategory ? 600 : isActive ? 600 : 400,\n fontSize: '0.8125rem',\n ...(isCategory && { color: 'text.primary' }),\n },\n },\n }}\n />\n </ListItemButton>\n {hasChildren && (\n <Collapse in={open}>\n <List dense disablePadding>\n {item.children!.map((child) => (\n <SidebarNode\n key={child.id}\n item={child}\n activeId={activeId}\n onItemClick={onItemClick}\n depth={depth + 1}\n />\n ))}\n </List>\n </Collapse>\n )}\n </>\n );\n}\n","'use client';\n\nimport { useCallback } from 'react';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport { alpha } from '@mui/material/styles';\nimport { useScrollSpy } from '../scroll-spy/index.js';\n\nexport interface DocHeading {\n id: string;\n text: string;\n level: number;\n}\n\ninterface DocSectionNavProps {\n headings: DocHeading[];\n title?: string;\n}\n\n/**\n * Right-side table of contents connected to ScrollSpy.\n * Highlights the currently visible section with a smooth indicator.\n */\nexport function DocSectionNav({ headings, title = 'On this page' }: DocSectionNavProps) {\n const { activeId } = useScrollSpy();\n\n const handleClick = useCallback((e: React.MouseEvent<HTMLAnchorElement>, id: string) => {\n e.preventDefault();\n const element = document.getElementById(id);\n if (element) {\n element.scrollIntoView({ behavior: 'smooth', block: 'start' });\n window.history.replaceState(null, '', `#${id}`);\n }\n }, []);\n\n if (headings.length === 0) return null;\n\n return (\n <Box>\n <Typography\n variant=\"overline\"\n sx={{\n display: 'block',\n mb: 2,\n color: 'text.secondary',\n fontSize: '0.6875rem',\n fontWeight: 700,\n letterSpacing: '0.08em',\n }}\n >\n {title}\n </Typography>\n\n <Box\n component=\"nav\"\n sx={{\n position: 'relative',\n borderLeft: 1,\n borderColor: 'divider',\n }}\n >\n {headings.map((heading) => {\n const isActive = activeId === heading.id;\n const indent = (heading.level - 2) * 1.5;\n return (\n <Box\n key={heading.id}\n component=\"a\"\n href={`#${heading.id}`}\n onClick={(e: React.MouseEvent<HTMLAnchorElement>) => handleClick(e, heading.id)}\n sx={{\n display: 'block',\n py: 0.75,\n pl: indent + 2,\n pr: 1,\n ml: '-1px',\n fontSize: '0.8125rem',\n lineHeight: 1.5,\n textDecoration: 'none',\n color: isActive ? 'primary.main' : 'text.disabled',\n fontWeight: isActive ? 600 : 400,\n borderLeft: 2,\n borderColor: isActive ? 'primary.main' : 'transparent',\n transition: 'color 0.2s ease, border-color 0.2s ease',\n cursor: 'pointer',\n '&:hover': {\n color: isActive ? 'primary.main' : 'text.primary',\n backgroundColor: (theme) => alpha(theme.palette.action.hover, 0.04),\n borderRadius: '0 6px 6px 0',\n },\n }}\n >\n {heading.text}\n </Box>\n );\n })}\n </Box>\n </Box>\n );\n}\n","// ---------------------------------------------------------------------------\n// CSS class names for content renderer components\n// ---------------------------------------------------------------------------\n\nconst PREFIX = 'prism-content';\n\nexport const contentClasses = {\n root: `${PREFIX}__root`,\n compact: `${PREFIX}__compact`,\n tiptap: `${PREFIX}__tiptap`,\n markdown: `${PREFIX}__markdown`,\n image: `${PREFIX}__image`,\n link: `${PREFIX}__link`,\n checkbox: `${PREFIX}__checkbox`,\n codeBlock: `${PREFIX}__code-block`,\n codeBlockTitle: `${PREFIX}__code-block-title`,\n codeBlockCopy: `${PREFIX}__code-block-copy`,\n codeBlockHighlight: `${PREFIX}__code-block-highlight`,\n codeInline: `${PREFIX}__code-inline`,\n spoiler: `${PREFIX}__spoiler`,\n admonition: `${PREFIX}__admonition`,\n admonitionNote: `${PREFIX}__admonition-note`,\n admonitionTip: `${PREFIX}__admonition-tip`,\n admonitionWarning: `${PREFIX}__admonition-warning`,\n admonitionDanger: `${PREFIX}__admonition-danger`,\n admonitionInfo: `${PREFIX}__admonition-info`,\n admonitionCaution: `${PREFIX}__admonition-caution`,\n admonitionTitle: `${PREFIX}__admonition-title`,\n admonitionContent: `${PREFIX}__admonition-content`,\n tabs: `${PREFIX}__tabs`,\n tabsHeader: `${PREFIX}__tabs-header`,\n tabsTab: `${PREFIX}__tabs-tab`,\n tabsTabActive: `${PREFIX}__tabs-tab-active`,\n tabsPanel: `${PREFIX}__tabs-panel`,\n figure: `${PREFIX}__figure`,\n figcaption: `${PREFIX}__figcaption`,\n kbd: `${PREFIX}__kbd`,\n};\n","'use client';\n\nimport { styled, alpha } from '@mui/material/styles';\nimport { contentClasses } from './classes.js';\n\n// ---------------------------------------------------------------------------\n// Shared content root — applies rich typography and element styling.\n// Used by both TipTapRenderer (for TipTap JSON) and Markdown (for MD strings).\n// ---------------------------------------------------------------------------\n\nconst MARGIN = '0.75em';\nconst CODE_FONT = \"'JetBrains Mono', 'Fira Code', 'Cascadia Code', Menlo, Monaco, 'Courier New', monospace\";\n\nexport const ContentRoot = styled('div')(({ theme }) => ({\n // General spacing between adjacent elements\n '> * + *': {\n marginTop: 0,\n marginBottom: MARGIN,\n },\n\n // ─── Headings ───────────────────────────────────────────────\n '& h1, & h2, & h3, & h4, & h5, & h6': {\n scrollMarginTop: 100, // Account for sticky header on anchor jump\n },\n // First heading in content should not have excessive top margin\n '& > h1:first-of-type, & > h2:first-of-type, & > h3:first-of-type': {\n marginTop: 0,\n },\n h1: { ...theme.typography.h1, marginTop: 40, marginBottom: 12 },\n h2: { ...theme.typography.h2, marginTop: 40, marginBottom: 12 },\n h3: { ...theme.typography.h3, marginTop: 32, marginBottom: 8 },\n h4: { ...theme.typography.h4, marginTop: 24, marginBottom: 8 },\n h5: { ...theme.typography.h5, marginTop: 24, marginBottom: 8 },\n h6: { ...theme.typography.h6, marginTop: 24, marginBottom: 8 },\n\n // ─── Paragraph ──────────────────────────────────────────────\n p: {\n ...theme.typography.body1,\n marginBottom: '1.25rem',\n lineHeight: 1.8,\n },\n\n // ─── Horizontal rule ───────────────────────────────────────\n hr: {\n flexShrink: 0,\n borderWidth: 0,\n margin: '2em 0',\n borderStyle: 'solid',\n borderBottomWidth: 'thin',\n borderColor: theme.palette.divider,\n },\n\n // ─── Images ─────────────────────────────────────────────────\n [`& .${contentClasses.image}`]: {\n width: '100%',\n height: 'auto',\n maxWidth: '100%',\n margin: 'auto auto 1.25em',\n borderRadius: Number(theme.shape.borderRadius) * 2,\n },\n // Plain img fallback\n '& img:not([class])': {\n maxWidth: '100%',\n height: 'auto',\n borderRadius: Number(theme.shape.borderRadius) * 2,\n marginBottom: '1.25em',\n },\n\n // ─── Links ──────────────────────────────────────────────────\n '& a': {\n color: theme.palette.primary.main,\n textDecoration: 'none',\n '&:hover': {\n textDecoration: 'underline',\n },\n },\n\n // ─── Lists ──────────────────────────────────────────────────\n '& ul': {\n listStyleType: 'disc',\n },\n '& ul, & ol': {\n paddingLeft: 24,\n marginBottom: '1.25rem',\n '& > li': {\n lineHeight: 2,\n // Markdown wraps every list-item body in a `<p>`. With\n // `display: inline-block` (the previous setting), Chromium\n // refuses to render the `<li>`'s ::marker at all — the\n // disc/decimal vanishes and the list looks like a series of\n // bullet-less paragraphs. `display: inline` collapses the\n // `<p>` into inline flow so the marker positions normally;\n // `margin: 0` keeps the LI height tight against the marker\n // baseline. Multi-paragraph list items (rare here, but\n // possible) still render — subsequent `<p>` siblings get a\n // line break by the inline-flow rules.\n '& > p': {\n margin: 0,\n display: 'inline',\n },\n },\n },\n // Nested lists\n '& ul ul, & ol ol, & ul ol, & ol ul': {\n marginBottom: 0,\n },\n\n // ─── Task list (TipTap taskList / GFM checkboxes) ──────────\n '& ul[data-type=\"taskList\"]': {\n listStyle: 'none',\n paddingLeft: 4,\n '& li': {\n display: 'flex',\n alignItems: 'flex-start',\n gap: 8,\n '& > label': {\n marginTop: 4,\n },\n },\n },\n\n // ─── Blockquote ─────────────────────────────────────────────\n '& blockquote': {\n lineHeight: 1.6,\n fontSize: '1em',\n margin: '24px 0',\n position: 'relative',\n padding: theme.spacing(2.5, 3, 2.5, 7),\n color: theme.palette.text.secondary,\n borderLeft: `4px solid ${theme.palette.primary.main}`,\n borderRadius: Number(theme.shape.borderRadius) * 2,\n backgroundColor: alpha(theme.palette.primary.main, 0.04),\n '& p': {\n margin: 0,\n fontSize: 'inherit',\n },\n '& p + p': {\n marginTop: 8,\n },\n '&::before': {\n left: 16,\n top: 8,\n display: 'block',\n fontSize: '2.5em',\n content: '\"\\\\201C\"',\n position: 'absolute',\n color: alpha(theme.palette.primary.main, 0.3),\n lineHeight: 1,\n },\n },\n\n // ─── Inline code ────────────────────────────────────────────\n [`& .${contentClasses.codeInline}`]: {\n padding: theme.spacing(0.25, 0.75),\n color: theme.palette.text.secondary,\n fontSize: theme.typography.body2.fontSize,\n borderRadius: Number(theme.shape.borderRadius) / 2,\n backgroundColor: alpha(theme.palette.grey[500], 0.2),\n fontFamily: CODE_FONT,\n },\n // Fallback for code not inside pre\n '& :not(pre) > code:not([class])': {\n padding: theme.spacing(0.25, 0.75),\n color: theme.palette.text.secondary,\n fontSize: theme.typography.body2.fontSize,\n borderRadius: Number(theme.shape.borderRadius) / 2,\n backgroundColor: alpha(theme.palette.grey[500], 0.2),\n fontFamily: CODE_FONT,\n },\n\n // ─── Code block ─────────────────────────────────────────────\n [`& .${contentClasses.codeBlock}`]: {\n position: 'relative',\n marginBottom: '1.25rem',\n '& pre': {\n overflowX: 'auto',\n padding: theme.spacing(3),\n color: theme.palette.common.white,\n borderRadius: Number(theme.shape.borderRadius) * 1.5,\n fontFamily: CODE_FONT,\n fontSize: theme.typography.body2.fontSize,\n lineHeight: 1.7,\n backgroundColor: theme.palette.grey[900],\n ...(theme.palette.mode === 'dark' && {\n backgroundColor: alpha(theme.palette.grey[800], 0.9),\n }),\n '& code': {\n fontSize: 'inherit',\n fontFamily: 'inherit',\n backgroundColor: 'transparent',\n padding: 0,\n borderRadius: 0,\n color: 'inherit',\n },\n },\n },\n // Fallback for bare pre blocks\n '& pre:not([class])': {\n overflowX: 'auto',\n padding: theme.spacing(3),\n color: theme.palette.common.white,\n borderRadius: Number(theme.shape.borderRadius) * 1.5,\n fontFamily: CODE_FONT,\n fontSize: theme.typography.body2.fontSize,\n lineHeight: 1.7,\n backgroundColor: theme.palette.grey[900],\n marginBottom: '1.25rem',\n ...(theme.palette.mode === 'dark' && {\n backgroundColor: alpha(theme.palette.grey[800], 0.9),\n }),\n '& code': {\n fontSize: 'inherit',\n fontFamily: 'inherit',\n backgroundColor: 'transparent',\n padding: 0,\n color: 'inherit',\n },\n },\n\n // ─── Table ──────────────────────────────────────────────────\n '& table': {\n width: '100%',\n borderCollapse: 'collapse',\n fontSize: theme.typography.body2.fontSize,\n border: `1px solid ${theme.palette.divider}`,\n marginBottom: '1.25rem',\n '& th, & td': {\n padding: theme.spacing(1, 1.5),\n border: `1px solid ${theme.palette.divider}`,\n verticalAlign: 'top',\n },\n '& th': {\n fontWeight: 700,\n backgroundColor: alpha(theme.palette.grey[500], 0.08),\n },\n '& tbody tr:nth-of-type(odd)': {\n backgroundColor: alpha(theme.palette.grey[500], 0.04),\n },\n },\n\n // ─── Checkbox (GFM task lists) ──────────────────────────────\n [`& .${contentClasses.checkbox}`]: {\n cursor: 'pointer',\n position: 'relative',\n '&:before': {\n content: '\"\"',\n top: -2,\n left: -2,\n width: 17,\n height: 17,\n borderRadius: 3,\n position: 'absolute',\n backgroundColor: theme.palette.grey[300],\n ...(theme.palette.mode === 'dark' && {\n backgroundColor: theme.palette.grey[700],\n }),\n },\n '&:checked': {\n '&:before': {\n backgroundColor: theme.palette.primary.main,\n },\n '&:after': {\n top: 1,\n left: 5,\n width: 4,\n height: 9,\n content: '\"\"',\n position: 'absolute',\n borderStyle: 'solid',\n transform: 'rotate(45deg)',\n borderWidth: '0 2px 2px 0',\n borderColor: theme.palette.common.white,\n },\n },\n },\n\n // ─── Details / Summary ──────────────────────────────────────\n '& details': {\n marginBottom: '1rem',\n '& summary': {\n cursor: 'pointer',\n fontWeight: 600,\n marginBottom: 8,\n },\n },\n\n // ─── Definition list ────────────────────────────────────────\n '& dl': {\n marginBottom: '1.25rem',\n '& dt': {\n fontWeight: 700,\n marginTop: 12,\n },\n '& dd': {\n marginLeft: 24,\n marginBottom: 4,\n },\n },\n\n // ─── Kbd (keyboard shortcut) ────────────────────────────────\n '& kbd': {\n display: 'inline-block',\n padding: theme.spacing(0.25, 0.5),\n fontSize: '0.8em',\n fontFamily: CODE_FONT,\n borderRadius: 4,\n border: `1px solid ${theme.palette.divider}`,\n boxShadow: `0 1px 0 ${alpha(theme.palette.grey[500], 0.1)}`,\n backgroundColor: alpha(theme.palette.grey[500], 0.06),\n },\n\n // ─── Mark (highlight) ──────────────────────────────────────\n '& mark': {\n padding: theme.spacing(0, 0.5),\n borderRadius: 2,\n backgroundColor: alpha(theme.palette.warning.main, 0.3),\n },\n\n // ─── Sup / Sub ──────────────────────────────────────────────\n '& sup, & sub': {\n fontSize: '0.75em',\n },\n\n // ─── Spoiler (||hidden text||) ────────────────────────────\n [`& .${contentClasses.spoiler}`]: {\n backgroundColor: theme.palette.text.primary,\n color: theme.palette.text.primary,\n borderRadius: 4,\n padding: theme.spacing(0, 0.5),\n cursor: 'pointer',\n transition: 'all 0.15s ease',\n userSelect: 'none',\n '&:hover, &[data-revealed=\"true\"]': {\n backgroundColor: 'transparent',\n color: 'inherit',\n userSelect: 'auto',\n },\n },\n\n // ─── Admonition (callout) ─────────────────────────────────\n [`& .${contentClasses.admonition}`]: {\n margin: theme.spacing(2, 0),\n padding: theme.spacing(1.5, 2),\n borderRadius: theme.shape.borderRadius,\n borderLeft: `4px solid ${theme.palette.divider}`,\n backgroundColor: alpha(theme.palette.text.primary, 0.04),\n '& > :last-child': { marginBottom: 0 },\n },\n [`& .${contentClasses.admonitionTitle}`]: {\n fontWeight: 600,\n textTransform: 'uppercase',\n fontSize: '0.75rem',\n letterSpacing: '0.05em',\n marginBottom: theme.spacing(0.75),\n opacity: 0.85,\n },\n [`& .${contentClasses.admonitionContent}`]: {\n '& p:last-child': { marginBottom: 0 },\n },\n [`& .${contentClasses.admonitionNote}`]: {\n borderLeftColor: theme.palette.text.secondary,\n backgroundColor: alpha(theme.palette.text.primary, 0.04),\n },\n [`& .${contentClasses.admonitionTip}`]: {\n borderLeftColor: theme.palette.success.main,\n backgroundColor: alpha(theme.palette.success.main, 0.08),\n },\n [`& .${contentClasses.admonitionWarning}`]: {\n borderLeftColor: theme.palette.warning.main,\n backgroundColor: alpha(theme.palette.warning.main, 0.08),\n },\n [`& .${contentClasses.admonitionDanger}`]: {\n borderLeftColor: theme.palette.error.main,\n backgroundColor: alpha(theme.palette.error.main, 0.08),\n },\n [`& .${contentClasses.admonitionInfo}`]: {\n borderLeftColor: theme.palette.info.main,\n backgroundColor: alpha(theme.palette.info.main, 0.08),\n },\n [`& .${contentClasses.admonitionCaution}`]: {\n borderLeftColor: theme.palette.warning.dark,\n backgroundColor: alpha(theme.palette.warning.dark, 0.08),\n },\n\n // ─── Tabs ───────────────────────────────────────────────────\n [`& .${contentClasses.tabs}`]: {\n margin: theme.spacing(2, 0),\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: theme.shape.borderRadius,\n overflow: 'hidden',\n },\n [`& .${contentClasses.tabsHeader}`]: {\n display: 'flex',\n gap: 0,\n borderBottom: `1px solid ${theme.palette.divider}`,\n backgroundColor: alpha(theme.palette.text.primary, 0.03),\n },\n [`& .${contentClasses.tabsTab}`]: {\n appearance: 'none',\n background: 'transparent',\n border: 'none',\n padding: theme.spacing(1, 2),\n fontFamily: 'inherit',\n fontSize: '0.8125rem',\n fontWeight: 500,\n color: theme.palette.text.secondary,\n cursor: 'pointer',\n borderBottom: '2px solid transparent',\n transition: 'all 0.15s ease',\n '&:hover': { color: theme.palette.text.primary },\n },\n [`& .${contentClasses.tabsTabActive}`]: {\n color: theme.palette.text.primary,\n borderBottomColor: theme.palette.primary.main,\n },\n [`& .${contentClasses.tabsPanel}`]: {\n padding: theme.spacing(2),\n '& > :first-of-type': { marginTop: 0 },\n '& > :last-child': { marginBottom: 0 },\n },\n\n // ─── Code block — title + copy button ───────────────────────\n [`& .${contentClasses.codeBlockTitle}`]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: theme.spacing(1),\n padding: theme.spacing(0.75, 1.5),\n fontSize: '0.75rem',\n fontFamily: 'ui-monospace, \"SF Mono\", Menlo, Consolas, monospace',\n color: theme.palette.text.secondary,\n backgroundColor: alpha(theme.palette.text.primary, 0.06),\n borderTopLeftRadius: theme.shape.borderRadius,\n borderTopRightRadius: theme.shape.borderRadius,\n },\n [`& .${contentClasses.codeBlockCopy}`]: {\n appearance: 'none',\n background: 'transparent',\n border: 'none',\n color: 'inherit',\n cursor: 'pointer',\n padding: theme.spacing(0.25, 0.75),\n fontSize: '0.875rem',\n borderRadius: theme.shape.borderRadius,\n '&:hover': { backgroundColor: alpha(theme.palette.text.primary, 0.08) },\n },\n\n // ─── Figure ─────────────────────────────────────────────────\n [`& .${contentClasses.figure}`]: {\n margin: theme.spacing(2, 0),\n textAlign: 'center',\n },\n [`& .${contentClasses.figcaption}`]: {\n fontSize: '0.8125rem',\n color: theme.palette.text.secondary,\n marginTop: theme.spacing(0.75),\n },\n\n // ─── kbd ────────────────────────────────────────────────────\n [`& .${contentClasses.kbd}`]: {\n display: 'inline-block',\n padding: theme.spacing(0, 0.5),\n fontFamily: 'ui-monospace, \"SF Mono\", Menlo, Consolas, monospace',\n fontSize: '0.8em',\n color: theme.palette.text.primary,\n border: `1px solid ${theme.palette.divider}`,\n borderBottomWidth: 2,\n borderRadius: 4,\n backgroundColor: alpha(theme.palette.text.primary, 0.04),\n boxShadow: `0 1px 0 ${alpha(theme.palette.text.primary, 0.15)}`,\n minWidth: '1.5em',\n textAlign: 'center',\n },\n\n // ─── Compact mode (chat messages, comments, etc.) ─────────\n [`&.${contentClasses.compact}`]: {\n '> * + *': { marginTop: 0, marginBottom: 2 },\n '& > :first-of-type:not(p)': { marginTop: 4 },\n '& h1, & h2, & h3, & h4, & h5, & h6': { marginTop: 0, marginBottom: 2 },\n h1: { fontSize: '1.25rem', fontWeight: 600, marginTop: 0, marginBottom: 2 },\n h2: { fontSize: '1.125rem', fontWeight: 600, marginTop: 0, marginBottom: 2 },\n h3: { fontSize: '1rem', fontWeight: 600, marginTop: 0, marginBottom: 2 },\n 'h4, h5, h6': { fontSize: '0.875rem', fontWeight: 600, marginTop: 0, marginBottom: 2 },\n p: {\n fontSize: '0.8125rem',\n lineHeight: 1.5,\n marginBottom: 2,\n '&:last-child': { marginBottom: 0 },\n },\n hr: { margin: '4px 0' },\n '& blockquote': {\n margin: '4px 0',\n padding: theme.spacing(0.5, 0, 0.5, 1.5),\n borderRadius: 0,\n backgroundColor: 'transparent',\n '&::before': { display: 'none' },\n },\n '& ul, & ol': {\n paddingLeft: 20,\n marginBottom: 2,\n '& > li': { lineHeight: 1.5, fontSize: '0.8125rem' },\n },\n '& img:not([class])': { marginBottom: 4 },\n [`& .${contentClasses.codeBlock}`]: { marginBottom: 4 },\n [`& .${contentClasses.codeBlock} pre, & pre:not([class])`]: {\n padding: theme.spacing(1.5),\n fontSize: '0.75rem',\n lineHeight: 1.5,\n marginBottom: 4,\n },\n [`& .${contentClasses.codeInline}, & :not(pre) > code:not([class])`]: {\n fontSize: '0.75rem',\n },\n '& table': {\n fontSize: '0.75rem',\n marginBottom: 4,\n },\n },\n}));\n","'use client';\n\nimport {\n type ReactNode,\n type ComponentType,\n type ElementType,\n Fragment,\n useState,\n useCallback,\n createContext,\n useContext,\n} from 'react';\nimport { ContentRoot } from '../content-renderer/styles.js';\nimport { contentClasses } from '../content-renderer/classes.js';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface TipTapMark {\n type: string;\n attrs?: Record<string, any>;\n}\n\nexport interface TipTapNode {\n type: string;\n content?: TipTapNode[];\n text?: string;\n marks?: TipTapMark[];\n attrs?: Record<string, any>;\n}\n\nexport interface TipTapDoc {\n type: 'doc';\n content: TipTapNode[];\n}\n\n// ---------------------------------------------------------------------------\n// Custom node registry\n// ---------------------------------------------------------------------------\n\ntype CustomNodeRenderer = ComponentType<{ node: TipTapNode }>;\nconst customNodeRegistry = new Map<string, CustomNodeRenderer>();\n\nexport function registerTipTapNode(type: string, component: CustomNodeRenderer) {\n customNodeRegistry.set(type, component);\n}\n\n// ---------------------------------------------------------------------------\n// Render context\n//\n// Lets the host app inject:\n// - `linkComponent`: a router-aware Link (e.g. react-router-dom's Link)\n// used by the `internalLink` mark to avoid full-page reloads.\n// ---------------------------------------------------------------------------\n\ninterface TipTapRenderContext {\n linkComponent?: ElementType<{ to: string; children?: ReactNode; className?: string }>;\n}\n\nconst TipTapContext = createContext<TipTapRenderContext>({});\n\n// ---------------------------------------------------------------------------\n// Mark rendering\n// ---------------------------------------------------------------------------\n\nfunction renderMarks(text: string, marks: TipTapMark[] = [], ctx?: TipTapRenderContext): ReactNode {\n return marks.reduce<ReactNode>((acc, mark) => {\n switch (mark.type) {\n case 'bold':\n return <strong>{acc}</strong>;\n case 'italic':\n return <em>{acc}</em>;\n case 'code':\n return <code className={contentClasses.codeInline}>{acc}</code>;\n case 'underline':\n return <u>{acc}</u>;\n case 'strike':\n return <s>{acc}</s>;\n case 'link':\n return (\n <a href={mark.attrs?.href} target={mark.attrs?.target ?? '_blank'} rel=\"noopener noreferrer\">\n {acc}\n </a>\n );\n case 'internalLink': {\n const to = String(mark.attrs?.to ?? mark.attrs?.href ?? '#');\n const Link = ctx?.linkComponent;\n return Link ? (\n <Link to={to} className={contentClasses.link}>\n {acc}\n </Link>\n ) : (\n <a href={to}>{acc}</a>\n );\n }\n case 'highlight':\n return <mark style={mark.attrs?.color ? { backgroundColor: mark.attrs.color } : undefined}>{acc}</mark>;\n case 'subscript':\n return <sub>{acc}</sub>;\n case 'superscript':\n return <sup>{acc}</sup>;\n case 'textStyle':\n return <span style={{ color: mark.attrs?.color }}>{acc}</span>;\n case 'kbd':\n return <kbd className={contentClasses.kbd}>{acc}</kbd>;\n default:\n return acc;\n }\n }, text);\n}\n\n// ---------------------------------------------------------------------------\n// Slug generation for heading anchors\n// ---------------------------------------------------------------------------\n\nfunction slugify(nodes?: TipTapNode[]): string | undefined {\n if (!nodes) return undefined;\n const text = nodes.map((n) => n.text ?? '').join('');\n if (!text) return undefined;\n return text\n .toLowerCase()\n .replace(/[^a-z0-9а-яё]+/gi, '-')\n .replace(/^-|-$/g, '');\n}\n\n// ---------------------------------------------------------------------------\n// Code block — pre-rendered HTML support + copy button\n// ---------------------------------------------------------------------------\n\nfunction CodeBlock({ node }: { node: TipTapNode }) {\n const language = node.attrs?.language as string | null | undefined;\n const title = node.attrs?.title as string | undefined;\n const html = node.attrs?.html as string | undefined;\n const code = node.content?.map((n) => n.text ?? '').join('\\n') ?? '';\n const [copied, setCopied] = useState(false);\n\n const onCopy = useCallback(() => {\n navigator.clipboard?.writeText(code).then(\n () => {\n setCopied(true);\n setTimeout(() => setCopied(false), 1500);\n },\n () => {\n // Clipboard API unavailable (insecure context). Silently no-op.\n },\n );\n }, [code]);\n\n return (\n <div className={contentClasses.codeBlock} data-language={language ?? undefined}>\n {(title || language) && (\n <div className={contentClasses.codeBlockTitle}>\n <span>{title ?? language}</span>\n <button type=\"button\" onClick={onCopy} className={contentClasses.codeBlockCopy} aria-label=\"Copy code\">\n {copied ? '✓' : '⧉'}\n </button>\n </div>\n )}\n {html ? (\n // Shiki-rendered HTML is pre-sanitised at build time and contains only\n // <pre>/<code>/<span> tags with style attributes. Safe to inject.\n (<div dangerouslySetInnerHTML={{ __html: html }} />)\n ) : (\n <pre>\n <code className={language ? `language-${language}` : undefined}>{code}</code>\n </pre>\n )}\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Admonition (callout)\n// ---------------------------------------------------------------------------\n\nconst ADMONITION_LABEL: Record<string, string> = {\n note: 'Note',\n tip: 'Tip',\n warning: 'Warning',\n danger: 'Danger',\n info: 'Info',\n caution: 'Caution',\n};\n\nconst ADMONITION_CLASS: Record<string, string> = {\n note: contentClasses.admonitionNote,\n tip: contentClasses.admonitionTip,\n warning: contentClasses.admonitionWarning,\n danger: contentClasses.admonitionDanger,\n info: contentClasses.admonitionInfo,\n caution: contentClasses.admonitionCaution,\n};\n\nfunction Admonition({ node }: { node: TipTapNode }) {\n const kind = String(node.attrs?.kind ?? 'note');\n const title = (node.attrs?.title as string | undefined) ?? ADMONITION_LABEL[kind] ?? kind;\n const variantClass = ADMONITION_CLASS[kind] ?? contentClasses.admonitionNote;\n return (\n <aside className={`${contentClasses.admonition} ${variantClass}`} data-kind={kind}>\n <div className={contentClasses.admonitionTitle}>{title}</div>\n <div className={contentClasses.admonitionContent}>{node.content?.map(renderNode)}</div>\n </aside>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Tabs\n// ---------------------------------------------------------------------------\n\nfunction Tabs({ node }: { node: TipTapNode }) {\n const items = (node.content ?? []).filter((c) => c.type === 'tabItem');\n const [active, setActive] = useState(0);\n if (items.length === 0) return null;\n\n const safeActive = Math.min(active, items.length - 1);\n\n return (\n <div className={contentClasses.tabs}>\n <div className={contentClasses.tabsHeader} role=\"tablist\">\n {items.map((item, i) => {\n const label = item.attrs?.label ?? item.attrs?.value ?? `Tab ${i + 1}`;\n const isActive = i === safeActive;\n return (\n <button\n key={i}\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n className={`${contentClasses.tabsTab} ${isActive ? contentClasses.tabsTabActive : ''}`}\n onClick={() => setActive(i)}\n >\n {label}\n </button>\n );\n })}\n </div>\n <div className={contentClasses.tabsPanel} role=\"tabpanel\">\n {items[safeActive]?.content?.map(renderNode)}\n </div>\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Node rendering\n// ---------------------------------------------------------------------------\n\nfunction renderNode(node: TipTapNode, index: number): ReactNode {\n // Custom registry first\n const CustomRenderer = customNodeRegistry.get(node.type);\n if (CustomRenderer) return <CustomRenderer key={index} node={node} />;\n\n switch (node.type) {\n case 'text':\n return <TextNode key={index} node={node} />;\n\n case 'paragraph':\n return <p key={index}>{node.content?.map(renderNode)}</p>;\n\n case 'heading': {\n const level = Math.min(Math.max(node.attrs?.level ?? 2, 1), 6);\n const Tag = `h${level}` as 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n // Prefer the build-time-supplied id (kept consistent with the engine's\n // slugifyHeading); fall back to runtime slugification for legacy content.\n const id = node.attrs?.id ?? slugify(node.content);\n return (\n <Tag key={index} id={id}>\n {node.content?.map(renderNode)}\n </Tag>\n );\n }\n\n case 'bulletList':\n return <ul key={index}>{node.content?.map(renderNode)}</ul>;\n\n case 'orderedList':\n return (\n <ol key={index} start={node.attrs?.start ?? 1}>\n {node.content?.map(renderNode)}\n </ol>\n );\n\n case 'listItem':\n return <li key={index}>{node.content?.map(renderNode)}</li>;\n\n case 'taskList':\n return (\n <ul key={index} data-type=\"taskList\">\n {node.content?.map(renderNode)}\n </ul>\n );\n\n case 'taskItem': {\n const checked = node.attrs?.checked ?? false;\n return (\n <li key={index} data-type=\"taskItem\" data-checked={checked}>\n <label>\n <input type=\"checkbox\" checked={checked} readOnly className={contentClasses.checkbox} />\n </label>\n <div>{node.content?.map(renderNode)}</div>\n </li>\n );\n }\n\n case 'blockquote':\n return <blockquote key={index}>{node.content?.map(renderNode)}</blockquote>;\n\n case 'codeBlock':\n return <CodeBlock key={index} node={node} />;\n\n case 'horizontalRule':\n return <hr key={index} />;\n\n case 'image':\n return (\n <img\n key={index}\n src={node.attrs?.src}\n alt={node.attrs?.alt ?? ''}\n title={node.attrs?.title}\n className={contentClasses.image}\n loading=\"lazy\"\n />\n );\n\n case 'figure':\n return (\n <figure key={index} className={contentClasses.figure}>\n {node.content?.map(renderNode)}\n </figure>\n );\n\n case 'figcaption':\n return (\n <figcaption key={index} className={contentClasses.figcaption}>\n {node.content?.map(renderNode)}\n </figcaption>\n );\n\n case 'hardBreak':\n return <br key={index} />;\n\n // ─── Admonition / Tabs ──────────────────────────────────\n case 'admonition':\n return <Admonition key={index} node={node} />;\n\n case 'tabs':\n return <Tabs key={index} node={node} />;\n\n case 'tabItem':\n // tabItem is rendered by Tabs; if it appears outside, fall back to a\n // plain section so the content isn't lost.\n return (\n <section key={index} data-type=\"tabItem\">\n {node.content?.map(renderNode)}\n </section>\n );\n\n // ─── Table ──────────────────────────────────────────────\n case 'table':\n return (\n <div key={index} style={{ overflowX: 'auto' }}>\n <table>{node.content?.map(renderNode)}</table>\n </div>\n );\n\n case 'tableRow':\n return <tr key={index}>{node.content?.map(renderNode)}</tr>;\n\n case 'tableCell':\n return (\n <td key={index} colSpan={node.attrs?.colspan ?? 1} rowSpan={node.attrs?.rowspan ?? 1}>\n {node.content?.map(renderNode)}\n </td>\n );\n\n case 'tableHeader':\n return (\n <th key={index} colSpan={node.attrs?.colspan ?? 1} rowSpan={node.attrs?.rowspan ?? 1}>\n {node.content?.map(renderNode)}\n </th>\n );\n\n // ─── Details / Summary (collapsible) ────────────────────\n case 'details':\n return (\n <details key={index} open={node.attrs?.open}>\n {node.content?.map(renderNode)}\n </details>\n );\n\n case 'detailsSummary':\n return <summary key={index}>{node.content?.map(renderNode)}</summary>;\n\n case 'detailsContent':\n return <div key={index}>{node.content?.map(renderNode)}</div>;\n\n // ─── YouTube embed ──────────────────────────────────────\n case 'youtube': {\n const src = node.attrs?.src;\n if (!src) return null;\n return (\n <div key={index} style={{ position: 'relative', paddingBottom: '56.25%', height: 0, marginBottom: '1.25rem' }}>\n <iframe\n src={src}\n title=\"YouTube video\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n border: 'none',\n borderRadius: 8,\n }}\n />\n </div>\n );\n }\n\n default:\n // Fallback: render children if present\n if (node.content) {\n return <Fragment key={index}>{node.content.map(renderNode)}</Fragment>;\n }\n return null;\n }\n}\n\nfunction TextNode({ node }: { node: TipTapNode }) {\n const ctx = useContext(TipTapContext);\n return <Fragment>{renderMarks(node.text ?? '', node.marks, ctx)}</Fragment>;\n}\n\n// ---------------------------------------------------------------------------\n// Main component\n// ---------------------------------------------------------------------------\n\nexport interface TipTapRendererProps {\n /** TipTap JSON document */\n content: TipTapDoc | Record<string, unknown> | null;\n /** Additional CSS class */\n className?: string;\n /** MUI sx prop */\n sx?: SxProps<Theme>;\n /** Compact mode for chat messages, comments, etc. */\n compact?: boolean;\n /**\n * Component used to render `internalLink` marks. Pass a router-aware\n * component (e.g. `Link` from react-router-dom) to avoid full reloads.\n */\n linkComponent?: ElementType<{ to: string; children?: ReactNode; className?: string }>;\n}\n\nexport function TipTapRenderer({ content, className, sx, compact, linkComponent }: TipTapRendererProps) {\n if (!content || !('content' in content) || !Array.isArray(content.content)) {\n return null;\n }\n\n const ctxValue: TipTapRenderContext = linkComponent ? { linkComponent } : {};\n\n return (\n <TipTapContext.Provider value={ctxValue}>\n <ContentRoot\n className={[contentClasses.root, contentClasses.tiptap, compact && contentClasses.compact, className]\n .filter(Boolean)\n .join(' ')}\n sx={sx}\n >\n {(content as TipTapDoc).content.map(renderNode)}\n </ContentRoot>\n </TipTapContext.Provider>\n );\n}\n","/**\n * All HTML tags — used by Turndown to decide which elements to keep as HTML.\n * Source: https://github.com/harrysolovay/all-html-tags\n */\nexport const htmlTags = [\n 'a',\n 'abbr',\n 'acronym',\n 'address',\n 'applet',\n 'area',\n 'article',\n 'aside',\n 'audio',\n 'b',\n 'base',\n 'basefont',\n 'bdi',\n 'bdo',\n 'bgsound',\n 'big',\n 'blink',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'center',\n 'circle',\n 'cite',\n 'clipPath',\n 'code',\n 'col',\n 'colgroup',\n 'command',\n 'content',\n 'data',\n 'datalist',\n 'dd',\n 'defs',\n 'del',\n 'details',\n 'dfn',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'element',\n 'ellipse',\n 'em',\n 'embed',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'font',\n 'footer',\n 'foreignObject',\n 'form',\n 'frame',\n 'frameset',\n 'g',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hgroup',\n 'hr',\n 'html',\n 'i',\n 'iframe',\n 'image',\n 'img',\n 'input',\n 'ins',\n 'isindex',\n 'kbd',\n 'keygen',\n 'label',\n 'legend',\n 'li',\n 'line',\n 'linearGradient',\n 'link',\n 'listing',\n 'main',\n 'map',\n 'mark',\n 'marquee',\n 'mask',\n 'math',\n 'menu',\n 'menuitem',\n 'meta',\n 'meter',\n 'multicol',\n 'nav',\n 'nextid',\n 'nobr',\n 'noembed',\n 'noframes',\n 'noscript',\n 'object',\n 'ol',\n 'optgroup',\n 'option',\n 'output',\n 'p',\n 'param',\n 'path',\n 'pattern',\n 'picture',\n 'plaintext',\n 'polygon',\n 'polyline',\n 'pre',\n 'progress',\n 'q',\n 'radialGradient',\n 'rb',\n 'rbc',\n 'rect',\n 'rp',\n 'rt',\n 'rtc',\n 'ruby',\n 's',\n 'samp',\n 'script',\n 'section',\n 'select',\n 'shadow',\n 'slot',\n 'small',\n 'source',\n 'spacer',\n 'span',\n 'stop',\n 'strike',\n 'strong',\n 'style',\n 'sub',\n 'summary',\n 'sup',\n 'svg',\n 'table',\n 'tbody',\n 'td',\n 'template',\n 'text',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'time',\n 'title',\n 'tr',\n 'track',\n 'tspan',\n 'tt',\n 'u',\n 'ul',\n 'var',\n 'video',\n 'wbr',\n 'xmp',\n];\n","import type { Node, Filter } from 'turndown';\nimport TurndownService from 'turndown';\nimport { htmlTags } from './html-tags.js';\n\n// ---------------------------------------------------------------------------\n// Turndown service — converts HTML strings to Markdown\n// ---------------------------------------------------------------------------\n\ntype INode = HTMLElement & { isBlock: boolean };\n\nconst excludeTags = ['pre', 'code'];\nconst filterTags = htmlTags.filter((t) => !excludeTags.includes(t)) as Filter;\n\nconst turndownService = new TurndownService({ codeBlockStyle: 'fenced', fence: '```' });\n\n// Keep all HTML tags that aren't code-related\nturndownService.addRule('keep', {\n filter: filterTags,\n replacement(content: string, node: Node) {\n const { isBlock, outerHTML } = node as INode;\n return node && isBlock ? `\\n\\n${outerHTML}\\n\\n` : outerHTML;\n },\n});\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\nexport function htmlToMarkdown(html: string): string {\n return turndownService.turndown(html);\n}\n\n/**\n * Detect whether content is already Markdown or raw HTML.\n * Checks for common Markdown syntax patterns.\n */\nexport function isMarkdownContent(content: string): boolean {\n const patterns = [\n /^#+\\s/m, // Heading\n /^(\\*|-|\\d+\\.)\\s/m, // List item\n /^```/m, // Code block\n /^\\|/m, // Table\n /!\\[.*?\\]\\(.*?\\)/, // Image\n /\\[.*?\\]\\(.*?\\)/, // Link\n ];\n return patterns.some((p) => p.test(content));\n}\n","/**\n * Remark plugin for spoiler syntax: ||hidden text||\n *\n * Transforms `||spoiler text||` into `<span class=\"...\">spoiler text</span>`\n * in the markdown AST. Works with rehype-raw to render the HTML.\n */\n\nimport { contentClasses } from './classes.js';\n\nconst SPOILER_RE = /\\|\\|(.+?)\\|\\|/g;\n\nfunction remarkSpoiler(): (tree: any) => void {\n return (tree) => {\n visitNode(tree);\n };\n}\n\nfunction visitNode(node: any): void {\n if (!node.children) return;\n\n const newChildren: any[] = [];\n let changed = false;\n\n for (const child of node.children) {\n if (child.type === 'text' && typeof child.value === 'string') {\n if (SPOILER_RE.test(child.value)) {\n changed = true;\n let lastIndex = 0;\n SPOILER_RE.lastIndex = 0;\n let match: RegExpExecArray | null;\n\n while ((match = SPOILER_RE.exec(child.value)) !== null) {\n if (match.index > lastIndex) {\n newChildren.push({ type: 'text', value: child.value.slice(lastIndex, match.index) });\n }\n newChildren.push({\n type: 'html',\n value: `<span class=\"${contentClasses.spoiler}\">${escapeHtml(match[1])}</span>`,\n });\n lastIndex = match.index + match[0].length;\n }\n if (lastIndex < child.value.length) {\n newChildren.push({ type: 'text', value: child.value.slice(lastIndex) });\n }\n continue;\n }\n } else {\n visitNode(child);\n }\n newChildren.push(child);\n }\n\n if (changed) {\n node.children = newChildren;\n }\n}\n\nfunction escapeHtml(str: string): string {\n return str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;');\n}\n\nexport { remarkSpoiler };\n","'use client';\n\nimport './code-highlight.css';\n\nimport type { Options } from 'react-markdown';\nimport { useId, useMemo } from 'react';\nimport ReactMarkdown from 'react-markdown';\nimport rehypeRaw from 'rehype-raw';\nimport rehypeHighlight from 'rehype-highlight';\nimport remarkGfm from 'remark-gfm';\n\nimport Link from '@mui/material/Link';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\nimport { ContentRoot } from './styles.js';\nimport { contentClasses } from './classes.js';\nimport { htmlToMarkdown, isMarkdownContent } from './html-to-markdown.js';\nimport { remarkSpoiler } from './remark-spoiler.js';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type MarkdownProps = {\n /** Markdown or HTML string content */\n children: string;\n /** Additional CSS class */\n className?: string;\n /** MUI sx prop */\n sx?: SxProps<Theme>;\n /** Compact mode for chat messages, comments, etc. */\n compact?: boolean;\n /** Custom react-markdown component overrides */\n components?: Options['components'];\n /** Additional rehype plugins */\n rehypePlugins?: Options['rehypePlugins'];\n /** Additional remark plugins */\n remarkPlugins?: Options['remarkPlugins'];\n /** Link component for internal navigation (e.g. react-router Link) */\n routerLinkComponent?: React.ElementType;\n};\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction isExternalLink(href: string): boolean {\n return /^https?:\\/\\//.test(href) || href.startsWith('//');\n}\n\n// ---------------------------------------------------------------------------\n// Default plugins\n// ---------------------------------------------------------------------------\n\nconst defaultRehypePlugins: NonNullable<Options['rehypePlugins']> = [rehypeRaw, rehypeHighlight];\n\nconst defaultRemarkPlugins: NonNullable<Options['remarkPlugins']> = [\n [remarkGfm, { singleTilde: false }],\n remarkSpoiler,\n];\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport function Markdown({\n children,\n className,\n sx,\n compact,\n components,\n rehypePlugins,\n remarkPlugins,\n routerLinkComponent,\n}: MarkdownProps) {\n const content = useMemo(() => {\n const cleaned = String(children).trim();\n return isMarkdownContent(cleaned) ? cleaned : htmlToMarkdown(cleaned);\n }, [children]);\n\n const allRehypePlugins = useMemo(() => [...defaultRehypePlugins, ...(rehypePlugins ?? [])], [rehypePlugins]);\n\n const allRemarkPlugins = useMemo(() => [...defaultRemarkPlugins, ...(remarkPlugins ?? [])], [remarkPlugins]);\n\n const defaultComponents = useMemo(\n (): NonNullable<Options['components']> => ({\n img: ({ node: _n, ...other }) => <img className={contentClasses.image} {...other} />,\n a: ({ href = '', children: linkChildren, node: _n, ...other }) => {\n if (isExternalLink(href)) {\n return (\n <Link href={href} target=\"_blank\" rel=\"noopener noreferrer\" className={contentClasses.link} {...other}>\n {linkChildren}\n </Link>\n );\n }\n if (routerLinkComponent) {\n return (\n <Link component={routerLinkComponent} href={href} className={contentClasses.link} {...other}>\n {linkChildren}\n </Link>\n );\n }\n return (\n <Link href={href} className={contentClasses.link} {...other}>\n {linkChildren}\n </Link>\n );\n },\n pre: ({ children: preChildren }) => (\n <div className={contentClasses.codeBlock}>\n <pre>{preChildren}</pre>\n </div>\n ),\n code: ({ className: codeClassName = '', children: codeChildren, node: _n, ...other }) => {\n const hasLanguage = /language-\\w+/.test(codeClassName);\n return (\n <code className={hasLanguage ? codeClassName : contentClasses.codeInline} {...other}>\n {codeChildren}\n </code>\n );\n },\n input: ({ type, node: _n, ...other }) =>\n type === 'checkbox' ? (\n <CheckboxInput className={contentClasses.checkbox} {...other} />\n ) : (\n <input type={type} {...other} />\n ),\n }),\n [routerLinkComponent]\n );\n\n return (\n <ContentRoot\n className={[contentClasses.root, contentClasses.markdown, compact && contentClasses.compact, className]\n .filter(Boolean)\n .join(' ')}\n sx={sx}\n >\n <ReactMarkdown\n components={{ ...defaultComponents, ...components }}\n rehypePlugins={allRehypePlugins}\n remarkPlugins={allRemarkPlugins}\n >\n {content}\n </ReactMarkdown>\n </ContentRoot>\n );\n}\n\nfunction CheckboxInput(props: React.ComponentProps<'input'>) {\n const uniqueId = useId();\n return <input type=\"checkbox\" id={uniqueId} {...props} />;\n}\n","'use client';\n\nimport type { SxProps, Theme } from '@mui/material/styles';\nimport type { Options } from 'react-markdown';\n\nimport { TipTapRenderer } from '../tiptap-renderer/tiptap-renderer.js';\nimport type { TipTapDoc } from '../tiptap-renderer/tiptap-renderer.js';\nimport { Markdown } from './markdown.js';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/**\n * Content can be:\n * - TipTap JSON document (object with `type: 'doc'` and `content` array)\n * - Markdown string\n * - HTML string (auto-converted to markdown)\n * - null/undefined (renders nothing)\n */\nexport type ContentValue = TipTapDoc | Record<string, unknown> | string | null | undefined;\n\nexport interface ContentRendererProps {\n /** The content to render — TipTap JSON, markdown string, or HTML string */\n content: ContentValue;\n /** Additional CSS class */\n className?: string;\n /** MUI sx prop */\n sx?: SxProps<Theme>;\n /** Compact mode for chat messages, comments, etc. */\n compact?: boolean;\n /** Custom react-markdown component overrides (only applies to markdown/HTML content) */\n markdownComponents?: Options['components'];\n /** Link component for internal navigation (e.g. react-router Link) */\n routerLinkComponent?: React.ElementType;\n}\n\n// ---------------------------------------------------------------------------\n// Detection\n// ---------------------------------------------------------------------------\n\nfunction isTipTapDoc(value: unknown): value is TipTapDoc {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'type' in value &&\n (value as any).type === 'doc' &&\n 'content' in value &&\n Array.isArray((value as any).content)\n );\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\n/**\n * Unified content renderer that auto-detects the content format and delegates\n * to the appropriate renderer:\n *\n * - **TipTap JSON** → TipTapRenderer (recursive node-to-HTML mapping)\n * - **Markdown / HTML string** → Markdown (react-markdown with rehype-highlight)\n *\n * Both renderers share the same styled container (`ContentRoot`) ensuring\n * consistent typography, code highlighting, table styling, and dark mode support.\n */\nexport function ContentRenderer({\n content,\n className,\n sx,\n compact,\n markdownComponents,\n routerLinkComponent,\n}: ContentRendererProps) {\n if (content == null) return null;\n\n // TipTap JSON document\n if (typeof content === 'object') {\n if (isTipTapDoc(content)) {\n return <TipTapRenderer content={content} className={className} sx={sx} compact={compact} />;\n }\n // Unknown object — try as TipTap anyway\n return <TipTapRenderer content={content as any} className={className} sx={sx} compact={compact} />;\n }\n\n // String content — markdown or HTML\n if (typeof content === 'string') {\n if (!content.trim()) return null;\n return (\n <Markdown\n className={className}\n sx={sx}\n compact={compact}\n components={markdownComponents}\n routerLinkComponent={routerLinkComponent}\n >\n {content}\n </Markdown>\n );\n }\n\n return null;\n}\n","'use client';\n\n/**\n * DurationPicker — Compact duration selector with presets and custom input.\n *\n * Designed for moderation actions (ban/mute) in dialogs or menus.\n * Value is in seconds; `null` represents permanent/indefinite duration.\n */\n\nimport { useCallback, useMemo, useState } from 'react';\n\nimport Box from '@mui/material/Box';\nimport MenuItem from '@mui/material/MenuItem';\nimport Select from '@mui/material/Select';\nimport TextField from '@mui/material/TextField';\nimport ToggleButton from '@mui/material/ToggleButton';\nimport ToggleButtonGroup from '@mui/material/ToggleButtonGroup';\nimport Typography from '@mui/material/Typography';\nimport { alpha, useTheme } from '@mui/material/styles';\n\nimport type { SelectChangeEvent } from '@mui/material/Select';\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\nconst HOUR = 3600;\nconst DAY = 86400;\nconst WEEK = 604800;\n\ntype TimeUnit = 'hours' | 'days' | 'weeks';\n\ninterface Preset {\n label: string;\n value: number | null; // seconds, null = permanent\n key: string;\n}\n\nconst PRESETS: Preset[] = [\n { label: '1h', value: HOUR, key: '1h' },\n { label: '6h', value: 6 * HOUR, key: '6h' },\n { label: '1d', value: DAY, key: '1d' },\n { label: '7d', value: 7 * DAY, key: '7d' },\n { label: '30d', value: 30 * DAY, key: '30d' },\n { label: '\\u221E', value: null, key: 'permanent' },\n];\n\nconst UNIT_SECONDS: Record<TimeUnit, number> = {\n hours: HOUR,\n days: DAY,\n weeks: WEEK,\n};\n\nconst CUSTOM_KEY = 'custom';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface DurationPickerLabels {\n /** Title label. @default 'Duration' */\n title?: string;\n /** Custom button label. @default 'Custom' */\n custom?: string;\n /** Time unit labels. */\n hours?: string;\n days?: string;\n weeks?: string;\n}\n\nexport interface DurationPickerProps {\n /** Duration in seconds. `null` = permanent/indefinite. */\n value: number | null;\n /** Called when duration changes. */\n onChange: (seconds: number | null) => void;\n /** Component size. @default 'small' */\n size?: 'small' | 'medium';\n /** Disable all interactions. */\n disabled?: boolean;\n /** Override default English labels for i18n. */\n labels?: DurationPickerLabels;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Find which preset key matches the current value, or 'custom' if none. */\nfunction resolveActiveKey(value: number | null): string {\n const match = PRESETS.find((p) => p.value === value);\n return match ? match.key : CUSTOM_KEY;\n}\n\n/** Decompose seconds into a human-friendly { amount, unit } pair. */\nfunction decomposeSeconds(seconds: number): { amount: number; unit: TimeUnit } {\n if (seconds > 0 && seconds % WEEK === 0) return { amount: seconds / WEEK, unit: 'weeks' };\n if (seconds > 0 && seconds % DAY === 0) return { amount: seconds / DAY, unit: 'days' };\n return { amount: Math.max(1, Math.round(seconds / HOUR)), unit: 'hours' };\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport function DurationPicker({ value, onChange, size = 'small', disabled = false, labels }: DurationPickerProps) {\n const theme = useTheme();\n\n const activeKey = useMemo(() => resolveActiveKey(value), [value]);\n\n // Local state for custom input — only used when custom is active\n const [customAmount, setCustomAmount] = useState<number>(() => {\n if (activeKey === CUSTOM_KEY && value !== null && value > 0) {\n return decomposeSeconds(value).amount;\n }\n return 1;\n });\n const [customUnit, setCustomUnit] = useState<TimeUnit>(() => {\n if (activeKey === CUSTOM_KEY && value !== null && value > 0) {\n return decomposeSeconds(value).unit;\n }\n return 'hours';\n });\n\n const isCustom = activeKey === CUSTOM_KEY;\n\n // ------- Handlers -------\n\n const handlePresetChange = useCallback(\n (_: React.MouseEvent<HTMLElement>, newKey: string | null) => {\n if (newKey === null) return; // MUI fires null on deselect — ignore\n if (newKey === CUSTOM_KEY) {\n // Switch to custom — emit current custom values\n onChange(customAmount * UNIT_SECONDS[customUnit]);\n return;\n }\n const preset = PRESETS.find((p) => p.key === newKey);\n if (preset) onChange(preset.value);\n },\n [onChange, customAmount, customUnit]\n );\n\n const handleCustomAmountChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = parseInt(e.target.value, 10);\n const clamped = Number.isFinite(raw) && raw > 0 ? raw : 1;\n setCustomAmount(clamped);\n onChange(clamped * UNIT_SECONDS[customUnit]);\n },\n [onChange, customUnit]\n );\n\n const handleCustomUnitChange = useCallback(\n (e: SelectChangeEvent<TimeUnit>) => {\n const unit = e.target.value as TimeUnit;\n setCustomUnit(unit);\n onChange(customAmount * UNIT_SECONDS[unit]);\n },\n [onChange, customAmount]\n );\n\n // ------- Styles -------\n\n const toggleSx = {\n '& .MuiToggleButton-root': {\n px: size === 'small' ? 1.25 : 1.75,\n py: size === 'small' ? 0.5 : 0.75,\n fontSize: size === 'small' ? '0.8125rem' : '0.875rem',\n fontWeight: 600,\n lineHeight: 1.5,\n borderColor: alpha(theme.palette.divider, 0.2),\n color: theme.palette.text.secondary,\n textTransform: 'none' as const,\n '&.Mui-selected': {\n color: theme.palette.primary.main,\n bgcolor: alpha(theme.palette.primary.main, 0.08),\n borderColor: alpha(theme.palette.primary.main, 0.3),\n '&:hover': {\n bgcolor: alpha(theme.palette.primary.main, 0.16),\n },\n },\n '&.Mui-disabled': {\n color: theme.palette.text.disabled,\n },\n },\n };\n\n return (\n <Box>\n <Typography\n variant=\"caption\"\n sx={{\n mb: 0.75,\n display: 'block',\n fontWeight: 600,\n color: 'text.secondary',\n }}\n >\n {labels?.title ?? 'Duration'}\n </Typography>\n\n <ToggleButtonGroup\n exclusive\n value={isCustom ? CUSTOM_KEY : activeKey}\n onChange={handlePresetChange}\n size={size}\n disabled={disabled}\n sx={{\n ...toggleSx,\n flexWrap: 'wrap',\n gap: 0.5,\n '& .MuiToggleButtonGroup-grouped': {\n border: '1px solid',\n borderRadius: '8px !important',\n borderColor: alpha(theme.palette.divider, 0.2),\n '&:not(:first-of-type)': {\n borderLeft: '1px solid',\n borderColor: alpha(theme.palette.divider, 0.2),\n marginLeft: 0,\n },\n },\n }}\n >\n {PRESETS.map((preset) => (\n <ToggleButton key={preset.key} value={preset.key}>\n {preset.label}\n </ToggleButton>\n ))}\n <ToggleButton value={CUSTOM_KEY}>{labels?.custom ?? 'Custom'}</ToggleButton>\n </ToggleButtonGroup>\n\n {/* Custom duration input row */}\n {isCustom && (\n <Box\n sx={{\n mt: 1.25,\n display: 'flex',\n alignItems: 'center',\n gap: 1,\n }}\n >\n <TextField\n type=\"number\"\n value={customAmount}\n onChange={handleCustomAmountChange}\n disabled={disabled}\n size={size}\n slotProps={{\n htmlInput: { min: 1, max: 9999, style: { textAlign: 'center' } },\n }}\n sx={{ width: 80 }}\n />\n <Select<TimeUnit>\n value={customUnit}\n onChange={handleCustomUnitChange}\n disabled={disabled}\n size={size}\n sx={{ minWidth: 100 }}\n >\n <MenuItem value=\"hours\">{labels?.hours ?? 'hours'}</MenuItem>\n <MenuItem value=\"days\">{labels?.days ?? 'days'}</MenuItem>\n <MenuItem value=\"weeks\">{labels?.weeks ?? 'weeks'}</MenuItem>\n </Select>\n </Box>\n )}\n </Box>\n );\n}\n","'use client';\n\nimport { type ReactNode } from 'react';\nimport Box from '@mui/material/Box';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\ninterface ChangelogTimelineProps {\n children: ReactNode;\n sx?: SxProps<Theme>;\n}\n\nexport function ChangelogTimeline({ children, sx }: ChangelogTimelineProps) {\n return (\n <Box\n sx={{\n position: 'relative',\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n left: { xs: 16, sm: 24 },\n top: 0,\n bottom: 0,\n width: 2,\n bgcolor: 'divider',\n },\n ...(sx as any),\n }}\n >\n {children}\n </Box>\n );\n}\n","'use client';\n\nimport { type ReactNode } from 'react';\nimport Box from '@mui/material/Box';\nimport Card from '@mui/material/Card';\nimport Typography from '@mui/material/Typography';\nimport Chip from '@mui/material/Chip';\nimport Stack from '@mui/material/Stack';\n\ninterface ChangelogEntryProps {\n version: string;\n date: string;\n badge?: string | null;\n children: ReactNode;\n}\n\nexport function ChangelogEntry({ version, date, badge, children }: ChangelogEntryProps) {\n return (\n <Box sx={{ position: 'relative', pl: { xs: 5, sm: 7 }, pb: 4 }}>\n {/* Timeline dot */}\n <Box\n sx={{\n position: 'absolute',\n left: { xs: 10, sm: 18 },\n top: 8,\n width: 14,\n height: 14,\n borderRadius: '50%',\n bgcolor: 'primary.main',\n border: 3,\n borderColor: 'background.paper',\n zIndex: 1,\n }}\n />\n <Card variant=\"outlined\" sx={{ p: 3 }}>\n <Stack\n direction=\"row\"\n spacing={1.5}\n sx={{\n alignItems: \"center\",\n mb: 2\n }}>\n <Typography variant=\"h6\" sx={{\n fontWeight: 700\n }}>\n {version}\n </Typography>\n {badge && <Chip label={badge} size=\"small\" color=\"primary\" variant=\"soft\" />}\n <Typography\n variant=\"caption\"\n sx={{\n color: \"text.secondary\",\n ml: 'auto !important'\n }}>\n {date}\n </Typography>\n </Stack>\n\n {children}\n </Card>\n </Box>\n );\n}\n"]}