@likec4/diagram 1.19.1 → 1.20.0

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 (582) hide show
  1. package/dist/LikeC4Diagram.css.d.ts +0 -1
  2. package/dist/LikeC4Diagram.css.js +1 -5
  3. package/dist/LikeC4Diagram.d.ts +1 -4
  4. package/dist/LikeC4Diagram.js +102 -147
  5. package/dist/LikeC4Diagram.props.d.ts +10 -16
  6. package/dist/LikeC4Search.js +7 -15
  7. package/dist/StaticLikeC4Diagram.d.ts +1 -1
  8. package/dist/base/Background.d.ts +7 -0
  9. package/dist/{xyflow/XYFlowBackground.js → base/Background.js} +5 -6
  10. package/dist/base/BaseXYFlow.d.ts +14 -0
  11. package/dist/base/BaseXYFlow.js +146 -0
  12. package/dist/base/example/RelationshipsBrowser.d.ts +6 -0
  13. package/dist/base/example/_types.d.ts +20 -0
  14. package/dist/base/example/custom.d.ts +71 -0
  15. package/dist/base/example/useViewToNodesEdges.d.ts +6 -0
  16. package/dist/base/index.d.ts +2 -0
  17. package/dist/base/primitives/NodeHandles.d.ts +4 -0
  18. package/dist/base/primitives/NodeHandles.js +14 -0
  19. package/dist/base/primitives/compound/CompoundActionButton.css.d.ts +3 -0
  20. package/dist/base/primitives/compound/CompoundActionButton.css.js +9 -0
  21. package/dist/base/primitives/compound/CompoundActionButton.d.ts +7 -0
  22. package/dist/base/primitives/compound/CompoundActionButton.js +48 -0
  23. package/dist/base/primitives/compound/CompoundDetailsButton.css.d.ts +3 -0
  24. package/dist/base/primitives/compound/CompoundDetailsButton.css.js +9 -0
  25. package/dist/base/primitives/compound/CompoundDetailsButton.d.ts +7 -0
  26. package/dist/base/primitives/compound/CompoundDetailsButton.js +50 -0
  27. package/dist/base/primitives/compound/CompoundNodeContainer.css.d.ts +9 -0
  28. package/dist/base/primitives/compound/CompoundNodeContainer.css.js +17 -0
  29. package/dist/base/primitives/compound/CompoundNodeContainer.d.ts +26 -0
  30. package/dist/base/primitives/compound/CompoundNodeContainer.js +86 -0
  31. package/dist/base/primitives/compound/CompoundTitle.css.d.ts +2 -0
  32. package/dist/base/primitives/compound/CompoundTitle.css.js +7 -0
  33. package/dist/base/primitives/compound/CompoundTitle.d.ts +6 -0
  34. package/dist/base/primitives/compound/CompoundTitle.js +20 -0
  35. package/dist/base/primitives/customEdge.d.ts +41 -0
  36. package/dist/base/primitives/customEdge.js +13 -0
  37. package/dist/base/primitives/customNode.d.ts +7 -0
  38. package/dist/base/primitives/customNode.js +10 -0
  39. package/dist/base/primitives/edge/EdgeActionButton.d.ts +7 -0
  40. package/dist/base/primitives/edge/EdgeActionButton.js +24 -0
  41. package/dist/base/primitives/edge/EdgeContainer.d.ts +10 -0
  42. package/dist/base/primitives/edge/EdgeContainer.js +35 -0
  43. package/dist/{xyflow/edges/edges.css.d.ts → base/primitives/edge/EdgeLabel.css.d.ts} +5 -9
  44. package/dist/base/primitives/edge/EdgeLabel.css.js +25 -0
  45. package/dist/base/primitives/edge/EdgeLabel.d.ts +51 -0
  46. package/dist/base/primitives/edge/EdgeLabel.js +90 -0
  47. package/dist/{xyflow → base/primitives/edge}/EdgeMarkers.d.ts +2 -0
  48. package/dist/{xyflow → base/primitives/edge}/EdgeMarkers.js +29 -1
  49. package/dist/base/primitives/edge/EdgePath.d.ts +44 -0
  50. package/dist/base/primitives/edge/EdgePath.js +77 -0
  51. package/dist/base/primitives/edge/edge.css.d.ts +6 -0
  52. package/dist/base/primitives/edge/edge.css.js +14 -0
  53. package/dist/base/primitives/element/ElementActionButtons.css.d.ts +3 -0
  54. package/dist/base/primitives/element/ElementActionButtons.css.js +9 -0
  55. package/dist/base/primitives/element/ElementActionButtons.d.ts +13 -0
  56. package/dist/base/primitives/element/ElementActionButtons.js +62 -0
  57. package/dist/base/primitives/element/ElementDetailsButton.css.d.ts +3 -0
  58. package/dist/base/primitives/element/ElementDetailsButton.css.js +9 -0
  59. package/dist/base/primitives/element/ElementDetailsButton.d.ts +7 -0
  60. package/dist/base/primitives/element/ElementDetailsButton.js +54 -0
  61. package/dist/base/primitives/element/ElementNodeContainer.css.d.ts +3 -0
  62. package/dist/base/primitives/element/ElementNodeContainer.css.js +7 -0
  63. package/dist/base/primitives/element/ElementNodeContainer.d.ts +26 -0
  64. package/dist/base/primitives/element/ElementNodeContainer.js +60 -0
  65. package/dist/base/primitives/element/ElementShape.css.d.ts +6 -0
  66. package/dist/base/primitives/element/ElementShape.css.js +14 -0
  67. package/dist/base/primitives/element/ElementShape.d.ts +28 -0
  68. package/dist/{xyflow/nodes/element/ElementShapeSvg.js → base/primitives/element/ElementShape.js} +23 -7
  69. package/dist/base/primitives/element/ElementTitle.css.d.ts +8 -0
  70. package/dist/base/primitives/element/ElementTitle.css.js +19 -0
  71. package/dist/base/primitives/element/ElementTitle.d.ts +10 -0
  72. package/dist/base/primitives/element/ElementTitle.js +66 -0
  73. package/dist/base/primitives/index.d.ts +17 -0
  74. package/dist/base/types.d.ts +90 -0
  75. package/dist/base/types.js +54 -0
  76. package/dist/base/updateEdges.d.ts +3 -0
  77. package/dist/base/updateEdges.js +31 -0
  78. package/dist/base/updateNodes.d.ts +3 -0
  79. package/dist/base/updateNodes.js +36 -0
  80. package/dist/base/xyflowMachine.d.ts +212 -0
  81. package/dist/context/DiagramEventHandlers.d.ts +10 -0
  82. package/dist/context/DiagramEventHandlers.js +49 -0
  83. package/dist/context/DiagramFeatures.d.ts +31 -0
  84. package/dist/context/DiagramFeatures.js +140 -0
  85. package/dist/{ui → context}/FramerMotionConfig.js +2 -4
  86. package/dist/context/IconRenderer.d.ts +11 -0
  87. package/dist/{xyflow/nodes/shared/ElementIcon.js → context/IconRenderer.js} +14 -14
  88. package/dist/context/RootContainer.d.ts +9 -0
  89. package/dist/context/RootContainer.js +20 -0
  90. package/dist/context/index.d.ts +7 -0
  91. package/dist/globals.css.js +0 -87
  92. package/dist/hooks/index.d.ts +7 -5
  93. package/dist/hooks/useCurrentViewId.d.ts +2 -0
  94. package/dist/hooks/useCurrentViewId.js +8 -0
  95. package/dist/hooks/useDiagram.d.ts +10725 -0
  96. package/dist/hooks/useDiagram.js +119 -0
  97. package/dist/hooks/useDiagramActor.d.ts +5 -0
  98. package/dist/hooks/useDiagramActor.js +21 -0
  99. package/dist/hooks/useDiagramContext.d.ts +3 -0
  100. package/dist/hooks/useDiagramContext.js +10 -0
  101. package/dist/hooks/useMantinePortalProps.js +2 -2
  102. package/dist/hooks/useXYFlow.d.ts +195 -37
  103. package/dist/hooks/useXYFlow.js +4 -6
  104. package/dist/index.d.ts +3 -2
  105. package/dist/index.js +5 -6
  106. package/dist/likec4diagram/DiagramActor.d.ts +7 -0
  107. package/dist/likec4diagram/DiagramActor.js +71 -0
  108. package/dist/likec4diagram/DiagramUI.d.ts +2 -0
  109. package/dist/likec4diagram/DiagramUI.js +22 -0
  110. package/dist/likec4diagram/XYFlow.d.ts +6 -0
  111. package/dist/likec4diagram/XYFlow.js +122 -0
  112. package/dist/likec4diagram/custom/edges/NotePopover.css.d.ts +2 -0
  113. package/dist/likec4diagram/custom/edges/NotePopover.css.js +7 -0
  114. package/dist/likec4diagram/custom/edges/NotePopover.d.ts +4 -0
  115. package/dist/likec4diagram/custom/edges/NotePopover.js +101 -0
  116. package/dist/likec4diagram/custom/edges/RelationshipEdge.d.ts +55 -0
  117. package/dist/likec4diagram/custom/edges/RelationshipEdge.js +307 -0
  118. package/dist/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.css.js +4 -4
  119. package/dist/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.d.ts +5 -5
  120. package/dist/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.js +51 -53
  121. package/dist/likec4diagram/custom/edges/edges.css.d.ts +2 -0
  122. package/dist/likec4diagram/custom/edges/edges.css.js +7 -0
  123. package/dist/likec4diagram/custom/edges/utils.d.ts +22 -0
  124. package/dist/likec4diagram/custom/edges/utils.js +25 -0
  125. package/dist/likec4diagram/custom/index.d.ts +57 -0
  126. package/dist/likec4diagram/custom/index.js +7 -0
  127. package/dist/likec4diagram/custom/nodes/CompoundActions.d.ts +5 -0
  128. package/dist/likec4diagram/custom/nodes/CompoundActions.js +25 -0
  129. package/dist/likec4diagram/custom/nodes/ElementActions.d.ts +7 -0
  130. package/dist/likec4diagram/custom/nodes/ElementActions.js +69 -0
  131. package/dist/likec4diagram/custom/nodes/nodeTypes.d.ts +10 -0
  132. package/dist/likec4diagram/custom/nodes/nodeTypes.js +94 -0
  133. package/dist/likec4diagram/custom/nodes/toolbar/ColorButton.d.ts +21 -0
  134. package/dist/likec4diagram/custom/nodes/toolbar/ColorButton.js +159 -0
  135. package/dist/likec4diagram/custom/nodes/toolbar/CompoundToolbar.d.ts +7 -0
  136. package/dist/likec4diagram/custom/nodes/toolbar/CompoundToolbar.js +128 -0
  137. package/dist/likec4diagram/custom/nodes/toolbar/ElementToolbar.d.ts +7 -0
  138. package/dist/likec4diagram/custom/nodes/toolbar/ElementToolbar.js +149 -0
  139. package/dist/likec4diagram/custom/nodes/toolbar/Toolbar.d.ts +8 -0
  140. package/dist/likec4diagram/custom/nodes/toolbar/Toolbar.js +66 -0
  141. package/dist/likec4diagram/custom/nodes/toolbar/_shared.d.ts +40 -0
  142. package/dist/likec4diagram/custom/nodes/toolbar/_shared.js +131 -0
  143. package/dist/likec4diagram/custom/nodes/toolbar/styles.css.d.ts +1 -0
  144. package/dist/likec4diagram/custom/nodes/toolbar/styles.css.js +5 -0
  145. package/dist/likec4diagram/state/actorContext.d.ts +50849 -0
  146. package/dist/likec4diagram/state/actorContext.js +12 -0
  147. package/dist/{state → likec4diagram/state}/aligners.d.ts +4 -1
  148. package/dist/{state → likec4diagram/state}/aligners.js +31 -5
  149. package/dist/likec4diagram/state/assign.d.ts +18 -0
  150. package/dist/likec4diagram/state/assign.js +343 -0
  151. package/dist/likec4diagram/state/hotkeyActor.d.ts +5 -0
  152. package/dist/likec4diagram/state/hotkeyActor.js +18 -0
  153. package/dist/likec4diagram/state/inspector.d.ts +5 -0
  154. package/dist/likec4diagram/state/machine.d.ts +10751 -0
  155. package/dist/likec4diagram/state/machine.js +783 -0
  156. package/dist/likec4diagram/state/syncManualLayoutActor.d.ts +113 -0
  157. package/dist/likec4diagram/state/syncManualLayoutActor.js +178 -0
  158. package/dist/likec4diagram/state/utils.d.ts +8 -0
  159. package/dist/likec4diagram/state/utils.js +48 -0
  160. package/dist/likec4diagram/types.d.ts +74 -0
  161. package/dist/{ui/top-left → likec4diagram/ui/controls}/ChangeAutoLayoutButton.js +11 -10
  162. package/dist/likec4diagram/ui/controls/Controls.d.ts +2 -0
  163. package/dist/likec4diagram/ui/controls/Controls.js +102 -0
  164. package/dist/likec4diagram/ui/controls/LayoutDriftNotification.d.ts +2 -0
  165. package/dist/likec4diagram/ui/controls/LayoutDriftNotification.js +43 -0
  166. package/dist/{ui/top-left → likec4diagram/ui/controls}/ManualLayoutToolsButton.js +11 -11
  167. package/dist/likec4diagram/ui/controls/NavigationButtons.d.ts +1 -0
  168. package/dist/likec4diagram/ui/controls/NavigationButtons.js +92 -0
  169. package/dist/{ui/top-left → likec4diagram/ui/controls}/_shared.js +2 -1
  170. package/dist/{ui/top-left → likec4diagram/ui/controls}/styles.css.d.ts +1 -1
  171. package/dist/likec4diagram/ui/controls/styles.css.js +17 -0
  172. package/dist/likec4diagram/ui/diagram-title/DiagramTitlePanel.css.js +11 -0
  173. package/dist/likec4diagram/ui/diagram-title/DiagramTitlePanel.d.ts +1 -0
  174. package/dist/{ui → likec4diagram/ui/diagram-title}/DiagramTitlePanel.js +3 -3
  175. package/dist/likec4diagram/ui/diagram-title/Link.d.ts +4 -0
  176. package/dist/likec4diagram/ui/index.d.ts +2 -0
  177. package/dist/likec4diagram/ui/notation/NotationPanel.css.js +13 -0
  178. package/dist/likec4diagram/ui/notation/NotationPanel.d.ts +2 -0
  179. package/dist/{ui → likec4diagram/ui}/notation/NotationPanel.js +23 -31
  180. package/dist/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.css.js +4 -4
  181. package/dist/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.js +19 -44
  182. package/dist/{xyflow → likec4diagram}/useLayoutConstraints.d.ts +11 -6
  183. package/dist/{xyflow → likec4diagram}/useLayoutConstraints.js +17 -12
  184. package/dist/likec4diagram/useViewToNodesEdges.d.ts +11 -0
  185. package/dist/likec4diagram/useViewToNodesEdges.js +245 -0
  186. package/dist/likec4model/index.d.ts +1 -1
  187. package/dist/likec4model/useLikeC4Model.d.ts +1 -11
  188. package/dist/likec4model/useLikeC4Model.js +1 -39
  189. package/dist/overlays/Overlays.js +61 -105
  190. package/dist/overlays/element-details/ElementDetailsCard.js +111 -116
  191. package/dist/overlays/element-details/TabPanelDeployments.js +4 -7
  192. package/dist/overlays/element-details/TabPanelRelationships.css.js +0 -2
  193. package/dist/overlays/element-details/TabPanelRelationships.d.ts +1 -1
  194. package/dist/overlays/element-details/TabPanelRelationships.js +35 -64
  195. package/dist/overlays/element-details/TabPanelStructure.d.ts +2 -2
  196. package/dist/overlays/element-details/TabPanelStructure.js +1 -1
  197. package/dist/overlays/overlay/Overlay.css.d.ts +2 -0
  198. package/dist/overlays/overlay/Overlay.css.js +93 -0
  199. package/dist/overlays/overlay/Overlay.d.ts +8 -0
  200. package/dist/overlays/overlay/Overlay.js +86 -0
  201. package/dist/overlays/relationship-details/RelationshipDetails.d.ts +5 -0
  202. package/dist/overlays/relationship-details/RelationshipDetails.js +189 -0
  203. package/dist/overlays/{edge-details → relationship-details}/SelectEdge.css.d.ts +1 -0
  204. package/dist/overlays/relationship-details/SelectEdge.css.js +17 -0
  205. package/dist/overlays/{edge-details → relationship-details}/SelectEdge.d.ts +1 -1
  206. package/dist/overlays/{edge-details → relationship-details}/SelectEdge.js +8 -8
  207. package/dist/overlays/relationship-details/_types.d.ts +36 -0
  208. package/dist/overlays/relationship-details/actor.d.ts +41 -0
  209. package/dist/overlays/relationship-details/actor.js +113 -0
  210. package/dist/overlays/relationship-details/custom/ElementActions.d.ts +5 -0
  211. package/dist/overlays/relationship-details/custom/ElementActions.js +33 -0
  212. package/dist/overlays/relationship-details/custom/edgeTypes.d.ts +49 -0
  213. package/dist/overlays/relationship-details/custom/edgeTypes.js +51 -0
  214. package/dist/overlays/relationship-details/custom/index.d.ts +2 -0
  215. package/dist/overlays/relationship-details/custom/nodeTypes.d.ts +39 -0
  216. package/dist/overlays/relationship-details/custom/nodeTypes.js +89 -0
  217. package/dist/overlays/relationship-details/custom/styles.css.d.ts +1 -0
  218. package/dist/overlays/relationship-details/hooks.d.ts +59 -0
  219. package/dist/overlays/relationship-details/hooks.js +46 -0
  220. package/dist/overlays/{edge-details/use-layouted-edge-details.d.ts → relationship-details/useLayoutedDetails.d.ts} +4 -6
  221. package/dist/overlays/{edge-details/use-layouted-edge-details.js → relationship-details/useLayoutedDetails.js} +68 -64
  222. package/dist/overlays/relationships-browser/-useRelationshipsView.d.ts +39 -0
  223. package/dist/overlays/relationships-browser/-useRelationshipsView.js +488 -0
  224. package/dist/overlays/relationships-browser/RelationshipsBrowser.d.ts +5 -0
  225. package/dist/overlays/relationships-browser/RelationshipsBrowser.js +209 -0
  226. package/dist/overlays/{relationships-of → relationships-browser}/SelectElement.css.d.ts +1 -0
  227. package/dist/overlays/relationships-browser/SelectElement.css.js +9 -0
  228. package/dist/overlays/relationships-browser/SelectElement.d.ts +7 -0
  229. package/dist/overlays/{relationships-of → relationships-browser}/SelectElement.js +11 -7
  230. package/dist/overlays/relationships-browser/_types.d.ts +40 -0
  231. package/dist/overlays/relationships-browser/actor.d.ts +66 -0
  232. package/dist/overlays/relationships-browser/actor.js +159 -0
  233. package/dist/overlays/relationships-browser/custom/ElementActions.d.ts +5 -0
  234. package/dist/overlays/relationships-browser/custom/ElementActions.js +43 -0
  235. package/dist/overlays/relationships-browser/custom/EmptyNode.d.ts +5 -0
  236. package/dist/overlays/{relationships-of/xyflow → relationships-browser/custom}/EmptyNode.js +1 -3
  237. package/dist/overlays/relationships-browser/custom/edgeTypes.d.ts +46 -0
  238. package/dist/overlays/relationships-browser/custom/edgeTypes.js +51 -0
  239. package/dist/overlays/relationships-browser/custom/index.d.ts +2 -0
  240. package/dist/overlays/relationships-browser/custom/nodeTypes.d.ts +45 -0
  241. package/dist/overlays/relationships-browser/custom/nodeTypes.js +93 -0
  242. package/dist/overlays/relationships-browser/custom/styles.css.d.ts +1 -0
  243. package/dist/overlays/relationships-browser/custom/styles.css.js +5 -0
  244. package/dist/overlays/relationships-browser/hooks.d.ts +62 -0
  245. package/dist/overlays/relationships-browser/hooks.js +46 -0
  246. package/dist/overlays/relationships-browser/useViewToNodesEdges.d.ts +10 -0
  247. package/dist/overlays/relationships-browser/useViewToNodesEdges.js +160 -0
  248. package/dist/style.css +1 -1
  249. package/dist/theme-vars.css.js +1 -0
  250. package/dist/utils/index.d.ts +4 -0
  251. package/dist/{xyflow/utils.d.ts → utils/xyflow.d.ts} +4 -4
  252. package/dist/{xyflow/utils.js → utils/xyflow.js} +14 -20
  253. package/package.json +24 -21
  254. package/src/LikeC4Diagram.css.ts +21 -15
  255. package/src/LikeC4Diagram.props.ts +14 -21
  256. package/src/LikeC4Diagram.tsx +105 -150
  257. package/src/LikeC4Search.tsx +21 -28
  258. package/src/StaticLikeC4Diagram.tsx +0 -1
  259. package/src/{xyflow/XYFlowBackground.tsx → base/Background.tsx} +8 -8
  260. package/src/base/BaseXYFlow.tsx +200 -0
  261. package/src/{xyflow → base}/const.ts +1 -1
  262. package/src/base/example/RelationshipsBrowser.tsx +62 -0
  263. package/src/base/example/_types.ts +71 -0
  264. package/src/base/example/custom.tsx +58 -0
  265. package/src/base/example/useViewToNodesEdges.ts +193 -0
  266. package/src/base/index.ts +10 -0
  267. package/src/base/primitives/NodeHandles.tsx +18 -0
  268. package/src/base/primitives/compound/CompoundActionButton.css.ts +55 -0
  269. package/src/base/primitives/compound/CompoundActionButton.tsx +52 -0
  270. package/src/base/primitives/compound/CompoundDetailsButton.css.ts +56 -0
  271. package/src/base/primitives/compound/CompoundDetailsButton.tsx +54 -0
  272. package/src/base/primitives/compound/CompoundNodeContainer.css.ts +161 -0
  273. package/src/base/primitives/compound/CompoundNodeContainer.tsx +95 -0
  274. package/src/base/primitives/compound/CompoundTitle.css.ts +43 -0
  275. package/src/base/primitives/compound/CompoundTitle.tsx +29 -0
  276. package/src/base/primitives/customEdge.ts +32 -0
  277. package/src/base/primitives/customNode.ts +21 -0
  278. package/src/base/primitives/edge/EdgeActionButton.tsx +27 -0
  279. package/src/base/primitives/edge/EdgeContainer.tsx +48 -0
  280. package/src/base/primitives/edge/EdgeLabel.css.ts +196 -0
  281. package/src/base/primitives/edge/EdgeLabel.tsx +136 -0
  282. package/src/{xyflow → base/primitives/edge}/EdgeMarkers.tsx +29 -1
  283. package/src/base/primitives/edge/EdgePath.tsx +89 -0
  284. package/src/base/primitives/edge/edge.css.ts +122 -0
  285. package/src/base/primitives/element/ElementActionButtons.css.ts +48 -0
  286. package/src/base/primitives/element/ElementActionButtons.tsx +73 -0
  287. package/src/base/primitives/element/ElementDetailsButton.css.ts +54 -0
  288. package/src/base/primitives/element/ElementDetailsButton.tsx +59 -0
  289. package/src/base/primitives/element/ElementNodeContainer.css.ts +47 -0
  290. package/src/base/primitives/element/ElementNodeContainer.tsx +72 -0
  291. package/src/base/primitives/element/ElementShape.css.ts +134 -0
  292. package/src/{xyflow/nodes/element/ElementShapeSvg.tsx → base/primitives/element/ElementShape.tsx} +64 -19
  293. package/src/base/primitives/element/ElementTitle.css.ts +156 -0
  294. package/src/base/primitives/element/ElementTitle.tsx +76 -0
  295. package/src/base/primitives/index.ts +17 -0
  296. package/src/base/types.ts +169 -0
  297. package/src/base/updateEdges.ts +40 -0
  298. package/src/base/updateNodes.ts +46 -0
  299. package/src/base/xyflowMachine.ts +75 -0
  300. package/src/context/DiagramEventHandlers.tsx +53 -0
  301. package/src/context/DiagramFeatures.tsx +162 -0
  302. package/src/{ui → context}/FramerMotionConfig.tsx +2 -6
  303. package/src/context/IconRenderer.tsx +45 -0
  304. package/src/context/RootContainer.tsx +31 -0
  305. package/src/context/index.ts +14 -0
  306. package/src/globals.css.ts +32 -32
  307. package/src/hooks/index.ts +7 -5
  308. package/src/hooks/useCurrentViewId.ts +8 -0
  309. package/src/hooks/useDiagram.ts +129 -0
  310. package/src/hooks/useDiagramActor.ts +25 -0
  311. package/src/hooks/useDiagramContext.ts +11 -0
  312. package/src/hooks/useMantinePortalProps.ts +2 -2
  313. package/src/hooks/useXYFlow.ts +12 -38
  314. package/src/index.ts +3 -7
  315. package/src/likec4diagram/DiagramActor.tsx +79 -0
  316. package/src/likec4diagram/DiagramUI.tsx +28 -0
  317. package/src/likec4diagram/XYFlow.tsx +137 -0
  318. package/src/likec4diagram/custom/edges/NotePopover.css.ts +27 -0
  319. package/src/likec4diagram/custom/edges/NotePopover.tsx +96 -0
  320. package/src/likec4diagram/custom/edges/RelationshipEdge.tsx +355 -0
  321. package/src/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.css.ts +7 -7
  322. package/src/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.tsx +91 -70
  323. package/src/likec4diagram/custom/edges/edges.css.ts +39 -0
  324. package/src/likec4diagram/custom/edges/utils.ts +126 -0
  325. package/src/likec4diagram/custom/index.tsx +8 -0
  326. package/src/likec4diagram/custom/nodes/CompoundActions.tsx +27 -0
  327. package/src/likec4diagram/custom/nodes/ElementActions.tsx +74 -0
  328. package/src/likec4diagram/custom/nodes/nodeTypes.tsx +107 -0
  329. package/src/likec4diagram/custom/nodes/toolbar/ColorButton.tsx +175 -0
  330. package/src/likec4diagram/custom/nodes/toolbar/CompoundToolbar.tsx +122 -0
  331. package/src/likec4diagram/custom/nodes/toolbar/ElementToolbar.tsx +140 -0
  332. package/src/likec4diagram/custom/nodes/toolbar/Toolbar.tsx +77 -0
  333. package/src/likec4diagram/custom/nodes/toolbar/_shared.tsx +143 -0
  334. package/src/likec4diagram/custom/nodes/toolbar/styles.css.ts +9 -0
  335. package/src/likec4diagram/state/actorContext.ts +8 -0
  336. package/src/{state → likec4diagram/state}/aligners.ts +67 -40
  337. package/src/likec4diagram/state/assign.ts +384 -0
  338. package/src/likec4diagram/state/hotkeyActor.ts +20 -0
  339. package/src/likec4diagram/state/inspector.ts +23 -0
  340. package/src/likec4diagram/state/machine.ts +946 -0
  341. package/src/likec4diagram/state/syncManualLayoutActor.ts +219 -0
  342. package/src/likec4diagram/state/utils.ts +52 -0
  343. package/src/likec4diagram/types.ts +144 -0
  344. package/src/{ui/top-left → likec4diagram/ui/controls}/ChangeAutoLayoutButton.tsx +32 -28
  345. package/src/likec4diagram/ui/controls/Controls.tsx +107 -0
  346. package/src/likec4diagram/ui/controls/LayoutDriftNotification.tsx +46 -0
  347. package/src/{ui/top-left → likec4diagram/ui/controls}/ManualLayoutToolsButton.tsx +16 -16
  348. package/src/likec4diagram/ui/controls/NavigationButtons.tsx +83 -0
  349. package/src/{ui/top-left → likec4diagram/ui/controls}/_shared.ts +4 -3
  350. package/src/{ui/top-left → likec4diagram/ui/controls}/styles.css.ts +17 -17
  351. package/src/{ui → likec4diagram/ui/diagram-title}/DiagramTitlePanel.css.ts +11 -11
  352. package/src/{ui → likec4diagram/ui/diagram-title}/DiagramTitlePanel.tsx +6 -5
  353. package/src/likec4diagram/ui/diagram-title/Link.tsx +40 -0
  354. package/src/likec4diagram/ui/index.ts +2 -0
  355. package/src/{ui → likec4diagram/ui}/notation/NotationPanel.css.ts +18 -18
  356. package/src/{ui → likec4diagram/ui}/notation/NotationPanel.tsx +44 -44
  357. package/src/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.css.ts +16 -16
  358. package/src/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.tsx +29 -49
  359. package/src/{xyflow → likec4diagram}/useLayoutConstraints.ts +54 -43
  360. package/src/likec4diagram/useViewToNodesEdges.ts +297 -0
  361. package/src/likec4model/index.ts +0 -6
  362. package/src/likec4model/useLikeC4Model.ts +1 -43
  363. package/src/overlays/Overlays.tsx +201 -147
  364. package/src/overlays/element-details/ElementDetailsCard.css.ts +58 -58
  365. package/src/overlays/element-details/ElementDetailsCard.tsx +143 -128
  366. package/src/overlays/element-details/TabPanelDeployments.css.ts +14 -14
  367. package/src/overlays/element-details/TabPanelDeployments.tsx +22 -22
  368. package/src/overlays/element-details/TabPanelRelationships.css.ts +19 -19
  369. package/src/overlays/element-details/TabPanelRelationships.tsx +45 -28
  370. package/src/overlays/element-details/TabPanelStructure.css.ts +7 -7
  371. package/src/overlays/element-details/TabPanelStructure.tsx +11 -11
  372. package/src/overlays/overlay/Overlay.css.ts +73 -0
  373. package/src/overlays/overlay/Overlay.tsx +99 -0
  374. package/src/overlays/relationship-details/RelationshipDetails.tsx +234 -0
  375. package/src/overlays/{edge-details → relationship-details}/SelectEdge.css.ts +20 -13
  376. package/src/overlays/{edge-details → relationship-details}/SelectEdge.tsx +14 -14
  377. package/src/overlays/relationship-details/_types.ts +73 -0
  378. package/src/overlays/relationship-details/actor.ts +162 -0
  379. package/src/overlays/relationship-details/custom/ElementActions.tsx +45 -0
  380. package/src/overlays/relationship-details/custom/edgeTypes.tsx +49 -0
  381. package/src/overlays/relationship-details/custom/index.tsx +2 -0
  382. package/src/overlays/relationship-details/custom/nodeTypes.tsx +108 -0
  383. package/src/overlays/relationship-details/custom/styles.css.ts +13 -0
  384. package/src/overlays/relationship-details/hooks.ts +48 -0
  385. package/src/overlays/{edge-details/use-layouted-edge-details.ts → relationship-details/useLayoutedDetails.ts} +128 -114
  386. package/src/overlays/relationships-browser/-useRelationshipsView.ts +642 -0
  387. package/src/overlays/relationships-browser/RelationshipsBrowser.tsx +247 -0
  388. package/src/overlays/{relationships-of → relationships-browser}/SelectElement.css.ts +12 -5
  389. package/src/overlays/{relationships-of → relationships-browser}/SelectElement.tsx +19 -17
  390. package/src/overlays/relationships-browser/_types.ts +89 -0
  391. package/src/overlays/relationships-browser/actor.ts +224 -0
  392. package/src/overlays/relationships-browser/custom/ElementActions.tsx +44 -0
  393. package/src/overlays/relationships-browser/custom/EmptyNode.tsx +18 -0
  394. package/src/overlays/relationships-browser/custom/edgeTypes.tsx +49 -0
  395. package/src/overlays/relationships-browser/custom/index.tsx +2 -0
  396. package/src/overlays/relationships-browser/custom/nodeTypes.tsx +109 -0
  397. package/src/overlays/relationships-browser/custom/styles.css.ts +13 -0
  398. package/src/overlays/relationships-browser/hooks.ts +48 -0
  399. package/src/overlays/relationships-browser/useViewToNodesEdges.ts +209 -0
  400. package/src/utils/index.ts +15 -0
  401. package/src/{xyflow/utils.ts → utils/xyflow.ts} +22 -8
  402. package/dist/_virtual/_commonjsHelpers.js +0 -6
  403. package/dist/controls/Text.d.ts +0 -2
  404. package/dist/controls/Text.js +0 -7
  405. package/dist/controls/action-button-bar/ActionButtonBar.css.d.ts +0 -1
  406. package/dist/controls/action-button-bar/ActionButtonBar.css.js +0 -5
  407. package/dist/controls/action-button-bar/ActionButtonBar.d.ts +0 -9
  408. package/dist/controls/action-button-bar/ActionButtonBar.js +0 -100
  409. package/dist/controls/action-button-bar/useActionButtonBarCtx.d.ts +0 -10
  410. package/dist/controls/action-button-bar/useActionButtonBarCtx.js +0 -9
  411. package/dist/controls/action-buttons/ActionButton.css.d.ts +0 -1
  412. package/dist/controls/action-buttons/ActionButton.css.js +0 -5
  413. package/dist/controls/action-buttons/ActionButton.d.ts +0 -9
  414. package/dist/controls/action-buttons/ActionButton.js +0 -66
  415. package/dist/controls/action-buttons/ActionButtons.d.ts +0 -12
  416. package/dist/controls/action-buttons/ActionButtons.js +0 -99
  417. package/dist/hooks/useDiagramState.d.ts +0 -6
  418. package/dist/hooks/useDiagramState.js +0 -27
  419. package/dist/overlays/OverlayContext.d.ts +0 -10
  420. package/dist/overlays/OverlayContext.js +0 -9
  421. package/dist/overlays/Overlays.css.d.ts +0 -3
  422. package/dist/overlays/Overlays.css.js +0 -7
  423. package/dist/overlays/edge-details/EdgeDetailsXYFlow.d.ts +0 -5
  424. package/dist/overlays/edge-details/EdgeDetailsXYFlow.js +0 -185
  425. package/dist/overlays/edge-details/SelectEdge.css.js +0 -17
  426. package/dist/overlays/edge-details/_types.d.ts +0 -14
  427. package/dist/overlays/edge-details/xyflow/CompoundNode.d.ts +0 -5
  428. package/dist/overlays/edge-details/xyflow/CompoundNode.js +0 -76
  429. package/dist/overlays/edge-details/xyflow/ElementNode.d.ts +0 -5
  430. package/dist/overlays/edge-details/xyflow/ElementNode.js +0 -159
  431. package/dist/overlays/edge-details/xyflow/RelationshipEdge.d.ts +0 -3
  432. package/dist/overlays/edge-details/xyflow/RelationshipEdge.js +0 -84
  433. package/dist/overlays/edge-details/xyflow/styles.css.d.ts +0 -9
  434. package/dist/overlays/edge-details/xyflow/styles.css.js +0 -21
  435. package/dist/overlays/index.d.ts +0 -1
  436. package/dist/overlays/relationships-of/RelationshipsOverlay.d.ts +0 -5
  437. package/dist/overlays/relationships-of/RelationshipsOverlay.js +0 -193
  438. package/dist/overlays/relationships-of/RelationshipsXYFlow.d.ts +0 -19
  439. package/dist/overlays/relationships-of/RelationshipsXYFlow.js +0 -290
  440. package/dist/overlays/relationships-of/SelectElement.css.js +0 -7
  441. package/dist/overlays/relationships-of/SelectElement.d.ts +0 -7
  442. package/dist/overlays/relationships-of/_types.d.ts +0 -28
  443. package/dist/overlays/relationships-of/use-layouted-relationships.d.ts +0 -22
  444. package/dist/overlays/relationships-of/use-layouted-relationships.js +0 -496
  445. package/dist/overlays/relationships-of/xyflow/CompoundNode.d.ts +0 -6
  446. package/dist/overlays/relationships-of/xyflow/CompoundNode.js +0 -120
  447. package/dist/overlays/relationships-of/xyflow/ElementNode.d.ts +0 -6
  448. package/dist/overlays/relationships-of/xyflow/ElementNode.js +0 -194
  449. package/dist/overlays/relationships-of/xyflow/EmptyNode.d.ts +0 -5
  450. package/dist/overlays/relationships-of/xyflow/RelationshipEdge.d.ts +0 -3
  451. package/dist/overlays/relationships-of/xyflow/RelationshipEdge.js +0 -123
  452. package/dist/overlays/relationships-of/xyflow/styles.css.d.ts +0 -14
  453. package/dist/overlays/relationships-of/xyflow/styles.css.js +0 -24
  454. package/dist/overlays/shared/xyflow/RelationshipEdge.css.d.ts +0 -4
  455. package/dist/overlays/shared/xyflow/RelationshipEdge.css.js +0 -12
  456. package/dist/overlays/shared/xyflow/_types.d.ts +0 -77
  457. package/dist/state/DiagramContext.d.ts +0 -1609
  458. package/dist/state/DiagramContext.js +0 -101
  459. package/dist/state/diagram-to-xyflow.d.ts +0 -11
  460. package/dist/state/diagram-to-xyflow.js +0 -113
  461. package/dist/state/diagramStore.d.ts +0 -1705
  462. package/dist/state/diagramStore.js +0 -808
  463. package/dist/state/diagramStore.layout.d.ts +0 -4
  464. package/dist/state/diagramStore.layout.js +0 -56
  465. package/dist/ui/DiagramTitlePanel.css.js +0 -11
  466. package/dist/ui/DiagramTitlePanel.d.ts +0 -1
  467. package/dist/ui/notation/NotationPanel.css.js +0 -16
  468. package/dist/ui/notation/NotationPanel.d.ts +0 -1
  469. package/dist/ui/top-left/TopLeftPanel.d.ts +0 -4
  470. package/dist/ui/top-left/TopLeftPanel.js +0 -211
  471. package/dist/ui/top-left/styles.css.js +0 -17
  472. package/dist/xyflow/FitviewOnDiagramChange.d.ts +0 -4
  473. package/dist/xyflow/FitviewOnDiagramChange.js +0 -72
  474. package/dist/xyflow/SelectEdgesOnNodeFocus.d.ts +0 -1
  475. package/dist/xyflow/SelectEdgesOnNodeFocus.js +0 -96
  476. package/dist/xyflow/XYFlow.d.ts +0 -8
  477. package/dist/xyflow/XYFlow.js +0 -145
  478. package/dist/xyflow/XYFlowBackground.d.ts +0 -10
  479. package/dist/xyflow/XYFlowInner.d.ts +0 -8
  480. package/dist/xyflow/XYFlowInner.js +0 -41
  481. package/dist/xyflow/edges/EdgeLabel.d.ts +0 -7
  482. package/dist/xyflow/edges/EdgeLabel.js +0 -160
  483. package/dist/xyflow/edges/RelationshipEdge.d.ts +0 -6
  484. package/dist/xyflow/edges/RelationshipEdge.js +0 -443
  485. package/dist/xyflow/edges/edges.css.js +0 -37
  486. package/dist/xyflow/edges/utils.d.ts +0 -16
  487. package/dist/xyflow/edges/utils.js +0 -24
  488. package/dist/xyflow/nodes/AnimateVariants.d.ts +0 -1313
  489. package/dist/xyflow/nodes/AnimateVariants.js +0 -123
  490. package/dist/xyflow/nodes/Node.css.d.ts +0 -3
  491. package/dist/xyflow/nodes/Node.css.js +0 -9
  492. package/dist/xyflow/nodes/compound/CompoundNode.css.d.ts +0 -14
  493. package/dist/xyflow/nodes/compound/CompoundNode.css.js +0 -27
  494. package/dist/xyflow/nodes/compound/CompoundNode.d.ts +0 -6
  495. package/dist/xyflow/nodes/compound/CompoundNode.js +0 -216
  496. package/dist/xyflow/nodes/compound/index.d.ts +0 -1
  497. package/dist/xyflow/nodes/element/ElementLink.css.d.ts +0 -3
  498. package/dist/xyflow/nodes/element/ElementLink.d.ts +0 -6
  499. package/dist/xyflow/nodes/element/ElementNode.d.ts +0 -6
  500. package/dist/xyflow/nodes/element/ElementNode.js +0 -190
  501. package/dist/xyflow/nodes/element/ElementShapeSvg.d.ts +0 -17
  502. package/dist/xyflow/nodes/element/element.css.d.ts +0 -18
  503. package/dist/xyflow/nodes/element/element.css.js +0 -31
  504. package/dist/xyflow/nodes/element/index.d.ts +0 -1
  505. package/dist/xyflow/nodes/shared/ElementIcon.d.ts +0 -8
  506. package/dist/xyflow/nodes/shared/Toolbar.d.ts +0 -9
  507. package/dist/xyflow/nodes/shared/Toolbar.js +0 -436
  508. package/dist/xyflow/types.d.ts +0 -36
  509. package/dist/xyflow/useXYFlowEvents.d.ts +0 -160
  510. package/dist/xyflow/useXYFlowEvents.js +0 -275
  511. package/src/controls/Text.ts +0 -5
  512. package/src/controls/action-button-bar/ActionButtonBar.css.ts +0 -13
  513. package/src/controls/action-button-bar/ActionButtonBar.tsx +0 -138
  514. package/src/controls/action-button-bar/useActionButtonBarCtx.ts +0 -13
  515. package/src/controls/action-buttons/ActionButton.css.ts +0 -29
  516. package/src/controls/action-buttons/ActionButton.tsx +0 -66
  517. package/src/controls/action-buttons/ActionButtons.tsx +0 -138
  518. package/src/hooks/useDiagramState.ts +0 -36
  519. package/src/overlays/OverlayContext.tsx +0 -11
  520. package/src/overlays/Overlays.css.ts +0 -136
  521. package/src/overlays/edge-details/EdgeDetailsXYFlow.tsx +0 -255
  522. package/src/overlays/edge-details/_types.ts +0 -18
  523. package/src/overlays/edge-details/xyflow/CompoundNode.tsx +0 -72
  524. package/src/overlays/edge-details/xyflow/ElementNode.tsx +0 -152
  525. package/src/overlays/edge-details/xyflow/RelationshipEdge.tsx +0 -85
  526. package/src/overlays/edge-details/xyflow/styles.css.ts +0 -144
  527. package/src/overlays/index.tsx +0 -1
  528. package/src/overlays/relationships-of/RelationshipsOverlay.tsx +0 -185
  529. package/src/overlays/relationships-of/RelationshipsXYFlow.tsx +0 -378
  530. package/src/overlays/relationships-of/_types.ts +0 -40
  531. package/src/overlays/relationships-of/use-layouted-relationships.ts +0 -699
  532. package/src/overlays/relationships-of/xyflow/CompoundNode.tsx +0 -124
  533. package/src/overlays/relationships-of/xyflow/ElementNode.tsx +0 -194
  534. package/src/overlays/relationships-of/xyflow/EmptyNode.tsx +0 -19
  535. package/src/overlays/relationships-of/xyflow/RelationshipEdge.tsx +0 -127
  536. package/src/overlays/relationships-of/xyflow/styles.css.ts +0 -214
  537. package/src/overlays/shared/xyflow/RelationshipEdge.css.ts +0 -60
  538. package/src/overlays/shared/xyflow/_types.ts +0 -87
  539. package/src/state/DiagramContext.tsx +0 -107
  540. package/src/state/diagram-to-xyflow.ts +0 -150
  541. package/src/state/diagramStore.layout.ts +0 -66
  542. package/src/state/diagramStore.ts +0 -1099
  543. package/src/ui/top-left/TopLeftPanel.tsx +0 -220
  544. package/src/xyflow/FitviewOnDiagramChange.tsx +0 -83
  545. package/src/xyflow/SelectEdgesOnNodeFocus.tsx +0 -106
  546. package/src/xyflow/XYFlow.tsx +0 -179
  547. package/src/xyflow/XYFlowInner.tsx +0 -48
  548. package/src/xyflow/edges/EdgeLabel.tsx +0 -193
  549. package/src/xyflow/edges/RelationshipEdge.tsx +0 -547
  550. package/src/xyflow/edges/edges.css.ts +0 -288
  551. package/src/xyflow/edges/utils.ts +0 -153
  552. package/src/xyflow/nodes/AnimateVariants.ts +0 -143
  553. package/src/xyflow/nodes/Node.css.ts +0 -44
  554. package/src/xyflow/nodes/compound/CompoundNode.css.ts +0 -258
  555. package/src/xyflow/nodes/compound/CompoundNode.tsx +0 -226
  556. package/src/xyflow/nodes/compound/index.ts +0 -1
  557. package/src/xyflow/nodes/element/ElementLink.css.ts +0 -67
  558. package/src/xyflow/nodes/element/ElementLink.tsx +0 -97
  559. package/src/xyflow/nodes/element/ElementNode.tsx +0 -208
  560. package/src/xyflow/nodes/element/element.css.ts +0 -369
  561. package/src/xyflow/nodes/element/index.ts +0 -1
  562. package/src/xyflow/nodes/shared/ElementIcon.tsx +0 -43
  563. package/src/xyflow/nodes/shared/Toolbar.tsx +0 -496
  564. package/src/xyflow/types.ts +0 -57
  565. package/src/xyflow/useXYFlowEvents.ts +0 -315
  566. /package/dist/{xyflow → base}/const.d.ts +0 -0
  567. /package/dist/{xyflow → base}/const.js +0 -0
  568. /package/dist/{ui → context}/EnsureMantine.d.ts +0 -0
  569. /package/dist/{ui → context}/EnsureMantine.js +0 -0
  570. /package/dist/{ui → context}/FramerMotionConfig.d.ts +0 -0
  571. /package/dist/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.css.d.ts +0 -0
  572. /package/dist/{ui/top-left → likec4diagram/ui/controls}/ChangeAutoLayoutButton.d.ts +0 -0
  573. /package/dist/{ui/top-left → likec4diagram/ui/controls}/ManualLayoutToolsButton.d.ts +0 -0
  574. /package/dist/{ui/top-left → likec4diagram/ui/controls}/_shared.d.ts +0 -0
  575. /package/dist/{ui → likec4diagram/ui/diagram-title}/DiagramTitlePanel.css.d.ts +0 -0
  576. /package/dist/{ui → likec4diagram/ui/diagram-title}/Link.js +0 -0
  577. /package/dist/{ui → likec4diagram/ui}/notation/NotationPanel.css.d.ts +0 -0
  578. /package/dist/{ui → likec4diagram/ui}/notation/index.d.ts +0 -0
  579. /package/dist/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.css.d.ts +0 -0
  580. /package/dist/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.d.ts +0 -0
  581. /package/src/{ui → context}/EnsureMantine.tsx +0 -0
  582. /package/src/{ui → likec4diagram/ui}/notation/index.ts +0 -0
