@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
@@ -1,23 +1,49 @@
1
- export { Accordion, AdminDataTable, Alert, AmountCell, AnimateBorder, Avatar, Badge, BooleanLabel, Breadcrumbs, Card, CardGrid, CardSection, CardSkeleton, Carousel, ChangelogEntry, ChangelogTimeline, Chart, ChartLegends, ChartLoading, CircularProgress, CommandPalette, ConfirmDialog, ContentRenderer, ContextMenu, CountBadge, CountdownRing, CountrySelect, CustomAvatarGroup, DEFAULT_LIGHTBOX_LABELS, DEFAULT_SPONSORED_SLOT_LABELS, DateRangeInput, DateRangePicker, DeadlineChip, DeleteDialog, Drawer, DurationPicker, FilterToolbar, FlagIcon, FormAlert, Image, ImageWithDefault, InlineAlert, Label, Lightbox, LinearProgress, LoadingScreen, Markdown, MegaMenuHorizontal as MegaMenu, MegaMenuHorizontal, MegaMenuMobile, MegaMenuVertical, Menu, MotionLazy, Nav, NavArrow, NavCard, NavCardGrid, NavIcon, NavInfo, NavItem, NavItemBase, NavLi, NavList, NavSectionVertical as NavSection, NavSectionHorizontal, NavSectionMini, NavSectionVertical, NavSubList, NavSubheader, NavTexts, NavUl, NavigationProgress, PageContent, ProgressBar, Rail, ScrollToTop, SettingsDrawer, SettingsProvider, SimpleAccordion, SimpleSnackbar, Skeleton, SnackbarProvider, Spinner, SplashScreen, SponsoredSlot, StatCard, StatusChip, StatusDot, StatusLabel, Stepper, StepperActions, SvgColor, TabPanel, Table, TableSkeleton, Tabs, TagCloud, Tooltip, VirtualList, animateBorderClasses, carouselClasses, chartClasses, createIconComponent, deadlineUrgency, formatDateString, getNavCssVars, htmlToMarkdown, isMarkdownContent, lightboxClasses, megaMenuClasses, megaMenuCssVars, navSectionClasses, navSectionCssVars, parseDateString, relativeTimeLeft, useAccordion, useCarousel, useChart, useDateRangePicker, useLightbox, useMenu, useSettings, useSettingsDrawer, useSnackbar, useStepper, useTable, useTabs } from '../chunk-LSPFFEJT.js';
2
- export { Map, MapCoverageLayer, Layer as MapLayer, MapMarker, MapPlaceSearch, MapPointPicker, Popup as MapPopup, Source as MapSource } from '../chunk-52PQL67Q.js';
3
- export { DocLayout, DocSectionNav, ScrollSpyProvider, ScrollSpySection, useScrollSpy } from '../chunk-FF5RF32O.js';
4
- export { ContentRoot, TipTapRenderer, contentClasses, registerTipTapNode } from '../chunk-GUGTDURV.js';
5
- export { DocSidebar } from '../chunk-YHE7HXSG.js';
6
- export { DEFAULT_EDITOR_LABELS, Editor, editorClasses, resolveToolbar } from '../chunk-LOY2NPCO.js';
7
- export { Emoji, EmojiPicker } from '../chunk-SNZK5X6F.js';
8
- export { CustomPopover, usePopover } from '../chunk-DRFNMZLG.js';
9
- import '../chunk-OKTLA23Q.js';
10
- import '../chunk-YSIG2XYH.js';
11
- import '../chunk-KQ67XB6T.js';
12
- import '../chunk-75FQ5IW3.js';
13
- import '../chunk-JSQTYDPG.js';
14
- import '../chunk-AD4W7HYC.js';
15
- import '../chunk-XIXSSI3B.js';
16
- export { Scrollbar } from '../chunk-PXXPLHIY.js';
17
- import '../chunk-HOXFSQUV.js';
18
- export { EmptyContent, ErrorBoundary, Field, FieldAutocomplete, FieldCheckbox, FieldCode, FieldCountrySelect, FieldCustomEditor, FieldDatePicker, FieldDateTimePicker, FieldEditor, FieldMultiCheckbox, FieldMultiSelect, FieldMultiSwitch, FieldNumber, FieldPhone, FieldRadio, FieldRating, FieldSelect, FieldSlider, FieldSwitch, FieldText, FieldTimePicker, FieldUpload, FieldUploadAvatar, FieldUploadBox, LoadingEmptyContent, SearchEmptyContent, SearchInput, getErrorLocation, parseStackTrace, useErrorBoundary } from '../chunk-GMIE6III.js';
19
- import '../chunk-BRDWQVRT.js';
20
- import '../chunk-PGHEP4JD.js';
21
- import '../chunk-BJE2AKD4.js';
1
+ "use client";
2
+ export { Accordion, Avatar, Badge, Carousel, ChangelogEntry, ChangelogTimeline, CircularProgress, ContentRenderer, ContextMenu, CountBadge, CountdownRing, CountrySelect, CustomAvatarGroup, DEFAULT_LIGHTBOX_LABELS, DEFAULT_SPONSORED_SLOT_LABELS, DeadlineChip, Drawer, DurationPicker, FlagIcon, Image, ImageWithDefault, Lightbox, LinearProgress, Markdown, MegaMenuHorizontal as MegaMenu, MegaMenuHorizontal, MegaMenuMobile, MegaMenuVertical, Menu, Nav, NavArrow, NavCard, NavCardGrid, NavIcon, NavInfo, NavItem, NavItemBase, NavLi, NavList, NavSectionVertical as NavSection, NavSectionHorizontal, NavSectionMini, NavSectionVertical, NavSubList, NavSubheader, NavTexts, NavUl, ProgressBar, Rail, SettingsDrawer, SettingsProvider, SimpleAccordion, SponsoredSlot, StatusDot, SvgColor, TagCloud, Tooltip, VirtualList, carouselClasses, createIconComponent, deadlineUrgency, formatDateString, getNavCssVars, htmlToMarkdown, isMarkdownContent, lightboxClasses, megaMenuClasses, megaMenuCssVars, navSectionClasses, navSectionCssVars, parseDateString, relativeTimeLeft, useAccordion, useCarousel, useDateRangePicker, useLightbox, useMenu, useSettings, useSettingsDrawer } from '../chunk-D4GFAJAZ.js';
3
+ export { DocLayout, DocSectionNav, ScrollSpyProvider, ScrollSpySection, useScrollSpy } from '../chunk-E7WM2RXA.js';
4
+ export { ContentRoot, TipTapRenderer, contentClasses, registerTipTapNode } from '../chunk-4B2LTPK2.js';
5
+ export { DocSidebar } from '../chunk-7ATBURW2.js';
6
+ export { DEFAULT_EDITOR_LABELS, Editor, editorClasses, resolveToolbar } from '../chunk-2E67PQ4T.js';
7
+ export { Emoji, EmojiPicker } from '../chunk-Z2AN43YU.js';
8
+ export { ScrollToTop } from '../chunk-NFJ7CPG3.js';
9
+ export { CardSkeleton, Skeleton, TableSkeleton } from '../chunk-NTREGTG7.js';
10
+ export { SimpleSnackbar, SnackbarProvider, useSnackbar } from '../chunk-G2GANYMW.js';
11
+ export { Stepper, StepperActions, useStepper } from '../chunk-RPOGINR5.js';
12
+ export { Table, useTable } from '../chunk-JTIUGPW5.js';
13
+ export { TabPanel, Tabs, useTabs } from '../chunk-FOGY3HA4.js';
14
+ export { Map, MapCoverageLayer, Layer as MapLayer, MapMarker, MapPlaceSearch, MapPointPicker, Popup as MapPopup, Source as MapSource } from '../chunk-3VSM7NZG.js';
15
+ export { BooleanLabel, Label, StatusLabel } from '../chunk-URFQX3I6.js';
16
+ export { LoadingScreen, Spinner, SplashScreen } from '../chunk-AKLRKCYH.js';
17
+ export { NavigationProgress } from '../chunk-SSEHL5VP.js';
18
+ export { CardGrid, PageContent } from '../chunk-2UYRW6X3.js';
19
+ import '../chunk-YHM6GIHV.js';
20
+ export { AdminDataTable, AmountCell, DateRangeInput, DateRangePicker, FilterToolbar, StatusChip } from '../chunk-F6RZ7LW6.js';
21
+ export { TableViewport } from '../chunk-2KG2NI73.js';
22
+ export { SearchInput } from '../chunk-CT46KJOR.js';
23
+ export { Alert, FormAlert, InlineAlert } from '../chunk-XBYMG4QK.js';
24
+ export { AnimateBorder, MotionLazy, animateBorderClasses } from '../chunk-36C5H56C.js';
25
+ export { Breadcrumbs } from '../chunk-VG6FOMOH.js';
26
+ export { Card, CardSection, StatCard } from '../chunk-ZNWHMQRM.js';
27
+ export { Chart, ChartLegends, ChartLoading, chartClasses, useChart } from '../chunk-2AB7VGPW.js';
28
+ import '../chunk-LH4ZZZYB.js';
29
+ export { CommandPalette } from '../chunk-WD4N72DL.js';
30
+ export { ConfirmDialog, DeleteDialog } from '../chunk-36FOXX25.js';
31
+ export { CustomPopover, usePopover } from '../chunk-VUKOT432.js';
32
+ import '../chunk-UEINJFLS.js';
33
+ import '../chunk-ZRJYQN6Y.js';
34
+ import '../chunk-RSWVYIXK.js';
35
+ import '../chunk-TZHWYT34.js';
36
+ import '../chunk-TZWHELY4.js';
37
+ import '../chunk-NFPOIHD4.js';
38
+ import '../chunk-ZYI3MHLE.js';
39
+ import '../chunk-NJM5AVBM.js';
40
+ export { Scrollbar } from '../chunk-4Q5L7LDG.js';
41
+ import '../chunk-IRYU3NTG.js';
42
+ export { Field, FieldAutocomplete, FieldCheckbox, FieldCode, FieldCountrySelect, FieldCustomEditor, FieldDatePicker, FieldDateTimePicker, FieldEditor, FieldMultiCheckbox, FieldMultiSelect, FieldMultiSwitch, FieldNumber, FieldPhone, FieldRadio, FieldRating, FieldSelect, FieldSlider, FieldSwitch, FieldText, FieldTimePicker, FieldUpload, FieldUploadAvatar, FieldUploadBox } from '../chunk-LFWKGNCX.js';
43
+ export { EmptyContent, LoadingEmptyContent, SearchEmptyContent } from '../chunk-6IANOSMD.js';
44
+ export { ErrorBoundary, getErrorLocation, parseStackTrace, useErrorBoundary } from '../chunk-I6DILPFE.js';
45
+ import '../chunk-4R7EZ7GQ.js';
46
+ import '../chunk-VQVVHMPG.js';
47
+ import '../chunk-D5J3KW6Q.js';
22
48
  //# sourceMappingURL=index.js.map
