@omnitron-dev/prism 0.3.1 → 0.3.3

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 (305) hide show
  1. package/README.md +68 -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 -255
  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-LOY2NPCO.js → chunk-2E67PQ4T.js} +3 -3
  24. package/dist/{chunk-LOY2NPCO.js.map → chunk-2E67PQ4T.js.map} +1 -1
  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-52PQL67Q.js → chunk-3VSM7NZG.js} +18 -15
  34. package/dist/chunk-3VSM7NZG.js.map +1 -0
  35. package/dist/{chunk-GUGTDURV.js → chunk-4B2LTPK2.js} +2 -2
  36. package/dist/{chunk-GUGTDURV.js.map → chunk-4B2LTPK2.js.map} +1 -1
  37. package/dist/chunk-4HUGZJKU.js +108 -0
  38. package/dist/chunk-4HUGZJKU.js.map +1 -0
  39. package/dist/{chunk-PXXPLHIY.js → chunk-4Q5L7LDG.js} +3 -3
  40. package/dist/{chunk-PXXPLHIY.js.map → chunk-4Q5L7LDG.js.map} +1 -1
  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-YHE7HXSG.js → chunk-7ATBURW2.js} +3 -3
  46. package/dist/{chunk-YHE7HXSG.js.map → chunk-7ATBURW2.js.map} +1 -1
  47. package/dist/{chunk-7G5D5PTC.js → chunk-AATAOOSF.js} +4 -4
  48. package/dist/{chunk-7G5D5PTC.js.map → chunk-AATAOOSF.js.map} +1 -1
  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-LSPFFEJT.js → chunk-D4GFAJAZ.js} +298 -3900
  54. package/dist/chunk-D4GFAJAZ.js.map +1 -0
  55. package/dist/{chunk-BJE2AKD4.js → chunk-D5J3KW6Q.js} +3 -2
  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-472SOF76.js → chunk-DHTYHUYI.js} +85 -107
  60. package/dist/chunk-DHTYHUYI.js.map +1 -0
  61. package/dist/{chunk-FF5RF32O.js → chunk-E7WM2RXA.js} +3 -2
  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-HOXFSQUV.js → chunk-IRYU3NTG.js} +2 -2
  72. package/dist/{chunk-HOXFSQUV.js.map → chunk-IRYU3NTG.js.map} +1 -1
  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-PFT2BNYO.js → chunk-KPY7TA4D.js} +5 -5
  78. package/dist/{chunk-PFT2BNYO.js.map → chunk-KPY7TA4D.js.map} +1 -1
  79. package/dist/{chunk-GMIE6III.js → chunk-LFWKGNCX.js} +50 -623
  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-JSQTYDPG.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-4Z5DE5GK.js → chunk-NSNM53WI.js} +133 -115
  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-SU3LVQ7N.js → chunk-Q6JDNFSG.js} +11 -226
  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-KQ67XB6T.js → chunk-RSWVYIXK.js} +151 -114
  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-AYYFMTMI.js.map → chunk-TJ7DHXUX.js.map} +1 -1
  107. package/dist/{chunk-75FQ5IW3.js → chunk-TZHWYT34.js} +3 -3
  108. package/dist/{chunk-75FQ5IW3.js.map → chunk-TZHWYT34.js.map} +1 -1
  109. package/dist/chunk-TZWHELY4.js +45 -0
  110. package/dist/chunk-TZWHELY4.js.map +1 -0
  111. package/dist/{chunk-OKTLA23Q.js → chunk-UEINJFLS.js} +6 -6
  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-PGHEP4JD.js → chunk-VQVVHMPG.js} +3 -3
  118. package/dist/{chunk-PGHEP4JD.js.map → chunk-VQVVHMPG.js.map} +1 -1
  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 +59 -421
  136. package/dist/cli/index.js.map +1 -1
  137. package/dist/components/admin-filters/admin-data-table.d.ts +7 -1
  138. package/dist/components/admin-filters/admin-data-table.d.ts.map +1 -1
  139. package/dist/components/admin-filters/filter-toolbar.d.ts.map +1 -1
  140. package/dist/components/admin-filters/index.js +8 -0
  141. package/dist/components/admin-filters/index.js.map +1 -0
  142. package/dist/components/alert/alert.d.ts.map +1 -1
  143. package/dist/components/alert/index.js +5 -0
  144. package/dist/components/alert/index.js.map +1 -0
  145. package/dist/components/animate/index.js +5 -0
  146. package/dist/components/animate/index.js.map +1 -0
  147. package/dist/components/breadcrumbs/breadcrumbs.d.ts.map +1 -1
  148. package/dist/components/breadcrumbs/index.js +4 -0
  149. package/dist/components/breadcrumbs/index.js.map +1 -0
  150. package/dist/components/card/index.js +4 -0
  151. package/dist/components/card/index.js.map +1 -0
  152. package/dist/components/chart/chart.d.ts.map +1 -1
  153. package/dist/components/chart/index.css +52 -0
  154. package/dist/components/chart/index.css.map +1 -0
  155. package/dist/components/chart/index.js +5 -0
  156. package/dist/components/chart/index.js.map +1 -0
  157. package/dist/components/chart/types.d.ts +3 -1
  158. package/dist/components/chart/types.d.ts.map +1 -1
  159. package/dist/components/chart/use-chart.d.ts.map +1 -1
  160. package/dist/components/command-palette/command-palette.d.ts +3 -1
  161. package/dist/components/command-palette/command-palette.d.ts.map +1 -1
  162. package/dist/components/command-palette/index.js +4 -0
  163. package/dist/components/command-palette/index.js.map +1 -0
  164. package/dist/components/confirm-dialog/index.js +4 -0
  165. package/dist/components/confirm-dialog/index.js.map +1 -0
  166. package/dist/components/date-input/date-input.d.ts +1 -0
  167. package/dist/components/date-input/date-input.d.ts.map +1 -1
  168. package/dist/components/date-input/index.d.ts +0 -1
  169. package/dist/components/date-input/index.d.ts.map +1 -1
  170. package/dist/components/doc-layout/index.js +5 -4
  171. package/dist/components/doc-layout/index.js.map +1 -1
  172. package/dist/components/editor/index.js +4 -3
  173. package/dist/components/editor/index.js.map +1 -1
  174. package/dist/components/emoji-picker/index.js +2 -1
  175. package/dist/components/emoji-picker/index.js.map +1 -1
  176. package/dist/components/empty-content/empty-content.d.ts.map +1 -1
  177. package/dist/components/empty-content/index.js +4 -0
  178. package/dist/components/empty-content/index.js.map +1 -0
  179. package/dist/components/error-boundary/index.js +6 -0
  180. package/dist/components/error-boundary/index.js.map +1 -0
  181. package/dist/components/index.css +13 -10
  182. package/dist/components/index.css.map +1 -1
  183. package/dist/components/index.d.ts +1 -0
  184. package/dist/components/index.d.ts.map +1 -1
  185. package/dist/components/index.js +47 -21
  186. package/dist/components/index.js.map +1 -1
  187. package/dist/components/knowledge-graph/edge-labels.d.ts.map +1 -1
  188. package/dist/components/knowledge-graph/index.js +18 -16
  189. package/dist/components/knowledge-graph/index.js.map +1 -1
  190. package/dist/components/label/index.js +5 -0
  191. package/dist/components/label/index.js.map +1 -0
  192. package/dist/components/label/label.d.ts.map +1 -1
  193. package/dist/components/loading-screen/index.js +4 -0
  194. package/dist/components/loading-screen/index.js.map +1 -0
  195. package/dist/components/map/MapPointPicker.d.ts.map +1 -1
  196. package/dist/components/map/index.js +2 -1
  197. package/dist/components/map/index.js.map +1 -1
  198. package/dist/components/navigation-progress/index.js +4 -0
  199. package/dist/components/navigation-progress/index.js.map +1 -0
  200. package/dist/components/page-content/index.js +4 -0
  201. package/dist/components/page-content/index.js.map +1 -0
  202. package/dist/components/popover/index.js +4 -0
  203. package/dist/components/popover/index.js.map +1 -0
  204. package/dist/components/research/diagram.d.ts.map +1 -1
  205. package/dist/components/research/index.js +6 -4
  206. package/dist/components/research/index.js.map +1 -1
  207. package/dist/components/research-editor/extensions.d.ts +1 -1
  208. package/dist/components/research-editor/index.js +11 -10
  209. package/dist/components/research-editor/index.js.map +1 -1
  210. package/dist/components/research-editor/math-navigation.d.ts +2 -2
  211. package/dist/components/research-editor/math-navigation.d.ts.map +1 -1
  212. package/dist/components/scroll-to-top/index.js +4 -0
  213. package/dist/components/scroll-to-top/index.js.map +1 -0
  214. package/dist/components/search-input/index.js +7 -0
  215. package/dist/components/search-input/index.js.map +1 -0
  216. package/dist/components/search-input/search-input.d.ts +3 -1
  217. package/dist/components/search-input/search-input.d.ts.map +1 -1
  218. package/dist/components/skeleton/index.js +4 -0
  219. package/dist/components/skeleton/index.js.map +1 -0
  220. package/dist/components/snackbar/index.js +6 -0
  221. package/dist/components/snackbar/index.js.map +1 -0
  222. package/dist/components/stepper/index.js +4 -0
  223. package/dist/components/stepper/index.js.map +1 -0
  224. package/dist/components/table/index.d.ts +1 -0
  225. package/dist/components/table/index.d.ts.map +1 -1
  226. package/dist/components/table/index.js +5 -0
  227. package/dist/components/table/index.js.map +1 -0
  228. package/dist/components/table/table-viewport.d.ts +13 -0
  229. package/dist/components/table/table-viewport.d.ts.map +1 -0
  230. package/dist/components/table/table.d.ts +3 -1
  231. package/dist/components/table/table.d.ts.map +1 -1
  232. package/dist/components/tabs/index.js +6 -0
  233. package/dist/components/tabs/index.js.map +1 -0
  234. package/dist/components/tabs/tabs.d.ts +12 -1
  235. package/dist/components/tabs/tabs.d.ts.map +1 -1
  236. package/dist/core/index.js +12 -10
  237. package/dist/core/index.js.map +1 -1
  238. package/dist/forms/index.js +2 -0
  239. package/dist/forms/index.js.map +1 -1
  240. package/dist/hooks/index.js +14 -12
  241. package/dist/hooks/index.js.map +1 -1
  242. package/dist/hooks/use-config-from-query.d.ts +2 -0
  243. package/dist/hooks/use-config-from-query.d.ts.map +1 -1
  244. package/dist/hooks/use-image-dimensions.d.ts.map +1 -1
  245. package/dist/hooks/use-keyboard-shortcut.d.ts.map +1 -1
  246. package/dist/hooks/use-scroll-position.d.ts.map +1 -1
  247. package/dist/hooks/use-window-size.d.ts.map +1 -1
  248. package/dist/icons/context.d.ts.map +1 -1
  249. package/dist/icons/index.js +3 -2
  250. package/dist/icons/index.js.map +1 -1
  251. package/dist/index.css +13 -10
  252. package/dist/index.css.map +1 -1
  253. package/dist/index.js +57 -31
  254. package/dist/index.js.map +1 -1
  255. package/dist/internal/research-parser.js +3 -0
  256. package/dist/internal/research-parser.js.map +1 -0
  257. package/dist/layouts/core/header-section.d.ts +1 -0
  258. package/dist/layouts/core/header-section.d.ts.map +1 -1
  259. package/dist/layouts/dashboard/layout.d.ts +3 -1
  260. package/dist/layouts/dashboard/layout.d.ts.map +1 -1
  261. package/dist/layouts/dashboard/sidenav.d.ts.map +1 -1
  262. package/dist/layouts/index.js +9 -8
  263. package/dist/layouts/index.js.map +1 -1
  264. package/dist/netron/index.js +2 -1
  265. package/dist/netron/index.js.map +1 -1
  266. package/dist/registry/index.js +1 -1
  267. package/dist/state/create-store.d.ts.map +1 -1
  268. package/dist/state/index.js +3 -2
  269. package/dist/state/index.js.map +1 -1
  270. package/dist/state/settings-version.d.ts.map +1 -1
  271. package/dist/theme/components/Chip.d.ts.map +1 -1
  272. package/dist/theme/components/Dialog.d.ts.map +1 -1
  273. package/dist/theme/components/TextField.d.ts.map +1 -1
  274. package/dist/theme/components/index.d.ts.map +1 -1
  275. package/dist/theme/components/theme-utils.d.ts +2 -2
  276. package/dist/theme/components/theme-utils.d.ts.map +1 -1
  277. package/dist/theme/index.js +8 -6
  278. package/dist/theme/index.js.map +1 -1
  279. package/dist/theme/palette/overrides.d.ts +1 -0
  280. package/dist/theme/palette/overrides.d.ts.map +1 -1
  281. package/dist/theme/semantic-surface.d.ts +8 -0
  282. package/dist/theme/semantic-surface.d.ts.map +1 -0
  283. package/dist/types/index.js +2 -2
  284. package/dist/ui/index.js +6 -5
  285. package/dist/ui/index.js.map +1 -1
  286. package/dist/utils/async-lock.d.ts.map +1 -1
  287. package/package.json +143 -37
  288. package/dist/chunk-472SOF76.js.map +0 -1
  289. package/dist/chunk-4Z5DE5GK.js.map +0 -1
  290. package/dist/chunk-52PQL67Q.js.map +0 -1
  291. package/dist/chunk-AD4W7HYC.js.map +0 -1
  292. package/dist/chunk-ADG4HZEP.js.map +0 -1
  293. package/dist/chunk-BJE2AKD4.js.map +0 -1
  294. package/dist/chunk-BRDWQVRT.js.map +0 -1
  295. package/dist/chunk-DRFNMZLG.js.map +0 -1
  296. package/dist/chunk-FF5RF32O.js.map +0 -1
  297. package/dist/chunk-FU52GL2E.js +0 -3
  298. package/dist/chunk-GMIE6III.js.map +0 -1
  299. package/dist/chunk-JSQTYDPG.js +0 -3
  300. package/dist/chunk-KQ67XB6T.js.map +0 -1
  301. package/dist/chunk-LSPFFEJT.js.map +0 -1
  302. package/dist/chunk-OKTLA23Q.js.map +0 -1
  303. package/dist/chunk-SNZK5X6F.js.map +0 -1
  304. package/dist/chunk-SU3LVQ7N.js.map +0 -1
  305. package/dist/chunk-XIXSSI3B.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/state/stores/theme.ts","../src/state/stores/auth.ts","../src/state/stores/ui.ts","../src/state/settings-version.ts"],"names":["defaultState"],"mappings":"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","file":"chunk-ADG4HZEP.js","sourcesContent":["/**\n * Theme Store\n *\n * @deprecated Use useSettingsStore from './settings' instead.\n * This store is maintained for backwards compatibility only.\n * The useSettingsStore provides the same functionality plus additional\n * settings like navLayout, density, fontSize, and more.\n *\n * Migration example:\n * ```tsx\n * // Before (deprecated)\n * const { mode, setMode } = useThemeStore();\n *\n * // After (recommended)\n * const { mode, setMode } = useSettingsStore();\n * ```\n *\n * @module state/stores\n */\n\nimport { createPersistedStore, createSelectors } from '../create-store.js';\nimport type { ThemeMode, ThemeDirection } from '../../types/theme.js';\n\n/**\n * Theme store state and actions.\n */\nexport interface ThemeState {\n /** Current theme mode */\n mode: ThemeMode;\n /** Text direction */\n direction: ThemeDirection;\n /** Current preset name */\n preset: string;\n /** Compact layout mode */\n compactLayout: boolean;\n /** High contrast mode */\n contrast: 'default' | 'high';\n /** Primary color override */\n primaryColor: string | null;\n\n // Actions\n setMode: (mode: ThemeMode) => void;\n toggleMode: () => void;\n setDirection: (direction: ThemeDirection) => void;\n setPreset: (preset: string) => void;\n setCompactLayout: (compact: boolean) => void;\n setContrast: (contrast: 'default' | 'high') => void;\n setPrimaryColor: (color: string | null) => void;\n reset: () => void;\n}\n\nconst defaultState = {\n mode: 'light' as ThemeMode,\n direction: 'ltr' as ThemeDirection,\n preset: 'default',\n compactLayout: false,\n contrast: 'default' as const,\n primaryColor: null,\n};\n\n/**\n * Theme store with persistence.\n *\n * @example\n * ```tsx\n * function ThemeToggle() {\n * const { mode, toggleMode } = useThemeStore();\n * return <button onClick={toggleMode}>{mode}</button>;\n * }\n * ```\n */\nexport const useThemeStore = createPersistedStore<ThemeState>(\n (set) => ({\n ...defaultState,\n\n setMode: (mode) => set({ mode }),\n toggleMode: () =>\n set((state) => {\n state.mode = state.mode === 'light' ? 'dark' : 'light';\n }),\n setDirection: (direction) => set({ direction }),\n setPreset: (preset) => set({ preset }),\n setCompactLayout: (compactLayout) => set({ compactLayout }),\n setContrast: (contrast) => set({ contrast }),\n setPrimaryColor: (primaryColor) => set({ primaryColor }),\n reset: () => set(defaultState),\n }),\n 'theme'\n);\n\n/**\n * Theme store with auto-generated selectors.\n *\n * @example\n * ```tsx\n * const mode = themeStore.use.mode();\n * ```\n */\nexport const themeStore = createSelectors(useThemeStore);\n","/**\n * Auth Store\n *\n * Manages authentication state (UI-side).\n * Server-side token validation should use Netron auth.\n *\n * SECURITY NOTE: Tokens are stored in session storage (not localStorage)\n * and are NOT persisted across browser sessions. Only the auth status\n * is persisted to allow checking login state on page load.\n *\n * @module state/stores\n */\n\nimport { createPersistedStore, createUIStore, createSelectors } from '../create-store.js';\n\n/**\n * Authentication status.\n */\nexport type AuthStatus = 'loading' | 'authenticated' | 'unauthenticated';\n\n/**\n * Auth store state (persisted - only status).\n */\nexport interface AuthStoreState {\n /** Current auth status */\n status: AuthStatus;\n /** Session ID (non-sensitive) */\n sessionId: string | null;\n\n // Actions\n setStatus: (status: AuthStatus) => void;\n setAuthenticated: (sessionId?: string) => void;\n setUnauthenticated: () => void;\n clearSession: () => void;\n}\n\n/**\n * Token store state (non-persisted - memory only).\n * Tokens should NEVER be persisted to localStorage.\n */\ninterface TokenStoreState {\n /** Access token (memory-only, cleared on page refresh) */\n token: string | null;\n setToken: (token: string | null) => void;\n}\n\n/**\n * Token store - memory-only, NOT persisted.\n * For XSS security, tokens should not be in localStorage.\n */\nexport const useTokenStore = createUIStore<TokenStoreState>(\n (set) => ({\n token: null,\n setToken: (token) => set({ token }),\n }),\n 'token'\n);\n\n/**\n * Auth store with partial persistence.\n * Only status and sessionId are persisted, NOT the token.\n *\n * @example\n * ```tsx\n * function AuthGuard({ children }) {\n * const status = useAuthStore((s) => s.status);\n * const isAuthenticated = selectIsAuthenticated(useAuthStore.getState());\n *\n * if (status === 'loading') return <Spinner />;\n * if (!isAuthenticated) return <Navigate to=\"/login\" />;\n *\n * return children;\n * }\n * ```\n */\nexport const useAuthStore = createPersistedStore<AuthStoreState>(\n (set) => ({\n status: 'loading',\n sessionId: null,\n\n // Actions\n setStatus: (status) => set({ status }),\n\n setAuthenticated: (sessionId) => {\n set({\n status: 'authenticated',\n sessionId: sessionId ?? null,\n });\n },\n\n setUnauthenticated: () => {\n // Clear token from memory store\n useTokenStore.getState().setToken(null);\n set({\n status: 'unauthenticated',\n sessionId: null,\n });\n },\n\n clearSession: () => {\n // Clear token from memory\n useTokenStore.getState().setToken(null);\n // Clear any stored session data\n if (typeof window !== 'undefined') {\n window.sessionStorage.removeItem('sessionId');\n }\n set({\n status: 'unauthenticated',\n sessionId: null,\n });\n },\n }),\n 'auth',\n {\n // Only persist non-sensitive data\n partialize: (state) =>\n (({\n status: state.status,\n sessionId: state.sessionId\n }) as AuthStoreState),\n }\n);\n\n// =============================================================================\n// SELECTORS (computed state helpers)\n// =============================================================================\n\n/**\n * Select whether auth is loading.\n */\nexport function selectIsLoading(state: AuthStoreState): boolean {\n return state.status === 'loading';\n}\n\n/**\n * Select whether user is authenticated.\n */\nexport function selectIsAuthenticated(state: AuthStoreState): boolean {\n return state.status === 'authenticated';\n}\n\n/**\n * Select whether user is unauthenticated.\n */\nexport function selectIsUnauthenticated(state: AuthStoreState): boolean {\n return state.status === 'unauthenticated';\n}\n\n/**\n * Auth store with auto-generated selectors.\n */\nexport const authStore = createSelectors(useAuthStore);\n\n// =============================================================================\n// HELPER HOOKS\n// =============================================================================\n\n/**\n * Hook to set both token and auth status atomically.\n *\n * @example\n * ```tsx\n * const { login, logout } = useAuth();\n *\n * // On successful login\n * login(accessToken, sessionId);\n *\n * // On logout\n * logout();\n * ```\n */\nexport function useAuth() {\n const setToken = useTokenStore((s) => s.setToken);\n const { setAuthenticated, setUnauthenticated, clearSession } = useAuthStore();\n\n return {\n login: (token: string, sessionId?: string) => {\n setToken(token);\n setAuthenticated(sessionId);\n },\n logout: () => {\n setUnauthenticated();\n },\n clearSession,\n getToken: () => useTokenStore.getState().token,\n };\n}\n","/**\n * UI Store\n *\n * Manages transient UI state (not persisted).\n *\n * @module state/stores\n */\n\nimport { createUIStore, createSelectors } from '../create-store.js';\n\n/**\n * UI store state and actions.\n */\nexport interface UIState {\n /** Sidebar open state */\n sidebarOpen: boolean;\n /** Sidebar collapsed state (mini mode) */\n sidebarCollapsed: boolean;\n /** Active dialog ID */\n activeDialog: string | null;\n /** Global loading overlay */\n globalLoading: boolean;\n /** Search modal open */\n searchOpen: boolean;\n\n // Actions\n toggleSidebar: () => void;\n setSidebarOpen: (open: boolean) => void;\n setSidebarCollapsed: (collapsed: boolean) => void;\n openDialog: (dialogId: string) => void;\n closeDialog: () => void;\n setGlobalLoading: (loading: boolean) => void;\n toggleSearch: () => void;\n setSearchOpen: (open: boolean) => void;\n}\n\n/**\n * UI store for transient state.\n *\n * @example\n * ```tsx\n * function Sidebar() {\n * const { sidebarOpen, sidebarCollapsed, toggleSidebar } = useUIStore();\n *\n * return (\n * <Drawer\n * open={sidebarOpen}\n * variant={sidebarCollapsed ? 'mini' : 'permanent'}\n * >\n * <SidebarContent />\n * </Drawer>\n * );\n * }\n * ```\n */\nexport const useUIStore = createUIStore<UIState>(\n (set) => ({\n sidebarOpen: true,\n sidebarCollapsed: false,\n activeDialog: null,\n globalLoading: false,\n searchOpen: false,\n\n toggleSidebar: () =>\n set((state) => {\n state.sidebarOpen = !state.sidebarOpen;\n }),\n\n setSidebarOpen: (sidebarOpen) => set({ sidebarOpen }),\n\n setSidebarCollapsed: (sidebarCollapsed) => set({ sidebarCollapsed }),\n\n openDialog: (dialogId) => set({ activeDialog: dialogId }),\n\n closeDialog: () => set({ activeDialog: null }),\n\n setGlobalLoading: (globalLoading) => set({ globalLoading }),\n\n toggleSearch: () =>\n set((state) => {\n state.searchOpen = !state.searchOpen;\n }),\n\n setSearchOpen: (searchOpen) => set({ searchOpen }),\n }),\n 'ui'\n);\n\n/**\n * UI store with auto-generated selectors.\n */\nexport const uiStore = createSelectors(useUIStore);\n","/**\n * Settings Version Management\n *\n * Utilities for managing versioned settings with safe migrations.\n * Enables breaking changes to settings structure while preserving user data.\n *\n * @module @omnitron-dev/prism/state\n */\n\nimport { createJSONStorage, type PersistOptions, type StateStorage } from 'zustand/middleware';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\n/**\n * Migration function signature.\n * Transforms settings from one version to the next.\n */\nexport type MigrationFn<TPrev = unknown, TNext = unknown> = (prevState: TPrev) => TNext;\n\n/**\n * Version-specific migration configuration.\n */\nexport interface VersionMigration<TPrev = unknown, TNext = unknown> {\n /** Target version number */\n version: number;\n /** Migration function */\n migrate: MigrationFn<TPrev, TNext>;\n}\n\n/**\n * Versioned settings configuration.\n */\nexport interface VersionedSettingsConfig<TState> {\n /** Current version number (increment when structure changes) */\n version: number;\n /** Storage key prefix */\n name: string;\n /** Ordered list of migrations (version -> next version) */\n migrations: VersionMigration[];\n /** Validation function (optional) */\n validate?: (state: unknown) => state is TState;\n /** Called when migration fails */\n onMigrationError?: (error: unknown, fromVersion: number, toVersion: number) => void;\n /** Called when stored data is corrupt/invalid */\n onCorruptData?: (error: unknown, rawData: unknown) => void;\n /** Default state (used when migration fails or data is corrupt) */\n defaultState: TState;\n}\n\n/**\n * Persisted settings with version metadata.\n */\nexport interface VersionedPersistedState<TState> {\n state: TState;\n version: number;\n}\n\n// =============================================================================\n// MIGRATION ENGINE\n// =============================================================================\n\n/**\n * Run migrations from one version to another.\n *\n * @param state - Current state\n * @param fromVersion - Starting version\n * @param toVersion - Target version\n * @param migrations - Available migrations\n * @returns Migrated state or null if migration failed\n */\nexport function runMigrations<TState>(\n state: unknown,\n fromVersion: number,\n toVersion: number,\n migrations: VersionMigration[]\n): TState | null {\n if (fromVersion >= toVersion) {\n return state as TState;\n }\n\n // Sort migrations by version\n const sortedMigrations = [...migrations].sort((a, b) => a.version - b.version);\n\n let currentState = state;\n let currentVersion = fromVersion;\n\n // Apply each migration in sequence\n for (const migration of sortedMigrations) {\n if (migration.version > fromVersion && migration.version <= toVersion) {\n try {\n currentState = migration.migrate(currentState);\n currentVersion = migration.version;\n } catch (error) {\n console.error(`[SettingsVersion] Migration to v${migration.version} failed:`, error);\n return null;\n }\n }\n }\n\n if (currentVersion !== toVersion) {\n console.warn(`[SettingsVersion] Migration incomplete: reached v${currentVersion}, expected v${toVersion}`);\n }\n\n return currentState as TState;\n}\n\n// =============================================================================\n// VERSIONED STORAGE\n// =============================================================================\n\n/**\n * Create a versioned storage adapter for Zustand persist.\n *\n * This adapter handles:\n * - Version tracking in stored data\n * - Automatic migrations when version changes\n * - Safe fallback to defaults on corrupt data\n *\n * @example\n * ```tsx\n * interface AppSettings {\n * theme: 'light' | 'dark';\n * language: string;\n * notifications: { email: boolean; push: boolean };\n * }\n *\n * const versionedStorage = createVersionedStorage<AppSettings>({\n * version: 3,\n * name: 'app-settings',\n * defaultState: {\n * theme: 'light',\n * language: 'en',\n * notifications: { email: true, push: true },\n * },\n * migrations: [\n * {\n * version: 2,\n * migrate: (prev: { theme: string }) => ({\n * ...prev,\n * language: 'en', // Added in v2\n * }),\n * },\n * {\n * version: 3,\n * migrate: (prev: { theme: string; language: string }) => ({\n * ...prev,\n * notifications: { email: true, push: true }, // Added in v3\n * }),\n * },\n * ],\n * });\n *\n * // Use with createPrismStore\n * const useSettings = createPrismStore<AppSettings>(\n * (set) => ({\n * ...versionedStorage.defaultState,\n * setTheme: (theme) => set({ theme }),\n * }),\n * {\n * name: 'settings',\n * persist: {\n * storage: versionedStorage.storage,\n * version: versionedStorage.version,\n * migrate: versionedStorage.migrate,\n * },\n * }\n * );\n * ```\n */\nexport function createVersionedStorage<TState>(config: VersionedSettingsConfig<TState>): {\n storage: StateStorage;\n version: number;\n migrate: (persistedState: unknown, version: number) => TState;\n defaultState: TState;\n} {\n const { version, name, migrations, validate, onMigrationError, onCorruptData, defaultState } = config;\n\n const storageKey = `prism-settings-${name}`;\n\n /**\n * Custom storage adapter that handles versioned data.\n */\n const storage: StateStorage = {\n getItem(key) {\n try {\n const raw = localStorage.getItem(key);\n return raw;\n } catch (error) {\n console.error('[SettingsVersion] Storage read error:', error);\n return null;\n }\n },\n\n setItem(key, value) {\n try {\n localStorage.setItem(key, value);\n } catch (error) {\n console.error('[SettingsVersion] Storage write error:', error);\n }\n },\n\n removeItem(key) {\n try {\n localStorage.removeItem(key);\n } catch (error) {\n console.error('[SettingsVersion] Storage remove error:', error);\n }\n },\n };\n\n /**\n * Migration function for Zustand persist.\n */\n function migrate(persistedState: unknown, persistedVersion: number): TState {\n // No migration needed if versions match\n if (persistedVersion === version) {\n // Optionally validate\n if (validate && !validate(persistedState)) {\n console.warn('[SettingsVersion] Stored state failed validation, using defaults');\n onCorruptData?.(new Error('Validation failed'), persistedState);\n return defaultState;\n }\n return persistedState as TState;\n }\n\n // Run migrations\n const migrated = runMigrations<TState>(persistedState, persistedVersion, version, migrations);\n\n if (migrated === null) {\n // Migration failed\n onMigrationError?.(new Error('Migration failed'), persistedVersion, version);\n console.warn('[SettingsVersion] Migration failed, using defaults');\n return defaultState;\n }\n\n // Validate migrated state\n if (validate && !validate(migrated)) {\n onCorruptData?.(new Error('Post-migration validation failed'), migrated);\n console.warn('[SettingsVersion] Migrated state failed validation, using defaults');\n return defaultState;\n }\n\n console.log(`[SettingsVersion] Migrated from v${persistedVersion} to v${version}`);\n return migrated;\n }\n\n return {\n storage,\n version,\n migrate,\n defaultState,\n };\n}\n\n// =============================================================================\n// HELPER FUNCTIONS\n// =============================================================================\n\n/**\n * Create persist options for versioned settings.\n * Convenience function that returns properly typed PersistOptions.\n *\n * @example\n * ```tsx\n * const persistOptions = createVersionedPersistOptions<MySettings>({\n * version: 2,\n * name: 'my-settings',\n * defaultState: { /* ... *\\/ },\n * migrations: [{ version: 2, migrate: (prev) => ({ ...prev, newField: 'default' }) }],\n * });\n *\n * const useStore = createPrismStore(initializer, {\n * name: 'my-settings',\n * persist: persistOptions,\n * });\n * ```\n */\nexport function createVersionedPersistOptions<TState>(\n config: VersionedSettingsConfig<TState>\n): Partial<PersistOptions<TState>> {\n const versioned = createVersionedStorage(config);\n\n return {\n name: `prism-settings-${config.name}`,\n // Use createJSONStorage to properly wrap the StateStorage for Zustand persist\n storage: createJSONStorage(() => versioned.storage),\n version: versioned.version,\n migrate: versioned.migrate as (persistedState: unknown, version: number) => TState | Promise<TState>,\n };\n}\n\n/**\n * Check if settings need migration.\n *\n * @param name - Settings name\n * @param currentVersion - Current app settings version\n * @returns Object with migration status\n */\nexport function checkSettingsVersion(\n name: string,\n currentVersion: number\n): {\n needsMigration: boolean;\n storedVersion: number | null;\n currentVersion: number;\n} {\n const storageKey = `prism-settings-${name}`;\n\n try {\n const raw = localStorage.getItem(storageKey);\n if (!raw) {\n return {\n needsMigration: false,\n storedVersion: null,\n currentVersion,\n };\n }\n\n const parsed = JSON.parse(raw);\n const storedVersion = parsed?.version ?? 0;\n\n return {\n needsMigration: storedVersion !== currentVersion,\n storedVersion,\n currentVersion,\n };\n } catch {\n return {\n needsMigration: true,\n storedVersion: null,\n currentVersion,\n };\n }\n}\n\n/**\n * Clear stored settings (useful for testing or reset).\n */\nexport function clearSettings(name: string): void {\n const storageKey = `prism-settings-${name}`;\n try {\n localStorage.removeItem(storageKey);\n } catch {\n // Ignore storage errors\n }\n}\n\n/**\n * Export settings to JSON.\n */\nexport function exportSettings<TState>(name: string, currentVersion: number): VersionedPersistedState<TState> | null {\n const storageKey = `prism-settings-${name}`;\n\n try {\n const raw = localStorage.getItem(storageKey);\n if (!raw) return null;\n\n const parsed = JSON.parse(raw);\n return {\n state: parsed.state,\n version: parsed.version ?? currentVersion,\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Import settings from JSON.\n * Will trigger migration if version differs.\n */\nexport function importSettings<TState>(name: string, data: VersionedPersistedState<TState>): void {\n const storageKey = `prism-settings-${name}`;\n\n try {\n localStorage.setItem(storageKey, JSON.stringify(data));\n } catch (error) {\n console.error('[SettingsVersion] Import failed:', error);\n }\n}\n\n// =============================================================================\n// TYPE GUARDS\n// =============================================================================\n\n/**\n * Create a type guard for settings validation.\n *\n * @example\n * ```tsx\n * const isValidSettings = createSettingsValidator<MySettings>({\n * requiredKeys: ['theme', 'language'],\n * typeChecks: {\n * theme: (v) => v === 'light' || v === 'dark',\n * language: (v) => typeof v === 'string',\n * },\n * });\n * ```\n */\nexport function createSettingsValidator<TState extends Record<string, unknown>>(config: {\n requiredKeys?: (keyof TState)[];\n typeChecks?: Partial<{ [K in keyof TState]: (value: unknown) => boolean }>;\n}): (state: unknown) => state is TState {\n return (state: unknown): state is TState => {\n if (typeof state !== 'object' || state === null) {\n return false;\n }\n\n const record = state as Record<string, unknown>;\n\n // Check required keys\n if (config.requiredKeys) {\n for (const key of config.requiredKeys) {\n if (!(key in record)) {\n return false;\n }\n }\n }\n\n // Run type checks\n if (config.typeChecks) {\n for (const [key, check] of Object.entries(config.typeChecks)) {\n if (key in record && check && !check(record[key])) {\n return false;\n }\n }\n }\n\n return true;\n };\n}\n\n// =============================================================================\n// MIGRATION HELPERS\n// =============================================================================\n\n/**\n * Creates a simple migration from one version to the next.\n *\n * @example\n * ```typescript\n * const v2Migration = createMigration(2, (state) => ({\n * ...state,\n * navLayout: 'vertical',\n * }));\n * ```\n */\nexport function createMigration<TPrev = unknown, TNext = unknown>(\n version: number,\n migrate: MigrationFn<TPrev, TNext>\n): VersionMigration<TPrev, TNext> {\n return { version, migrate };\n}\n\n/**\n * Creates a migration that renames a field.\n *\n * @example\n * ```typescript\n * const renameMigration = createRenameMigration(3, 'theme', 'mode', 'light');\n * ```\n */\nexport function createRenameMigration<TNext>(\n version: number,\n oldKey: string,\n newKey: string,\n defaultValue: unknown\n): VersionMigration {\n return {\n version,\n migrate: (state) => {\n const prev = state as Record<string, unknown>;\n const result = { ...prev } as Record<string, unknown>;\n\n // Get value from old key or use default\n const value = oldKey in prev ? prev[oldKey] : defaultValue;\n\n // Remove old key and add new key\n delete result[oldKey];\n result[newKey] = value;\n\n return result as TNext;\n },\n };\n}\n\n/**\n * Creates a migration that adds a new field with a default value.\n *\n * @example\n * ```typescript\n * const addFieldMigration = createAddFieldMigration(4, 'stretch', false);\n * ```\n */\nexport function createAddFieldMigration<TNext>(version: number, key: string, defaultValue: unknown): VersionMigration {\n return {\n version,\n migrate: (state) =>\n (({\n ...(state as object),\n [key]: defaultValue\n }) as TNext),\n };\n}\n\n/**\n * Creates a migration that removes a field.\n *\n * @example\n * ```typescript\n * const removeFieldMigration = createRemoveFieldMigration(5, 'legacyOption');\n * ```\n */\nexport function createRemoveFieldMigration<TNext>(version: number, key: string): VersionMigration {\n return {\n version,\n migrate: (state) => {\n const result = { ...(state as object) } as Record<string, unknown>;\n delete result[key];\n return result as TNext;\n },\n };\n}\n\n/**\n * Creates a migration that transforms a field's value.\n *\n * @example\n * ```typescript\n * const transformMigration = createTransformMigration(\n * 6,\n * 'fontSize',\n * (value) => typeof value === 'string' ? parseInt(value, 10) : value,\n * 16\n * );\n * ```\n */\nexport function createTransformMigration<TNext>(\n version: number,\n key: string,\n transform: (value: unknown) => unknown,\n defaultValue: unknown\n): VersionMigration {\n return {\n version,\n migrate: (state) => {\n const prev = state as Record<string, unknown>;\n const oldValue = key in prev ? prev[key] : undefined;\n const newValue = oldValue !== undefined ? transform(oldValue) : defaultValue;\n\n return {\n ...prev,\n [key]: newValue,\n } as TNext;\n },\n };\n}\n\n/**\n * Validates that migrations are in correct sequential order.\n *\n * @throws If migrations have duplicate versions\n */\nexport function validateMigrations(migrations: VersionMigration[]): void {\n const versions = migrations.map((m) => m.version).sort((a, b) => a - b);\n\n // Check for duplicates\n const uniqueVersions = new Set(versions);\n if (uniqueVersions.size !== versions.length) {\n throw new Error('[SettingsVersion] Duplicate migration versions detected');\n }\n\n // Check that versions are positive integers\n for (const version of versions) {\n if (!Number.isInteger(version) || version < 1) {\n throw new Error(`[SettingsVersion] Invalid migration version: ${version}. Must be a positive integer.`);\n }\n }\n}\n\n/**\n * Gets migration info for debugging.\n */\nexport function getMigrationInfo(migrations: VersionMigration[]): Array<{ version: number }> {\n return migrations.map((m) => ({ version: m.version })).sort((a, b) => a.version - b.version);\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/icons/context.tsx"],"names":[],"mappings":";;;AAKO,IAAM,cAAA,GAAiB;AAAA,EAC5B,KAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,iBAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,gBAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,WAAA;AAAA,EACA,gBAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,aAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,cAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF;AAIA,IAAM,KAAA,GAAsB,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA;AAC5C,IAAM,WAAA,GAAc,cAA4B,KAAK,CAAA;AAK9C,SAAS,iBAAA,CAAkB,EAAE,KAAA,EAAO,QAAA,EAAS,EAAiD;AACnG,EAAA,MAAM,MAAA,GAAS,WAAW,WAAW,CAAA;AACrC,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,OAAO,EAAE,GAAG,MAAA,EAAQ,GAAG,KAAA,EAAM,CAAA,EAAI,CAAC,MAAA,EAAQ,KAAK,CAAC,CAAA;AACtE,EAAA,uBAAO,GAAA,CAAC,WAAA,CAAY,QAAA,EAAZ,EAAqB,OAAe,QAAA,EAAS,CAAA;AACvD;AAGO,SAAS,eAAA,CAAgB,MAAqB,QAAA,EAA8B;AACjF,EAAA,MAAM,IAAA,GAAO,UAAA,CAAwC,SAAS,aAAA,CAAc,OAAO,GAAA,EAAK;AACtF,IAAA,MAAM,KAAA,GAAQ,WAAW,WAAW,CAAA;AACpC,IAAA,MAAM,SAAA,GAAY,KAAA,CAAM,IAAI,CAAA,IAAK,QAAA;AACjC,IAAA,2BAAQ,SAAA,EAAA,EAAW,GAAG,KAAA,EAAO,GAAA,EAAU,mBAAiB,IAAA,EAAM,CAAA;AAAA,EAChE,CAAC,CAAA;AACD,EAAA,IAAA,CAAK,WAAA,GAAc,aAAa,IAAI,CAAA,CAAA,CAAA;AACpC,EAAA,OAAO,IAAA;AACT","file":"chunk-BJE2AKD4.js","sourcesContent":["'use client';\nimport { createContext, forwardRef, useContext, useMemo, type ComponentType, type ReactNode } from 'react';\nimport type { SvgIconProps } from '@mui/material/SvgIcon';\n\n/** Semantic slots shared by controls, layouts and scientific tools. */\nexport const prismIconNames = [\n 'add',\n 'alignCenter',\n 'alignJustify',\n 'alignLeft',\n 'alignRight',\n 'arrowDown',\n 'arrowLeft',\n 'arrowRight',\n 'arrowUp',\n 'arrowUpRight',\n 'bold',\n 'bulletList',\n 'calendar',\n 'check',\n 'checkList',\n 'checkbox',\n 'checkboxChecked',\n 'checkboxMixed',\n 'chevronDown',\n 'chevronLeft',\n 'chevronRight',\n 'chevronUp',\n 'clearMarks',\n 'close',\n 'codeBlock',\n 'copy',\n 'download',\n 'drag',\n 'empty',\n 'error',\n 'eye',\n 'eyeOff',\n 'filter',\n 'firstPage',\n 'fitView',\n 'fullscreen',\n 'fullscreenExit',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'hardBreak',\n 'horizontalRule',\n 'image',\n 'info',\n 'inlineCode',\n 'italic',\n 'keyboard',\n 'lastPage',\n 'link',\n 'lock',\n 'menu',\n 'more',\n 'orderedList',\n 'panelCollapse',\n 'panelExpand',\n 'paragraph',\n 'play',\n 'quote',\n 'radio',\n 'radioChecked',\n 'redo',\n 'remove',\n 'search',\n 'share',\n 'star',\n 'starEmpty',\n 'strike',\n 'success',\n 'table',\n 'underline',\n 'undo',\n 'unlink',\n 'unlock',\n 'upload',\n 'warning',\n 'zoomIn',\n 'zoomOut',\n] as const;\nexport type PrismIconName = (typeof prismIconNames)[number];\nexport type PrismIconComponent = ComponentType<SvgIconProps>;\nexport type PrismIconSet = Readonly<Partial<Record<PrismIconName, PrismIconComponent>>>;\nconst empty: PrismIconSet = Object.freeze({});\nconst IconContext = createContext<PrismIconSet>(empty);\n\n/** Application-owned artwork; nested providers override only the supplied slots.\n * React context crosses MUI portals. No DOM rewriting or remote icon requests.\n */\nexport function PrismIconProvider({ icons, children }: { icons: PrismIconSet; children: ReactNode }) {\n const parent = useContext(IconContext);\n const value = useMemo(() => ({ ...parent, ...icons }), [parent, icons]);\n return <IconContext.Provider value={value}>{children}</IconContext.Provider>;\n}\n\n/** Stable component identity preserves focus and forwards the entire MUI SVG contract. */\nexport function createPrismIcon(name: PrismIconName, Fallback: PrismIconComponent) {\n const Icon = forwardRef<SVGSVGElement, SvgIconProps>(function PrismIconSlot(props, ref) {\n const icons = useContext(IconContext);\n const Component = icons[name] ?? Fallback;\n return <Component {...props} ref={ref} data-prism-icon={name} />;\n });\n Icon.displayName = `PrismIcon(${name})`;\n return Icon;\n}\n"]}
@@ -1 +0,0 @@
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-BRDWQVRT.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"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/popover/popover.tsx"],"names":[],"mappings":"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","file":"chunk-DRFNMZLG.js","sourcesContent":["'use client';\n\n/**\n * Popover Component\n *\n * Enhanced popover component with arrow support and useful hook.\n *\n * @module components/popover\n */\n\nimport type { ReactNode, MouseEvent, Dispatch, SetStateAction } from 'react';\nimport { useState, useCallback } from 'react';\nimport Popover from '@mui/material/Popover';\nimport { styled, alpha } from '@mui/material/styles';\nimport type { PopoverProps, PopoverOrigin } from '@mui/material/Popover';\nimport type { SxProps, Theme, CSSObject } from '@mui/material/styles';\nimport { listClasses } from '@mui/material/List';\nimport { menuItemClasses } from '@mui/material/MenuItem';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport type ArrowPlacement =\n | 'top-left'\n | 'top-center'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-center'\n | 'bottom-right'\n | 'left-top'\n | 'left-center'\n | 'left-bottom'\n | 'right-top'\n | 'right-center'\n | 'right-bottom';\n\nexport interface PopoverArrowProps {\n /** Hide the arrow */\n hide?: boolean;\n /** Arrow size in pixels */\n size?: number;\n /** Offset from edge */\n offset?: number;\n /** Arrow placement */\n placement?: ArrowPlacement;\n /** Additional styles */\n sx?: SxProps<Theme>;\n}\n\nexport interface CustomPopoverProps extends Omit<PopoverProps, 'open'> {\n /** Whether the popover is open */\n open: boolean | Element | null;\n /** Close handler */\n onClose: () => void;\n /** Arrow configuration */\n arrow?: PopoverArrowProps;\n /** Minimum width of the popover */\n minWidth?: number | string;\n}\n\n// =============================================================================\n// UTILS\n// =============================================================================\n\nconst POPOVER_DISTANCE = 0.75;\n\ninterface AnchorOriginConfig {\n paperStyles?: CSSObject;\n anchorOrigin: PopoverOrigin;\n transformOrigin: PopoverOrigin;\n}\n\nfunction calculateAnchorOrigin(arrow: ArrowPlacement = 'top-right'): AnchorOriginConfig {\n const configs: Record<ArrowPlacement, AnchorOriginConfig> = {\n 'top-left': {\n paperStyles: { ml: -POPOVER_DISTANCE },\n anchorOrigin: { vertical: 'bottom', horizontal: 'left' },\n transformOrigin: { vertical: 'top', horizontal: 'left' },\n },\n 'top-center': {\n paperStyles: undefined,\n anchorOrigin: { vertical: 'bottom', horizontal: 'center' },\n transformOrigin: { vertical: 'top', horizontal: 'center' },\n },\n 'top-right': {\n paperStyles: { ml: POPOVER_DISTANCE },\n anchorOrigin: { vertical: 'bottom', horizontal: 'right' },\n transformOrigin: { vertical: 'top', horizontal: 'right' },\n },\n 'bottom-left': {\n paperStyles: { ml: -POPOVER_DISTANCE },\n anchorOrigin: { vertical: 'top', horizontal: 'left' },\n transformOrigin: { vertical: 'bottom', horizontal: 'left' },\n },\n 'bottom-center': {\n paperStyles: undefined,\n anchorOrigin: { vertical: 'top', horizontal: 'center' },\n transformOrigin: { vertical: 'bottom', horizontal: 'center' },\n },\n 'bottom-right': {\n paperStyles: { ml: POPOVER_DISTANCE },\n anchorOrigin: { vertical: 'top', horizontal: 'right' },\n transformOrigin: { vertical: 'bottom', horizontal: 'right' },\n },\n 'left-top': {\n paperStyles: { mt: -POPOVER_DISTANCE },\n anchorOrigin: { vertical: 'top', horizontal: 'right' },\n transformOrigin: { vertical: 'top', horizontal: 'left' },\n },\n 'left-center': {\n paperStyles: undefined,\n anchorOrigin: { vertical: 'center', horizontal: 'right' },\n transformOrigin: { vertical: 'center', horizontal: 'left' },\n },\n 'left-bottom': {\n paperStyles: { mt: POPOVER_DISTANCE },\n anchorOrigin: { vertical: 'bottom', horizontal: 'right' },\n transformOrigin: { vertical: 'bottom', horizontal: 'left' },\n },\n 'right-top': {\n paperStyles: { mt: -POPOVER_DISTANCE },\n anchorOrigin: { vertical: 'top', horizontal: 'left' },\n transformOrigin: { vertical: 'top', horizontal: 'right' },\n },\n 'right-center': {\n paperStyles: undefined,\n anchorOrigin: { vertical: 'center', horizontal: 'left' },\n transformOrigin: { vertical: 'center', horizontal: 'right' },\n },\n 'right-bottom': {\n paperStyles: { mt: POPOVER_DISTANCE },\n anchorOrigin: { vertical: 'bottom', horizontal: 'left' },\n transformOrigin: { vertical: 'bottom', horizontal: 'right' },\n },\n };\n\n return configs[arrow] || configs['top-right'];\n}\n\n// =============================================================================\n// ARROW COMPONENT\n// =============================================================================\n\ninterface ArrowStyledProps {\n ownerState: {\n size: number;\n offset: number;\n placement: ArrowPlacement;\n };\n}\n\nconst Arrow = styled('span', {\n shouldForwardProp: (prop) => prop !== 'ownerState',\n})<ArrowStyledProps>(({ theme, ownerState }) => {\n const { size, offset, placement } = ownerState;\n\n const directions: Record<string, CSSObject> = {\n top: { top: 0, rotate: '135deg', translate: '0 -50%' },\n bottom: { bottom: 0, rotate: '-45deg', translate: '0 50%' },\n left: { left: 0, rotate: '45deg', translate: '-50% 0' },\n right: { right: 0, rotate: '-135deg', translate: '50% 0' },\n };\n\n const getDirection = () => {\n if (placement.startsWith('top-')) return directions.top;\n if (placement.startsWith('bottom-')) return directions.bottom;\n if (placement.startsWith('left-')) return directions.left;\n if (placement.startsWith('right-')) return directions.right;\n return {};\n };\n\n const getPosition = () => {\n if (placement.endsWith('-left')) return { left: offset };\n if (placement.endsWith('-right')) return { right: offset };\n if (placement.endsWith('-top')) return { top: offset };\n if (placement.endsWith('-bottom')) return { bottom: offset };\n if (placement.endsWith('-center')) {\n if (placement.startsWith('top-') || placement.startsWith('bottom-')) {\n return { left: 0, right: 0, margin: 'auto' };\n }\n return { top: 0, bottom: 0, margin: 'auto' };\n }\n return {};\n };\n\n return {\n width: size,\n height: size,\n position: 'absolute',\n borderBottomLeftRadius: size / 4,\n clipPath: 'polygon(0% 0%, 100% 100%, 0% 100%)',\n backgroundColor: theme.palette.background.paper,\n border: `solid 1px ${alpha(theme.palette.grey[500], 0.12)}`,\n ...getDirection(),\n ...getPosition(),\n };\n});\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\n/**\n * CustomPopover - Enhanced popover with arrow support.\n *\n * @example\n * ```tsx\n * const popover = usePopover();\n *\n * <Button onClick={popover.onOpen}>Open Menu</Button>\n *\n * <CustomPopover\n * open={popover.open}\n * onClose={popover.onClose}\n * anchorEl={popover.anchorEl}\n * arrow={{ placement: 'top-right' }}\n * >\n * <MenuItem>Option 1</MenuItem>\n * <MenuItem>Option 2</MenuItem>\n * </CustomPopover>\n * ```\n */\nexport function CustomPopover({\n open,\n onClose,\n children,\n anchorEl,\n arrow,\n minWidth = 140,\n slotProps,\n ...other\n}: CustomPopoverProps): ReactNode {\n const arrowSize = arrow?.size ?? 14;\n const arrowOffset = arrow?.offset ?? 17;\n const arrowPlacement = arrow?.placement ?? 'top-right';\n const hideArrow = arrow?.hide ?? false;\n\n const { paperStyles, anchorOrigin, transformOrigin } = calculateAnchorOrigin(arrowPlacement);\n\n const isOpen = Boolean(open);\n\n return (\n <Popover\n open={isOpen}\n anchorEl={anchorEl}\n onClose={onClose}\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n slotProps={{\n ...slotProps,\n paper: {\n ...(typeof slotProps?.paper === 'object' ? slotProps.paper : {}),\n sx: [\n paperStyles as SxProps<Theme>,\n {\n overflow: 'inherit',\n [`& .${listClasses.root}`]: { minWidth },\n [`& .${menuItemClasses.root}`]: { gap: 2 },\n },\n ...(typeof slotProps?.paper === 'object' && slotProps.paper && 'sx' in slotProps.paper\n ? Array.isArray(slotProps.paper.sx)\n ? slotProps.paper.sx\n : [slotProps.paper.sx]\n : []),\n ],\n },\n }}\n {...other}\n >\n {!hideArrow && (\n <Arrow\n ownerState={{\n size: arrowSize,\n offset: arrowOffset,\n placement: arrowPlacement,\n }}\n sx={arrow?.sx}\n />\n )}\n {children}\n </Popover>\n );\n}\n\n// =============================================================================\n// HOOK\n// =============================================================================\n\n/**\n * Return type for usePopover hook with generic element type.\n *\n * @typeParam T - The HTML element type (default: HTMLElement)\n */\nexport interface UsePopoverReturn<T extends HTMLElement = HTMLElement> {\n /** Whether the popover is open */\n open: boolean;\n /** The anchor element (typed to T) */\n anchorEl: T | null;\n /** Open the popover - accepts MouseEvent with typed currentTarget */\n onOpen: (event: MouseEvent<T>) => void;\n /** Close the popover */\n onClose: () => void;\n /** Set the anchor element directly (typed to T | null) */\n setAnchorEl: Dispatch<SetStateAction<T | null>>;\n}\n\n/**\n * usePopover - Generic hook for managing popover state.\n *\n * Type-safe hook that accepts a generic type parameter for the anchor element.\n * This ensures type safety when accessing `event.currentTarget` and `anchorEl`.\n *\n * @typeParam T - The HTML element type (default: HTMLElement)\n * @returns Popover state and controls with typed elements\n *\n * @example\n * ```tsx\n * // Basic usage with default HTMLElement\n * function MenuButton() {\n * const popover = usePopover();\n *\n * return (\n * <>\n * <IconButton onClick={popover.onOpen}>\n * <MoreVertIcon />\n * </IconButton>\n *\n * <CustomPopover\n * open={popover.open}\n * onClose={popover.onClose}\n * anchorEl={popover.anchorEl}\n * >\n * <MenuItem onClick={popover.onClose}>Edit</MenuItem>\n * <MenuItem onClick={popover.onClose}>Delete</MenuItem>\n * </CustomPopover>\n * </>\n * );\n * }\n *\n * // Type-safe usage with specific element type\n * function TypedButton() {\n * const popover = usePopover<HTMLButtonElement>();\n *\n * // TypeScript knows anchorEl is HTMLButtonElement | null\n * // and onOpen accepts MouseEvent<HTMLButtonElement>\n *\n * return (\n * <>\n * <button onClick={popover.onOpen}>Click me</button>\n * <Popover open={popover.open} anchorEl={popover.anchorEl} onClose={popover.onClose}>\n * Content here\n * </Popover>\n * </>\n * );\n * }\n * ```\n */\nexport function usePopover<T extends HTMLElement = HTMLElement>(): UsePopoverReturn<T> {\n const [anchorEl, setAnchorEl] = useState<T | null>(null);\n\n const onOpen = useCallback((event: MouseEvent<T>) => {\n setAnchorEl(event.currentTarget as T);\n }, []);\n\n const onClose = useCallback(() => {\n setAnchorEl(null);\n }, []);\n\n return {\n open: Boolean(anchorEl),\n anchorEl,\n onOpen,\n onClose,\n setAnchorEl,\n };\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/doc-layout/doc-layout.tsx","../src/components/scroll-spy/scroll-spy-provider.tsx","../src/components/scroll-spy/scroll-spy-section.tsx","../src/components/doc-layout/doc-section-nav.tsx"],"names":["jsx","useRef","useEffect","Box","useCallback","jsxs"],"mappings":"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","file":"chunk-FF5RF32O.js","sourcesContent":["'use client';\n\nimport { type ReactNode } from 'react';\nimport Box from '@mui/material/Box';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\ninterface DocLayoutProps {\n sidebar?: ReactNode;\n sectionNav?: ReactNode;\n children: ReactNode;\n sx?: SxProps<Theme>;\n}\n\n/**\n * 3-column responsive documentation layout.\n * - Left: sidebar (collapsible tree nav)\n * - Center: content (fills available width)\n * - Right: section nav (ToC from headings)\n */\nexport function DocLayout({ sidebar, sectionNav, children, sx }: DocLayoutProps) {\n return (\n <Box\n sx={{\n display: 'flex',\n width: '100%',\n ...(sx as any),\n }}\n >\n {sidebar && (\n <Box\n component=\"nav\"\n sx={{\n width: 272,\n flexShrink: 0,\n display: { xs: 'none', md: 'block' },\n position: 'sticky',\n top: 80,\n alignSelf: 'flex-start',\n maxHeight: 'calc(100vh - 100px)',\n overflowY: 'auto',\n pr: 3,\n borderRight: 1,\n borderColor: 'divider',\n }}\n >\n {sidebar}\n </Box>\n )}\n\n <Box\n component=\"main\"\n sx={{\n flex: 1,\n minWidth: 0,\n px: { xs: 2, md: 4 },\n }}\n >\n {children}\n </Box>\n\n {sectionNav && (\n <Box\n component=\"aside\"\n sx={{\n width: 240,\n flexShrink: 0,\n display: { xs: 'none', lg: 'block' },\n position: 'sticky',\n top: 80,\n alignSelf: 'flex-start',\n maxHeight: 'calc(100vh - 100px)',\n overflowY: 'auto',\n pl: 3,\n }}\n >\n {sectionNav}\n </Box>\n )}\n </Box>\n );\n}\n","'use client';\n\nimport { createContext, useContext, useState, useEffect, useRef, useCallback, type ReactNode } from 'react';\n\ninterface ScrollSpyContextValue {\n activeId: string | null;\n registerSection: (id: string, element: HTMLElement) => void;\n unregisterSection: (id: string) => void;\n}\n\nconst ScrollSpyContext = createContext<ScrollSpyContextValue>({\n activeId: null,\n registerSection: () => {},\n unregisterSection: () => {},\n});\n\nexport function useScrollSpy() {\n return useContext(ScrollSpyContext);\n}\n\ninterface ScrollSpyProviderProps {\n children: ReactNode;\n /** Offset from top in pixels for activation threshold */\n offset?: number;\n /** Root element to observe (defaults to viewport) */\n root?: HTMLElement | null;\n /**\n * CSS selector for heading elements to auto-observe.\n * When set, headings matching this selector inside the container\n * are automatically registered (no need for ScrollSpySection wrappers).\n * @default 'h1[id], h2[id], h3[id], h4[id], h5[id], h6[id]'\n */\n headingSelector?: string;\n /** Ref to the container to scan for headings. Defaults to document. */\n containerRef?: React.RefObject<HTMLElement | null>;\n}\n\nexport function ScrollSpyProvider({\n children,\n offset = 80,\n root = null,\n headingSelector = 'h1[id], h2[id], h3[id], h4[id], h5[id], h6[id]',\n containerRef,\n}: ScrollSpyProviderProps) {\n const [activeId, setActiveId] = useState<string | null>(null);\n const sectionsRef = useRef<Map<string, HTMLElement>>(new Map());\n const observerRef = useRef<IntersectionObserver | null>(null);\n const wrapperRef = useRef<HTMLDivElement>(null);\n\n // Create IntersectionObserver\n const createObserver = useCallback(() => {\n observerRef.current?.disconnect();\n\n const observer = new IntersectionObserver(\n (entries) => {\n // Find the topmost visible entry\n const visible = entries\n .filter((e) => e.isIntersecting)\n .sort((a, b) => a.boundingClientRect.top - b.boundingClientRect.top);\n\n if (visible.length > 0) {\n setActiveId(visible[0].target.id);\n }\n },\n {\n root,\n rootMargin: `-${offset}px 0px -60% 0px`,\n threshold: 0,\n }\n );\n\n sectionsRef.current.forEach((element) => observer.observe(element));\n observerRef.current = observer;\n }, [offset, root]);\n\n // Auto-scan for headings with IDs\n useEffect(() => {\n if (!headingSelector) return undefined;\n\n // Wait a tick for content to render\n const timer = setTimeout(() => {\n const container = containerRef?.current ?? wrapperRef.current;\n if (!container) return;\n\n const headings = container.querySelectorAll<HTMLElement>(headingSelector);\n headings.forEach((heading) => {\n if (heading.id) {\n sectionsRef.current.set(heading.id, heading);\n }\n });\n\n createObserver();\n }, 100);\n\n return () => {\n clearTimeout(timer);\n observerRef.current?.disconnect();\n };\n }, [headingSelector, containerRef, createObserver]);\n\n // Also observe via MutationObserver to catch dynamically added headings\n useEffect(() => {\n if (!headingSelector) return undefined;\n\n const container = containerRef?.current ?? wrapperRef.current;\n if (!container) return undefined;\n\n const mutationObserver = new MutationObserver(() => {\n const headings = container.querySelectorAll<HTMLElement>(headingSelector);\n let changed = false;\n\n headings.forEach((heading) => {\n if (heading.id && !sectionsRef.current.has(heading.id)) {\n sectionsRef.current.set(heading.id, heading);\n changed = true;\n }\n });\n\n if (changed) {\n createObserver();\n }\n });\n\n mutationObserver.observe(container, { childList: true, subtree: true });\n\n return () => mutationObserver.disconnect();\n }, [headingSelector, containerRef, createObserver]);\n\n const registerSection = useCallback((id: string, element: HTMLElement) => {\n sectionsRef.current.set(id, element);\n observerRef.current?.observe(element);\n }, []);\n\n const unregisterSection = useCallback((id: string) => {\n const element = sectionsRef.current.get(id);\n if (element) observerRef.current?.unobserve(element);\n sectionsRef.current.delete(id);\n }, []);\n\n return (\n <ScrollSpyContext.Provider value={{ activeId, registerSection, unregisterSection }}>\n <div ref={wrapperRef}>{children}</div>\n </ScrollSpyContext.Provider>\n );\n}\n","'use client';\n\nimport { useEffect, useRef, type ReactNode } from 'react';\nimport Box from '@mui/material/Box';\nimport type { SxProps, Theme } from '@mui/material/styles';\nimport { useScrollSpy } from './scroll-spy-provider';\n\ninterface ScrollSpySectionProps {\n id: string;\n children: ReactNode;\n sx?: SxProps<Theme>;\n}\n\nexport function ScrollSpySection({ id, children, sx }: ScrollSpySectionProps) {\n const ref = useRef<HTMLDivElement>(null);\n const { registerSection, unregisterSection } = useScrollSpy();\n\n useEffect(() => {\n const element = ref.current;\n if (!element) return undefined;\n registerSection(id, element);\n return () => unregisterSection(id);\n }, [id, registerSection, unregisterSection]);\n\n return (\n <Box ref={ref} id={id} sx={sx}>\n {children}\n </Box>\n );\n}\n","'use client';\n\nimport { useCallback } from 'react';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport { alpha } from '@mui/material/styles';\nimport { useScrollSpy } from '../scroll-spy/index.js';\n\nexport interface DocHeading {\n id: string;\n text: string;\n level: number;\n}\n\ninterface DocSectionNavProps {\n headings: DocHeading[];\n title?: string;\n}\n\n/**\n * Right-side table of contents connected to ScrollSpy.\n * Highlights the currently visible section with a smooth indicator.\n */\nexport function DocSectionNav({ headings, title = 'On this page' }: DocSectionNavProps) {\n const { activeId } = useScrollSpy();\n\n const handleClick = useCallback((e: React.MouseEvent<HTMLAnchorElement>, id: string) => {\n e.preventDefault();\n const element = document.getElementById(id);\n if (element) {\n element.scrollIntoView({ behavior: 'smooth', block: 'start' });\n window.history.replaceState(null, '', `#${id}`);\n }\n }, []);\n\n if (headings.length === 0) return null;\n\n return (\n <Box>\n <Typography\n variant=\"overline\"\n sx={{\n display: 'block',\n mb: 2,\n color: 'text.secondary',\n fontSize: '0.6875rem',\n fontWeight: 700,\n letterSpacing: '0.08em',\n }}\n >\n {title}\n </Typography>\n\n <Box\n component=\"nav\"\n sx={{\n position: 'relative',\n borderLeft: 1,\n borderColor: 'divider',\n }}\n >\n {headings.map((heading) => {\n const isActive = activeId === heading.id;\n const indent = (heading.level - 2) * 1.5;\n return (\n <Box\n key={heading.id}\n component=\"a\"\n href={`#${heading.id}`}\n onClick={(e: React.MouseEvent<HTMLAnchorElement>) => handleClick(e, heading.id)}\n sx={{\n display: 'block',\n py: 0.75,\n pl: indent + 2,\n pr: 1,\n ml: '-1px',\n fontSize: '0.8125rem',\n lineHeight: 1.5,\n textDecoration: 'none',\n color: isActive ? 'primary.main' : 'text.disabled',\n fontWeight: isActive ? 600 : 400,\n borderLeft: 2,\n borderColor: isActive ? 'primary.main' : 'transparent',\n transition: 'color 0.2s ease, border-color 0.2s ease',\n cursor: 'pointer',\n '&:hover': {\n color: isActive ? 'primary.main' : 'text.primary',\n backgroundColor: (theme) => alpha(theme.palette.action.hover, 0.04),\n borderRadius: '0 6px 6px 0',\n },\n }}\n >\n {heading.text}\n </Box>\n );\n })}\n </Box>\n </Box>\n );\n}\n"]}
@@ -1,3 +0,0 @@
1
-
2
- //# sourceMappingURL=chunk-FU52GL2E.js.map
3
- //# sourceMappingURL=chunk-FU52GL2E.js.map