@likec4/diagram 1.30.0 → 1.32.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 (403) hide show
  1. package/README.md +324 -5
  2. package/bundle/chunk-BvTQaUYl.js +21851 -0
  3. package/bundle/custom.js +65 -0
  4. package/bundle/index.js +19910 -40570
  5. package/dist/LikeC4CustomColors.d.ts +2 -7
  6. package/dist/LikeC4CustomColors.js +17 -6
  7. package/dist/LikeC4Diagram.d.ts +3 -2
  8. package/dist/LikeC4Diagram.js +14 -16
  9. package/dist/LikeC4Diagram.props.d.ts +34 -23
  10. package/dist/LikeC4ModelProvider.d.ts +5 -4
  11. package/dist/LikeC4ModelProvider.js +0 -1
  12. package/dist/StaticLikeC4Diagram.d.ts +3 -2
  13. package/dist/StaticLikeC4Diagram.js +2 -2
  14. package/dist/base/BaseXYFlow.js +8 -8
  15. package/dist/base/const.d.ts +1 -1
  16. package/dist/base/const.js +1 -1
  17. package/dist/base/index.d.ts +2 -1
  18. package/dist/base/primitives/compound/CompoundActionButton.d.ts +3 -2
  19. package/dist/base/primitives/compound/CompoundActionButton.js +2 -1
  20. package/dist/base/primitives/compound/CompoundDetailsButton.d.ts +3 -2
  21. package/dist/base/primitives/compound/CompoundDetailsButton.js +2 -1
  22. package/dist/base/primitives/compound/CompoundNodeContainer.d.ts +7 -3
  23. package/dist/base/primitives/compound/CompoundNodeContainer.js +3 -2
  24. package/dist/base/primitives/compound/CompoundTitle.d.ts +1 -1
  25. package/dist/base/primitives/compound/CompoundTitle.js +2 -1
  26. package/dist/base/primitives/customEdge.d.ts +2 -35
  27. package/dist/base/primitives/customEdge.js +2 -2
  28. package/dist/base/primitives/customNode.d.ts +2 -2
  29. package/dist/base/primitives/customNode.js +9 -2
  30. package/dist/base/primitives/edge/EdgeContainer.d.ts +1 -1
  31. package/dist/base/primitives/edge/EdgeContainer.js +0 -1
  32. package/dist/base/primitives/edge/EdgeLabel.css.js +1 -0
  33. package/dist/base/primitives/edge/EdgeLabel.d.ts +3 -3
  34. package/dist/base/primitives/edge/EdgeLabel.js +6 -5
  35. package/dist/base/primitives/edge/EdgeLabelContainer.d.ts +1 -1
  36. package/dist/base/primitives/edge/EdgeLabelContainer.js +0 -2
  37. package/dist/base/primitives/edge/EdgeMarkers.d.ts +1 -1
  38. package/dist/base/primitives/edge/EdgePath.d.ts +1 -1
  39. package/dist/base/primitives/edge/EdgePath.js +2 -2
  40. package/dist/base/primitives/element/ElementActionButtons.js +10 -9
  41. package/dist/base/primitives/element/ElementDetailsButton.js +2 -1
  42. package/dist/base/primitives/element/ElementNodeContainer.d.ts +24 -22
  43. package/dist/base/primitives/element/ElementNodeContainer.js +66 -68
  44. package/dist/base/primitives/element/ElementShape.d.ts +8 -4
  45. package/dist/base/primitives/element/ElementShape.js +4 -3
  46. package/dist/base/primitives/element/ElementTags.d.ts +14 -0
  47. package/dist/base/primitives/element/ElementTags.js +176 -0
  48. package/dist/base/primitives/element/ElementTitle.css.d.ts +1 -1
  49. package/dist/base/primitives/element/ElementTitle.d.ts +5 -4
  50. package/dist/base/primitives/element/ElementTitle.js +6 -7
  51. package/dist/base/primitives/index.d.ts +1 -0
  52. package/dist/base/types.Base.d.ts +54 -0
  53. package/dist/base/types.Base.js +48 -0
  54. package/dist/base/types.d.ts +3 -53
  55. package/dist/bundle/LikeC4View.d.ts +2 -1
  56. package/dist/bundle/LikeC4View.js +13 -8
  57. package/dist/bundle/LikeC4View.props.d.ts +20 -5
  58. package/dist/bundle/ReactLikeC4.d.ts +4 -7
  59. package/dist/bundle/ReactLikeC4.js +4 -4
  60. package/dist/bundle/ShadowRoot.js +3 -3
  61. package/dist/bundle/custom.d.ts +1 -0
  62. package/dist/bundle/index.d.ts +3 -1
  63. package/dist/bundle/index.js +9 -0
  64. package/dist/bundle/styles.css.js +5 -5
  65. package/dist/components/ErrorFallback.d.ts +2 -0
  66. package/dist/components/ErrorFallback.js +29 -0
  67. package/dist/components/SearchControl.js +2 -2
  68. package/dist/context/ControlsCustomLayout.js +0 -1
  69. package/dist/context/DiagramEventHandlers.d.ts +6 -5
  70. package/dist/context/DiagramEventHandlers.js +5 -5
  71. package/dist/context/DiagramFeatures.d.ts +3 -5
  72. package/dist/context/DiagramFeatures.js +11 -40
  73. package/dist/context/EnsureMantine.js +9 -4
  74. package/dist/context/FramerMotionConfig.js +0 -1
  75. package/dist/context/IconRenderer.js +8 -11
  76. package/dist/context/ReduceGraphics.js +6 -6
  77. package/dist/context/RootContainer.js +10 -6
  78. package/dist/context/TagStylesContext.d.ts +7 -0
  79. package/dist/context/TagStylesContext.js +85 -0
  80. package/dist/context/index.d.ts +1 -1
  81. package/dist/custom/components.d.ts +5 -0
  82. package/dist/custom/customNodes.d.ts +228 -0
  83. package/dist/custom/hooks.d.ts +10 -0
  84. package/dist/custom/index.d.ts +4 -0
  85. package/dist/hooks/index.d.ts +1 -1
  86. package/dist/hooks/safeContext.js +3 -3
  87. package/dist/hooks/useCurrentViewId.d.ts +5 -1
  88. package/dist/hooks/useCurrentViewId.js +1 -2
  89. package/dist/hooks/useDiagram.d.ts +77 -12572
  90. package/dist/hooks/useDiagram.js +9 -7
  91. package/dist/hooks/useMantinePortalProps.d.ts +2 -2
  92. package/dist/hooks/useMantinePortalProps.js +2 -2
  93. package/dist/hooks/useSearchActor.d.ts +2 -0
  94. package/dist/hooks/useSearchActor.js +10 -0
  95. package/dist/hooks/useSetState.js +3 -3
  96. package/dist/hooks/useUpdateEffect.js +3 -1
  97. package/dist/hooks/useXYFlow.d.ts +75 -73
  98. package/dist/hooks/useXYFlow.js +7 -3
  99. package/dist/index.d.ts +2 -4
  100. package/dist/index.js +8 -3
  101. package/dist/likec4diagram/DiagramUI.js +9 -4
  102. package/dist/likec4diagram/DiagramXYFlow.d.ts +4 -3
  103. package/dist/likec4diagram/DiagramXYFlow.js +124 -109
  104. package/dist/likec4diagram/custom/edges/NotePopover.js +2 -2
  105. package/dist/likec4diagram/custom/edges/RelationshipEdge.d.ts +12 -15
  106. package/dist/likec4diagram/custom/edges/RelationshipEdge.js +16 -8
  107. package/dist/likec4diagram/custom/edges/RelationshipsDropdownMenu.js +19 -15
  108. package/dist/likec4diagram/custom/index.d.ts +18 -21
  109. package/dist/likec4diagram/custom/index.js +3 -3
  110. package/dist/likec4diagram/custom/nodes/CompoundActions.js +2 -2
  111. package/dist/likec4diagram/custom/nodes/ElementActions.d.ts +27 -4
  112. package/dist/likec4diagram/custom/nodes/ElementActions.js +67 -53
  113. package/dist/likec4diagram/custom/nodes/index.d.ts +8 -0
  114. package/dist/likec4diagram/custom/nodes/nodes.d.ts +10 -0
  115. package/dist/likec4diagram/custom/nodes/nodes.js +105 -0
  116. package/dist/likec4diagram/custom/nodes/toolbar/ColorButton.js +2 -2
  117. package/dist/likec4diagram/custom/nodes/toolbar/CompoundToolbar.js +6 -7
  118. package/dist/likec4diagram/custom/nodes/toolbar/ElementToolbar.js +3 -3
  119. package/dist/likec4diagram/custom/nodes/toolbar/Toolbar.d.ts +3 -2
  120. package/dist/likec4diagram/custom/nodes/toolbar/Toolbar.js +2 -2
  121. package/dist/likec4diagram/custom/nodes/toolbar/_shared.d.ts +5 -5
  122. package/dist/likec4diagram/custom/nodes/toolbar/_shared.js +2 -2
  123. package/dist/likec4diagram/types.d.ts +18 -10
  124. package/dist/likec4diagram/ui/controls/ChangeAutoLayoutButton.js +4 -4
  125. package/dist/likec4diagram/ui/controls/Controls.js +14 -6
  126. package/dist/likec4diagram/ui/diagram-title/DiagramTitlePanel.js +2 -2
  127. package/dist/likec4diagram/ui/notation/NotationPanel.js +7 -9
  128. package/dist/likec4diagram/ui/walkthrough/DynamicViewWalkthrough.js +4 -4
  129. package/dist/likec4diagram/useLayoutConstraints.js +3 -4
  130. package/dist/likec4diagram/useViewToNodesEdges.d.ts +5 -3
  131. package/dist/likec4diagram/useViewToNodesEdges.js +22 -30
  132. package/dist/likec4model/LikeC4ModelContext.d.ts +2 -2
  133. package/dist/likec4model/LikeC4ModelContext.js +2 -2
  134. package/dist/likec4model/useLikeC4ElementsTree.d.ts +1 -1
  135. package/dist/likec4model/useLikeC4ElementsTree.js +4 -4
  136. package/dist/likec4model/useLikeC4Model.d.ts +22 -10
  137. package/dist/likec4model/useLikeC4Model.js +13 -9
  138. package/dist/overlays/Overlays.d.ts +2 -3
  139. package/dist/overlays/Overlays.js +9 -33
  140. package/dist/overlays/element-details/ElementDetailsCard.css.js +13 -9
  141. package/dist/overlays/element-details/ElementDetailsCard.d.ts +1 -1
  142. package/dist/overlays/element-details/ElementDetailsCard.js +110 -110
  143. package/dist/overlays/element-details/TabPanelDeployments.d.ts +1 -1
  144. package/dist/overlays/element-details/TabPanelDeployments.js +5 -5
  145. package/dist/overlays/element-details/TabPanelRelationships.d.ts +1 -1
  146. package/dist/overlays/element-details/TabPanelRelationships.js +2 -2
  147. package/dist/overlays/element-details/TabPanelStructure.d.ts +1 -1
  148. package/dist/overlays/element-details/TabPanelStructure.js +3 -3
  149. package/dist/overlays/element-details/actor.d.ts +5482 -18265
  150. package/dist/overlays/element-details/actor.js +0 -2
  151. package/dist/overlays/element-details/actorContext.js +3 -3
  152. package/dist/overlays/overlay/Overlay.css.d.ts +57 -2
  153. package/dist/overlays/overlay/Overlay.css.js +76 -39
  154. package/dist/overlays/overlay/Overlay.d.ts +23 -1
  155. package/dist/overlays/overlay/Overlay.js +40 -29
  156. package/dist/overlays/overlaysActor.d.ts +5 -3
  157. package/dist/overlays/overlaysActor.js +2 -1
  158. package/dist/overlays/relationship-details/RelationshipDetails.d.ts +6 -9
  159. package/dist/overlays/relationship-details/RelationshipDetails.js +15 -15
  160. package/dist/overlays/relationship-details/SelectEdge.js +2 -3
  161. package/dist/overlays/relationship-details/_types.d.ts +7 -6
  162. package/dist/overlays/relationship-details/actor.d.ts +3 -3
  163. package/dist/overlays/relationship-details/actor.js +7 -7
  164. package/dist/overlays/relationship-details/compute.js +3 -3
  165. package/dist/overlays/relationship-details/custom/edgeTypes.d.ts +6 -9
  166. package/dist/overlays/relationship-details/custom/edgeTypes.js +2 -2
  167. package/dist/overlays/relationship-details/custom/nodeTypes.d.ts +3 -31
  168. package/dist/overlays/relationship-details/custom/nodeTypes.js +4 -0
  169. package/dist/overlays/relationship-details/hooks.d.ts +28 -27
  170. package/dist/overlays/relationship-details/hooks.js +4 -4
  171. package/dist/overlays/relationship-details/layout-to-xyflow.js +1 -0
  172. package/dist/overlays/relationship-details/layout.js +5 -4
  173. package/dist/overlays/relationships-browser/RelationshipsBrowser.d.ts +6 -9
  174. package/dist/overlays/relationships-browser/RelationshipsBrowser.js +8 -8
  175. package/dist/overlays/relationships-browser/SelectElement.js +6 -6
  176. package/dist/overlays/relationships-browser/_types.d.ts +7 -6
  177. package/dist/overlays/relationships-browser/actor.d.ts +64 -429
  178. package/dist/overlays/relationships-browser/actor.js +7 -7
  179. package/dist/overlays/relationships-browser/custom/edgeTypes.d.ts +6 -9
  180. package/dist/overlays/relationships-browser/custom/edgeTypes.js +2 -2
  181. package/dist/overlays/relationships-browser/custom/nodeTypes.d.ts +17 -18
  182. package/dist/overlays/relationships-browser/custom/nodeTypes.js +5 -2
  183. package/dist/overlays/relationships-browser/hooks.d.ts +4 -61
  184. package/dist/overlays/relationships-browser/hooks.js +4 -4
  185. package/dist/overlays/relationships-browser/layout.d.ts +2 -2
  186. package/dist/overlays/relationships-browser/layout.js +13 -10
  187. package/dist/overlays/relationships-browser/useViewToNodesEdges.js +4 -3
  188. package/dist/search/Search.d.ts +5 -0
  189. package/dist/search/Search.js +192 -0
  190. package/dist/{likec4diagram/ui/search → search/components}/ElementsColumn.css.js +0 -1
  191. package/dist/search/components/ElementsColumn.d.ts +2 -0
  192. package/dist/{likec4diagram/ui/search → search/components}/ElementsColumn.js +26 -25
  193. package/dist/search/components/PickView.d.ts +4 -0
  194. package/dist/search/components/PickView.js +135 -0
  195. package/dist/search/components/SearchByTags.d.ts +1 -0
  196. package/dist/search/components/SearchByTags.js +116 -0
  197. package/dist/search/components/SearchInput.d.ts +2 -0
  198. package/dist/{likec4diagram/ui/search → search/components}/SearchInput.js +53 -35
  199. package/dist/{likec4diagram/ui/search → search/components}/ViewsColum.d.ts +3 -2
  200. package/dist/{likec4diagram/ui/search → search/components}/ViewsColum.js +14 -13
  201. package/dist/search/components/_shared.css.d.ts +4 -0
  202. package/dist/{likec4diagram/ui/search → search/components}/_shared.css.js +26 -35
  203. package/dist/{likec4diagram/ui/search/LikeC4Search.css.d.ts → search/components/styles.css.d.ts} +0 -2
  204. package/dist/search/components/styles.css.js +60 -0
  205. package/dist/{likec4diagram/ui/search → search/components}/utils.d.ts +1 -0
  206. package/dist/{likec4diagram/ui/search → search/components}/utils.js +7 -1
  207. package/dist/search/hooks.d.ts +16 -0
  208. package/dist/search/hooks.js +35 -0
  209. package/dist/search/searchActor.d.ts +90 -0
  210. package/dist/search/searchActor.js +75 -0
  211. package/dist/state/DiagramActorProvider.d.ts +9 -7
  212. package/dist/state/DiagramActorProvider.js +24 -18
  213. package/dist/state/assign.d.ts +0 -1
  214. package/dist/state/assign.js +9 -19
  215. package/dist/state/diagram-machine.d.ts +749 -10678
  216. package/dist/state/diagram-machine.js +121 -55
  217. package/dist/state/hotkeyActor.d.ts +4 -2
  218. package/dist/state/syncManualLayoutActor.d.ts +15 -4
  219. package/dist/state/syncManualLayoutActor.js +2 -1
  220. package/dist/state/types.d.ts +7 -4
  221. package/dist/state/utils.d.ts +3 -1
  222. package/dist/state/utils.js +3 -0
  223. package/dist/styles-font.css +1 -0
  224. package/dist/styles-min.css +1 -0
  225. package/dist/styles-xyflow.css +1 -0
  226. package/dist/styles.css +1 -0
  227. package/dist/styles.css2.js +3 -0
  228. package/package.json +50 -25
  229. package/panda.buildinfo.json +1002 -0
  230. package/src/LikeC4CustomColors.tsx +21 -6
  231. package/src/LikeC4Diagram.props.ts +42 -31
  232. package/src/LikeC4Diagram.tsx +21 -20
  233. package/src/LikeC4ModelProvider.tsx +7 -6
  234. package/src/StaticLikeC4Diagram.tsx +9 -6
  235. package/src/base/Background.tsx +0 -4
  236. package/src/base/const.ts +1 -1
  237. package/src/base/index.ts +2 -1
  238. package/src/base/primitives/compound/CompoundActionButton.tsx +9 -5
  239. package/src/base/primitives/compound/CompoundDetailsButton.tsx +9 -5
  240. package/src/base/primitives/compound/CompoundNodeContainer.tsx +8 -7
  241. package/src/base/primitives/compound/CompoundTitle.tsx +3 -2
  242. package/src/base/primitives/customEdge.ts +1 -1
  243. package/src/base/primitives/{customNode.ts → customNode.tsx} +11 -3
  244. package/src/base/primitives/edge/EdgeContainer.tsx +2 -1
  245. package/src/base/primitives/edge/EdgeLabel.css.ts +1 -0
  246. package/src/base/primitives/edge/EdgeLabel.tsx +20 -15
  247. package/src/base/primitives/edge/EdgeLabelContainer.tsx +1 -1
  248. package/src/base/primitives/edge/EdgeMarkers.tsx +2 -1
  249. package/src/base/primitives/edge/EdgePath.tsx +1 -1
  250. package/src/base/primitives/element/ElementActionButtons.tsx +11 -10
  251. package/src/base/primitives/element/ElementDetailsButton.tsx +2 -1
  252. package/src/base/primitives/element/ElementNodeContainer.tsx +87 -80
  253. package/src/base/primitives/element/ElementShape.tsx +12 -10
  254. package/src/base/primitives/element/ElementTags.tsx +182 -0
  255. package/src/base/primitives/element/ElementTitle.tsx +21 -15
  256. package/src/base/primitives/index.ts +1 -0
  257. package/src/base/types.Base.ts +104 -0
  258. package/src/base/types.ts +4 -106
  259. package/src/bundle/LikeC4View.props.ts +23 -5
  260. package/src/bundle/LikeC4View.tsx +20 -19
  261. package/src/bundle/ReactLikeC4.tsx +15 -27
  262. package/src/bundle/custom.ts +1 -0
  263. package/src/bundle/index.ts +20 -1
  264. package/src/bundle/styles.css.ts +1 -1
  265. package/src/components/ErrorFallback.tsx +30 -0
  266. package/src/components/SearchControl.tsx +1 -1
  267. package/src/context/DiagramEventHandlers.tsx +5 -4
  268. package/src/context/DiagramFeatures.tsx +15 -30
  269. package/src/context/EnsureMantine.tsx +13 -3
  270. package/src/context/IconRenderer.tsx +2 -5
  271. package/src/context/ReduceGraphics.tsx +6 -6
  272. package/src/context/RootContainer.tsx +9 -3
  273. package/src/context/TagStylesContext.tsx +96 -0
  274. package/src/context/index.ts +0 -1
  275. package/src/custom/components.ts +49 -0
  276. package/src/custom/customNodes.tsx +254 -0
  277. package/src/custom/hooks.ts +36 -0
  278. package/src/custom/index.ts +5 -0
  279. package/src/hooks/index.ts +1 -1
  280. package/src/hooks/useCurrentViewId.ts +6 -1
  281. package/src/hooks/useDiagram.ts +131 -18
  282. package/src/hooks/useMantinePortalProps.ts +10 -1
  283. package/src/hooks/useSearchActor.ts +11 -0
  284. package/src/hooks/useUpdateEffect.ts +7 -4
  285. package/src/hooks/useXYFlow.ts +5 -0
  286. package/src/index.ts +4 -8
  287. package/src/likec4diagram/DiagramUI.tsx +5 -0
  288. package/src/likec4diagram/DiagramXYFlow.tsx +135 -115
  289. package/src/likec4diagram/custom/edges/RelationshipEdge.tsx +10 -1
  290. package/src/likec4diagram/custom/edges/RelationshipsDropdownMenu.tsx +17 -14
  291. package/src/likec4diagram/custom/{index.tsx → index.ts} +2 -2
  292. package/src/likec4diagram/custom/nodes/CompoundActions.tsx +2 -2
  293. package/src/likec4diagram/custom/nodes/ElementActions.tsx +100 -57
  294. package/src/likec4diagram/custom/nodes/index.ts +17 -0
  295. package/src/likec4diagram/custom/nodes/nodes.tsx +127 -0
  296. package/src/likec4diagram/custom/nodes/toolbar/CompoundToolbar.tsx +3 -4
  297. package/src/likec4diagram/custom/nodes/toolbar/ElementToolbar.tsx +3 -3
  298. package/src/likec4diagram/custom/nodes/toolbar/Toolbar.tsx +5 -4
  299. package/src/likec4diagram/custom/nodes/toolbar/_shared.tsx +11 -3
  300. package/src/likec4diagram/types.ts +24 -12
  301. package/src/likec4diagram/ui/controls/Controls.tsx +11 -4
  302. package/src/likec4diagram/ui/diagram-title/DiagramTitlePanel.tsx +1 -1
  303. package/src/likec4diagram/ui/notation/NotationPanel.tsx +3 -4
  304. package/src/likec4diagram/ui/walkthrough/DynamicViewWalkthrough.tsx +1 -1
  305. package/src/likec4diagram/useViewToNodesEdges.ts +36 -36
  306. package/src/likec4model/LikeC4ModelContext.ts +2 -2
  307. package/src/likec4model/useLikeC4ElementsTree.ts +4 -2
  308. package/src/likec4model/useLikeC4Model.ts +18 -16
  309. package/src/overlays/Overlays.tsx +7 -35
  310. package/src/overlays/element-details/ElementDetailsCard.css.ts +14 -22
  311. package/src/overlays/element-details/ElementDetailsCard.tsx +43 -34
  312. package/src/overlays/element-details/TabPanelDeployments.tsx +3 -2
  313. package/src/overlays/element-details/TabPanelRelationships.tsx +2 -1
  314. package/src/overlays/element-details/TabPanelStructure.tsx +1 -1
  315. package/src/overlays/element-details/actor.ts +2 -2
  316. package/src/overlays/overlay/Overlay.css.ts +75 -38
  317. package/src/overlays/overlay/Overlay.tsx +45 -29
  318. package/src/overlays/overlaysActor.ts +5 -4
  319. package/src/overlays/relationship-details/RelationshipDetails.tsx +5 -5
  320. package/src/overlays/relationship-details/SelectEdge.tsx +0 -2
  321. package/src/overlays/relationship-details/_types.ts +18 -14
  322. package/src/overlays/relationship-details/custom/edgeTypes.tsx +2 -2
  323. package/src/overlays/relationship-details/custom/nodeTypes.tsx +4 -0
  324. package/src/overlays/relationship-details/layout-to-xyflow.ts +1 -0
  325. package/src/overlays/relationship-details/layout.ts +3 -1
  326. package/src/overlays/relationships-browser/SelectElement.tsx +1 -1
  327. package/src/overlays/relationships-browser/_types.ts +20 -16
  328. package/src/overlays/relationships-browser/actor.ts +2 -2
  329. package/src/overlays/relationships-browser/custom/edgeTypes.tsx +2 -2
  330. package/src/overlays/relationships-browser/custom/nodeTypes.tsx +5 -2
  331. package/src/overlays/relationships-browser/layout.ts +12 -7
  332. package/src/overlays/relationships-browser/useViewToNodesEdges.ts +4 -4
  333. package/src/search/Search.tsx +237 -0
  334. package/src/{likec4diagram/ui/search → search/components}/ElementsColumn.css.ts +0 -29
  335. package/src/{likec4diagram/ui/search → search/components}/ElementsColumn.tsx +25 -25
  336. package/src/search/components/PickView.tsx +140 -0
  337. package/src/search/components/SearchByTags.tsx +109 -0
  338. package/src/{likec4diagram/ui/search → search/components}/SearchInput.tsx +63 -36
  339. package/src/{likec4diagram/ui/search → search/components}/ViewsColum.tsx +17 -18
  340. package/src/{likec4diagram/ui/search → search/components}/_shared.css.ts +26 -37
  341. package/src/{likec4diagram/ui/search/LikeC4Search.css.ts → search/components/styles.css.ts} +9 -36
  342. package/src/{likec4diagram/ui/search → search/components}/utils.ts +7 -0
  343. package/src/search/hooks.ts +41 -0
  344. package/src/search/searchActor.ts +99 -0
  345. package/src/state/DiagramActorProvider.tsx +36 -25
  346. package/src/state/assign.ts +10 -10
  347. package/src/state/diagram-machine.ts +128 -60
  348. package/src/state/hotkeyActor.ts +4 -2
  349. package/src/state/syncManualLayoutActor.ts +10 -4
  350. package/src/state/types.ts +11 -3
  351. package/src/state/utils.ts +7 -3
  352. package/src/styles-min.css +2 -0
  353. package/src/styles-xyflow.css +1 -0
  354. package/dist/_virtual/_commonjsHelpers.js +0 -5
  355. package/dist/_virtual/default-map.js +0 -7
  356. package/dist/_virtual/index.js +0 -5
  357. package/dist/_virtual/index2.js +0 -3
  358. package/dist/_virtual/react.production.js +0 -3
  359. package/dist/_virtual/set.js +0 -5
  360. package/dist/_virtual/set2.js +0 -3
  361. package/dist/base/types.js +0 -54
  362. package/dist/base/xyflowMachine.d.ts +0 -212
  363. package/dist/likec4diagram/custom/nodes/nodeTypes.d.ts +0 -8
  364. package/dist/likec4diagram/custom/nodes/nodeTypes.js +0 -92
  365. package/dist/likec4diagram/ui/search/ElementsColumn.d.ts +0 -1
  366. package/dist/likec4diagram/ui/search/LikeC4Search.css.js +0 -87
  367. package/dist/likec4diagram/ui/search/LikeC4Search.d.ts +0 -2
  368. package/dist/likec4diagram/ui/search/LikeC4Search.js +0 -267
  369. package/dist/likec4diagram/ui/search/SearchInput.d.ts +0 -1
  370. package/dist/likec4diagram/ui/search/_shared.css.d.ts +0 -4
  371. package/dist/likec4diagram/ui/search/state.d.ts +0 -19
  372. package/dist/likec4diagram/ui/search/state.js +0 -64
  373. package/dist/node_modules/.pnpm/mnemonist@0.40.3_patch_hash_5c12abb43fcff6fd81e53021b89075d53249640d165a2556cc1e58d71201a13a/node_modules/mnemonist/default-map.js +0 -172
  374. package/dist/node_modules/.pnpm/mnemonist@0.40.3_patch_hash_5c12abb43fcff6fd81e53021b89075d53249640d165a2556cc1e58d71201a13a/node_modules/mnemonist/set.js +0 -369
  375. package/dist/node_modules/.pnpm/react@19.1.0/node_modules/react/cjs/react.production.js +0 -556
  376. package/dist/node_modules/.pnpm/react@19.1.0/node_modules/react/index.js +0 -15
  377. package/dist/packages/core/src/compute-view/relationships-view/compute.js +0 -123
  378. package/dist/packages/core/src/compute-view/relationships-view/utils.js +0 -68
  379. package/dist/packages/core/src/errors/index.js +0 -15
  380. package/dist/packages/core/src/model/connection/model/ConnectionModel.js +0 -121
  381. package/dist/packages/core/src/model/connection/model/find.js +0 -39
  382. package/dist/packages/core/src/model/connection/ops.js +0 -7
  383. package/dist/packages/core/src/utils/const.js +0 -3
  384. package/dist/packages/core/src/utils/fqn.js +0 -51
  385. package/dist/packages/core/src/utils/guards.js +0 -7
  386. package/dist/packages/core/src/utils/iterable/filter.js +0 -21
  387. package/dist/packages/core/src/utils/iterable/find.js +0 -21
  388. package/dist/packages/core/src/utils/iterable/map.js +0 -18
  389. package/dist/packages/core/src/utils/iterable/some.js +0 -21
  390. package/dist/packages/core/src/utils/iterable/to.js +0 -14
  391. package/dist/packages/core/src/utils/set.js +0 -48
  392. package/dist/packages/core/src/utils/string-hash.js +0 -13
  393. package/dist/styles.css.js +0 -3
  394. package/src/base/xyflowMachine.ts +0 -75
  395. package/src/likec4diagram/custom/nodes/nodeTypes.tsx +0 -109
  396. package/src/likec4diagram/ui/search/LikeC4Search.tsx +0 -301
  397. package/src/likec4diagram/ui/search/state.ts +0 -78
  398. /package/dist/{likec4diagram/ui/search → search/components}/ElementsColumn.css.d.ts +0 -0
  399. /package/dist/{likec4diagram/ui/search → search/components}/ViewsColumn.css.d.ts +0 -0
  400. /package/dist/{likec4diagram/ui/search → search/components}/ViewsColumn.css.js +0 -0
  401. /package/dist/{bundle/font.css.js → styles-font.css2.js} +0 -0
  402. /package/src/{likec4diagram/ui/search → search/components}/ViewsColumn.css.ts +0 -0
  403. /package/src/{bundle/font.css → styles-font.css} +0 -0