23
49
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":";","file":"index.js"}
@@ -1 +1 @@
1
- {"version":3,"file":"edge-labels.d.ts","sourceRoot":"","sources":["../../../src/components/knowledge-graph/edge-labels.tsx"],"names":[],"mappings":"AAsBA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAkC,KAAK,WAAW,EAAkB,MAAM,mBAAmB,CAAC;AAErG,eAAO,MAAM,iBAAiB,gDAA6C,CAAC;AAC5E,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,QAO3D;AAgED,gFAAgF;AAChF,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,GAAG,EACH,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,YAAY,GACb,EAAE;IACD,KAAK,EAAE,cAAc,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB,+BA6GA"}
1
+ {"version":3,"file":"edge-labels.d.ts","sourceRoot":"","sources":["../../../src/components/knowledge-graph/edge-labels.tsx"],"names":[],"mappings":"AAsBA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAkC,KAAK,WAAW,EAAkB,MAAM,mBAAmB,CAAC;AAErG,eAAO,MAAM,iBAAiB,gDAA6C,CAAC;AAC5E,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,QAQ3D;AAgED,gFAAgF;AAChF,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,GAAG,EACH,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,YAAY,GACb,EAAE;IACD,KAAK,EAAE,cAAc,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB,+BA6GA"}
@@ -1,10 +1,11 @@
1
- import { DocSidebar } from '../../chunk-YHE7HXSG.js';
2
- import { PanelLayout } from '../../chunk-PFT2BNYO.js';
3
- import '../../chunk-XIXSSI3B.js';
4
- import '../../chunk-PXXPLHIY.js';
5
- import '../../chunk-HOXFSQUV.js';
6
- import { ZoomInIcon, ZoomOutIcon, FitViewIcon } from '../../chunk-PGHEP4JD.js';
7
- import '../../chunk-BJE2AKD4.js';
1
+ "use client";
2
+ import { DocSidebar } from '../../chunk-7ATBURW2.js';
3
+ import { PanelLayout } from '../../chunk-KPY7TA4D.js';
4
+ import '../../chunk-NJM5AVBM.js';
5
+ import '../../chunk-4Q5L7LDG.js';
6
+ import '../../chunk-IRYU3NTG.js';
7
+ import { ZoomInIcon, ZoomOutIcon, FitViewIcon } from '../../chunk-VQVVHMPG.js';
8
+ import '../../chunk-D5J3KW6Q.js';
8
9
  import { createContext, memo, useState, useMemo, useRef, useEffect, useCallback, useSyncExternalStore, useLayoutEffect, useContext } from 'react';
9
10
  import { Handle, Position, MarkerType, applyNodeChanges, ReactFlow, Background, getSmoothStepPath, BaseEdge, useNodes, useNodesInitialized, useReactFlow, useStore, EdgeLabelRenderer, Controls, ControlButton } from '@xyflow/react';
10
11
  import Box2 from '@mui/material/Box';
@@ -138,7 +139,7 @@ function placeEdgeLabels(labels, nodes, gap = 8) {
138
139
  });
139
140
  }
