@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,303 @@
1
+ import { parseResearchMarkdown, researchLimits } from './chunk-TEIGUOWN.js';
2
+ import { TipTapRenderer } from './chunk-4B2LTPK2.js';
3
+ import { ChevronDownIcon } from './chunk-VQVVHMPG.js';
4
+ import { useId, useMemo, Component, useRef, useState, useEffect } from 'react';
5
+ import katex from 'katex';
6
+ import { Box, Accordion, AccordionSummary, Typography, AccordionDetails } from '@mui/material';
7
+ import { useTheme } from '@mui/material/styles';
8
+ import { jsx, jsxs } from 'react/jsx-runtime';
9
+
10
+ // src/components/research/diagram-image.ts
11
+ function diagramImage(source, purify) {
12
+ const fragment = purify.sanitize(source, {
13
+ USE_PROFILES: { svg: true, svgFilters: true },
14
+ ADD_TAGS: ["style"],
15
+ FORBID_TAGS: ["foreignObject", "image", "a", "script", "animate", "animateMotion", "animateTransform", "set"],
16
+ FORBID_ATTR: ["href", "xlink:href"],
17
+ RETURN_DOM_FRAGMENT: true
18
+ });
19
+ const svg = fragment.querySelector("svg");
20
+ if (!svg || !svg.getAttribute("viewBox")) throw new Error("invalid_diagram_svg");
21
+ const title = svg.querySelector("title")?.textContent?.trim();
22
+ const labels = [...svg.querySelectorAll("text")].map((node) => node.textContent?.trim()).filter(Boolean);
23
+ const description = title || labels.join(" \xB7 ") || "Diagram";
24
+ return {
25
+ src: "data:image/svg+xml;charset=utf-8," + encodeURIComponent(new XMLSerializer().serializeToString(svg)),
26
+ description: description.slice(0, 2e3)
27
+ };
28
+ }
29
+ var pending = Promise.resolve();
30
+ function diagramSourceAllowed(source, engine) {
31
+ return engine === "mermaid" && source.length <= researchLimits.block && !/^\s*---/m.test(source) && !/%%\s*\{/.test(source);
32
+ }
33
+ function ResearchDiagram({
34
+ source,
35
+ engine,
36
+ labels
37
+ }) {
38
+ const id = `diagram-${useId().replace(/[^\w-]/g, "")}`;
39
+ const container = useRef(null);
40
+ const [picture, setPicture] = useState();
41
+ const [state, setState] = useState("loading");
42
+ const theme = useTheme(), mode = theme.palette.mode;
43
+ useEffect(() => {
44
+ let cancelled = false;
45
+ setState("loading");
46
+ setPicture(void 0);
47
+ const target = container.current;
48
+ const run = async () => {
49
+ if (cancelled || !target) return;
50
+ if (!diagramSourceAllowed(source, engine)) {
51
+ setState("error");
52
+ return;
53
+ }
54
+ let scratch;
55
+ try {
56
+ const [{ default: mermaid }, { default: purify }] = await Promise.all([import('mermaid'), import('dompurify')]);
57
+ if (cancelled) return;
58
+ scratch = document.createElement("div");
59
+ scratch.style.cssText = "position:absolute;visibility:hidden;pointer-events:none;width:1000px";
60
+ target.append(scratch);
61
+ mermaid.initialize({
62
+ startOnLoad: false,
63
+ securityLevel: "strict",
64
+ htmlLabels: false,
65
+ maxTextSize: researchLimits.block,
66
+ maxEdges: 256,
67
+ suppressErrorRendering: true,
68
+ look: "classic",
69
+ theme: "base",
70
+ fontFamily: "system-ui, sans-serif",
71
+ themeVariables: {
72
+ darkMode: mode === "dark",
73
+ primaryColor: theme.palette.background.paper,
74
+ primaryTextColor: theme.palette.text.primary,
75
+ primaryBorderColor: theme.palette.text.secondary,
76
+ secondaryColor: theme.palette.background.default,
77
+ tertiaryColor: theme.palette.background.paper,
78
+ lineColor: theme.palette.text.secondary,
79
+ textColor: theme.palette.text.primary,
80
+ fontFamily: "system-ui, sans-serif",
81
+ fontSize: "16px"
82
+ },
83
+ flowchart: { htmlLabels: false },
84
+ secure: [
85
+ "securityLevel",
86
+ "startOnLoad",
87
+ "maxTextSize",
88
+ "maxEdges",
89
+ "htmlLabels",
90
+ "theme",
91
+ "look",
92
+ "fontFamily",
93
+ "themeCSS",
94
+ "themeVariables"
95
+ ]
96
+ });
97
+ const result = await mermaid.render(id, source, scratch);
98
+ const renderedPicture = diagramImage(result.svg, purify);
99
+ if (!cancelled) {
100
+ setPicture(renderedPicture);
101
+ setState("ready");
102
+ }
103
+ } catch {
104
+ if (!cancelled) setState("error");
105
+ } finally {
106
+ scratch?.remove();
107
+ }
108
+ };
109
+ pending = pending.catch(() => void 0).then(run);
110
+ return () => {
111
+ cancelled = true;
112
+ target?.replaceChildren();
113
+ };
114
+ }, [source, engine, id, theme, mode]);
115
+ return /* @__PURE__ */ jsxs("figure", { className: "prism-research__diagram", children: [
116
+ state !== "ready" && /* @__PURE__ */ jsx("p", { role: "status", children: state === "error" ? labels.invalid : labels.loading }),
117
+ /* @__PURE__ */ jsx("div", { ref: container, "aria-hidden": "true" }),
118
+ picture && /* @__PURE__ */ jsx(
119
+ "img",
120
+ {
121
+ className: "prism-research__diagram-image",
122
+ src: picture.src,
123
+ alt: picture.description,
124
+ onError: () => setState("error")
125
+ }
126
+ ),
127
+ /* @__PURE__ */ jsxs("details", { open: state === "error", children: [
128
+ /* @__PURE__ */ jsxs("summary", { children: [
129
+ labels.source,
130
+ " \xB7 ",
131
+ engine
132
+ ] }),
133
+ /* @__PURE__ */ jsx("pre", { children: source })
134
+ ] })
135
+ ] });
136
+ }
137
+ function defineResearchWidget(version, parse, View) {
138
+ return {
139
+ version,
140
+ render(input) {
141
+ const props = parse(input);
142
+ return /* @__PURE__ */ jsx(View, { ...props });
143
+ }
144
+ };
145
+ }
146
+ var defaultResearchLabels = {
147
+ metadata: "Source metadata",
148
+ contents: "On this page",
149
+ source: "Source",
150
+ unavailable: "This block is not available in this document.",
151
+ invalid: "This block could not be rendered. Its source is preserved.",
152
+ loading: "Rendering diagram\u2026",
153
+ diagnostics: "Document diagnostics"
154
+ };
155
+ var BlockBoundary = class extends Component {
156
+ state = { failed: false };
157
+ static getDerivedStateFromError() {
158
+ return { failed: true };
159
+ }
160
+ render() {
161
+ return this.state.failed ? this.props.fallback : this.props.children;
162
+ }
163
+ };
164
+ function Formula({ node, labels }) {
165
+ const tex = String(node.attrs?.tex ?? "");
166
+ try {
167
+ if (tex.length > researchLimits.block) throw new Error("formula_limit");
168
+ const html = katex.renderToString(tex, {
169
+ displayMode: node.type === "mathBlock",
170
+ trust: false,
171
+ strict: "error",
172
+ throwOnError: true,
173
+ maxExpand: 1e3,
174
+ maxSize: 20,
175
+ output: "htmlAndMathml"
176
+ });
177
+ return /* @__PURE__ */ jsx(
178
+ "span",
179
+ {
180
+ className: node.type === "mathBlock" ? "prism-research__formula-block" : void 0,
181
+ dangerouslySetInnerHTML: { __html: html }
182
+ }
183
+ );
184
+ } catch {
185
+ return /* @__PURE__ */ jsx("code", { className: "prism-research__invalid-math", title: labels.invalid, children: tex });
186
+ }
187
+ }
188
+ function Widget({ node, widgets, labels }) {
189
+ const d = node.attrs?.descriptor;
190
+ if (!d || typeof d.type !== "string" || !Object.hasOwn(widgets, d.type) || widgets[d.type]?.version !== d.version)
191
+ return /* @__PURE__ */ jsxs("details", { className: "prism-research__failure", children: [
192
+ /* @__PURE__ */ jsx("summary", { children: labels.unavailable }),
193
+ /* @__PURE__ */ jsx("pre", { children: JSON.stringify(d) })
194
+ ] });
195
+ try {
196
+ return widgets[d.type].render(d.props);
197
+ } catch {
198
+ return /* @__PURE__ */ jsxs("details", { className: "prism-research__failure", children: [
199
+ /* @__PURE__ */ jsx("summary", { children: labels.invalid }),
200
+ /* @__PURE__ */ jsx("pre", { children: JSON.stringify(d) })
201
+ ] });
202
+ }
203
+ }
204
+ var emptyWidgets = Object.freeze({});
205
+ function ResearchDocument({
206
+ source,
207
+ sourceProfile = "research",
208
+ documentId,
209
+ widgets = emptyWidgets,
210
+ labels: overrides,
211
+ contents = false,
212
+ className,
213
+ sx
214
+ }) {
215
+ const uid = useId();
216
+ const prefix = documentId ?? `research-${uid.replace(/[^\w-]/g, "")}`;
217
+ const labels = useMemo(() => ({ ...defaultResearchLabels, ...overrides }), [overrides]);
218
+ const parsed = useMemo(() => {
219
+ try {
220
+ return { data: parseResearchMarkdown(source, prefix, sourceProfile) };
221
+ } catch {
222
+ return { error: true };
223
+ }
224
+ }, [source, prefix, sourceProfile]);
225
+ const nodes = useMemo(() => {
226
+ const failure = (raw) => /* @__PURE__ */ jsxs("details", { className: "prism-research__failure", open: true, children: [
227
+ /* @__PURE__ */ jsx("summary", { children: labels.invalid }),
228
+ /* @__PURE__ */ jsx("pre", { children: raw })
229
+ ] });
230
+ const bounded = (render) => (props) => {
231
+ const raw = String(
232
+ props.node.attrs?.tex ?? props.node.attrs?.code ?? JSON.stringify(props.node.attrs?.descriptor ?? {})
233
+ );
234
+ return /* @__PURE__ */ jsx(BlockBoundary, { fallback: failure(raw), children: render(props.node) }, raw);
235
+ };
236
+ return {
237
+ mathInline: ({ node }) => /* @__PURE__ */ jsx(Formula, { node, labels }),
238
+ mathBlock: ({ node }) => /* @__PURE__ */ jsx(Formula, { node, labels }),
239
+ diagram: bounded((n) => /* @__PURE__ */ jsx(ResearchDiagram, { source: String(n.attrs?.code ?? ""), engine: String(n.attrs?.engine ?? ""), labels })),
240
+ researchWidget: bounded((n) => /* @__PURE__ */ jsx(Widget, { node: n, widgets, labels }))
241
+ };
242
+ }, [widgets, labels]);
243
+ if (!parsed.data) return /* @__PURE__ */ jsx("p", { role: "alert", children: labels.invalid });
244
+ return /* @__PURE__ */ jsxs(
245
+ Box,
246
+ {
247
+ className: `prism-research ${className ?? ""}`,
248
+ sx: (theme) => ({ "--prism-research-border": theme.palette.divider }),
249
+ children: [
250
+ parsed.data.metadata && /* @__PURE__ */ jsxs(
251
+ Accordion,
252
+ {
253
+ disableGutters: true,
254
+ elevation: 0,
255
+ sx: { mb: 2, border: 1, borderColor: "divider", "&:before": { display: "none" } },
256
+ children: [
257
+ /* @__PURE__ */ jsx(AccordionSummary, { expandIcon: /* @__PURE__ */ jsx(ChevronDownIcon, { fontSize: "small" }), children: /* @__PURE__ */ jsxs(Typography, { variant: "caption", color: "text.secondary", children: [
258
+ labels.metadata,
259
+ " \xB7 YAML"
260
+ ] }) }),
261
+ /* @__PURE__ */ jsx(AccordionDetails, { children: /* @__PURE__ */ jsx(
262
+ Box,
263
+ {
264
+ component: "pre",
265
+ sx: {
266
+ m: 0,
267
+ maxHeight: 240,
268
+ overflow: "auto",
269
+ whiteSpace: "pre-wrap",
270
+ overflowWrap: "anywhere",
271
+ fontSize: 12
272
+ },
273
+ children: parsed.data.metadata.raw
274
+ }
275
+ ) })
276
+ ]
277
+ }
278
+ ),
279
+ contents && parsed.data.headings.length > 0 && /* @__PURE__ */ jsxs("nav", { className: "prism-research__contents", "aria-label": labels.contents, children: [
280
+ /* @__PURE__ */ jsx("p", { children: labels.contents }),
281
+ /* @__PURE__ */ jsx("ol", { children: parsed.data.headings.map((h) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx("a", { href: `#${h.id}`, children: h.title }) }, h.id)) })
282
+ ] }),
283
+ /* @__PURE__ */ jsx(TipTapRenderer, { content: parsed.data.doc, nodeRenderers: nodes, inheritRegisteredNodes: false, sx }),
284
+ parsed.data.diagnostics.length > 0 && /* @__PURE__ */ jsxs("details", { className: "prism-research__diagnostics", children: [
285
+ /* @__PURE__ */ jsxs("summary", { children: [
286
+ labels.diagnostics,
287
+ " \xB7 ",
288
+ parsed.data.diagnostics.length
289
+ ] }),
290
+ /* @__PURE__ */ jsx("ul", { children: parsed.data.diagnostics.map((d, i) => /* @__PURE__ */ jsxs("li", { children: [
291
+ d.line,
292
+ ": ",
293
+ /* @__PURE__ */ jsx("code", { children: d.code })
294
+ ] }, i)) })
295
+ ] })
296
+ ]
297
+ }
298
+ );
299
+ }
300
+
301
+ export { ResearchDocument, defaultResearchLabels, defineResearchWidget };
302
+ //# sourceMappingURL=chunk-Q6JDNFSG.js.map
303
+ //# sourceMappingURL=chunk-Q6JDNFSG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/research/diagram-image.ts","../src/components/research/diagram.tsx","../src/components/research/document.tsx"],"names":["jsx","jsxs","useId"],"mappings":"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","file":"chunk-Q6JDNFSG.js","sourcesContent":["import type { DOMPurify } from 'dompurify';\n\n/** The returned SVG must be consumed only by <img>, never injected into HTML.\n * SVG image isolation preserves Mermaid's layout CSS without granting it DOM\n * capabilities or allowing its styles to affect the surrounding document.\n * https://developer.mozilla.org/en-US/docs/Web/SVG/Guides/SVG_as_an_image\n */\nexport function diagramImage(source: string, purify: DOMPurify) {\n const fragment = purify.sanitize(source, {\n USE_PROFILES: { svg: true, svgFilters: true },\n ADD_TAGS: ['style'],\n FORBID_TAGS: ['foreignObject', 'image', 'a', 'script', 'animate', 'animateMotion', 'animateTransform', 'set'],\n FORBID_ATTR: ['href', 'xlink:href'],\n RETURN_DOM_FRAGMENT: true,\n });\n const svg = fragment.querySelector('svg');\n if (!svg || !svg.getAttribute('viewBox')) throw new Error('invalid_diagram_svg');\n const title = svg.querySelector('title')?.textContent?.trim();\n const labels = [...svg.querySelectorAll('text')].map((node) => node.textContent?.trim()).filter(Boolean);\n const description = title || labels.join(' · ') || 'Diagram';\n return {\n src: 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(new XMLSerializer().serializeToString(svg)),\n description: description.slice(0, 2000),\n };\n}\n","'use client';\n\nimport { useEffect, useId, useRef, useState } from 'react';\nimport { useTheme } from '@mui/material/styles';\nimport type { ResearchLabels } from './document.js';\nimport { researchLimits } from './parse.js';\nimport { diagramImage } from './diagram-image.js';\n// Mermaid has mutable process-wide configuration. Serialise its configure/render\n// pair; document-local widgets and source code never get a configuration hook.\nlet pending: Promise<unknown> = Promise.resolve();\nexport function diagramSourceAllowed(source: string, engine: string) {\n return (\n engine === 'mermaid' && source.length <= researchLimits.block && !/^\\s*---/m.test(source) && !/%%\\s*\\{/.test(source)\n );\n}\nexport function ResearchDiagram({\n source,\n engine,\n labels,\n}: {\n source: string;\n engine: string;\n labels: ResearchLabels;\n}) {\n const id = `diagram-${useId().replace(/[^\\w-]/g, '')}`;\n const container = useRef<HTMLDivElement>(null);\n const [picture, setPicture] = useState<ReturnType<typeof diagramImage>>();\n const [state, setState] = useState<'loading' | 'ready' | 'error'>('loading');\n const theme = useTheme(),\n mode = theme.palette.mode;\n useEffect(() => {\n let cancelled = false;\n setState('loading');\n setPicture(undefined);\n const target = container.current;\n const run = async () => {\n if (cancelled || !target) return;\n if (!diagramSourceAllowed(source, engine)) {\n setState('error');\n return;\n }\n let scratch: HTMLDivElement | undefined;\n try {\n const [{ default: mermaid }, { default: purify }] = await Promise.all([import('mermaid'), import('dompurify')]);\n if (cancelled) return;\n scratch = document.createElement('div');\n scratch.style.cssText = 'position:absolute;visibility:hidden;pointer-events:none;width:1000px';\n target.append(scratch);\n mermaid.initialize({\n startOnLoad: false,\n securityLevel: 'strict',\n htmlLabels: false,\n maxTextSize: researchLimits.block,\n maxEdges: 256,\n suppressErrorRendering: true,\n look: 'classic',\n theme: 'base',\n fontFamily: 'system-ui, sans-serif',\n themeVariables: {\n darkMode: mode === 'dark',\n primaryColor: theme.palette.background.paper,\n primaryTextColor: theme.palette.text.primary,\n primaryBorderColor: theme.palette.text.secondary,\n secondaryColor: theme.palette.background.default,\n tertiaryColor: theme.palette.background.paper,\n lineColor: theme.palette.text.secondary,\n textColor: theme.palette.text.primary,\n fontFamily: 'system-ui, sans-serif',\n fontSize: '16px',\n },\n flowchart: { htmlLabels: false },\n secure: [\n 'securityLevel',\n 'startOnLoad',\n 'maxTextSize',\n 'maxEdges',\n 'htmlLabels',\n 'theme',\n 'look',\n 'fontFamily',\n 'themeCSS',\n 'themeVariables',\n ],\n });\n const result = await mermaid.render(id, source, scratch);\n const renderedPicture = diagramImage(result.svg, purify);\n if (!cancelled) {\n setPicture(renderedPicture);\n setState('ready');\n }\n } catch {\n if (!cancelled) setState('error');\n } finally {\n scratch?.remove();\n }\n };\n pending = pending.catch(() => undefined).then(run);\n return () => {\n cancelled = true;\n target?.replaceChildren();\n };\n }, [source, engine, id, theme, mode]);\n return (\n <figure className=\"prism-research__diagram\">\n {state !== 'ready' && <p role=\"status\">{state === 'error' ? labels.invalid : labels.loading}</p>}\n <div ref={container} aria-hidden=\"true\" />\n {picture && (\n <img\n className=\"prism-research__diagram-image\"\n src={picture.src}\n alt={picture.description}\n onError={() => setState('error')}\n />\n )}\n <details open={state === 'error'}>\n <summary>\n {labels.source} · {engine}\n </summary>\n <pre>{source}</pre>\n </details>\n </figure>\n );\n}\n","'use client';\n\nimport { ChevronDownIcon } from '../../icons/controls.js';\nimport { Component, useId, useMemo, type ReactNode, type ComponentType } from 'react';\nimport katex from 'katex';\nimport { Accordion, AccordionSummary, AccordionDetails, Box, Typography } from '@mui/material';\nimport type { SxProps, Theme } from '@mui/material/styles';\nimport { TipTapRenderer, type TipTapNode } from '../tiptap-renderer/index.js';\nimport { parseResearchMarkdown, researchLimits } from './parse.js';\nimport { ResearchDiagram } from './diagram.js';\nimport './research.css';\n\nexport interface ResearchWidget {\n version: number;\n render: (props: unknown) => ReactNode;\n}\nexport type ResearchWidgets = Readonly<Record<string, ResearchWidget>>;\nexport function defineResearchWidget<P>(\n version: number,\n parse: (input: unknown) => P,\n View: ComponentType<P & object>\n): ResearchWidget {\n return {\n version,\n render(input) {\n const props = parse(input);\n return <View {...(props as P & object)} />;\n },\n };\n}\nexport interface ResearchLabels {\n metadata: string;\n contents: string;\n source: string;\n unavailable: string;\n invalid: string;\n loading: string;\n diagnostics: string;\n}\nexport const defaultResearchLabels: ResearchLabels = {\n metadata: 'Source metadata',\n contents: 'On this page',\n source: 'Source',\n unavailable: 'This block is not available in this document.',\n invalid: 'This block could not be rendered. Its source is preserved.',\n loading: 'Rendering diagram…',\n diagnostics: 'Document diagnostics',\n};\nexport interface ResearchDocumentProps {\n /** Enables inert Docusaurus heading IDs and namespaced fragment links. */\n sourceProfile?: 'research' | 'docusaurus';\n source: string;\n /** Stable namespace for deep links. A revision identifier belongs to the host's document metadata. */\n documentId?: string;\n widgets?: ResearchWidgets;\n labels?: Partial<ResearchLabels>;\n contents?: boolean;\n className?: string;\n sx?: SxProps<Theme>;\n}\nclass BlockBoundary extends Component<{ children: ReactNode; fallback: ReactNode }, { failed: boolean }> {\n state = { failed: false };\n static getDerivedStateFromError() {\n return { failed: true };\n }\n render() {\n return this.state.failed ? this.props.fallback : this.props.children;\n }\n}\nfunction Formula({ node, labels }: { node: TipTapNode; labels: ResearchLabels }) {\n const tex = String(node.attrs?.tex ?? '');\n try {\n if (tex.length > researchLimits.block) throw new Error('formula_limit');\n const html = katex.renderToString(tex, {\n displayMode: node.type === 'mathBlock',\n trust: false,\n strict: 'error',\n throwOnError: true,\n maxExpand: 1000,\n maxSize: 20,\n output: 'htmlAndMathml',\n });\n return (\n <span\n className={node.type === 'mathBlock' ? 'prism-research__formula-block' : undefined}\n dangerouslySetInnerHTML={{ __html: html }}\n />\n );\n } catch {\n return (\n <code className=\"prism-research__invalid-math\" title={labels.invalid}>\n {tex}\n </code>\n );\n }\n}\nfunction Widget({ node, widgets, labels }: { node: TipTapNode; widgets: ResearchWidgets; labels: ResearchLabels }) {\n const d = node.attrs?.descriptor as { type?: unknown; version?: unknown; props?: unknown } | undefined;\n if (!d || typeof d.type !== 'string' || !Object.hasOwn(widgets, d.type) || widgets[d.type]?.version !== d.version)\n return (\n <details className=\"prism-research__failure\">\n <summary>{labels.unavailable}</summary>\n <pre>{JSON.stringify(d)}</pre>\n </details>\n );\n try {\n return widgets[d.type]!.render(d.props);\n } catch {\n return (\n <details className=\"prism-research__failure\">\n <summary>{labels.invalid}</summary>\n <pre>{JSON.stringify(d)}</pre>\n </details>\n );\n }\n}\nconst emptyWidgets: ResearchWidgets = Object.freeze({});\nexport function ResearchDocument({\n source,\n sourceProfile = 'research',\n documentId,\n widgets = emptyWidgets,\n labels: overrides,\n contents = false,\n className,\n sx,\n}: ResearchDocumentProps) {\n const uid = useId();\n const prefix = documentId ?? `research-${uid.replace(/[^\\w-]/g, '')}`;\n const labels = useMemo(() => ({ ...defaultResearchLabels, ...overrides }), [overrides]);\n const parsed = useMemo(() => {\n try {\n return { data: parseResearchMarkdown(source, prefix, sourceProfile) };\n } catch {\n return { error: true };\n }\n }, [source, prefix, sourceProfile]);\n const nodes = useMemo(() => {\n const failure = (raw: string) => (\n <details className=\"prism-research__failure\" open>\n <summary>{labels.invalid}</summary>\n <pre>{raw}</pre>\n </details>\n );\n const bounded = (render: (node: TipTapNode) => ReactNode) => (props: { node: TipTapNode }) => {\n const raw = String(\n props.node.attrs?.tex ?? props.node.attrs?.code ?? JSON.stringify(props.node.attrs?.descriptor ?? {})\n );\n return (\n <BlockBoundary key={raw} fallback={failure(raw)}>\n {render(props.node)}\n </BlockBoundary>\n );\n };\n return {\n mathInline: ({ node }: { node: TipTapNode }) => <Formula node={node} labels={labels} />,\n mathBlock: ({ node }: { node: TipTapNode }) => <Formula node={node} labels={labels} />,\n diagram: bounded((n) => (\n <ResearchDiagram source={String(n.attrs?.code ?? '')} engine={String(n.attrs?.engine ?? '')} labels={labels} />\n )),\n researchWidget: bounded((n) => <Widget node={n} widgets={widgets} labels={labels} />),\n };\n }, [widgets, labels]);\n if (!parsed.data) return <p role=\"alert\">{labels.invalid}</p>;\n return (\n <Box\n className={`prism-research ${className ?? ''}`}\n sx={(theme) => ({ '--prism-research-border': theme.palette.divider })}\n >\n {parsed.data.metadata && (\n <Accordion\n disableGutters\n elevation={0}\n sx={{ mb: 2, border: 1, borderColor: 'divider', '&:before': { display: 'none' } }}\n >\n <AccordionSummary expandIcon={<ChevronDownIcon fontSize=\"small\" />}>\n <Typography variant=\"caption\" color=\"text.secondary\">\n {labels.metadata} · YAML\n </Typography>\n </AccordionSummary>\n <AccordionDetails>\n <Box\n component=\"pre\"\n sx={{\n m: 0,\n maxHeight: 240,\n overflow: 'auto',\n whiteSpace: 'pre-wrap',\n overflowWrap: 'anywhere',\n fontSize: 12,\n }}\n >\n {parsed.data.metadata.raw}\n </Box>\n </AccordionDetails>\n </Accordion>\n )}\n {contents && parsed.data.headings.length > 0 && (\n <nav className=\"prism-research__contents\" aria-label={labels.contents}>\n <p>{labels.contents}</p>\n <ol>\n {parsed.data.headings.map((h) => (\n <li key={h.id}>\n <a href={`#${h.id}`}>{h.title}</a>\n </li>\n ))}\n </ol>\n </nav>\n )}\n <TipTapRenderer content={parsed.data.doc} nodeRenderers={nodes} inheritRegisteredNodes={false} sx={sx} />\n {parsed.data.diagnostics.length > 0 && (\n <details className=\"prism-research__diagnostics\">\n <summary>\n {labels.diagnostics} · {parsed.data.diagnostics.length}\n </summary>\n <ul>\n {parsed.data.diagnostics.map((d, i) => (\n <li key={i}>\n {d.line}: <code>{d.code}</code>\n </li>\n ))}\n </ul>\n </details>\n )}\n </Box>\n );\n}\n"]}
@@ -0,0 +1,115 @@
1
+ import { useState, useCallback } from 'react';
2
+ import MuiStepper from '@mui/material/Stepper';
3
+ import Step from '@mui/material/Step';
4
+ import StepLabel from '@mui/material/StepLabel';
5
+ import StepContent from '@mui/material/StepContent';
6
+ import Box from '@mui/material/Box';
7
+ import Button from '@mui/material/Button';
8
+ import { jsx, jsxs } from 'react/jsx-runtime';
9
+
10
+ // src/components/stepper/stepper.tsx
11
+ function Stepper({
12
+ steps,
13
+ activeStep = 0,
14
+ onStepChange,
15
+ orientation = "horizontal",
16
+ nonLinear = false,
17
+ alternativeLabel = false,
18
+ showContent = false,
19
+ ...other
20
+ }) {
21
+ const handleStepClick = (index) => {
22
+ if (nonLinear && onStepChange) {
23
+ onStepChange(index);
24
+ }
25
+ };
26
+ return /* @__PURE__ */ jsx(
27
+ MuiStepper,
28
+ {
29
+ activeStep,
30
+ orientation,
31
+ nonLinear,
32
+ alternativeLabel,
33
+ ...other,
34
+ children: steps.map((step, index) => /* @__PURE__ */ jsxs(Step, { completed: step.completed ?? index < activeStep, children: [
35
+ /* @__PURE__ */ jsx(
36
+ StepLabel,
37
+ {
38
+ optional: step.optional ? /* @__PURE__ */ jsx("span", { style: { fontSize: "0.75rem", color: "text.secondary" }, children: "Optional" }) : step.description ? /* @__PURE__ */ jsx("span", { style: { fontSize: "0.75rem", color: "text.secondary" }, children: step.description }) : void 0,
39
+ error: step.error,
40
+ icon: step.icon,
41
+ sx: {
42
+ cursor: nonLinear ? "pointer" : "default"
43
+ },
44
+ onClick: () => handleStepClick(index),
45
+ children: step.label
46
+ }
47
+ ),
48
+ orientation === "vertical" && showContent && step.content && /* @__PURE__ */ jsx(StepContent, { children: step.content })
49
+ ] }, index))
50
+ }
51
+ );
52
+ }
53
+ function useStepper({
54
+ initialStep = 0,
55
+ totalSteps,
56
+ onStepChange,
57
+ onComplete
58
+ }) {
59
+ const [activeStep, setActiveStep] = useState(initialStep);
60
+ const [isCompleted, setIsCompleted] = useState(false);
61
+ const goToStep = useCallback(
62
+ (step) => {
63
+ if (step >= 0 && step < totalSteps) {
64
+ setActiveStep(step);
65
+ onStepChange?.(step);
66
+ }
67
+ },
68
+ [totalSteps, onStepChange]
69
+ );
70
+ const nextStep = useCallback(() => {
71
+ if (activeStep === totalSteps - 1) {
72
+ setIsCompleted(true);
73
+ onComplete?.();
74
+ } else {
75
+ goToStep(activeStep + 1);
76
+ }
77
+ }, [activeStep, totalSteps, goToStep, onComplete]);
78
+ const prevStep = useCallback(() => {
79
+ goToStep(activeStep - 1);
80
+ }, [activeStep, goToStep]);
81
+ const reset = useCallback(() => {
82
+ setActiveStep(0);
83
+ setIsCompleted(false);
84
+ onStepChange?.(0);
85
+ }, [onStepChange]);
86
+ return {
87
+ activeStep,
88
+ nextStep,
89
+ prevStep,
90
+ goToStep,
91
+ reset,
92
+ isFirstStep: activeStep === 0,
93
+ isLastStep: activeStep === totalSteps - 1,
94
+ isCompleted
95
+ };
96
+ }
97
+ function StepperActions({
98
+ stepper,
99
+ backLabel = "Back",
100
+ nextLabel = "Next",
101
+ finishLabel = "Finish",
102
+ disableNext = false,
103
+ actions
104
+ }) {
105
+ return /* @__PURE__ */ jsxs(Box, { sx: { display: "flex", gap: 2, mt: 3 }, children: [
106
+ /* @__PURE__ */ jsx(Button, { variant: "outlined", onClick: stepper.prevStep, disabled: stepper.isFirstStep, children: backLabel }),
107
+ /* @__PURE__ */ jsx(Box, { sx: { flex: 1 } }),
108
+ actions,
109
+ /* @__PURE__ */ jsx(Button, { variant: "contained", onClick: stepper.nextStep, disabled: disableNext, children: stepper.isLastStep ? finishLabel : nextLabel })
110
+ ] });
111
+ }
112
+
113
+ export { Stepper, StepperActions, useStepper };
114
+ //# sourceMappingURL=chunk-RPOGINR5.js.map
115
+ //# sourceMappingURL=chunk-RPOGINR5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/stepper/stepper.tsx"],"names":[],"mappings":";;;;;;;;;;AA2EO,SAAS,OAAA,CAAQ;AAAA,EACtB,KAAA;AAAA,EACA,UAAA,GAAa,CAAA;AAAA,EACb,YAAA;AAAA,EACA,WAAA,GAAc,YAAA;AAAA,EACd,SAAA,GAAY,KAAA;AAAA,EACZ,gBAAA,GAAmB,KAAA;AAAA,EACnB,WAAA,GAAc,KAAA;AAAA,EACd,GAAG;AACL,CAAA,EAA4B;AAC1B,EAAA,MAAM,eAAA,GAAkB,CAAC,KAAA,KAAkB;AACzC,IAAA,IAAI,aAAa,YAAA,EAAc;AAC7B,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB;AAAA,EACF,CAAA;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,UAAA;AAAA,MACA,WAAA;AAAA,MACA,SAAA;AAAA,MACA,gBAAA;AAAA,MACC,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,qBAChB,IAAA,CAAC,IAAA,EAAA,EAAiB,SAAA,EAAW,IAAA,CAAK,SAAA,IAAa,KAAA,GAAQ,UAAA,EACrD,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YACC,QAAA,EACE,IAAA,CAAK,QAAA,mBACH,GAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,SAAA,EAAW,KAAA,EAAO,gBAAA,EAAiB,EAAG,QAAA,EAAA,UAAA,EAAQ,CAAA,GACrE,IAAA,CAAK,WAAA,mBACP,GAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,SAAA,EAAW,KAAA,EAAO,gBAAA,EAAiB,EAAI,QAAA,EAAA,IAAA,CAAK,WAAA,EAAY,CAAA,GAC/E,MAAA;AAAA,YAEN,OAAO,IAAA,CAAK,KAAA;AAAA,YACZ,MAAM,IAAA,CAAK,IAAA;AAAA,YACX,EAAA,EAAI;AAAA,cACF,MAAA,EAAQ,YAAY,SAAA,GAAY;AAAA,aAClC;AAAA,YACA,OAAA,EAAS,MAAM,eAAA,CAAgB,KAAK,CAAA;AAAA,YAEnC,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA,SACR;AAAA,QACC,WAAA,KAAgB,cAAc,WAAA,IAAe,IAAA,CAAK,2BAAW,GAAA,CAAC,WAAA,EAAA,EAAa,eAAK,OAAA,EAAQ;AAAA,OAAA,EAAA,EAlBhF,KAmBX,CACD;AAAA;AAAA,GACH;AAEJ;AAyDO,SAAS,UAAA,CAAW;AAAA,EACzB,WAAA,GAAc,CAAA;AAAA,EACd,UAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,EAAwC;AACtC,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,WAAW,CAAA;AACxD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAS,KAAK,CAAA;AAEpD,EAAA,MAAM,QAAA,GAAW,WAAA;AAAA,IACf,CAAC,IAAA,KAAiB;AAChB,MAAA,IAAI,IAAA,IAAQ,CAAA,IAAK,IAAA,GAAO,UAAA,EAAY;AAClC,QAAA,aAAA,CAAc,IAAI,CAAA;AAClB,QAAA,YAAA,GAAe,IAAI,CAAA;AAAA,MACrB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,YAAY,YAAY;AAAA,GAC3B;AAEA,EAAA,MAAM,QAAA,GAAW,YAAY,MAAM;AACjC,IAAA,IAAI,UAAA,KAAe,aAAa,CAAA,EAAG;AACjC,MAAA,cAAA,CAAe,IAAI,CAAA;AACnB,MAAA,UAAA,IAAa;AAAA,IACf,CAAA,MAAO;AACL,MAAA,QAAA,CAAS,aAAa,CAAC,CAAA;AAAA,IACzB;AAAA,EACF,GAAG,CAAC,UAAA,EAAY,UAAA,EAAY,QAAA,EAAU,UAAU,CAAC,CAAA;AAEjD,EAAA,MAAM,QAAA,GAAW,YAAY,MAAM;AACjC,IAAA,QAAA,CAAS,aAAa,CAAC,CAAA;AAAA,EACzB,CAAA,EAAG,CAAC,UAAA,EAAY,QAAQ,CAAC,CAAA;AAEzB,EAAA,MAAM,KAAA,GAAQ,YAAY,MAAM;AAC9B,IAAA,aAAA,CAAc,CAAC,CAAA;AACf,IAAA,cAAA,CAAe,KAAK,CAAA;AACpB,IAAA,YAAA,GAAe,CAAC,CAAA;AAAA,EAClB,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAEjB,EAAA,OAAO;AAAA,IACL,UAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA;AAAA,IACA,aAAa,UAAA,KAAe,CAAA;AAAA,IAC5B,UAAA,EAAY,eAAe,UAAA,GAAa,CAAA;AAAA,IACxC;AAAA,GACF;AACF;AA4BO,SAAS,cAAA,CAAe;AAAA,EAC7B,OAAA;AAAA,EACA,SAAA,GAAY,MAAA;AAAA,EACZ,SAAA,GAAY,MAAA;AAAA,EACZ,WAAA,GAAc,QAAA;AAAA,EACd,WAAA,GAAc,KAAA;AAAA,EACd;AACF,CAAA,EAAmC;AACjC,EAAA,uBACE,IAAA,CAAC,GAAA,EAAA,EAAI,EAAA,EAAI,EAAE,OAAA,EAAS,QAAQ,GAAA,EAAK,CAAA,EAAG,EAAA,EAAI,CAAA,EAAE,EACxC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,MAAA,EAAA,EAAO,SAAQ,UAAA,EAAW,OAAA,EAAS,QAAQ,QAAA,EAAU,QAAA,EAAU,OAAA,CAAQ,WAAA,EACrE,QAAA,EAAA,SAAA,EACH,CAAA;AAAA,wBACC,GAAA,EAAA,EAAI,EAAA,EAAI,EAAE,IAAA,EAAM,GAAE,EAAG,CAAA;AAAA,IACrB,OAAA;AAAA,oBACD,GAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,OAAA,EAAS,OAAA,CAAQ,QAAA,EAAU,QAAA,EAAU,WAAA,EAC9D,QAAA,EAAA,OAAA,CAAQ,UAAA,GAAa,WAAA,GAAc,SAAA,EACtC;AAAA,GAAA,EACF,CAAA;AAEJ","file":"chunk-RPOGINR5.js","sourcesContent":["'use client';\n\n/**\n * Stepper Component\n *\n * Multi-step wizard/stepper with custom styling.\n *\n * @module components/stepper\n */\n\nimport { useState, useCallback, type ReactNode } from 'react';\nimport MuiStepper from '@mui/material/Stepper';\nimport Step from '@mui/material/Step';\nimport StepLabel from '@mui/material/StepLabel';\nimport StepContent from '@mui/material/StepContent';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport type { StepperProps as MuiStepperProps } from '@mui/material/Stepper';\n\n/**\n * Step definition.\n */\nexport interface StepItem {\n /** Step label */\n label: string;\n /** Step description */\n description?: string;\n /** Step content */\n content?: ReactNode;\n /** Optional step (can be skipped) */\n optional?: boolean;\n /** Step icon */\n icon?: ReactNode;\n /** Step is completed */\n completed?: boolean;\n /** Step has error */\n error?: boolean;\n}\n\n/**\n * Props for Stepper component.\n */\nexport interface StepperProps extends Omit<MuiStepperProps, 'children'> {\n /** Steps to display */\n steps: StepItem[];\n /** Active step index */\n activeStep?: number;\n /** On step change */\n onStepChange?: (step: number) => void;\n /** Stepper orientation */\n orientation?: 'horizontal' | 'vertical';\n /** Allow non-linear navigation */\n nonLinear?: boolean;\n /** Alternative label placement (horizontal only) */\n alternativeLabel?: boolean;\n /** Show step content (vertical only) */\n showContent?: boolean;\n}\n\n/**\n * Stepper - Multi-step wizard/stepper.\n *\n * @example\n * ```tsx\n * <Stepper\n * steps={[\n * { label: 'Account', description: 'Create account' },\n * { label: 'Profile', description: 'Complete profile', optional: true },\n * { label: 'Verify', description: 'Verify email' },\n * ]}\n * activeStep={1}\n * onStepChange={(step) => setActiveStep(step)}\n * />\n * ```\n */\nexport function Stepper({\n steps,\n activeStep = 0,\n onStepChange,\n orientation = 'horizontal',\n nonLinear = false,\n alternativeLabel = false,\n showContent = false,\n ...other\n}: StepperProps): ReactNode {\n const handleStepClick = (index: number) => {\n if (nonLinear && onStepChange) {\n onStepChange(index);\n }\n };\n\n return (\n <MuiStepper\n activeStep={activeStep}\n orientation={orientation}\n nonLinear={nonLinear}\n alternativeLabel={alternativeLabel}\n {...other}\n >\n {steps.map((step, index) => (\n <Step key={index} completed={step.completed ?? index < activeStep}>\n <StepLabel\n optional={\n step.optional ? (\n <span style={{ fontSize: '0.75rem', color: 'text.secondary' }}>Optional</span>\n ) : step.description ? (\n <span style={{ fontSize: '0.75rem', color: 'text.secondary' }}>{step.description}</span>\n ) : undefined\n }\n error={step.error}\n icon={step.icon}\n sx={{\n cursor: nonLinear ? 'pointer' : 'default',\n }}\n onClick={() => handleStepClick(index)}\n >\n {step.label}\n </StepLabel>\n {orientation === 'vertical' && showContent && step.content && <StepContent>{step.content}</StepContent>}\n </Step>\n ))}\n </MuiStepper>\n );\n}\n\n/**\n * Return type for useStepper hook.\n */\nexport interface UseStepperReturn {\n /** Current active step */\n activeStep: number;\n /** Go to next step */\n nextStep: () => void;\n /** Go to previous step */\n prevStep: () => void;\n /** Go to specific step */\n goToStep: (step: number) => void;\n /** Reset to first step */\n reset: () => void;\n /** Is first step */\n isFirstStep: boolean;\n /** Is last step */\n isLastStep: boolean;\n /** Step is completed */\n isCompleted: boolean;\n}\n\n/**\n * Options for useStepper hook.\n */\nexport interface UseStepperOptions {\n /** Initial step */\n initialStep?: number;\n /** Total steps */\n totalSteps: number;\n /** On step change callback */\n onStepChange?: (step: number) => void;\n /** On complete callback */\n onComplete?: () => void;\n}\n\n/**\n * useStepper - Hook for managing stepper state.\n *\n * @example\n * ```tsx\n * const stepper = useStepper({\n * totalSteps: 3,\n * onComplete: () => console.log('Done!'),\n * });\n *\n * <Stepper steps={steps} activeStep={stepper.activeStep} />\n * <Button onClick={stepper.prevStep} disabled={stepper.isFirstStep}>\n * Back\n * </Button>\n * <Button onClick={stepper.nextStep}>\n * {stepper.isLastStep ? 'Finish' : 'Next'}\n * </Button>\n * ```\n */\nexport function useStepper({\n initialStep = 0,\n totalSteps,\n onStepChange,\n onComplete,\n}: UseStepperOptions): UseStepperReturn {\n const [activeStep, setActiveStep] = useState(initialStep);\n const [isCompleted, setIsCompleted] = useState(false);\n\n const goToStep = useCallback(\n (step: number) => {\n if (step >= 0 && step < totalSteps) {\n setActiveStep(step);\n onStepChange?.(step);\n }\n },\n [totalSteps, onStepChange]\n );\n\n const nextStep = useCallback(() => {\n if (activeStep === totalSteps - 1) {\n setIsCompleted(true);\n onComplete?.();\n } else {\n goToStep(activeStep + 1);\n }\n }, [activeStep, totalSteps, goToStep, onComplete]);\n\n const prevStep = useCallback(() => {\n goToStep(activeStep - 1);\n }, [activeStep, goToStep]);\n\n const reset = useCallback(() => {\n setActiveStep(0);\n setIsCompleted(false);\n onStepChange?.(0);\n }, [onStepChange]);\n\n return {\n activeStep,\n nextStep,\n prevStep,\n goToStep,\n reset,\n isFirstStep: activeStep === 0,\n isLastStep: activeStep === totalSteps - 1,\n isCompleted,\n };\n}\n\n/**\n * Props for StepperActions component.\n */\nexport interface StepperActionsProps {\n /** Stepper hook return */\n stepper: UseStepperReturn;\n /** Back button label */\n backLabel?: string;\n /** Next button label */\n nextLabel?: string;\n /** Finish button label */\n finishLabel?: string;\n /** Disable next button */\n disableNext?: boolean;\n /** Custom actions */\n actions?: ReactNode;\n}\n\n/**\n * StepperActions - Common action buttons for stepper.\n *\n * @example\n * ```tsx\n * <StepperActions stepper={stepper} />\n * ```\n */\nexport function StepperActions({\n stepper,\n backLabel = 'Back',\n nextLabel = 'Next',\n finishLabel = 'Finish',\n disableNext = false,\n actions,\n}: StepperActionsProps): ReactNode {\n return (\n <Box sx={{ display: 'flex', gap: 2, mt: 3 }}>\n <Button variant=\"outlined\" onClick={stepper.prevStep} disabled={stepper.isFirstStep}>\n {backLabel}\n </Button>\n <Box sx={{ flex: 1 }} />\n {actions}\n <Button variant=\"contained\" onClick={stepper.nextStep} disabled={disableNext}>\n {stepper.isLastStep ? finishLabel : nextLabel}\n </Button>\n </Box>\n );\n}\n"]}