@omnitron-dev/prism 0.3.0 → 0.3.1

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 (214) hide show
  1. package/README.md +148 -0
  2. package/dist/blocks/index.js +3 -1
  3. package/dist/blocks/index.js.map +1 -1
  4. package/dist/{chunk-S6SEGBX6.js → chunk-472SOF76.js} +4 -4
  5. package/dist/{chunk-S6SEGBX6.js.map → chunk-472SOF76.js.map} +1 -1
  6. package/dist/{chunk-Z5OSPAOC.js → chunk-4Z5DE5GK.js} +78 -75
  7. package/dist/chunk-4Z5DE5GK.js.map +1 -0
  8. package/dist/chunk-52PQL67Q.js +559 -0
  9. package/dist/chunk-52PQL67Q.js.map +1 -0
  10. package/dist/chunk-75FQ5IW3.js +590 -0
  11. package/dist/chunk-75FQ5IW3.js.map +1 -0
  12. package/dist/{chunk-6AHI4GSV.js → chunk-7G5D5PTC.js} +4 -3
  13. package/dist/chunk-7G5D5PTC.js.map +1 -0
  14. package/dist/chunk-BJE2AKD4.js +105 -0
  15. package/dist/chunk-BJE2AKD4.js.map +1 -0
  16. package/dist/chunk-FF5RF32O.js +248 -0
  17. package/dist/chunk-FF5RF32O.js.map +1 -0
  18. package/dist/{chunk-OBJ244BO.js → chunk-GMIE6III.js} +9 -42
  19. package/dist/chunk-GMIE6III.js.map +1 -0
  20. package/dist/chunk-GUGTDURV.js +826 -0
  21. package/dist/chunk-GUGTDURV.js.map +1 -0
  22. package/dist/chunk-HOXFSQUV.js +573 -0
  23. package/dist/chunk-HOXFSQUV.js.map +1 -0
  24. package/dist/chunk-JSQTYDPG.js +3 -0
  25. package/dist/chunk-JSQTYDPG.js.map +1 -0
  26. package/dist/{chunk-ZTATTUH7.js → chunk-KQ67XB6T.js} +213 -651
  27. package/dist/chunk-KQ67XB6T.js.map +1 -0
  28. package/dist/{chunk-WFD54GQQ.js → chunk-LOY2NPCO.js} +14 -573
  29. package/dist/chunk-LOY2NPCO.js.map +1 -0
  30. package/dist/{chunk-YQW43BDH.js → chunk-LSPFFEJT.js} +240 -1824
  31. package/dist/chunk-LSPFFEJT.js.map +1 -0
  32. package/dist/{chunk-BZOL7GMU.js → chunk-OKTLA23Q.js} +4 -4
  33. package/dist/chunk-OKTLA23Q.js.map +1 -0
  34. package/dist/chunk-PFT2BNYO.js +191 -0
  35. package/dist/chunk-PFT2BNYO.js.map +1 -0
  36. package/dist/chunk-PGHEP4JD.js +106 -0
  37. package/dist/chunk-PGHEP4JD.js.map +1 -0
  38. package/dist/chunk-PXXPLHIY.js +74 -0
  39. package/dist/chunk-PXXPLHIY.js.map +1 -0
  40. package/dist/chunk-SU3LVQ7N.js +518 -0
  41. package/dist/chunk-SU3LVQ7N.js.map +1 -0
  42. package/dist/chunk-YHE7HXSG.js +206 -0
  43. package/dist/chunk-YHE7HXSG.js.map +1 -0
  44. package/dist/cli/index.js +7 -2
  45. package/dist/cli/index.js.map +1 -1
  46. package/dist/components/accordion/accordion.d.ts.map +1 -1
  47. package/dist/components/admin-filters/admin-data-table.d.ts.map +1 -1
  48. package/dist/components/admin-filters/filter-toolbar.d.ts.map +1 -1
  49. package/dist/components/date-input/date-input.d.ts +27 -0
  50. package/dist/components/date-input/date-input.d.ts.map +1 -0
  51. package/dist/components/date-input/index.d.ts +4 -0
  52. package/dist/components/date-input/index.d.ts.map +1 -0
  53. package/dist/components/date-input/value.d.ts +9 -0
  54. package/dist/components/date-input/value.d.ts.map +1 -0
  55. package/dist/components/doc-layout/doc-sidebar.d.ts +4 -1
  56. package/dist/components/doc-layout/doc-sidebar.d.ts.map +1 -1
  57. package/dist/components/doc-layout/index.js +6 -0
  58. package/dist/components/doc-layout/index.js.map +1 -0
  59. package/dist/components/editor/editor.d.ts.map +1 -1
  60. package/dist/components/editor/icons/index.d.ts +32 -40
  61. package/dist/components/editor/icons/index.d.ts.map +1 -1
  62. package/dist/components/editor/index.js +3 -1
  63. package/dist/components/error-boundary/error-boundary.d.ts.map +1 -1
  64. package/dist/components/index.css +4 -0
  65. package/dist/components/index.css.map +1 -1
  66. package/dist/components/index.d.ts +4 -4
  67. package/dist/components/index.d.ts.map +1 -1
  68. package/dist/components/index.js +18 -8
  69. package/dist/components/knowledge-graph/edge-labels.d.ts +14 -0
  70. package/dist/components/knowledge-graph/edge-labels.d.ts.map +1 -0
  71. package/dist/components/knowledge-graph/graph.d.ts +56 -0
  72. package/dist/components/knowledge-graph/graph.d.ts.map +1 -0
  73. package/dist/components/knowledge-graph/index.css +176 -0
  74. package/dist/components/knowledge-graph/index.css.map +1 -0
  75. package/dist/components/knowledge-graph/index.d.ts +3 -0
  76. package/dist/components/knowledge-graph/index.d.ts.map +1 -0
  77. package/dist/components/knowledge-graph/index.js +795 -0
  78. package/dist/components/knowledge-graph/index.js.map +1 -0
  79. package/dist/components/knowledge-graph/label-layout.d.ts +28 -0
  80. package/dist/components/knowledge-graph/label-layout.d.ts.map +1 -0
  81. package/dist/components/knowledge-graph/label-store.d.ts +15 -0
  82. package/dist/components/knowledge-graph/label-store.d.ts.map +1 -0
  83. package/dist/components/knowledge-graph/model.d.ts +92 -0
  84. package/dist/components/knowledge-graph/model.d.ts.map +1 -0
  85. package/dist/components/lightbox/lightbox.d.ts.map +1 -1
  86. package/dist/components/map/Map.d.ts +19 -43
  87. package/dist/components/map/Map.d.ts.map +1 -1
  88. package/dist/components/map/MapCoverageLayer.d.ts +1 -1
  89. package/dist/components/map/MapCoverageLayer.d.ts.map +1 -1
  90. package/dist/components/map/MapMarker.d.ts +1 -1
  91. package/dist/components/map/MapMarker.d.ts.map +1 -1
  92. package/dist/components/map/MapPlaceSearch.d.ts +33 -0
  93. package/dist/components/map/MapPlaceSearch.d.ts.map +1 -0
  94. package/dist/components/map/MapPointPicker.d.ts +21 -12
  95. package/dist/components/map/MapPointPicker.d.ts.map +1 -1
  96. package/dist/components/map/coordinates.d.ts +10 -0
  97. package/dist/components/map/coordinates.d.ts.map +1 -0
  98. package/dist/components/map/index.css +4 -0
  99. package/dist/components/map/index.css.map +1 -0
  100. package/dist/components/map/index.d.ts +7 -2
  101. package/dist/components/map/index.d.ts.map +1 -1
  102. package/dist/components/map/index.js +3 -0
  103. package/dist/components/map/index.js.map +1 -0
  104. package/dist/components/nav-card/nav-card.d.ts.map +1 -1
  105. package/dist/components/rail/rail.d.ts.map +1 -1
  106. package/dist/components/research/diagram-image.d.ts +11 -0
  107. package/dist/components/research/diagram-image.d.ts.map +1 -0
  108. package/dist/components/research/diagram.d.ts +8 -0
  109. package/dist/components/research/diagram.d.ts.map +1 -0
  110. package/dist/components/research/document.d.ts +33 -0
  111. package/dist/components/research/document.d.ts.map +1 -0
  112. package/dist/components/research/frontmatter.d.ts +15 -0
  113. package/dist/components/research/frontmatter.d.ts.map +1 -0
  114. package/dist/components/research/index.css +51 -0
  115. package/dist/components/research/index.css.map +1 -0
  116. package/dist/components/research/index.d.ts +3 -0
  117. package/dist/components/research/index.d.ts.map +1 -0
  118. package/dist/components/research/index.js +6 -0
  119. package/dist/components/research/index.js.map +1 -0
  120. package/dist/components/research/parse.d.ts +29 -0
  121. package/dist/components/research/parse.d.ts.map +1 -0
  122. package/dist/components/research-editor/block-commands.d.ts +20 -0
  123. package/dist/components/research-editor/block-commands.d.ts.map +1 -0
  124. package/dist/components/research-editor/block-controls.d.ts +13 -0
  125. package/dist/components/research-editor/block-controls.d.ts.map +1 -0
  126. package/dist/components/research-editor/editor.d.ts +75 -0
  127. package/dist/components/research-editor/editor.d.ts.map +1 -0
  128. package/dist/components/research-editor/extensions.d.ts +14 -0
  129. package/dist/components/research-editor/extensions.d.ts.map +1 -0
  130. package/dist/components/research-editor/index.css +332 -0
  131. package/dist/components/research-editor/index.css.map +1 -0
  132. package/dist/components/research-editor/index.d.ts +5 -0
  133. package/dist/components/research-editor/index.d.ts.map +1 -0
  134. package/dist/components/research-editor/index.js +1592 -0
  135. package/dist/components/research-editor/index.js.map +1 -0
  136. package/dist/components/research-editor/math-input.d.ts +32 -0
  137. package/dist/components/research-editor/math-input.d.ts.map +1 -0
  138. package/dist/components/research-editor/math-markup.d.ts +4 -0
  139. package/dist/components/research-editor/math-markup.d.ts.map +1 -0
  140. package/dist/components/research-editor/math-navigation.d.ts +6 -0
  141. package/dist/components/research-editor/math-navigation.d.ts.map +1 -0
  142. package/dist/components/research-editor/math-node.d.ts +11 -0
  143. package/dist/components/research-editor/math-node.d.ts.map +1 -0
  144. package/dist/components/research-editor/source.d.ts +19 -0
  145. package/dist/components/research-editor/source.d.ts.map +1 -0
  146. package/dist/components/scrollbar/scrollbar.d.ts +4 -2
  147. package/dist/components/scrollbar/scrollbar.d.ts.map +1 -1
  148. package/dist/components/search-input/search-input.d.ts +0 -10
  149. package/dist/components/search-input/search-input.d.ts.map +1 -1
  150. package/dist/components/tiptap-renderer/tiptap-renderer.d.ts +4 -3
  151. package/dist/components/tiptap-renderer/tiptap-renderer.d.ts.map +1 -1
  152. package/dist/core/index.d.ts +1 -1
  153. package/dist/core/index.d.ts.map +1 -1
  154. package/dist/core/index.js +8 -4
  155. package/dist/core/provider.d.ts +7 -2
  156. package/dist/core/provider.d.ts.map +1 -1
  157. package/dist/forms/schema-provider.d.ts +3 -3
  158. package/dist/forms/schema-utils.d.ts +3 -3
  159. package/dist/hooks/index.js +9 -5
  160. package/dist/icons/context.d.ts +17 -0
  161. package/dist/icons/context.d.ts.map +1 -0
  162. package/dist/icons/controls.d.ts +51 -0
  163. package/dist/icons/controls.d.ts.map +1 -0
  164. package/dist/icons/index.d.ts +3 -0
  165. package/dist/icons/index.d.ts.map +1 -0
  166. package/dist/icons/index.js +4 -0
  167. package/dist/icons/index.js.map +1 -0
  168. package/dist/icons/theme.d.ts +4 -0
  169. package/dist/icons/theme.d.ts.map +1 -0
  170. package/dist/index.css +4 -0
  171. package/dist/index.css.map +1 -1
  172. package/dist/index.js +24 -13
  173. package/dist/index.js.map +1 -1
  174. package/dist/layouts/core/header-section.d.ts.map +1 -1
  175. package/dist/layouts/dashboard/labels.d.ts +12 -0
  176. package/dist/layouts/dashboard/labels.d.ts.map +1 -0
  177. package/dist/layouts/dashboard/layout.d.ts +7 -1
  178. package/dist/layouts/dashboard/layout.d.ts.map +1 -1
  179. package/dist/layouts/dashboard/sidenav.d.ts +7 -3
  180. package/dist/layouts/dashboard/sidenav.d.ts.map +1 -1
  181. package/dist/layouts/index.d.ts +5 -0
  182. package/dist/layouts/index.d.ts.map +1 -1
  183. package/dist/layouts/index.js +6 -1
  184. package/dist/layouts/panel-layout.d.ts +35 -0
  185. package/dist/layouts/panel-layout.d.ts.map +1 -0
  186. package/dist/layouts/sidebar-toggle.d.ts +11 -0
  187. package/dist/layouts/sidebar-toggle.d.ts.map +1 -0
  188. package/dist/state/stores/auth.d.ts +4 -16
  189. package/dist/state/stores/auth.d.ts.map +1 -1
  190. package/dist/state/stores/ui.d.ts +7 -105
  191. package/dist/state/stores/ui.d.ts.map +1 -1
  192. package/dist/theme/components/Button.d.ts.map +1 -1
  193. package/dist/theme/components/FormControls.d.ts +3 -12
  194. package/dist/theme/components/FormControls.d.ts.map +1 -1
  195. package/dist/theme/components/index.d.ts.map +1 -1
  196. package/dist/theme/create-theme.d.ts +5 -17
  197. package/dist/theme/create-theme.d.ts.map +1 -1
  198. package/dist/theme/index.js +6 -2
  199. package/dist/theme/mixins.d.ts +3 -1
  200. package/dist/theme/mixins.d.ts.map +1 -1
  201. package/dist/theme/palette/overrides.d.ts +23 -0
  202. package/dist/theme/palette/overrides.d.ts.map +1 -0
  203. package/dist/ui/index.d.ts +18 -0
  204. package/dist/ui/index.d.ts.map +1 -0
  205. package/dist/ui/index.js +148 -0
  206. package/dist/ui/index.js.map +1 -0
  207. package/package.json +92 -45
  208. package/dist/chunk-6AHI4GSV.js.map +0 -1
  209. package/dist/chunk-BZOL7GMU.js.map +0 -1
  210. package/dist/chunk-OBJ244BO.js.map +0 -1
  211. package/dist/chunk-WFD54GQQ.js.map +0 -1
  212. package/dist/chunk-YQW43BDH.js.map +0 -1
  213. package/dist/chunk-Z5OSPAOC.js.map +0 -1
  214. package/dist/chunk-ZTATTUH7.js.map +0 -1