140
141
  function enclosingRect(rects) {
141
- if (!rects.length) return;
142
+ if (!rects.length) return void 0;
142
143
  let x = Infinity, y = Infinity, right = -Infinity, bottom = -Infinity;
143
144
  for (const r of rects) {
144
145
  x = Math.min(x, r.x);
@@ -151,11 +152,12 @@ function enclosingRect(rects) {
151
152
  var EdgeLabelsContext = createContext(null);
152
153
  function useEdgeLabel(anchor) {
153
154
  const store = useContext(EdgeLabelsContext);
155
+ const { id, text, x, y } = anchor ?? {};
154
156
  useLayoutEffect(() => {
155
- if (!store || !anchor) return;
156
- store.set(anchor);
157
- return () => store.remove(anchor.id);
158
- }, [store, anchor?.id, anchor?.text, anchor?.x, anchor?.y]);
157
+ if (!store || id === void 0 || text === void 0 || x === void 0 || y === void 0) return void 0;
158
+ store.set({ id, text, x, y });
159
+ return () => store.remove(id);
160
+ }, [store, id, text, x, y]);
159
161
  }
160
162
  function MeasuredLabel({
161
163
  anchor,
@@ -166,7 +168,7 @@ function MeasuredLabel({
166
168
  const ref = useRef(null);
167
169
  useLayoutEffect(() => {
168
170
  const element = ref.current;
169
- if (!element) return;
171
+ if (!element) return void 0;
170
172
  const measure = (width, height) => {
171
173
  if (width > 0 && height > 0) onSize(anchor.id, { width: Math.ceil(width), height: Math.ceil(height) });
172
174
  };
@@ -400,7 +402,7 @@ function Badges({ badges }) {
400
402
  index
401
403
  )) });
402
404
  }
403
- var EntityNode = memo(function EntityNode2({ data, selected }) {
405
+ var EntityNode = memo(function EntityNodeView({ data, selected }) {
404
406
  return /* @__PURE__ */ jsxs(
405
407
  "div",
406
408
  {
@@ -550,7 +552,7 @@ function KnowledgeGraph({
550
552
  (changes) => {
551
553
  const selectedChange = [...changes].reverse().find((change) => change.type === "select" && change.selected);
552
554
  if (selectedChange?.type === "select") {
553
- const node = graph.nodes.find((node2) => node2.id === selectedChange.id);
555
+ const node = graph.nodes.find((candidate) => candidate.id === selectedChange.id);
554
556
  if (node) choose(node.selection);
555
557
  } else {
556
558
  const current = selectionRef.current;
@@ -559,7 +561,7 @@ function KnowledgeGraph({
559
561
  choose(void 0);
560
562
  }
561
563
  const geometry = changes.filter((change) => change.type !== "remove" && change.type !== "select");
562
- if (geometry.length) setNodes((nodes2) => applyNodeChanges(geometry, nodes2));
564
+ if (geometry.length) setNodes((previous) => applyNodeChanges(geometry, previous));
563
565
  },
564
566
  [graph, choose]
565
567
  );
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/knowledge-graph/model.ts","../../../src/components/knowledge-graph/label-layout.ts","../../../src/components/knowledge-graph/edge-labels.tsx","../../../src/components/knowledge-graph/label-store.ts","../../../src/components/knowledge-graph/graph.tsx"],"names":["Box","jsx","EntityNode","jsxs","useState","useMemo","useRef","useCallback","node","nodes","Fragment"],"mappings":"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","file":"index.js","sourcesContent":["/** Host-supplied observations; badges do not change graph semantics or entailment. */\nexport interface KnowledgeBadge {\n label: string;\n tone?: 'default' | 'info' | 'success' | 'warning' | 'error';\n}\n/** Typed incidence projection. Layout never changes the graph or creates an entailment. */\nexport interface KnowledgeEntity {\n id: string;\n kind: string;\n label: string;\n description?: string;\n badges?: readonly KnowledgeBadge[];\n}\nexport interface KnowledgePort {\n entity: string;\n role: string;\n}\nexport interface KnowledgeRelation {\n id: string;\n kind: string;\n label: string;\n inputs: readonly KnowledgePort[];\n outputs: readonly KnowledgePort[];\n description?: string;\n badges?: readonly KnowledgeBadge[];\n}\nexport interface KnowledgeGraphData {\n entities: readonly KnowledgeEntity[];\n relations: readonly KnowledgeRelation[];\n}\nexport type KnowledgeSelection = { type: 'entity' | 'relation'; id: string };\nexport interface KnowledgeProjection {\n entities: KnowledgeEntity[];\n relations: KnowledgeRelation[];\n total: number;\n omittedRelations: number;\n limited: boolean;\n}\nexport function validateKnowledgeGraph(data: KnowledgeGraphData): void {\n const ids = new Set<string>();\n for (const entity of data.entities) {\n if (!entity.id || !entity.kind || !entity.label || ids.has(entity.id)) throw Error('invalid_entity');\n ids.add(entity.id);\n }\n const relations = new Set<string>();\n for (const relation of data.relations) {\n if (\n !relation.id ||\n !relation.kind ||\n !relation.label ||\n relations.has(relation.id) ||\n !relation.inputs.length ||\n !relation.outputs.length\n )\n throw Error('invalid_relation');\n relations.add(relation.id);\n for (const port of [...relation.inputs, ...relation.outputs])\n if (!ids.has(port.entity) || !port.role) throw Error('dangling_port');\n }\n}\n/** A relation is included atomically, with all of its ordered input/output occurrences.\n * A tight budget reports omitted relations; it never renders half a justification. */\nexport function projectKnowledgeGraph(\n data: KnowledgeGraphData,\n selection: KnowledgeSelection | undefined,\n budget = 300\n): KnowledgeProjection {\n if (!Number.isSafeInteger(budget) || budget < 1) throw Error('invalid_graph_budget');\n const total = data.entities.length + data.relations.length;\n if (!selection && total <= budget)\n return { entities: [...data.entities], relations: [...data.relations], total, omittedRelations: 0, limited: false };\n if (!selection) return { entities: [], relations: [], total, omittedRelations: data.relations.length, limited: true };\n const selectedEntities = new Set<string>(),\n selectedRelations: KnowledgeRelation[] = [];\n if (selection.type === 'entity' && data.entities.some((e) => e.id === selection.id))\n selectedEntities.add(selection.id);\n const candidates =\n selection.type === 'relation'\n ? data.relations.filter((r) => r.id === selection.id)\n : data.relations.filter((r) => [...r.inputs, ...r.outputs].some((p) => p.entity === selection.id));\n let omittedRelations = 0;\n for (const relation of candidates) {\n const endpoints = new Set([...relation.inputs, ...relation.outputs].map((p) => p.entity));\n const additional = [...endpoints].filter((id) => !selectedEntities.has(id)).length + 1;\n if (selectedEntities.size + selectedRelations.length + additional > budget) {\n omittedRelations++;\n continue;\n }\n for (const id of endpoints) selectedEntities.add(id);\n selectedRelations.push(relation);\n }\n return {\n entities: data.entities.filter((e) => selectedEntities.has(e.id)),\n relations: selectedRelations,\n total,\n omittedRelations,\n limited: total !== selectedEntities.size + selectedRelations.length,\n };\n}\nexport const entityNodeId = (id: string) => JSON.stringify(['entity', id]);\nexport const relationNodeId = (id: string) => JSON.stringify(['relation', id]);\nexport function incidenceGraph(projection: KnowledgeProjection) {\n const nodes = [\n ...projection.entities.map((e) => ({\n id: entityNodeId(e.id),\n selection: { type: 'entity' as const, id: e.id },\n label: e.label,\n kind: e.kind,\n description: e.description,\n badges: e.badges,\n })),\n ...projection.relations.map((r) => ({\n id: relationNodeId(r.id),\n selection: { type: 'relation' as const, id: r.id },\n label: r.label,\n kind: r.kind,\n description: r.description,\n badges: r.badges,\n inputs: r.inputs.length,\n outputs: r.outputs.length,\n })),\n ];\n const edges = projection.relations.flatMap((r) =>\n (['inputs', 'outputs'] as const).flatMap((side) =>\n r[side].map((port, index) => ({\n id: JSON.stringify([r.id, side, index]),\n source: side === 'inputs' ? entityNodeId(port.entity) : relationNodeId(r.id),\n target: side === 'inputs' ? relationNodeId(r.id) : entityNodeId(port.entity),\n label: port.role,\n ...(side === 'inputs' ? { targetHandle: `inputs:${index}` } : { sourceHandle: `outputs:${index}` }),\n relationId: r.id,\n side,\n index,\n }))\n )\n );\n return { nodes, edges };\n}\n","/** World-coordinate rectangles. Viewport pan/zoom never changes label placement. */\nexport interface LabelRect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\nexport interface LabelAnchor {\n id: string;\n text: string;\n x: number;\n y: number;\n}\nexport interface MeasuredLabel extends LabelAnchor {\n width: number;\n height: number;\n}\nexport interface PlacedLabel extends MeasuredLabel {\n box: LabelRect;\n}\n\n/** Nearest free coordinate outside the union of open forbidden intervals.\n * Endpoints are admissible: touching the expanded boundary preserves the gap. */\nfunction nearestFree(origin: number, intervals: [number, number][]): number {\n intervals.sort((a, b) => a[0] - b[0] || a[1] - b[1]);\n const union: [number, number][] = [];\n for (const interval of intervals) {\n const last = union[union.length - 1];\n if (last && interval[0] < last[1]) last[1] = Math.max(last[1], interval[1]);\n else union.push([...interval]);\n }\n const hit = union.find(([lo, hi]) => lo < origin && origin < hi);\n return hit ? (origin - hit[0] <= hit[1] - origin ? hit[0] : hit[1]) : origin;\n}\n\n/** Deterministic greedy placement, not a global minimum of displacement.\n * For each label, solve the horizontal and vertical interval complements and\n * choose the nearer free position. Each step avoids all nodes and prior labels,\n * so induction gives pairwise disjoint boxes with the requested gap. A finite\n * obstacle set always leaves space on the unbounded canvas. O(L(N+L) log(N+L)). */\nexport function placeEdgeLabels(labels: readonly MeasuredLabel[], nodes: readonly LabelRect[], gap = 8): PlacedLabel[] {\n if (!Number.isFinite(gap) || gap < 0) throw Error('invalid_label_gap');\n const occupied = [...nodes];\n for (const rect of [...nodes, ...labels]) {\n if (![rect.x, rect.y, rect.width, rect.height].every(Number.isFinite) || rect.width <= 0 || rect.height <= 0)\n throw Error('invalid_label_geometry');\n }\n if (new Set(labels.map((l) => l.id)).size !== labels.length) throw Error('duplicate_label');\n // No locale-dependent sorting: the same graph has the same geometry in every host.\n const ordered = [...labels].sort((a, b) => a.y - b.y || a.x - b.x || (a.id < b.id ? -1 : a.id > b.id ? 1 : 0));\n return ordered.map((label) => {\n const x = label.x - label.width / 2,\n y = label.y - label.height / 2;\n const vertical: [number, number][] = [],\n horizontal: [number, number][] = [];\n for (const r of occupied) {\n if (x < r.x + r.width + gap && x + label.width > r.x - gap)\n vertical.push([r.y - gap - label.height, r.y + r.height + gap]);\n if (y < r.y + r.height + gap && y + label.height > r.y - gap)\n horizontal.push([r.x - gap - label.width, r.x + r.width + gap]);\n }\n const vx = nearestFree(x, horizontal),\n vy = nearestFree(y, vertical);\n const box =\n Math.abs(vy - y) <= Math.abs(vx - x)\n ? { x, y: vy, width: label.width, height: label.height }\n : { x: vx, y, width: label.width, height: label.height };\n occupied.push(box);\n return { ...label, box };\n });\n}\n\nexport function enclosingRect(rects: readonly LabelRect[]): LabelRect | undefined {\n if (!rects.length) return;\n let x = Infinity,\n y = Infinity,\n right = -Infinity,\n bottom = -Infinity;\n for (const r of rects) {\n x = Math.min(x, r.x);\n y = Math.min(y, r.y);\n right = Math.max(right, r.x + r.width);\n bottom = Math.max(bottom, r.y + r.height);\n }\n return { x, y, width: right - x, height: bottom - y };\n}\n","import { ZoomInIcon, ZoomOutIcon } from '../../icons/controls.js';\nimport {\n createContext,\n useCallback,\n useContext,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n} from 'react';\nimport {\n Controls,\n ControlButton,\n EdgeLabelRenderer,\n useNodes,\n useNodesInitialized,\n useReactFlow,\n useStore,\n} from '@xyflow/react';\nimport Box from '@mui/material/Box';\nimport { FitViewIcon as FitScreenIcon } from '../../icons/controls.js';\nimport { EdgeLabelStore } from './label-store.js';\nimport { enclosingRect, placeEdgeLabels, type LabelAnchor, type LabelRect } from './label-layout.js';\n\nexport const EdgeLabelsContext = createContext<EdgeLabelStore | null>(null);\nexport function useEdgeLabel(anchor: LabelAnchor | undefined) {\n const store = useContext(EdgeLabelsContext);\n useLayoutEffect(() => {\n if (!store || !anchor) return;\n store.set(anchor);\n return () => store.remove(anchor.id);\n }, [store, anchor?.id, anchor?.text, anchor?.x, anchor?.y]);\n}\ntype Size = { width: number; height: number };\nfunction MeasuredLabel({\n anchor,\n box,\n maxWidth,\n onSize,\n}: {\n anchor: LabelAnchor;\n box?: LabelRect;\n maxWidth: number;\n onSize: (id: string, size: Size | undefined) => void;\n}) {\n const ref = useRef<HTMLSpanElement>(null);\n useLayoutEffect(() => {\n const element = ref.current;\n if (!element) return;\n const measure = (width: number, height: number) => {\n if (width > 0 && height > 0) onSize(anchor.id, { width: Math.ceil(width), height: Math.ceil(height) });\n };\n measure(element.offsetWidth, element.offsetHeight);\n const observer = new ResizeObserver((entries) => {\n const border = entries[0]?.borderBoxSize?.[0];\n measure(border?.inlineSize ?? element.offsetWidth, border?.blockSize ?? element.offsetHeight);\n });\n observer.observe(element);\n return () => {\n observer.disconnect();\n onSize(anchor.id, undefined);\n };\n }, [anchor.id, onSize]);\n return (\n <Box\n component=\"span\"\n ref={ref}\n aria-hidden=\"true\"\n data-edge-label={anchor.id}\n className=\"nodrag nopan prism-knowledge__edge-label\"\n sx={{\n position: 'absolute',\n left: box?.x ?? anchor.x,\n top: box?.y ?? anchor.y,\n visibility: box ? 'visible' : 'hidden',\n width: 'max-content',\n maxWidth,\n bgcolor: 'var(--prism-graph-bg)',\n color: 'var(--prism-graph-text)',\n borderRadius: 0.5,\n px: 0.75,\n py: 0.25,\n fontSize: 12,\n lineHeight: 1.4,\n boxSizing: 'border-box',\n whiteSpace: 'pre-wrap',\n overflowWrap: 'anywhere',\n pointerEvents: 'none',\n zIndex: 1,\n }}\n >\n {anchor.text}\n </Box>\n );\n}\n\n/** One measured, collision-aware label plane for the entire incidence graph. */\nexport function EdgeLabels({\n store,\n gap,\n maxWidth,\n fitLabel,\n zoomInLabel,\n zoomOutLabel,\n}: {\n store: EdgeLabelStore;\n gap: number;\n maxWidth: number;\n fitLabel: string;\n zoomInLabel: string;\n zoomOutLabel: string;\n}) {\n const anchors = useSyncExternalStore(store.subscribe, store.getSnapshot, store.getSnapshot);\n const [sizes, setSizes] = useState<ReadonlyMap<string, Size>>(new Map());\n const nodes = useNodes();\n const initialized = useNodesInitialized();\n const { fitBounds, zoomIn, zoomOut } = useReactFlow();\n const atMinZoom = useStore((state) => state.transform[2] <= state.minZoom);\n const atMaxZoom = useStore((state) => state.transform[2] >= state.maxZoom);\n const initialFit = useRef(false);\n const onSize = useCallback(\n (id: string, size: Size | undefined) =>\n setSizes((prior) => {\n const old = prior.get(id);\n if (old?.width === size?.width && old?.height === size?.height) return prior;\n const next = new Map(prior);\n if (size) next.set(id, size);\n else next.delete(id);\n return next;\n }),\n []\n );\n const obstacles = useMemo(\n () =>\n nodes.flatMap((node) => {\n const width = node.measured?.width,\n height = node.measured?.height;\n return width && height && !node.hidden ? [{ ...node.position, width, height }] : [];\n }),\n [nodes]\n );\n const placements = useMemo(\n () =>\n placeEdgeLabels(\n anchors.flatMap((anchor) => {\n const size = sizes.get(anchor.id);\n return size ? [{ ...anchor, ...size }] : [];\n }),\n obstacles,\n gap\n ),\n [anchors, sizes, obstacles, gap]\n );\n const boxes = useMemo(() => new Map(placements.map((l) => [l.id, l.box])), [placements]);\n const bounds = useMemo(() => enclosingRect([...obstacles, ...placements.map((l) => l.box)]), [obstacles, placements]);\n const fit = useCallback(() => {\n if (bounds) void fitBounds(bounds, { padding: 0.12, duration: 0 });\n }, [bounds, fitBounds]);\n useLayoutEffect(() => {\n // Wait for measured labels as well as nodes. Subsequent edits/drags preserve\n // the user's viewport; the explicit fit command always includes every label.\n if (!initialFit.current && initialized && anchors.length && placements.length === anchors.length) {\n initialFit.current = true;\n fit();\n }\n }, [initialized, anchors.length, placements.length, fit]);\n return (\n <>\n <EdgeLabelRenderer>\n <svg\n aria-hidden=\"true\"\n width=\"1\"\n height=\"1\"\n style={{ position: 'absolute', overflow: 'visible', pointerEvents: 'none' }}\n >\n {placements.map(({ id, x, y, box }) => {\n const endX = Math.max(box.x, Math.min(x, box.x + box.width));\n const endY = Math.max(box.y, Math.min(y, box.y + box.height));\n if (endX === x && endY === y) return null;\n return (\n <g key={id} data-edge-label-leader={id} stroke=\"var(--prism-graph-muted)\" strokeWidth=\"1\">\n <path d={`M ${x} ${y} L ${endX} ${endY}`} fill=\"none\" strokeDasharray=\"3 3\" />\n <circle cx={x} cy={y} r=\"2\" fill=\"var(--prism-graph-bg)\" />\n </g>\n );\n })}\n </svg>\n {anchors.map((anchor) => (\n <MeasuredLabel\n key={anchor.id}\n anchor={anchor}\n box={boxes.get(anchor.id)}\n maxWidth={maxWidth}\n onSize={onSize}\n />\n ))}\n </EdgeLabelRenderer>\n <Controls showInteractive={false} showFitView={false} showZoom={false}>\n <ControlButton\n disabled={atMaxZoom}\n onClick={() => void zoomIn({ duration: 200 })}\n title={zoomInLabel}\n aria-label={zoomInLabel}\n >\n <ZoomInIcon />\n </ControlButton>\n <ControlButton\n disabled={atMinZoom}\n onClick={() => void zoomOut({ duration: 200 })}\n title={zoomOutLabel}\n aria-label={zoomOutLabel}\n >\n <ZoomOutIcon />\n </ControlButton>\n <ControlButton onClick={fit} title={fitLabel} aria-label={fitLabel}>\n <FitScreenIcon />\n </ControlButton>\n </Controls>\n </>\n );\n}\n","import type { LabelAnchor } from './label-layout.js';\n\n/** Edge components report path anchors; one microtask publishes the whole frame.\n * Registration is per mounted graph, never global, and removes culled edges. */\nexport class EdgeLabelStore {\n private anchors = new Map<string, LabelAnchor>();\n private snapshot: readonly LabelAnchor[] = [];\n private listeners = new Set<() => void>();\n private pending = false;\n getSnapshot = () => this.snapshot;\n subscribe = (listener: () => void) => {\n this.listeners.add(listener);\n return () => {\n this.listeners.delete(listener);\n };\n };\n set(anchor: LabelAnchor) {\n const prior = this.anchors.get(anchor.id);\n if (prior?.x === anchor.x && prior.y === anchor.y && prior.text === anchor.text) return;\n this.anchors.set(anchor.id, anchor);\n this.publish();\n }\n remove(id: string) {\n if (this.anchors.delete(id)) this.publish();\n }\n private publish() {\n if (this.pending) return;\n this.pending = true;\n queueMicrotask(() => {\n this.pending = false;\n this.snapshot = [...this.anchors.values()];\n this.listeners.forEach((listener) => listener());\n });\n }\n}\n","'use client';\n\nimport { DocSidebar } from '../doc-layout/doc-sidebar.js';\nimport { memo, useCallback, useEffect, useMemo, useRef, useState, type ReactNode } from 'react';\nimport {\n ReactFlow,\n BaseEdge,\n getSmoothStepPath,\n type EdgeProps,\n Background,\n Handle,\n Position,\n MarkerType,\n applyNodeChanges,\n type Node,\n type NodeProps,\n type NodeChange,\n type XYPosition,\n} from '@xyflow/react';\nimport Box from '@mui/material/Box';\nimport Chip from '@mui/material/Chip';\nimport { PanelLayout } from '../../layouts/panel-layout.js';\nimport Dialog from '@mui/material/Dialog';\nimport Button from '@mui/material/Button';\nimport TextField from '@mui/material/TextField';\nimport { useTheme, type SxProps, type Theme } from '@mui/material/styles';\nimport {\n entityNodeId,\n relationNodeId,\n incidenceGraph,\n projectKnowledgeGraph,\n validateKnowledgeGraph,\n type KnowledgeGraphData,\n type KnowledgeSelection,\n type KnowledgeProjection,\n type KnowledgeRelation,\n type KnowledgeBadge,\n} from './model.js';\nimport '@xyflow/react/dist/style.css';\nimport './graph.css';\nimport { EdgeLabels, EdgeLabelsContext, useEdgeLabel } from './edge-labels.js';\nimport { EdgeLabelStore } from './label-store.js';\n\nexport const defaultKnowledgeGraphLabels = {\n title: 'Knowledge map',\n search: 'Find an entity or relation',\n all: 'Whole map',\n list: 'Index',\n indexTitle: 'Objects and relations',\n openIndex: 'Expand graph index',\n closeIndex: 'Close graph index',\n collapseIndex: 'Collapse graph index',\n map: 'Map',\n empty: 'No objects to display.',\n invalid: 'The graph contains invalid identities or references.',\n budget: 'Choose an object to inspect its neighbourhood.',\n partial: 'Showing a neighbourhood',\n omitted: 'Relations outside the display budget',\n details: 'Selected object',\n inputs: 'Inputs',\n outputs: 'Outputs',\n fit: 'Fit to view',\n zoomIn: 'Zoom in',\n zoomOut: 'Zoom out',\n lock: 'Toggle interaction',\n hint: 'Select an object in the index or map. Dragging changes its position only.',\n clear: 'Clear selection',\n expand: 'Expand workspace',\n collapse: 'Close expanded workspace',\n};\nexport type KnowledgeGraphLabels = typeof defaultKnowledgeGraphLabels;\ntype GraphNode = Node<\n {\n label: string;\n kind: string;\n selection: KnowledgeSelection;\n description?: string;\n badges?: readonly KnowledgeBadge[];\n inputs?: number;\n outputs?: number;\n },\n 'knowledge'\n>;\nexport interface KnowledgeGraphProps {\n data: KnowledgeGraphData;\n labels?: Partial<KnowledgeGraphLabels>;\n /** Bound visible DOM nodes, including relation nodes. Omitted relations are counted explicitly. */\n visibleBudget?: number;\n /** Optional independent persistence key for the graph index. */\n panelPersistKey?: string;\n onSelect?: (selection: KnowledgeSelection | undefined) => void;\n /** Only visual coordinates. No semantic operation is implied by a drag. */\n onLayoutChange?: (positions: Readonly<Record<string, XYPosition>>) => void;\n layout?: (projection: KnowledgeProjection) => Readonly<Record<string, XYPosition>>;\n renderDetails?: (selection: KnowledgeSelection) => ReactNode;\n height?: number;\n /** Space between measured label boxes and graph nodes, in canvas units. */\n edgeLabelGap?: number;\n /** Wrap long roles without truncation; measured before collision placement. */\n edgeLabelMaxWidth?: number;\n className?: string;\n sx?: SxProps<Theme>;\n}\nfunction Badges({ badges }: { badges?: readonly KnowledgeBadge[] }) {\n if (!badges?.length) return null;\n return (\n <Box component=\"span\" sx={{ display: 'flex', gap: 0.5, flexWrap: 'wrap', mt: 1 }}>\n {badges.map((badge, index) => (\n <Chip\n component=\"span\"\n key={index}\n label={badge.label}\n size=\"small\"\n variant=\"outlined\"\n color={badge.tone ?? 'default'}\n sx={{ height: 'auto', minHeight: 24, '& .MuiChip-label': { whiteSpace: 'normal', py: 0.25 } }}\n />\n ))}\n </Box>\n );\n}\nconst EntityNode = memo(function EntityNode({ data, selected }: NodeProps<GraphNode>) {\n return (\n <div\n style={{ minHeight: Math.max(76, Math.max(data.inputs ?? 0, data.outputs ?? 0) * 24 + 24) }}\n className={`prism-knowledge__node ${data.selection.type === 'relation' ? 'prism-knowledge__relation' : ''} ${selected ? 'is-selected' : ''}`}\n >\n {data.selection.type === 'relation' ? (\n Array.from({ length: data.inputs ?? 0 }, (_, i) => (\n <Handle\n key={i}\n id={`inputs:${i}`}\n type=\"target\"\n position={Position.Left}\n style={{ top: `${((i + 1) / ((data.inputs ?? 0) + 1)) * 100}%` }}\n isConnectable={false}\n />\n ))\n ) : (\n <Handle type=\"target\" position={Position.Left} isConnectable={false} />\n )}\n <span className=\"prism-knowledge__kind\">{data.kind}</span>\n <strong>{data.label}</strong>\n <Badges badges={data.badges} />\n {data.selection.type === 'relation' ? (\n Array.from({ length: data.outputs ?? 0 }, (_, i) => (\n <Handle\n key={i}\n id={`outputs:${i}`}\n type=\"source\"\n position={Position.Right}\n style={{ top: `${((i + 1) / ((data.outputs ?? 0) + 1)) * 100}%` }}\n isConnectable={false}\n />\n ))\n ) : (\n <Handle type=\"source\" position={Position.Right} isConnectable={false} />\n )}\n </div>\n );\n});\nfunction KnowledgeEdge(props: EdgeProps) {\n const [path, x, y] = getSmoothStepPath(props);\n useEdgeLabel(typeof props.label === 'string' ? { id: props.id, text: props.label, x, y } : undefined);\n return (\n <BaseEdge\n id={props.id}\n path={path}\n markerEnd={props.markerEnd}\n markerStart={props.markerStart}\n style={props.style}\n interactionWidth={props.interactionWidth}\n />\n );\n}\nconst edgeTypes = { knowledge: KnowledgeEdge };\nconst nodeTypes = { knowledge: EntityNode };\n/** Deterministic initial grid, deliberately not a causal/topological ordering. Hosts may supply a layout algorithm. */\nfunction defaultLayout(p: KnowledgeProjection): Record<string, XYPosition> {\n const positions: Record<string, XYPosition> = {};\n p.entities.forEach((e, i) => {\n positions[entityNodeId(e.id)] = { x: (i % 3) * 340, y: Math.floor(i / 3) * 170 };\n });\n p.relations.forEach((r, i) => {\n positions[relationNodeId(r.id)] = {\n x: (i % 3) * 340 + 170,\n y: Math.floor(p.entities.length / 3) * 170 + 180 + Math.floor(i / 3) * 150,\n };\n });\n return positions;\n}\nexport function KnowledgeGraph({\n data,\n labels: overrides,\n visibleBudget = 300,\n panelPersistKey,\n onSelect,\n onLayoutChange,\n layout = defaultLayout,\n renderDetails,\n height = 560,\n edgeLabelGap = 8,\n edgeLabelMaxWidth = 240,\n className,\n sx,\n}: KnowledgeGraphProps) {\n if (\n !Number.isFinite(edgeLabelGap) ||\n edgeLabelGap < 0 ||\n !Number.isFinite(edgeLabelMaxWidth) ||\n edgeLabelMaxWidth <= 0\n )\n throw Error('invalid_edge_label_options');\n const [labelStore] = useState(() => new EdgeLabelStore());\n const theme = useTheme(),\n labels = useMemo(() => ({ ...defaultKnowledgeGraphLabels, ...overrides }), [overrides]);\n const [expanded, setExpanded] = useState(false);\n const [query, setQuery] = useState(''),\n [selected, setSelected] = useState<KnowledgeSelection>(),\n [focus, setFocus] = useState<KnowledgeSelection>(),\n [view, setView] = useState<'map' | 'list'>('map');\n const selectionRef = useRef<KnowledgeSelection | undefined>(undefined);\n const valid = useMemo(() => {\n try {\n validateKnowledgeGraph(data);\n return true;\n } catch {\n return false;\n }\n }, [data]);\n const projection = useMemo(\n () =>\n valid\n ? projectKnowledgeGraph(data, focus, visibleBudget)\n : { entities: [], relations: [], total: 0, omittedRelations: 0, limited: false },\n [data, valid, focus, visibleBudget]\n );\n const graph = useMemo(() => incidenceGraph(projection), [projection]);\n const positions = useMemo(() => layout(projection), [layout, projection]);\n const [nodes, setNodes] = useState<GraphNode[]>([]);\n useEffect(() => {\n setNodes((old) => {\n const prior = new Map(old.map((n) => [n.id, n]));\n return graph.nodes.map((n) => ({\n ...prior.get(n.id),\n id: n.id,\n type: 'knowledge',\n position: prior.get(n.id)?.position ?? positions[n.id] ?? { x: 0, y: 0 },\n data: n,\n ariaLabel: `${n.kind}: ${n.label}`,\n deletable: false,\n }));\n });\n }, [graph, positions]);\n const displayedNodes = useMemo(\n () =>\n nodes.map((node) => ({\n ...node,\n selected: selected?.id === node.data.selection.id && selected.type === node.data.selection.type,\n })),\n [nodes, selected]\n );\n const edges = useMemo(\n () =>\n graph.edges.map((e) => ({\n ...e,\n type: 'knowledge',\n markerEnd: { type: MarkerType.ArrowClosed },\n focusable: true,\n ariaLabel: e.label,\n deletable: false,\n })),\n [graph]\n );\n const choose = useCallback(\n (s: KnowledgeSelection | undefined) => {\n const previous = selectionRef.current;\n if (previous?.id === s?.id && previous?.type === s?.type) return;\n selectionRef.current = s;\n setSelected(s);\n onSelect?.(s);\n if (projection.total > visibleBudget) setFocus(s);\n },\n [onSelect, projection.total, visibleBudget]\n );\n const onNodesChange = useCallback(\n (changes: NodeChange<GraphNode>[]) => {\n // Selection has one owner. React Flow emits user intents; controlled node\n // props are a projection of that selection, never a second feedback source.\n const selectedChange = [...changes].reverse().find((change) => change.type === 'select' && change.selected);\n if (selectedChange?.type === 'select') {\n const node = graph.nodes.find((node) => node.id === selectedChange.id);\n if (node) choose(node.selection);\n } else {\n const current = selectionRef.current;\n const id = current && (current.type === 'entity' ? entityNodeId(current.id) : relationNodeId(current.id));\n if (changes.some((change) => change.type === 'select' && !change.selected && change.id === id))\n choose(undefined);\n }\n const geometry = changes.filter((change) => change.type !== 'remove' && change.type !== 'select');\n if (geometry.length) setNodes((nodes) => applyNodeChanges(geometry, nodes));\n },\n [graph, choose]\n );\n const index = useMemo(\n () =>\n [\n ...data.entities.map((e) => ({ ...e, selection: { type: 'entity' as const, id: e.id } })),\n ...data.relations.map((r) => ({ ...r, selection: { type: 'relation' as const, id: r.id } })),\n ].filter((e) =>\n `${e.label}\\n${e.kind}\\n${e.id}\\n${e.badges?.map((b) => b.label).join(' ') ?? ''}`\n .toLocaleLowerCase()\n .includes(query.toLocaleLowerCase())\n ),\n [data, query]\n );\n const object =\n selected?.type === 'entity'\n ? data.entities.find((e) => e.id === selected.id)\n : data.relations.find((r) => r.id === selected?.id);\n useEffect(() => {\n if (selected && !object) {\n choose(undefined);\n setFocus(undefined);\n }\n }, [selected, object, choose]);\n const graphIndex = (\n <Box className=\"prism-knowledge__index\">\n <TextField\n fullWidth\n size=\"small\"\n type=\"search\"\n label={labels.search}\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n sx={{ mb: 2 }}\n />\n <ul className=\"prism-knowledge__results\">\n {index.slice(0, visibleBudget).map((item) => (\n <li key={JSON.stringify(item.selection)}>\n <Button\n type=\"button\"\n variant=\"text\"\n aria-current={selected?.id === item.id && selected.type === item.selection.type}\n onClick={() => choose(item.selection)}\n >\n <span>{item.kind}</span>\n {item.label}\n <Badges badges={item.badges} />\n </Button>\n </li>\n ))}\n </ul>\n <small>\n {Math.min(index.length, visibleBudget)} / {index.length}\n </small>\n <Button\n type=\"button\"\n onClick={() => {\n setFocus(undefined);\n choose(undefined);\n }}\n >\n {labels.clear}\n </Button>\n </Box>\n );\n const content = (\n <Box\n className={['prism-knowledge', view === 'list' && 'is-list', className].filter(Boolean).join(' ')}\n sx={[\n {\n '--prism-graph-border': theme.palette.divider,\n '--prism-graph-bg': theme.palette.background.paper,\n '--prism-graph-text': theme.palette.text.primary,\n '--prism-graph-muted': theme.palette.text.secondary,\n '--prism-graph-accent': theme.palette.primary.main,\n '--prism-graph-radius': `${theme.shape.borderRadius}px`,\n '--prism-graph-hover': theme.palette.action.hover,\n },\n ...(Array.isArray(sx) ? sx : [sx]),\n ]}\n >\n <header className=\"prism-knowledge__header\">\n <strong>{labels.title}</strong>\n <span>\n {projection.entities.length + projection.relations.length} / {projection.total}\n </span>\n <Button\n variant={view === 'map' ? 'contained' : 'outlined'}\n type=\"button\"\n aria-pressed={view === 'map'}\n onClick={() => setView('map')}\n >\n {labels.map}\n </Button>\n <Button\n variant={view === 'list' ? 'contained' : 'outlined'}\n type=\"button\"\n aria-pressed={view === 'list'}\n onClick={() => setView('list')}\n >\n {labels.list}\n </Button>\n <Button type=\"button\" onClick={() => setExpanded((v) => !v)}>\n {expanded ? labels.collapse : labels.expand}\n </Button>\n </header>\n {!valid ? (\n <p role=\"alert\">{labels.invalid}</p>\n ) : (\n <>\n <p className=\"prism-knowledge__hint\">{labels.hint}</p>\n {view === 'list' ? (\n graphIndex\n ) : (\n <PanelLayout\n title={labels.indexTitle}\n labels={{ expand: labels.openIndex, collapse: labels.collapseIndex, close: labels.closeIndex }}\n panel={({ collapsed }) => (\n <>\n <Box hidden={collapsed}>{graphIndex}</Box>\n {collapsed && (\n <DocSidebar\n compact\n items={index.slice(0, visibleBudget).map((item) => ({\n id: JSON.stringify(item.selection),\n label: item.label,\n }))}\n activeId={selected && JSON.stringify(selected)}\n onItemClick={(item) => {\n const target = index.find((entry) => JSON.stringify(entry.selection) === item.id);\n if (target) choose(target.selection);\n }}\n />\n )}\n </>\n )}\n height={expanded ? '75dvh' : height}\n width={240}\n offset={88}\n persistKey={panelPersistKey}\n navigationKey={selected ? selected.type + ':' + selected.id : ''}\n sx={{ px: 1, pb: 1 }}\n >\n <div\n className=\"prism-knowledge__canvas\"\n style={{ height: view === 'map' ? (expanded ? '75dvh' : height) : undefined }}\n >\n {view === 'map' && nodes.length > 0 ? (\n <EdgeLabelsContext.Provider value={labelStore}>\n <ReactFlow<GraphNode>\n nodes={displayedNodes}\n edges={edges}\n nodeTypes={nodeTypes}\n edgeTypes={edgeTypes}\n onNodesChange={onNodesChange}\n onNodeClick={(_e, n) => choose(n.data.selection)}\n onEdgeClick={(_event, edge) => {\n const occurrence = graph.edges.find((item) => item.id === edge.id);\n if (occurrence) choose({ type: 'relation', id: occurrence.relationId });\n }}\n onNodeDragStop={(_e, node) =>\n onLayoutChange?.(\n Object.fromEntries(nodes.map((n) => [n.id, n.id === node.id ? node.position : n.position]))\n )\n }\n nodesConnectable={false}\n deleteKeyCode={null}\n edgesReconnectable={false}\n fitView\n minZoom={0.1}\n maxZoom={2}\n colorMode={theme.palette.mode}\n ariaLabelConfig={{\n 'controls.zoomIn.ariaLabel': labels.zoomIn,\n 'controls.zoomOut.ariaLabel': labels.zoomOut,\n 'controls.fitView.ariaLabel': labels.fit,\n 'controls.interactive.ariaLabel': labels.lock,\n }}\n >\n <Background gap={24} />\n <EdgeLabels\n store={labelStore}\n gap={edgeLabelGap}\n maxWidth={edgeLabelMaxWidth}\n fitLabel={labels.fit}\n zoomInLabel={labels.zoomIn}\n zoomOutLabel={labels.zoomOut}\n />\n </ReactFlow>\n </EdgeLabelsContext.Provider>\n ) : (\n <div className=\"prism-knowledge__empty\">\n {projection.total === 0 ? labels.empty : projection.limited ? labels.budget : labels.list}\n </div>\n )}\n </div>\n </PanelLayout>\n )}\n {projection.limited && (\n <p className=\"prism-knowledge__hint\" role=\"status\">\n {labels.partial}: {projection.entities.length + projection.relations.length} / {projection.total}.{' '}\n {labels.omitted}: {projection.omittedRelations}.\n </p>\n )}\n {selected && object && (\n <section className=\"prism-knowledge__details\" aria-label={labels.details}>\n <h3>{object.label}</h3>\n <p>{object.description}</p>\n {selected.type === 'relation' && (\n <div className=\"prism-knowledge__ports\">\n {(['inputs', 'outputs'] as const).map((side) => (\n <div key={side}>\n <strong>{labels[side]}</strong>\n <ol>\n {(object as KnowledgeRelation)[side].map((port, i) => (\n <li key={i}>\n {port.role}: {data.entities.find((e) => e.id === port.entity)?.label}\n </li>\n ))}\n </ol>\n </div>\n ))}\n </div>\n )}\n {renderDetails?.(selected)}\n </section>\n )}\n </>\n )}\n </Box>\n );\n return expanded ? (\n <Dialog open fullScreen onClose={() => setExpanded(false)} aria-label={labels.title}>\n {content}\n </Dialog>\n ) : (\n content\n );\n}\n"]}
1
+ {"version":3,"sources":["../../../src/components/knowledge-graph/model.ts","../../../src/components/knowledge-graph/label-layout.ts","../../../src/components/knowledge-graph/edge-labels.tsx","../../../src/components/knowledge-graph/label-store.ts","../../../src/components/knowledge-graph/graph.tsx"],"names":["Box","jsx","jsxs","useState","useMemo","useRef","useCallback","Fragment"],"mappings":"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","file":"index.js","sourcesContent":["/** Host-supplied observations; badges do not change graph semantics or entailment. */\nexport interface KnowledgeBadge {\n label: string;\n tone?: 'default' | 'info' | 'success' | 'warning' | 'error';\n}\n/** Typed incidence projection. Layout never changes the graph or creates an entailment. */\nexport interface KnowledgeEntity {\n id: string;\n kind: string;\n label: string;\n description?: string;\n badges?: readonly KnowledgeBadge[];\n}\nexport interface KnowledgePort {\n entity: string;\n role: string;\n}\nexport interface KnowledgeRelation {\n id: string;\n kind: string;\n label: string;\n inputs: readonly KnowledgePort[];\n outputs: readonly KnowledgePort[];\n description?: string;\n badges?: readonly KnowledgeBadge[];\n}\nexport interface KnowledgeGraphData {\n entities: readonly KnowledgeEntity[];\n relations: readonly KnowledgeRelation[];\n}\nexport type KnowledgeSelection = { type: 'entity' | 'relation'; id: string };\nexport interface KnowledgeProjection {\n entities: KnowledgeEntity[];\n relations: KnowledgeRelation[];\n total: number;\n omittedRelations: number;\n limited: boolean;\n}\nexport function validateKnowledgeGraph(data: KnowledgeGraphData): void {\n const ids = new Set<string>();\n for (const entity of data.entities) {\n if (!entity.id || !entity.kind || !entity.label || ids.has(entity.id)) throw Error('invalid_entity');\n ids.add(entity.id);\n }\n const relations = new Set<string>();\n for (const relation of data.relations) {\n if (\n !relation.id ||\n !relation.kind ||\n !relation.label ||\n relations.has(relation.id) ||\n !relation.inputs.length ||\n !relation.outputs.length\n )\n throw Error('invalid_relation');\n relations.add(relation.id);\n for (const port of [...relation.inputs, ...relation.outputs])\n if (!ids.has(port.entity) || !port.role) throw Error('dangling_port');\n }\n}\n/** A relation is included atomically, with all of its ordered input/output occurrences.\n * A tight budget reports omitted relations; it never renders half a justification. */\nexport function projectKnowledgeGraph(\n data: KnowledgeGraphData,\n selection: KnowledgeSelection | undefined,\n budget = 300\n): KnowledgeProjection {\n if (!Number.isSafeInteger(budget) || budget < 1) throw Error('invalid_graph_budget');\n const total = data.entities.length + data.relations.length;\n if (!selection && total <= budget)\n return { entities: [...data.entities], relations: [...data.relations], total, omittedRelations: 0, limited: false };\n if (!selection) return { entities: [], relations: [], total, omittedRelations: data.relations.length, limited: true };\n const selectedEntities = new Set<string>(),\n selectedRelations: KnowledgeRelation[] = [];\n if (selection.type === 'entity' && data.entities.some((e) => e.id === selection.id))\n selectedEntities.add(selection.id);\n const candidates =\n selection.type === 'relation'\n ? data.relations.filter((r) => r.id === selection.id)\n : data.relations.filter((r) => [...r.inputs, ...r.outputs].some((p) => p.entity === selection.id));\n let omittedRelations = 0;\n for (const relation of candidates) {\n const endpoints = new Set([...relation.inputs, ...relation.outputs].map((p) => p.entity));\n const additional = [...endpoints].filter((id) => !selectedEntities.has(id)).length + 1;\n if (selectedEntities.size + selectedRelations.length + additional > budget) {\n omittedRelations++;\n continue;\n }\n for (const id of endpoints) selectedEntities.add(id);\n selectedRelations.push(relation);\n }\n return {\n entities: data.entities.filter((e) => selectedEntities.has(e.id)),\n relations: selectedRelations,\n total,\n omittedRelations,\n limited: total !== selectedEntities.size + selectedRelations.length,\n };\n}\nexport const entityNodeId = (id: string) => JSON.stringify(['entity', id]);\nexport const relationNodeId = (id: string) => JSON.stringify(['relation', id]);\nexport function incidenceGraph(projection: KnowledgeProjection) {\n const nodes = [\n ...projection.entities.map((e) => ({\n id: entityNodeId(e.id),\n selection: { type: 'entity' as const, id: e.id },\n label: e.label,\n kind: e.kind,\n description: e.description,\n badges: e.badges,\n })),\n ...projection.relations.map((r) => ({\n id: relationNodeId(r.id),\n selection: { type: 'relation' as const, id: r.id },\n label: r.label,\n kind: r.kind,\n description: r.description,\n badges: r.badges,\n inputs: r.inputs.length,\n outputs: r.outputs.length,\n })),\n ];\n const edges = projection.relations.flatMap((r) =>\n (['inputs', 'outputs'] as const).flatMap((side) =>\n r[side].map((port, index) => ({\n id: JSON.stringify([r.id, side, index]),\n source: side === 'inputs' ? entityNodeId(port.entity) : relationNodeId(r.id),\n target: side === 'inputs' ? relationNodeId(r.id) : entityNodeId(port.entity),\n label: port.role,\n ...(side === 'inputs' ? { targetHandle: `inputs:${index}` } : { sourceHandle: `outputs:${index}` }),\n relationId: r.id,\n side,\n index,\n }))\n )\n );\n return { nodes, edges };\n}\n","/** World-coordinate rectangles. Viewport pan/zoom never changes label placement. */\nexport interface LabelRect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\nexport interface LabelAnchor {\n id: string;\n text: string;\n x: number;\n y: number;\n}\nexport interface MeasuredLabel extends LabelAnchor {\n width: number;\n height: number;\n}\nexport interface PlacedLabel extends MeasuredLabel {\n box: LabelRect;\n}\n\n/** Nearest free coordinate outside the union of open forbidden intervals.\n * Endpoints are admissible: touching the expanded boundary preserves the gap. */\nfunction nearestFree(origin: number, intervals: [number, number][]): number {\n intervals.sort((a, b) => a[0] - b[0] || a[1] - b[1]);\n const union: [number, number][] = [];\n for (const interval of intervals) {\n const last = union[union.length - 1];\n if (last && interval[0] < last[1]) last[1] = Math.max(last[1], interval[1]);\n else union.push([...interval]);\n }\n const hit = union.find(([lo, hi]) => lo < origin && origin < hi);\n return hit ? (origin - hit[0] <= hit[1] - origin ? hit[0] : hit[1]) : origin;\n}\n\n/** Deterministic greedy placement, not a global minimum of displacement.\n * For each label, solve the horizontal and vertical interval complements and\n * choose the nearer free position. Each step avoids all nodes and prior labels,\n * so induction gives pairwise disjoint boxes with the requested gap. A finite\n * obstacle set always leaves space on the unbounded canvas. O(L(N+L) log(N+L)). */\nexport function placeEdgeLabels(labels: readonly MeasuredLabel[], nodes: readonly LabelRect[], gap = 8): PlacedLabel[] {\n if (!Number.isFinite(gap) || gap < 0) throw Error('invalid_label_gap');\n const occupied = [...nodes];\n for (const rect of [...nodes, ...labels]) {\n if (![rect.x, rect.y, rect.width, rect.height].every(Number.isFinite) || rect.width <= 0 || rect.height <= 0)\n throw Error('invalid_label_geometry');\n }\n if (new Set(labels.map((l) => l.id)).size !== labels.length) throw Error('duplicate_label');\n // No locale-dependent sorting: the same graph has the same geometry in every host.\n const ordered = [...labels].sort((a, b) => a.y - b.y || a.x - b.x || (a.id < b.id ? -1 : a.id > b.id ? 1 : 0));\n return ordered.map((label) => {\n const x = label.x - label.width / 2,\n y = label.y - label.height / 2;\n const vertical: [number, number][] = [],\n horizontal: [number, number][] = [];\n for (const r of occupied) {\n if (x < r.x + r.width + gap && x + label.width > r.x - gap)\n vertical.push([r.y - gap - label.height, r.y + r.height + gap]);\n if (y < r.y + r.height + gap && y + label.height > r.y - gap)\n horizontal.push([r.x - gap - label.width, r.x + r.width + gap]);\n }\n const vx = nearestFree(x, horizontal),\n vy = nearestFree(y, vertical);\n const box =\n Math.abs(vy - y) <= Math.abs(vx - x)\n ? { x, y: vy, width: label.width, height: label.height }\n : { x: vx, y, width: label.width, height: label.height };\n occupied.push(box);\n return { ...label, box };\n });\n}\n\nexport function enclosingRect(rects: readonly LabelRect[]): LabelRect | undefined {\n if (!rects.length) return undefined;\n let x = Infinity,\n y = Infinity,\n right = -Infinity,\n bottom = -Infinity;\n for (const r of rects) {\n x = Math.min(x, r.x);\n y = Math.min(y, r.y);\n right = Math.max(right, r.x + r.width);\n bottom = Math.max(bottom, r.y + r.height);\n }\n return { x, y, width: right - x, height: bottom - y };\n}\n","import { ZoomInIcon, ZoomOutIcon } from '../../icons/controls.js';\nimport {\n createContext,\n useCallback,\n useContext,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n} from 'react';\nimport {\n Controls,\n ControlButton,\n EdgeLabelRenderer,\n useNodes,\n useNodesInitialized,\n useReactFlow,\n useStore,\n} from '@xyflow/react';\nimport Box from '@mui/material/Box';\nimport { FitViewIcon as FitScreenIcon } from '../../icons/controls.js';\nimport { EdgeLabelStore } from './label-store.js';\nimport { enclosingRect, placeEdgeLabels, type LabelAnchor, type LabelRect } from './label-layout.js';\n\nexport const EdgeLabelsContext = createContext<EdgeLabelStore | null>(null);\nexport function useEdgeLabel(anchor: LabelAnchor | undefined) {\n const store = useContext(EdgeLabelsContext);\n const { id, text, x, y } = anchor ?? {};\n useLayoutEffect(() => {\n if (!store || id === undefined || text === undefined || x === undefined || y === undefined) return undefined;\n store.set({ id, text, x, y });\n return () => store.remove(id);\n }, [store, id, text, x, y]);\n}\ntype Size = { width: number; height: number };\nfunction MeasuredLabel({\n anchor,\n box,\n maxWidth,\n onSize,\n}: {\n anchor: LabelAnchor;\n box?: LabelRect;\n maxWidth: number;\n onSize: (id: string, size: Size | undefined) => void;\n}) {\n const ref = useRef<HTMLSpanElement>(null);\n useLayoutEffect(() => {\n const element = ref.current;\n if (!element) return undefined;\n const measure = (width: number, height: number) => {\n if (width > 0 && height > 0) onSize(anchor.id, { width: Math.ceil(width), height: Math.ceil(height) });\n };\n measure(element.offsetWidth, element.offsetHeight);\n const observer = new ResizeObserver((entries) => {\n const border = entries[0]?.borderBoxSize?.[0];\n measure(border?.inlineSize ?? element.offsetWidth, border?.blockSize ?? element.offsetHeight);\n });\n observer.observe(element);\n return () => {\n observer.disconnect();\n onSize(anchor.id, undefined);\n };\n }, [anchor.id, onSize]);\n return (\n <Box\n component=\"span\"\n ref={ref}\n aria-hidden=\"true\"\n data-edge-label={anchor.id}\n className=\"nodrag nopan prism-knowledge__edge-label\"\n sx={{\n position: 'absolute',\n left: box?.x ?? anchor.x,\n top: box?.y ?? anchor.y,\n visibility: box ? 'visible' : 'hidden',\n width: 'max-content',\n maxWidth,\n bgcolor: 'var(--prism-graph-bg)',\n color: 'var(--prism-graph-text)',\n borderRadius: 0.5,\n px: 0.75,\n py: 0.25,\n fontSize: 12,\n lineHeight: 1.4,\n boxSizing: 'border-box',\n whiteSpace: 'pre-wrap',\n overflowWrap: 'anywhere',\n pointerEvents: 'none',\n zIndex: 1,\n }}\n >\n {anchor.text}\n </Box>\n );\n}\n\n/** One measured, collision-aware label plane for the entire incidence graph. */\nexport function EdgeLabels({\n store,\n gap,\n maxWidth,\n fitLabel,\n zoomInLabel,\n zoomOutLabel,\n}: {\n store: EdgeLabelStore;\n gap: number;\n maxWidth: number;\n fitLabel: string;\n zoomInLabel: string;\n zoomOutLabel: string;\n}) {\n const anchors = useSyncExternalStore(store.subscribe, store.getSnapshot, store.getSnapshot);\n const [sizes, setSizes] = useState<ReadonlyMap<string, Size>>(new Map());\n const nodes = useNodes();\n const initialized = useNodesInitialized();\n const { fitBounds, zoomIn, zoomOut } = useReactFlow();\n const atMinZoom = useStore((state) => state.transform[2] <= state.minZoom);\n const atMaxZoom = useStore((state) => state.transform[2] >= state.maxZoom);\n const initialFit = useRef(false);\n const onSize = useCallback(\n (id: string, size: Size | undefined) =>\n setSizes((prior) => {\n const old = prior.get(id);\n if (old?.width === size?.width && old?.height === size?.height) return prior;\n const next = new Map(prior);\n if (size) next.set(id, size);\n else next.delete(id);\n return next;\n }),\n []\n );\n const obstacles = useMemo(\n () =>\n nodes.flatMap((node) => {\n const width = node.measured?.width,\n height = node.measured?.height;\n return width && height && !node.hidden ? [{ ...node.position, width, height }] : [];\n }),\n [nodes]\n );\n const placements = useMemo(\n () =>\n placeEdgeLabels(\n anchors.flatMap((anchor) => {\n const size = sizes.get(anchor.id);\n return size ? [{ ...anchor, ...size }] : [];\n }),\n obstacles,\n gap\n ),\n [anchors, sizes, obstacles, gap]\n );\n const boxes = useMemo(() => new Map(placements.map((l) => [l.id, l.box])), [placements]);\n const bounds = useMemo(() => enclosingRect([...obstacles, ...placements.map((l) => l.box)]), [obstacles, placements]);\n const fit = useCallback(() => {\n if (bounds) void fitBounds(bounds, { padding: 0.12, duration: 0 });\n }, [bounds, fitBounds]);\n useLayoutEffect(() => {\n // Wait for measured labels as well as nodes. Subsequent edits/drags preserve\n // the user's viewport; the explicit fit command always includes every label.\n if (!initialFit.current && initialized && anchors.length && placements.length === anchors.length) {\n initialFit.current = true;\n fit();\n }\n }, [initialized, anchors.length, placements.length, fit]);\n return (\n <>\n <EdgeLabelRenderer>\n <svg\n aria-hidden=\"true\"\n width=\"1\"\n height=\"1\"\n style={{ position: 'absolute', overflow: 'visible', pointerEvents: 'none' }}\n >\n {placements.map(({ id, x, y, box }) => {\n const endX = Math.max(box.x, Math.min(x, box.x + box.width));\n const endY = Math.max(box.y, Math.min(y, box.y + box.height));\n if (endX === x && endY === y) return null;\n return (\n <g key={id} data-edge-label-leader={id} stroke=\"var(--prism-graph-muted)\" strokeWidth=\"1\">\n <path d={`M ${x} ${y} L ${endX} ${endY}`} fill=\"none\" strokeDasharray=\"3 3\" />\n <circle cx={x} cy={y} r=\"2\" fill=\"var(--prism-graph-bg)\" />\n </g>\n );\n })}\n </svg>\n {anchors.map((anchor) => (\n <MeasuredLabel\n key={anchor.id}\n anchor={anchor}\n box={boxes.get(anchor.id)}\n maxWidth={maxWidth}\n onSize={onSize}\n />\n ))}\n </EdgeLabelRenderer>\n <Controls showInteractive={false} showFitView={false} showZoom={false}>\n <ControlButton\n disabled={atMaxZoom}\n onClick={() => void zoomIn({ duration: 200 })}\n title={zoomInLabel}\n aria-label={zoomInLabel}\n >\n <ZoomInIcon />\n </ControlButton>\n <ControlButton\n disabled={atMinZoom}\n onClick={() => void zoomOut({ duration: 200 })}\n title={zoomOutLabel}\n aria-label={zoomOutLabel}\n >\n <ZoomOutIcon />\n </ControlButton>\n <ControlButton onClick={fit} title={fitLabel} aria-label={fitLabel}>\n <FitScreenIcon />\n </ControlButton>\n </Controls>\n </>\n );\n}\n","import type { LabelAnchor } from './label-layout.js';\n\n/** Edge components report path anchors; one microtask publishes the whole frame.\n * Registration is per mounted graph, never global, and removes culled edges. */\nexport class EdgeLabelStore {\n private anchors = new Map<string, LabelAnchor>();\n private snapshot: readonly LabelAnchor[] = [];\n private listeners = new Set<() => void>();\n private pending = false;\n getSnapshot = () => this.snapshot;\n subscribe = (listener: () => void) => {\n this.listeners.add(listener);\n return () => {\n this.listeners.delete(listener);\n };\n };\n set(anchor: LabelAnchor) {\n const prior = this.anchors.get(anchor.id);\n if (prior?.x === anchor.x && prior.y === anchor.y && prior.text === anchor.text) return;\n this.anchors.set(anchor.id, anchor);\n this.publish();\n }\n remove(id: string) {\n if (this.anchors.delete(id)) this.publish();\n }\n private publish() {\n if (this.pending) return;\n this.pending = true;\n queueMicrotask(() => {\n this.pending = false;\n this.snapshot = [...this.anchors.values()];\n this.listeners.forEach((listener) => listener());\n });\n }\n}\n","'use client';\n\nimport { DocSidebar } from '../doc-layout/doc-sidebar.js';\nimport { memo, useCallback, useEffect, useMemo, useRef, useState, type ReactNode } from 'react';\nimport {\n ReactFlow,\n BaseEdge,\n getSmoothStepPath,\n type EdgeProps,\n Background,\n Handle,\n Position,\n MarkerType,\n applyNodeChanges,\n type Node,\n type NodeProps,\n type NodeChange,\n type XYPosition,\n} from '@xyflow/react';\nimport Box from '@mui/material/Box';\nimport Chip from '@mui/material/Chip';\nimport { PanelLayout } from '../../layouts/panel-layout.js';\nimport Dialog from '@mui/material/Dialog';\nimport Button from '@mui/material/Button';\nimport TextField from '@mui/material/TextField';\nimport { useTheme, type SxProps, type Theme } from '@mui/material/styles';\nimport {\n entityNodeId,\n relationNodeId,\n incidenceGraph,\n projectKnowledgeGraph,\n validateKnowledgeGraph,\n type KnowledgeGraphData,\n type KnowledgeSelection,\n type KnowledgeProjection,\n type KnowledgeRelation,\n type KnowledgeBadge,\n} from './model.js';\nimport '@xyflow/react/dist/style.css';\nimport './graph.css';\nimport { EdgeLabels, EdgeLabelsContext, useEdgeLabel } from './edge-labels.js';\nimport { EdgeLabelStore } from './label-store.js';\n\nexport const defaultKnowledgeGraphLabels = {\n title: 'Knowledge map',\n search: 'Find an entity or relation',\n all: 'Whole map',\n list: 'Index',\n indexTitle: 'Objects and relations',\n openIndex: 'Expand graph index',\n closeIndex: 'Close graph index',\n collapseIndex: 'Collapse graph index',\n map: 'Map',\n empty: 'No objects to display.',\n invalid: 'The graph contains invalid identities or references.',\n budget: 'Choose an object to inspect its neighbourhood.',\n partial: 'Showing a neighbourhood',\n omitted: 'Relations outside the display budget',\n details: 'Selected object',\n inputs: 'Inputs',\n outputs: 'Outputs',\n fit: 'Fit to view',\n zoomIn: 'Zoom in',\n zoomOut: 'Zoom out',\n lock: 'Toggle interaction',\n hint: 'Select an object in the index or map. Dragging changes its position only.',\n clear: 'Clear selection',\n expand: 'Expand workspace',\n collapse: 'Close expanded workspace',\n};\nexport type KnowledgeGraphLabels = typeof defaultKnowledgeGraphLabels;\ntype GraphNode = Node<\n {\n label: string;\n kind: string;\n selection: KnowledgeSelection;\n description?: string;\n badges?: readonly KnowledgeBadge[];\n inputs?: number;\n outputs?: number;\n },\n 'knowledge'\n>;\nexport interface KnowledgeGraphProps {\n data: KnowledgeGraphData;\n labels?: Partial<KnowledgeGraphLabels>;\n /** Bound visible DOM nodes, including relation nodes. Omitted relations are counted explicitly. */\n visibleBudget?: number;\n /** Optional independent persistence key for the graph index. */\n panelPersistKey?: string;\n onSelect?: (selection: KnowledgeSelection | undefined) => void;\n /** Only visual coordinates. No semantic operation is implied by a drag. */\n onLayoutChange?: (positions: Readonly<Record<string, XYPosition>>) => void;\n layout?: (projection: KnowledgeProjection) => Readonly<Record<string, XYPosition>>;\n renderDetails?: (selection: KnowledgeSelection) => ReactNode;\n height?: number;\n /** Space between measured label boxes and graph nodes, in canvas units. */\n edgeLabelGap?: number;\n /** Wrap long roles without truncation; measured before collision placement. */\n edgeLabelMaxWidth?: number;\n className?: string;\n sx?: SxProps<Theme>;\n}\nfunction Badges({ badges }: { badges?: readonly KnowledgeBadge[] }) {\n if (!badges?.length) return null;\n return (\n <Box component=\"span\" sx={{ display: 'flex', gap: 0.5, flexWrap: 'wrap', mt: 1 }}>\n {badges.map((badge, index) => (\n <Chip\n component=\"span\"\n key={index}\n label={badge.label}\n size=\"small\"\n variant=\"outlined\"\n color={badge.tone ?? 'default'}\n sx={{ height: 'auto', minHeight: 24, '& .MuiChip-label': { whiteSpace: 'normal', py: 0.25 } }}\n />\n ))}\n </Box>\n );\n}\nconst EntityNode = memo(function EntityNodeView({ data, selected }: NodeProps<GraphNode>) {\n return (\n <div\n style={{ minHeight: Math.max(76, Math.max(data.inputs ?? 0, data.outputs ?? 0) * 24 + 24) }}\n className={`prism-knowledge__node ${data.selection.type === 'relation' ? 'prism-knowledge__relation' : ''} ${selected ? 'is-selected' : ''}`}\n >\n {data.selection.type === 'relation' ? (\n Array.from({ length: data.inputs ?? 0 }, (_, i) => (\n <Handle\n key={i}\n id={`inputs:${i}`}\n type=\"target\"\n position={Position.Left}\n style={{ top: `${((i + 1) / ((data.inputs ?? 0) + 1)) * 100}%` }}\n isConnectable={false}\n />\n ))\n ) : (\n <Handle type=\"target\" position={Position.Left} isConnectable={false} />\n )}\n <span className=\"prism-knowledge__kind\">{data.kind}</span>\n <strong>{data.label}</strong>\n <Badges badges={data.badges} />\n {data.selection.type === 'relation' ? (\n Array.from({ length: data.outputs ?? 0 }, (_, i) => (\n <Handle\n key={i}\n id={`outputs:${i}`}\n type=\"source\"\n position={Position.Right}\n style={{ top: `${((i + 1) / ((data.outputs ?? 0) + 1)) * 100}%` }}\n isConnectable={false}\n />\n ))\n ) : (\n <Handle type=\"source\" position={Position.Right} isConnectable={false} />\n )}\n </div>\n );\n});\nfunction KnowledgeEdge(props: EdgeProps) {\n const [path, x, y] = getSmoothStepPath(props);\n useEdgeLabel(typeof props.label === 'string' ? { id: props.id, text: props.label, x, y } : undefined);\n return (\n <BaseEdge\n id={props.id}\n path={path}\n markerEnd={props.markerEnd}\n markerStart={props.markerStart}\n style={props.style}\n interactionWidth={props.interactionWidth}\n />\n );\n}\nconst edgeTypes = { knowledge: KnowledgeEdge };\nconst nodeTypes = { knowledge: EntityNode };\n/** Deterministic initial grid, deliberately not a causal/topological ordering. Hosts may supply a layout algorithm. */\nfunction defaultLayout(p: KnowledgeProjection): Record<string, XYPosition> {\n const positions: Record<string, XYPosition> = {};\n p.entities.forEach((e, i) => {\n positions[entityNodeId(e.id)] = { x: (i % 3) * 340, y: Math.floor(i / 3) * 170 };\n });\n p.relations.forEach((r, i) => {\n positions[relationNodeId(r.id)] = {\n x: (i % 3) * 340 + 170,\n y: Math.floor(p.entities.length / 3) * 170 + 180 + Math.floor(i / 3) * 150,\n };\n });\n return positions;\n}\nexport function KnowledgeGraph({\n data,\n labels: overrides,\n visibleBudget = 300,\n panelPersistKey,\n onSelect,\n onLayoutChange,\n layout = defaultLayout,\n renderDetails,\n height = 560,\n edgeLabelGap = 8,\n edgeLabelMaxWidth = 240,\n className,\n sx,\n}: KnowledgeGraphProps) {\n if (\n !Number.isFinite(edgeLabelGap) ||\n edgeLabelGap < 0 ||\n !Number.isFinite(edgeLabelMaxWidth) ||\n edgeLabelMaxWidth <= 0\n )\n throw Error('invalid_edge_label_options');\n const [labelStore] = useState(() => new EdgeLabelStore());\n const theme = useTheme(),\n labels = useMemo(() => ({ ...defaultKnowledgeGraphLabels, ...overrides }), [overrides]);\n const [expanded, setExpanded] = useState(false);\n const [query, setQuery] = useState(''),\n [selected, setSelected] = useState<KnowledgeSelection>(),\n [focus, setFocus] = useState<KnowledgeSelection>(),\n [view, setView] = useState<'map' | 'list'>('map');\n const selectionRef = useRef<KnowledgeSelection | undefined>(undefined);\n const valid = useMemo(() => {\n try {\n validateKnowledgeGraph(data);\n return true;\n } catch {\n return false;\n }\n }, [data]);\n const projection = useMemo(\n () =>\n valid\n ? projectKnowledgeGraph(data, focus, visibleBudget)\n : { entities: [], relations: [], total: 0, omittedRelations: 0, limited: false },\n [data, valid, focus, visibleBudget]\n );\n const graph = useMemo(() => incidenceGraph(projection), [projection]);\n const positions = useMemo(() => layout(projection), [layout, projection]);\n const [nodes, setNodes] = useState<GraphNode[]>([]);\n useEffect(() => {\n setNodes((old) => {\n const prior = new Map(old.map((n) => [n.id, n]));\n return graph.nodes.map((n) => ({\n ...prior.get(n.id),\n id: n.id,\n type: 'knowledge',\n position: prior.get(n.id)?.position ?? positions[n.id] ?? { x: 0, y: 0 },\n data: n,\n ariaLabel: `${n.kind}: ${n.label}`,\n deletable: false,\n }));\n });\n }, [graph, positions]);\n const displayedNodes = useMemo(\n () =>\n nodes.map((node) => ({\n ...node,\n selected: selected?.id === node.data.selection.id && selected.type === node.data.selection.type,\n })),\n [nodes, selected]\n );\n const edges = useMemo(\n () =>\n graph.edges.map((e) => ({\n ...e,\n type: 'knowledge',\n markerEnd: { type: MarkerType.ArrowClosed },\n focusable: true,\n ariaLabel: e.label,\n deletable: false,\n })),\n [graph]\n );\n const choose = useCallback(\n (s: KnowledgeSelection | undefined) => {\n const previous = selectionRef.current;\n if (previous?.id === s?.id && previous?.type === s?.type) return;\n selectionRef.current = s;\n setSelected(s);\n onSelect?.(s);\n if (projection.total > visibleBudget) setFocus(s);\n },\n [onSelect, projection.total, visibleBudget]\n );\n const onNodesChange = useCallback(\n (changes: NodeChange<GraphNode>[]) => {\n // Selection has one owner. React Flow emits user intents; controlled node\n // props are a projection of that selection, never a second feedback source.\n const selectedChange = [...changes].reverse().find((change) => change.type === 'select' && change.selected);\n if (selectedChange?.type === 'select') {\n const node = graph.nodes.find((candidate) => candidate.id === selectedChange.id);\n if (node) choose(node.selection);\n } else {\n const current = selectionRef.current;\n const id = current && (current.type === 'entity' ? entityNodeId(current.id) : relationNodeId(current.id));\n if (changes.some((change) => change.type === 'select' && !change.selected && change.id === id))\n choose(undefined);\n }\n const geometry = changes.filter((change) => change.type !== 'remove' && change.type !== 'select');\n if (geometry.length) setNodes((previous) => applyNodeChanges(geometry, previous));\n },\n [graph, choose]\n );\n const index = useMemo(\n () =>\n [\n ...data.entities.map((e) => ({ ...e, selection: { type: 'entity' as const, id: e.id } })),\n ...data.relations.map((r) => ({ ...r, selection: { type: 'relation' as const, id: r.id } })),\n ].filter((e) =>\n `${e.label}\\n${e.kind}\\n${e.id}\\n${e.badges?.map((b) => b.label).join(' ') ?? ''}`\n .toLocaleLowerCase()\n .includes(query.toLocaleLowerCase())\n ),\n [data, query]\n );\n const object =\n selected?.type === 'entity'\n ? data.entities.find((e) => e.id === selected.id)\n : data.relations.find((r) => r.id === selected?.id);\n useEffect(() => {\n if (selected && !object) {\n choose(undefined);\n setFocus(undefined);\n }\n }, [selected, object, choose]);\n const graphIndex = (\n <Box className=\"prism-knowledge__index\">\n <TextField\n fullWidth\n size=\"small\"\n type=\"search\"\n label={labels.search}\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n sx={{ mb: 2 }}\n />\n <ul className=\"prism-knowledge__results\">\n {index.slice(0, visibleBudget).map((item) => (\n <li key={JSON.stringify(item.selection)}>\n <Button\n type=\"button\"\n variant=\"text\"\n aria-current={selected?.id === item.id && selected.type === item.selection.type}\n onClick={() => choose(item.selection)}\n >\n <span>{item.kind}</span>\n {item.label}\n <Badges badges={item.badges} />\n </Button>\n </li>\n ))}\n </ul>\n <small>\n {Math.min(index.length, visibleBudget)} / {index.length}\n </small>\n <Button\n type=\"button\"\n onClick={() => {\n setFocus(undefined);\n choose(undefined);\n }}\n >\n {labels.clear}\n </Button>\n </Box>\n );\n const content = (\n <Box\n className={['prism-knowledge', view === 'list' && 'is-list', className].filter(Boolean).join(' ')}\n sx={[\n {\n '--prism-graph-border': theme.palette.divider,\n '--prism-graph-bg': theme.palette.background.paper,\n '--prism-graph-text': theme.palette.text.primary,\n '--prism-graph-muted': theme.palette.text.secondary,\n '--prism-graph-accent': theme.palette.primary.main,\n '--prism-graph-radius': `${theme.shape.borderRadius}px`,\n '--prism-graph-hover': theme.palette.action.hover,\n },\n ...(Array.isArray(sx) ? sx : [sx]),\n ]}\n >\n <header className=\"prism-knowledge__header\">\n <strong>{labels.title}</strong>\n <span>\n {projection.entities.length + projection.relations.length} / {projection.total}\n </span>\n <Button\n variant={view === 'map' ? 'contained' : 'outlined'}\n type=\"button\"\n aria-pressed={view === 'map'}\n onClick={() => setView('map')}\n >\n {labels.map}\n </Button>\n <Button\n variant={view === 'list' ? 'contained' : 'outlined'}\n type=\"button\"\n aria-pressed={view === 'list'}\n onClick={() => setView('list')}\n >\n {labels.list}\n </Button>\n <Button type=\"button\" onClick={() => setExpanded((v) => !v)}>\n {expanded ? labels.collapse : labels.expand}\n </Button>\n </header>\n {!valid ? (\n <p role=\"alert\">{labels.invalid}</p>\n ) : (\n <>\n <p className=\"prism-knowledge__hint\">{labels.hint}</p>\n {view === 'list' ? (\n graphIndex\n ) : (\n <PanelLayout\n title={labels.indexTitle}\n labels={{ expand: labels.openIndex, collapse: labels.collapseIndex, close: labels.closeIndex }}\n panel={({ collapsed }) => (\n <>\n <Box hidden={collapsed}>{graphIndex}</Box>\n {collapsed && (\n <DocSidebar\n compact\n items={index.slice(0, visibleBudget).map((item) => ({\n id: JSON.stringify(item.selection),\n label: item.label,\n }))}\n activeId={selected && JSON.stringify(selected)}\n onItemClick={(item) => {\n const target = index.find((entry) => JSON.stringify(entry.selection) === item.id);\n if (target) choose(target.selection);\n }}\n />\n )}\n </>\n )}\n height={expanded ? '75dvh' : height}\n width={240}\n offset={88}\n persistKey={panelPersistKey}\n navigationKey={selected ? selected.type + ':' + selected.id : ''}\n sx={{ px: 1, pb: 1 }}\n >\n <div\n className=\"prism-knowledge__canvas\"\n style={{ height: view === 'map' ? (expanded ? '75dvh' : height) : undefined }}\n >\n {view === 'map' && nodes.length > 0 ? (\n <EdgeLabelsContext.Provider value={labelStore}>\n <ReactFlow<GraphNode>\n nodes={displayedNodes}\n edges={edges}\n nodeTypes={nodeTypes}\n edgeTypes={edgeTypes}\n onNodesChange={onNodesChange}\n onNodeClick={(_e, n) => choose(n.data.selection)}\n onEdgeClick={(_event, edge) => {\n const occurrence = graph.edges.find((item) => item.id === edge.id);\n if (occurrence) choose({ type: 'relation', id: occurrence.relationId });\n }}\n onNodeDragStop={(_e, node) =>\n onLayoutChange?.(\n Object.fromEntries(nodes.map((n) => [n.id, n.id === node.id ? node.position : n.position]))\n )\n }\n nodesConnectable={false}\n deleteKeyCode={null}\n edgesReconnectable={false}\n fitView\n minZoom={0.1}\n maxZoom={2}\n colorMode={theme.palette.mode}\n ariaLabelConfig={{\n 'controls.zoomIn.ariaLabel': labels.zoomIn,\n 'controls.zoomOut.ariaLabel': labels.zoomOut,\n 'controls.fitView.ariaLabel': labels.fit,\n 'controls.interactive.ariaLabel': labels.lock,\n }}\n >\n <Background gap={24} />\n <EdgeLabels\n store={labelStore}\n gap={edgeLabelGap}\n maxWidth={edgeLabelMaxWidth}\n fitLabel={labels.fit}\n zoomInLabel={labels.zoomIn}\n zoomOutLabel={labels.zoomOut}\n />\n </ReactFlow>\n </EdgeLabelsContext.Provider>\n ) : (\n <div className=\"prism-knowledge__empty\">\n {projection.total === 0 ? labels.empty : projection.limited ? labels.budget : labels.list}\n </div>\n )}\n </div>\n </PanelLayout>\n )}\n {projection.limited && (\n <p className=\"prism-knowledge__hint\" role=\"status\">\n {labels.partial}: {projection.entities.length + projection.relations.length} / {projection.total}.{' '}\n {labels.omitted}: {projection.omittedRelations}.\n </p>\n )}\n {selected && object && (\n <section className=\"prism-knowledge__details\" aria-label={labels.details}>\n <h3>{object.label}</h3>\n <p>{object.description}</p>\n {selected.type === 'relation' && (\n <div className=\"prism-knowledge__ports\">\n {(['inputs', 'outputs'] as const).map((side) => (\n <div key={side}>\n <strong>{labels[side]}</strong>\n <ol>\n {(object as KnowledgeRelation)[side].map((port, i) => (\n <li key={i}>\n {port.role}: {data.entities.find((e) => e.id === port.entity)?.label}\n </li>\n ))}\n </ol>\n </div>\n ))}\n </div>\n )}\n {renderDetails?.(selected)}\n </section>\n )}\n </>\n )}\n </Box>\n );\n return expanded ? (\n <Dialog open fullScreen onClose={() => setExpanded(false)} aria-label={labels.title}>\n {content}\n </Dialog>\n ) : (\n content\n );\n}\n"]}
@@ -0,0 +1,5 @@
1
+ "use client";
2
+ export { BooleanLabel, Label, StatusLabel } from '../../chunk-URFQX3I6.js';
3
+ import '../../chunk-TZWHELY4.js';
4
+ //# sourceMappingURL=index.js.map
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":";","file":"index.js"}
@@ -1 +1 @@
1
- {"version":3,"file":"label.d.ts","sourceRoot":"","sources":["../../../src/components/label/label.tsx"],"names":[],"mappings":"AAEA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAG5C,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAM3D,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAExG,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,GAAG,UAAU,CAAC;AAEvE,MAAM,WAAW,UAAU;IACzB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,mBAAmB;IACnB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,qBAAqB;IACrB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,iBAAiB;IACjB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,eAAe;IACf,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,wBAAwB;IACxB,EAAE,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,GAAG,CAAC,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC;CAC5B;AAwGD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,KAAK,CAAC,EACpB,QAAQ,EACR,KAAiB,EACjB,OAAgB,EAChB,SAAS,EACT,OAAO,EACP,EAAE,EACF,QAAQ,EACR,GAAG,EACH,GAAG,KAAK,EACT,EAAE,UAAU,+BAuBZ;AAMD;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,GAAG,KAAK,EACT,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,GAAG,UAAU,CAAC,GAAG;IAC1C,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC;CACnE,GAAG,SAAS,CAgBZ;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,QAAgB,EAChB,SAAgB,EAChB,GAAG,KAAK,EACT,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,GAAG,UAAU,CAAC,GAAG;IAC1C,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,SAAS,CAMZ"}
1
+ {"version":3,"file":"label.d.ts","sourceRoot":"","sources":["../../../src/components/label/label.tsx"],"names":[],"mappings":"AAEA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAG5C,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAO3D,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAExG,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,GAAG,UAAU,CAAC;AAEvE,MAAM,WAAW,UAAU;IACzB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,mBAAmB;IACnB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,qBAAqB;IACrB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,iBAAiB;IACjB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,eAAe;IACf,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,wBAAwB;IACxB,EAAE,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,GAAG,CAAC,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC;CAC5B;AA6GD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,KAAK,CAAC,EACpB,QAAQ,EACR,KAAiB,EACjB,OAAgB,EAChB,SAAS,EACT,OAAO,EACP,EAAE,EACF,QAAQ,EACR,GAAG,EACH,GAAG,KAAK,EACT,EAAE,UAAU,+BAuBZ;AAMD;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,GAAG,KAAK,EACT,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,GAAG,UAAU,CAAC,GAAG;IAC1C,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC;CACnE,GAAG,SAAS,CAgBZ;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,QAAgB,EAChB,SAAgB,EAChB,GAAG,KAAK,EACT,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,GAAG,UAAU,CAAC,GAAG;IAC1C,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,SAAS,CAMZ"}
@@ -0,0 +1,4 @@
1
+ "use client";
2
+ export { LoadingScreen, Spinner, SplashScreen } from '../../chunk-AKLRKCYH.js';
3
+ //# sourceMappingURL=index.js.map
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":";","file":"index.js"}
@@ -1 +1 @@
1
- {"version":3,"file":"MapPointPicker.d.ts","sourceRoot":"","sources":["../../../src/components/map/MapPointPicker.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE5D,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAWD,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAClC,QAAQ,EAAE,CAAC,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC9C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IACvC,0DAA0D;IAC1D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,GAAG,kBAAkB,GAAG,SAAS,GAAG,UAAU,GAAG,iBAAiB,CAAC,CAAC;CACzG;AACD,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,QAAQ,EACR,OAAO,EACP,eAAe,EACf,aAAkB,EAClB,QAAQ,EACR,MAAY,EACZ,aAAa,EACb,cAAsB,EACtB,YAAY,EACZ,WAAW,EACX,MAAM,EACN,QAAgB,EAChB,WAAkB,EAClB,QAAQ,GACT,EAAE,mBAAmB,+BA0HrB"}
1
+ {"version":3,"file":"MapPointPicker.d.ts","sourceRoot":"","sources":["../../../src/components/map/MapPointPicker.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE5D,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAWD,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAClC,QAAQ,EAAE,CAAC,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC9C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IACvC,0DAA0D;IAC1D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,GAAG,kBAAkB,GAAG,SAAS,GAAG,UAAU,GAAG,iBAAiB,CAAC,CAAC;CACzG;AACD,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,QAAQ,EACR,OAAO,EACP,eAAe,EACf,aAAkB,EAClB,QAAQ,EACR,MAAY,EACZ,aAAa,EACb,cAAsB,EACtB,YAAY,EACZ,WAAW,EACX,MAAM,EACN,QAAgB,EAChB,WAAkB,EAClB,QAAQ,GACT,EAAE,mBAAmB,+BA4HrB"}
@@ -1,3 +1,4 @@
1
- export { Map, MapCoverageLayer, Layer as MapLayer, MapMarker, MapPlaceSearch, MapPointPicker, Popup as MapPopup, Source as MapSource, isMapPoint, normalizeMapPoint, useMap } from '../../chunk-52PQL67Q.js';
1
+ "use client";
2
+ export { Map, MapCoverageLayer, Layer as MapLayer, MapMarker, MapPlaceSearch, MapPointPicker, Popup as MapPopup, Source as MapSource, isMapPoint, normalizeMapPoint, useMap } from '../../chunk-3VSM7NZG.js';
2
3
  //# sourceMappingURL=index.js.map
3
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":";","file":"index.js"}
@@ -0,0 +1,4 @@
1
+ "use client";
2
+ export { NavigationProgress } from '../../chunk-SSEHL5VP.js';
3
+ //# sourceMappingURL=index.js.map
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":";","file":"index.js"}
@@ -0,0 +1,4 @@
1
+ "use client";
2
+ export { CardGrid, PageContent } from '../../chunk-2UYRW6X3.js';
3
+ //# sourceMappingURL=index.js.map
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":";","file":"index.js"}