@@ -2,4 +2,3 @@ export declare const cssReactFlow: string;
2
2
  export declare const notInitialized: string;
3
3
  export declare const cssDisablePan: string;
4
4
  export declare const cssTransparentBg: string;
5
- export declare const cssNoControls: string;
@@ -1,13 +1,9 @@
1
1
  /* empty css */
2
2
  var cssReactFlow = "_2h8g8h0";
3
- var notInitialized = "_2h8g8h1";
4
3
  var cssDisablePan = "_2h8g8h2";
5
4
  var cssTransparentBg = "_2h8g8h3";
6
- var cssNoControls = "_2h8g8h4";
7
5
  export {
8
6
  cssDisablePan,
9
- cssNoControls,
10
7
  cssReactFlow,
11
- cssTransparentBg,
12
- notInitialized
8
+ cssTransparentBg
13
9
  };
@@ -1,6 +1,3 @@
1
1
  import { LikeC4DiagramEventHandlers, LikeC4DiagramProperties } from './LikeC4Diagram.props';
2
2
  export type LikeC4DiagramProps = LikeC4DiagramProperties & LikeC4DiagramEventHandlers;
3
- export declare function LikeC4Diagram({ view, className, fitView, fitViewPadding, readonly, pannable, zoomable, nodesSelectable, nodesDraggable, background, controls, showDiagramTitle, showNotations, enableDynamicViewWalkthrough, enableFocusMode, enableElementDetails, enableRelationshipDetails, enableRelationshipBrowser, enableSearch, initialWidth, initialHeight, keepAspectRatio, experimentalEdgeEditing, onCanvasClick, onCanvasContextMenu, onCanvasDblClick, onEdgeClick, onChange, onEdgeContextMenu, onNavigateTo, onNodeClick, onNodeContextMenu, onOpenSource, onBurgerMenuClick, renderIcon, where, showNavigationButtons }: LikeC4DiagramProps): import("react/jsx-runtime").JSX.Element;
4
- export declare namespace LikeC4Diagram {
5
- var displayName: string;
6
- }
3
+ export declare function LikeC4Diagram({ view, className, fitView, fitViewPadding, readonly, pannable, zoomable, background, enableFocusMode, enableElementDetails, enableRelationshipDetails, enableRelationshipBrowser, nodesSelectable, nodesDraggable, controls, showDiagramTitle, showNotations, enableDynamicViewWalkthrough, enableSearch, initialWidth, initialHeight, experimentalEdgeEditing, onCanvasClick, onCanvasContextMenu, onCanvasDblClick, onEdgeClick, onChange, onEdgeContextMenu, onNavigateTo, onNodeClick, onNodeContextMenu, onOpenSource, onBurgerMenuClick, renderIcon, where, showNavigationButtons, }: LikeC4DiagramProps): import("react/jsx-runtime").JSX.Element;
@@ -1,24 +1,19 @@
1
- import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
- import { isDeploymentView } from "@likec4/core";
1
+ import { jsx, jsxs } from "react/jsx-runtime";
3
2
  import { ReactFlowProvider } from "@xyflow/react";
