@omnitron-dev/prism 0.3.0 → 0.3.2

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 (413) hide show
  1. package/README.md +216 -2
  2. package/THIRD-PARTY-NOTICES.txt +26 -0
  3. package/dist/accessibility/index.js +2 -0
  4. package/dist/accessibility/index.js.map +1 -1
  5. package/dist/auth/index.d.ts +4 -0
  6. package/dist/auth/index.d.ts.map +1 -0
  7. package/dist/auth/index.js +4 -0
  8. package/dist/auth/index.js.map +1 -0
  9. package/dist/blocks/auth-block/guards.d.ts +3 -2
  10. package/dist/blocks/auth-block/guards.d.ts.map +1 -1
  11. package/dist/blocks/dashboard-block/dashboard-block.d.ts.map +1 -1
  12. package/dist/blocks/dashboard-block/types.d.ts +4 -2
  13. package/dist/blocks/dashboard-block/types.d.ts.map +1 -1
  14. package/dist/blocks/dashboard-block/use-dashboard-block.d.ts +2 -2
  15. package/dist/blocks/dashboard-block/use-dashboard-block.d.ts.map +1 -1
  16. package/dist/blocks/data-grid-block/data-grid-block.d.ts.map +1 -1
  17. package/dist/blocks/data-grid-block/types.d.ts +3 -0
  18. package/dist/blocks/data-grid-block/types.d.ts.map +1 -1
  19. package/dist/blocks/index.js +80 -253
  20. package/dist/blocks/index.js.map +1 -1
  21. package/dist/chunk-2AB7VGPW.js +447 -0
  22. package/dist/chunk-2AB7VGPW.js.map +1 -0
  23. package/dist/{chunk-WFD54GQQ.js → chunk-2E67PQ4T.js} +14 -573
  24. package/dist/chunk-2E67PQ4T.js.map +1 -0
  25. package/dist/chunk-2KG2NI73.js +84 -0
  26. package/dist/chunk-2KG2NI73.js.map +1 -0
  27. package/dist/chunk-2UYRW6X3.js +44 -0
  28. package/dist/chunk-2UYRW6X3.js.map +1 -0
  29. package/dist/chunk-36C5H56C.js +208 -0
  30. package/dist/chunk-36C5H56C.js.map +1 -0
  31. package/dist/chunk-36FOXX25.js +73 -0
  32. package/dist/chunk-36FOXX25.js.map +1 -0
  33. package/dist/chunk-3VSM7NZG.js +562 -0
  34. package/dist/chunk-3VSM7NZG.js.map +1 -0
  35. package/dist/chunk-4B2LTPK2.js +826 -0
  36. package/dist/chunk-4B2LTPK2.js.map +1 -0
  37. package/dist/chunk-4HUGZJKU.js +108 -0
  38. package/dist/chunk-4HUGZJKU.js.map +1 -0
  39. package/dist/chunk-4Q5L7LDG.js +74 -0
  40. package/dist/chunk-4Q5L7LDG.js.map +1 -0
  41. package/dist/{chunk-BRDWQVRT.js → chunk-4R7EZ7GQ.js} +3 -2
  42. package/dist/chunk-4R7EZ7GQ.js.map +1 -0
  43. package/dist/chunk-6IANOSMD.js +185 -0
  44. package/dist/chunk-6IANOSMD.js.map +1 -0
  45. package/dist/chunk-7ATBURW2.js +206 -0
  46. package/dist/chunk-7ATBURW2.js.map +1 -0
  47. package/dist/{chunk-6AHI4GSV.js → chunk-AATAOOSF.js} +4 -3
  48. package/dist/chunk-AATAOOSF.js.map +1 -0
  49. package/dist/chunk-AKLRKCYH.js +128 -0
  50. package/dist/chunk-AKLRKCYH.js.map +1 -0
  51. package/dist/chunk-CT46KJOR.js +133 -0
  52. package/dist/chunk-CT46KJOR.js.map +1 -0
  53. package/dist/{chunk-YQW43BDH.js → chunk-D4GFAJAZ.js} +1168 -6354
  54. package/dist/chunk-D4GFAJAZ.js.map +1 -0
  55. package/dist/chunk-D5J3KW6Q.js +106 -0
  56. package/dist/chunk-D5J3KW6Q.js.map +1 -0
  57. package/dist/chunk-DEPJRTVT.js +3 -0
  58. package/dist/{chunk-FU52GL2E.js.map → chunk-DEPJRTVT.js.map} +1 -1
  59. package/dist/{chunk-S6SEGBX6.js → chunk-DHTYHUYI.js} +85 -107
  60. package/dist/chunk-DHTYHUYI.js.map +1 -0
  61. package/dist/chunk-E7WM2RXA.js +249 -0
  62. package/dist/chunk-E7WM2RXA.js.map +1 -0
  63. package/dist/chunk-F6RZ7LW6.js +1271 -0
  64. package/dist/chunk-F6RZ7LW6.js.map +1 -0
  65. package/dist/chunk-FOGY3HA4.js +217 -0
  66. package/dist/chunk-FOGY3HA4.js.map +1 -0
  67. package/dist/chunk-G2GANYMW.js +139 -0
  68. package/dist/chunk-G2GANYMW.js.map +1 -0
  69. package/dist/chunk-I6DILPFE.js +293 -0
  70. package/dist/chunk-I6DILPFE.js.map +1 -0
  71. package/dist/chunk-IRYU3NTG.js +573 -0
  72. package/dist/chunk-IRYU3NTG.js.map +1 -0
  73. package/dist/chunk-JTIUGPW5.js +284 -0
  74. package/dist/chunk-JTIUGPW5.js.map +1 -0
  75. package/dist/{chunk-GUFHFEPZ.js → chunk-JZBSPDED.js} +2 -2
  76. package/dist/{chunk-GUFHFEPZ.js.map → chunk-JZBSPDED.js.map} +1 -1
  77. package/dist/chunk-KPY7TA4D.js +191 -0
  78. package/dist/chunk-KPY7TA4D.js.map +1 -0
  79. package/dist/{chunk-OBJ244BO.js → chunk-LFWKGNCX.js} +50 -656
  80. package/dist/chunk-LFWKGNCX.js.map +1 -0
  81. package/dist/chunk-LH4ZZZYB.js +37 -0
  82. package/dist/chunk-LH4ZZZYB.js.map +1 -0
  83. package/dist/chunk-NFJ7CPG3.js +13 -0
  84. package/dist/chunk-NFJ7CPG3.js.map +1 -0
  85. package/dist/chunk-NFPOIHD4.js +3 -0
  86. package/dist/{chunk-AYYFMTMI.js.map → chunk-NFPOIHD4.js.map} +1 -1
  87. package/dist/{chunk-XIXSSI3B.js → chunk-NJM5AVBM.js} +3 -2
  88. package/dist/chunk-NJM5AVBM.js.map +1 -0
  89. package/dist/{chunk-Z5OSPAOC.js → chunk-NSNM53WI.js} +196 -175
  90. package/dist/chunk-NSNM53WI.js.map +1 -0
  91. package/dist/chunk-NTREGTG7.js +31 -0
  92. package/dist/chunk-NTREGTG7.js.map +1 -0
  93. package/dist/{chunk-ADG4HZEP.js → chunk-OKJA6SJM.js} +4 -4
  94. package/dist/chunk-OKJA6SJM.js.map +1 -0
  95. package/dist/chunk-Q6JDNFSG.js +303 -0
  96. package/dist/chunk-Q6JDNFSG.js.map +1 -0
  97. package/dist/chunk-RPOGINR5.js +115 -0
  98. package/dist/chunk-RPOGINR5.js.map +1 -0
  99. package/dist/{chunk-ZTATTUH7.js → chunk-RSWVYIXK.js} +282 -683
  100. package/dist/chunk-RSWVYIXK.js.map +1 -0
  101. package/dist/chunk-SSEHL5VP.js +110 -0
  102. package/dist/chunk-SSEHL5VP.js.map +1 -0
  103. package/dist/chunk-TEIGUOWN.js +523 -0
  104. package/dist/chunk-TEIGUOWN.js.map +1 -0
  105. package/dist/{chunk-AYYFMTMI.js → chunk-TJ7DHXUX.js} +2 -2
  106. package/dist/chunk-TJ7DHXUX.js.map +1 -0
  107. package/dist/chunk-TZHWYT34.js +590 -0
  108. package/dist/chunk-TZHWYT34.js.map +1 -0
  109. package/dist/chunk-TZWHELY4.js +45 -0
  110. package/dist/chunk-TZWHELY4.js.map +1 -0
  111. package/dist/{chunk-BZOL7GMU.js → chunk-UEINJFLS.js} +7 -7
  112. package/dist/chunk-UEINJFLS.js.map +1 -0
  113. package/dist/chunk-URFQX3I6.js +129 -0
  114. package/dist/chunk-URFQX3I6.js.map +1 -0
  115. package/dist/chunk-VG6FOMOH.js +187 -0
  116. package/dist/chunk-VG6FOMOH.js.map +1 -0
  117. package/dist/chunk-VQVVHMPG.js +106 -0
  118. package/dist/chunk-VQVVHMPG.js.map +1 -0
  119. package/dist/{chunk-DRFNMZLG.js → chunk-VUKOT432.js} +3 -2
  120. package/dist/chunk-VUKOT432.js.map +1 -0
  121. package/dist/chunk-WD4N72DL.js +315 -0
  122. package/dist/chunk-WD4N72DL.js.map +1 -0
  123. package/dist/chunk-XBYMG4QK.js +119 -0
  124. package/dist/chunk-XBYMG4QK.js.map +1 -0
  125. package/dist/chunk-YHM6GIHV.js +3 -0
  126. package/dist/chunk-YHM6GIHV.js.map +1 -0
  127. package/dist/{chunk-SNZK5X6F.js → chunk-Z2AN43YU.js} +4 -2
  128. package/dist/chunk-Z2AN43YU.js.map +1 -0
  129. package/dist/chunk-ZNWHMQRM.js +171 -0
  130. package/dist/chunk-ZNWHMQRM.js.map +1 -0
  131. package/dist/{chunk-YSIG2XYH.js → chunk-ZRJYQN6Y.js} +2 -2
  132. package/dist/{chunk-YSIG2XYH.js.map → chunk-ZRJYQN6Y.js.map} +1 -1
  133. package/dist/{chunk-AD4W7HYC.js → chunk-ZYI3MHLE.js} +3 -2
  134. package/dist/chunk-ZYI3MHLE.js.map +1 -0
  135. package/dist/cli/index.js +66 -423
  136. package/dist/cli/index.js.map +1 -1
  137. package/dist/components/accordion/accordion.d.ts.map +1 -1
  138. package/dist/components/admin-filters/admin-data-table.d.ts +7 -1
  139. package/dist/components/admin-filters/admin-data-table.d.ts.map +1 -1
  140. package/dist/components/admin-filters/filter-toolbar.d.ts.map +1 -1
  141. package/dist/components/admin-filters/index.js +8 -0
  142. package/dist/components/admin-filters/index.js.map +1 -0
  143. package/dist/components/alert/alert.d.ts.map +1 -1
  144. package/dist/components/alert/index.js +5 -0
  145. package/dist/components/alert/index.js.map +1 -0
  146. package/dist/components/animate/index.js +5 -0
  147. package/dist/components/animate/index.js.map +1 -0
  148. package/dist/components/breadcrumbs/breadcrumbs.d.ts.map +1 -1
  149. package/dist/components/breadcrumbs/index.js +4 -0
  150. package/dist/components/breadcrumbs/index.js.map +1 -0
  151. package/dist/components/card/index.js +4 -0
  152. package/dist/components/card/index.js.map +1 -0
  153. package/dist/components/chart/chart.d.ts.map +1 -1
  154. package/dist/components/chart/index.css +52 -0
  155. package/dist/components/chart/index.css.map +1 -0
  156. package/dist/components/chart/index.js +5 -0
  157. package/dist/components/chart/index.js.map +1 -0
  158. package/dist/components/chart/types.d.ts +3 -1
  159. package/dist/components/chart/types.d.ts.map +1 -1
  160. package/dist/components/chart/use-chart.d.ts.map +1 -1
  161. package/dist/components/command-palette/command-palette.d.ts +3 -1
  162. package/dist/components/command-palette/command-palette.d.ts.map +1 -1
  163. package/dist/components/command-palette/index.js +4 -0
  164. package/dist/components/command-palette/index.js.map +1 -0
  165. package/dist/components/confirm-dialog/index.js +4 -0
  166. package/dist/components/confirm-dialog/index.js.map +1 -0
  167. package/dist/components/date-input/date-input.d.ts +28 -0
  168. package/dist/components/date-input/date-input.d.ts.map +1 -0
  169. package/dist/components/date-input/index.d.ts +3 -0
  170. package/dist/components/date-input/index.d.ts.map +1 -0
  171. package/dist/components/date-input/value.d.ts +9 -0
  172. package/dist/components/date-input/value.d.ts.map +1 -0
  173. package/dist/components/doc-layout/doc-sidebar.d.ts +4 -1
  174. package/dist/components/doc-layout/doc-sidebar.d.ts.map +1 -1
  175. package/dist/components/doc-layout/index.js +7 -0
  176. package/dist/components/doc-layout/index.js.map +1 -0
  177. package/dist/components/editor/editor.d.ts.map +1 -1
  178. package/dist/components/editor/icons/index.d.ts +32 -40
  179. package/dist/components/editor/icons/index.d.ts.map +1 -1
  180. package/dist/components/editor/index.js +4 -1
  181. package/dist/components/editor/index.js.map +1 -1
  182. package/dist/components/emoji-picker/index.js +2 -1
  183. package/dist/components/emoji-picker/index.js.map +1 -1
  184. package/dist/components/empty-content/empty-content.d.ts.map +1 -1
  185. package/dist/components/empty-content/index.js +4 -0
  186. package/dist/components/empty-content/index.js.map +1 -0
  187. package/dist/components/error-boundary/error-boundary.d.ts.map +1 -1
  188. package/dist/components/error-boundary/index.js +6 -0
  189. package/dist/components/error-boundary/index.js.map +1 -0
  190. package/dist/components/index.css +17 -10
  191. package/dist/components/index.css.map +1 -1
  192. package/dist/components/index.d.ts +5 -4
  193. package/dist/components/index.d.ts.map +1 -1
  194. package/dist/components/index.js +47 -11
  195. package/dist/components/index.js.map +1 -1
  196. package/dist/components/knowledge-graph/edge-labels.d.ts +14 -0
  197. package/dist/components/knowledge-graph/edge-labels.d.ts.map +1 -0
  198. package/dist/components/knowledge-graph/graph.d.ts +56 -0
  199. package/dist/components/knowledge-graph/graph.d.ts.map +1 -0
  200. package/dist/components/knowledge-graph/index.css +176 -0
  201. package/dist/components/knowledge-graph/index.css.map +1 -0
  202. package/dist/components/knowledge-graph/index.d.ts +3 -0
  203. package/dist/components/knowledge-graph/index.d.ts.map +1 -0
  204. package/dist/components/knowledge-graph/index.js +797 -0
  205. package/dist/components/knowledge-graph/index.js.map +1 -0
  206. package/dist/components/knowledge-graph/label-layout.d.ts +28 -0
  207. package/dist/components/knowledge-graph/label-layout.d.ts.map +1 -0
  208. package/dist/components/knowledge-graph/label-store.d.ts +15 -0
  209. package/dist/components/knowledge-graph/label-store.d.ts.map +1 -0
  210. package/dist/components/knowledge-graph/model.d.ts +92 -0
  211. package/dist/components/knowledge-graph/model.d.ts.map +1 -0
  212. package/dist/components/label/index.js +5 -0
  213. package/dist/components/label/index.js.map +1 -0
  214. package/dist/components/label/label.d.ts.map +1 -1
  215. package/dist/components/lightbox/lightbox.d.ts.map +1 -1
  216. package/dist/components/loading-screen/index.js +4 -0
  217. package/dist/components/loading-screen/index.js.map +1 -0
  218. package/dist/components/map/Map.d.ts +19 -43
  219. package/dist/components/map/Map.d.ts.map +1 -1
  220. package/dist/components/map/MapCoverageLayer.d.ts +1 -1
  221. package/dist/components/map/MapCoverageLayer.d.ts.map +1 -1
  222. package/dist/components/map/MapMarker.d.ts +1 -1
  223. package/dist/components/map/MapMarker.d.ts.map +1 -1
  224. package/dist/components/map/MapPlaceSearch.d.ts +33 -0
  225. package/dist/components/map/MapPlaceSearch.d.ts.map +1 -0
  226. package/dist/components/map/MapPointPicker.d.ts +21 -12
  227. package/dist/components/map/MapPointPicker.d.ts.map +1 -1
  228. package/dist/components/map/coordinates.d.ts +10 -0
  229. package/dist/components/map/coordinates.d.ts.map +1 -0
  230. package/dist/components/map/index.css +4 -0
  231. package/dist/components/map/index.css.map +1 -0
  232. package/dist/components/map/index.d.ts +7 -2
  233. package/dist/components/map/index.d.ts.map +1 -1
  234. package/dist/components/map/index.js +4 -0
  235. package/dist/components/map/index.js.map +1 -0
  236. package/dist/components/nav-card/nav-card.d.ts.map +1 -1
  237. package/dist/components/navigation-progress/index.js +4 -0
  238. package/dist/components/navigation-progress/index.js.map +1 -0
  239. package/dist/components/page-content/index.js +4 -0
  240. package/dist/components/page-content/index.js.map +1 -0
  241. package/dist/components/popover/index.js +4 -0
  242. package/dist/components/popover/index.js.map +1 -0
  243. package/dist/components/rail/rail.d.ts.map +1 -1
  244. package/dist/components/research/diagram-image.d.ts +11 -0
  245. package/dist/components/research/diagram-image.d.ts.map +1 -0
  246. package/dist/components/research/diagram.d.ts +8 -0
  247. package/dist/components/research/diagram.d.ts.map +1 -0
  248. package/dist/components/research/document.d.ts +33 -0
  249. package/dist/components/research/document.d.ts.map +1 -0
  250. package/dist/components/research/frontmatter.d.ts +15 -0
  251. package/dist/components/research/frontmatter.d.ts.map +1 -0
  252. package/dist/components/research/index.css +51 -0
  253. package/dist/components/research/index.css.map +1 -0
  254. package/dist/components/research/index.d.ts +3 -0
  255. package/dist/components/research/index.d.ts.map +1 -0
  256. package/dist/components/research/index.js +8 -0
  257. package/dist/components/research/index.js.map +1 -0
  258. package/dist/components/research/parse.d.ts +29 -0
  259. package/dist/components/research/parse.d.ts.map +1 -0
  260. package/dist/components/research-editor/block-commands.d.ts +20 -0
  261. package/dist/components/research-editor/block-commands.d.ts.map +1 -0
  262. package/dist/components/research-editor/block-controls.d.ts +13 -0
  263. package/dist/components/research-editor/block-controls.d.ts.map +1 -0
  264. package/dist/components/research-editor/editor.d.ts +75 -0
  265. package/dist/components/research-editor/editor.d.ts.map +1 -0
  266. package/dist/components/research-editor/extensions.d.ts +14 -0
  267. package/dist/components/research-editor/extensions.d.ts.map +1 -0
  268. package/dist/components/research-editor/index.css +332 -0
  269. package/dist/components/research-editor/index.css.map +1 -0
  270. package/dist/components/research-editor/index.d.ts +5 -0
  271. package/dist/components/research-editor/index.d.ts.map +1 -0
  272. package/dist/components/research-editor/index.js +1593 -0
  273. package/dist/components/research-editor/index.js.map +1 -0
  274. package/dist/components/research-editor/math-input.d.ts +32 -0
  275. package/dist/components/research-editor/math-input.d.ts.map +1 -0
  276. package/dist/components/research-editor/math-markup.d.ts +4 -0
  277. package/dist/components/research-editor/math-markup.d.ts.map +1 -0
  278. package/dist/components/research-editor/math-navigation.d.ts +6 -0
  279. package/dist/components/research-editor/math-navigation.d.ts.map +1 -0
  280. package/dist/components/research-editor/math-node.d.ts +11 -0
  281. package/dist/components/research-editor/math-node.d.ts.map +1 -0
  282. package/dist/components/research-editor/source.d.ts +19 -0
  283. package/dist/components/research-editor/source.d.ts.map +1 -0
  284. package/dist/components/scroll-to-top/index.js +4 -0
  285. package/dist/components/scroll-to-top/index.js.map +1 -0
  286. package/dist/components/scrollbar/scrollbar.d.ts +4 -2
  287. package/dist/components/scrollbar/scrollbar.d.ts.map +1 -1
  288. package/dist/components/search-input/index.js +7 -0
  289. package/dist/components/search-input/index.js.map +1 -0
  290. package/dist/components/search-input/search-input.d.ts +3 -11
  291. package/dist/components/search-input/search-input.d.ts.map +1 -1
  292. package/dist/components/skeleton/index.js +4 -0
  293. package/dist/components/skeleton/index.js.map +1 -0
  294. package/dist/components/snackbar/index.js +6 -0
  295. package/dist/components/snackbar/index.js.map +1 -0
  296. package/dist/components/stepper/index.js +4 -0
  297. package/dist/components/stepper/index.js.map +1 -0
  298. package/dist/components/table/index.d.ts +1 -0
  299. package/dist/components/table/index.d.ts.map +1 -1
  300. package/dist/components/table/index.js +5 -0
  301. package/dist/components/table/index.js.map +1 -0
  302. package/dist/components/table/table-viewport.d.ts +13 -0
  303. package/dist/components/table/table-viewport.d.ts.map +1 -0
  304. package/dist/components/table/table.d.ts +3 -1
  305. package/dist/components/table/table.d.ts.map +1 -1
  306. package/dist/components/tabs/index.js +6 -0
  307. package/dist/components/tabs/index.js.map +1 -0
  308. package/dist/components/tabs/tabs.d.ts +12 -1
  309. package/dist/components/tabs/tabs.d.ts.map +1 -1
  310. package/dist/components/tiptap-renderer/tiptap-renderer.d.ts +4 -3
  311. package/dist/components/tiptap-renderer/tiptap-renderer.d.ts.map +1 -1
  312. package/dist/core/index.d.ts +1 -1
  313. package/dist/core/index.d.ts.map +1 -1
  314. package/dist/core/index.js +12 -6
  315. package/dist/core/index.js.map +1 -1
  316. package/dist/core/provider.d.ts +7 -2
  317. package/dist/core/provider.d.ts.map +1 -1
  318. package/dist/forms/index.js +2 -0
  319. package/dist/forms/index.js.map +1 -1
  320. package/dist/forms/schema-provider.d.ts +3 -3
  321. package/dist/forms/schema-utils.d.ts +3 -3
  322. package/dist/hooks/index.js +14 -8
  323. package/dist/hooks/index.js.map +1 -1
  324. package/dist/hooks/use-config-from-query.d.ts +2 -0
  325. package/dist/hooks/use-config-from-query.d.ts.map +1 -1
  326. package/dist/hooks/use-image-dimensions.d.ts.map +1 -1
  327. package/dist/hooks/use-keyboard-shortcut.d.ts.map +1 -1
  328. package/dist/hooks/use-scroll-position.d.ts.map +1 -1
  329. package/dist/hooks/use-window-size.d.ts.map +1 -1
  330. package/dist/icons/context.d.ts +17 -0
  331. package/dist/icons/context.d.ts.map +1 -0
  332. package/dist/icons/controls.d.ts +51 -0
  333. package/dist/icons/controls.d.ts.map +1 -0
  334. package/dist/icons/index.d.ts +3 -0
  335. package/dist/icons/index.d.ts.map +1 -0
  336. package/dist/icons/index.js +5 -0
  337. package/dist/icons/index.js.map +1 -0
  338. package/dist/icons/theme.d.ts +4 -0
  339. package/dist/icons/theme.d.ts.map +1 -0
  340. package/dist/index.css +17 -10
  341. package/dist/index.css.map +1 -1
  342. package/dist/index.js +57 -20
  343. package/dist/index.js.map +1 -1
  344. package/dist/internal/research-parser.js +3 -0
  345. package/dist/internal/research-parser.js.map +1 -0
  346. package/dist/layouts/core/header-section.d.ts +1 -0
  347. package/dist/layouts/core/header-section.d.ts.map +1 -1
  348. package/dist/layouts/dashboard/labels.d.ts +12 -0
  349. package/dist/layouts/dashboard/labels.d.ts.map +1 -0
  350. package/dist/layouts/dashboard/layout.d.ts +9 -1
  351. package/dist/layouts/dashboard/layout.d.ts.map +1 -1
  352. package/dist/layouts/dashboard/sidenav.d.ts +7 -3
  353. package/dist/layouts/dashboard/sidenav.d.ts.map +1 -1
  354. package/dist/layouts/index.d.ts +5 -0
  355. package/dist/layouts/index.d.ts.map +1 -1
  356. package/dist/layouts/index.js +9 -3
  357. package/dist/layouts/index.js.map +1 -1
  358. package/dist/layouts/panel-layout.d.ts +35 -0
  359. package/dist/layouts/panel-layout.d.ts.map +1 -0
  360. package/dist/layouts/sidebar-toggle.d.ts +11 -0
  361. package/dist/layouts/sidebar-toggle.d.ts.map +1 -0
  362. package/dist/netron/index.js +2 -1
  363. package/dist/netron/index.js.map +1 -1
  364. package/dist/registry/index.js +1 -1
  365. package/dist/state/create-store.d.ts.map +1 -1
  366. package/dist/state/index.js +3 -2
  367. package/dist/state/index.js.map +1 -1
  368. package/dist/state/settings-version.d.ts.map +1 -1
  369. package/dist/state/stores/auth.d.ts +4 -16
  370. package/dist/state/stores/auth.d.ts.map +1 -1
  371. package/dist/state/stores/ui.d.ts +7 -105
  372. package/dist/state/stores/ui.d.ts.map +1 -1
  373. package/dist/theme/components/Button.d.ts.map +1 -1
  374. package/dist/theme/components/Chip.d.ts.map +1 -1
  375. package/dist/theme/components/Dialog.d.ts.map +1 -1
  376. package/dist/theme/components/FormControls.d.ts +3 -12
  377. package/dist/theme/components/FormControls.d.ts.map +1 -1
  378. package/dist/theme/components/TextField.d.ts.map +1 -1
  379. package/dist/theme/components/index.d.ts.map +1 -1
  380. package/dist/theme/components/theme-utils.d.ts +2 -2
  381. package/dist/theme/components/theme-utils.d.ts.map +1 -1
  382. package/dist/theme/create-theme.d.ts +5 -17
  383. package/dist/theme/create-theme.d.ts.map +1 -1
  384. package/dist/theme/index.js +8 -2
  385. package/dist/theme/index.js.map +1 -1
  386. package/dist/theme/mixins.d.ts +3 -1
  387. package/dist/theme/mixins.d.ts.map +1 -1
  388. package/dist/theme/palette/overrides.d.ts +24 -0
  389. package/dist/theme/palette/overrides.d.ts.map +1 -0
  390. package/dist/theme/semantic-surface.d.ts +8 -0
  391. package/dist/theme/semantic-surface.d.ts.map +1 -0
  392. package/dist/types/index.js +2 -2
  393. package/dist/ui/index.d.ts +18 -0
  394. package/dist/ui/index.d.ts.map +1 -0
  395. package/dist/ui/index.js +149 -0
  396. package/dist/ui/index.js.map +1 -0
  397. package/dist/utils/async-lock.d.ts.map +1 -1
  398. package/package.json +200 -47
  399. package/dist/chunk-6AHI4GSV.js.map +0 -1
  400. package/dist/chunk-AD4W7HYC.js.map +0 -1
  401. package/dist/chunk-ADG4HZEP.js.map +0 -1
  402. package/dist/chunk-BRDWQVRT.js.map +0 -1
  403. package/dist/chunk-BZOL7GMU.js.map +0 -1
  404. package/dist/chunk-DRFNMZLG.js.map +0 -1
  405. package/dist/chunk-FU52GL2E.js +0 -3
  406. package/dist/chunk-OBJ244BO.js.map +0 -1
  407. package/dist/chunk-S6SEGBX6.js.map +0 -1
  408. package/dist/chunk-SNZK5X6F.js.map +0 -1
  409. package/dist/chunk-WFD54GQQ.js.map +0 -1
  410. package/dist/chunk-XIXSSI3B.js.map +0 -1
  411. package/dist/chunk-YQW43BDH.js.map +0 -1
  412. package/dist/chunk-Z5OSPAOC.js.map +0 -1
  413. package/dist/chunk-ZTATTUH7.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/content-renderer/classes.ts","../src/components/content-renderer/styles.ts","../src/components/tiptap-renderer/tiptap-renderer.tsx"],"names":[],"mappings":";;;;;AAIA,IAAM,MAAA,GAAS,eAAA;AAER,IAAM,cAAA,GAAiB;AAAA,EAC5B,IAAA,EAAM,GAAG,MAAM,CAAA,MAAA,CAAA;AAAA,EACf,OAAA,EAAS,GAAG,MAAM,CAAA,SAAA,CAAA;AAAA,EAClB,MAAA,EAAQ,GAAG,MAAM,CAAA,QAAA,CAAA;AAAA,EACjB,QAAA,EAAU,GAAG,MAAM,CAAA,UAAA,CAAA;AAAA,EACnB,KAAA,EAAO,GAAG,MAAM,CAAA,OAAA,CAAA;AAAA,EAChB,IAAA,EAAM,GAAG,MAAM,CAAA,MAAA,CAAA;AAAA,EACf,QAAA,EAAU,GAAG,MAAM,CAAA,UAAA,CAAA;AAAA,EACnB,SAAA,EAAW,GAAG,MAAM,CAAA,YAAA,CAAA;AAAA,EACpB,cAAA,EAAgB,GAAG,MAAM,CAAA,kBAAA,CAAA;AAAA,EACzB,aAAA,EAAe,GAAG,MAAM,CAAA,iBAAA,CAAA;AAAA,EACxB,kBAAA,EAAoB,GAAG,MAAM,CAAA,sBAAA,CAAA;AAAA,EAC7B,UAAA,EAAY,GAAG,MAAM,CAAA,aAAA,CAAA;AAAA,EACrB,OAAA,EAAS,GAAG,MAAM,CAAA,SAAA,CAAA;AAAA,EAClB,UAAA,EAAY,GAAG,MAAM,CAAA,YAAA,CAAA;AAAA,EACrB,cAAA,EAAgB,GAAG,MAAM,CAAA,iBAAA,CAAA;AAAA,EACzB,aAAA,EAAe,GAAG,MAAM,CAAA,gBAAA,CAAA;AAAA,EACxB,iBAAA,EAAmB,GAAG,MAAM,CAAA,oBAAA,CAAA;AAAA,EAC5B,gBAAA,EAAkB,GAAG,MAAM,CAAA,mBAAA,CAAA;AAAA,EAC3B,cAAA,EAAgB,GAAG,MAAM,CAAA,iBAAA,CAAA;AAAA,EACzB,iBAAA,EAAmB,GAAG,MAAM,CAAA,oBAAA,CAAA;AAAA,EAC5B,eAAA,EAAiB,GAAG,MAAM,CAAA,kBAAA,CAAA;AAAA,EAC1B,iBAAA,EAAmB,GAAG,MAAM,CAAA,oBAAA,CAAA;AAAA,EAC5B,IAAA,EAAM,GAAG,MAAM,CAAA,MAAA,CAAA;AAAA,EACf,UAAA,EAAY,GAAG,MAAM,CAAA,aAAA,CAAA;AAAA,EACrB,OAAA,EAAS,GAAG,MAAM,CAAA,UAAA,CAAA;AAAA,EAClB,aAAA,EAAe,GAAG,MAAM,CAAA,iBAAA,CAAA;AAAA,EACxB,SAAA,EAAW,GAAG,MAAM,CAAA,YAAA,CAAA;AAAA,EACpB,MAAA,EAAQ,GAAG,MAAM,CAAA,QAAA,CAAA;AAAA,EACjB,UAAA,EAAY,GAAG,MAAM,CAAA,YAAA,CAAA;AAAA,EACrB,GAAA,EAAK,GAAG,MAAM,CAAA,KAAA;AAChB;AC3BA,IAAM,MAAA,GAAS,QAAA;AACf,IAAM,SAAA,GAAY,yFAAA;AAEX,IAAM,cAAc,MAAA,CAAO,KAAK,EAAE,CAAC,EAAE,OAAM,MAAO;AAAA;AAAA,EAEvD,SAAA,EAAW;AAAA,IACT,SAAA,EAAW,CAAA;AAAA,IACX,YAAA,EAAc;AAAA,GAChB;AAAA;AAAA,EAGA,oCAAA,EAAsC;AAAA,IACpC,eAAA,EAAiB;AAAA;AAAA,GACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,EAAA,EAAI,EAAE,GAAG,KAAA,CAAM,WAAW,EAAA,EAAI,SAAA,EAAW,CAAA,EAAG,YAAA,EAAc,EAAA,EAAG;AAAA,EAC7D,EAAA,EAAI,EAAE,GAAG,KAAA,CAAM,WAAW,EAAA,EAAI,SAAA,EAAW,CAAA,EAAG,YAAA,EAAc,EAAA,EAAG;AAAA,EAC7D,EAAA,EAAI,EAAE,GAAG,KAAA,CAAM,WAAW,EAAA,EAAI,SAAA,EAAW,CAAA,EAAG,YAAA,EAAc,CAAA,EAAE;AAAA,EAC5D,EAAA,EAAI,EAAE,GAAG,KAAA,CAAM,WAAW,EAAA,EAAI,SAAA,EAAW,CAAA,EAAG,YAAA,EAAc,CAAA,EAAE;AAAA,EAC5D,EAAA,EAAI,EAAE,GAAG,KAAA,CAAM,WAAW,EAAA,EAAI,SAAA,EAAW,CAAA,EAAG,YAAA,EAAc,CAAA,EAAE;AAAA,EAC5D,EAAA,EAAI,EAAE,GAAG,KAAA,CAAM,WAAW,EAAA,EAAI,SAAA,EAAW,CAAA,EAAG,YAAA,EAAc,CAAA,EAAE;AAAA,EAC5D,oBAAA,EAAsB,EAAE,SAAA,EAAW,EAAA,EAAG;AAAA,EACtC,UAAA,EAAY,EAAE,SAAA,EAAW,EAAA,EAAG;AAAA,EAC5B,8BAAA,EAAgC,EAAE,SAAA,EAAW,EAAA,EAAG;AAAA;AAAA,EAGhD,CAAA,EAAG;AAAA,IACD,GAAG,MAAM,UAAA,CAAW,KAAA;AAAA,IACpB,YAAA,EAAc,SAAA;AAAA,IACd,UAAA,EAAY;AAAA,GACd;AAAA;AAAA,EAGA,EAAA,EAAI;AAAA,IACF,UAAA,EAAY,CAAA;AAAA,IACZ,WAAA,EAAa,CAAA;AAAA,IACb,MAAA,EAAQ,OAAA;AAAA,IACR,WAAA,EAAa,OAAA;AAAA,IACb,iBAAA,EAAmB,MAAA;AAAA,IACnB,WAAA,EAAa,MAAM,OAAA,CAAQ;AAAA,GAC7B;AAAA;AAAA,EAGA,CAAC,CAAA,GAAA,EAAM,cAAA,CAAe,KAAK,EAAE,GAAG;AAAA,IAC9B,KAAA,EAAO,MAAA;AAAA,IACP,MAAA,EAAQ,MAAA;AAAA,IACR,QAAA,EAAU,MAAA;AAAA,IACV,MAAA,EAAQ,kBAAA;AAAA,IACR,YAAA,EAAc,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,YAAY,CAAA,GAAI;AAAA,GACnD;AAAA;AAAA,EAEA,oBAAA,EAAsB;AAAA,IACpB,QAAA,EAAU,MAAA;AAAA,IACV,MAAA,EAAQ,MAAA;AAAA,IACR,YAAA,EAAc,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,YAAY,CAAA,GAAI,CAAA;AAAA,IACjD,YAAA,EAAc;AAAA,GAChB;AAAA;AAAA,EAGA,KAAA,EAAO;AAAA,IACL,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,IAAA;AAAA,IAC7B,cAAA,EAAgB,MAAA;AAAA,IAChB,SAAA,EAAW;AAAA,MACT,cAAA,EAAgB;AAAA;AAClB,GACF;AAAA;AAAA,EAGA,MAAA,EAAQ;AAAA,IACN,aAAA,EAAe;AAAA,GACjB;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,WAAA,EAAa,EAAA;AAAA,IACb,YAAA,EAAc,SAAA;AAAA,IACd,QAAA,EAAU;AAAA,MACR,UAAA,EAAY,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWZ,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,CAAA;AAAA,QACR,OAAA,EAAS;AAAA;AACX;AACF,GACF;AAAA;AAAA,EAEA,oCAAA,EAAsC;AAAA,IACpC,YAAA,EAAc;AAAA,GAChB;AAAA;AAAA,EAGA,4BAAA,EAA8B;AAAA,IAC5B,SAAA,EAAW,MAAA;AAAA,IACX,WAAA,EAAa,CAAA;AAAA,IACb,MAAA,EAAQ;AAAA,MACN,OAAA,EAAS,MAAA;AAAA,MACT,UAAA,EAAY,YAAA;AAAA,MACZ,GAAA,EAAK,CAAA;AAAA,MACL,WAAA,EAAa;AAAA,QACX,SAAA,EAAW;AAAA;AACb;AACF,GACF;AAAA;AAAA,EAGA,cAAA,EAAgB;AAAA,IACd,UAAA,EAAY,GAAA;AAAA,IACZ,QAAA,EAAU,KAAA;AAAA,IACV,MAAA,EAAQ,QAAA;AAAA,IACR,QAAA,EAAU,UAAA;AAAA,IACV,SAAS,KAAA,CAAM,OAAA,CAAQ,GAAA,EAAK,CAAA,EAAG,KAAK,CAAC,CAAA;AAAA,IACrC,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,SAAA;AAAA,IAC1B,UAAA,EAAY,CAAA,UAAA,EAAa,KAAA,CAAM,OAAA,CAAQ,QAAQ,IAAI,CAAA,CAAA;AAAA,IACnD,YAAA,EAAc,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,YAAY,CAAA,GAAI,CAAA;AAAA,IACjD,iBAAiB,KAAA,CAAM,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,MAAM,IAAI,CAAA;AAAA,IACvD,KAAA,EAAO;AAAA,MACL,MAAA,EAAQ,CAAA;AAAA,MACR,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,SAAA,EAAW;AAAA,MACT,SAAA,EAAW;AAAA,KACb;AAAA,IACA,WAAA,EAAa;AAAA,MACX,IAAA,EAAM,EAAA;AAAA,MACN,GAAA,EAAK,CAAA;AAAA,MACL,OAAA,EAAS,OAAA;AAAA,MACT,QAAA,EAAU,OAAA;AAAA,MACV,OAAA,EAAS,UAAA;AAAA,MACT,QAAA,EAAU,UAAA;AAAA,MACV,OAAO,KAAA,CAAM,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,MAAM,GAAG,CAAA;AAAA,MAC5C,UAAA,EAAY;AAAA;AACd,GACF;AAAA;AAAA,EAGA,CAAC,CAAA,GAAA,EAAM,cAAA,CAAe,UAAU,EAAE,GAAG;AAAA,IACnC,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,IAAA,EAAM,IAAI,CAAA;AAAA,IACjC,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,SAAA;AAAA,IAC1B,QAAA,EAAU,KAAA,CAAM,UAAA,CAAW,KAAA,CAAM,QAAA;AAAA,IACjC,YAAA,EAAc,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,YAAY,CAAA,GAAI,CAAA;AAAA,IACjD,iBAAiB,KAAA,CAAM,KAAA,CAAM,QAAQ,IAAA,CAAK,GAAG,GAAG,GAAG,CAAA;AAAA,IACnD,UAAA,EAAY;AAAA,GACd;AAAA;AAAA,EAEA,iCAAA,EAAmC;AAAA,IACjC,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,IAAA,EAAM,IAAI,CAAA;AAAA,IACjC,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,SAAA;AAAA,IAC1B,QAAA,EAAU,KAAA,CAAM,UAAA,CAAW,KAAA,CAAM,QAAA;AAAA,IACjC,YAAA,EAAc,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,YAAY,CAAA,GAAI,CAAA;AAAA,IACjD,iBAAiB,KAAA,CAAM,KAAA,CAAM,QAAQ,IAAA,CAAK,GAAG,GAAG,GAAG,CAAA;AAAA,IACnD,UAAA,EAAY;AAAA,GACd;AAAA;AAAA,EAGA,CAAC,CAAA,GAAA,EAAM,cAAA,CAAe,SAAS,EAAE,GAAG;AAAA,IAClC,QAAA,EAAU,UAAA;AAAA,IACV,YAAA,EAAc,SAAA;AAAA,IACd,OAAA,EAAS;AAAA,MACP,SAAA,EAAW,MAAA;AAAA,MACX,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,MACxB,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,KAAA;AAAA,MAC5B,YAAA,EAAc,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,YAAY,CAAA,GAAI,GAAA;AAAA,MACjD,UAAA,EAAY,SAAA;AAAA,MACZ,QAAA,EAAU,KAAA,CAAM,UAAA,CAAW,KAAA,CAAM,QAAA;AAAA,MACjC,UAAA,EAAY,GAAA;AAAA,MACZ,eAAA,EAAiB,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA;AAAA,MACvC,GAAI,KAAA,CAAM,OAAA,CAAQ,IAAA,KAAS,MAAA,IAAU;AAAA,QACnC,iBAAiB,KAAA,CAAM,KAAA,CAAM,QAAQ,IAAA,CAAK,GAAG,GAAG,GAAG;AAAA,OACrD;AAAA,MACA,QAAA,EAAU;AAAA,QACR,QAAA,EAAU,SAAA;AAAA,QACV,UAAA,EAAY,SAAA;AAAA,QACZ,eAAA,EAAiB,aAAA;AAAA,QACjB,OAAA,EAAS,CAAA;AAAA,QACT,YAAA,EAAc,CAAA;AAAA,QACd,KAAA,EAAO;AAAA;AACT;AACF,GACF;AAAA;AAAA,EAEA,oBAAA,EAAsB;AAAA,IACpB,SAAA,EAAW,MAAA;AAAA,IACX,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,IACxB,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,KAAA;AAAA,IAC5B,YAAA,EAAc,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,YAAY,CAAA,GAAI,GAAA;AAAA,IACjD,UAAA,EAAY,SAAA;AAAA,IACZ,QAAA,EAAU,KAAA,CAAM,UAAA,CAAW,KAAA,CAAM,QAAA;AAAA,IACjC,UAAA,EAAY,GAAA;AAAA,IACZ,eAAA,EAAiB,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA;AAAA,IACvC,YAAA,EAAc,SAAA;AAAA,IACd,GAAI,KAAA,CAAM,OAAA,CAAQ,IAAA,KAAS,MAAA,IAAU;AAAA,MACnC,iBAAiB,KAAA,CAAM,KAAA,CAAM,QAAQ,IAAA,CAAK,GAAG,GAAG,GAAG;AAAA,KACrD;AAAA,IACA,QAAA,EAAU;AAAA,MACR,QAAA,EAAU,SAAA;AAAA,MACV,UAAA,EAAY,SAAA;AAAA,MACZ,eAAA,EAAiB,aAAA;AAAA,MACjB,OAAA,EAAS,CAAA;AAAA,MACT,KAAA,EAAO;AAAA;AACT,GACF;AAAA;AAAA,EAGA,SAAA,EAAW;AAAA,IACT,KAAA,EAAO,MAAA;AAAA,IACP,cAAA,EAAgB,UAAA;AAAA,IAChB,QAAA,EAAU,KAAA,CAAM,UAAA,CAAW,KAAA,CAAM,QAAA;AAAA,IACjC,MAAA,EAAQ,CAAA,UAAA,EAAa,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,CAAA;AAAA,IAC1C,YAAA,EAAc,SAAA;AAAA,IACd,YAAA,EAAc;AAAA,MACZ,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,GAAG,CAAA;AAAA,MAC7B,MAAA,EAAQ,CAAA,UAAA,EAAa,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,CAAA;AAAA,MAC1C,aAAA,EAAe;AAAA,KACjB;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,UAAA,EAAY,GAAA;AAAA,MACZ,iBAAiB,KAAA,CAAM,KAAA,CAAM,QAAQ,IAAA,CAAK,GAAG,GAAG,IAAI;AAAA,KACtD;AAAA;AAAA;AAAA;AAAA,IAIA,6BAAA,EAA+B;AAAA,MAC7B,iBAAiB,KAAA,CAAM,KAAA,CAAM,QAAQ,IAAA,CAAK,GAAG,GAAG,IAAI;AAAA;AACtD,GACF;AAAA;AAAA,EAGA,CAAC,CAAA,GAAA,EAAM,cAAA,CAAe,QAAQ,EAAE,GAAG;AAAA,IACjC,MAAA,EAAQ,SAAA;AAAA,IACR,QAAA,EAAU,UAAA;AAAA,IACV,UAAA,EAAY;AAAA,MACV,OAAA,EAAS,IAAA;AAAA,MACT,GAAA,EAAK,EAAA;AAAA,MACL,IAAA,EAAM,EAAA;AAAA,MACN,KAAA,EAAO,EAAA;AAAA,MACP,MAAA,EAAQ,EAAA;AAAA,MACR,YAAA,EAAc,CAAA;AAAA,MACd,QAAA,EAAU,UAAA;AAAA,MACV,eAAA,EAAiB,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA;AAAA,MACvC,GAAI,KAAA,CAAM,OAAA,CAAQ,IAAA,KAAS,MAAA,IAAU;AAAA,QACnC,eAAA,EAAiB,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,GAAG;AAAA;AACzC,KACF;AAAA,IACA,WAAA,EAAa;AAAA,MACX,UAAA,EAAY;AAAA,QACV,eAAA,EAAiB,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ;AAAA,OACzC;AAAA,MACA,SAAA,EAAW;AAAA,QACT,GAAA,EAAK,CAAA;AAAA,QACL,IAAA,EAAM,CAAA;AAAA,QACN,KAAA,EAAO,CAAA;AAAA,QACP,MAAA,EAAQ,CAAA;AAAA,QACR,OAAA,EAAS,IAAA;AAAA,QACT,QAAA,EAAU,UAAA;AAAA,QACV,WAAA,EAAa,OAAA;AAAA,QACb,SAAA,EAAW,eAAA;AAAA,QACX,WAAA,EAAa,aAAA;AAAA,QACb,WAAA,EAAa,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO;AAAA;AACpC;AACF,GACF;AAAA;AAAA,EAGA,WAAA,EAAa;AAAA,IACX,YAAA,EAAc,MAAA;AAAA,IACd,WAAA,EAAa;AAAA,MACX,MAAA,EAAQ,SAAA;AAAA,MACR,UAAA,EAAY,GAAA;AAAA,MACZ,YAAA,EAAc;AAAA;AAChB,GACF;AAAA;AAAA,EAGA,MAAA,EAAQ;AAAA,IACN,YAAA,EAAc,SAAA;AAAA,IACd,MAAA,EAAQ;AAAA,MACN,UAAA,EAAY,GAAA;AAAA,MACZ,SAAA,EAAW;AAAA,KACb;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,UAAA,EAAY,EAAA;AAAA,MACZ,YAAA,EAAc;AAAA;AAChB,GACF;AAAA;AAAA,EAGA,OAAA,EAAS;AAAA,IACP,OAAA,EAAS,cAAA;AAAA,IACT,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAA;AAAA,IAChC,QAAA,EAAU,OAAA;AAAA,IACV,UAAA,EAAY,SAAA;AAAA,IACZ,YAAA,EAAc,CAAA;AAAA,IACd,MAAA,EAAQ,CAAA,UAAA,EAAa,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,CAAA;AAAA,IAC1C,SAAA,EAAW,WAAW,KAAA,CAAM,KAAA,CAAM,QAAQ,IAAA,CAAK,GAAG,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA;AAAA,IACzD,iBAAiB,KAAA,CAAM,KAAA,CAAM,QAAQ,IAAA,CAAK,GAAG,GAAG,IAAI;AAAA,GACtD;AAAA;AAAA,EAGA,QAAA,EAAU;AAAA,IACR,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,GAAG,CAAA;AAAA,IAC7B,YAAA,EAAc,CAAA;AAAA,IACd,iBAAiB,KAAA,CAAM,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,MAAM,GAAG;AAAA,GACxD;AAAA;AAAA,EAGA,cAAA,EAAgB;AAAA,IACd,QAAA,EAAU;AAAA,GACZ;AAAA;AAAA,EAGA,CAAC,CAAA,GAAA,EAAM,cAAA,CAAe,OAAO,EAAE,GAAG;AAAA,IAChC,eAAA,EAAiB,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,OAAA;AAAA,IACpC,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,OAAA;AAAA,IAC1B,YAAA,EAAc,CAAA;AAAA,IACd,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,GAAG,CAAA;AAAA,IAC7B,MAAA,EAAQ,SAAA;AAAA,IACR,UAAA,EAAY,gBAAA;AAAA,IACZ,UAAA,EAAY,MAAA;AAAA,IACZ,kCAAA,EAAoC;AAAA,MAClC,eAAA,EAAiB,aAAA;AAAA,MACjB,KAAA,EAAO,SAAA;AAAA,MACP,UAAA,EAAY;AAAA;AACd,GACF;AAAA;AAAA,EAGA,CAAC,CAAA,GAAA,EAAM,cAAA,CAAe,UAAU,EAAE,GAAG;AAAA,IACnC,MAAA,EAAQ,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,CAAC,CAAA;AAAA,IAC1B,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,GAAA,EAAK,CAAC,CAAA;AAAA,IAC7B,YAAA,EAAc,MAAM,KAAA,CAAM,YAAA;AAAA,IAC1B,UAAA,EAAY,CAAA,UAAA,EAAa,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,CAAA;AAAA,IAC9C,iBAAiB,KAAA,CAAM,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,SAAS,IAAI,CAAA;AAAA,IACvD,iBAAA,EAAmB,EAAE,YAAA,EAAc,CAAA;AAAE,GACvC;AAAA,EACA,CAAC,CAAA,GAAA,EAAM,cAAA,CAAe,eAAe,EAAE,GAAG;AAAA,IACxC,UAAA,EAAY,GAAA;AAAA,IACZ,aAAA,EAAe,WAAA;AAAA,IACf,QAAA,EAAU,SAAA;AAAA,IACV,aAAA,EAAe,QAAA;AAAA,IACf,YAAA,EAAc,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA;AAAA,IAChC,OAAA,EAAS;AAAA,GACX;AAAA,EACA,CAAC,CAAA,GAAA,EAAM,cAAA,CAAe,iBAAiB,EAAE,GAAG;AAAA,IAC1C,gBAAA,EAAkB,EAAE,YAAA,EAAc,CAAA;AAAE,GACtC;AAAA,EACA,CAAC,CAAA,GAAA,EAAM,cAAA,CAAe,cAAc,EAAE,GAAG;AAAA,IACvC,eAAA,EAAiB,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,SAAA;AAAA,IACpC,iBAAiB,KAAA,CAAM,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,SAAS,IAAI;AAAA,GACzD;AAAA,EACA,CAAC,CAAA,GAAA,EAAM,cAAA,CAAe,aAAa,EAAE,GAAG;AAAA,IACtC,eAAA,EAAiB,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,IAAA;AAAA,IACvC,iBAAiB,KAAA,CAAM,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,MAAM,IAAI;AAAA,GACzD;AAAA,EACA,CAAC,CAAA,GAAA,EAAM,cAAA,CAAe,iBAAiB,EAAE,GAAG;AAAA,IAC1C,eAAA,EAAiB,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,IAAA;AAAA,IACvC,iBAAiB,KAAA,CAAM,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,MAAM,IAAI;AAAA,GACzD;AAAA,EACA,CAAC,CAAA,GAAA,EAAM,cAAA,CAAe,gBAAgB,EAAE,GAAG;AAAA,IACzC,eAAA,EAAiB,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,IAAA;AAAA,IACrC,iBAAiB,KAAA,CAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,MAAM,IAAI;AAAA,GACvD;AAAA,EACA,CAAC,CAAA,GAAA,EAAM,cAAA,CAAe,cAAc,EAAE,GAAG;AAAA,IACvC,eAAA,EAAiB,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,IAAA;AAAA,IACpC,iBAAiB,KAAA,CAAM,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,MAAM,IAAI;AAAA,GACtD;AAAA,EACA,CAAC,CAAA,GAAA,EAAM,cAAA,CAAe,iBAAiB,EAAE,GAAG;AAAA,IAC1C,eAAA,EAAiB,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,IAAA;AAAA,IACvC,iBAAiB,KAAA,CAAM,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,MAAM,IAAI;AAAA,GACzD;AAAA;AAAA,EAGA,CAAC,CAAA,GAAA,EAAM,cAAA,CAAe,IAAI,EAAE,GAAG;AAAA,IAC7B,MAAA,EAAQ,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,CAAC,CAAA;AAAA,IAC1B,MAAA,EAAQ,CAAA,UAAA,EAAa,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,CAAA;AAAA,IAC1C,YAAA,EAAc,MAAM,KAAA,CAAM,YAAA;AAAA,IAC1B,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,CAAC,CAAA,GAAA,EAAM,cAAA,CAAe,UAAU,EAAE,GAAG;AAAA,IACnC,OAAA,EAAS,MAAA;AAAA,IACT,GAAA,EAAK,CAAA;AAAA,IACL,YAAA,EAAc,CAAA,UAAA,EAAa,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,CAAA;AAAA,IAChD,iBAAiB,KAAA,CAAM,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,SAAS,IAAI;AAAA,GACzD;AAAA,EACA,CAAC,CAAA,GAAA,EAAM,cAAA,CAAe,OAAO,EAAE,GAAG;AAAA,IAChC,UAAA,EAAY,MAAA;AAAA,IACZ,UAAA,EAAY,aAAA;AAAA,IACZ,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,CAAC,CAAA;AAAA,IAC3B,UAAA,EAAY,SAAA;AAAA,IACZ,QAAA,EAAU,WAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,SAAA;AAAA,IAC1B,MAAA,EAAQ,SAAA;AAAA,IACR,YAAA,EAAc,uBAAA;AAAA,IACd,UAAA,EAAY,gBAAA;AAAA,IACZ,WAAW,EAAE,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,KAAK,OAAA;AAAQ,GACjD;AAAA,EACA,CAAC,CAAA,GAAA,EAAM,cAAA,CAAe,aAAa,EAAE,GAAG;AAAA,IACtC,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,OAAA;AAAA,IAC1B,iBAAA,EAAmB,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ;AAAA,GAC3C;AAAA,EACA,CAAC,CAAA,GAAA,EAAM,cAAA,CAAe,SAAS,EAAE,GAAG;AAAA,IAClC,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAKxB,iBAAA,EAAmB,EAAE,YAAA,EAAc,CAAA;AAAE,GACvC;AAAA;AAAA,EAGA,CAAC,CAAA,GAAA,EAAM,cAAA,CAAe,cAAc,EAAE,GAAG;AAAA,IACvC,OAAA,EAAS,MAAA;AAAA,IACT,UAAA,EAAY,QAAA;AAAA,IACZ,cAAA,EAAgB,eAAA;AAAA,IAChB,GAAA,EAAK,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,IACpB,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAA;AAAA,IAChC,QAAA,EAAU,SAAA;AAAA,IACV,UAAA,EAAY,qDAAA;AAAA,IACZ,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,SAAA;AAAA,IAC1B,iBAAiB,KAAA,CAAM,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,SAAS,IAAI,CAAA;AAAA,IACvD,mBAAA,EAAqB,MAAM,KAAA,CAAM,YAAA;AAAA,IACjC,oBAAA,EAAsB,MAAM,KAAA,CAAM;AAAA,GACpC;AAAA,EACA,CAAC,CAAA,GAAA,EAAM,cAAA,CAAe,aAAa,EAAE,GAAG;AAAA,IACtC,UAAA,EAAY,MAAA;AAAA,IACZ,UAAA,EAAY,aAAA;AAAA,IACZ,MAAA,EAAQ,MAAA;AAAA,IACR,KAAA,EAAO,SAAA;AAAA,IACP,MAAA,EAAQ,SAAA;AAAA,IACR,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,IAAA,EAAM,IAAI,CAAA;AAAA,IACjC,QAAA,EAAU,UAAA;AAAA,IACV,YAAA,EAAc,MAAM,KAAA,CAAM,YAAA;AAAA,IAC1B,SAAA,EAAW,EAAE,eAAA,EAAiB,KAAA,CAAM,MAAM,OAAA,CAAQ,IAAA,CAAK,OAAA,EAAS,IAAI,CAAA;AAAE,GACxE;AAAA;AAAA,EAGA,CAAC,CAAA,GAAA,EAAM,cAAA,CAAe,MAAM,EAAE,GAAG;AAAA,IAC/B,MAAA,EAAQ,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,CAAC,CAAA;AAAA,IAC1B,SAAA,EAAW;AAAA,GACb;AAAA,EACA,CAAC,CAAA,GAAA,EAAM,cAAA,CAAe,UAAU,EAAE,GAAG;AAAA,IACnC,QAAA,EAAU,WAAA;AAAA,IACV,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,SAAA;AAAA,IAC1B,SAAA,EAAW,KAAA,CAAM,OAAA,CAAQ,IAAI;AAAA,GAC/B;AAAA;AAAA,EAGA,CAAC,CAAA,GAAA,EAAM,cAAA,CAAe,GAAG,EAAE,GAAG;AAAA,IAC5B,OAAA,EAAS,cAAA;AAAA,IACT,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,GAAG,CAAA;AAAA,IAC7B,UAAA,EAAY,qDAAA;AAAA,IACZ,QAAA,EAAU,OAAA;AAAA,IACV,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,OAAA;AAAA,IAC1B,MAAA,EAAQ,CAAA,UAAA,EAAa,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,CAAA;AAAA,IAC1C,iBAAA,EAAmB,CAAA;AAAA,IACnB,YAAA,EAAc,CAAA;AAAA,IACd,iBAAiB,KAAA,CAAM,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,SAAS,IAAI,CAAA;AAAA,IACvD,SAAA,EAAW,WAAW,KAAA,CAAM,KAAA,CAAM,QAAQ,IAAA,CAAK,OAAA,EAAS,IAAI,CAAC,CAAA,CAAA;AAAA,IAC7D,QAAA,EAAU,OAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA;AAAA,EAGA,CAAC,CAAA,EAAA,EAAK,cAAA,CAAe,OAAO,EAAE,GAAG;AAAA,IAC/B,SAAA,EAAW,EAAE,SAAA,EAAW,CAAA,EAAG,cAAc,CAAA,EAAE;AAAA;AAAA;AAAA;AAAA,IAI3C,oCAAA,EAAsC,EAAE,SAAA,EAAW,CAAA,EAAG,cAAc,CAAA,EAAE;AAAA,IACtE,EAAA,EAAI,EAAE,QAAA,EAAU,SAAA,EAAW,YAAY,GAAA,EAAK,SAAA,EAAW,CAAA,EAAG,YAAA,EAAc,CAAA,EAAE;AAAA,IAC1E,EAAA,EAAI,EAAE,QAAA,EAAU,UAAA,EAAY,YAAY,GAAA,EAAK,SAAA,EAAW,CAAA,EAAG,YAAA,EAAc,CAAA,EAAE;AAAA,IAC3E,EAAA,EAAI,EAAE,QAAA,EAAU,MAAA,EAAQ,YAAY,GAAA,EAAK,SAAA,EAAW,CAAA,EAAG,YAAA,EAAc,CAAA,EAAE;AAAA,IACvE,YAAA,EAAc,EAAE,QAAA,EAAU,UAAA,EAAY,YAAY,GAAA,EAAK,SAAA,EAAW,CAAA,EAAG,YAAA,EAAc,CAAA,EAAE;AAAA,IACrF,CAAA,EAAG;AAAA,MACD,QAAA,EAAU,WAAA;AAAA,MACV,UAAA,EAAY,GAAA;AAAA,MACZ,YAAA,EAAc,CAAA;AAAA,MACd,cAAA,EAAgB,EAAE,YAAA,EAAc,CAAA;AAAE,KACpC;AAAA,IACA,EAAA,EAAI,EAAE,MAAA,EAAQ,OAAA,EAAQ;AAAA,IACtB,cAAA,EAAgB;AAAA,MACd,MAAA,EAAQ,OAAA;AAAA,MACR,SAAS,KAAA,CAAM,OAAA,CAAQ,GAAA,EAAK,CAAA,EAAG,KAAK,GAAG,CAAA;AAAA,MACvC,YAAA,EAAc,CAAA;AAAA,MACd,eAAA,EAAiB,aAAA;AAAA,MACjB,WAAA,EAAa,EAAE,OAAA,EAAS,MAAA;AAAO,KACjC;AAAA,IACA,YAAA,EAAc;AAAA,MACZ,WAAA,EAAa,EAAA;AAAA,MACb,YAAA,EAAc,CAAA;AAAA,MACd,QAAA,EAAU,EAAE,UAAA,EAAY,GAAA,EAAK,UAAU,WAAA;AAAY,KACrD;AAAA,IACA,oBAAA,EAAsB,EAAE,YAAA,EAAc,CAAA,EAAE;AAAA,IACxC,CAAC,MAAM,cAAA,CAAe,SAAS,EAAE,GAAG,EAAE,cAAc,CAAA,EAAE;AAAA,IACtD,CAAC,CAAA,GAAA,EAAM,cAAA,CAAe,SAAS,0BAA0B,GAAG;AAAA,MAC1D,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA;AAAA,MAC1B,QAAA,EAAU,SAAA;AAAA,MACV,UAAA,EAAY,GAAA;AAAA,MACZ,YAAA,EAAc;AAAA,KAChB;AAAA,IACA,CAAC,CAAA,GAAA,EAAM,cAAA,CAAe,UAAU,mCAAmC,GAAG;AAAA,MACpE,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,SAAA,EAAW;AAAA,MACT,QAAA,EAAU,SAAA;AAAA,MACV,YAAA,EAAc;AAAA;AAChB;AAEJ,CAAA,CAAE;ACrfF,SAAS,WAAW,GAAA,EAA6B;AAC/C,EAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,GAAA,CAAI,MAAA,KAAW,GAAG,OAAO,KAAA;AAOxD,EAAA,IAAI,iBAAA,CAAkB,IAAA,CAAK,GAAG,CAAA,EAAG,OAAO,KAAA;AACxC,EAAA,IAAI,GAAA,KAAQ,GAAA,CAAI,IAAA,EAAK,IAAK,GAAA,CAAI,QAAA,CAAS,IAAI,CAAA,IAAK,GAAA,CAAI,UAAA,CAAW,IAAI,CAAA,EAAG,OAAO,KAAA;AAC7E,EAAA,IAAI,GAAA,CAAI,UAAA,CAAW,GAAG,CAAA,EAAG,OAAO,IAAA;AAChC,EAAA,IAAI,GAAA,CAAI,UAAA,CAAW,GAAG,CAAA,IAAK,CAAC,GAAA,CAAI,UAAA,CAAW,IAAI,CAAA,IAAK,CAAC,GAAA,CAAI,UAAA,CAAW,KAAK,GAAG,OAAO,IAAA;AACnF,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,WAAA,EAAY,CAAE,SAAA,EAAU;AAC1C,EAAA,IAAI,KAAA,CAAM,WAAW,SAAS,CAAA,IAAK,MAAM,UAAA,CAAW,UAAU,GAAG,OAAO,IAAA;AAGxE,EAAA,OAAO,CAAC,sBAAA,CAAuB,IAAA,CAAK,GAAG,CAAA;AACzC;AAGO,SAAS,aAAa,GAAA,EAAkC;AAC7D,EAAA,OAAO,UAAA,CAAW,GAAG,CAAA,GAAK,GAAA,GAAiB,MAAA;AAC7C;AAOA,SAAS,iBAAiB,GAAA,EAAkC;AAC1D,EAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,EAAU,OAAO,MAAA;AACpC,EAAA,IAAI,CAAC,UAAA,CAAW,GAAG,CAAA,EAAG,OAAO,MAAA;AAC7B,EAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,EAAY;AAC9B,EAAA,IAAI,MAAM,UAAA,CAAW,0BAA0B,KAAK,KAAA,CAAM,UAAA,CAAW,mCAAmC,CAAA,EAAG;AACzG,IAAA,OAAO,GAAA;AAAA,EACT;AACA,EAAA,OAAO,MAAA;AACT;AA6BA,IAAM,kBAAA,uBAAyB,GAAA,EAAgC;AAExD,SAAS,kBAAA,CAAmB,MAAc,SAAA,EAA+B;AAC9E,EAAA,kBAAA,CAAmB,GAAA,CAAI,MAAM,SAAS,CAAA;AACxC;AAgBA,IAAM,aAAA,GAAgB,aAAA,CAAmC,EAAE,CAAA;AAM3D,SAAS,WAAA,CAAY,IAAA,EAAc,KAAA,GAAsB,IAAI,GAAA,EAAsC;AACjG,EAAA,OAAO,KAAA,CAAM,MAAA,CAAkB,CAAC,GAAA,EAAK,IAAA,KAAS;AAC5C,IAAA,QAAQ,KAAK,IAAA;AAAM,MACjB,KAAK,MAAA;AACH,QAAA,uBAAO,GAAA,CAAC,YAAQ,QAAA,EAAA,GAAA,EAAI,CAAA;AAAA,MACtB,KAAK,QAAA;AACH,QAAA,uBAAO,GAAA,CAAC,QAAI,QAAA,EAAA,GAAA,EAAI,CAAA;AAAA,MAClB,KAAK,MAAA;AACH,QAAA,uBAAO,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,cAAA,CAAe,YAAa,QAAA,EAAA,GAAA,EAAI,CAAA;AAAA,MAC1D,KAAK,WAAA;AACH,QAAA,uBAAO,GAAA,CAAC,OAAG,QAAA,EAAA,GAAA,EAAI,CAAA;AAAA,MACjB,KAAK,QAAA;AACH,QAAA,uBAAO,GAAA,CAAC,OAAG,QAAA,EAAA,GAAA,EAAI,CAAA;AAAA,MACjB,KAAK,MAAA,EAAQ;AAIX,QAAA,MAAM,QAAA,GAAW,YAAA,CAAa,IAAA,CAAK,KAAA,EAAO,IAAI,CAAA,IAAK,GAAA;AAInD,QAAA,MAAM,OAAO,GAAA,EAAK,aAAA;AAClB,QAAA,IAAI,IAAA,IAAQ,SAAS,UAAA,CAAW,GAAG,KAAK,CAAC,QAAA,CAAS,UAAA,CAAW,IAAI,CAAA,EAAG;AAClE,UAAA,2BACG,IAAA,EAAA,EAAK,EAAA,EAAI,UAAU,SAAA,EAAW,cAAA,CAAe,MAC3C,QAAA,EAAA,GAAA,EACH,CAAA;AAAA,QAEJ;AACA,QAAA,uBACE,GAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAM,QAAA,EAAU,MAAA,EAAQ,IAAA,CAAK,KAAA,EAAO,MAAA,IAAU,QAAA,EAAU,GAAA,EAAI,qBAAA,EAC5D,QAAA,EAAA,GAAA,EACH,CAAA;AAAA,MAEJ;AAAA,MACA,KAAK,cAAA,EAAgB;AACnB,QAAA,MAAM,EAAA,GAAK,aAAa,IAAA,CAAK,KAAA,EAAO,MAAM,IAAA,CAAK,KAAA,EAAO,IAAI,CAAA,IAAK,GAAA;AAC/D,QAAA,MAAM,OAAO,GAAA,EAAK,aAAA;AAClB,QAAA,OAAO,IAAA,mBACL,GAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAQ,SAAA,EAAW,cAAA,CAAe,IAAA,EACrC,QAAA,EAAA,GAAA,EACH,CAAA,mBAEA,GAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAM,IAAK,QAAA,EAAA,GAAA,EAAI,CAAA;AAAA,MAEtB;AAAA,MACA,KAAK,WAAA;AACH,QAAA,uBAAO,GAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,IAAA,CAAK,KAAA,EAAO,KAAA,GAAQ,EAAE,eAAA,EAAiB,IAAA,CAAK,KAAA,CAAM,KAAA,EAAM,GAAI,QAAY,QAAA,EAAA,GAAA,EAAI,CAAA;AAAA,MAClG,KAAK,WAAA;AACH,QAAA,uBAAO,GAAA,CAAC,SAAK,QAAA,EAAA,GAAA,EAAI,CAAA;AAAA,MACnB,KAAK,aAAA;AACH,QAAA,uBAAO,GAAA,CAAC,SAAK,QAAA,EAAA,GAAA,EAAI,CAAA;AAAA,MACnB,KAAK,WAAA;AACH,QAAA,uBAAO,GAAA,CAAC,UAAK,KAAA,EAAO,EAAE,OAAO,IAAA,CAAK,KAAA,EAAO,KAAA,EAAM,EAAI,QAAA,EAAA,GAAA,EAAI,CAAA;AAAA,MACzD,KAAK,KAAA;AACH,QAAA,uBAAO,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,cAAA,CAAe,KAAM,QAAA,EAAA,GAAA,EAAI,CAAA;AAAA,MAClD;AACE,QAAA,OAAO,GAAA;AAAA;AACX,EACF,GAAG,IAAI,CAAA;AACT;AAMA,SAAS,QAAQ,KAAA,EAA0C;AACzD,EAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AACnB,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,IAAA,IAAQ,EAAE,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA;AACnD,EAAA,IAAI,CAAC,MAAM,OAAO,MAAA;AAClB,EAAA,OAAO,IAAA,CACJ,aAAY,CACZ,OAAA,CAAQ,oBAAoB,GAAG,CAAA,CAC/B,OAAA,CAAQ,QAAA,EAAU,EAAE,CAAA;AACzB;AAMA,SAAS,SAAA,CAAU,EAAE,IAAA,EAAK,EAAyB;AACjD,EAAA,MAAM,QAAA,GAAW,KAAK,KAAA,EAAO,QAAA;AAC7B,EAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,EAAO,KAAA;AAU1B,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,OAAA,EAAS,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,IAAQ,EAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,IAAK,EAAA;AAClE,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,SAAS,KAAK,CAAA;AAE1C,EAAA,MAAM,MAAA,GAAS,YAAY,MAAM;AAC/B,IAAA,SAAA,CAAU,SAAA,EAAW,SAAA,CAAU,IAAI,CAAA,CAAE,IAAA;AAAA,MACnC,MAAM;AACJ,QAAA,SAAA,CAAU,IAAI,CAAA;AACd,QAAA,UAAA,CAAW,MAAM,SAAA,CAAU,KAAK,CAAA,EAAG,IAAI,CAAA;AAAA,MACzC,CAAA;AAAA,MACA,MAAM;AAAA,MAEN;AAAA,KACF;AAAA,EACF,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,4BACG,KAAA,EAAA,EAAI,SAAA,EAAW,eAAe,SAAA,EAAW,eAAA,EAAe,YAAY,MAAA,EACjE,QAAA,EAAA;AAAA,IAAA,CAAA,KAAA,IAAS,QAAA,qBACT,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,eAAe,cAAA,EAC7B,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,MAAA,EAAA,EAAM,mBAAS,QAAA,EAAS,CAAA;AAAA,sBACzB,GAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,OAAA,EAAS,MAAA,EAAQ,SAAA,EAAW,cAAA,CAAe,aAAA,EAAe,YAAA,EAAW,WAAA,EACxF,QAAA,EAAA,MAAA,GAAS,WAAM,QAAA,EAClB;AAAA,KAAA,EACF,CAAA;AAAA,oBAEF,GAAA,CAAC,KAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,QAAA,GAAW,CAAA,SAAA,EAAY,QAAQ,CAAA,CAAA,GAAK,MAAA,EAAY,QAAA,EAAA,IAAA,EAAK,CAAA,EACxE;AAAA,GAAA,EACF,CAAA;AAEJ;AAMA,IAAM,gBAAA,GAA2C;AAAA,EAC/C,IAAA,EAAM,MAAA;AAAA,EACN,GAAA,EAAK,KAAA;AAAA,EACL,OAAA,EAAS,SAAA;AAAA,EACT,MAAA,EAAQ,QAAA;AAAA,EACR,IAAA,EAAM,MAAA;AAAA,EACN,OAAA,EAAS;AACX,CAAA;AAEA,IAAM,gBAAA,GAA2C;AAAA,EAC/C,MAAM,cAAA,CAAe,cAAA;AAAA,EACrB,KAAK,cAAA,CAAe,aAAA;AAAA,EACpB,SAAS,cAAA,CAAe,iBAAA;AAAA,EACxB,QAAQ,cAAA,CAAe,gBAAA;AAAA,EACvB,MAAM,cAAA,CAAe,cAAA;AAAA,EACrB,SAAS,cAAA,CAAe;AAC1B,CAAA;AAEA,SAAS,UAAA,CAAW,EAAE,IAAA,EAAK,EAAyB;AAClD,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,KAAA,EAAO,QAAQ,MAAM,CAAA;AAC9C,EAAA,MAAM,QAAS,IAAA,CAAK,KAAA,EAAO,KAAA,IAAgC,gBAAA,CAAiB,IAAI,CAAA,IAAK,IAAA;AACrF,EAAA,MAAM,YAAA,GAAe,gBAAA,CAAiB,IAAI,CAAA,IAAK,cAAA,CAAe,cAAA;AAC9D,EAAA,uBACE,IAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAW,CAAA,EAAG,cAAA,CAAe,UAAU,CAAA,CAAA,EAAI,YAAY,CAAA,CAAA,EAAI,WAAA,EAAW,IAAA,EAC3E,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,cAAA,CAAe,eAAA,EAAkB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBACvD,GAAA,CAAC,SAAI,SAAA,EAAW,cAAA,CAAe,mBAAoB,QAAA,EAAA,IAAA,CAAK,OAAA,EAAS,GAAA,CAAI,UAAU,CAAA,EAAE;AAAA,GAAA,EACnF,CAAA;AAEJ;AAMA,SAAS,IAAA,CAAK,EAAE,IAAA,EAAK,EAAyB;AAC5C,EAAA,MAAM,KAAA,GAAA,CAAS,IAAA,CAAK,OAAA,IAAW,EAAC,EAAG,OAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,SAAS,CAAA;AACrE,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,SAAS,CAAC,CAAA;AACtC,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAE/B,EAAA,MAAM,aAAa,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,KAAA,CAAM,SAAS,CAAC,CAAA;AAEpD,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,cAAA,CAAe,IAAA,EAC7B,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,cAAA,CAAe,UAAA,EAAY,IAAA,EAAK,WAC7C,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,KAAM;AACtB,MAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,EAAO,KAAA,IAAS,KAAK,KAAA,EAAO,KAAA,IAAS,CAAA,IAAA,EAAO,CAAA,GAAI,CAAC,CAAA,CAAA;AACpE,MAAA,MAAM,WAAW,CAAA,KAAM,UAAA;AACvB,MAAA,uBACE,GAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UAEC,IAAA,EAAK,QAAA;AAAA,UACL,IAAA,EAAK,KAAA;AAAA,UACL,eAAA,EAAe,QAAA;AAAA,UACf,SAAA,EAAW,GAAG,cAAA,CAAe,OAAO,IAAI,QAAA,GAAW,cAAA,CAAe,gBAAgB,EAAE,CAAA,CAAA;AAAA,UACpF,OAAA,EAAS,MAAM,SAAA,CAAU,CAAC,CAAA;AAAA,UAEzB,QAAA,EAAA;AAAA,SAAA;AAAA,QAPI;AAAA,OAQP;AAAA,IAEJ,CAAC,CAAA,EACH,CAAA;AAAA,oBACA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,cAAA,CAAe,SAAA,EAAW,IAAA,EAAK,UAAA,EAC5C,QAAA,EAAA,KAAA,CAAM,UAAU,CAAA,EAAG,OAAA,EAAS,GAAA,CAAI,UAAU,CAAA,EAC7C;AAAA,GAAA,EACF,CAAA;AAEJ;AAMA,SAAS,UAAA,CAAW,MAAkB,KAAA,EAA0B;AAC9D,EAAA,uBAAO,GAAA,CAAC,UAAA,EAAA,EAAuB,IAAA,EAAY,KAAA,EAAA,EAAnB,KAAiC,CAAA;AAC3D;AACA,SAAS,UAAA,CAAW,EAAE,IAAA,EAAM,KAAA,EAAM,EAAmD;AACnF,EAAA,MAAM,OAAA,GAAU,WAAW,aAAa,CAAA;AACxC,EAAA,MAAM,cAAA,GACJ,OAAA,CAAQ,aAAA,GAAgB,IAAA,CAAK,IAAI,CAAA,KAChC,OAAA,CAAQ,sBAAA,KAA2B,KAAA,GAAQ,kBAAA,CAAmB,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,GAAI,MAAA,CAAA;AAClF,EAAA,IAAI,cAAA,EAAgB,uBAAO,GAAA,CAAC,cAAA,EAAA,EAA2B,QAAP,KAAmB,CAAA;AAEnE,EAAA,QAAQ,KAAK,IAAA;AAAM,IACjB,KAAK,MAAA;AACH,MAAA,uBAAO,GAAA,CAAC,QAAA,EAAA,EAAqB,IAAA,EAAA,EAAP,KAAmB,CAAA;AAAA,IAE3C,KAAK,WAAA;AACH,MAAA,2BAAQ,GAAA,EAAA,EAAe,QAAA,EAAA,IAAA,CAAK,SAAS,GAAA,CAAI,UAAU,KAApC,KAAsC,CAAA;AAAA,IAEvD,KAAK,SAAA,EAAW;AACd,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,KAAA,EAAO,KAAA,IAAS,CAAA,EAAG,CAAC,CAAA,EAAG,CAAC,CAAA;AAC7D,MAAA,MAAM,GAAA,GAAM,IAAI,KAAK,CAAA,CAAA;AAGrB,MAAA,MAAM,KAAK,IAAA,CAAK,KAAA,EAAO,EAAA,IAAM,OAAA,CAAQ,KAAK,OAAO,CAAA;AACjD,MAAA,uBACE,GAAA,CAAC,OAAgB,EAAA,EACd,QAAA,EAAA,IAAA,CAAK,SAAS,GAAA,CAAI,UAAU,KADrB,KAEV,CAAA;AAAA,IAEJ;AAAA,IAEA,KAAK,YAAA;AACH,MAAA,2BAAQ,IAAA,EAAA,EAAgB,QAAA,EAAA,IAAA,CAAK,SAAS,GAAA,CAAI,UAAU,KAApC,KAAsC,CAAA;AAAA,IAExD,KAAK,aAAA;AACH,MAAA,uBACE,GAAA,CAAC,IAAA,EAAA,EAAe,KAAA,EAAO,IAAA,CAAK,KAAA,EAAO,KAAA,IAAS,CAAA,EACzC,QAAA,EAAA,IAAA,CAAK,OAAA,EAAS,GAAA,CAAI,UAAU,CAAA,EAAA,EADtB,KAET,CAAA;AAAA,IAGJ,KAAK,UAAA;AACH,MAAA,2BAAQ,IAAA,EAAA,EAAgB,QAAA,EAAA,IAAA,CAAK,SAAS,GAAA,CAAI,UAAU,KAApC,KAAsC,CAAA;AAAA,IAExD,KAAK,UAAA;AACH,MAAA,uBACE,GAAA,CAAC,QAAe,WAAA,EAAU,UAAA,EACvB,eAAK,OAAA,EAAS,GAAA,CAAI,UAAU,CAAA,EAAA,EADtB,KAET,CAAA;AAAA,IAGJ,KAAK,UAAA,EAAY;AACf,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,EAAO,OAAA,IAAW,KAAA;AACvC,MAAA,uBACE,IAAA,CAAC,IAAA,EAAA,EAAe,WAAA,EAAU,UAAA,EAAW,gBAAc,OAAA,EACjD,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,OAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,OAAA,EAAA,EAAM,IAAA,EAAK,UAAA,EAAW,OAAA,EAAkB,QAAA,EAAQ,IAAA,EAAC,SAAA,EAAW,cAAA,CAAe,QAAA,EAAU,CAAA,EACxF,CAAA;AAAA,4BACC,KAAA,EAAA,EAAK,QAAA,EAAA,IAAA,CAAK,OAAA,EAAS,GAAA,CAAI,UAAU,CAAA,EAAE;AAAA,OAAA,EAAA,EAJ7B,KAKT,CAAA;AAAA,IAEJ;AAAA,IAEA,KAAK,YAAA;AACH,MAAA,2BAAQ,YAAA,EAAA,EAAwB,QAAA,EAAA,IAAA,CAAK,SAAS,GAAA,CAAI,UAAU,KAApC,KAAsC,CAAA;AAAA,IAEhE,KAAK,WAAA;AACH,MAAA,uBAAO,GAAA,CAAC,SAAA,EAAA,EAAsB,IAAA,EAAA,EAAP,KAAmB,CAAA;AAAA,IAE5C,KAAK,gBAAA;AACH,MAAA,uBAAO,GAAA,CAAC,UAAQ,KAAO,CAAA;AAAA,IAEzB,KAAK,OAAA,EAAS;AAMZ,MAAA,MAAM,OAAA,GAAU,YAAA,CAAa,IAAA,CAAK,KAAA,EAAO,GAAG,CAAA;AAC5C,MAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AACrB,MAAA,uBACE,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UAEC,GAAA,EAAK,OAAA;AAAA,UACL,GAAA,EAAK,IAAA,CAAK,KAAA,EAAO,GAAA,IAAO,EAAA;AAAA,UACxB,KAAA,EAAO,KAAK,KAAA,EAAO,KAAA;AAAA,UACnB,WAAW,cAAA,CAAe,KAAA;AAAA,UAC1B,OAAA,EAAQ;AAAA,SAAA;AAAA,QALH;AAAA,OAMP;AAAA,IAEJ;AAAA,IAEA,KAAK,QAAA;AACH,MAAA,uBACE,GAAA,CAAC,QAAA,EAAA,EAAmB,SAAA,EAAW,cAAA,CAAe,MAAA,EAC3C,eAAK,OAAA,EAAS,GAAA,CAAI,UAAU,CAAA,EAAA,EADlB,KAEb,CAAA;AAAA,IAGJ,KAAK,YAAA;AACH,MAAA,uBACE,GAAA,CAAC,YAAA,EAAA,EAAuB,SAAA,EAAW,cAAA,CAAe,UAAA,EAC/C,eAAK,OAAA,EAAS,GAAA,CAAI,UAAU,CAAA,EAAA,EADd,KAEjB,CAAA;AAAA,IAGJ,KAAK,WAAA;AACH,MAAA,uBAAO,GAAA,CAAC,UAAQ,KAAO,CAAA;AAAA;AAAA,IAGzB,KAAK,YAAA;AACH,MAAA,uBAAO,GAAA,CAAC,UAAA,EAAA,EAAuB,IAAA,EAAA,EAAP,KAAmB,CAAA;AAAA,IAE7C,KAAK,MAAA;AACH,MAAA,uBAAO,GAAA,CAAC,IAAA,EAAA,EAAiB,IAAA,EAAA,EAAP,KAAmB,CAAA;AAAA,IAEvC,KAAK,SAAA;AAGH,MAAA,uBACE,GAAA,CAAC,aAAoB,WAAA,EAAU,SAAA,EAC5B,eAAK,OAAA,EAAS,GAAA,CAAI,UAAU,CAAA,EAAA,EADjB,KAEd,CAAA;AAAA;AAAA,IAIJ,KAAK,OAAA;AACH,MAAA,2BACG,KAAA,EAAA,EAAgB,KAAA,EAAO,EAAE,SAAA,EAAW,MAAA,IACnC,QAAA,kBAAA,GAAA,CAAC,OAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,OAAA,EAAA,EAAO,eAAK,OAAA,EAAS,GAAA,CAAI,UAAU,CAAA,EAAE,CAAA,EACxC,KAHQ,KAIV,CAAA;AAAA,IAGJ,KAAK,UAAA;AACH,MAAA,2BAAQ,IAAA,EAAA,EAAgB,QAAA,EAAA,IAAA,CAAK,SAAS,GAAA,CAAI,UAAU,KAApC,KAAsC,CAAA;AAAA,IAExD,KAAK,WAAA;AACH,MAAA,2BACG,IAAA,EAAA,EAAe,OAAA,EAAS,IAAA,CAAK,KAAA,EAAO,WAAW,CAAA,EAAG,OAAA,EAAS,IAAA,CAAK,KAAA,EAAO,WAAW,CAAA,EAChF,QAAA,EAAA,IAAA,CAAK,SAAS,GAAA,CAAI,UAAU,KADtB,KAET,CAAA;AAAA,IAGJ,KAAK,aAAA;AACH,MAAA,2BACG,IAAA,EAAA,EAAe,OAAA,EAAS,IAAA,CAAK,KAAA,EAAO,WAAW,CAAA,EAAG,OAAA,EAAS,IAAA,CAAK,KAAA,EAAO,WAAW,CAAA,EAChF,QAAA,EAAA,IAAA,CAAK,SAAS,GAAA,CAAI,UAAU,KADtB,KAET,CAAA;AAAA;AAAA,IAIJ,KAAK,SAAA;AACH,MAAA,uBACE,GAAA,CAAC,SAAA,EAAA,EAAoB,IAAA,EAAM,IAAA,CAAK,KAAA,EAAO,IAAA,EACpC,QAAA,EAAA,IAAA,CAAK,OAAA,EAAS,GAAA,CAAI,UAAU,CAAA,EAAA,EADjB,KAEd,CAAA;AAAA,IAGJ,KAAK,gBAAA;AACH,MAAA,2BAAQ,SAAA,EAAA,EAAqB,QAAA,EAAA,IAAA,CAAK,SAAS,GAAA,CAAI,UAAU,KAApC,KAAsC,CAAA;AAAA,IAE7D,KAAK,gBAAA;AACH,MAAA,2BAAQ,KAAA,EAAA,EAAiB,QAAA,EAAA,IAAA,CAAK,SAAS,GAAA,CAAI,UAAU,KAApC,KAAsC,CAAA;AAAA;AAAA,IAGzD,KAAK,SAAA,EAAW;AAOd,MAAA,MAAM,OAAA,GAAU,gBAAA,CAAiB,IAAA,CAAK,KAAA,EAAO,GAAG,CAAA;AAChD,MAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AACrB,MAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EAAgB,KAAA,EAAO,EAAE,QAAA,EAAU,UAAA,EAAY,aAAA,EAAe,QAAA,EAAU,MAAA,EAAQ,CAAA,EAAG,YAAA,EAAc,SAAA,EAAU,EAC1G,QAAA,kBAAA,GAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,OAAA;AAAA,UACL,KAAA,EAAM,eAAA;AAAA,UACN,KAAA,EAAM,0FAAA;AAAA,UACN,eAAA,EAAe,IAAA;AAAA,UACf,KAAA,EAAO;AAAA,YACL,QAAA,EAAU,UAAA;AAAA,YACV,GAAA,EAAK,CAAA;AAAA,YACL,IAAA,EAAM,CAAA;AAAA,YACN,KAAA,EAAO,MAAA;AAAA,YACP,MAAA,EAAQ,MAAA;AAAA,YACR,MAAA,EAAQ,MAAA;AAAA,YACR,YAAA,EAAc;AAAA;AAChB;AAAA,WAdM,KAgBV,CAAA;AAAA,IAEJ;AAAA,IAEA;AAEE,MAAA,IAAI,KAAK,OAAA,EAAS;AAChB,QAAA,2BAAQ,QAAA,EAAA,EAAsB,QAAA,EAAA,IAAA,CAAK,QAAQ,GAAA,CAAI,UAAU,KAAnC,KAAqC,CAAA;AAAA,MAC7D;AACA,MAAA,OAAO,IAAA;AAAA;AAEb;AAEA,SAAS,QAAA,CAAS,EAAE,IAAA,EAAK,EAAyB;AAChD,EAAA,MAAM,GAAA,GAAM,WAAW,aAAa,CAAA;AACpC,EAAA,uBAAO,GAAA,CAAC,YAAU,QAAA,EAAA,WAAA,CAAY,IAAA,CAAK,QAAQ,EAAA,EAAI,IAAA,CAAK,KAAA,EAAO,GAAG,CAAA,EAAE,CAAA;AAClE;AAwBO,SAAS,cAAA,CAAe;AAAA,EAC7B,OAAA;AAAA,EACA,SAAA;AAAA,EACA,EAAA;AAAA,EACA,OAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA,EAAwB;AACtB,EAAA,IAAI,CAAC,OAAA,IAAW,EAAE,SAAA,IAAa,OAAA,CAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC1E,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,QAAA,GAAgC,EAAE,aAAA,EAAe,aAAA,EAAe,sBAAA,EAAuB;AAE7F,EAAA,uBACE,GAAA,CAAC,aAAA,CAAc,QAAA,EAAd,EAAuB,OAAO,QAAA,EAC7B,QAAA,kBAAA,GAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,CAAC,cAAA,CAAe,IAAA,EAAM,eAAe,MAAA,EAAQ,OAAA,IAAW,cAAA,CAAe,OAAA,EAAS,SAAS,CAAA,CACjG,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AAAA,MACX,EAAA;AAAA,MAEE,QAAA,EAAA,OAAA,CAAsB,OAAA,CAAQ,GAAA,CAAI,UAAU;AAAA;AAAA,GAChD,EACF,CAAA;AAEJ","file":"chunk-4B2LTPK2.js","sourcesContent":["// ---------------------------------------------------------------------------\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 // Heading margins. Top margins are applied via the adjacent-sibling\n // combinator (`* + hN`) rather than a `:first-child` reset: a heading\n // takes its top margin ONLY when it follows another element, so a\n // heading at the very top of its container carries none. This is\n // SSR-safe (avoids Emotion's `:first-child` warning) and yields the\n // same result the previous `& > :first-child:is(h1,h2,h3)` reset did.\n h1: { ...theme.typography.h1, marginTop: 0, marginBottom: 12 },\n h2: { ...theme.typography.h2, marginTop: 0, marginBottom: 12 },\n h3: { ...theme.typography.h3, marginTop: 0, marginBottom: 8 },\n h4: { ...theme.typography.h4, marginTop: 0, marginBottom: 8 },\n h5: { ...theme.typography.h5, marginTop: 0, marginBottom: 8 },\n h6: { ...theme.typography.h6, marginTop: 0, marginBottom: 8 },\n '& * + h1, & * + h2': { marginTop: 40 },\n '& * + h3': { marginTop: 32 },\n '& * + h4, & * + h5, & * + h6': { marginTop: 24 },\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 // Zebra rows. `:nth-of-type` (not `:nth-child`) is SSR-safe and\n // exactly equivalent here — a `<tbody>` contains only `<tr>`\n // children, so type-position and child-position coincide.\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 // No `:first-child` reset needed: headings only take a top margin\n // when preceded by a sibling (see heading rules above) and\n // paragraphs carry only a bottom margin, so the panel's first\n // child never has an excess top margin. (SSR-safe.)\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 // (Dropped an SSR-unsafe `& > :first-child:not(p)` 4px top-margin\n // tweak — cosmetically negligible in compact mode, and `:first-child`\n // triggered Emotion's SSR warning.)\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// URL safety (XSS hardening, T#347)\n// ---------------------------------------------------------------------------\n//\n// Every URL that lands in an `href`, `src`, or other navigable attribute\n// MUST be schema-validated. Cookie-mode auth makes any rendered\n// javascript:/data:/vbscript:/blob: URI catastrophic — an attacker who\n// crafts a TipTap document with a `link` mark or `image` node carrying\n// a `javascript:alert(...)` href gets full session control on click.\n// These guards are intentionally conservative: anything that isn't\n// unambiguously a same-origin path or an http(s) URL collapses to a\n// safe sentinel (`#` for links, undefined for image src so the <img>\n// renders nothing rather than load a hostile resource).\n\nfunction isSafeHref(url: unknown): url is string {\n if (typeof url !== 'string' || url.length === 0) return false;\n // Written as escapes, not as the literal bytes: the source used to hold\n // real control characters, so this read as `/[ -]/` — \"a space or a\n // dash\" — in every editor and diff. What it actually rejects is the\n // C0 range plus DEL, which is what makes `java\\tscript:` and friends\n // parse as `javascript:` in some URL parsers.\n // eslint-disable-next-line no-control-regex -- rejecting control characters is the point\n if (/[\\x00-\\x1f\\x7f]/.test(url)) return false;\n if (url !== url.trim() || url.includes('\\\\') || url.startsWith('//')) return false;\n if (url.startsWith('#')) return true;\n if (url.startsWith('/') && !url.startsWith('//') && !url.startsWith('/\\\\')) return true;\n const lower = url.toLowerCase().trimStart();\n if (lower.startsWith('http://') || lower.startsWith('https://')) return true;\n // A path relative to the source document is useful for corpus navigation.\n // A scheme (including unknown schemes) or network-path authority is not a relative path.\n return !/^[a-z][a-z0-9+.-]*:/i.test(url);\n}\n\n/** Return the URL if safe to interpolate into href/src; otherwise undefined. */\nexport function sanitizeHref(url: unknown): string | undefined {\n return isSafeHref(url) ? (url as string) : undefined;\n}\n\n/**\n * Restrictive iframe-src validator for embed nodes (youtube et al.).\n * Accepts only https://www.youtube.com / https://www.youtube-nocookie.com.\n * Anything else collapses to undefined so the iframe doesn't render.\n */\nfunction sanitizeEmbedSrc(url: unknown): string | undefined {\n if (typeof url !== 'string') return undefined;\n if (!isSafeHref(url)) return undefined;\n const lower = url.toLowerCase();\n if (lower.startsWith('https://www.youtube.com/') || lower.startsWith('https://www.youtube-nocookie.com/')) {\n return url;\n }\n return undefined;\n}\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\nexport type 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 nodeRenderers?: Readonly<Record<string, CustomNodeRenderer>>;\n inheritRegisteredNodes?: boolean;\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 // T#347 — href is attacker-controlled (post author chose it).\n // sanitizeHref rejects javascript:/data:/vbscript:/etc. — falls\n // back to `#` so the link is inert rather than dangerous.\n const safeHref = sanitizeHref(mark.attrs?.href) ?? '#';\n // Same-origin paths route through the host app's Link (router-\n // aware) so cross-doc navigation doesn't full-reload. External\n // http(s) URLs keep <a target=\"_blank\"> behaviour.\n const Link = ctx?.linkComponent;\n if (Link && safeHref.startsWith('/') && !safeHref.startsWith('//')) {\n return (\n <Link to={safeHref} className={contentClasses.link}>\n {acc}\n </Link>\n );\n }\n return (\n <a href={safeHref} target={mark.attrs?.target ?? '_blank'} rel=\"noopener noreferrer\">\n {acc}\n </a>\n );\n }\n case 'internalLink': {\n const to = sanitizeHref(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 // T#347 — XSS hardening: the prior implementation read `node.attrs.html`\n // and injected it via dangerouslySetInnerHTML on the premise that it was\n // \"Shiki-rendered HTML pre-sanitised at build time\". That premise is\n // false in the portal context: `node.attrs` come from a TipTap document\n // authored at runtime by an arbitrary user. An attacker who can post a\n // codeBlock could set `attrs.html` to a script-carrying payload and\n // achieve stored XSS. We drop the html-attr path entirely; if syntax\n // highlighting is needed, the consumer can pass a custom CodeBlock via\n // the customNodeRegistry that highlights from the trusted text content.\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 <pre>\n <code className={language ? `language-${language}` : undefined}>{code}</code>\n </pre>\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 return <ScopedNode key={index} node={node} index={index} />;\n}\nfunction ScopedNode({ node, index }: { node: TipTapNode; index: number }): ReactNode {\n const context = useContext(TipTapContext);\n const CustomRenderer =\n context.nodeRenderers?.[node.type] ??\n (context.inheritRegisteredNodes !== false ? customNodeRegistry.get(node.type) : undefined);\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 // T#347 — XSS hardening: image src in a TipTap doc is post-author\n // controlled. A `data:text/html` URL would let the browser load\n // a script-bearing document under the portal's origin. Reject\n // anything that isn't a same-origin path or http(s) URL — the\n // image silently doesn't render if the src is unsafe.\n const safeSrc = sanitizeHref(node.attrs?.src);\n if (!safeSrc) return null;\n return (\n <img\n key={index}\n src={safeSrc}\n alt={node.attrs?.alt ?? ''}\n title={node.attrs?.title}\n className={contentClasses.image}\n loading=\"lazy\"\n />\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>\n <tbody>{node.content?.map(renderNode)}</tbody>\n </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 // T#347 — XSS hardening: iframes are powerful (can frame any URL\n // the host allows X-Frame'ing). Restrict src to the YouTube\n // origins we actually want — anything else collapses to null\n // and the iframe doesn't render. Without this, a post author\n // could embed an arbitrary attacker-controlled page in an\n // iframe with autoplay + fullscreen permissions.\n const safeSrc = sanitizeEmbedSrc(node.attrs?.src);\n if (!safeSrc) return null;\n return (\n <div key={index} style={{ position: 'relative', paddingBottom: '56.25%', height: 0, marginBottom: '1.25rem' }}>\n <iframe\n src={safeSrc}\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 nodeRenderers?: Readonly<Record<string, CustomNodeRenderer>>;\n inheritRegisteredNodes?: boolean;\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({\n content,\n className,\n sx,\n compact,\n linkComponent,\n nodeRenderers,\n inheritRegisteredNodes,\n}: TipTapRendererProps) {\n if (!content || !('content' in content) || !Array.isArray(content.content)) {\n return null;\n }\n\n const ctxValue: TipTapRenderContext = { linkComponent, nodeRenderers, inheritRegisteredNodes };\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"]}