@@ -1,16 +1,17 @@
1
- import { jsxs, jsx } from 'react/jsx-runtime';
1
+ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
2
  import { nonNullable } from '@likec4/core';
3
3
  import { cx } from '@likec4/styles/css';
4
4
  import { useTimeout, useDebouncedCallback, useCallbackRef } from '@mantine/hooks';
5
- import { deepEqual, shallowEqual } from 'fast-equals';
6
- import { r as reactExports } from '../_virtual/index.js';
5
+ import { useCustomCompareMemo } from '@react-hookz/web';
6
+ import { shallowEqual } from 'fast-equals';
7
7
  import { BaseXYFlow } from '../base/BaseXYFlow.js';
8
8
  import { useIsReducedGraphics, usePanningAtom } from '../context/ReduceGraphics.js';
9
9
  import { useDiagram, useDiagramContext } from '../hooks/useDiagram.js';
10
- import { edgeTypes, nodeTypes } from './custom/index.js';
10
+ import { BuiltinNodes, edgeTypes } from './custom/index.js';
11
11
  import { DiagramUI } from './DiagramUI.js';
12
12
  import { useLayoutConstraints } from './useLayoutConstraints.js';
13
13
  import { useDiagramEventHandlers } from '../context/DiagramEventHandlers.js';
14
+ import { useUpdateEffect } from '../hooks/useUpdateEffect.js';
14
15
 