@@ -0,0 +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"]}
@@ -0,0 +1,28 @@
1
+ /** World-coordinate rectangles. Viewport pan/zoom never changes label placement. */
2
+ export interface LabelRect {
3
+ x: number;
4
+ y: number;
5
+ width: number;
6
+ height: number;
7
+ }
8
+ export interface LabelAnchor {
9
+ id: string;
10
+ text: string;
11
+ x: number;
12
+ y: number;
13
+ }
14
+ export interface MeasuredLabel extends LabelAnchor {
15
+ width: number;
16
+ height: number;
17
+ }
18
+ export interface PlacedLabel extends MeasuredLabel {
19
+ box: LabelRect;
20
+ }
21
+ /** Deterministic greedy placement, not a global minimum of displacement.
22
+ * For each label, solve the horizontal and vertical interval complements and
23
+ * choose the nearer free position. Each step avoids all nodes and prior labels,
24
+ * so induction gives pairwise disjoint boxes with the requested gap. A finite
25
+ * obstacle set always leaves space on the unbounded canvas. O(L(N+L) log(N+L)). */
26
+ export declare function placeEdgeLabels(labels: readonly MeasuredLabel[], nodes: readonly LabelRect[], gap?: number): PlacedLabel[];
27
+ export declare function enclosingRect(rects: readonly LabelRect[]): LabelRect | undefined;
28
+ //# sourceMappingURL=label-layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"label-layout.d.ts","sourceRoot":"","sources":["../../../src/components/knowledge-graph/label-layout.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,MAAM,WAAW,SAAS;IACxB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AACD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AACD,MAAM,WAAW,aAAc,SAAQ,WAAW;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AACD,MAAM,WAAW,WAAY,SAAQ,aAAa;IAChD,GAAG,EAAE,SAAS,CAAC;CAChB;AAgBD;;;;mFAImF;AACnF,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,EAAE,KAAK,EAAE,SAAS,SAAS,EAAE,EAAE,GAAG,SAAI,GAAG,WAAW,EAAE,CA8BrH;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,GAAG,SAAS,CAahF"}
@@ -0,0 +1,15 @@
1
+ import type { LabelAnchor } from './label-layout.js';
2
+ /** Edge components report path anchors; one microtask publishes the whole frame.
3
+ * Registration is per mounted graph, never global, and removes culled edges. */
4
+ export declare class EdgeLabelStore {
5
+ private anchors;
6
+ private snapshot;
7
+ private listeners;
8
+ private pending;
9
+ getSnapshot: () => readonly LabelAnchor[];
10
+ subscribe: (listener: () => void) => () => void;
11
+ set(anchor: LabelAnchor): void;
12
+ remove(id: string): void;
13
+ private publish;
14
+ }
15
+ //# sourceMappingURL=label-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"label-store.d.ts","sourceRoot":"","sources":["../../../src/components/knowledge-graph/label-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;gFACgF;AAChF,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,OAAO,CAAS;IACxB,WAAW,+BAAuB;IAClC,SAAS,aAAc,MAAM,IAAI,gBAK/B;IACF,GAAG,CAAC,MAAM,EAAE,WAAW,QAKtB;IACD,MAAM,CAAC,EAAE,EAAE,MAAM,QAEhB;IACD,OAAO,CAAC,OAAO;CAShB"}
@@ -0,0 +1,92 @@
1
+ /** Host-supplied observations; badges do not change graph semantics or entailment. */
2
+ export interface KnowledgeBadge {
3
+ label: string;
4
+ tone?: 'default' | 'info' | 'success' | 'warning' | 'error';
5
+ }
6
+ /** Typed incidence projection. Layout never changes the graph or creates an entailment. */
7
+ export interface KnowledgeEntity {
8
+ id: string;
9
+ kind: string;
10
+ label: string;
11
+ description?: string;
12
+ badges?: readonly KnowledgeBadge[];
13
+ }
14
+ export interface KnowledgePort {
15
+ entity: string;
16
+ role: string;
17
+ }
18
+ export interface KnowledgeRelation {
19
+ id: string;
20
+ kind: string;
21
+ label: string;
22
+ inputs: readonly KnowledgePort[];
23
+ outputs: readonly KnowledgePort[];
24
+ description?: string;
25
+ badges?: readonly KnowledgeBadge[];
26
+ }
27
+ export interface KnowledgeGraphData {
28
+ entities: readonly KnowledgeEntity[];
29
+ relations: readonly KnowledgeRelation[];
30
+ }
31
+ export type KnowledgeSelection = {
32
+ type: 'entity' | 'relation';
33
+ id: string;
34
+ };
35
+ export interface KnowledgeProjection {
36
+ entities: KnowledgeEntity[];
37
+ relations: KnowledgeRelation[];
38
+ total: number;
39
+ omittedRelations: number;
40
+ limited: boolean;
41
+ }
42
+ export declare function validateKnowledgeGraph(data: KnowledgeGraphData): void;
43
+ /** A relation is included atomically, with all of its ordered input/output occurrences.
44
+ * A tight budget reports omitted relations; it never renders half a justification. */
45
+ export declare function projectKnowledgeGraph(data: KnowledgeGraphData, selection: KnowledgeSelection | undefined, budget?: number): KnowledgeProjection;
46
+ export declare const entityNodeId: (id: string) => string;
47
+ export declare const relationNodeId: (id: string) => string;
48
+ export declare function incidenceGraph(projection: KnowledgeProjection): {
49
+ nodes: ({
50
+ id: string;
51
+ selection: {
52
+ type: 'entity';
53
+ id: string;
54
+ };
55
+ label: string;
56
+ kind: string;
57
+ description: string | undefined;
58
+ badges: readonly KnowledgeBadge[] | undefined;
59
+ } | {
60
+ id: string;
61
+ selection: {
62
+ type: 'relation';
63
+ id: string;
64
+ };
65
+ label: string;
66
+ kind: string;
67
+ description: string | undefined;
68
+ badges: readonly KnowledgeBadge[] | undefined;
69
+ inputs: number;
70
+ outputs: number;
71
+ })[];
72
+ edges: ({
73
+ id: string;
74
+ source: string;
75
+ target: string;
76
+ label: string;
77
+ targetHandle: string;
78
+ relationId: string;
79
+ side: "inputs" | "outputs";
80
+ index: number;
81
+ } | {
82
+ id: string;
83
+ source: string;
84
+ target: string;
85
+ label: string;
86
+ sourceHandle: string;
87
+ relationId: string;
88
+ side: "inputs" | "outputs";
89
+ index: number;
90
+ })[];
91
+ };
92
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/components/knowledge-graph/model.ts"],"names":[],"mappings":"AAAA,sFAAsF;AACtF,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;CAC7D;AACD,2FAA2F;AAC3F,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;CACpC;AACD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AACD,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;IACjC,OAAO,EAAE,SAAS,aAAa,EAAE,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;CACpC;AACD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAC;IACrC,SAAS,EAAE,SAAS,iBAAiB,EAAE,CAAC;CACzC;AACD,MAAM,MAAM,kBAAkB,GAAG;IAAE,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAC7E,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;CAClB;AACD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAqBrE;AACD;sFACsF;AACtF,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,kBAAkB,EACxB,SAAS,EAAE,kBAAkB,GAAG,SAAS,EACzC,MAAM,SAAM,GACX,mBAAmB,CAgCrB;AACD,eAAO,MAAM,YAAY,OAAQ,MAAM,WAAmC,CAAC;AAC3E,eAAO,MAAM,cAAc,OAAQ,MAAM,WAAqC,CAAC;AAC/E,wBAAgB,cAAc,CAAC,UAAU,EAAE,mBAAmB;;;;YAI3C,IAAI,EAAE,QAAQ;YAAW,EAAE;;;;;;;;;YAQ3B,IAAI,EAAE,UAAU;YAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwB/C"}
@@ -1 +1 @@
1
- {"version":3,"file":"lightbox.d.ts","sourceRoot":"","sources":["../../../src/components/lightbox/lightbox.tsx"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,YAAY,CAAC;AAyC/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,QAAQ,CAAC,EACvB,IAAI,EACJ,OAAO,EACP,MAAM,EACN,KAAK,EAAE,eAAmB,EAC1B,aAAa,EACb,UAAkB,EAClB,IAAW,EACX,UAAiB,EACjB,OAAc,EACd,QAAgB,EAChB,KAAa,EACb,IAAY,EACZ,QAAe,EACf,KAAY,EACZ,SAA+B,EAC/B,oBAA2B,EAC3B,UAAiB,EACjB,OAAyC,EACzC,MAAM,EAAE,cAAc,EACtB,EAAE,EACF,SAAS,EACT,SAAS,EACT,GAAG,WAAW,EACf,EAAE,aAAa,sCA2qBf"}
1
+ {"version":3,"file":"lightbox.d.ts","sourceRoot":"","sources":["../../../src/components/lightbox/lightbox.tsx"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,YAAY,CAAC;AAyC/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,QAAQ,CAAC,EACvB,IAAI,EACJ,OAAO,EACP,MAAM,EACN,KAAK,EAAE,eAAmB,EAC1B,aAAa,EACb,UAAkB,EAClB,IAAW,EACX,UAAiB,EACjB,OAAc,EACd,QAAgB,EAChB,KAAa,EACb,IAAY,EACZ,QAAe,EACf,KAAY,EACZ,SAA+B,EAC/B,oBAA2B,EAC3B,UAAiB,EACjB,OAAyC,EACzC,MAAM,EAAE,cAAc,EACtB,EAAE,EACF,SAAS,EACT,SAAS,EACT,GAAG,WAAW,EACf,EAAE,aAAa,sCA6qBf"}
@@ -1,27 +1,6 @@
1
- /**
2
- * Map Component
3
- *
4
- * Thin wrapper around `react-map-gl/maplibre` that picks up the
5
- * prism theme (light/dark) and ships sensible defaults
6
- * (NavigationControl, ScaleControl, attribution). All app-level
7
- * map UIs build on top of this — see `<MapMarker>`,
8
- * `<MapPointPicker>`, `<MapCoverageLayer>`.
9
- *
10
- * Tile source:
11
- * - `styleUrl` prop OR
12
- * - `MAP_STYLE_URL` browser-side env var injected by host app
13
- *
14
- * The downstream platform is closed and Tor-friendly, so the tile
15
- * source MUST be self-hosted (no maptiler/mapbox CDN that would
16
- * leak user IPs). A fallback in-component style renders a flat
17
- * neutral background so the map UI is visible during local dev
18
- * before tile infra is set up.
19
- *
20
- * @module components/map
21
- */
22
- import 'maplibre-gl/dist/maplibre-gl.css';
1
+ import './map.css';
23
2
  import type { CSSProperties, ReactNode } from 'react';
24
- import type { MapRef } from 'react-map-gl/maplibre';
3
+ import type { MapProps as EngineProps, MapRef } from 'react-map-gl/maplibre';
25
4
  import type { StyleSpecification } from 'maplibre-gl';
26
5
  export interface MapViewport {
27
6
  longitude: number;
@@ -30,34 +9,31 @@ export interface MapViewport {
30
9
  bearing?: number;
31
10
  pitch?: number;
32
11
  }
33
- export interface MapProps {
34
- /** Style JSON URL (vector tile server) or inline StyleSpecification. */
35
- styleUrl?: string | StyleSpecification;
36
- /** Controlled viewport (camera). Pair with `onViewportChange` for two-way sync. */
12
+ export type MapStyle = string | StyleSpecification;
13
+ export interface MapMessages {
14
+ label: string;
15
+ missingStyle: string;
16
+ loading: string;
17
+ error: string;
18
+ }
19
+ export interface MapProps extends Omit<EngineProps, 'mapStyle' | 'style' | 'children'> {
20
+ /** Explicit style, or legacy host-injected window.__MAP_STYLE_URL__. No public fallback. */
21
+ styleUrl?: MapStyle;
22
+ /** Separate complete styles; selecting a theme does not rewrite provider layers. */
23
+ styles?: {
24
+ light: MapStyle;
25
+ dark: MapStyle;
26
+ };
37
27
  viewport?: Partial<MapViewport>;
38
- /** Defaults when `viewport` is uncontrolled or partially specified. */
39
28
  initialViewport?: Partial<MapViewport>;
40
- /** Callback for every camera change (drag/zoom/rotate). */
41
29
  onViewportChange?: (next: MapViewport) => void;
42
- /** Show NavigationControl (zoom + compass). Default: true. */
43
30
  showNavigation?: boolean;
44
- /** Show ScaleControl. Default: true. */
45
31
  showScale?: boolean;
46
- /** Show attribution. Default: true. */
47
32
  showAttribution?: boolean;
48
- /** Container style — pass `height` here. Default 400px height. */
49
33
  style?: CSSProperties;
50
- /** Cursor while idle. */
51
- cursor?: 'grab' | 'pointer' | 'crosshair' | string;
52
- /** Click handler on the map canvas. */
53
- onClick?: (event: {
54
- lngLat: {
55
- lng: number;
56
- lat: number;
57
- };
58
- }) => void;
59
- /** Layer/marker children rendered inside the MapLibre canvas. */
34
+ messages?: Partial<MapMessages>;
60
35
  children?: ReactNode;
61
36
  }
37
+ /** Provider-neutral MapLibre surface. Sources/layers/events remain fully typed. */
62
38
  export declare const Map: import("react").ForwardRefExoticComponent<MapProps & import("react").RefAttributes<MapRef>>;
63
39
  //# sourceMappingURL=Map.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Map.d.ts","sourceRoot":"","sources":["../../../src/components/map/Map.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,kCAAkC,CAAC;AAG1C,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEtD,OAAO,KAAK,EAAE,MAAM,EAAmC,MAAM,uBAAuB,CAAC;AAGrF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAgBtD,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,QAAQ;IACvB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,GAAG,kBAAkB,CAAC;IACvC,mFAAmF;IACnF,QAAQ,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAChC,uEAAuE;IACvE,eAAe,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IACvC,2DAA2D;IAC3D,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IAC/C,8DAA8D;IAC9D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,wCAAwC;IACxC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,uCAAuC;IACvC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kEAAkE;IAClE,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,yBAAyB;IACzB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,CAAC;IACnD,uCAAuC;IACvC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,MAAM,EAAE;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,KAAK,IAAI,CAAC;IACpE,iEAAiE;IACjE,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AA6BD,eAAO,MAAM,GAAG,6FAuFd,CAAC"}
1
+ {"version":3,"file":"Map.d.ts","sourceRoot":"","sources":["../../../src/components/map/Map.tsx"],"names":[],"mappings":"AAEA,OAAO,WAAW,CAAC;AAEnB,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAItD,OAAO,KAAK,EAAE,QAAQ,IAAI,WAAW,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE7E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAStD,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AACD,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,kBAAkB,CAAC;AACnD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAOD,MAAM,WAAW,QAAS,SAAQ,IAAI,CAAC,WAAW,EAAE,UAAU,GAAG,OAAO,GAAG,UAAU,CAAC;IACpF,4FAA4F;IAC5F,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,oFAAoF;IACpF,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,QAAQ,CAAC;QAAC,IAAI,EAAE,QAAQ,CAAA;KAAE,CAAC;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAChC,eAAe,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IACvC,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IAC/C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAChC,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAGD,mFAAmF;AACnF,eAAO,MAAM,GAAG,6FA0Id,CAAC"}
@@ -21,5 +21,5 @@ export interface MapCoverageLayerProps {
21
21
  /** Show label text alongside each marker (zoom 12+). */
22
22
  showLabels?: boolean;
23
23
  }
24
- export declare function MapCoverageLayer({ id, points, colorByStatus, radius, showLabels, }: MapCoverageLayerProps): import("react").JSX.Element;
24
+ export declare function MapCoverageLayer({ id, points, colorByStatus, radius, showLabels }: MapCoverageLayerProps): import("react").JSX.Element;
25
25
  //# sourceMappingURL=MapCoverageLayer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MapCoverageLayer.d.ts","sourceRoot":"","sources":["../../../src/components/map/MapCoverageLayer.tsx"],"names":[],"mappings":"AAuBA,MAAM,WAAW,aAAa;IAC5B,iEAAiE;IACjE,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB;;mEAE+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB;iDAC6C;IAC7C,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,EAAE,EACF,MAAM,EACN,aAAa,EACb,MAAU,EACV,UAAkB,GACnB,EAAE,qBAAqB,+BAoEvB"}
1
+ {"version":3,"file":"MapCoverageLayer.d.ts","sourceRoot":"","sources":["../../../src/components/map/MapCoverageLayer.tsx"],"names":[],"mappings":"AAuBA,MAAM,WAAW,aAAa;IAC5B,iEAAiE;IACjE,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB;;mEAE+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB;iDAC6C;IAC7C,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,MAAU,EAAE,UAAkB,EAAE,EAAE,qBAAqB,+BAoEpH"}
@@ -13,5 +13,5 @@ export interface MapMarkerProps {
13
13
  /** Click-through handler. */
14
14
  onClick?: () => void;
15
15
  }
16
- export declare function MapMarker({ longitude, latitude, color, children, popup, anchor, onClick, }: MapMarkerProps): import("react").JSX.Element;
16
+ export declare function MapMarker({ longitude, latitude, color, children, popup, anchor, onClick }: MapMarkerProps): import("react").JSX.Element;
17
17
  //# sourceMappingURL=MapMarker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MapMarker.d.ts","sourceRoot":"","sources":["../../../src/components/map/MapMarker.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,iCAAiC;IACjC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IACxD,6BAA6B;IAC7B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,wBAAgB,SAAS,CAAC,EACxB,SAAS,EACT,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,KAAK,EACL,MAAiB,EACjB,OAAO,GACR,EAAE,cAAc,+BA2ChB"}
1
+ {"version":3,"file":"MapMarker.d.ts","sourceRoot":"","sources":["../../../src/components/map/MapMarker.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,iCAAiC;IACjC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IACxD,6BAA6B;IAC7B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,wBAAgB,SAAS,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAiB,EAAE,OAAO,EAAE,EAAE,cAAc,+BAmCpH"}
@@ -0,0 +1,33 @@
1
+ import type { MapPointPickerValue } from './coordinates.js';
2
+ export interface MapPlace {
3
+ /** Provider-stable identifier, qualified with the provider name. */
4
+ id: string;
5
+ label: string;
6
+ point: MapPointPickerValue;
7
+ }
8
+ export interface MapPlaceSearchLabels {
9
+ label: string;
10
+ search: string;
11
+ clear: string;
12
+ loading: string;
13
+ empty: string;
14
+ hint: string;
15
+ error: string;
16
+ }
17
+ export interface MapPlaceSearchProps<T extends MapPlace = MapPlace> {
18
+ /** Supply a Netron/API adapter. Prism makes no requests to a provider itself. */
19
+ search: (query: string, options: {
20
+ signal: AbortSignal;
21
+ limit: number;
22
+ }) => Promise<readonly T[]>;
23
+ onSelect: (place: T) => void;
24
+ /** Explicit submission works with every geocoder; autocomplete must be provider-supported. */
25
+ mode?: 'submit' | 'autocomplete';
26
+ debounceMs?: number;
27
+ minLength?: number;
28
+ limit?: number;
29
+ disabled?: boolean;
30
+ labels?: Partial<MapPlaceSearchLabels>;
31
+ }
32
+ export declare function MapPlaceSearch<T extends MapPlace>({ search, onSelect, mode, debounceMs, minLength, limit, disabled, labels, }: MapPlaceSearchProps<T>): import("react").JSX.Element;
33
+ //# sourceMappingURL=MapPlaceSearch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MapPlaceSearch.d.ts","sourceRoot":"","sources":["../../../src/components/map/MapPlaceSearch.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE5D,MAAM,WAAW,QAAQ;IACvB,oEAAoE;IACpE,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,mBAAmB,CAAC;CAC5B;AACD,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAUD,MAAM,WAAW,mBAAmB,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ;IAChE,iFAAiF;IACjF,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,MAAM,EAAE,WAAW,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAClG,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC7B,8FAA8F;IAC9F,IAAI,CAAC,EAAE,QAAQ,GAAG,cAAc,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;CACxC;AACD,wBAAgB,cAAc,CAAC,CAAC,SAAS,QAAQ,EAAE,EACjD,MAAM,EACN,QAAQ,EACR,IAAe,EACf,UAAgB,EAChB,SAAa,EACb,KAAS,EACT,QAAgB,EAChB,MAAM,GACP,EAAE,mBAAmB,CAAC,CAAC,CAAC,+BA8JxB"}
@@ -1,26 +1,35 @@
1
1
  import type { ReactNode } from 'react';
2
2
  import type { MapProps, MapViewport } from './Map.js';
3
- export interface MapPointPickerValue {
4
- lng: number;
5
- lat: number;
3
+ import type { MapPointPickerValue } from './coordinates.js';
4
+ export type { MapPointPickerValue } from './coordinates.js';
5
+ export interface MapPointPickerLabels {
6
+ placeholder: string;
7
+ coordinates: string;
8
+ place: string;
9
+ loading: string;
10
+ unknown: string;
11
+ chooseCenter: string;
12
+ clear: string;
13
+ marker: string;
6
14
  }
7
15
  export interface MapPointPickerProps {
8
- /** Currently picked point, or null if nothing yet. */
9
16
  value: MapPointPickerValue | null;
10
- /** Called on click and on marker drag-end. */
11
17
  onChange: (next: MapPointPickerValue) => void;
12
- /** Initial map viewport. Default Moscow at zoom 4. */
18
+ onClear?: () => void;
13
19
  initialViewport?: Partial<MapViewport>;
14
- /** Override map tile style. */
20
+ /** Minimum zoom when receiving a newly selected point. */
21
+ selectionZoom?: number;
15
22
  styleUrl?: MapProps['styleUrl'];
16
- /** Container height (passed to inner Map). */
17
23
  height?: number;
18
- /** Reverse-geocode response to display in the side panel. */
19
24
  geocodeResult?: ReactNode;
20
- /** Show a spinner in the side panel while host RPC is in flight. */
21
25
  geocodeLoading?: boolean;
22
- /** Hint text shown when value is null. */
26
+ geocodeError?: ReactNode;
23
27
  placeholder?: string;
28
+ labels?: Partial<MapPointPickerLabels>;
29
+ readOnly?: boolean;
30
+ showDetails?: boolean;
31
+ /** MapLibre sources, overlays and interaction configuration are reusable. */
32
+ mapProps?: Omit<MapProps, 'viewport' | 'onViewportChange' | 'onClick' | 'styleUrl' | 'initialViewport'>;
24
33
  }
25
- export declare function MapPointPicker({ value, onChange, initialViewport, styleUrl, height, geocodeResult, geocodeLoading, placeholder, }: MapPointPickerProps): import("react").JSX.Element;
34
+ export declare function MapPointPicker({ value, onChange, onClear, initialViewport, selectionZoom, styleUrl, height, geocodeResult, geocodeLoading, geocodeError, placeholder, labels, readOnly, showDetails, mapProps, }: MapPointPickerProps): import("react").JSX.Element;
26
35
  //# sourceMappingURL=MapPointPicker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MapPointPicker.d.ts","sourceRoot":"","sources":["../../../src/components/map/MapPointPicker.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMvC,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEtD,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,mBAAmB;IAClC,sDAAsD;IACtD,KAAK,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAClC,8CAA8C;IAC9C,QAAQ,EAAE,CAAC,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC9C,sDAAsD;IACtD,eAAe,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IACvC,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;IAChC,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,oEAAoE;IACpE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,QAAQ,EACR,eAAe,EACf,QAAQ,EACR,MAAY,EACZ,aAAa,EACb,cAAsB,EACtB,WAAsD,GACvD,EAAE,mBAAmB,+BAuFrB"}
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"}
@@ -0,0 +1,10 @@
1
+ /** WGS84 geographic coordinates. Camera constraints never alter the stored point. */
2
+ export interface MapPointPickerValue {
3
+ lng: number;
4
+ lat: number;
5
+ }
6
+ export declare function isMapPoint(value: MapPointPickerValue): boolean;
7
+ /** MapLibre may emit a longitude in another world copy after panning. */
8
+ export declare function normalizeMapPoint(lng: number, lat: number): MapPointPickerValue | null;
9
+ export declare function mapCameraLatitude(latitude: number): number;
10
+ //# sourceMappingURL=coordinates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coordinates.d.ts","sourceRoot":"","sources":["../../../src/components/map/coordinates.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AACD,wBAAgB,UAAU,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAS9D;AACD,yEAAyE;AACzE,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAGtF;AACD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE1D"}
@@ -0,0 +1,4 @@
1
+ @import "maplibre-gl/dist/maplibre-gl.css";
2
+
3
+ /* src/components/map/map.css */
4
+ /*# sourceMappingURL=index.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -4,11 +4,16 @@
4
4
  * @module components/map
5
5
  */
6
6
  export { Map } from './Map.js';
7
- export type { MapProps, MapViewport } from './Map.js';
7
+ export type { MapProps, MapViewport, MapStyle, MapMessages } from './Map.js';
8
8
  export { MapMarker } from './MapMarker.js';
9
9
  export type { MapMarkerProps } from './MapMarker.js';
10
10
  export { MapPointPicker } from './MapPointPicker.js';
11
- export type { MapPointPickerProps, MapPointPickerValue } from './MapPointPicker.js';
11
+ export type { MapPointPickerProps, MapPointPickerValue, MapPointPickerLabels } from './MapPointPicker.js';
12
12
  export { MapCoverageLayer } from './MapCoverageLayer.js';
13
13
  export type { MapCoverageLayerProps, CoveragePoint } from './MapCoverageLayer.js';
14
+ export { isMapPoint, normalizeMapPoint } from './coordinates.js';
15
+ export { Source as MapSource, Layer as MapLayer, Popup as MapPopup, useMap } from 'react-map-gl/maplibre';
16
+ export type { MapRef } from 'react-map-gl/maplibre';
17
+ export { MapPlaceSearch } from './MapPlaceSearch.js';
18
+ export type { MapPlace, MapPlaceSearchProps, MapPlaceSearchLabels } from './MapPlaceSearch.js';
14
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/map/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEtD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAEpF,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/map/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE7E,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE1G,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAElF,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE,KAAK,IAAI,QAAQ,EAAE,KAAK,IAAI,QAAQ,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC1G,YAAY,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,QAAQ,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { Map, MapCoverageLayer, Layer as MapLayer, MapMarker, MapPlaceSearch, MapPointPicker, Popup as MapPopup, Source as MapSource, isMapPoint, normalizeMapPoint, useMap } from '../../chunk-52PQL67Q.js';
2
+ //# sourceMappingURL=index.js.map
3
+ //# sourceMappingURL=index.js.map