@@ -0,0 +1,108 @@
1
+ import { useState, useEffect } from 'react';
2
+
3
+ // src/blocks/auth-block/guards.tsx
4
+ function AuthGuard({
5
+ children,
6
+ useAuth,
7
+ loadingComponent = null,
8
+ onUnauthenticated,
9
+ unauthenticatedComponent = null
10
+ }) {
11
+ const { isAuthenticated, isLoading } = useAuth();
12
+ const [checked, setChecked] = useState(false);
13
+ useEffect(() => {
14
+ if (!isLoading) {
15
+ if (!isAuthenticated) {
16
+ onUnauthenticated?.();
17
+ }
18
+ setChecked(true);
19
+ }
20
+ }, [isAuthenticated, isLoading, onUnauthenticated]);
21
+ if (isLoading || !checked) {
22
+ return loadingComponent;
23
+ }
24
+ if (!isAuthenticated) {
25
+ return unauthenticatedComponent;
26
+ }
27
+ return children;
28
+ }
29
+ function GuestGuard({
30
+ children,
31
+ useAuth,
32
+ loadingComponent = null,
33
+ onAuthenticated,
34
+ authenticatedComponent = null
35
+ }) {
36
+ const { isAuthenticated, isLoading } = useAuth();
37
+ const [checked, setChecked] = useState(false);
38
+ useEffect(() => {
39
+ if (!isLoading) {
40
+ if (isAuthenticated) {
41
+ onAuthenticated?.();
42
+ }
43
+ setChecked(true);
44
+ }
45
+ }, [isAuthenticated, isLoading, onAuthenticated]);
46
+ if (isLoading || !checked) {
47
+ return loadingComponent;
48
+ }
49
+ if (isAuthenticated) {
50
+ return authenticatedComponent;
51
+ }
52
+ return children;
53
+ }
54
+ function RoleBasedGuard({
55
+ children,
56
+ useAuth,
57
+ roles = [],
58
+ permissions = [],
59
+ permissionStrategy = "all",
60
+ requireEmailVerified = false,
61
+ roleMatchStrategy = "any",
62
+ loadingComponent = null,
63
+ onAccessDenied,
64
+ accessDeniedComponent = null
65
+ }) {
66
+ const { isAuthenticated, isLoading, user } = useAuth();
67
+ let reason = null;
68
+ if (!isAuthenticated || !user) reason = "not_authenticated";
69
+ else if (requireEmailVerified && !user.emailVerified) reason = "email_not_verified";
70
+ else if (roles.length > 0 && !hasRole(user, roles, roleMatchStrategy)) reason = "missing_role";
71
+ else if (permissions.length > 0 && !hasPermission(user, permissions, permissionStrategy)) reason = "missing_permission";
72
+ useEffect(() => {
73
+ if (!isLoading && reason) onAccessDenied?.(reason);
74
+ }, [isLoading, reason, onAccessDenied]);
75
+ if (isLoading) return loadingComponent;
76
+ if (reason) return accessDeniedComponent;
77
+ return children;
78
+ }
79
+ function hasRole(user, role, strategy = "any") {
80
+ if (!user?.roles?.length) return false;
81
+ const roles = Array.isArray(role) ? role : [role];
82
+ if (roles.length === 0) return false;
83
+ return strategy === "all" ? roles.every((r) => user.roles.includes(r)) : roles.some((r) => user.roles.includes(r));
84
+ }
85
+ function hasPermission(user, permission, strategy = "all") {
86
+ if (!user?.permissions?.length) return false;
87
+ const permissions = Array.isArray(permission) ? permission : [permission];
88
+ if (permissions.length === 0) return false;
89
+ return strategy === "all" ? permissions.every((p) => user.permissions.includes(p)) : permissions.some((p) => user.permissions.includes(p));
90
+ }
91
+ function createConditionalRender(user) {
92
+ return {
93
+ canRender: (options) => {
94
+ const { roles = [], permissions = [], roleMatchStrategy = "any" } = options;
95
+ if (roles.length > 0 && !hasRole(user, roles, roleMatchStrategy)) {
96
+ return false;
97
+ }
98
+ if (permissions.length > 0 && !hasPermission(user, permissions, "all")) {
99
+ return false;
100
+ }
101
+ return true;
102
+ }
103
+ };
104
+ }
105
+
106
+ export { AuthGuard, GuestGuard, RoleBasedGuard, createConditionalRender, hasPermission, hasRole };
107
+ //# sourceMappingURL=chunk-4HUGZJKU.js.map
108
+ //# sourceMappingURL=chunk-4HUGZJKU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/blocks/auth-block/guards.tsx"],"names":[],"mappings":"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","file":"chunk-4HUGZJKU.js","sourcesContent":["'use client';\n\n/**\n * Route Guards\n *\n * Authentication and authorization guards for route protection.\n * Works with any router (React Router, Next.js, TanStack Router).\n *\n * @module blocks/auth-block\n */\n\nimport { type ReactNode, useEffect, useState } from 'react';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\n/**\n * User role type - string or enum value.\n */\nexport type Role = string;\n\n/**\n * Permission type - string identifier.\n */\nexport type Permission = string;\n\n/**\n * User with roles and permissions for authorization.\n */\nexport interface AuthUser {\n /** User ID */\n id: string | number;\n /** User roles */\n roles?: Role[];\n /** User permissions (fine-grained) */\n permissions?: Permission[];\n /** Email verified status */\n emailVerified?: boolean;\n /** Any additional properties */\n [key: string]: unknown;\n}\n\n/**\n * Auth state for guards.\n */\nexport interface AuthState {\n /** Whether user is authenticated */\n isAuthenticated: boolean;\n /** Whether auth state is still loading */\n isLoading: boolean;\n /** Current user (if authenticated) */\n user?: AuthUser | null;\n}\n\n/**\n * Props for useAuth hook.\n * Guards need this to check auth state.\n */\nexport interface UseAuth {\n (): AuthState;\n}\n\n// =============================================================================\n// AUTH GUARD\n// =============================================================================\n\n/**\n * AuthGuard props.\n */\nexport interface AuthGuardProps {\n /** Children to render when authorized */\n children: ReactNode;\n /** Hook to get auth state */\n useAuth: UseAuth;\n /** Component to show while loading */\n loadingComponent?: ReactNode;\n /** Called when not authenticated (e.g., redirect to login) */\n onUnauthenticated?: () => void;\n /** Component to show when not authenticated (if no redirect) */\n unauthenticatedComponent?: ReactNode;\n}\n\n/**\n * Guard that requires authentication.\n *\n * @example\n * ```tsx\n * import { AuthGuard } from '@omnitron-dev/prism/blocks';\n * import { useAuth } from '../hooks/use-auth';\n *\n * function ProtectedPage() {\n * return (\n * <AuthGuard\n * useAuth={useAuth}\n * onUnauthenticated={() => navigate('/login')}\n * loadingComponent={<LoadingScreen />}\n * >\n * <DashboardContent />\n * </AuthGuard>\n * );\n * }\n * ```\n */\nexport function AuthGuard({\n children,\n useAuth,\n loadingComponent = null,\n onUnauthenticated,\n unauthenticatedComponent = null,\n}: AuthGuardProps): ReactNode {\n const { isAuthenticated, isLoading } = useAuth();\n const [checked, setChecked] = useState(false);\n\n useEffect(() => {\n if (!isLoading) {\n if (!isAuthenticated) {\n onUnauthenticated?.();\n }\n setChecked(true);\n }\n }, [isAuthenticated, isLoading, onUnauthenticated]);\n\n if (isLoading || !checked) {\n return loadingComponent;\n }\n\n if (!isAuthenticated) {\n return unauthenticatedComponent;\n }\n\n return children;\n}\n\n// =============================================================================\n// GUEST GUARD\n// =============================================================================\n\n/**\n * GuestGuard props.\n */\nexport interface GuestGuardProps {\n /** Children to render when not authenticated */\n children: ReactNode;\n /** Hook to get auth state */\n useAuth: UseAuth;\n /** Component to show while loading */\n loadingComponent?: ReactNode;\n /** Called when authenticated (e.g., redirect to dashboard) */\n onAuthenticated?: () => void;\n /** Component to show when authenticated (if no redirect) */\n authenticatedComponent?: ReactNode;\n}\n\n/**\n * Guard that requires NO authentication.\n * Use for login, register, forgot password pages.\n *\n * @example\n * ```tsx\n * import { GuestGuard } from '@omnitron-dev/prism/blocks';\n * import { useAuth } from '../hooks/use-auth';\n *\n * function LoginPage() {\n * return (\n * <GuestGuard\n * useAuth={useAuth}\n * onAuthenticated={() => navigate('/dashboard')}\n * loadingComponent={<LoadingScreen />}\n * >\n * <LoginForm />\n * </GuestGuard>\n * );\n * }\n * ```\n */\nexport function GuestGuard({\n children,\n useAuth,\n loadingComponent = null,\n onAuthenticated,\n authenticatedComponent = null,\n}: GuestGuardProps): ReactNode {\n const { isAuthenticated, isLoading } = useAuth();\n const [checked, setChecked] = useState(false);\n\n useEffect(() => {\n if (!isLoading) {\n if (isAuthenticated) {\n onAuthenticated?.();\n }\n setChecked(true);\n }\n }, [isAuthenticated, isLoading, onAuthenticated]);\n\n if (isLoading || !checked) {\n return loadingComponent;\n }\n\n if (isAuthenticated) {\n return authenticatedComponent;\n }\n\n return children;\n}\n\n// =============================================================================\n// ROLE-BASED GUARD\n// =============================================================================\n\n/**\n * RoleBasedGuard props.\n */\nexport interface RoleBasedGuardProps {\n /** Children to render when authorized */\n children: ReactNode;\n /** Hook to get auth state */\n useAuth: UseAuth;\n /** Required roles (user must have at least one) */\n roles?: Role[];\n /** Required permissions. All are required unless permissionStrategy is specified. */\n permissions?: Permission[];\n permissionStrategy?: 'any' | 'all';\n /** Require email verification */\n requireEmailVerified?: boolean;\n /** Match strategy for roles: 'any' (default) or 'all' */\n roleMatchStrategy?: 'any' | 'all';\n /** Component to show while loading */\n loadingComponent?: ReactNode;\n /** Called when access denied */\n onAccessDenied?: (reason: AccessDeniedReason) => void;\n /** Component to show when access denied */\n accessDeniedComponent?: ReactNode;\n}\n\n/**\n * Reason for access denial.\n */\nexport type AccessDeniedReason = 'not_authenticated' | 'missing_role' | 'missing_permission' | 'email_not_verified';\n\n/**\n * Guard for role/permission-based access control.\n *\n * @example\n * ```tsx\n * import { RoleBasedGuard } from '@omnitron-dev/prism/blocks';\n * import { useAuth } from '../hooks/use-auth';\n *\n * // Require admin role\n * function AdminPage() {\n * return (\n * <RoleBasedGuard\n * useAuth={useAuth}\n * roles={['admin']}\n * onAccessDenied={() => navigate('/403')}\n * >\n * <AdminPanel />\n * </RoleBasedGuard>\n * );\n * }\n *\n * // Require specific permission\n * function EditUserPage() {\n * return (\n * <RoleBasedGuard\n * useAuth={useAuth}\n * permissions={['users:write']}\n * accessDeniedComponent={<AccessDenied />}\n * >\n * <UserEditForm />\n * </RoleBasedGuard>\n * );\n * }\n *\n * // Require admin OR moderator role\n * function ModeratePage() {\n * return (\n * <RoleBasedGuard\n * useAuth={useAuth}\n * roles={['admin', 'moderator']}\n * roleMatchStrategy=\"any\"\n * >\n * <ModerateContent />\n * </RoleBasedGuard>\n * );\n * }\n *\n * // Require email verified\n * function VerifiedOnlyPage() {\n * return (\n * <RoleBasedGuard\n * useAuth={useAuth}\n * requireEmailVerified\n * onAccessDenied={(reason) => {\n * if (reason === 'email_not_verified') {\n * navigate('/verify-email');\n * }\n * }}\n * >\n * <VerifiedContent />\n * </RoleBasedGuard>\n * );\n * }\n * ```\n */\nexport function RoleBasedGuard({\n children,\n useAuth,\n roles = [],\n permissions = [],\n permissionStrategy = 'all',\n requireEmailVerified = false,\n roleMatchStrategy = 'any',\n loadingComponent = null,\n onAccessDenied,\n accessDeniedComponent = null,\n}: RoleBasedGuardProps): ReactNode {\n const { isAuthenticated, isLoading, user } = useAuth();\n // Derive access during render. Storing it in an effect exposes the previous\n // user's children for one render after a role/permission change.\n let reason: AccessDeniedReason | null = null;\n if (!isAuthenticated || !user) reason = 'not_authenticated';\n else if (requireEmailVerified && !user.emailVerified) reason = 'email_not_verified';\n else if (roles.length > 0 && !hasRole(user, roles, roleMatchStrategy)) reason = 'missing_role';\n else if (permissions.length > 0 && !hasPermission(user, permissions, permissionStrategy)) reason = 'missing_permission';\n\n useEffect(() => {\n if (!isLoading && reason) onAccessDenied?.(reason);\n }, [isLoading, reason, onAccessDenied]);\n\n if (isLoading) return loadingComponent;\n if (reason) return accessDeniedComponent;\n\n return children;\n}\n\n// =============================================================================\n// UTILITY HOOKS\n// =============================================================================\n\n/**\n * Check if user has specific role(s).\n *\n * @example\n * ```tsx\n * const isAdmin = hasRole(user, 'admin');\n * const isModerator = hasRole(user, ['admin', 'moderator'], 'any');\n * const isSuperAdmin = hasRole(user, ['admin', 'superuser'], 'all');\n * ```\n */\nexport function hasRole(\n user: AuthUser | null | undefined,\n role: Role | Role[],\n strategy: 'any' | 'all' = 'any'\n): boolean {\n if (!user?.roles?.length) return false;\n\n const roles = Array.isArray(role) ? role : [role];\n // An empty requirement grants nothing. Under `all`, `[].every()` is `true`\n // — a vacuous truth that reads as \"every requirement is met\" and means \"no\n // requirement was checked\". A list arriving empty from config or from a\n // filtered array would open whatever it guards.\n if (roles.length === 0) return false;\n\n return strategy === 'all' ? roles.every((r) => user.roles!.includes(r)) : roles.some((r) => user.roles!.includes(r));\n}\n\n/**\n * Check if user has specific permission(s).\n *\n * @example\n * ```tsx\n * const canEdit = hasPermission(user, 'users:write');\n * const canManage = hasPermission(user, ['users:read', 'users:write'], 'all');\n * ```\n */\nexport function hasPermission(\n user: AuthUser | null | undefined,\n permission: Permission | Permission[],\n strategy: 'any' | 'all' = 'all'\n): boolean {\n if (!user?.permissions?.length) return false;\n\n const permissions = Array.isArray(permission) ? permission : [permission];\n // Same vacuous truth as `hasRole`, and here it was reachable by default:\n // `hasPermission(user, [])` returned `true` for any user holding at least\n // one permission, because the default strategy is `all` and `[].every()`\n // is `true`. Measured before this line existed.\n if (permissions.length === 0) return false;\n\n return strategy === 'all'\n ? permissions.every((p) => user.permissions!.includes(p))\n : permissions.some((p) => user.permissions!.includes(p));\n}\n\n/**\n * Create a conditional render helper based on roles/permissions.\n *\n * @example\n * ```tsx\n * const { canRender } = useConditionalRender(user);\n *\n * return (\n * <div>\n * {canRender({ roles: ['admin'] }) && <AdminPanel />}\n * {canRender({ permissions: ['users:write'] }) && <EditButton />}\n * </div>\n * );\n * ```\n */\nexport function createConditionalRender(user: AuthUser | null | undefined) {\n return {\n canRender: (options: {\n roles?: Role[];\n permissions?: Permission[];\n roleMatchStrategy?: 'any' | 'all';\n }): boolean => {\n const { roles = [], permissions = [], roleMatchStrategy = 'any' } = options;\n\n if (roles.length > 0 && !hasRole(user, roles, roleMatchStrategy)) {\n return false;\n }\n\n if (permissions.length > 0 && !hasPermission(user, permissions, 'all')) {\n return false;\n }\n\n return true;\n },\n };\n}\n"]}
@@ -0,0 +1,74 @@
1
+ import { scrollbarStyles } from './chunk-IRYU3NTG.js';
2
+ import Box from '@mui/material/Box';
3
+ import { styled } from '@mui/material/styles';
4
+ import { jsx } from 'react/jsx-runtime';
5
+
6
+ var ScrollbarRoot = styled(Box, {
7
+ shouldForwardProp: (prop) => prop !== "ownerState"
8
+ })(({ theme, ownerState }) => {
9
+ const { fillContent, hideScrollbar, autoHide, axis } = ownerState;
10
+ const getOverflow = () => {
11
+ if (axis === "x") return { overflowX: "auto", overflowY: "hidden" };
12
+ if (axis === "y") return { overflowX: "hidden", overflowY: "auto" };
13
+ return { overflow: "auto" };
14
+ };
15
+ return {
16
+ minWidth: 0,
17
+ minHeight: 0,
18
+ ...getOverflow(),
19
+ ...fillContent && {
20
+ flexGrow: 1,
21
+ display: "flex",
22
+ flexDirection: "column"
23
+ },
24
+ ...!hideScrollbar && scrollbarStyles(theme, { autoHide }),
25
+ ...hideScrollbar && {
26
+ scrollbarWidth: "none",
27
+ msOverflowStyle: "none",
28
+ "&::-webkit-scrollbar": {
29
+ display: "none"
30
+ }
31
+ }
32
+ };
33
+ });
34
+ function Scrollbar({
35
+ children,
36
+ sx,
37
+ fillContent = false,
38
+ hideScrollbar = false,
39
+ autoHide = true,
40
+ axis = "y",
41
+ maxHeight,
42
+ minHeight,
43
+ className,
44
+ ref,
45
+ ...other
46
+ }) {
47
+ const ownerState = {
48
+ fillContent,
49
+ hideScrollbar,
50
+ autoHide,
51
+ axis
52
+ };
53
+ return /* @__PURE__ */ jsx(
54
+ ScrollbarRoot,
55
+ {
56
+ ref,
57
+ ownerState,
58
+ className,
59
+ sx: [
60
+ {
61
+ ...maxHeight !== void 0 && { maxHeight },
62
+ ...minHeight !== void 0 && { minHeight }
63
+ },
64
+ ...Array.isArray(sx) ? sx : [sx]
65
+ ],
66
+ ...other,
67
+ children
68
+ }
69
+ );
70
+ }
71
+
72
+ export { Scrollbar };
73
+ //# sourceMappingURL=chunk-4Q5L7LDG.js.map
74
+ //# sourceMappingURL=chunk-4Q5L7LDG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/scrollbar/scrollbar.tsx"],"names":[],"mappings":";;;;;AAwDA,IAAM,aAAA,GAAgB,OAAO,GAAA,EAAK;AAAA,EAChC,iBAAA,EAAmB,CAAC,IAAA,KAAS,IAAA,KAAS;AACxC,CAAC,CAAA,CAAsB,CAAC,EAAE,KAAA,EAAO,YAAW,KAAM;AAChD,EAAA,MAAM,EAAE,WAAA,EAAa,aAAA,EAAe,QAAA,EAAU,MAAK,GAAI,UAAA;AAEvD,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,IAAI,SAAS,GAAA,EAAK,OAAO,EAAE,SAAA,EAAW,MAAA,EAAQ,WAAW,QAAA,EAAS;AAClE,IAAA,IAAI,SAAS,GAAA,EAAK,OAAO,EAAE,SAAA,EAAW,QAAA,EAAU,WAAW,MAAA,EAAO;AAClE,IAAA,OAAO,EAAE,UAAU,MAAA,EAAO;AAAA,EAC5B,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,CAAA;AAAA,IACV,SAAA,EAAW,CAAA;AAAA,IACX,GAAG,WAAA,EAAY;AAAA,IACf,GAAI,WAAA,IAAe;AAAA,MACjB,QAAA,EAAU,CAAA;AAAA,MACV,OAAA,EAAS,MAAA;AAAA,MACT,aAAA,EAAe;AAAA,KACjB;AAAA,IACA,GAAI,CAAC,aAAA,IAAiB,gBAAgB,KAAA,EAAO,EAAE,UAAU,CAAA;AAAA,IACzD,GAAI,aAAA,IAAiB;AAAA,MACnB,cAAA,EAAgB,MAAA;AAAA,MAChB,eAAA,EAAiB,MAAA;AAAA,MACjB,sBAAA,EAAwB;AAAA,QACtB,OAAA,EAAS;AAAA;AACX;AACF,GACF;AACF,CAAC,CAAA;AA+BM,SAAS,SAAA,CAAU;AAAA,EACxB,QAAA;AAAA,EACA,EAAA;AAAA,EACA,WAAA,GAAc,KAAA;AAAA,EACd,aAAA,GAAgB,KAAA;AAAA,EAChB,QAAA,GAAW,IAAA;AAAA,EACX,IAAA,GAAO,GAAA;AAAA,EACP,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAmD;AACjD,EAAA,MAAM,UAAA,GAAa;AAAA,IACjB,WAAA;AAAA,IACA,aAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,MACA,EAAA,EAAI;AAAA,QACF;AAAA,UACE,GAAI,SAAA,KAAc,MAAA,IAAa,EAAE,SAAA,EAAU;AAAA,UAC3C,GAAI,SAAA,KAAc,MAAA,IAAa,EAAE,SAAA;AAAU,SAC7C;AAAA,QACA,GAAI,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA,GAAI,EAAA,GAAK,CAAC,EAAE;AAAA,OAClC;AAAA,MACC,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ","file":"chunk-4Q5L7LDG.js","sourcesContent":["'use client';\n\n/**\n * Scrollbar Component\n *\n * Custom scrollbar wrapper with themed styling.\n *\n * @module components/scrollbar\n */\n\nimport type { ReactNode, Ref } from 'react';\nimport Box from '@mui/material/Box';\nimport { styled } from '@mui/material/styles';\nimport { scrollbarStyles } from '../../theme/mixins.js';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface ScrollbarProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\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 /** Reveal on hover or keyboard focus; native visibility on touch/high contrast. */\n autoHide?: 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 autoHide: 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, autoHide, axis } = ownerState;\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 ...(!hideScrollbar && scrollbarStyles(theme, { autoHide })),\n ...(hideScrollbar && {\n scrollbarWidth: 'none',\n msOverflowStyle: 'none',\n '&::-webkit-scrollbar': {\n display: 'none',\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 function Scrollbar({\n children,\n sx,\n fillContent = false,\n hideScrollbar = false,\n autoHide = true,\n axis = 'y',\n maxHeight,\n minHeight,\n className,\n ref,\n ...other\n}: ScrollbarProps & { ref?: Ref<HTMLDivElement> }) {\n const ownerState = {\n fillContent,\n hideScrollbar,\n autoHide,\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"]}
@@ -1,5 +1,6 @@
1
1
  import { useState, useCallback, useMemo } from 'react';
