@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
@@ -6,9 +6,10 @@ import {
6
6
  nonexhaustive,
7
7
  } from '@likec4/core'
8
8
  import { useMantineStyleNonce } from '@mantine/core'
9
- import { deepEqual } from 'fast-equals'
10
- import { memo } from 'react'
11
- import { entries } from 'remeda'
9
+ import { memo, useState } from 'react'
10
+ import { entries, isEmpty } from 'remeda'
11
+ import { useUpdateEffect } from './hooks'
12
+ import { useLikeC4Specification } from './likec4model/useLikeC4Model'
12
13
 
13
14
  interface LikeC4CustomColorsProperties {
14
15
  customColors: CustomColorDefinitions
@@ -54,17 +55,31 @@ function toStyle(name: String, colors: ThemeColorValues): String {
54
55
  `
55
56
  }
56
57
 
57
- export const LikeC4CustomColors = memo<LikeC4CustomColorsProperties>(({ customColors }) => {
58
- const styles = entries(customColors)
58
+ function generateCustomColorStyles(customColors: CustomColorDefinitions) {
59
+ return entries(customColors)
59
60
  .map(([name, color]) => toStyle(name, color))
60
61
  .join('\n')
62
+ .trim()
63
+ }
64
+
65
+ export const LikeC4CustomColors = memo(() => {
66
+ const customColors = useLikeC4Specification().customColors ?? {}
67
+ const [styles, setStyles] = useState(() => generateCustomColorStyles(customColors))
68
+
69
+ useUpdateEffect(() => {
70
+ setStyles(generateCustomColorStyles(customColors))
71
+ }, [customColors])
61
72
 
62
73
  const nonce = useMantineStyleNonce()?.()
63
74
 
75
+ if (isEmpty(customColors)) {
76
+ return null
77
+ }
78
+
64
79
  return (
65
80
  <>
66
81
  <style type="text/css" dangerouslySetInnerHTML={{ __html: styles }} nonce={nonce} />
67
82
  </>
68
83
  )
69
- }, deepEqual)
84
+ })
70
85
  LikeC4CustomColors.displayName = 'LikeC4CustomColors'
@@ -1,22 +1,21 @@
1
1
  import type {
2
+ Any,
2
3
  DiagramEdge,
3
4
  DiagramNode,
4
- DiagramView,
5
- Fqn,
6
- RelationId,
5
+ LayoutedView,
7
6
  ViewChange,
8
- ViewId,
9
7
  WhereOperator,
10
- } from '@likec4/core'
8
+ } from '@likec4/core/types'
9
+ import type * as aux from '@likec4/core/types/aux'
11
10
  import type { ReactFlowProps as XYFlowProps } from '@xyflow/react'
12
11
  import type { MouseEvent as ReactMouseEvent, ReactNode } from 'react'
12
+ import type { SetRequired } from 'type-fest'
13
13
  import type { ControlsCustomLayout } from './context/ControlsCustomLayout'
14
+ import type { CustomNodes } from './custom/customNodes'
14
15
 
15
- export type { WhereOperator }
16
+ export type { CustomNodes, WhereOperator }
16
17
 
17
- export type DiagramNodeWithNavigate<ID = ViewId> = Omit<DiagramNode, 'navigateTo'> & {
18
- navigateTo: ID
19
- }
18
+ export type DiagramNodeWithNavigate<A extends Any> = SetRequired<DiagramNode<A>, 'navigateTo'>
20
19
 
21
20
  type ElementIconRendererProps = {
22
21
  node: {
@@ -24,24 +23,25 @@ type ElementIconRendererProps = {
24
23
  title: string
25
24
  icon?: string | null | undefined
26
25
  }
26
+ className?: string
27
27
  }
28
28
 
29
29
  export type ElementIconRenderer = (props: ElementIconRendererProps) => ReactNode
30
30
 
31
- export type OnNavigateTo<ID = ViewId> = (
32
- to: ID,
31
+ export type OnNavigateTo<A extends Any> = (
32
+ to: aux.ViewId<A>,
33
33
  // These fields present if navigateTo triggered by a node click
34
34
  event?: ReactMouseEvent,
35
- element?: DiagramNodeWithNavigate<ID>,
35
+ element?: DiagramNodeWithNavigate<A>,
36
36
  ) => void
37
37
 
38
- export type OnNodeClick = (
39
- node: DiagramNode,
38
+ export type OnNodeClick<A extends Any> = (
39
+ node: DiagramNode<A>,
40
40
  event: ReactMouseEvent,
41
41
  ) => void
42
42
 
43
- export type OnEdgeClick = (
44
- edge: DiagramEdge,
43
+ export type OnEdgeClick<A extends Any> = (
44
+ edge: DiagramEdge<A>,
45
45
  event: ReactMouseEvent,
46
46
  ) => void
47
47
 
@@ -86,8 +86,8 @@ export type OverrideReactFlowProps = Pick<
86
86
  export type PaddingUnit = 'px' | '%'
87
87
  export type PaddingWithUnit = `${number}${PaddingUnit}` | number
88
88
 
89
- export interface LikeC4DiagramProperties {
90
- view: DiagramView
89
+ export interface LikeC4DiagramProperties<A extends aux.Any> {
90
+ view: LayoutedView<A>
91
91
 
92
92
  className?: string | undefined
93
93
 
@@ -198,6 +198,12 @@ export interface LikeC4DiagramProperties {
198
198
  */
199
199
  enableDynamicViewWalkthrough?: boolean | undefined
200
200
 
201
+ /**
202
+ * Display element tags in the bottom left corner
203
+ * @default true
204
+ */
205
+ enableElementTags?: boolean | undefined
206
+
201
207
  /**
202
208
  * Experimental feature to enable edge editing
203
209
  * @default false
@@ -222,10 +228,15 @@ export interface LikeC4DiagramProperties {
222
228
  */
223
229
  renderControls?: ControlsCustomLayout | undefined
224
230
 
231
+ /**
232
+ * Override node renderers
233
+ */
234
+ renderNodes?: CustomNodes | undefined
235
+
225
236
  /**
226
237
  * Dynamic filter, applies both to nodes and edges
227
238
  */
228
- where?: WhereOperator<string, string> | undefined
239
+ where?: WhereOperator<A> | undefined
229
240
 
230
241
  /**
231
242
  * Override ReactFlow props
@@ -233,35 +244,35 @@ export interface LikeC4DiagramProperties {
233
244
  reactFlowProps?: OverrideReactFlowProps | undefined
234
245
  }
235
246
 
236
- export type OpenSourceParams =
247
+ export type OpenSourceParams<A extends aux.Any = aux.Any> =
237
248
  | {
238
- element: Fqn
249
+ element: aux.Fqn<A>
239
250
  property?: string
240
251
  }
241
252
  | {
242
- relation: RelationId
253
+ relation: aux.RelationId
243
254
  }
244
255
  | {
245
- deployment: Fqn
256
+ deployment: aux.DeploymentFqn<A>
246
257
  property?: string
247
258
  }
248
259
  | {
249
- view: ViewId
260
+ view: aux.StrictViewId<A>
250
261
  }
251
262
 
252
- export interface LikeC4DiagramEventHandlers {
263
+ export interface LikeC4DiagramEventHandlers<A extends aux.Any> {
253
264
  onChange?: OnChange | null | undefined
254
- onNavigateTo?: OnNavigateTo | null | undefined
255
- onNodeClick?: OnNodeClick | null | undefined
256
- onNodeContextMenu?: OnNodeClick | null | undefined
265
+ onNavigateTo?: OnNavigateTo<A> | null | undefined
266
+ onNodeClick?: OnNodeClick<A> | null | undefined
267
+ onNodeContextMenu?: OnNodeClick<A> | null | undefined
257
268
  onCanvasContextMenu?: OnCanvasClick | null | undefined
258
- onEdgeClick?: OnEdgeClick | null | undefined
259
- onEdgeContextMenu?: OnEdgeClick | null | undefined
269
+ onEdgeClick?: OnEdgeClick<A> | null | undefined
270
+ onEdgeContextMenu?: OnEdgeClick<A> | null | undefined
260
271
  onCanvasClick?: OnCanvasClick | null | undefined
261
272
  onCanvasDblClick?: OnCanvasClick | null | undefined
262
273
 
263
274
  // if set, will render a burger menu icon in the top left corner
264
275
  onBurgerMenuClick?: null | undefined | (() => void)
265
276
 
266
- onOpenSource?: null | undefined | ((params: OpenSourceParams) => void)
277
+ onOpenSource?: null | undefined | ((params: OpenSourceParams<A>) => void)
267
278
  }
@@ -1,6 +1,6 @@
1
+ import type { Any } from '@likec4/core/types'
1
2
  import { ReactFlowProvider as XYFlowProvider } from '@xyflow/react'
2
3
  import { type PropsWithChildren, useRef } from 'react'
3
- import { isEmpty } from 'remeda'
4
4
  import {
5
5
  DiagramEventHandlers,
6
6
  DiagramFeatures,
@@ -15,11 +15,14 @@ import { LikeC4CustomColors } from './LikeC4CustomColors'
15
15
  import { type LikeC4DiagramEventHandlers, type LikeC4DiagramProperties } from './LikeC4Diagram.props'
16
16
  import { LikeC4DiagramXYFlow } from './likec4diagram/DiagramXYFlow'
17
17
  import type { Types } from './likec4diagram/types'
18
- import { useLikeC4Model } from './likec4model'
19
18
  import { DiagramActorProvider } from './state/DiagramActorProvider'
20
19
 
21
- export type LikeC4DiagramProps = PropsWithChildren<LikeC4DiagramProperties & LikeC4DiagramEventHandlers>
22
- export function LikeC4Diagram({
20
+ export type LikeC4DiagramProps<A extends Any = Any> = PropsWithChildren<
21
+ & LikeC4DiagramProperties<A>
22
+ & LikeC4DiagramEventHandlers<A>
23
+ >
24
+
25
+ export function LikeC4Diagram<A extends Any = Any>({
23
26
  onCanvasClick,
24
27
  onCanvasContextMenu,
25
28
  onCanvasDblClick,
@@ -39,6 +42,7 @@ export function LikeC4Diagram({
39
42
  pannable = true,
40
43
  zoomable = true,
41
44
  background = 'dots',
45
+ enableElementTags = true,
42
46
  enableFocusMode = false,
43
47
  enableElementDetails = false,
44
48
  enableRelationshipDetails = enableElementDetails,
@@ -59,9 +63,9 @@ export function LikeC4Diagram({
59
63
  renderControls,
60
64
  where,
61
65
  reactFlowProps = {},
66
+ renderNodes,
62
67
  children,
63
- }: LikeC4DiagramProps) {
64
- const hasLikec4model = !!useLikeC4Model()
68
+ }: LikeC4DiagramProps<A>) {
65
69
  const initialRef = useRef<{
66
70
  defaultNodes: Types.Node[]
67
71
  defaultEdges: Types.Edge[]
@@ -69,8 +73,6 @@ export function LikeC4Diagram({
69
73
  initialHeight: number
70
74
  }>(null)
71
75
 
72
- const isDynamicView = view.__ === 'dynamic'
73
-
74
76
  if (initialRef.current == null) {
75
77
  initialRef.current = {
76
78
  defaultEdges: [],
@@ -103,13 +105,13 @@ export function LikeC4Diagram({
103
105
  enableRelationshipBrowser,
104
106
  enableSearch,
105
107
  enableNavigationButtons: showNavigationButtons && !!onNavigateTo,
106
- enableDynamicViewWalkthrough: isDynamicView && enableDynamicViewWalkthrough,
108
+ enableDynamicViewWalkthrough: view._type === 'dynamic' && enableDynamicViewWalkthrough,
107
109
  enableEdgeEditing: experimentalEdgeEditing,
108
110
  enableNotations: showNotations,
109
111
  enableVscode: !!onOpenSource,
110
112
  enableControls: controls,
111
113
  enableViewTitle: showDiagramTitle,
112
- enableLikeC4Model: hasLikec4model,
114
+ enableElementTags,
113
115
  }}
114
116
  >
115
117
  <DiagramEventHandlers
@@ -128,27 +130,26 @@ export function LikeC4Diagram({
128
130
  }}>
129
131
  <ReduceGraphicsContext reduceGraphics={isReducedGraphicsMode}>
130
132
  <RootContainer className={className} reduceGraphics={isReducedGraphicsMode}>
131
- {!isEmpty(view.customColorDefinitions) && (
132
- <LikeC4CustomColors customColors={view.customColorDefinitions} />
133
- )}
133
+ <LikeC4CustomColors />
134
134
  <XYFlowProvider
135
135
  fitView={fitView}
136
136
  {...initialRef.current}
137
137
  >
138
138
  <DiagramActorProvider
139
- input={{
140
- view,
141
- pannable,
142
- zoomable,
143
- nodesSelectable,
144
- fitViewPadding,
145
- }}>
139
+ view={view}
140
+ zoomable={zoomable}
141
+ pannable={pannable}
142
+ fitViewPadding={fitViewPadding}
143
+ nodesSelectable={nodesSelectable}
144
+ where={where ?? null}
145
+ >
146
146
  <ControlsCustomLayoutProvider value={renderControls ?? null}>
147
147
  <LikeC4DiagramXYFlow
148
148
  nodesDraggable={nodesDraggable}
149
149
  nodesSelectable={nodesSelectable}
150
150
  background={background}
151
151
  reactFlowProps={reactFlowProps}
152
+ renderNodes={renderNodes}
152
153
  >
153
154
  {children}
154
155
  </LikeC4DiagramXYFlow>
@@ -1,18 +1,19 @@
1
- import type { LikeC4Model } from '@likec4/core'
1
+ import type { LikeC4Model } from '@likec4/core/model'
2
+ import type { Any, Unknown } from '@likec4/core/types'
2
3
  import { type PropsWithChildren } from 'react'
3
4
  import { LikeC4ModelContext } from './likec4model/LikeC4ModelContext'
4
5
 
5
- export type LikeC4ModelProviderProps = PropsWithChildren<{
6
- likec4model: LikeC4Model
6
+ export type LikeC4ModelProviderProps<A extends Any> = PropsWithChildren<{
7
+ likec4model: LikeC4Model<A>
7
8
  }>
8
9
 
9
10
  /**
10
11
  * Ensures LikeC4Model context
11
12
  */
12
- export function LikeC4ModelProvider({
13
+ export function LikeC4ModelProvider<A extends Any = Unknown>({
13
14
  children,
14
- likec4model
15
- }: LikeC4ModelProviderProps) {
15
+ likec4model,
16
+ }: LikeC4ModelProviderProps<A>) {
16
17
  return (
17
18
  <LikeC4ModelContext.Provider value={likec4model}>
18
19
  {children}
@@ -1,8 +1,9 @@
1
+ import type * as aux from '@likec4/core/types/aux'
1
2
  import { LikeC4Diagram } from './LikeC4Diagram'
2
3
  import type { LikeC4DiagramProperties } from './LikeC4Diagram.props'
3
4
 
4
- export type StaticLikeC4DiagramProps = Pick<
5
- LikeC4DiagramProperties,
5
+ export type StaticLikeC4DiagramProps<A extends aux.Any> = Pick<
6
+ LikeC4DiagramProperties<A>,
6
7
  | 'view'
7
8
  | 'className'
8
9
  | 'fitView'
@@ -11,23 +12,24 @@ export type StaticLikeC4DiagramProps = Pick<
11
12
  | 'enableElementDetails'
12
13
  | 'enableRelationshipDetails'
13
14
  | 'enableRelationshipBrowser'
15
+ | 'enableElementTags'
14
16
  | 'reduceGraphics'
15
17
  | 'initialWidth'
16
18
  | 'initialHeight'
17
19
  | 'renderIcon'
20
+ | 'renderNodes'
18
21
  | 'where'
19
22
  >
20
23
 
21
- export function StaticLikeC4Diagram({
24
+ export function StaticLikeC4Diagram<A extends aux.Any = aux.UnknownLayouted>({
22
25
  view,
23
26
  fitView = true,
24
27
  fitViewPadding = '8px',
25
- enableElementDetails = false,
26
28
  enableRelationshipDetails = false,
27
29
  enableRelationshipBrowser = enableRelationshipDetails,
28
30
  background = 'transparent',
29
31
  ...rest
30
- }: StaticLikeC4DiagramProps) {
32
+ }: StaticLikeC4DiagramProps<A>) {
31
33
  return (
32
34
  <LikeC4Diagram
33
35
  view={view}
@@ -40,7 +42,7 @@ export function StaticLikeC4Diagram({
40
42
  background={background}
41
43
  showDiagramTitle={false}
42
44
  showNotations={false}
43
- enableElementDetails={enableElementDetails}
45
+ enableElementDetails={false}
44
46
  enableRelationshipDetails={enableRelationshipDetails}
45
47
  enableRelationshipBrowser={enableRelationshipBrowser}
46
48
  enableDynamicViewWalkthrough={false}
@@ -50,6 +52,7 @@ export function StaticLikeC4Diagram({
50
52
  enableSearch={false}
51
53
  nodesSelectable={false}
52
54
  nodesDraggable={false}
55
+ enableElementTags={false}
53
56
  {...rest}
54
57
  />
55
58
  )
@@ -1,14 +1,10 @@
1
1
  import { nonexhaustive } from '@likec4/core'
2
2
  import { type BackgroundProps, Background as XYFlowBackground, BackgroundVariant } from '@xyflow/react'
3
- import type { OverrideProperties } from 'type-fest'
4
3
 
5
4
  export type XYBackgroundVariant = 'dots' | 'lines' | 'cross'
6
5
  export type XYBackground =
7
6
  | XYBackgroundVariant
8
7
  | BackgroundProps
9
- // | OverrideProperties<BackgroundProps, {
10
- // variant: XYBackgroundVariant
11
- // }>
12
8
 
13
9
  export type XYBackgroundProps = {
14
10
  background: XYBackground
package/src/base/const.ts CHANGED
@@ -6,4 +6,4 @@ export const ZIndexes = {
6
6
  } as const
7
7
 
8
8
  export const MinZoom = 0.05
9
- export const MaxZoom = 2
9
+ export const MaxZoom = 3
package/src/base/index.ts CHANGED
@@ -1,10 +1,11 @@
1
1
  export { BaseXYFlow, type BaseXYFlowProps } from './BaseXYFlow'
2
2
 
3
3
  export {
4
- Base,
5
4
  type EdgeProps,
6
5
  type NodeProps,
7
6
  type NonOptional,
8
7
  type ReactFlowEdge,
9
8
  type ReactFlowNode,
10
9
  } from './types'
10
+
11
+ export * as Base from './types.Base'
@@ -1,17 +1,21 @@
1
1
  import { css, cx } from '@likec4/styles/css'
2
+ import { Box } from '@likec4/styles/jsx'
2
3
  import { actionBtn } from '@likec4/styles/recipes'
3
- import { ActionIcon, Box } from '@mantine/core'
4
+ import { ActionIcon } from '@mantine/core'
4
5
  import { useDebouncedValue } from '@mantine/hooks'
5
6
  import { IconZoomScan } from '@tabler/icons-react'
6
7
  import * as m from 'motion/react-m'
8
+ import type { Simplify } from 'type-fest'
7
9
  import { stopPropagation } from '../../../utils/xyflow'
8
10
  import type { NodeProps } from '../../types'
9
11
  import { compoundActionBtn } from './actionbtns.css'
10
12
 
11
- type CompoundActionButtonProps = NodeProps & {
12
- icon?: React.ReactNode
13
- onClick: (e: React.MouseEvent) => void
14
- }
13
+ type CompoundActionButtonProps = Simplify<
14
+ NodeProps<{}> & {
15
+ icon?: React.ReactNode
16
+ onClick: (e: React.MouseEvent) => void
17
+ }
18
+ >
15
19
 
16
20
  export function CompoundActionButton({
17
21
  data: {
@@ -1,17 +1,21 @@
1
1
  import { css, cx } from '@likec4/styles/css'
2
+ import { Box } from '@likec4/styles/jsx'
2
3
  import { actionBtn } from '@likec4/styles/recipes'
3
- import { ActionIcon, Box } from '@mantine/core'
4
+ import { ActionIcon } from '@mantine/core'
4
5
  import { useDebouncedValue } from '@mantine/hooks'
5
6
  import { IconId } from '@tabler/icons-react'
6
7
  import * as m from 'motion/react-m'
8
+ import type { Simplify } from 'type-fest'
7
9
  import { stopPropagation } from '../../../utils/xyflow'
8
10
  import type { NodeProps } from '../../types'
9
11
  import { compoundActionBtn } from './actionbtns.css'
10
12
 
11
- type CompoundDetailsButtonProps = NodeProps & {
12
- icon?: React.ReactNode
13
- onClick: (e: React.MouseEvent) => void
14
- }
13
+ type CompoundDetailsButtonProps = Simplify<
14
+ NodeProps<{}> & {
15
+ icon?: React.ReactNode
16
+ onClick: (e: React.MouseEvent) => void
17
+ }
18
+ >
15
19
 
16
20
  export function CompoundDetailsButton({
17
21
  data: {
@@ -1,4 +1,4 @@
1
- import type { DiagramNode } from '@likec4/core'
1
+ import type { Color, ElementStyle } from '@likec4/core/types'
2
2
  import { css, cx } from '@likec4/styles/css'
3
3
  import { type HTMLMotionProps, m } from 'motion/react'
4
4
  import { type PropsWithChildren } from 'react'
@@ -7,12 +7,11 @@ import { useIsReducedGraphics } from '../../../hooks/useReducedGraphics'
7
7
  import type { NodeProps } from '../../types'
8
8
  import * as styles from './CompoundNodeContainer.css'
9
9
 
10
- type RequiredData = Pick<
11
- DiagramNode,
12
- | 'color'
13
- | 'depth'
14
- | 'style'
15
- >
10
+ export type RequiredData = {
11
+ color: Color
12
+ depth: number
13
+ style: ElementStyle
14
+ }
16
15
 
17
16
  type CompoundNodeContainerProps =
18
17
  & Omit<HTMLMotionProps<'div'>, 'children'>
@@ -29,6 +28,7 @@ export function CompoundNodeContainer({
29
28
  ...data
30
29
  },
31
30
  },
31
+ className,
32
32
  children,
33
33
  style,
34
34
  ...rest
@@ -67,6 +67,7 @@ export function CompoundNodeContainer({
67
67
  }),
68
68
  classes.root,
69
69
  'likec4-compound-node',
70
+ className,
70
71
  )}
71
72
  initial={false}
72
73
  data-likec4-hovered={isHovered}
@@ -1,6 +1,7 @@
1
- import type { DiagramNode } from '@likec4/core'
1
+ import type { DiagramNode } from '@likec4/core/types'
2
2
  import { css, cx } from '@likec4/styles/css'
3
- import { Box, Text } from '@mantine/core'
3
+ import { Box } from '@likec4/styles/jsx'
4
+ import { Text } from '@mantine/core'
4
5
  import { IconRenderer } from '../../../context'
5
6
  import type { NodeProps } from '../../types'
6
7
 
@@ -29,6 +29,6 @@ export const edgePropsEqual = <P extends Record<string, unknown> = Base.EdgeData
29
29
 
30
30
  export function customEdge<P extends Record<string, unknown> = Base.NodeData>(
31
31
  Edge: FunctionComponent<EdgeProps<P>>,
32
- ) {
32
+ ): FunctionComponent<EdgeProps<P>> {
33
33
  return memo(Edge, edgePropsEqual)
34
34
  }
@@ -1,6 +1,7 @@
1
1
  import { deepEqual as eq } from 'fast-equals'
2
2
  import { type FunctionComponent, memo } from 'react'
3
3
  import type { Base, NodeProps } from '../types'
4
+ import { DefaultHandles } from './NodeHandles'
4
5
 
5
6
  export const nodePropsEqual = <P extends Record<string, unknown> = Base.NodeData>(
6
7
  prev: NodeProps<P>,
@@ -18,8 +19,15 @@ export const nodePropsEqual = <P extends Record<string, unknown> = Base.NodeData
18
19
  && eq(prev.data, next.data)
19
20
  )
20
21
 
21
- export function customNode<P extends Record<string, unknown> = Base.NodeData>(
22
- Node: FunctionComponent<NodeProps<P>>,
22
+ export function customNode<P extends Record<string, unknown> = {}, NodeType extends string = string>(
23
+ Node: FunctionComponent<NodeProps<P, NodeType>>,
23
24
  ) {
24
- return memo(Node, nodePropsEqual)
25
+ const NodeComponent = memo((props: NodeProps<P, NodeType>) => (
26
+ <>
27
+ <Node {...props} />
28
+ <DefaultHandles />
29
+ </>
30
+ ), nodePropsEqual)
31
+ NodeComponent.displayName = 'Node'
32
+ return NodeComponent
25
33
  }
@@ -1,4 +1,5 @@
1
- import { type DiagramEdge, invariant } from '@likec4/core'
1
+ import { invariant } from '@likec4/core'
2
+ import type { DiagramEdge } from '@likec4/core/types'
2
3
  import { css, cx } from '@likec4/styles/css'
3
4
  import { type PropsWithChildren } from 'react'
4
5
  import type { UndefinedOnPartialDeep } from 'type-fest'
@@ -67,6 +67,7 @@ export const labelsva = sva({
67
67
  slots: ['root', 'stepNumber', 'labelContents', 'labelText', 'labelTechnology'],
68
68
  base: {
69
69
  root: {
70
+ pointerEvents: 'all',
70
71
  fontFamily: 'likec4.relation',
71
72
  padding: '3px 5px 5px 5px',
72
73
  display: 'flex',
@@ -1,8 +1,9 @@
1
- import { type DiagramEdge, extractStep, isStepEdgeId } from '@likec4/core'
1
+ import { extractStep, isStepEdgeId } from '@likec4/core'
2
+ import type { DiagramEdge } from '@likec4/core/types'
2
3
  import { cx } from '@likec4/styles/css'
3
4
  import { type BoxProps, Box } from '@likec4/styles/jsx'
4
5
  import { Text } from '@mantine/core'
5
- import { type PropsWithChildren } from 'react'
6
+ import { type PropsWithChildren, forwardRef } from 'react'
6
7
  import { isTruthy } from 'remeda'
7
8
  import type { UndefinedOnPartialDeep } from 'type-fest'
8
9
  import type { EdgeProps } from '../../types'
@@ -22,26 +23,29 @@ type EdgeLabelProps = PropsWithChildren<
22
23
  }
23
24
  >
24
25
 
25
- export function EdgeLabel({
26
- edgeProps: {
27
- id,
28
- data: {
29
- label,
30
- technology,
26
+ export const EdgeLabel = forwardRef<HTMLDivElement, EdgeLabelProps>((
27
+ {
28
+ edgeProps: {
29
+ id,
30
+ data: {
31
+ label,
32
+ technology,
33
+ },
31
34
  },
35
+ className,
36
+ style,
37
+ children,
38
+ ...rest
32
39
  },
33
- className,
34
- style,
35
- children,
36
- ...rest
37
- }: EdgeLabelProps) {
40
+ ref,
41
+ ) => {
38
42
  const stepNum = isStepEdgeId(id) ? extractStep(id) : null
39
43
  const classes = labelsva({
40
44
  isStepEdge: stepNum !== null,
41
45
  })
42
46
 
43
47
  return (
44
- <Box className={cx(classes.root!, className)} {...rest}>
48
+ <Box ref={ref} className={cx(classes.root!, className)} {...rest}>
45
49
  {stepNum !== null && (
46
50
  <Box className={classes.stepNumber!}>
47
51
  {stepNum}
@@ -62,4 +66,5 @@ export function EdgeLabel({
62
66
  </Box>
63
67
  </Box>
64
68
  )
65
- }
69
+ })
70
+ EdgeLabel.displayName = 'EdgeLabel'
@@ -1,4 +1,4 @@
1
- import { type DiagramEdge } from '@likec4/core'
1
+ import type { DiagramEdge } from '@likec4/core/types'
2
2
  import { css, cx } from '@likec4/styles/css'
3
3
  import { EdgeLabelRenderer } from '@xyflow/react'
4
4
  import { type HTMLAttributes } from 'react'
@@ -1,4 +1,5 @@
1
- import { type RelationshipArrowType, nonexhaustive } from '@likec4/core'
1
+ import { nonexhaustive } from '@likec4/core'
2
+ import type { RelationshipArrowType } from '@likec4/core/types'
2
3
  import type { SVGProps } from 'react'
3
4
 
4
5
  const Open = (props: SVGProps<SVGMarkerElement>) => (