4
- import clsx from "clsx";
5
- import { deepEqual } from "fast-equals";
6
- import { useRef, useEffect, memo } from "react";
3
+ import { useRef } from "react";
7
4
  import { isEmpty } from "remeda";
8
- import { rootClassName } from "./globals.css.js";
9
- import { useDiagramState } from "./hooks/useDiagramState.js";
10
5
  import { LikeC4CustomColors } from "./LikeC4CustomColors.js";
11
- import { cssReactFlow, cssNoControls, cssDisablePan, cssTransparentBg, notInitialized } from "./LikeC4Diagram.css.js";
12
- import { LikeC4Search } from "./LikeC4Search.js";
13
- import { DiagramContextProvider } from "./state/DiagramContext.js";
14
- import { EnsureMantine } from "./ui/EnsureMantine.js";
15
- import { FramerMotionConfig } from "./ui/FramerMotionConfig.js";
16
- import { FitViewOnDiagramChange } from "./xyflow/FitviewOnDiagramChange.js";
17
- import { SelectEdgesOnNodeFocus } from "./xyflow/SelectEdgesOnNodeFocus.js";
18
- import { XYFlow } from "./xyflow/XYFlow.js";
19
- import { XYFlowInner } from "./xyflow/XYFlowInner.js";
6
+ import { DiagramActor } from "./likec4diagram/DiagramActor.js";
7
+ import { DiagramUI } from "./likec4diagram/DiagramUI.js";
8
+ import { useViewToNodesEdges } from "./likec4diagram/useViewToNodesEdges.js";
9
+ import { LikeC4DiagramXYFlow } from "./likec4diagram/XYFlow.js";
20
10
  import { useLikeC4Model } from "./likec4model/useLikeC4Model.js";