15
16
  const selectXYProps = (ctx) => ({
16
17
  initialized: ctx.initialized.xydata && ctx.initialized.xyflow,
@@ -30,14 +31,14 @@ const selectXYProps = (ctx) => ({
30
31
  }
31
32
  });
32
33
  const equalsXYProps = (a, b) => a.initialized === b.initialized && a.pannable === b.pannable && a.zoomable === b.zoomable && a.fitViewPadding === b.fitViewPadding && a.enableFitView === b.enableFitView && a.enableReadOnly === b.enableReadOnly && shallowEqual(a.nodes, b.nodes) && shallowEqual(a.edges, b.edges) && shallowEqual(a.viewport ?? null, b.viewport ?? null);
33
- const compareProps = (a, b) => a.nodesDraggable === b.nodesDraggable && a.nodesSelectable === b.nodesSelectable && deepEqual(a.background, b.background) && deepEqual(a.reactFlowProps ?? {}, b.reactFlowProps ?? {});
34
- const LikeC4DiagramXYFlow = reactExports.memo(({
34
+ function LikeC4DiagramXYFlow({
35
35
  background = "dots",
36
36
  nodesDraggable = false,
37
37
  nodesSelectable = false,
38
38
  reactFlowProps = {},
39
- children
40
- }) => {
39
+ children,
40
+ renderNodes
41
+ }) {
41
42
  const diagram = useDiagram();
42
43
  const {
43
44
  initialized,
@@ -78,107 +79,121 @@ const LikeC4DiagramXYFlow = reactExports.memo(({
78
79
  diagram.send({ type: "xyflow.viewportMoved", viewport, manually: !!event });
79
80
  }), onViewportResize = useCallbackRef(() => {
80
81
  diagram.send({ type: "xyflow.resized" });
81
- });
82
- return /* @__PURE__ */ jsxs(
83
- BaseXYFlow,
84
- {
85
- nodes,
86
- edges,
87
- className: cx(initialized ? "initialized" : "not-initialized"),
88
- nodeTypes,
89
- edgeTypes,
90
- onNodesChange: useCallbackRef((changes) => {
91
- diagram.send({ type: "xyflow.applyNodeChanges", changes });
92
- }),
93
- onEdgesChange: useCallbackRef((changes) => {
94
- diagram.send({ type: "xyflow.applyEdgeChanges", changes });
95
- }),
96
- background: initialized ? background : "transparent",
97
- fitView: false,
98
- onNodeClick: useCallbackRef((e, node) => {
99
- e.stopPropagation();
100
- diagram.send({ type: "xyflow.nodeClick", node });
101
- onNodeClick?.(diagram.findDiagramNode(node.id), e);
102
- }),
103
- onEdgeClick: useCallbackRef((e, edge) => {
104
- e.stopPropagation();
105
- diagram.send({ type: "xyflow.edgeClick", edge });
106
- onEdgeClick?.(diagram.findDiagramEdge(edge.id), e);
107
- }),
108
- onPaneClick: useCallbackRef((e) => {
109
- e.stopPropagation();
110
- diagram.send({ type: "xyflow.paneClick" });
111
- onCanvasClick?.(e);
112
- }),
113
- onDoubleClick: useCallbackRef((e) => {
114
- e.stopPropagation();
115
- e.preventDefault();
116
- diagram.send({ type: "xyflow.paneDblClick" });
117
- onCanvasDblClick?.(e);
118
- }),
119
- onNodeMouseEnter: useCallbackRef((_event, node) => {
120
- _event.stopPropagation();
121
- if (!node.data.hovered) {
122
- diagram.send({ type: "xyflow.nodeMouseEnter", node });
123
- }
124
- }),
125
- onNodeMouseLeave: useCallbackRef((_event, node) => {
126
- _event.stopPropagation();
127
- if (node.data.hovered) {
128
- diagram.send({ type: "xyflow.nodeMouseLeave", node });
129
- }
130
- }),
131
- onEdgeMouseEnter: useCallbackRef((_event, edge) => {
132
- _event.stopPropagation();
133
- if (!edge.data.hovered) {
134
- diagram.send({ type: "xyflow.edgeMouseEnter", edge });
135
- }
136
- }),
137
- onEdgeMouseLeave: useCallbackRef((_event, edge) => {
138
- _event.stopPropagation();
139
- if (edge.data.hovered) {
140
- diagram.send({ type: "xyflow.edgeMouseLeave", edge });
141
- }
142
- }),
143
- ...props.pannable && {
144
- onMove
145
- },
146
- onMoveEnd,
147
- onInit: useCallbackRef((instance) => {
148
- diagram.send({ type: "xyflow.init", instance });
149
- }),
150
- onNodeContextMenu: useCallbackRef((event, node) => {
151
- const diagramNode = nonNullable(
152
- diagram.findDiagramNode(node.id),
153
- `diagramNode ${node.id} not found`
154
- );
155
- onNodeContextMenu?.(diagramNode, event);
156
- }),
157
- onEdgeContextMenu: useCallbackRef((event, edge) => {
158
- const diagramEdge = nonNullable(
159
- diagram.findDiagramEdge(edge.id),
160
- `diagramEdge ${edge.id} not found`
161
- );
162
- onEdgeContextMenu?.(diagramEdge, event);
163
- }),
164
- onPaneContextMenu: useCallbackRef((event) => {
165
- onCanvasContextMenu?.(event);
166
- }),
167
- ...enableFitView && {
168
- onViewportResize
169
- },
170
- nodesDraggable: notReadOnly && nodesDraggable,
171
- nodesSelectable,
172
- ...notReadOnly && nodesDraggable && layoutConstraints,
173
- ...props,
174
- ...reactFlowProps,
175
- children: [
176
- /* @__PURE__ */ jsx(DiagramUI, {}, "DiagramUI"),
177
- children
178
- ]
179
- }
82
+ }), nodeTypes = useCustomCompareMemo(
83
+ () => {
84
+ return {
85
+ element: renderNodes?.element ?? BuiltinNodes.element,
86
+ deployment: renderNodes?.deployment ?? BuiltinNodes.deployment,
87
+ "compound-element": renderNodes?.compoundElement ?? BuiltinNodes["compound-element"],
88
+ "compound-deployment": renderNodes?.compoundDeployment ?? BuiltinNodes["compound-deployment"],
89
+ "view-group": renderNodes?.viewGroup ?? BuiltinNodes["view-group"]
90
+ };
91
+ },
92
+ [renderNodes],
93
+ shallowEqual
180
94
  );
181
- }, compareProps);
182
- LikeC4DiagramXYFlow.displayName = "LikeC4DiagramXYFlow";
95
+ useUpdateEffect(() => {
96
+ console.warn("renderNodes changed - this might degrade performance");
97
+ }, [nodeTypes]);
98
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
99
+ /* @__PURE__ */ jsx(
100
+ BaseXYFlow,
101
+ {
102
+ nodes,
103
+ edges,
104
+ className: cx(initialized ? "initialized" : "not-initialized"),
105
+ nodeTypes,
106
+ edgeTypes,
107
+ onNodesChange: useCallbackRef((changes) => {
108
+ diagram.send({ type: "xyflow.applyNodeChanges", changes });
109
+ }),
110
+ onEdgesChange: useCallbackRef((changes) => {
111
+ diagram.send({ type: "xyflow.applyEdgeChanges", changes });
112
+ }),
113
+ background: initialized ? background : "transparent",
114
+ fitView: false,
115
+ onNodeClick: useCallbackRef((e, node) => {
116
+ e.stopPropagation();
117
+ diagram.send({ type: "xyflow.nodeClick", node });
118
+ onNodeClick?.(diagram.findDiagramNode(node.id), e);
119
+ }),
120
+ onEdgeClick: useCallbackRef((e, edge) => {
121
+ e.stopPropagation();
122
+ diagram.send({ type: "xyflow.edgeClick", edge });
123
+ onEdgeClick?.(diagram.findDiagramEdge(edge.id), e);
124
+ }),
125
+ onPaneClick: useCallbackRef((e) => {
126
+ e.stopPropagation();
127
+ diagram.send({ type: "xyflow.paneClick" });
128
+ onCanvasClick?.(e);
129
+ }),
130
+ onDoubleClick: useCallbackRef((e) => {
131
+ e.stopPropagation();
132
+ e.preventDefault();
133
+ diagram.send({ type: "xyflow.paneDblClick" });
134
+ onCanvasDblClick?.(e);
135
+ }),
136
+ onNodeMouseEnter: useCallbackRef((_event, node) => {
137
+ _event.stopPropagation();
138
+ if (!node.data.hovered) {
139
+ diagram.send({ type: "xyflow.nodeMouseEnter", node });
140
+ }
141
+ }),
142
+ onNodeMouseLeave: useCallbackRef((_event, node) => {
143
+ _event.stopPropagation();
144
+ if (node.data.hovered) {
145
+ diagram.send({ type: "xyflow.nodeMouseLeave", node });
146
+ }
147
+ }),
148
+ onEdgeMouseEnter: useCallbackRef((_event, edge) => {
149
+ _event.stopPropagation();
150
+ if (!edge.data.hovered) {
151
+ diagram.send({ type: "xyflow.edgeMouseEnter", edge });
152
+ }
153
+ }),
154
+ onEdgeMouseLeave: useCallbackRef((_event, edge) => {
155
+ _event.stopPropagation();
156
+ if (edge.data.hovered) {
157
+ diagram.send({ type: "xyflow.edgeMouseLeave", edge });
158
+ }
159
+ }),
160
+ ...props.pannable && {
161
+ onMove
162
+ },
163
+ onMoveEnd,
164
+ onInit: useCallbackRef((instance) => {
165
+ diagram.send({ type: "xyflow.init", instance });
166
+ }),
167
+ onNodeContextMenu: useCallbackRef((event, node) => {
168
+ const diagramNode = nonNullable(
169
+ diagram.findDiagramNode(node.id),
170
+ `diagramNode ${node.id} not found`
171
+ );
172
+ onNodeContextMenu?.(diagramNode, event);
173
+ }),
174
+ onEdgeContextMenu: useCallbackRef((event, edge) => {
175
+ const diagramEdge = nonNullable(
176
+ diagram.findDiagramEdge(edge.id),
177
+ `diagramEdge ${edge.id} not found`
178
+ );
179
+ onEdgeContextMenu?.(diagramEdge, event);
180
+ }),
181
+ onPaneContextMenu: useCallbackRef((event) => {
182
+ onCanvasContextMenu?.(event);
183
+ }),
184
+ ...enableFitView && {
185
+ onViewportResize
186
+ },
187
+ nodesDraggable: notReadOnly && nodesDraggable,
188
+ nodesSelectable,
189
+ ...notReadOnly && nodesDraggable && layoutConstraints,
190
+ ...props,
191
+ ...reactFlowProps,
192
+ children
193
+ }
194
+ ),
195
+ /* @__PURE__ */ jsx(DiagramUI, {}, "DiagramUI")
196
+ ] });
197
+ }
183
198
 