2
2
 
3
+ // src/core/hooks/use-boolean.ts
3
4
  function useBoolean(defaultValue = false) {
4
5
  const [value, setValue] = useState(defaultValue);
5
6
  const onTrue = useCallback(() => {
@@ -24,5 +25,5 @@ function useBoolean(defaultValue = false) {
24
25
  }
25
26
 
26
27
  export { useBoolean };
27
- //# sourceMappingURL=chunk-BRDWQVRT.js.map
28
- //# sourceMappingURL=chunk-BRDWQVRT.js.map
28
+ //# sourceMappingURL=chunk-4R7EZ7GQ.js.map
29
+ //# sourceMappingURL=chunk-4R7EZ7GQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/hooks/use-boolean.ts"],"names":[],"mappings":";;;AAiEO,SAAS,UAAA,CAAW,eAAe,KAAA,EAAyB;AACjE,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAS,YAAY,CAAA;AAE/C,EAAA,MAAM,MAAA,GAAS,YAAY,MAAM;AAC/B,IAAA,QAAA,CAAS,IAAI,CAAA;AAAA,EACf,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,OAAA,GAAU,YAAY,MAAM;AAChC,IAAA,QAAA,CAAS,KAAK,CAAA;AAAA,EAChB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,QAAA,GAAW,YAAY,MAAM;AACjC,IAAA,QAAA,CAAS,CAAC,IAAA,KAAS,CAAC,IAAI,CAAA;AAAA,EAC1B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,OAAA;AAAA,IACL,OAAO;AAAA,MACL,KAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA;AAAA,MACA;AAAA,KACF,CAAA;AAAA,IACA,CAAC,KAAA,EAAO,MAAA,EAAQ,OAAA,EAAS,QAAQ;AAAA,GACnC;AACF","file":"chunk-4R7EZ7GQ.js","sourcesContent":["'use client';\n\n/**\n * useBoolean Hook\n *\n * A hook for managing boolean state with convenient toggle methods.\n *\n * @module core/hooks/use-boolean\n */\n\nimport { useState, useCallback, useMemo } from 'react';\n\n/**\n * Return type for useBoolean hook.\n */\nexport interface UseBooleanReturn {\n /** Current boolean value */\n value: boolean;\n /** Set value to true */\n onTrue: () => void;\n /** Set value to false */\n onFalse: () => void;\n /** Toggle the value */\n onToggle: () => void;\n /** Set to specific value */\n setValue: (value: boolean) => void;\n}\n\n/**\n * Hook for managing boolean state with convenient toggle methods.\n *\n * @param defaultValue - Initial boolean value (default: false)\n * @returns Boolean state and control methods\n *\n * @example\n * ```tsx\n * function Modal() {\n * const dialog = useBoolean();\n *\n * return (\n * <>\n * <Button onClick={dialog.onTrue}>Open</Button>\n * <Dialog open={dialog.value} onClose={dialog.onFalse}>\n * <DialogContent>...</DialogContent>\n * </Dialog>\n * </>\n * );\n * }\n * ```\n *\n * @example\n * ```tsx\n * function Sidebar() {\n * const { value: isCollapsed, onToggle } = useBoolean(false);\n *\n * return (\n * <nav style={{ width: isCollapsed ? 64 : 240 }}>\n * <IconButton onClick={onToggle}>\n * {isCollapsed ? <MenuIcon /> : <CloseIcon />}\n * </IconButton>\n * </nav>\n * );\n * }\n * ```\n */\nexport function useBoolean(defaultValue = false): UseBooleanReturn {\n const [value, setValue] = useState(defaultValue);\n\n const onTrue = useCallback(() => {\n setValue(true);\n }, []);\n\n const onFalse = useCallback(() => {\n setValue(false);\n }, []);\n\n const onToggle = useCallback(() => {\n setValue((prev) => !prev);\n }, []);\n\n return useMemo(\n () => ({\n value,\n onTrue,\n onFalse,\n onToggle,\n setValue,\n }),\n [value, onTrue, onFalse, onToggle]\n );\n}\n"]}
@@ -0,0 +1,185 @@
1
+ import Box from '@mui/material/Box';
2
+ import Stack from '@mui/material/Stack';
3
+ import Typography from '@mui/material/Typography';
4
+ import { alpha } from '@mui/material/styles';
5
+ import { jsx, jsxs } from 'react/jsx-runtime';
6
+
7
+ // src/components/empty-content/empty-content.tsx
8
+ function IconWrapper({ icon, color = "primary.main", size = 64 }) {
9
+ return /* @__PURE__ */ jsx(
10
+ Box,
11
+ {
12
+ sx: {
13
+ width: size,
14
+ height: size,
15
+ borderRadius: "50%",
16
+ display: "flex",
17
+ alignItems: "center",
18
+ justifyContent: "center",
19
+ bgcolor: (theme) => {
20
+ const parts = color.split(".");
21
+ let resolved = theme.palette;
22
+ for (const part of parts) {
23
+ resolved = resolved?.[part];
24
+ }
25
+ return typeof resolved === "string" ? alpha(resolved, 0.08) : alpha(theme.palette.primary.main, 0.08);
26
+ }
27
+ },
28
+ children: icon
29
+ }
30
+ );
31
+ }
32
+ function EmptyContent({
33
+ illustration,
34
+ icon,
35
+ iconColor = "primary.main",
36
+ iconSize = 64,
37
+ title = "No data",
38
+ description,
39
+ action,
40
+ actions,
41
+ maxWidth = 400,
42
+ filled = false,
43
+ sx,
44
+ illustrationSx,
45
+ slotProps,
46
+ compact = false
47
+ }) {
48
+ const visual = icon ? /* @__PURE__ */ jsx(IconWrapper, { icon, color: iconColor, size: iconSize }) : illustration ? /* @__PURE__ */ jsx(Box, { sx: illustrationSx, children: illustration }) : null;
49
+ const allActions = [...actions ?? [], ...action ? [action] : []];
50
+ return /* @__PURE__ */ jsx(
51
+ Stack,
52
+ {
53
+ sx: {
54
+ alignItems: "center",
55
+ justifyContent: "center",
56
+ textAlign: "center",
57
+ py: compact ? 4 : 8,
58
+ px: 2,
59
+ // Default non-compact behavior: vertically center inside the
60
+ // available "main content" area. Two complementary anchors:
61
+ // * `flex: 1, alignSelf: 'stretch'` — when the parent IS a
62
+ // flex column with explicit height (DashboardLayout main,
63
+ // full-height page wrappers), EmptyContent grows to fill
64
+ // the column and the inner `justifyContent: center` puts
65
+ // the message in the middle of that column.
66
+ // * `minHeight: calc(100vh - 240px)` — fallback for the
67
+ // common case where the page wrapper is just a content-
68
+ // sized `<Stack>` or `<Box>`. 240px is the typical
69
+ // vertical chrome (header ~64 + breadcrumbs ~60 + page
70
+ // padding ~80 + a small margin), so this leaves enough
71
+ // space below the breadcrumbs for the message to sit at
72
+ // the optical center of the visible viewport.
73
+ //
74
+ // `compact` keeps the inline-sized behavior for callers that
75
+ // drop EmptyContent inside a card cell or sidebar.
76
+ // `filled` is the explicit "fill my parent" mode and shares
77
+ // the same fallback so the visual is consistent.
78
+ ...!compact && {
79
+ flex: 1,
80
+ alignSelf: "stretch",
81
+ minHeight: "calc(100vh - 240px)"
82
+ },
83
+ ...filled && { height: "100%" },
84
+ ...sx
85
+ },
86
+ children: /* @__PURE__ */ jsxs(
87
+ Box,
88
+ {
89
+ sx: {
90
+ maxWidth,
91
+ display: "flex",
92
+ flexDirection: "column",
93
+ alignItems: "center",
94
+ gap: compact ? 1.5 : 2.5
95
+ },
96
+ children: [
97
+ visual,
98
+ /* @__PURE__ */ jsxs(Stack, { spacing: 0.5, sx: {
99
+ alignItems: "center"
100
+ }, children: [
101
+ title && /* @__PURE__ */ jsx(
102
+ Typography,
103
+ {
104
+ variant: compact ? "subtitle1" : "h6",
105
+ sx: {
106
+ color: "text.secondary",
107
+ fontWeight: 600,
108
+ ...slotProps?.title
109
+ },
110
+ children: title
111
+ }
112
+ ),
113
+ description && /* @__PURE__ */ jsx(
114
+ Typography,
115
+ {
116
+ variant: "body2",
117
+ sx: {
118
+ color: "text.disabled",
119
+ lineHeight: 1.6,
120
+ ...slotProps?.description
121
+ },
122
+ children: description
123
+ }
124
+ )
125
+ ] }),
126
+ allActions.length > 0 && /* @__PURE__ */ jsx(
127
+ Stack,
128
+ {
129
+ direction: "row",
130
+ spacing: 1,
131
+ sx: { mt: compact ? 0.5 : 1, flexWrap: "wrap", justifyContent: "center", ...slotProps?.actions },
132
+ children: allActions.map((a, i) => /* @__PURE__ */ jsx(Box, { children: a }, i))
133
+ }
134
+ )
135
+ ]
136
+ }
137
+ )
138
+ }
139
+ );
140
+ }
141
+ function SearchEmptyContent({
142
+ query,
143
+ ...props
144
+ }) {
145
+ return /* @__PURE__ */ jsx(
146
+ EmptyContent,
147
+ {
148
+ title: "No results found",
149
+ description: query ? `Your search for "${query}" did not match any results.` : "Try adjusting your search criteria.",
150
+ ...props
151
+ }
152
+ );
153
+ }
154
+ function LoadingEmptyContent({ ...props }) {
155
+ return /* @__PURE__ */ jsx(
156
+ EmptyContent,
157
+ {
158
+ title: "Loading...",
159
+ illustration: /* @__PURE__ */ jsx(
160
+ Box,
161
+ {
162
+ sx: {
163
+ width: 64,
164
+ height: 64,
165
+ borderRadius: "50%",
166
+ border: "3px solid",
167
+ borderColor: "divider",
168
+ borderTopColor: "primary.main",
169
+ animation: "spin 1s linear infinite",
170
+ "@keyframes spin": {
171
+ from: { transform: "rotate(0deg)" },
172
+ to: { transform: "rotate(360deg)" }
173
+ }
174
+ }
175
+ }
176
+ ),
177
+ compact: true,
178
+ ...props
179
+ }
180
+ );
181
+ }
182
+
183
+ export { EmptyContent, LoadingEmptyContent, SearchEmptyContent };
184
+ //# sourceMappingURL=chunk-6IANOSMD.js.map
185
+ //# sourceMappingURL=chunk-6IANOSMD.js.map