21
- import { Overlays } from "./overlays/Overlays.js";
11
+ import { EnsureMantine } from "./context/EnsureMantine.js";
12
+ import { FramerMotionConfig } from "./context/FramerMotionConfig.js";
13
+ import { IconRendererProvider } from "./context/IconRenderer.js";
14
+ import { DiagramFeatures } from "./context/DiagramFeatures.js";
15
+ import { DiagramEventHandlers } from "./context/DiagramEventHandlers.js";
16
+ import { RootContainer } from "./context/RootContainer.js";
22
17
  function LikeC4Diagram({
23
18
  view,
24
19
  className,
@@ -27,21 +22,20 @@ function LikeC4Diagram({
27
22
  readonly = true,
28
23
  pannable = true,
29
24
  zoomable = true,
30
- nodesSelectable = !readonly,
31
- nodesDraggable = !readonly,
32
25
  background = "dots",
33
- controls = !readonly,
34
- showDiagramTitle = true,
35
- showNotations = true,
36
- enableDynamicViewWalkthrough = false,
37
26
  enableFocusMode = false,
38
27
  enableElementDetails = false,
39
28
  enableRelationshipDetails = enableElementDetails,
40
29
  enableRelationshipBrowser = enableRelationshipDetails,
30
+ nodesSelectable = !readonly || enableFocusMode,
31
+ nodesDraggable = !readonly,
32
+ controls = !readonly,
33
+ showDiagramTitle = true,
34
+ showNotations = true,
35
+ enableDynamicViewWalkthrough = false,
41
36
  enableSearch = true,
42
37
  initialWidth,
43
38
  initialHeight,
44
- keepAspectRatio = false,
45
39
  experimentalEdgeEditing = false,
46
40
  onCanvasClick,
47
41
  onCanvasContextMenu,
@@ -59,136 +53,97 @@ function LikeC4Diagram({
59
53
  showNavigationButtons = !!onNavigateTo
60
54
  }) {
61
55
  const hasLikec4model = !!useLikeC4Model();
62
- const initialRef = useRef({
63
- defaultNodes: [],
64
- defaultEdges: [],
65
- initialWidth: initialWidth ?? view.bounds.width,
66
- initialHeight: initialHeight ?? view.bounds.height
67
- });
68
- useEffect(() => {
69
- if (readonly !== true && where != null) {
70
- console.warn("Ignore filter, supported in readonly mode only\n", { where });
71
- }
72
- if (hasLikec4model) {
73
- return;
74
- }
75
- if (enableRelationshipDetails) {
76
- console.warn("Invalid showRelationshipDetails=true, requires LikeC4ModelProvider");
77
- }
78
- if (enableElementDetails) {
79
- console.warn("Invalid enableElementDetails=true, requires LikeC4ModelProvider");
80
- }
81
- if (enableRelationshipBrowser) {
82
- console.warn("Invalid enableRelationshipBrowser=true, requires LikeC4ModelProvider");
83
- }
56
+ const initialRef = useRef(null);
57
+ const xyNodesEdges = useViewToNodesEdges({
58
+ view,
59
+ where,
60
+ nodesDraggable,
61
+ nodesSelectable
84
62
  });
85
- return /* @__PURE__ */ jsx(EnsureMantine, { children: /* @__PURE__ */ jsx(FramerMotionConfig, { children: /* @__PURE__ */ jsxs(
86
- ReactFlowProvider,
63
+ const isDynamicView = view.__ === "dynamic";
64
+ if (initialRef.current == null) {
65
+ initialRef.current = {
66
+ defaultEdges: [],
67
+ defaultNodes: [],
68
+ initialWidth: initialWidth ?? view.bounds.width,
69
+ initialHeight: initialHeight ?? view.bounds.height
70
+ };
71
+ }
72
+ return /* @__PURE__ */ jsx(EnsureMantine, { children: /* @__PURE__ */ jsx(FramerMotionConfig, { children: /* @__PURE__ */ jsx(IconRendererProvider, { value: renderIcon ?? null, children: /* @__PURE__ */ jsx(
73
+ DiagramFeatures,
87
74
  {
88
- fitView,
89
- ...initialRef.current,
90
- children: [
91
- !isEmpty(view.customColorDefinitions) && /* @__PURE__ */ jsx(LikeC4CustomColors, { customColors: view.customColorDefinitions }),
92
- /* @__PURE__ */ jsx(
93
- DiagramContextProvider,
94
- {
95
- view,
96
- keepAspectRatio,
97
- className: clsx(rootClassName, className),
98
- readonly,
99
- experimentalEdgeEditing: !readonly && experimentalEdgeEditing,
100
- pannable,
101
- zoomable,
102
- nodesDraggable,
103
- nodesSelectable: nodesSelectable || enableFocusMode,
104
- hasLikeC4Model: hasLikec4model,
105
- fitViewEnabled: fitView,
106
- fitViewPadding,
107
- controls,
108
- showNavigationButtons: showNavigationButtons && !!onNavigateTo,
109
- showNotations,
110
- enableFocusMode,
111
- enableSearch: hasLikec4model && enableSearch,
112
- enableElementDetails: enableElementDetails && hasLikec4model,
113
- enableDynamicViewWalkthrough,
114
- enableRelationshipBrowser: enableRelationshipBrowser && hasLikec4model,
115
- enableRelationshipDetails: enableRelationshipDetails && hasLikec4model && !isDeploymentView(view),
116
- whereFilter: readonly ? where ?? null : null,
117
- renderIcon: renderIcon ?? null,
118
- onCanvasClick: onCanvasClick ?? null,
119
- onCanvasContextMenu: onCanvasContextMenu ?? null,
120
- onEdgeClick: onEdgeClick ?? null,
121
- onEdgeContextMenu: onEdgeContextMenu ?? null,
122
- onNodeClick: onNodeClick ?? null,
123
- onNodeContextMenu: onNodeContextMenu ?? null,
124
- onChange: onChange ?? null,
125
- onNavigateTo: onNavigateTo ?? null,
126
- onCanvasDblClick: onCanvasDblClick ?? null,
127
- onOpenSource: onOpenSource ?? null,
128
- onBurgerMenuClick: onBurgerMenuClick ?? null,
129
- children: /* @__PURE__ */ jsx(
130
- LikeC4DiagramInnerMemo,
75
+ features: {
76
+ enableFitView: fitView,
77
+ enableReadOnly: readonly,
78
+ enableFocusMode,
79
+ enableNavigateTo: !!onNavigateTo,
80
+ enableElementDetails,
81
+ enableRelationshipDetails,
82
+ enableRelationshipBrowser,
83
+ enableSearch,
84
+ enableNavigationButtons: showNavigationButtons && !!onNavigateTo,
85
+ enableDynamicViewWalkthrough: isDynamicView && enableDynamicViewWalkthrough,
86
+ enableEdgeEditing: experimentalEdgeEditing,
87
+ enableNotations: showNotations,
88
+ enableVscode: !!onOpenSource,
89
+ enableControls: controls,
90
+ enableViewTitle: showDiagramTitle,
91
+ enableLikeC4Model: hasLikec4model
92
+ },
93
+ children: /* @__PURE__ */ jsx(
94
+ DiagramEventHandlers,
95
+ {
96
+ handlers: {
97
+ onCanvasClick,
98
+ onCanvasContextMenu,
99
+ onCanvasDblClick,
100
+ onEdgeClick,
101
+ onChange,
102
+ onEdgeContextMenu,
103
+ onNavigateTo,
104
+ onNodeClick,
105
+ onNodeContextMenu,
106
+ onOpenSource,
107
+ onBurgerMenuClick
108
+ },
109
+ children: /* @__PURE__ */ jsxs(RootContainer, { className, children: [
110
+ !isEmpty(view.customColorDefinitions) && /* @__PURE__ */ jsx(LikeC4CustomColors, { customColors: view.customColorDefinitions }),
111
+ /* @__PURE__ */ jsx(
112
+ ReactFlowProvider,
131
113
  {
132
- background,
133
- showDiagramTitle,
134
- enableSearch: hasLikec4model && enableSearch
114
+ fitView,
115
+ ...initialRef.current,
116
+ children: /* @__PURE__ */ jsxs(
117
+ DiagramActor,
118
+ {
119
+ input: {
120
+ view,
121
+ pannable,
122
+ zoomable,
123
+ fitViewPadding,
124
+ ...xyNodesEdges
125
+ },
126
+ children: [
127
+ /* @__PURE__ */ jsx(
128
+ LikeC4DiagramXYFlow,
129
+ {
130
+ nodesDraggable,
131
+ nodesSelectable,
132
+ background
133
+ }
134
+ ),
135
+ /* @__PURE__ */ jsx(DiagramUI, {})
136
+ ]
137
+ }
138
+ )
135
139
  }
136
140
  )
137
- }
138
- )
139
- ]
141
+ ] })
142
+ }
143
+ )
140
144
  }
141
- ) }) });
145
+ ) }) }) });
142
146
  }
143
- LikeC4Diagram.displayName = "LikeC4Diagram";
144
- const LikeC4DiagramInnerMemo = /* @__PURE__ */ memo(function LikeC4DiagramInner({
145
- background,
146
- showDiagramTitle,
147
- enableSearch
148
- }) {
149
- const {
150
- isInitialized,
151
- pannable,
152
- fitView,
153
- enableFocusMode,
154
- enableOverlays
155
- } = useDiagramState((s) => ({
156
- isInitialized: s.initialized,
157
- pannable: s.pannable,
158
- fitView: s.fitViewEnabled,
159
- enableFocusMode: s.enableFocusMode,
160
- enableOverlays: s.hasLikeC4Model && (s.enableRelationshipBrowser || s.enableElementDetails)
161
- }));
162
- return /* @__PURE__ */ jsxs(Fragment, { children: [
163
- /* @__PURE__ */ jsx(
164
- XYFlow,
165
- {
166
- className: clsx(
167
- "likec4-diagram",
168
- cssReactFlow,
169
- cssNoControls,
170
- pannable !== true && cssDisablePan,
171
- background === "transparent" && cssTransparentBg,
172
- isInitialized ? "initialized" : notInitialized
173
- ),
174
- children: /* @__PURE__ */ jsx(
175
- XYFlowInner,
176
- {
177
- showDiagramTitle,
178
- background
179
- }
180
- )
181
- }
182
- ),
183
- enableOverlays && /* @__PURE__ */ jsx(Overlays, {}),
184
- enableSearch && /* @__PURE__ */ jsx(LikeC4Search, {}),
185
- isInitialized && /* @__PURE__ */ jsxs(Fragment, { children: [
186
- fitView && /* @__PURE__ */ jsx(FitViewOnDiagramChange, {}),
187
- enableFocusMode && /* @__PURE__ */ jsx(SelectEdgesOnNodeFocus, {})
188
- ] })
189
- ] });
190
- }, deepEqual);
191
- LikeC4DiagramInnerMemo.displayName = "LikeC4DiagramInnerMemo";
192
147
  export {
193
148
  LikeC4Diagram
194
149
  };
@@ -1,19 +1,18 @@
1
1
  import { DiagramEdge, DiagramNode, DiagramView, Fqn, RelationId, ViewChange, ViewId, WhereOperator } from '@likec4/core';
2
2
  import { MouseEvent as ReactMouseEvent, ReactNode } from 'react';
3
- import { XYBackground } from './xyflow/XYFlowBackground';
4
3
  export type { WhereOperator };
5
- export type DiagramNodeWithNavigate<ID extends string = ViewId> = Omit<DiagramNode, 'navigateTo'> & {
4
+ export type DiagramNodeWithNavigate<ID = ViewId> = Omit<DiagramNode, 'navigateTo'> & {
6
5
  navigateTo: ID;
7
6
  };
8
- type ElementIconNodeProps = {
9
- id: string;
10
- title: string;
11
- icon?: string | undefined;
7
+ type ElementIconRendererProps = {
8
+ node: {
9
+ id: string;
10
+ title: string;
11
+ icon?: string | null | undefined;
12
+ };
12
13
  };
13
- export type ElementIconRenderer = (props: {
14
- node: ElementIconNodeProps;
15
- }) => ReactNode;
16
- export type OnNavigateTo<ID extends string = ViewId> = (to: ID, event?: ReactMouseEvent, element?: DiagramNodeWithNavigate<ID>) => void;
14
+ export type ElementIconRenderer = (props: ElementIconRendererProps) => ReactNode;
15
+ export type OnNavigateTo<ID = ViewId> = (to: ID, event?: ReactMouseEvent, element?: DiagramNodeWithNavigate<ID>) => void;
17
16
  export type OnNodeClick = (node: DiagramNode, event: ReactMouseEvent) => void;
18
17
  export type OnEdgeClick = (edge: DiagramEdge, event: ReactMouseEvent) => void;
19
18
  /**
@@ -69,16 +68,11 @@ export interface LikeC4DiagramProperties {
69
68
  nodesDraggable?: boolean | undefined;
70
69
  initialWidth?: number | undefined;
71
70
  initialHeight?: number | undefined;
72
- /**
73
- * Keep aspect ratio of the diagram
74
- * @default false
75
- */
76
- keepAspectRatio?: boolean | undefined;
77
71
  /**
78
72
  * Background pattern
79
73
  * @default 'dots'
80
74
  */
81
- background?: 'transparent' | 'solid' | XYBackground | undefined;
75
+ background?: 'transparent' | 'solid' | 'dots' | 'lines' | 'cross' | undefined;
82
76
  /**
83
77
  * Display webview with diagram title / description
84
78
  * @default true
@@ -4,16 +4,16 @@ import { Spotlight } from "@mantine/spotlight";
4
4
  import { IconSearch, IconRectangularPrism, IconStack2, IconSitemap } from "@tabler/icons-react";
5
5
  import { memo, useMemo } from "react";
6
6
  import { pipe, filter, map } from "remeda";
7
+ import { useDiagram } from "./hooks/useDiagram.js";
8
+ import { useDiagramContext } from "./hooks/useDiagramContext.js";
7
9
  import { actionSection } from "./LikeC4Search.css.js";
8
- import { useDiagramState, useDiagramStoreApi } from "./hooks/useDiagramState.js";
9
10
  import { useLikeC4Model } from "./likec4model/useLikeC4Model.js";
10
11
  import { useMantinePortalProps } from "./hooks/useMantinePortalProps.js";
11
12
  const LikeC4Search = memo(() => {
12
- const view = useDiagramState((s) => s.view);
13
+ const view = useDiagramContext((s) => s.view);
13
14
  const model = useLikeC4Model(true);
14
- const store = useDiagramStoreApi();
15
+ const diagram = useDiagram();
15
16
  const getNodeActionsData = () => {
16
- const { focusOnNode } = store.getState();
17
17
  return pipe(
18
18
  view.nodes,
19
19
  filter((n) => !!n.title),
@@ -28,7 +28,7 @@ const LikeC4Search = memo(() => {
28
28
  ...(n.tags ?? []).map((t) => `#${t}`),
29
29
  ...n.description ? [n.description] : []
30
30
  ].filter((k) => k.toLowerCase()),
31
- onClick: () => focusOnNode(n.id),
31
+ onClick: () => diagram.focusNode(n.id),
32
32
  leftSection: /* @__PURE__ */ jsx(IconRectangularPrism, {})
33
33
  }))
34
34
  );
@@ -47,15 +47,7 @@ const LikeC4Search = memo(() => {
47
47
  ...v.$view.description ? [v.$view.description] : []
48
48
  ],
49
49
  onClick: () => {
50
- var _a, _b;
51
- store.setState({
52
- lastOnNavigate: {
53
- fromView: view.id,
54
- toView: v.id,
55
- fromNode: null
56
- }
57
- });
58
- (_b = (_a = store.getState()).onNavigateTo) == null ? void 0 : _b.call(_a, v.id);
50
+ diagram.navigateTo(v.id);
59
51
  },
60
52
  leftSection: v.isDeploymentView() ? /* @__PURE__ */ jsx(IconStack2, {}) : /* @__PURE__ */ jsx(IconSitemap, {})
61
53
  }));
@@ -69,7 +61,7 @@ const LikeC4Search = memo(() => {
69
61
  group: "Views",
70
62
  actions: getViewActionsData()
71
63
  }
72
- ], [model, store, view]);
64
+ ], [model, diagram, view]);
73
65
  const portalProps = useMantinePortalProps();
