@omnitron-dev/prism 0.3.1 → 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 (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
@@ -0,0 +1,110 @@
1
+ import NProgress from 'nprogress';
2
+ import { useEffect, useRef } from 'react';
3
+ import { jsx } from 'react/jsx-runtime';
4
+
5
+ // src/components/navigation-progress/navigation-progress.tsx
6
+ var PRIMARY = "var(--prism-palette-primary-main, var(--palette-primary-main, #1976d2))";
7
+ var STYLES = `
8
+ #nprogress {
9
+ top: 0;
10
+ left: 0;
11
+ width: 100%;
12
+ height: 2.5px;
13
+ z-index: 9999;
14
+ position: fixed;
15
+ pointer-events: none;
16
+ }
17
+ #nprogress .bar {
18
+ height: 100%;
19
+ background-color: ${PRIMARY};
20
+ box-shadow: 0 0 2.5px ${PRIMARY};
21
+ }
22
+ #nprogress .peg {
23
+ right: 0;
24
+ opacity: 1;
25
+ width: 100px;
26
+ height: 100%;
27
+ display: block;
28
+ position: absolute;
29
+ transform: rotate(3deg) translate(0px, -4px);
30
+ box-shadow:
31
+ 0 0 10px ${PRIMARY},
32
+ 0 0 5px ${PRIMARY};
33
+ }
34
+ `;
35
+ function isValidAnchor(element) {
36
+ const href = element.getAttribute("href")?.trim() ?? "";
37
+ const target = element.getAttribute("target");
38
+ return href.startsWith("/") && target !== "_blank";
39
+ }
40
+ function isSamePath(a, b) {
41
+ try {
42
+ const urlA = new URL(a, window.location.origin);
43
+ const urlB = new URL(b, window.location.origin);
44
+ return urlA.pathname === urlB.pathname && urlA.search === urlB.search;
45
+ } catch {
46
+ return a === b;
47
+ }
48
+ }
49
+ function useProgressBar(pathname, search, delay) {
50
+ const currentUrlRef = useRef("");
51
+ useEffect(() => {
52
+ currentUrlRef.current = window.location.href;
53
+ }, []);
54
+ useEffect(() => {
55
+ const handleNavigation = (newUrl) => {
56
+ if (newUrl && !isSamePath(newUrl, currentUrlRef.current)) {
57
+ currentUrlRef.current = newUrl;
58
+ NProgress.start();
59
+ }
60
+ };
61
+ const handleClick = (event) => {
62
+ const target = event.target;
63
+ const anchor = target.closest("a[href]");
64
+ if (anchor && isValidAnchor(anchor)) {
65
+ handleNavigation(anchor.href);
66
+ }
67
+ };
68
+ const handlePopState = () => {
69
+ handleNavigation(window.location.href);
70
+ };
71
+ const patchHistory = (method) => {
72
+ const original = window.history[method];
73
+ window.history[method] = new Proxy(original, {
74
+ apply: (target, thisArg, args) => {
75
+ const newUrl = args[2];
76
+ if (typeof newUrl === "string") {
77
+ handleNavigation(new URL(newUrl, window.location.origin).href);
78
+ }
79
+ return target.apply(thisArg, args);
80
+ }
81
+ });
82
+ };
83
+ patchHistory("pushState");
84
+ patchHistory("replaceState");
85
+ document.addEventListener("click", handleClick);
86
+ window.addEventListener("popstate", handlePopState);
87
+ return () => {
88
+ document.removeEventListener("click", handleClick);
89
+ window.removeEventListener("popstate", handlePopState);
90
+ };
91
+ }, []);
92
+ useEffect(() => {
93
+ const timeout = setTimeout(() => NProgress.done(), delay);
94
+ return () => clearTimeout(timeout);
95
+ }, [pathname, search, delay]);
96
+ }
97
+ function NavigationProgress({ pathname, search = "", delay = 100 }) {
98
+ useEffect(() => {
99
+ NProgress.configure({ showSpinner: false });
100
+ return () => {
101
+ NProgress.done();
102
+ };
103
+ }, []);
104
+ useProgressBar(pathname, search, delay);
105
+ return /* @__PURE__ */ jsx("style", { children: STYLES });
106
+ }
107
+
108
+ export { NavigationProgress };
109
+ //# sourceMappingURL=chunk-SSEHL5VP.js.map
110
+ //# sourceMappingURL=chunk-SSEHL5VP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/navigation-progress/navigation-progress.tsx"],"names":[],"mappings":"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","file":"chunk-SSEHL5VP.js","sourcesContent":["'use client';\n\n/**\n * NavigationProgress\n *\n * NProgress-based top-of-page progress bar for route transitions.\n * Starts on internal anchor clicks and history changes, completes on pathname change.\n *\n * Framework-agnostic: accepts `pathname` as a prop (pass from your router).\n *\n * @module components/navigation-progress\n */\n\nimport NProgress from 'nprogress';\nimport { useRef, useEffect } from 'react';\n\n// ---------------------------------------------------------------------------\n// Styles (injected via <style> tag to avoid CSS import requirement)\n// ---------------------------------------------------------------------------\n\nconst PRIMARY = 'var(--prism-palette-primary-main, var(--palette-primary-main, #1976d2))';\n\nconst STYLES = `\n#nprogress {\n top: 0;\n left: 0;\n width: 100%;\n height: 2.5px;\n z-index: 9999;\n position: fixed;\n pointer-events: none;\n}\n#nprogress .bar {\n height: 100%;\n background-color: ${PRIMARY};\n box-shadow: 0 0 2.5px ${PRIMARY};\n}\n#nprogress .peg {\n right: 0;\n opacity: 1;\n width: 100px;\n height: 100%;\n display: block;\n position: absolute;\n transform: rotate(3deg) translate(0px, -4px);\n box-shadow:\n 0 0 10px ${PRIMARY},\n 0 0 5px ${PRIMARY};\n}\n`;\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface NavigationProgressProps {\n /** Current route pathname. */\n pathname: string;\n /**\n * Current route search string (including the leading `?`, as react-router's\n * `useLocation().search` returns it). Optional for backwards compat — when\n * provided, the bar also completes on search-only navigation (e.g. tab\n * switches encoded in query params). When omitted, only pathname changes\n * trigger completion, which leaves the bar stuck on `?tab=foo` style\n * transitions.\n */\n search?: string;\n /** Completion delay in ms (avoids flashing on fast transitions). Default: 100 */\n delay?: number;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Check if an anchor should trigger the progress bar. */\nfunction isValidAnchor(element: HTMLAnchorElement): boolean {\n const href = element.getAttribute('href')?.trim() ?? '';\n const target = element.getAttribute('target');\n return href.startsWith('/') && target !== '_blank';\n}\n\n/** Compare two URLs ignoring hash. */\nfunction isSamePath(a: string, b: string): boolean {\n try {\n const urlA = new URL(a, window.location.origin);\n const urlB = new URL(b, window.location.origin);\n return urlA.pathname === urlB.pathname && urlA.search === urlB.search;\n } catch {\n return a === b;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Hook\n// ---------------------------------------------------------------------------\n\nfunction useProgressBar(pathname: string, search: string, delay: number) {\n const currentUrlRef = useRef('');\n\n // Initialize\n useEffect(() => {\n currentUrlRef.current = window.location.href;\n }, []);\n\n // Start on navigation\n useEffect(() => {\n const handleNavigation = (newUrl: string) => {\n if (newUrl && !isSamePath(newUrl, currentUrlRef.current)) {\n currentUrlRef.current = newUrl;\n NProgress.start();\n }\n };\n\n // Click delegation for anchor tags\n const handleClick = (event: MouseEvent) => {\n const target = event.target as HTMLElement;\n const anchor = target.closest('a[href]') as HTMLAnchorElement | null;\n if (anchor && isValidAnchor(anchor)) {\n handleNavigation(anchor.href);\n }\n };\n\n // Browser back/forward\n const handlePopState = () => {\n handleNavigation(window.location.href);\n };\n\n // Patch history methods for programmatic navigation\n const patchHistory = (method: 'pushState' | 'replaceState') => {\n const original = window.history[method];\n window.history[method] = new Proxy(original, {\n apply: (target, thisArg, args: [data: unknown, unused: string, url?: string | URL | null]) => {\n const newUrl = args[2];\n if (typeof newUrl === 'string') {\n handleNavigation(new URL(newUrl, window.location.origin).href);\n }\n return target.apply(thisArg, args);\n },\n });\n };\n\n patchHistory('pushState');\n patchHistory('replaceState');\n\n document.addEventListener('click', handleClick);\n window.addEventListener('popstate', handlePopState);\n\n return () => {\n document.removeEventListener('click', handleClick);\n window.removeEventListener('popstate', handlePopState);\n };\n }, []);\n\n // Done on full URL change.\n //\n // Pre-fix this only depended on `pathname`, so search-only navigation\n // (tab switches, filter changes, anything that updates `?…=…` while\n // staying on the same route) started the bar via `pushState` but\n // never completed it — `pathname` never changed, so the effect didn't\n // re-fire. The bar then stuck at the top of the page indefinitely.\n // Keying on `pathname + search` makes start and completion symmetric.\n useEffect(() => {\n const timeout = setTimeout(() => NProgress.done(), delay);\n return () => clearTimeout(timeout);\n }, [pathname, search, delay]);\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\n/**\n * NavigationProgress - Top-of-page progress bar for route transitions.\n *\n * @example\n * ```tsx\n * import { useLocation } from 'react-router-dom';\n * import { NavigationProgress } from '@omnitron-dev/prism';\n *\n * function App() {\n * const { pathname } = useLocation();\n * return (\n * <>\n * <NavigationProgress pathname={pathname} />\n * <Routes>...</Routes>\n * </>\n * );\n * }\n * ```\n */\nexport function NavigationProgress({ pathname, search = '', delay = 100 }: NavigationProgressProps) {\n useEffect(() => {\n NProgress.configure({ showSpinner: false });\n return () => {\n NProgress.done();\n };\n }, []);\n\n useProgressBar(pathname, search, delay);\n\n return <style>{STYLES}</style>;\n}\n"]}
@@ -0,0 +1,523 @@
1
+ import { fromMarkdown } from 'mdast-util-from-markdown';
2
+ import { gfm } from 'micromark-extension-gfm';
3
+ import { gfmFromMarkdown } from 'mdast-util-gfm';
4
+ import { directive } from 'micromark-extension-directive';
5
+ import { directiveFromMarkdown } from 'mdast-util-directive';
6
+ import { mathFromMarkdown } from 'mdast-util-math';
7
+
8
+ // src/components/research/frontmatter.ts
9
+ function splitFrontmatter(source) {
10
+ const opening = /^(?:\uFEFF)?---[ \t]*\r?\n/.exec(source);
11
+ if (!opening) return { body: source, metadata: void 0 };
12
+ let offset = opening[0].length;
13
+ while (offset < source.length) {
14
+ const newline = source.indexOf("\n", offset);
15
+ const end = newline < 0 ? source.length : newline + 1;
16
+ if (/^(?:---|\.\.\.)[ \t]*(?:\r?\n)?$/.test(source.slice(offset, end))) {
17
+ const raw = source.slice(0, end);
18
+ return {
19
+ body: raw.replace(/[^\r\n]/g, " ") + source.slice(end),
20
+ metadata: { format: "yaml", raw, start: 0, end }
21
+ };
22
+ }
23
+ offset = end;
24
+ }
25
+ return { body: source, metadata: void 0 };
26
+ }
27
+ function markdownLineEnding(code) {
28
+ return code !== null && code < -2;
29
+ }
30
+ function markdownSpace(code) {
31
+ return code === -2 || code === -1 || code === 32;
32
+ }
33
+
34
+ // ../../node_modules/micromark-factory-space/index.js
35
+ function factorySpace(effects, ok, type, max) {
36
+ const limit = max ? max - 1 : Infinity;
37
+ let size = 0;
38
+ return start;
39
+ function start(code) {
40
+ if (markdownSpace(code)) {
41
+ effects.enter(type);
42
+ return prefix(code);
43
+ }
44
+ return ok(code);
45
+ }
46
+ function prefix(code) {
47
+ if (markdownSpace(code) && size++ < limit) {
48
+ effects.consume(code);
49
+ return prefix;
50
+ }
51
+ effects.exit(type);
52
+ return ok(code);
53
+ }
54
+ }
55
+
56
+ // ../../node_modules/micromark-extension-math/lib/math-flow.js
57
+ var mathFlow = {
58
+ tokenize: tokenizeMathFenced,
59
+ concrete: true,
60
+ name: "mathFlow"
61
+ };
62
+ var nonLazyContinuation = {
63
+ tokenize: tokenizeNonLazyContinuation,
64
+ partial: true
65
+ };
66
+ function tokenizeMathFenced(effects, ok, nok) {
67
+ const self = this;
68
+ const tail = self.events[self.events.length - 1];
69
+ const initialSize = tail && tail[1].type === "linePrefix" ? tail[2].sliceSerialize(tail[1], true).length : 0;
70
+ let sizeOpen = 0;
71
+ return start;
72
+ function start(code) {
73
+ effects.enter("mathFlow");
74
+ effects.enter("mathFlowFence");
75
+ effects.enter("mathFlowFenceSequence");
76
+ return sequenceOpen(code);
77
+ }
78
+ function sequenceOpen(code) {
79
+ if (code === 36) {
80
+ effects.consume(code);
81
+ sizeOpen++;
82
+ return sequenceOpen;
83
+ }
84
+ if (sizeOpen < 2) {
85
+ return nok(code);
86
+ }
87
+ effects.exit("mathFlowFenceSequence");
88
+ return factorySpace(effects, metaBefore, "whitespace")(code);
89
+ }
90
+ function metaBefore(code) {
91
+ if (code === null || markdownLineEnding(code)) {
92
+ return metaAfter(code);
93
+ }
94
+ effects.enter("mathFlowFenceMeta");
95
+ effects.enter("chunkString", {
96
+ contentType: "string"
97
+ });
98
+ return meta(code);
99
+ }
100
+ function meta(code) {
101
+ if (code === null || markdownLineEnding(code)) {
102
+ effects.exit("chunkString");
103
+ effects.exit("mathFlowFenceMeta");
104
+ return metaAfter(code);
105
+ }
106
+ if (code === 36) {
107
+ return nok(code);
108
+ }
109
+ effects.consume(code);
110
+ return meta;
111
+ }
112
+ function metaAfter(code) {
113
+ effects.exit("mathFlowFence");
114
+ if (self.interrupt) {
115
+ return ok(code);
116
+ }
117
+ return effects.attempt(nonLazyContinuation, beforeNonLazyContinuation, after)(code);
118
+ }
119
+ function beforeNonLazyContinuation(code) {
120
+ return effects.attempt({
121
+ tokenize: tokenizeClosingFence,
122
+ partial: true
123
+ }, after, contentStart)(code);
124
+ }
125
+ function contentStart(code) {
126
+ return (initialSize ? factorySpace(effects, beforeContentChunk, "linePrefix", initialSize + 1) : beforeContentChunk)(code);
127
+ }
128
+ function beforeContentChunk(code) {
129
+ if (code === null) {
130
+ return after(code);
131
+ }
132
+ if (markdownLineEnding(code)) {
133
+ return effects.attempt(nonLazyContinuation, beforeNonLazyContinuation, after)(code);
134
+ }
135
+ effects.enter("mathFlowValue");
136
+ return contentChunk(code);
137
+ }
138
+ function contentChunk(code) {
139
+ if (code === null || markdownLineEnding(code)) {
140
+ effects.exit("mathFlowValue");
141
+ return beforeContentChunk(code);
142
+ }
143
+ effects.consume(code);
144
+ return contentChunk;
145
+ }
146
+ function after(code) {
147
+ effects.exit("mathFlow");
148
+ return ok(code);
149
+ }
150
+ function tokenizeClosingFence(effects2, ok2, nok2) {
151
+ let size = 0;
152
+ return factorySpace(effects2, beforeSequenceClose, "linePrefix", self.parser.constructs.disable.null.includes("codeIndented") ? void 0 : 4);
153
+ function beforeSequenceClose(code) {
154
+ effects2.enter("mathFlowFence");
155
+ effects2.enter("mathFlowFenceSequence");
156
+ return sequenceClose(code);
157
+ }
158
+ function sequenceClose(code) {
159
+ if (code === 36) {
160
+ size++;
161
+ effects2.consume(code);
162
+ return sequenceClose;
163
+ }
164
+ if (size < sizeOpen) {
165
+ return nok2(code);
166
+ }
167
+ effects2.exit("mathFlowFenceSequence");
168
+ return factorySpace(effects2, afterSequenceClose, "whitespace")(code);
169
+ }
170
+ function afterSequenceClose(code) {
171
+ if (code === null || markdownLineEnding(code)) {
172
+ effects2.exit("mathFlowFence");
173
+ return ok2(code);
174
+ }
175
+ return nok2(code);
176
+ }
177
+ }
178
+ }
179
+ function tokenizeNonLazyContinuation(effects, ok, nok) {
180
+ const self = this;
181
+ return start;
182
+ function start(code) {
183
+ if (code === null) {
184
+ return ok(code);
185
+ }
186
+ effects.enter("lineEnding");
187
+ effects.consume(code);
188
+ effects.exit("lineEnding");
189
+ return lineStart;
190
+ }
191
+ function lineStart(code) {
192
+ return self.parser.lazy[self.now().line] ? nok(code) : ok(code);
193
+ }
194
+ }
195
+
196
+ // ../../node_modules/micromark-extension-math/lib/math-text.js
197
+ function mathText(options) {
198
+ const options_ = options || {};
199
+ let single = options_.singleDollarTextMath;
200
+ if (single === null || single === void 0) {
201
+ single = true;
202
+ }
203
+ return {
204
+ tokenize: tokenizeMathText,
205
+ resolve: resolveMathText,
206
+ previous,
207
+ name: "mathText"
208
+ };
209
+ function tokenizeMathText(effects, ok, nok) {
210
+ let sizeOpen = 0;
211
+ let size;
212
+ let token;
213
+ return start;
214
+ function start(code) {
215
+ effects.enter("mathText");
216
+ effects.enter("mathTextSequence");
217
+ return sequenceOpen(code);
218
+ }
219
+ function sequenceOpen(code) {
220
+ if (code === 36) {
221
+ effects.consume(code);
222
+ sizeOpen++;
223
+ return sequenceOpen;
224
+ }
225
+ if (sizeOpen < 2 && !single) {
226
+ return nok(code);
227
+ }
228
+ effects.exit("mathTextSequence");
229
+ return between(code);
230
+ }
231
+ function between(code) {
232
+ if (code === null) {
233
+ return nok(code);
234
+ }
235
+ if (code === 36) {
236
+ token = effects.enter("mathTextSequence");
237
+ size = 0;
238
+ return sequenceClose(code);
239
+ }
240
+ if (code === 32) {
241
+ effects.enter("space");
242
+ effects.consume(code);
243
+ effects.exit("space");
244
+ return between;
245
+ }
246
+ if (markdownLineEnding(code)) {
247
+ effects.enter("lineEnding");
248
+ effects.consume(code);
249
+ effects.exit("lineEnding");
250
+ return between;
251
+ }
252
+ effects.enter("mathTextData");
253
+ return data(code);
254
+ }
255
+ function data(code) {
256
+ if (code === null || code === 32 || code === 36 || markdownLineEnding(code)) {
257
+ effects.exit("mathTextData");
258
+ return between(code);
259
+ }
260
+ effects.consume(code);
261
+ return data;
262
+ }
263
+ function sequenceClose(code) {
264
+ if (code === 36) {
265
+ effects.consume(code);
266
+ size++;
267
+ return sequenceClose;
268
+ }
269
+ if (size === sizeOpen) {
270
+ effects.exit("mathTextSequence");
271
+ effects.exit("mathText");
272
+ return ok(code);
273
+ }
274
+ token.type = "mathTextData";
275
+ return data(code);
276
+ }
277
+ }
278
+ }
279
+ function resolveMathText(events) {
280
+ let tailExitIndex = events.length - 4;
281
+ let headEnterIndex = 3;
282
+ let index;
283
+ let enter;
284
+ if ((events[headEnterIndex][1].type === "lineEnding" || events[headEnterIndex][1].type === "space") && (events[tailExitIndex][1].type === "lineEnding" || events[tailExitIndex][1].type === "space")) {
285
+ index = headEnterIndex;
286
+ while (++index < tailExitIndex) {
287
+ if (events[index][1].type === "mathTextData") {
288
+ events[tailExitIndex][1].type = "mathTextPadding";
289
+ events[headEnterIndex][1].type = "mathTextPadding";
290
+ headEnterIndex += 2;
291
+ tailExitIndex -= 2;
292
+ break;
293
+ }
294
+ }
295
+ }
296
+ index = headEnterIndex - 1;
297
+ tailExitIndex++;
298
+ while (++index <= tailExitIndex) {
299
+ if (enter === void 0) {
300
+ if (index !== tailExitIndex && events[index][1].type !== "lineEnding") {
301
+ enter = index;
302
+ }
303
+ } else if (index === tailExitIndex || events[index][1].type === "lineEnding") {
304
+ events[enter][1].type = "mathTextData";
305
+ if (index !== enter + 2) {
306
+ events[enter][1].end = events[index - 1][1].end;
307
+ events.splice(enter + 2, index - enter - 2);
308
+ tailExitIndex -= index - enter - 2;
309
+ index = enter + 2;
310
+ }
311
+ enter = void 0;
312
+ }
313
+ }
314
+ return events;
315
+ }
316
+ function previous(code) {
317
+ return code !== 36 || this.events[this.events.length - 1][1].type === "characterEscape";
318
+ }
319
+
320
+ // ../../node_modules/micromark-extension-math/lib/syntax.js
321
+ function math(options) {
322
+ return {
323
+ flow: {
324
+ [36]: mathFlow
325
+ },
326
+ text: {
327
+ [36]: mathText(options)
328
+ }
329
+ };
330
+ }
331
+ var researchLimits = { source: 262144, nodes: 2e4, depth: 64, block: 2e4 };
332
+ var str = (v) => typeof v === "string" ? v : "";
333
+ var plain = (n) => str(n.value) || (n.children ?? []).map(plain).join("");
334
+ function parseResearchMarkdown(source, prefix = "research", sourceProfile = "research") {
335
+ if (source.length > researchLimits.source) throw new Error("document_limit");
336
+ if (!/^[a-zA-Z][\w-]{0,100}$/.test(prefix)) throw new Error("invalid_document_prefix");
337
+ const { body, metadata } = splitFrontmatter(source);
338
+ const tree = fromMarkdown(body, {
339
+ extensions: [gfm(), directive(), math()],
340
+ mdastExtensions: [gfmFromMarkdown(), directiveFromMarkdown(), mathFromMarkdown()]
341
+ });
342
+ const headings = [], diagnostics = [];
343
+ const ids = /* @__PURE__ */ new Set();
344
+ let count = 0;
345
+ const definitions = /* @__PURE__ */ new Map();
346
+ const collect = (n, depth) => {
347
+ if (++count > researchLimits.nodes || depth > researchLimits.depth) throw new Error("structure_limit");
348
+ if (n.type === "definition") definitions.set(str(n.identifier), n);
349
+ for (const c of n.children ?? []) collect(c, depth + 1);
350
+ };
351
+ collect(tree, 0);
352
+ const fallback = (n, code, inline = false) => {
353
+ diagnostics.push({ code, line: n.position?.start.line ?? 1 });
354
+ const raw = source.slice(n.position?.start.offset ?? 0, n.position?.end.offset ?? 0) || plain(n);
355
+ return inline ? { type: "text", text: raw } : { type: "codeBlock", content: [{ type: "text", text: raw }] };
356
+ };
357
+ const convert = (n, marks = []) => {
358
+ const children = () => (n.children ?? []).flatMap((c) => convert(c, marks));
359
+ const node = (type, attrs, content = children()) => [
360
+ {
361
+ type,
362
+ attrs: { ...attrs, source: n.position },
363
+ content
364
+ }
365
+ ];
366
+ switch (n.type) {
367
+ case "root":
368
+ return children();
369
+ case "definition":
370
+ return [];
371
+ case "text":
372
+ return [{ type: "text", text: str(n.value), marks }];
373
+ case "inlineCode":
374
+ return [{ type: "text", text: str(n.value), marks: [...marks, { type: "code" }] }];
375
+ case "strong":
376
+ case "emphasis":
377
+ case "delete":
378
+ return (n.children ?? []).flatMap(
379
+ (c) => convert(c, [...marks, { type: { strong: "bold", emphasis: "italic", delete: "strike" }[n.type] }])
380
+ );
381
+ case "paragraph":
382
+ return node("paragraph");
383
+ case "heading": {
384
+ const explicit = sourceProfile === "docusaurus" ? /\s*\{#([^\s{}]+)\}\s*$/.exec(plain(n)) : null;
385
+ const title = explicit ? plain(n).slice(0, explicit.index) : plain(n);
386
+ const base = `${prefix}-${explicit?.[1] ?? (title.normalize("NFKC").toLowerCase().replace(/[^\p{L}\p{N}]+/gu, "-").replace(/^-|-$/g, "") || "section")}`;
387
+ let id = base, suffix = 1;
388
+ while (ids.has(id)) id = `${base}-${++suffix}`;
389
+ if (explicit && id !== base)
390
+ diagnostics.push({ code: "duplicate_heading_id", line: n.position?.start.line ?? 1 });
391
+ ids.add(id);
392
+ headings.push({ id, title, level: Number(n.depth) });
393
+ let content = n.children ?? [];
394
+ if (explicit) {
395
+ const last = content.at(-1);
396
+ if (last?.type === "text")
397
+ content = [
398
+ ...content.slice(0, -1),
399
+ { ...last, value: str(last.value).replace(/\s*\{#[^\s{}]+\}\s*$/, "") }
400
+ ];
401
+ }
402
+ return node(
403
+ "heading",
404
+ { level: n.depth, id },
405
+ content.flatMap((c) => convert(c, marks))
406
+ );
407
+ }
408
+ case "linkReference":
409
+ case "imageReference": {
410
+ const def = definitions.get(str(n.identifier));
411
+ if (!def) return [fallback(n, "unresolved_reference", true)];
412
+ return convert(
413
+ { ...n, type: n.type === "linkReference" ? "link" : "image", url: def.url, title: def.title },
414
+ marks
415
+ );
416
+ }
417
+ case "link":
418
+ return (n.children ?? []).flatMap(
419
+ (c) => convert(c, [
420
+ ...marks,
421
+ {
422
+ type: "link",
423
+ attrs: {
424
+ href: sourceProfile === "docusaurus" && str(n.url).startsWith("#") ? `#${prefix}-${str(n.url).slice(1)}` : str(n.url)
425
+ }
426
+ }
427
+ ])
428
+ );
429
+ case "image":
430
+ return node("image", { src: str(n.url), alt: str(n.alt), title: str(n.title) }, []);
431
+ case "break":
432
+ return node("hardBreak", {}, []);
433
+ case "blockquote":
434
+ return node("blockquote");
435
+ case "thematicBreak":
436
+ return node("horizontalRule", {}, []);
437
+ case "list":
438
+ return node(
439
+ (n.children ?? []).some((c) => typeof c.checked === "boolean") ? "taskList" : n.ordered ? "orderedList" : "bulletList",
440
+ { start: n.start }
441
+ );
442
+ case "listItem":
443
+ return node(typeof n.checked === "boolean" ? "taskItem" : "listItem", { checked: n.checked });
444
+ case "table":
445
+ return node(
446
+ "table",
447
+ {},
448
+ (n.children ?? []).map((row, i) => ({
449
+ type: "tableRow",
450
+ content: (row.children ?? []).map((cell) => ({
451
+ type: i === 0 ? "tableHeader" : "tableCell",
452
+ content: [{ type: "paragraph", content: (cell.children ?? []).flatMap((c) => convert(c)) }]
453
+ }))
454
+ }))
455
+ );
456
+ case "inlineMath":
457
+ case "math":
458
+ return node(n.type === "math" ? "mathBlock" : "mathInline", { tex: str(n.value) }, []).map((mathNode) => ({
459
+ ...mathNode,
460
+ marks
461
+ }));
462
+ case "code": {
463
+ const language = str(n.lang).toLowerCase(), codeText = str(n.value);
464
+ if (["mermaid", "pintora", "prism"].includes(language) && codeText.length > researchLimits.block)
465
+ return [fallback(n, "block_limit")];
466
+ if (language === "mermaid" || language === "pintora")
467
+ return node("diagram", { engine: language, code: codeText }, []);
468
+ if (language === "prism") {
469
+ try {
470
+ return node("researchWidget", { descriptor: JSON.parse(codeText) }, []);
471
+ } catch {
472
+ return [fallback(n, "invalid_widget_json")];
473
+ }
474
+ }
475
+ return node("codeBlock", { language, title: str(n.meta) }, [{ type: "text", text: codeText }]);
476
+ }
477
+ case "containerDirective":
478
+ case "leafDirective": {
479
+ const name = str(n.name), attrs = n.attributes ?? {};
480
+ if (["note", "tip", "warning", "danger", "info", "caution"].includes(name))
481
+ return node("admonition", { kind: name, title: attrs.title || name });
482
+ if (name === "tabs") {
483
+ if ((n.children ?? []).some((c) => c.type !== "containerDirective" || c.name !== "tab"))
484
+ return [fallback(n, "invalid_tabs")];
485
+ return node(
486
+ "tabs",
487
+ {},
488
+ (n.children ?? []).flatMap((c) => convert(c))
489
+ );
490
+ }
491
+ if (name === "tab") return node("tabItem", { label: attrs.label || attrs.value || "Tab" });
492
+ if (name === "widget")
493
+ return node(
494
+ "researchWidget",
495
+ {
496
+ descriptor: {
497
+ type: attrs.type,
498
+ version: Number(attrs.version || 1),
499
+ props: Object.fromEntries(Object.entries(attrs).filter(([key]) => key !== "type" && key !== "version"))
500
+ }
501
+ },
502
+ []
503
+ );
504
+ return [fallback(n, "unknown_directive")];
505
+ }
506
+ case "html":
507
+ return [fallback(n, "raw_html", true)];
508
+ default:
509
+ return [
510
+ fallback(
511
+ n,
512
+ `unsupported_${n.type}`,
513
+ n.type.startsWith("inline") || n.type === "textDirective" || n.type === "footnoteReference"
514
+ )
515
+ ];
516
+ }
517
+ };
518
+ return { format: "prism-research/1", metadata, doc: { type: "doc", content: convert(tree) }, headings, diagnostics };
519
+ }
520
+
521
+ export { math, parseResearchMarkdown, researchLimits, splitFrontmatter };
522
+ //# sourceMappingURL=chunk-TEIGUOWN.js.map
523
+ //# sourceMappingURL=chunk-TEIGUOWN.js.map