184
199
  export { LikeC4DiagramXYFlow };
@@ -1,7 +1,7 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { Popover, PopoverTarget, PopoverDropdown, Stack, ScrollAreaAutosize, Text, CloseButton, Group, Button } from '@mantine/core';
3
3
  import { useDebouncedEffect } from '@react-hookz/web';
4
- import { r as reactExports } from '../../../_virtual/index.js';
4
+ import { useState } from 'react';
5
5
  import { isTruthy, isNonNull } from 'remeda';
6
6
  import { useDiagramContext, useDiagram } from '../../../hooks/useDiagram.js';
7
7
  import { edgeNoteText, edgeNoteCloseButton } from './NotePopover.css.js';
@@ -21,7 +21,7 @@ const NotePopover = ({ notes, children }) => {
21
21
  hasPrevious: s.xyedges.findIndex((e) => e.id === s.activeWalkthrough?.stepId) > 0
22
22
  }));
23
23
  const diagram = useDiagram();
24
- const [isOpened, setIsOpened] = reactExports.useState(false);
24
+ const [isOpened, setIsOpened] = useState(false);
25
25
  const portalProps = useMantinePortalProps();
26
26
  useDebouncedEffect(
27
27
  () => {
@@ -1,16 +1,17 @@
1
- import { EdgeId, NonEmptyArray, Point, Color, BBox, RelationshipLineType, RelationshipArrowType, ViewId } from '@likec4/core';
1
+ import { EdgeId, NonEmptyArray, Point, Color, RelationshipArrowType, RelationshipLineType, BBox, ViewId } from '@likec4/core';
2
2
  import { XYPosition } from '@xyflow/react';
3
- import { NamedExoticComponent, CSSProperties, ReactNode } from 'react';
3
+ import { FunctionComponent, CSSProperties, ReactNode } from 'react';
4
4
  import { Position } from '@xyflow/system';
5
- export declare const RelationshipEdge: NamedExoticComponent<{
5
+ import { EdgeData, Dimmed } from '../../../base/types.Base';
6
+ export declare const RelationshipEdge: FunctionComponent<{
6
7
  id: string;
7
8
  selected?: boolean;
8
9
  selectable?: boolean;
9
10
  deletable?: boolean;
10
11
  style?: CSSProperties;
12
+ animated?: boolean;
11
13
  source: string;
12
14
  target: string;
13
- animated?: boolean;
14
15
  sourceX: number;
15
16
  sourceY: number;
16
17
  targetX: number;
@@ -29,27 +30,23 @@ export declare const RelationshipEdge: NamedExoticComponent<{
29
30
  markerEnd?: string;
30
31
  pathOptions?: any;
31
32
  interactionWidth?: number;
32
- data: {
33
+ data: EdgeData & {
33
34
  hovered?: boolean;
34
35
  active?: boolean;
35
- dimmed?: import("../../../base").Base.Dimmed;
36
- } & {
36
+ dimmed?: Dimmed;
37
37
  id: EdgeId;
38
38
  label: string | null;
39
39
  points: NonEmptyArray<Point>;
40
- technology: string | undefined;
41
40
  color: Color | undefined;
42
- labelBBox: BBox | null | undefined;
43
- dir: "forward" | "back" | "both" | undefined;
44
- line: RelationshipLineType | undefined;
45
41
  head: RelationshipArrowType | undefined;
42
+ line: RelationshipLineType | undefined;
43
+ dir: "forward" | "back" | "both" | undefined;
44
+ technology: string | undefined;
46
45
  tail: RelationshipArrowType | undefined;
47
- navigateTo: ViewId<string> | undefined;
46
+ labelBBox: BBox | null | undefined;
47
+ navigateTo: ViewId<string> | null | undefined;
48
48
  notes: string | undefined;
49
49
  labelXY: XYPosition | null;
50
50
  controlPoints: XYPosition[] | undefined | null;
51
- hovered?: boolean;
52
- active?: boolean;
53
- dimmed?: import("../../../base").Base.Dimmed;
54
51
  };
55
52
  }>;
@@ -1,10 +1,10 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import { nonNullable } from '@likec4/core';
3
+ import { cx } from '@likec4/styles/css';
3
4
  import { useDebouncedEffect } from '@react-hookz/web';
4
5
  import { EdgeLabelRenderer } from '@xyflow/react';
5
- import clsx from 'clsx';
6
6
  import { line, curveCatmullRomOpen } from 'd3-shape';
7
- import { r as reactExports } from '../../../_virtual/index.js';
7
+ import { useState, useRef, useEffect } from 'react';
8
8
  import { isTruthy, first, last } from 'remeda';
9
9
  import { ZIndexes } from '../../../base/const.js';
10
10
  import { useEnabledFeatures } from '../../../context/DiagramFeatures.js';
@@ -28,7 +28,7 @@ const curve = line().curve(curveCatmullRomOpen).x((d) => d.x).y((d) => d.y);
28
28
  const selectActiveStepId = (s) => s.context.activeWalkthrough?.stepId ?? null;
29
29
  const RelationshipEdge = customEdge((props) => {
30
30
  const isPanning = useIsPanning();
31
- const [isControlPointDragging, setIsControlPointDragging] = reactExports.useState(false);
31
+ const [isControlPointDragging, setIsControlPointDragging] = useState(false);
32
32
  const xyflowStore = useXYStoreApi();
33
33
  const xyflow = useXYFlow();
34
34
  const diagram = useDiagram();
@@ -83,12 +83,12 @@ const RelationshipEdge = customEdge((props) => {
83
83
  edgePath = bezierPath(points);
84
84
  }
85
85
  let labelX = labelBBox?.x ?? 0, labelY = labelBBox?.y ?? 0;
86
- const [labelPos, setLabelPos] = reactExports.useState({
86
+ const [labelPos, setLabelPos] = useState({
87
87
  x: labelXY?.x ?? labelX,
88
88
  y: labelXY?.y ?? labelY
89
89
  });
90
- const svgPathRef = reactExports.useRef(null);
91
- reactExports.useEffect(() => {
90
+ const svgPathRef = useRef(null);
91
+ useEffect(() => {
92
92
  const path = svgPathRef.current;
93
93
  if (!path) return;
94
94
  const dompoint = path.getPointAtLength(path.getTotalLength() * 0.5);
@@ -158,6 +158,10 @@ const RelationshipEdge = customEdge((props) => {
158
158
  }
159
159
  setIsControlPointDragging(false);
160
160
  };
161
+ const onClick = (e2) => {
162
+ e2.stopPropagation();
163
+ e2.preventDefault();
164
+ };
161
165
  domNode.addEventListener("pointermove", onPointerMove, {
162
166
  capture: true
163
167
  });
@@ -165,6 +169,10 @@ const RelationshipEdge = customEdge((props) => {
165
169
  once: true,
166
170
  capture: true
167
171
  });
172
+ domNode.addEventListener("click", onClick, {
173
+ capture: true,
174
+ once: true
175
+ });
168
176
  };
169
177
  const onRmbControlPointerDown = (index, e, domNode) => {
170
178
  if (controlPoints.length <= 1) {
@@ -264,7 +272,7 @@ const RelationshipEdge = customEdge((props) => {
264
272
  }
265
273
  }
266
274
  return /* @__PURE__ */ jsxs(Fragment, { children: [
267
- /* @__PURE__ */ jsxs(EdgeContainer, { ...props, className: clsx(isControlPointDragging && controlDragging), children: [
275
+ /* @__PURE__ */ jsxs(EdgeContainer, { ...props, className: cx(isControlPointDragging && controlDragging), children: [
268
276
  /* @__PURE__ */ jsx(
269
277
  EdgePath,
270
278
  {
@@ -310,7 +318,7 @@ const RelationshipEdge = customEdge((props) => {
310
318
  "circle",
311
319
  {
312
320
  onPointerDown: (e) => onControlPointerDown(i, e),
313
- className: clsx("nodrag nopan", controlPoint),
321
+ className: cx("nodrag nopan", controlPoint),
314
322
  cx: Math.round(p.x),
315
323
  cy: Math.round(p.y),
316
324
  r: 3
@@ -1,9 +1,9 @@
1
1
  import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
2
- import { DiagramNode, nameFromFqn } from '@likec4/core';
2
+ import { nameFromFqn } from '@likec4/core';
3
3
  import { cx, css } from '@likec4/styles/css';
4
4
  import { Menu, MenuTarget, MenuDropdown, MenuLabel, MenuDivider, Box, ActionIcon, MenuItem, Stack, Group, Text, TooltipGroup, Space, Tooltip as Tooltip$1 } from '@mantine/core';
5
5
  import { IconInfoCircle, IconArrowRight, IconZoomScan, IconFileSymlink } from '@tabler/icons-react';
6
- import { r as reactExports } from '../../../_virtual/index.js';
6
+ import { memo, useCallback, Fragment as Fragment$1, forwardRef } from 'react';
7
7
  import { pipe, map, filter, isTruthy, partition } from 'remeda';
8
8
  import { Link } from '../../../components/Link.js';
9
9
  import { useDiagramContext, useDiagram } from '../../../hooks/useDiagram.js';
@@ -11,7 +11,7 @@ import { findDiagramNode, findDiagramEdge } from '../../../state/utils.js';
11
11
  import { menuDropdown, endpoint, title, menuItemRelationship } from './RelationshipsDropdownMenu.css.js';
12
12
  import { useLikeC4Model } from '../../../likec4model/useLikeC4Model.js';
13
13
  import { useMantinePortalProps } from '../../../hooks/useMantinePortalProps.js';
14
- import { useEnabledFeature, IfEnabled } from '../../../context/DiagramFeatures.js';
14
+ import { useEnabledFeatures, IfEnabled } from '../../../context/DiagramFeatures.js';
15
15
  import { useDiagramEventHandlers } from '../../../context/DiagramEventHandlers.js';
16
16
 
17
17
  const stopPropagation = (e) => e.stopPropagation();
@@ -25,22 +25,26 @@ const Tooltip = Tooltip$1.withProps({
25
25
  offset: 8,
26
26
  withinPortal: false
27
27
  });
28
- const RelationshipsDropdownMenu = reactExports.memo(({
28
+ const RelationshipsDropdownMenu = memo(({
29
29
  edgeId,
30
30
  source,
31
31
  target,
32
32
  disabled = false,
33
33
  children
34
34
  }) => {
35
- const { diagramEdge, sourceNode, targetNode } = useDiagramContext((ctx) => ({
36
- diagramEdge: findDiagramEdge(ctx, edgeId),
37
- sourceNode: findDiagramNode(ctx, source),
38
- targetNode: findDiagramNode(ctx, target)
39
- }));
40
- const likec4model = useLikeC4Model(true);
35
+ const { diagramEdge, sourceNode, targetNode } = useDiagramContext(
36
+ (ctx) => ({
37
+ diagramEdge: findDiagramEdge(ctx, edgeId),
38
+ sourceNode: findDiagramNode(ctx, source),
39
+ targetNode: findDiagramNode(ctx, target)
40
+ }),
41
+ void 0,
42
+ [edgeId, source, target]
43
+ );
44
+ const likec4model = useLikeC4Model();
41
45
  const diagram = useDiagram();
42
46
  const portalProps = useMantinePortalProps();
43
- const onClickOpenOverlay = reactExports.useCallback((e) => {
47
+ const onClickOpenOverlay = useCallback((e) => {
44
48
  e.stopPropagation();
45
49
  diagram.openRelationshipDetails(edgeId);
46
50
  }, [edgeId]);
@@ -63,7 +67,7 @@ const RelationshipsDropdownMenu = reactExports.memo(({
63
67
  filter(isTruthy),
64
68
  partition((r) => r.source.id === sourceNode.id && r.target.id === targetNode.id)
65
69
  );
66
- const renderRelationship = (relationship, index) => /* @__PURE__ */ jsxs(reactExports.Fragment, { children: [
70
+ const renderRelationship = (relationship, index) => /* @__PURE__ */ jsxs(Fragment$1, { children: [
67
71
  index > 0 && /* @__PURE__ */ jsx(MenuDivider, { opacity: 0.65 }),
68
72
  /* @__PURE__ */ jsx(
69
73
  MenuItem,
@@ -130,7 +134,7 @@ const RelationshipsDropdownMenu = reactExports.memo(({
130
134
  }
131
135
  );
132
136
  });
133
- const Relationship = reactExports.forwardRef(({
137
+ const Relationship = forwardRef(({
134
138
  className,
135
139
  relationship: r,
136
140
  edge,
@@ -139,7 +143,7 @@ const Relationship = reactExports.forwardRef(({
139
143
  ...props
140
144
  }, ref) => {
141
145
  const diagram = useDiagram();
142
- const { enableNavigateTo } = useEnabledFeature("NavigateTo");
146
+ const { enableNavigateTo } = useEnabledFeatures();
143
147
  const { onOpenSource } = useDiagramEventHandlers();
144
148
  const viewId = diagram.currentView.id;
145
149
  const sourceId = getShortId(r, r.source.id, sourceNode);
@@ -201,7 +205,7 @@ const Relationship = reactExports.forwardRef(({
201
205
  ] });
202
206
  });
203
207
  function getShortId(r, actualEndpointId, diagramNode) {
204
- const diagramNodeId = r.isDeploymentRelation() ? diagramNode.id : DiagramNode.modelRef(diagramNode) || "";
208
+ const diagramNodeId = r.isDeploymentRelation() ? diagramNode.id : diagramNode.modelRef || "";
205
209
  return nameFromFqn(diagramNodeId) + actualEndpointId.slice(diagramNodeId.length);
206
210
  }
207
211
 
@@ -1,25 +1,26 @@
1
1
  import { Types } from '../types';
2
- import { NamedExoticComponent, CSSProperties, ReactNode } from 'react';
2
+ import { MemoExoticComponent, FunctionComponent, CSSProperties, ReactNode } from 'react';
3
3
  import { NodeProps } from '../../base';
4
4
  import { Position, XYPosition } from '@xyflow/system';
5
- import { EdgeId, NonEmptyArray, Point, Color, BBox, RelationshipLineType, RelationshipArrowType, ViewId } from '@likec4/core';
6
- export declare const nodeTypes: {
7
- element: NamedExoticComponent<NodeProps<Types.ElementNodeData>>;
8
- deployment: NamedExoticComponent<NodeProps<Types.DeploymentElementNodeData>>;
9
- 'compound-element': NamedExoticComponent<NodeProps<Types.CompoundElementNodeData>>;
10
- 'compound-deployment': NamedExoticComponent<NodeProps<Types.CompoundDeploymentNodeData>>;
11
- 'view-group': NamedExoticComponent<NodeProps<Types.ViewGroupNodeData>>;
5
+ import { EdgeData, Dimmed } from '../../base/types.Base';
6
+ import { EdgeId, NonEmptyArray, Point, Color, RelationshipArrowType, RelationshipLineType, BBox, ViewId } from '@likec4/core';
7
+ export declare const BuiltinNodes: {
8
+ element: MemoExoticComponent<(props: NodeProps<Types.ElementNodeData, "element">) => import("react/jsx-runtime").JSX.Element>;
9
+ deployment: MemoExoticComponent<(props: NodeProps<Types.DeploymentElementNodeData, "deployment">) => import("react/jsx-runtime").JSX.Element>;
10
+ 'compound-element': MemoExoticComponent<(props: NodeProps<Types.CompoundElementNodeData, "compound-element">) => import("react/jsx-runtime").JSX.Element>;
11
+ 'compound-deployment': MemoExoticComponent<(props: NodeProps<Types.CompoundDeploymentNodeData, "compound-deployment">) => import("react/jsx-runtime").JSX.Element>;
12
+ 'view-group': MemoExoticComponent<(props: NodeProps<Types.ViewGroupNodeData, "view-group">) => import("react/jsx-runtime").JSX.Element>;
12
13
  };
13
14
  export declare const edgeTypes: {
14
- relationship: NamedExoticComponent<{
15
+ relationship: FunctionComponent<{
15
16
  id: string;
16
17
  selected?: boolean;
17
18
  selectable?: boolean;
18
19
  deletable?: boolean;
19
20
  style?: CSSProperties;
21
+ animated?: boolean;
20
22
  source: string;
21
23
  target: string;
22
- animated?: boolean;
23
24
  sourceX: number;
24
25
  sourceY: number;
25
26
  targetX: number;
@@ -38,28 +39,24 @@ export declare const edgeTypes: {
38
39
  markerEnd?: string;
39
40
  pathOptions?: any;
40
41
  interactionWidth?: number;
41
- data: {
42
+ data: EdgeData & {
42
43
  hovered?: boolean;
43
44
  active?: boolean;
44
- dimmed?: import("../../base").Base.Dimmed;
45
- } & {
45
+ dimmed?: Dimmed;
46
46
  id: EdgeId;
47
47
  label: string | null;
48
48
  points: NonEmptyArray<Point>;
49
- technology: string | undefined;
50
49
  color: Color | undefined;
51
- labelBBox: BBox | null | undefined;
52
- dir: "forward" | "back" | "both" | undefined;
53
- line: RelationshipLineType | undefined;
54
50
  head: RelationshipArrowType | undefined;
51
+ line: RelationshipLineType | undefined;
52
+ dir: "forward" | "back" | "both" | undefined;
53
+ technology: string | undefined;
55
54
  tail: RelationshipArrowType | undefined;
56
- navigateTo: ViewId<string> | undefined;
55
+ labelBBox: BBox | null | undefined;
56
+ navigateTo: ViewId<string> | null | undefined;
57
57
  notes: string | undefined;
58
58
  labelXY: XYPosition | null;
59
59
  controlPoints: XYPosition[] | undefined | null;
60
- hovered?: boolean;
61
- active?: boolean;
62
- dimmed?: import("../../base").Base.Dimmed;
63
60
  };
64
61
  }>;
65
62
  };
@@ -1,7 +1,7 @@
1
1
  import { RelationshipEdge } from './edges/RelationshipEdge.js';
2
- import { ViewGroupNode, CompoundDeploymentNode, CompoundElementNode, DeploymentNode, ElementNode } from './nodes/nodeTypes.js';
2
+ import { ViewGroupNode, CompoundDeploymentNode, CompoundElementNode, DeploymentNode, ElementNode } from './nodes/nodes.js';
3
3
 
4
- const nodeTypes = {
4
+ const BuiltinNodes = {
5
5
  element: ElementNode,
6
6
  deployment: DeploymentNode,
7
7
  "compound-element": CompoundElementNode,
@@ -12,4 +12,4 @@ const edgeTypes = {
12
12
  relationship: RelationshipEdge
13
13
  };
14
14
 
15
- export { edgeTypes, nodeTypes };
15
+ export { BuiltinNodes, edgeTypes };
@@ -1,10 +1,10 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
+ import { useEnabledFeatures } from '../../../context/DiagramFeatures.js';
2
3
  import { useDiagram } from '../../../hooks/useDiagram.js';
3
- import { useEnabledFeature } from '../../../context/DiagramFeatures.js';
4
4
  import { CompoundActionButton } from '../../../base/primitives/compound/CompoundActionButton.js';
5
5
 
6
6
  const CompoundActions = (props) => {
7
- const { enableNavigateTo } = useEnabledFeature("NavigateTo");
7
+ const { enableNavigateTo } = useEnabledFeatures();
8
8
  const diagram = useDiagram();
9
9
  const { navigateTo } = props.data;
10
10
  if (navigateTo && enableNavigateTo) {
@@ -1,7 +1,30 @@
1
+ import { ElementActionButtons } from '../../../base/primitives';
1
2
  import { NodeProps } from '../../../base/types';
2
3
  import { Types } from '../../types';
3
- type ElementActionsProps = NodeProps<Types.ElementNodeData>;
4
- export declare const ElementActions: (props: ElementActionsProps) => import("react/jsx-runtime").JSX.Element;
5
- type DeploymentElementActionsProps = NodeProps<Types.DeploymentElementNodeData>;
6
- export declare const DeploymentElementActions: (props: DeploymentElementActionsProps) => import("react/jsx-runtime").JSX.Element;
4
+ type WithExtraButtons = {
5
+ /**
6
+ * Add extra action buttons
7
+ * @example
8
+ * ```tsx
9
+ * <ElementActions
10
+ * extraButtons={[
11
+ * {
12
+ * key: 'extra',
13
+ * icon: <IconZoomScan />,
14
+ * onClick: (e) => {
15
+ * e.stopPropagation()
16
+ * console.log('extra action clicked')
17
+ * },
18
+ * },
19
+ * },
20
+ * ]}
21
+ * />
22
+ * ```
23
+ */
24
+ extraButtons?: ElementActionButtons.Item[];
25
+ };
26
+ export type ElementActionsProps = NodeProps<Types.ElementNodeData> & WithExtraButtons;
27
+ export declare const ElementActions: ({ extraButtons, ...props }: ElementActionsProps) => import("react/jsx-runtime").JSX.Element;
28
+ export type DeploymentElementActionsProps = NodeProps<Types.DeploymentElementNodeData> & WithExtraButtons;
29
+ export declare const DeploymentElementActions: ({ extraButtons, ...props }: DeploymentElementActionsProps) => import("react/jsx-runtime").JSX.Element;
7
30
  export {};