74
66
  return /* @__PURE__ */ jsx(
75
67
  Spotlight,
@@ -1,3 +1,3 @@
1
1
  import { LikeC4DiagramProperties } from './LikeC4Diagram.props';
2
- export type StaticLikeC4DiagramProps = Pick<LikeC4DiagramProperties, 'view' | 'keepAspectRatio' | 'className' | 'fitView' | 'fitViewPadding' | 'background' | 'enableElementDetails' | 'enableRelationshipDetails' | 'enableRelationshipBrowser' | 'initialWidth' | 'initialHeight' | 'renderIcon' | 'where'>;
2
+ export type StaticLikeC4DiagramProps = Pick<LikeC4DiagramProperties, 'view' | 'className' | 'fitView' | 'fitViewPadding' | 'background' | 'enableElementDetails' | 'enableRelationshipDetails' | 'enableRelationshipBrowser' | 'initialWidth' | 'initialHeight' | 'renderIcon' | 'where'>;
3
3
  export declare function StaticLikeC4Diagram({ view, fitView, fitViewPadding, enableElementDetails, enableRelationshipDetails, enableRelationshipBrowser, background, ...rest }: StaticLikeC4DiagramProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,7 @@
1
+ import { BackgroundProps } from '@xyflow/react';
2
+ export type XYBackgroundVariant = 'dots' | 'lines' | 'cross';
3
+ export type XYBackground = XYBackgroundVariant | BackgroundProps;
4
+ export type XYBackgroundProps = {
5
+ background: XYBackground;
6
+ };
7
+ export declare function Background({ background }: XYBackgroundProps): import("react/jsx-runtime").JSX.Element;
@@ -1,6 +1,6 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { nonexhaustive } from "@likec4/core";
3
- import { Background, BackgroundVariant } from "@xyflow/react";
3
+ import { Background as Background$1, BackgroundVariant } from "@xyflow/react";
4
4
  function literalToEnum(value) {
5
5
  switch (value) {
6
6
  case "dots":
@@ -13,13 +13,12 @@ function literalToEnum(value) {
13
13
  nonexhaustive(value);
14
14
  }
15
15
  }
16
- function XYFlowBackground({ background }) {
16
+ function Background({ background }) {
17
17
  if (typeof background === "string") {
18
- return /* @__PURE__ */ jsx(Background, { variant: literalToEnum(background), size: 2, gap: 20 });
18
+ return /* @__PURE__ */ jsx(Background$1, { variant: literalToEnum(background), size: 2, gap: 20 });
19
19
  }
20
- const { variant, ...rest } = background;
21
- return /* @__PURE__ */ jsx(Background, { variant: literalToEnum(variant), ...rest });
20
+ return /* @__PURE__ */ jsx(Background$1, { ...background });
22
21
  }
23
22
  export {
24
- XYFlowBackground
23
+ Background
25
24
  };
@@ -0,0 +1,14 @@
1
+ import { ReactFlowProps } from '@xyflow/react';
2
+ import { SetRequired, Simplify } from 'type-fest';
3
+ import { XYBackground } from './Background';
4
+ import { Base } from './types';
5
+ export type BaseXYFlowProps<NodeType extends Base.Node, EdgeType extends Base.Edge> = Simplify<{
6
+ pannable?: boolean;
7
+ zoomable?: boolean;
8
+ nodesSelectable?: boolean;
9
+ nodesDraggable?: boolean;
10
+ background?: 'transparent' | 'solid' | XYBackground;
11
+ fitViewPadding?: number;
12
+ onViewportResize?: undefined | (() => void);
13
+ } & SetRequired<Omit<ReactFlowProps<NodeType, EdgeType>, 'defaultNodes' | 'defaultEdges' | 'panOnScroll' | 'panOnDrag' | 'preventScrolling' | 'zoomOnPinch' | 'zoomActivationKeyCode' | 'zoomOnScroll' | 'elementsSelectable' | 'onNodeMouseEnter' | 'onNodeMouseLeave' | 'onEdgeMouseEnter' | 'onEdgeMouseLeave' | 'fitViewOptions'>, 'nodes' | 'edges' | 'onNodesChange' | 'onEdgesChange'>>;
14
+ export declare const BaseXYFlow: <NodeType extends Base.Node, EdgeType extends Base.Edge>({ nodes, edges, onEdgesChange, onNodesChange, className, pannable, zoomable, nodesSelectable, nodesDraggable, background, children, colorMode, fitViewPadding, fitView, zoomOnDoubleClick, onViewportResize, ...props }: BaseXYFlowProps<NodeType, EdgeType>) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,146 @@
1
+ import { jsxs, jsx, Fragment } from "react/jsx-runtime";
2
+ import { useCallbackRef } from "@mantine/hooks";
3
+ import { ReactFlow, useStoreApi, useOnViewportChange } from "@xyflow/react";
4
+ import clsx from "clsx";
5
+ import { useMemo, useEffect } from "react";
6
+ import { cssReactFlow, cssDisablePan, cssTransparentBg } from "../LikeC4Diagram.css.js";
7
+ import { stopPropagation } from "../utils/xyflow.js";
8
+ import { Background } from "./Background.js";
9
+ import { MaxZoom, MinZoom } from "./const.js";
10
+ import { Base } from "./types.js";
11
+ const BaseXYFlow = ({
12
+ nodes,
13
+ edges,
14
+ onEdgesChange,
15
+ onNodesChange,
16
+ className,
17
+ pannable = true,
18
+ zoomable = true,
19
+ nodesSelectable = true,
20
+ nodesDraggable = false,
21
+ background = "dots",
22
+ children,
23
+ colorMode = "system",
24
+ fitViewPadding = 0,
25
+ fitView = true,
26
+ zoomOnDoubleClick = false,
27
+ onViewportResize,
28
+ ...props
29
+ }) => {
30
+ const isBgWithPattern = background !== "transparent" && background !== "solid";
31
+ return /* @__PURE__ */ jsxs(
32
+ ReactFlow,
33
+ {
34
+ colorMode,
35
+ nodes,
36
+ edges,
37
+ className: clsx(
38
+ "likec4-diagram",
39
+ cssReactFlow,
40
+ pannable !== true && cssDisablePan,
41
+ background === "transparent" && cssTransparentBg,
42
+ className
43
+ ),
44
+ zoomOnPinch: zoomable,
45
+ zoomOnScroll: !pannable && zoomable,
46
+ ...!zoomable && {
47
+ zoomActivationKeyCode: null
48
+ },
49
+ zoomOnDoubleClick,
50
+ maxZoom: zoomable ? MaxZoom : 1,
51
+ minZoom: zoomable ? MinZoom : 1,
52
+ fitView,
53
+ fitViewOptions: useMemo(() => ({
54
+ minZoom: MinZoom,
55
+ maxZoom: 1,
56
+ padding: fitViewPadding,
57
+ includeHiddenNodes: false
58
+ }), [fitViewPadding]),
59
+ preventScrolling: zoomable || pannable,
60
+ defaultMarkerColor: "var(--xy-edge-stroke)",
61
+ noDragClassName: "nodrag",
62
+ noPanClassName: "nopan",
63
+ panOnScroll: pannable,
64
+ panOnDrag: pannable,
65
+ ...!pannable && {
66
+ selectionKeyCode: null
67
+ },
68
+ elementsSelectable: nodesSelectable,
69
+ nodesFocusable: nodesDraggable || nodesSelectable,
70
+ edgesFocusable: false,
71
+ nodesDraggable,
72
+ nodeDragThreshold: 4,
73
+ nodeClickDistance: 1.9,
74
+ paneClickDistance: 1.9,
75
+ elevateNodesOnSelect: false,
76
+ selectNodesOnDrag: false,
77
+ onNodesChange,
78
+ onEdgesChange,
79
+ onNodeMouseEnter: useCallbackRef((_event, node) => {
80
+ onNodesChange([{
81
+ id: node.id,
82
+ type: "replace",
83
+ item: Base.setHovered(node, true)
84
+ }]);
85
+ }),
86
+ onNodeMouseLeave: useCallbackRef((_event, node) => {
87
+ onNodesChange([{
88
+ id: node.id,
89
+ type: "replace",
90
+ item: Base.setHovered(node, false)
91
+ }]);
92
+ }),
93
+ onEdgeMouseEnter: useCallbackRef((_event, edge) => {
94
+ onEdgesChange([{
95
+ id: edge.id,
96
+ type: "replace",
97
+ item: Base.setHovered(edge, true)
98
+ }]);
99
+ }),
100
+ onEdgeMouseLeave: useCallbackRef((_event, edge) => {
101
+ onEdgesChange([{
102
+ id: edge.id,
103
+ type: "replace",
104
+ item: Base.setHovered(edge, false)
105
+ }]);
106
+ }),
107
+ onNodeDoubleClick: stopPropagation,
108
+ onEdgeDoubleClick: stopPropagation,
109
+ ...props,
110
+ children: [
111
+ isBgWithPattern && /* @__PURE__ */ jsx(Background, { background }),
112
+ /* @__PURE__ */ jsx(BaseXYFlowInner, { onViewportResize }),
113
+ children
114
+ ]
115
+ }
116
+ );
117
+ };
118
+ const BaseXYFlowInner = ({
119
+ onViewportResize
120
+ }) => {
121
+ const xyflowApi = useStoreApi();
122
+ useOnViewportChange({
123
+ onEnd: ({ x, y, zoom }) => {
124
+ const roundedX = Math.round(x), roundedY = Math.round(y);
125
+ if (x !== roundedX || y !== roundedY) {
126
+ xyflowApi.setState({ transform: [roundedX, roundedY, zoom] });
127
+ }
128
+ }
129
+ });
130
+ const listenToViewportResize = !!onViewportResize;
131
+ const onViewportResizeCb = useCallbackRef(onViewportResize);
132
+ useEffect(() => {
133
+ if (!listenToViewportResize) {
134
+ return;
135
+ }
136
+ return xyflowApi.subscribe((state, prevState) => {
137
+ if (state.width !== prevState.width || state.height !== prevState.height) {
138
+ onViewportResizeCb();
139
+ }
140
+ });
141
+ }, [listenToViewportResize]);
142
+ return /* @__PURE__ */ jsx(Fragment, {});
143
+ };
144
+ export {
145
+ BaseXYFlow
146
+ };
@@ -0,0 +1,6 @@
1
+ import { DiagramView } from '@likec4/core';
2
+ type ExampleProps = {
3
+ view: DiagramView;
4
+ };
5
+ export declare function Example({ view }: ExampleProps): import("react/jsx-runtime").JSX.Element;
6
+ export {};
@@ -0,0 +1,20 @@
1
+ import { Color, DiagramNode, Fqn } from '@likec4/core';
2
+ import { Base, NonOptional, ReactFlowEdge, ReactFlowNode } from '../types';
3
+ export declare namespace ExampleTypes {
4
+ type ElementNodeData = Base.NodeData<NonOptional<Pick<DiagramNode, 'title' | 'technology' | 'description' | 'color' | 'shape' | 'width' | 'height' | 'navigateTo'>> & {
5
+ fqn: Fqn;
6
+ icon: string | null;
7
+ }>;
8
+ type CompoundNodeData = Base.NodeData<NonOptional<Pick<DiagramNode, 'title' | 'color' | 'shape' | 'style'>> & {
9
+ fqn: Fqn;
10
+ depth: number;
11
+ icon: string | null;
12
+ }>;
13
+ type ElementNode = ReactFlowNode<ElementNodeData, 'element'>;
14
+ type CompoundNode = ReactFlowNode<CompoundNodeData, 'compound'>;
15
+ type Node = ElementNode | CompoundNode;
16
+ type EdgeData = Base.EdgeData<{
17
+ color: Color | undefined;
18
+ }>;
19
+ type Edge = ReactFlowEdge<EdgeData, 'relationships'>;
20
+ }