@likec4/diagram 1.19.1 → 1.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (582) hide show
  1. package/dist/LikeC4Diagram.css.d.ts +0 -1
  2. package/dist/LikeC4Diagram.css.js +1 -5
  3. package/dist/LikeC4Diagram.d.ts +1 -4
  4. package/dist/LikeC4Diagram.js +102 -147
  5. package/dist/LikeC4Diagram.props.d.ts +10 -16
  6. package/dist/LikeC4Search.js +7 -15
  7. package/dist/StaticLikeC4Diagram.d.ts +1 -1
  8. package/dist/base/Background.d.ts +7 -0
  9. package/dist/{xyflow/XYFlowBackground.js → base/Background.js} +5 -6
  10. package/dist/base/BaseXYFlow.d.ts +14 -0
  11. package/dist/base/BaseXYFlow.js +146 -0
  12. package/dist/base/example/RelationshipsBrowser.d.ts +6 -0
  13. package/dist/base/example/_types.d.ts +20 -0
  14. package/dist/base/example/custom.d.ts +71 -0
  15. package/dist/base/example/useViewToNodesEdges.d.ts +6 -0
  16. package/dist/base/index.d.ts +2 -0
  17. package/dist/base/primitives/NodeHandles.d.ts +4 -0
  18. package/dist/base/primitives/NodeHandles.js +14 -0
  19. package/dist/base/primitives/compound/CompoundActionButton.css.d.ts +3 -0
  20. package/dist/base/primitives/compound/CompoundActionButton.css.js +9 -0
  21. package/dist/base/primitives/compound/CompoundActionButton.d.ts +7 -0
  22. package/dist/base/primitives/compound/CompoundActionButton.js +48 -0
  23. package/dist/base/primitives/compound/CompoundDetailsButton.css.d.ts +3 -0
  24. package/dist/base/primitives/compound/CompoundDetailsButton.css.js +9 -0
  25. package/dist/base/primitives/compound/CompoundDetailsButton.d.ts +7 -0
  26. package/dist/base/primitives/compound/CompoundDetailsButton.js +50 -0
  27. package/dist/base/primitives/compound/CompoundNodeContainer.css.d.ts +9 -0
  28. package/dist/base/primitives/compound/CompoundNodeContainer.css.js +17 -0
  29. package/dist/base/primitives/compound/CompoundNodeContainer.d.ts +26 -0
  30. package/dist/base/primitives/compound/CompoundNodeContainer.js +86 -0
  31. package/dist/base/primitives/compound/CompoundTitle.css.d.ts +2 -0
  32. package/dist/base/primitives/compound/CompoundTitle.css.js +7 -0
  33. package/dist/base/primitives/compound/CompoundTitle.d.ts +6 -0
  34. package/dist/base/primitives/compound/CompoundTitle.js +20 -0
  35. package/dist/base/primitives/customEdge.d.ts +41 -0
  36. package/dist/base/primitives/customEdge.js +13 -0
  37. package/dist/base/primitives/customNode.d.ts +7 -0
  38. package/dist/base/primitives/customNode.js +10 -0
  39. package/dist/base/primitives/edge/EdgeActionButton.d.ts +7 -0
  40. package/dist/base/primitives/edge/EdgeActionButton.js +24 -0
  41. package/dist/base/primitives/edge/EdgeContainer.d.ts +10 -0
  42. package/dist/base/primitives/edge/EdgeContainer.js +35 -0
  43. package/dist/{xyflow/edges/edges.css.d.ts → base/primitives/edge/EdgeLabel.css.d.ts} +5 -9
  44. package/dist/base/primitives/edge/EdgeLabel.css.js +25 -0
  45. package/dist/base/primitives/edge/EdgeLabel.d.ts +51 -0
  46. package/dist/base/primitives/edge/EdgeLabel.js +90 -0
  47. package/dist/{xyflow → base/primitives/edge}/EdgeMarkers.d.ts +2 -0
  48. package/dist/{xyflow → base/primitives/edge}/EdgeMarkers.js +29 -1
  49. package/dist/base/primitives/edge/EdgePath.d.ts +44 -0
  50. package/dist/base/primitives/edge/EdgePath.js +77 -0
  51. package/dist/base/primitives/edge/edge.css.d.ts +6 -0
  52. package/dist/base/primitives/edge/edge.css.js +14 -0
  53. package/dist/base/primitives/element/ElementActionButtons.css.d.ts +3 -0
  54. package/dist/base/primitives/element/ElementActionButtons.css.js +9 -0
  55. package/dist/base/primitives/element/ElementActionButtons.d.ts +13 -0
  56. package/dist/base/primitives/element/ElementActionButtons.js +62 -0
  57. package/dist/base/primitives/element/ElementDetailsButton.css.d.ts +3 -0
  58. package/dist/base/primitives/element/ElementDetailsButton.css.js +9 -0
  59. package/dist/base/primitives/element/ElementDetailsButton.d.ts +7 -0
  60. package/dist/base/primitives/element/ElementDetailsButton.js +54 -0
  61. package/dist/base/primitives/element/ElementNodeContainer.css.d.ts +3 -0
  62. package/dist/base/primitives/element/ElementNodeContainer.css.js +7 -0
  63. package/dist/base/primitives/element/ElementNodeContainer.d.ts +26 -0
  64. package/dist/base/primitives/element/ElementNodeContainer.js +60 -0
  65. package/dist/base/primitives/element/ElementShape.css.d.ts +6 -0
  66. package/dist/base/primitives/element/ElementShape.css.js +14 -0
  67. package/dist/base/primitives/element/ElementShape.d.ts +28 -0
  68. package/dist/{xyflow/nodes/element/ElementShapeSvg.js → base/primitives/element/ElementShape.js} +23 -7
  69. package/dist/base/primitives/element/ElementTitle.css.d.ts +8 -0
  70. package/dist/base/primitives/element/ElementTitle.css.js +19 -0
  71. package/dist/base/primitives/element/ElementTitle.d.ts +10 -0
  72. package/dist/base/primitives/element/ElementTitle.js +66 -0
  73. package/dist/base/primitives/index.d.ts +17 -0
  74. package/dist/base/types.d.ts +90 -0
  75. package/dist/base/types.js +54 -0
  76. package/dist/base/updateEdges.d.ts +3 -0
  77. package/dist/base/updateEdges.js +31 -0
  78. package/dist/base/updateNodes.d.ts +3 -0
  79. package/dist/base/updateNodes.js +36 -0
  80. package/dist/base/xyflowMachine.d.ts +212 -0
  81. package/dist/context/DiagramEventHandlers.d.ts +10 -0
  82. package/dist/context/DiagramEventHandlers.js +49 -0
  83. package/dist/context/DiagramFeatures.d.ts +31 -0
  84. package/dist/context/DiagramFeatures.js +140 -0
  85. package/dist/{ui → context}/FramerMotionConfig.js +2 -4
  86. package/dist/context/IconRenderer.d.ts +11 -0
  87. package/dist/{xyflow/nodes/shared/ElementIcon.js → context/IconRenderer.js} +14 -14
  88. package/dist/context/RootContainer.d.ts +9 -0
  89. package/dist/context/RootContainer.js +20 -0
  90. package/dist/context/index.d.ts +7 -0
  91. package/dist/globals.css.js +0 -87
  92. package/dist/hooks/index.d.ts +7 -5
  93. package/dist/hooks/useCurrentViewId.d.ts +2 -0
  94. package/dist/hooks/useCurrentViewId.js +8 -0
  95. package/dist/hooks/useDiagram.d.ts +10725 -0
  96. package/dist/hooks/useDiagram.js +119 -0
  97. package/dist/hooks/useDiagramActor.d.ts +5 -0
  98. package/dist/hooks/useDiagramActor.js +21 -0
  99. package/dist/hooks/useDiagramContext.d.ts +3 -0
  100. package/dist/hooks/useDiagramContext.js +10 -0
  101. package/dist/hooks/useMantinePortalProps.js +2 -2
  102. package/dist/hooks/useXYFlow.d.ts +195 -37
  103. package/dist/hooks/useXYFlow.js +4 -6
  104. package/dist/index.d.ts +3 -2
  105. package/dist/index.js +5 -6
  106. package/dist/likec4diagram/DiagramActor.d.ts +7 -0
  107. package/dist/likec4diagram/DiagramActor.js +71 -0
  108. package/dist/likec4diagram/DiagramUI.d.ts +2 -0
  109. package/dist/likec4diagram/DiagramUI.js +22 -0
  110. package/dist/likec4diagram/XYFlow.d.ts +6 -0
  111. package/dist/likec4diagram/XYFlow.js +122 -0
  112. package/dist/likec4diagram/custom/edges/NotePopover.css.d.ts +2 -0
  113. package/dist/likec4diagram/custom/edges/NotePopover.css.js +7 -0
  114. package/dist/likec4diagram/custom/edges/NotePopover.d.ts +4 -0
  115. package/dist/likec4diagram/custom/edges/NotePopover.js +101 -0
  116. package/dist/likec4diagram/custom/edges/RelationshipEdge.d.ts +55 -0
  117. package/dist/likec4diagram/custom/edges/RelationshipEdge.js +307 -0
  118. package/dist/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.css.js +4 -4
  119. package/dist/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.d.ts +5 -5
  120. package/dist/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.js +51 -53
  121. package/dist/likec4diagram/custom/edges/edges.css.d.ts +2 -0
  122. package/dist/likec4diagram/custom/edges/edges.css.js +7 -0
  123. package/dist/likec4diagram/custom/edges/utils.d.ts +22 -0
  124. package/dist/likec4diagram/custom/edges/utils.js +25 -0
  125. package/dist/likec4diagram/custom/index.d.ts +57 -0
  126. package/dist/likec4diagram/custom/index.js +7 -0
  127. package/dist/likec4diagram/custom/nodes/CompoundActions.d.ts +5 -0
  128. package/dist/likec4diagram/custom/nodes/CompoundActions.js +25 -0
  129. package/dist/likec4diagram/custom/nodes/ElementActions.d.ts +7 -0
  130. package/dist/likec4diagram/custom/nodes/ElementActions.js +69 -0
  131. package/dist/likec4diagram/custom/nodes/nodeTypes.d.ts +10 -0
  132. package/dist/likec4diagram/custom/nodes/nodeTypes.js +94 -0
  133. package/dist/likec4diagram/custom/nodes/toolbar/ColorButton.d.ts +21 -0
  134. package/dist/likec4diagram/custom/nodes/toolbar/ColorButton.js +159 -0
  135. package/dist/likec4diagram/custom/nodes/toolbar/CompoundToolbar.d.ts +7 -0
  136. package/dist/likec4diagram/custom/nodes/toolbar/CompoundToolbar.js +128 -0
  137. package/dist/likec4diagram/custom/nodes/toolbar/ElementToolbar.d.ts +7 -0
  138. package/dist/likec4diagram/custom/nodes/toolbar/ElementToolbar.js +149 -0
  139. package/dist/likec4diagram/custom/nodes/toolbar/Toolbar.d.ts +8 -0
  140. package/dist/likec4diagram/custom/nodes/toolbar/Toolbar.js +66 -0
  141. package/dist/likec4diagram/custom/nodes/toolbar/_shared.d.ts +40 -0
  142. package/dist/likec4diagram/custom/nodes/toolbar/_shared.js +131 -0
  143. package/dist/likec4diagram/custom/nodes/toolbar/styles.css.d.ts +1 -0
  144. package/dist/likec4diagram/custom/nodes/toolbar/styles.css.js +5 -0
  145. package/dist/likec4diagram/state/actorContext.d.ts +50849 -0
  146. package/dist/likec4diagram/state/actorContext.js +12 -0
  147. package/dist/{state → likec4diagram/state}/aligners.d.ts +4 -1
  148. package/dist/{state → likec4diagram/state}/aligners.js +31 -5
  149. package/dist/likec4diagram/state/assign.d.ts +18 -0
  150. package/dist/likec4diagram/state/assign.js +343 -0
  151. package/dist/likec4diagram/state/hotkeyActor.d.ts +5 -0
  152. package/dist/likec4diagram/state/hotkeyActor.js +18 -0
  153. package/dist/likec4diagram/state/inspector.d.ts +5 -0
  154. package/dist/likec4diagram/state/machine.d.ts +10751 -0
  155. package/dist/likec4diagram/state/machine.js +783 -0
  156. package/dist/likec4diagram/state/syncManualLayoutActor.d.ts +113 -0
  157. package/dist/likec4diagram/state/syncManualLayoutActor.js +178 -0
  158. package/dist/likec4diagram/state/utils.d.ts +8 -0
  159. package/dist/likec4diagram/state/utils.js +48 -0
  160. package/dist/likec4diagram/types.d.ts +74 -0
  161. package/dist/{ui/top-left → likec4diagram/ui/controls}/ChangeAutoLayoutButton.js +11 -10
  162. package/dist/likec4diagram/ui/controls/Controls.d.ts +2 -0
  163. package/dist/likec4diagram/ui/controls/Controls.js +102 -0
  164. package/dist/likec4diagram/ui/controls/LayoutDriftNotification.d.ts +2 -0
  165. package/dist/likec4diagram/ui/controls/LayoutDriftNotification.js +43 -0
  166. package/dist/{ui/top-left → likec4diagram/ui/controls}/ManualLayoutToolsButton.js +11 -11
  167. package/dist/likec4diagram/ui/controls/NavigationButtons.d.ts +1 -0
  168. package/dist/likec4diagram/ui/controls/NavigationButtons.js +92 -0
  169. package/dist/{ui/top-left → likec4diagram/ui/controls}/_shared.js +2 -1
  170. package/dist/{ui/top-left → likec4diagram/ui/controls}/styles.css.d.ts +1 -1
  171. package/dist/likec4diagram/ui/controls/styles.css.js +17 -0
  172. package/dist/likec4diagram/ui/diagram-title/DiagramTitlePanel.css.js +11 -0
  173. package/dist/likec4diagram/ui/diagram-title/DiagramTitlePanel.d.ts +1 -0
  174. package/dist/{ui → likec4diagram/ui/diagram-title}/DiagramTitlePanel.js +3 -3
  175. package/dist/likec4diagram/ui/diagram-title/Link.d.ts +4 -0
  176. package/dist/likec4diagram/ui/index.d.ts +2 -0
  177. package/dist/likec4diagram/ui/notation/NotationPanel.css.js +13 -0
  178. package/dist/likec4diagram/ui/notation/NotationPanel.d.ts +2 -0
  179. package/dist/{ui → likec4diagram/ui}/notation/NotationPanel.js +23 -31
  180. package/dist/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.css.js +4 -4
  181. package/dist/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.js +19 -44
  182. package/dist/{xyflow → likec4diagram}/useLayoutConstraints.d.ts +11 -6
  183. package/dist/{xyflow → likec4diagram}/useLayoutConstraints.js +17 -12
  184. package/dist/likec4diagram/useViewToNodesEdges.d.ts +11 -0
  185. package/dist/likec4diagram/useViewToNodesEdges.js +245 -0
  186. package/dist/likec4model/index.d.ts +1 -1
  187. package/dist/likec4model/useLikeC4Model.d.ts +1 -11
  188. package/dist/likec4model/useLikeC4Model.js +1 -39
  189. package/dist/overlays/Overlays.js +61 -105
  190. package/dist/overlays/element-details/ElementDetailsCard.js +111 -116
  191. package/dist/overlays/element-details/TabPanelDeployments.js +4 -7
  192. package/dist/overlays/element-details/TabPanelRelationships.css.js +0 -2
  193. package/dist/overlays/element-details/TabPanelRelationships.d.ts +1 -1
  194. package/dist/overlays/element-details/TabPanelRelationships.js +35 -64
  195. package/dist/overlays/element-details/TabPanelStructure.d.ts +2 -2
  196. package/dist/overlays/element-details/TabPanelStructure.js +1 -1
  197. package/dist/overlays/overlay/Overlay.css.d.ts +2 -0
  198. package/dist/overlays/overlay/Overlay.css.js +93 -0
  199. package/dist/overlays/overlay/Overlay.d.ts +8 -0
  200. package/dist/overlays/overlay/Overlay.js +86 -0
  201. package/dist/overlays/relationship-details/RelationshipDetails.d.ts +5 -0
  202. package/dist/overlays/relationship-details/RelationshipDetails.js +189 -0
  203. package/dist/overlays/{edge-details → relationship-details}/SelectEdge.css.d.ts +1 -0
  204. package/dist/overlays/relationship-details/SelectEdge.css.js +17 -0
  205. package/dist/overlays/{edge-details → relationship-details}/SelectEdge.d.ts +1 -1
  206. package/dist/overlays/{edge-details → relationship-details}/SelectEdge.js +8 -8
  207. package/dist/overlays/relationship-details/_types.d.ts +36 -0
  208. package/dist/overlays/relationship-details/actor.d.ts +41 -0
  209. package/dist/overlays/relationship-details/actor.js +113 -0
  210. package/dist/overlays/relationship-details/custom/ElementActions.d.ts +5 -0
  211. package/dist/overlays/relationship-details/custom/ElementActions.js +33 -0
  212. package/dist/overlays/relationship-details/custom/edgeTypes.d.ts +49 -0
  213. package/dist/overlays/relationship-details/custom/edgeTypes.js +51 -0
  214. package/dist/overlays/relationship-details/custom/index.d.ts +2 -0
  215. package/dist/overlays/relationship-details/custom/nodeTypes.d.ts +39 -0
  216. package/dist/overlays/relationship-details/custom/nodeTypes.js +89 -0
  217. package/dist/overlays/relationship-details/custom/styles.css.d.ts +1 -0
  218. package/dist/overlays/relationship-details/hooks.d.ts +59 -0
  219. package/dist/overlays/relationship-details/hooks.js +46 -0
  220. package/dist/overlays/{edge-details/use-layouted-edge-details.d.ts → relationship-details/useLayoutedDetails.d.ts} +4 -6
  221. package/dist/overlays/{edge-details/use-layouted-edge-details.js → relationship-details/useLayoutedDetails.js} +68 -64
  222. package/dist/overlays/relationships-browser/-useRelationshipsView.d.ts +39 -0
  223. package/dist/overlays/relationships-browser/-useRelationshipsView.js +488 -0
  224. package/dist/overlays/relationships-browser/RelationshipsBrowser.d.ts +5 -0
  225. package/dist/overlays/relationships-browser/RelationshipsBrowser.js +209 -0
  226. package/dist/overlays/{relationships-of → relationships-browser}/SelectElement.css.d.ts +1 -0
  227. package/dist/overlays/relationships-browser/SelectElement.css.js +9 -0
  228. package/dist/overlays/relationships-browser/SelectElement.d.ts +7 -0
  229. package/dist/overlays/{relationships-of → relationships-browser}/SelectElement.js +11 -7
  230. package/dist/overlays/relationships-browser/_types.d.ts +40 -0
  231. package/dist/overlays/relationships-browser/actor.d.ts +66 -0
  232. package/dist/overlays/relationships-browser/actor.js +159 -0
  233. package/dist/overlays/relationships-browser/custom/ElementActions.d.ts +5 -0
  234. package/dist/overlays/relationships-browser/custom/ElementActions.js +43 -0
  235. package/dist/overlays/relationships-browser/custom/EmptyNode.d.ts +5 -0
  236. package/dist/overlays/{relationships-of/xyflow → relationships-browser/custom}/EmptyNode.js +1 -3
  237. package/dist/overlays/relationships-browser/custom/edgeTypes.d.ts +46 -0
  238. package/dist/overlays/relationships-browser/custom/edgeTypes.js +51 -0
  239. package/dist/overlays/relationships-browser/custom/index.d.ts +2 -0
  240. package/dist/overlays/relationships-browser/custom/nodeTypes.d.ts +45 -0
  241. package/dist/overlays/relationships-browser/custom/nodeTypes.js +93 -0
  242. package/dist/overlays/relationships-browser/custom/styles.css.d.ts +1 -0
  243. package/dist/overlays/relationships-browser/custom/styles.css.js +5 -0
  244. package/dist/overlays/relationships-browser/hooks.d.ts +62 -0
  245. package/dist/overlays/relationships-browser/hooks.js +46 -0
  246. package/dist/overlays/relationships-browser/useViewToNodesEdges.d.ts +10 -0
  247. package/dist/overlays/relationships-browser/useViewToNodesEdges.js +160 -0
  248. package/dist/style.css +1 -1
  249. package/dist/theme-vars.css.js +1 -0
  250. package/dist/utils/index.d.ts +4 -0
  251. package/dist/{xyflow/utils.d.ts → utils/xyflow.d.ts} +4 -4
  252. package/dist/{xyflow/utils.js → utils/xyflow.js} +14 -20
  253. package/package.json +24 -21
  254. package/src/LikeC4Diagram.css.ts +21 -15
  255. package/src/LikeC4Diagram.props.ts +14 -21
  256. package/src/LikeC4Diagram.tsx +105 -150
  257. package/src/LikeC4Search.tsx +21 -28
  258. package/src/StaticLikeC4Diagram.tsx +0 -1
  259. package/src/{xyflow/XYFlowBackground.tsx → base/Background.tsx} +8 -8
  260. package/src/base/BaseXYFlow.tsx +200 -0
  261. package/src/{xyflow → base}/const.ts +1 -1
  262. package/src/base/example/RelationshipsBrowser.tsx +62 -0
  263. package/src/base/example/_types.ts +71 -0
  264. package/src/base/example/custom.tsx +58 -0
  265. package/src/base/example/useViewToNodesEdges.ts +193 -0
  266. package/src/base/index.ts +10 -0
  267. package/src/base/primitives/NodeHandles.tsx +18 -0
  268. package/src/base/primitives/compound/CompoundActionButton.css.ts +55 -0
  269. package/src/base/primitives/compound/CompoundActionButton.tsx +52 -0
  270. package/src/base/primitives/compound/CompoundDetailsButton.css.ts +56 -0
  271. package/src/base/primitives/compound/CompoundDetailsButton.tsx +54 -0
  272. package/src/base/primitives/compound/CompoundNodeContainer.css.ts +161 -0
  273. package/src/base/primitives/compound/CompoundNodeContainer.tsx +95 -0
  274. package/src/base/primitives/compound/CompoundTitle.css.ts +43 -0
  275. package/src/base/primitives/compound/CompoundTitle.tsx +29 -0
  276. package/src/base/primitives/customEdge.ts +32 -0
  277. package/src/base/primitives/customNode.ts +21 -0
  278. package/src/base/primitives/edge/EdgeActionButton.tsx +27 -0
  279. package/src/base/primitives/edge/EdgeContainer.tsx +48 -0
  280. package/src/base/primitives/edge/EdgeLabel.css.ts +196 -0
  281. package/src/base/primitives/edge/EdgeLabel.tsx +136 -0
  282. package/src/{xyflow → base/primitives/edge}/EdgeMarkers.tsx +29 -1
  283. package/src/base/primitives/edge/EdgePath.tsx +89 -0
  284. package/src/base/primitives/edge/edge.css.ts +122 -0
  285. package/src/base/primitives/element/ElementActionButtons.css.ts +48 -0
  286. package/src/base/primitives/element/ElementActionButtons.tsx +73 -0
  287. package/src/base/primitives/element/ElementDetailsButton.css.ts +54 -0
  288. package/src/base/primitives/element/ElementDetailsButton.tsx +59 -0
  289. package/src/base/primitives/element/ElementNodeContainer.css.ts +47 -0
  290. package/src/base/primitives/element/ElementNodeContainer.tsx +72 -0
  291. package/src/base/primitives/element/ElementShape.css.ts +134 -0
  292. package/src/{xyflow/nodes/element/ElementShapeSvg.tsx → base/primitives/element/ElementShape.tsx} +64 -19
  293. package/src/base/primitives/element/ElementTitle.css.ts +156 -0
  294. package/src/base/primitives/element/ElementTitle.tsx +76 -0
  295. package/src/base/primitives/index.ts +17 -0
  296. package/src/base/types.ts +169 -0
  297. package/src/base/updateEdges.ts +40 -0
  298. package/src/base/updateNodes.ts +46 -0
  299. package/src/base/xyflowMachine.ts +75 -0
  300. package/src/context/DiagramEventHandlers.tsx +53 -0
  301. package/src/context/DiagramFeatures.tsx +162 -0
  302. package/src/{ui → context}/FramerMotionConfig.tsx +2 -6
  303. package/src/context/IconRenderer.tsx +45 -0
  304. package/src/context/RootContainer.tsx +31 -0
  305. package/src/context/index.ts +14 -0
  306. package/src/globals.css.ts +32 -32
  307. package/src/hooks/index.ts +7 -5
  308. package/src/hooks/useCurrentViewId.ts +8 -0
  309. package/src/hooks/useDiagram.ts +129 -0
  310. package/src/hooks/useDiagramActor.ts +25 -0
  311. package/src/hooks/useDiagramContext.ts +11 -0
  312. package/src/hooks/useMantinePortalProps.ts +2 -2
  313. package/src/hooks/useXYFlow.ts +12 -38
  314. package/src/index.ts +3 -7
  315. package/src/likec4diagram/DiagramActor.tsx +79 -0
  316. package/src/likec4diagram/DiagramUI.tsx +28 -0
  317. package/src/likec4diagram/XYFlow.tsx +137 -0
  318. package/src/likec4diagram/custom/edges/NotePopover.css.ts +27 -0
  319. package/src/likec4diagram/custom/edges/NotePopover.tsx +96 -0
  320. package/src/likec4diagram/custom/edges/RelationshipEdge.tsx +355 -0
  321. package/src/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.css.ts +7 -7
  322. package/src/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.tsx +91 -70
  323. package/src/likec4diagram/custom/edges/edges.css.ts +39 -0
  324. package/src/likec4diagram/custom/edges/utils.ts +126 -0
  325. package/src/likec4diagram/custom/index.tsx +8 -0
  326. package/src/likec4diagram/custom/nodes/CompoundActions.tsx +27 -0
  327. package/src/likec4diagram/custom/nodes/ElementActions.tsx +74 -0
  328. package/src/likec4diagram/custom/nodes/nodeTypes.tsx +107 -0
  329. package/src/likec4diagram/custom/nodes/toolbar/ColorButton.tsx +175 -0
  330. package/src/likec4diagram/custom/nodes/toolbar/CompoundToolbar.tsx +122 -0
  331. package/src/likec4diagram/custom/nodes/toolbar/ElementToolbar.tsx +140 -0
  332. package/src/likec4diagram/custom/nodes/toolbar/Toolbar.tsx +77 -0
  333. package/src/likec4diagram/custom/nodes/toolbar/_shared.tsx +143 -0
  334. package/src/likec4diagram/custom/nodes/toolbar/styles.css.ts +9 -0
  335. package/src/likec4diagram/state/actorContext.ts +8 -0
  336. package/src/{state → likec4diagram/state}/aligners.ts +67 -40
  337. package/src/likec4diagram/state/assign.ts +384 -0
  338. package/src/likec4diagram/state/hotkeyActor.ts +20 -0
  339. package/src/likec4diagram/state/inspector.ts +23 -0
  340. package/src/likec4diagram/state/machine.ts +946 -0
  341. package/src/likec4diagram/state/syncManualLayoutActor.ts +219 -0
  342. package/src/likec4diagram/state/utils.ts +52 -0
  343. package/src/likec4diagram/types.ts +144 -0
  344. package/src/{ui/top-left → likec4diagram/ui/controls}/ChangeAutoLayoutButton.tsx +32 -28
  345. package/src/likec4diagram/ui/controls/Controls.tsx +107 -0
  346. package/src/likec4diagram/ui/controls/LayoutDriftNotification.tsx +46 -0
  347. package/src/{ui/top-left → likec4diagram/ui/controls}/ManualLayoutToolsButton.tsx +16 -16
  348. package/src/likec4diagram/ui/controls/NavigationButtons.tsx +83 -0
  349. package/src/{ui/top-left → likec4diagram/ui/controls}/_shared.ts +4 -3
  350. package/src/{ui/top-left → likec4diagram/ui/controls}/styles.css.ts +17 -17
  351. package/src/{ui → likec4diagram/ui/diagram-title}/DiagramTitlePanel.css.ts +11 -11
  352. package/src/{ui → likec4diagram/ui/diagram-title}/DiagramTitlePanel.tsx +6 -5
  353. package/src/likec4diagram/ui/diagram-title/Link.tsx +40 -0
  354. package/src/likec4diagram/ui/index.ts +2 -0
  355. package/src/{ui → likec4diagram/ui}/notation/NotationPanel.css.ts +18 -18
  356. package/src/{ui → likec4diagram/ui}/notation/NotationPanel.tsx +44 -44
  357. package/src/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.css.ts +16 -16
  358. package/src/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.tsx +29 -49
  359. package/src/{xyflow → likec4diagram}/useLayoutConstraints.ts +54 -43
  360. package/src/likec4diagram/useViewToNodesEdges.ts +297 -0
  361. package/src/likec4model/index.ts +0 -6
  362. package/src/likec4model/useLikeC4Model.ts +1 -43
  363. package/src/overlays/Overlays.tsx +201 -147
  364. package/src/overlays/element-details/ElementDetailsCard.css.ts +58 -58
  365. package/src/overlays/element-details/ElementDetailsCard.tsx +143 -128
  366. package/src/overlays/element-details/TabPanelDeployments.css.ts +14 -14
  367. package/src/overlays/element-details/TabPanelDeployments.tsx +22 -22
  368. package/src/overlays/element-details/TabPanelRelationships.css.ts +19 -19
  369. package/src/overlays/element-details/TabPanelRelationships.tsx +45 -28
  370. package/src/overlays/element-details/TabPanelStructure.css.ts +7 -7
  371. package/src/overlays/element-details/TabPanelStructure.tsx +11 -11
  372. package/src/overlays/overlay/Overlay.css.ts +73 -0
  373. package/src/overlays/overlay/Overlay.tsx +99 -0
  374. package/src/overlays/relationship-details/RelationshipDetails.tsx +234 -0
  375. package/src/overlays/{edge-details → relationship-details}/SelectEdge.css.ts +20 -13
  376. package/src/overlays/{edge-details → relationship-details}/SelectEdge.tsx +14 -14
  377. package/src/overlays/relationship-details/_types.ts +73 -0
  378. package/src/overlays/relationship-details/actor.ts +162 -0
  379. package/src/overlays/relationship-details/custom/ElementActions.tsx +45 -0
  380. package/src/overlays/relationship-details/custom/edgeTypes.tsx +49 -0
  381. package/src/overlays/relationship-details/custom/index.tsx +2 -0
  382. package/src/overlays/relationship-details/custom/nodeTypes.tsx +108 -0
  383. package/src/overlays/relationship-details/custom/styles.css.ts +13 -0
  384. package/src/overlays/relationship-details/hooks.ts +48 -0
  385. package/src/overlays/{edge-details/use-layouted-edge-details.ts → relationship-details/useLayoutedDetails.ts} +128 -114
  386. package/src/overlays/relationships-browser/-useRelationshipsView.ts +642 -0
  387. package/src/overlays/relationships-browser/RelationshipsBrowser.tsx +247 -0
  388. package/src/overlays/{relationships-of → relationships-browser}/SelectElement.css.ts +12 -5
  389. package/src/overlays/{relationships-of → relationships-browser}/SelectElement.tsx +19 -17
  390. package/src/overlays/relationships-browser/_types.ts +89 -0
  391. package/src/overlays/relationships-browser/actor.ts +224 -0
  392. package/src/overlays/relationships-browser/custom/ElementActions.tsx +44 -0
  393. package/src/overlays/relationships-browser/custom/EmptyNode.tsx +18 -0
  394. package/src/overlays/relationships-browser/custom/edgeTypes.tsx +49 -0
  395. package/src/overlays/relationships-browser/custom/index.tsx +2 -0
  396. package/src/overlays/relationships-browser/custom/nodeTypes.tsx +109 -0
  397. package/src/overlays/relationships-browser/custom/styles.css.ts +13 -0
  398. package/src/overlays/relationships-browser/hooks.ts +48 -0
  399. package/src/overlays/relationships-browser/useViewToNodesEdges.ts +209 -0
  400. package/src/utils/index.ts +15 -0
  401. package/src/{xyflow/utils.ts → utils/xyflow.ts} +22 -8
  402. package/dist/_virtual/_commonjsHelpers.js +0 -6
  403. package/dist/controls/Text.d.ts +0 -2
  404. package/dist/controls/Text.js +0 -7
  405. package/dist/controls/action-button-bar/ActionButtonBar.css.d.ts +0 -1
  406. package/dist/controls/action-button-bar/ActionButtonBar.css.js +0 -5
  407. package/dist/controls/action-button-bar/ActionButtonBar.d.ts +0 -9
  408. package/dist/controls/action-button-bar/ActionButtonBar.js +0 -100
  409. package/dist/controls/action-button-bar/useActionButtonBarCtx.d.ts +0 -10
  410. package/dist/controls/action-button-bar/useActionButtonBarCtx.js +0 -9
  411. package/dist/controls/action-buttons/ActionButton.css.d.ts +0 -1
  412. package/dist/controls/action-buttons/ActionButton.css.js +0 -5
  413. package/dist/controls/action-buttons/ActionButton.d.ts +0 -9
  414. package/dist/controls/action-buttons/ActionButton.js +0 -66
  415. package/dist/controls/action-buttons/ActionButtons.d.ts +0 -12
  416. package/dist/controls/action-buttons/ActionButtons.js +0 -99
  417. package/dist/hooks/useDiagramState.d.ts +0 -6
  418. package/dist/hooks/useDiagramState.js +0 -27
  419. package/dist/overlays/OverlayContext.d.ts +0 -10
  420. package/dist/overlays/OverlayContext.js +0 -9
  421. package/dist/overlays/Overlays.css.d.ts +0 -3
  422. package/dist/overlays/Overlays.css.js +0 -7
  423. package/dist/overlays/edge-details/EdgeDetailsXYFlow.d.ts +0 -5
  424. package/dist/overlays/edge-details/EdgeDetailsXYFlow.js +0 -185
  425. package/dist/overlays/edge-details/SelectEdge.css.js +0 -17
  426. package/dist/overlays/edge-details/_types.d.ts +0 -14
  427. package/dist/overlays/edge-details/xyflow/CompoundNode.d.ts +0 -5
  428. package/dist/overlays/edge-details/xyflow/CompoundNode.js +0 -76
  429. package/dist/overlays/edge-details/xyflow/ElementNode.d.ts +0 -5
  430. package/dist/overlays/edge-details/xyflow/ElementNode.js +0 -159
  431. package/dist/overlays/edge-details/xyflow/RelationshipEdge.d.ts +0 -3
  432. package/dist/overlays/edge-details/xyflow/RelationshipEdge.js +0 -84
  433. package/dist/overlays/edge-details/xyflow/styles.css.d.ts +0 -9
  434. package/dist/overlays/edge-details/xyflow/styles.css.js +0 -21
  435. package/dist/overlays/index.d.ts +0 -1
  436. package/dist/overlays/relationships-of/RelationshipsOverlay.d.ts +0 -5
  437. package/dist/overlays/relationships-of/RelationshipsOverlay.js +0 -193
  438. package/dist/overlays/relationships-of/RelationshipsXYFlow.d.ts +0 -19
  439. package/dist/overlays/relationships-of/RelationshipsXYFlow.js +0 -290
  440. package/dist/overlays/relationships-of/SelectElement.css.js +0 -7
  441. package/dist/overlays/relationships-of/SelectElement.d.ts +0 -7
  442. package/dist/overlays/relationships-of/_types.d.ts +0 -28
  443. package/dist/overlays/relationships-of/use-layouted-relationships.d.ts +0 -22
  444. package/dist/overlays/relationships-of/use-layouted-relationships.js +0 -496
  445. package/dist/overlays/relationships-of/xyflow/CompoundNode.d.ts +0 -6
  446. package/dist/overlays/relationships-of/xyflow/CompoundNode.js +0 -120
  447. package/dist/overlays/relationships-of/xyflow/ElementNode.d.ts +0 -6
  448. package/dist/overlays/relationships-of/xyflow/ElementNode.js +0 -194
  449. package/dist/overlays/relationships-of/xyflow/EmptyNode.d.ts +0 -5
  450. package/dist/overlays/relationships-of/xyflow/RelationshipEdge.d.ts +0 -3
  451. package/dist/overlays/relationships-of/xyflow/RelationshipEdge.js +0 -123
  452. package/dist/overlays/relationships-of/xyflow/styles.css.d.ts +0 -14
  453. package/dist/overlays/relationships-of/xyflow/styles.css.js +0 -24
  454. package/dist/overlays/shared/xyflow/RelationshipEdge.css.d.ts +0 -4
  455. package/dist/overlays/shared/xyflow/RelationshipEdge.css.js +0 -12
  456. package/dist/overlays/shared/xyflow/_types.d.ts +0 -77
  457. package/dist/state/DiagramContext.d.ts +0 -1609
  458. package/dist/state/DiagramContext.js +0 -101
  459. package/dist/state/diagram-to-xyflow.d.ts +0 -11
  460. package/dist/state/diagram-to-xyflow.js +0 -113
  461. package/dist/state/diagramStore.d.ts +0 -1705
  462. package/dist/state/diagramStore.js +0 -808
  463. package/dist/state/diagramStore.layout.d.ts +0 -4
  464. package/dist/state/diagramStore.layout.js +0 -56
  465. package/dist/ui/DiagramTitlePanel.css.js +0 -11
  466. package/dist/ui/DiagramTitlePanel.d.ts +0 -1
  467. package/dist/ui/notation/NotationPanel.css.js +0 -16
  468. package/dist/ui/notation/NotationPanel.d.ts +0 -1
  469. package/dist/ui/top-left/TopLeftPanel.d.ts +0 -4
  470. package/dist/ui/top-left/TopLeftPanel.js +0 -211
  471. package/dist/ui/top-left/styles.css.js +0 -17
  472. package/dist/xyflow/FitviewOnDiagramChange.d.ts +0 -4
  473. package/dist/xyflow/FitviewOnDiagramChange.js +0 -72
  474. package/dist/xyflow/SelectEdgesOnNodeFocus.d.ts +0 -1
  475. package/dist/xyflow/SelectEdgesOnNodeFocus.js +0 -96
  476. package/dist/xyflow/XYFlow.d.ts +0 -8
  477. package/dist/xyflow/XYFlow.js +0 -145
  478. package/dist/xyflow/XYFlowBackground.d.ts +0 -10
  479. package/dist/xyflow/XYFlowInner.d.ts +0 -8
  480. package/dist/xyflow/XYFlowInner.js +0 -41
  481. package/dist/xyflow/edges/EdgeLabel.d.ts +0 -7
  482. package/dist/xyflow/edges/EdgeLabel.js +0 -160
  483. package/dist/xyflow/edges/RelationshipEdge.d.ts +0 -6
  484. package/dist/xyflow/edges/RelationshipEdge.js +0 -443
  485. package/dist/xyflow/edges/edges.css.js +0 -37
  486. package/dist/xyflow/edges/utils.d.ts +0 -16
  487. package/dist/xyflow/edges/utils.js +0 -24
  488. package/dist/xyflow/nodes/AnimateVariants.d.ts +0 -1313
  489. package/dist/xyflow/nodes/AnimateVariants.js +0 -123
  490. package/dist/xyflow/nodes/Node.css.d.ts +0 -3
  491. package/dist/xyflow/nodes/Node.css.js +0 -9
  492. package/dist/xyflow/nodes/compound/CompoundNode.css.d.ts +0 -14
  493. package/dist/xyflow/nodes/compound/CompoundNode.css.js +0 -27
  494. package/dist/xyflow/nodes/compound/CompoundNode.d.ts +0 -6
  495. package/dist/xyflow/nodes/compound/CompoundNode.js +0 -216
  496. package/dist/xyflow/nodes/compound/index.d.ts +0 -1
  497. package/dist/xyflow/nodes/element/ElementLink.css.d.ts +0 -3
  498. package/dist/xyflow/nodes/element/ElementLink.d.ts +0 -6
  499. package/dist/xyflow/nodes/element/ElementNode.d.ts +0 -6
  500. package/dist/xyflow/nodes/element/ElementNode.js +0 -190
  501. package/dist/xyflow/nodes/element/ElementShapeSvg.d.ts +0 -17
  502. package/dist/xyflow/nodes/element/element.css.d.ts +0 -18
  503. package/dist/xyflow/nodes/element/element.css.js +0 -31
  504. package/dist/xyflow/nodes/element/index.d.ts +0 -1
  505. package/dist/xyflow/nodes/shared/ElementIcon.d.ts +0 -8
  506. package/dist/xyflow/nodes/shared/Toolbar.d.ts +0 -9
  507. package/dist/xyflow/nodes/shared/Toolbar.js +0 -436
  508. package/dist/xyflow/types.d.ts +0 -36
  509. package/dist/xyflow/useXYFlowEvents.d.ts +0 -160
  510. package/dist/xyflow/useXYFlowEvents.js +0 -275
  511. package/src/controls/Text.ts +0 -5
  512. package/src/controls/action-button-bar/ActionButtonBar.css.ts +0 -13
  513. package/src/controls/action-button-bar/ActionButtonBar.tsx +0 -138
  514. package/src/controls/action-button-bar/useActionButtonBarCtx.ts +0 -13
  515. package/src/controls/action-buttons/ActionButton.css.ts +0 -29
  516. package/src/controls/action-buttons/ActionButton.tsx +0 -66
  517. package/src/controls/action-buttons/ActionButtons.tsx +0 -138
  518. package/src/hooks/useDiagramState.ts +0 -36
  519. package/src/overlays/OverlayContext.tsx +0 -11
  520. package/src/overlays/Overlays.css.ts +0 -136
  521. package/src/overlays/edge-details/EdgeDetailsXYFlow.tsx +0 -255
  522. package/src/overlays/edge-details/_types.ts +0 -18
  523. package/src/overlays/edge-details/xyflow/CompoundNode.tsx +0 -72
  524. package/src/overlays/edge-details/xyflow/ElementNode.tsx +0 -152
  525. package/src/overlays/edge-details/xyflow/RelationshipEdge.tsx +0 -85
  526. package/src/overlays/edge-details/xyflow/styles.css.ts +0 -144
  527. package/src/overlays/index.tsx +0 -1
  528. package/src/overlays/relationships-of/RelationshipsOverlay.tsx +0 -185
  529. package/src/overlays/relationships-of/RelationshipsXYFlow.tsx +0 -378
  530. package/src/overlays/relationships-of/_types.ts +0 -40
  531. package/src/overlays/relationships-of/use-layouted-relationships.ts +0 -699
  532. package/src/overlays/relationships-of/xyflow/CompoundNode.tsx +0 -124
  533. package/src/overlays/relationships-of/xyflow/ElementNode.tsx +0 -194
  534. package/src/overlays/relationships-of/xyflow/EmptyNode.tsx +0 -19
  535. package/src/overlays/relationships-of/xyflow/RelationshipEdge.tsx +0 -127
  536. package/src/overlays/relationships-of/xyflow/styles.css.ts +0 -214
  537. package/src/overlays/shared/xyflow/RelationshipEdge.css.ts +0 -60
  538. package/src/overlays/shared/xyflow/_types.ts +0 -87
  539. package/src/state/DiagramContext.tsx +0 -107
  540. package/src/state/diagram-to-xyflow.ts +0 -150
  541. package/src/state/diagramStore.layout.ts +0 -66
  542. package/src/state/diagramStore.ts +0 -1099
  543. package/src/ui/top-left/TopLeftPanel.tsx +0 -220
  544. package/src/xyflow/FitviewOnDiagramChange.tsx +0 -83
  545. package/src/xyflow/SelectEdgesOnNodeFocus.tsx +0 -106
  546. package/src/xyflow/XYFlow.tsx +0 -179
  547. package/src/xyflow/XYFlowInner.tsx +0 -48
  548. package/src/xyflow/edges/EdgeLabel.tsx +0 -193
  549. package/src/xyflow/edges/RelationshipEdge.tsx +0 -547
  550. package/src/xyflow/edges/edges.css.ts +0 -288
  551. package/src/xyflow/edges/utils.ts +0 -153
  552. package/src/xyflow/nodes/AnimateVariants.ts +0 -143
  553. package/src/xyflow/nodes/Node.css.ts +0 -44
  554. package/src/xyflow/nodes/compound/CompoundNode.css.ts +0 -258
  555. package/src/xyflow/nodes/compound/CompoundNode.tsx +0 -226
  556. package/src/xyflow/nodes/compound/index.ts +0 -1
  557. package/src/xyflow/nodes/element/ElementLink.css.ts +0 -67
  558. package/src/xyflow/nodes/element/ElementLink.tsx +0 -97
  559. package/src/xyflow/nodes/element/ElementNode.tsx +0 -208
  560. package/src/xyflow/nodes/element/element.css.ts +0 -369
  561. package/src/xyflow/nodes/element/index.ts +0 -1
  562. package/src/xyflow/nodes/shared/ElementIcon.tsx +0 -43
  563. package/src/xyflow/nodes/shared/Toolbar.tsx +0 -496
  564. package/src/xyflow/types.ts +0 -57
  565. package/src/xyflow/useXYFlowEvents.ts +0 -315
  566. /package/dist/{xyflow → base}/const.d.ts +0 -0
  567. /package/dist/{xyflow → base}/const.js +0 -0
  568. /package/dist/{ui → context}/EnsureMantine.d.ts +0 -0
  569. /package/dist/{ui → context}/EnsureMantine.js +0 -0
  570. /package/dist/{ui → context}/FramerMotionConfig.d.ts +0 -0
  571. /package/dist/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.css.d.ts +0 -0
  572. /package/dist/{ui/top-left → likec4diagram/ui/controls}/ChangeAutoLayoutButton.d.ts +0 -0
  573. /package/dist/{ui/top-left → likec4diagram/ui/controls}/ManualLayoutToolsButton.d.ts +0 -0
  574. /package/dist/{ui/top-left → likec4diagram/ui/controls}/_shared.d.ts +0 -0
  575. /package/dist/{ui → likec4diagram/ui/diagram-title}/DiagramTitlePanel.css.d.ts +0 -0
  576. /package/dist/{ui → likec4diagram/ui/diagram-title}/Link.js +0 -0
  577. /package/dist/{ui → likec4diagram/ui}/notation/NotationPanel.css.d.ts +0 -0
  578. /package/dist/{ui → likec4diagram/ui}/notation/index.d.ts +0 -0
  579. /package/dist/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.css.d.ts +0 -0
  580. /package/dist/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.d.ts +0 -0
  581. /package/src/{ui → context}/EnsureMantine.tsx +0 -0
  582. /package/src/{ui → likec4diagram/ui}/notation/index.ts +0 -0
@@ -0,0 +1,196 @@
1
+ import { rem } from '@mantine/core'
2
+ import { createVar, fallbackVar, globalStyle, style } from '@vanilla-extract/css'
3
+ import { easings, mantine, transitions, vars, whereDark, whereLight, xyvars } from '../../../theme-vars'
4
+ import { mixColor } from './edge.css'
5
+
6
+ export { dimmed, edgeVars } from './edge.css'
7
+
8
+ const labelBorderRadius = 4
9
+ export const stepEdgeNumber = style({
10
+ alignSelf: 'stretch',
11
+ flex: '0 0 auto',
12
+ fontWeight: 600,
13
+ fontSize: rem(14),
14
+ lineHeight: 1,
15
+ padding: '5px 5px',
16
+ textAlign: 'center',
17
+ minWidth: 22,
18
+ borderTopLeftRadius: labelBorderRadius,
19
+ borderBottomLeftRadius: labelBorderRadius,
20
+ backgroundColor: `color-mix(in srgb, ${vars.relation.labelBgColor}, ${mixColor} 5%)`,
21
+ fontVariantNumeric: 'tabular-nums',
22
+ selectors: {
23
+ [`${whereDark} :where([data-likec4-color="gray"]) &`]: {
24
+ backgroundColor: `color-mix(in srgb, ${vars.relation.labelBgColor}, ${mixColor} 15%)`,
25
+ },
26
+ [`:where([data-edge-active='true'], [data-edge-hovered="true"]) &`]: {
27
+ backgroundColor: 'transparent',
28
+ },
29
+ },
30
+ })
31
+
32
+ export const varLabelX = createVar('label-x')
33
+ export const varLabelY = createVar('label-y')
34
+
35
+ export const varTranslate = createVar('translate')
36
+
37
+ export const edgeLabelContainer = style({
38
+ top: 0,
39
+ left: 0,
40
+ position: 'absolute',
41
+ pointerEvents: 'all',
42
+ cursor: 'pointer',
43
+ width: 'auto',
44
+ height: 'auto',
45
+ backgroundColor: xyvars.edge.labelBgColor,
46
+ borderRadius: labelBorderRadius,
47
+ border: '0px solid transparent',
48
+ mixBlendMode: 'plus-lighter',
49
+ transform: varTranslate,
50
+ transition: transitions.fast,
51
+ vars: {
52
+ [varTranslate]: `translate(0,0)`,
53
+ },
54
+ selectors: {
55
+ '&[data-edge-hovered="true"]': {
56
+ mixBlendMode: 'normal',
57
+ transition: `all 140ms ${easings.inOut}`,
58
+ transform: `${varTranslate} scale(1.12)`,
59
+ },
60
+ '&:is([data-edge-dimmed="true"])': {
61
+ opacity: 0.3,
62
+ transition: 'opacity 600ms ease-in-out, filter 600ms ease-in-out',
63
+ transitionDelay: '200ms',
64
+ filter: `grayscale(0.85) ${fallbackVar(vars.safariAnimationHook, 'blur(1px)')}`,
65
+ willChange: 'opacity, filter',
66
+ },
67
+ [`${whereLight} &`]: {
68
+ mixBlendMode: 'screen',
69
+ },
70
+ },
71
+ })
72
+
73
+ export const edgeLabel = style({
74
+ fontFamily: vars.likec4.font,
75
+ padding: '3px 5px 5px 5px',
76
+ display: 'flex',
77
+ flexDirection: 'column',
78
+ alignItems: 'center',
79
+ width: 'max-content',
80
+ maxWidth: '100%',
81
+ gap: rem(4),
82
+ // position: 'absolute',
83
+ // pointerEvents: 'all',
84
+ // cursor: 'pointer',
85
+ // width: 'fit-content',
86
+ // // transformOrigin: '50% 50%',
87
+ // mixBlendMode: 'plus-lighter',
88
+ color: xyvars.edge.labelColor,
89
+ // // transform: varTranslate,
90
+ // transition: transitions.fast,
91
+ // vars: {
92
+ // [varTranslate]: `translate(${fallbackVar(varLabelX, '-50%')}, ${fallbackVar(varLabelY, '-50%')})`,
93
+ // },
94
+ //
95
+ selectors: {
96
+ [`&:has(${stepEdgeNumber})`]: {
97
+ flexDirection: 'row',
98
+ padding: 0,
99
+ gap: 0,
100
+ },
101
+ },
102
+ })
103
+
104
+ export const secondColumn = style({
105
+ display: 'contents',
106
+ selectors: {
107
+ [`${edgeLabel}:has(${stepEdgeNumber}) &`]: {
108
+ flex: 1,
109
+ display: 'flex',
110
+ flexDirection: 'column',
111
+ alignItems: 'center',
112
+ // width: 'max-content',
113
+ // maxWidth: '100%',
114
+ // gap: rem(4),
115
+ padding: '1px 5px 5px 5px',
116
+ },
117
+ },
118
+ ':empty': {
119
+ display: 'none !important',
120
+ },
121
+ })
122
+
123
+ export const edgeLabelText = style({
124
+ whiteSpaceCollapse: 'preserve-breaks',
125
+ fontSize: rem(14),
126
+ lineHeight: 1.185,
127
+ color: xyvars.edge.labelColor,
128
+ })
129
+
130
+ export const edgeLabelTechnology = style({
131
+ color: xyvars.edge.labelColor,
132
+ textAlign: 'center',
133
+ whiteSpaceCollapse: 'preserve-breaks',
134
+ fontSize: rem(11),
135
+ lineHeight: 1,
136
+ opacity: 0.75,
137
+ })
138
+
139
+ globalStyle(`${edgeLabel}:has(${stepEdgeNumber}) ${edgeLabelText}`, {
140
+ padding: '2px 5px 4px 2px',
141
+ })
142
+
143
+ export const edgeNoteCloseButton = style({
144
+ position: 'absolute',
145
+ top: 4,
146
+ right: 4,
147
+ zIndex: 9,
148
+ })
149
+
150
+ export const edgeNoteText = style({
151
+ userSelect: 'all',
152
+ textAlign: 'left',
153
+ whiteSpaceCollapse: 'preserve-breaks',
154
+ textWrap: 'pretty',
155
+ lineHeight: 1.25,
156
+ vars: {
157
+ '--text-fz': mantine.fontSizes.sm,
158
+ },
159
+ '@media': {
160
+ [mantine.largerThan('md')]: {
161
+ vars: {
162
+ '--text-fz': mantine.fontSizes.md,
163
+ },
164
+ },
165
+ },
166
+ })
167
+
168
+ export const actionBtn = style({
169
+ zIndex: 'calc(var(--layer-overlays, 1) + 1)',
170
+ pointerEvents: 'all',
171
+ color: xyvars.edge.labelColor,
172
+ cursor: 'pointer',
173
+ opacity: 0.75,
174
+ transition: transitions.fast,
175
+ backgroundColor: 'var(--ai-bg)',
176
+ vars: {
177
+ '--ai-bg': vars.relation.labelBgColor,
178
+ '--ai-hover': `color-mix(in srgb , ${vars.relation.labelBgColor}, ${mixColor} 10%)`,
179
+ },
180
+ ':hover': {
181
+ transform: 'translateY(1px) scale(1.15)',
182
+ },
183
+ ':active': {
184
+ transform: 'translateY(-1px) scale(0.9)',
185
+ },
186
+ selectors: {
187
+ ':where([data-edge-hovered="true"]) &': {
188
+ opacity: 1,
189
+ },
190
+ },
191
+ })
192
+ globalStyle(`${actionBtn} .tabler-icon`, {
193
+ width: '80%',
194
+ height: '80%',
195
+ strokeWidth: 2,
196
+ })
@@ -0,0 +1,136 @@
1
+ import { type DiagramEdge, extractStep, isStepEdgeId } from '@likec4/core'
2
+ import { type BoxProps, Box, createPolymorphicComponent, Text } from '@mantine/core'
3
+ import { assignInlineVars } from '@vanilla-extract/dynamic'
4
+ import { EdgeLabelRenderer } from '@xyflow/react'
5
+ import clsx from 'clsx'
6
+ import { type PropsWithChildren, forwardRef } from 'react'
7
+ import { isNumber, isTruthy } from 'remeda'
8
+ import type { UndefinedOnPartialDeep } from 'type-fest'
9
+ import { ZIndexes } from '../../const'
10
+ import type { EdgeProps } from '../../types'
11
+ import * as css from './EdgeLabel.css'
12
+
13
+ type Data = UndefinedOnPartialDeep<
14
+ Pick<
15
+ DiagramEdge,
16
+ | 'label'
17
+ | 'technology'
18
+ | 'labelBBox'
19
+ | 'color'
20
+ >
21
+ >
22
+
23
+ type EdgeLabelProps = PropsWithChildren<
24
+ BoxProps & {
25
+ /**
26
+ * label position with optional translate
27
+ */
28
+ labelPosition?: {
29
+ x?: number | undefined
30
+ y?: number | undefined
31
+ translate?: string | undefined
32
+ } | undefined
33
+
34
+ edgeProps: EdgeProps<Data>
35
+ }
36
+ >
37
+
38
+ const toCssVarValue = (value: number | string | undefined) => {
39
+ if (value === undefined) return undefined
40
+ return isNumber(value) ? `${value}px` : value
41
+ }
42
+
43
+ export const EdgeLabel = createPolymorphicComponent<'div', EdgeLabelProps>(
44
+ forwardRef<HTMLDivElement, EdgeLabelProps>(({
45
+ edgeProps: {
46
+ id,
47
+ data: {
48
+ technology,
49
+ hovered: isHovered = false,
50
+ active: isActive = false,
51
+ dimmed = false,
52
+ labelBBox,
53
+ ...data
54
+ },
55
+ },
56
+ labelPosition: labelXY,
57
+ className,
58
+ style,
59
+ children,
60
+ ...rest
61
+ }, ref) => {
62
+ const stepNum = isStepEdgeId(id) ? extractStep(id) : null
63
+
64
+ let zIndex = ZIndexes.Edge
65
+ if (isHovered || isActive) {
66
+ // Move above the elements
67
+ zIndex = ZIndexes.Element + 1
68
+ }
69
+
70
+ let labelX = labelXY?.x ?? labelBBox?.x,
71
+ labelY = labelXY?.y ?? labelBBox?.y
72
+
73
+ if (labelX === undefined || labelY === undefined) {
74
+ return null
75
+ }
76
+
77
+ const translate = labelXY?.translate
78
+
79
+ return (
80
+ <EdgeLabelRenderer>
81
+ <Box
82
+ className={clsx(
83
+ 'nodrag nopan',
84
+ css.edgeVars,
85
+ css.edgeLabelContainer,
86
+ !!dimmed && css.dimmed,
87
+ className,
88
+ )}
89
+ data-likec4-color={data.color ?? 'gray'}
90
+ data-edge-active={isActive}
91
+ data-edge-animated={isActive}
92
+ data-edge-hovered={isHovered}
93
+ data-edge-dimmed={dimmed}
94
+ style={{
95
+ top: toCssVarValue(labelY),
96
+ left: toCssVarValue(labelX),
97
+ // ...assignInlineVars({
98
+ // [css.varLabelX]: toCssVarValue(labelX),
99
+ // [css.varLabelY]: toCssVarValue(labelY),
100
+ // }),
101
+ ...(translate && assignInlineVars({
102
+ [css.varTranslate]: translate,
103
+ })),
104
+ ...(labelBBox && {
105
+ maxWidth: labelBBox.width + 18,
106
+ }),
107
+ zIndex,
108
+ ...style,
109
+ }}
110
+ >
111
+ <Box ref={ref} className={css.edgeLabel} {...rest}>
112
+ {stepNum !== null && (
113
+ <Box className={css.stepEdgeNumber}>
114
+ {stepNum}
115
+ </Box>
116
+ )}
117
+ <Box className={css.secondColumn}>
118
+ {isTruthy(data.label) && (
119
+ <Text component="div" className={css.edgeLabelText} lineClamp={5}>
120
+ {data.label}
121
+ </Text>
122
+ )}
123
+ {isTruthy(technology) && (
124
+ <Text component="div" className={css.edgeLabelTechnology}>
125
+ {'[ ' + technology + ' ]'}
126
+ </Text>
127
+ )}
128
+ {children}
129
+ </Box>
130
+ </Box>
131
+ </Box>
132
+ </EdgeLabelRenderer>
133
+ )
134
+ }),
135
+ )
136
+ EdgeLabel.displayName = 'EdgeLabel'
@@ -1,3 +1,4 @@
1
+ import { type RelationshipArrowType, nonexhaustive } from '@likec4/core'
1
2
  import type { SVGProps } from 'react'
2
3
 
3
4
  const Open = (props: SVGProps<SVGMarkerElement>) => (
@@ -163,7 +164,34 @@ export const EdgeMarkers = {
163
164
  Diamond,
164
165
  ODiamond,
165
166
  Dot,
166
- ODot
167
+ ODot,
167
168
  }
168
169
 
169
170
  export type EdgeMarkerType = keyof typeof EdgeMarkers
171
+
172
+ export function arrowTypeToMarker(arrowType?: RelationshipArrowType): EdgeMarkerType | undefined {
173
+ if (!arrowType || arrowType === 'none') {
174
+ return undefined
175
+ }
176
+ switch (arrowType) {
177
+ case 'normal':
178
+ return 'Arrow' as const
179
+ case 'crow':
180
+ return 'Crow' as const
181
+ case 'onormal':
182
+ return 'OArrow' as const
183
+ case 'diamond':
184
+ return 'Diamond' as const
185
+ case 'odiamond':
186
+ return 'ODiamond' as const
187
+ case 'open':
188
+ case 'vee':
189
+ return 'Open' as const
190
+ case 'dot':
191
+ return 'Dot' as const
192
+ case 'odot':
193
+ return `ODot` as const
194
+ default:
195
+ nonexhaustive(arrowType)
196
+ }
197
+ }
@@ -0,0 +1,89 @@
1
+ import type { DiagramEdge } from '@likec4/core'
2
+ import clsx from 'clsx'
3
+ import { type PointerEventHandler, forwardRef } from 'react'
4
+ import type { UndefinedOnPartialDeep } from 'type-fest'
5
+ import type { EdgeProps } from '../../types'
6
+ import * as css from './edge.css'
7
+ import { arrowTypeToMarker, EdgeMarkers } from './EdgeMarkers'
8
+
9
+ type Data = UndefinedOnPartialDeep<
10
+ Pick<
11
+ DiagramEdge,
12
+ | 'line'
13
+ | 'dir'
14
+ | 'tail'
15
+ | 'head'
16
+ >
17
+ >
18
+
19
+ type EdgePathProps = EdgeProps<Data> & {
20
+ svgPath: string
21
+ onEdgePointerDown?: PointerEventHandler<SVGGElement> | undefined
22
+ }
23
+
24
+ export const EdgePath = forwardRef<SVGPathElement, EdgePathProps>(({
25
+ id,
26
+ data: {
27
+ line,
28
+ dir,
29
+ tail,
30
+ head,
31
+ },
32
+ svgPath,
33
+ style,
34
+ interactionWidth,
35
+ onEdgePointerDown,
36
+ }, svgPathRef) => {
37
+ let markerStartName = arrowTypeToMarker(tail)
38
+ let markerEndName = arrowTypeToMarker(head ?? 'normal')
39
+ if (dir === 'back') {
40
+ ;[markerStartName, markerEndName] = [markerEndName, markerStartName]
41
+ }
42
+
43
+ const MarkerStart = markerStartName ? EdgeMarkers[markerStartName] : null
44
+ const MarkerEnd = markerEndName ? EdgeMarkers[markerEndName] : null
45
+
46
+ const isDotted = line === 'dotted'
47
+ const isDashed = isDotted || line === 'dashed'
48
+
49
+ let strokeDasharray: string | undefined
50
+ if (isDotted) {
51
+ strokeDasharray = '1,8'
52
+ } else if (isDashed) {
53
+ strokeDasharray = '8,10'
54
+ }
55
+
56
+ return (
57
+ <>
58
+ <path
59
+ className={clsx('react-flow__edge-interaction')}
60
+ d={svgPath}
61
+ fill="none"
62
+ stroke={'transparent'}
63
+ strokeWidth={interactionWidth ?? 10}
64
+ />
65
+ <g className={css.markerContext} onPointerDown={onEdgePointerDown}>
66
+ <defs>
67
+ {MarkerStart && <MarkerStart id={'start' + id} />}
68
+ {MarkerEnd && <MarkerEnd id={'end' + id} />}
69
+ </defs>
70
+ <path
71
+ className={clsx('react-flow__edge-path', css.edgePathBg)}
72
+ d={svgPath}
73
+ style={style}
74
+ strokeLinecap={'round'}
75
+ />
76
+ <path
77
+ ref={svgPathRef}
78
+ className={clsx('react-flow__edge-path', css.cssEdgePath)}
79
+ d={svgPath}
80
+ style={style}
81
+ strokeLinecap={'round'}
82
+ strokeDasharray={strokeDasharray}
83
+ markerStart={MarkerStart ? `url(#start${id})` : undefined}
84
+ markerEnd={MarkerEnd ? `url(#end${id})` : undefined}
85
+ />
86
+ </g>
87
+ </>
88
+ )
89
+ })
@@ -0,0 +1,122 @@
1
+ import { createVar, fallbackVar, globalStyle, keyframes, style } from '@vanilla-extract/css'
2
+ import { cssReactFlow } from '../../../LikeC4Diagram.css'
3
+ import { vars, xyvars } from '../../../theme-vars'
4
+ import { whereDark, whereLight } from '../../../theme-vars.css'
5
+
6
+ export const mixColor = createVar('mix-color')
7
+
8
+ export const edgeVars = style({
9
+ vars: {
10
+ [mixColor]: `black`,
11
+ [xyvars.edge.stroke]: vars.relation.lineColor,
12
+ [xyvars.edge.strokeSelected]: `color-mix(in srgb, ${vars.relation.lineColor}, ${mixColor} 35%)`,
13
+ [xyvars.edge.labelColor]: `color-mix(in srgb, ${vars.relation.labelColor}, rgba(255 255 255 / 0.85) 40%)`,
14
+ [xyvars.edge.labelBgColor]: `color-mix(in srgb, ${vars.relation.labelBgColor}, transparent 40%)`,
15
+ [xyvars.edge.strokeWidth]: '3',
16
+ },
17
+ })
18
+
19
+ globalStyle(`${whereDark} ${edgeVars}`, {
20
+ vars: {
21
+ [mixColor]: `white`,
22
+ [xyvars.edge.labelColor]: vars.relation.labelColor,
23
+ [xyvars.edge.labelBgColor]: `color-mix(in srgb, ${vars.relation.labelBgColor}, transparent 50%)`,
24
+ },
25
+ })
26
+
27
+ const isSelected = '.react-flow__edge.selected'
28
+
29
+ globalStyle(`:where(${isSelected}) ${edgeVars}`, {
30
+ vars: {
31
+ [xyvars.edge.stroke]: xyvars.edge.strokeSelected,
32
+ [xyvars.edge.strokeWidth]: '3',
33
+ },
34
+ })
35
+
36
+ globalStyle(`${edgeVars}:is([data-edge-hovered='true'],[data-edge-active='true'])`, {
37
+ vars: {
38
+ // [xyvars.edge.stroke]: `color-mix(in srgb, ${vars.relation.lineColor}, ${mixColor} 35%)`,
39
+ [xyvars.edge.stroke]: xyvars.edge.strokeSelected,
40
+ [xyvars.edge.strokeWidth]: '3',
41
+ },
42
+ })
43
+
44
+ globalStyle(`:where(${isSelected}) ${edgeVars}[data-edge-hovered='true']`, {
45
+ vars: {
46
+ [xyvars.edge.strokeWidth]: '4',
47
+ },
48
+ })
49
+
50
+ globalStyle(`${cssReactFlow} .react-flow__edges > svg`, {
51
+ mixBlendMode: 'plus-lighter',
52
+ })
53
+ globalStyle(`${whereLight} ${cssReactFlow} .react-flow__edges > svg`, {
54
+ mixBlendMode: 'screen',
55
+ })
56
+
57
+ export const dimmed = style({})
58
+
59
+ globalStyle(`${cssReactFlow} .react-flow__edges > svg:has(${dimmed})`, {
60
+ opacity: 0.6,
61
+ transition: 'opacity 600ms ease-in-out, filter 600ms ease-in-out',
62
+ transitionDelay: '200ms',
63
+ filter: `grayscale(0.85) ${fallbackVar(vars.safariAnimationHook, 'blur(1px)')}`,
64
+ willChange: 'opacity, filter',
65
+ })
66
+
67
+ export const edgePathBg = style({
68
+ // strokeWidth: xyvars.edge.strokeWidth,
69
+ strokeOpacity: 0.08,
70
+ // transition: 'stroke-width 175ms ease-in-out',
71
+ // transition: 'stroke-width 175ms ease-in-out, stroke-opacity 150ms ease-out',
72
+ transitionProperty: 'stroke-width, stroke-opacity',
73
+ transitionDuration: '155ms',
74
+ transitionTimingFunction: 'ease-out',
75
+ selectors: {
76
+ [`:where(${isSelected}, [data-edge-active='true'], [data-edge-hovered='true']) &`]: {
77
+ strokeWidth: `calc(${xyvars.edge.strokeWidth} + 8)`,
78
+ strokeOpacity: 0.15,
79
+ },
80
+ },
81
+ })
82
+
83
+ // To fix issue with marker not inheriting color from path - we need to create container
84
+ export const markerContext = style({
85
+ fill: xyvars.edge.stroke,
86
+ stroke: xyvars.edge.stroke,
87
+ })
88
+
89
+ const strokeKeyframes = keyframes({
90
+ 'from': {
91
+ strokeDashoffset: 18 * 2 + 10,
92
+ },
93
+ 'to': {
94
+ strokeDashoffset: 10,
95
+ },
96
+ })
97
+
98
+ export const cssEdgePath = style({
99
+ animationDuration: '800ms',
100
+ animationIterationCount: 'infinite',
101
+ animationTimingFunction: 'linear',
102
+ animationFillMode: 'both',
103
+ strokeDashoffset: 10,
104
+ selectors: {
105
+ [`:where([data-edge-hovered='true']) &`]: {
106
+ animationName: strokeKeyframes,
107
+ animationDelay: '450ms',
108
+ transition: 'stroke 130ms ease-out,stroke-width 130ms ease-out',
109
+ },
110
+ [`:where(${isSelected}, [data-edge-active='true'], [data-edge-animated='true']) &`]: {
111
+ animationName: strokeKeyframes,
112
+ animationDelay: '0ms',
113
+ transition: 'stroke 130ms ease-out,stroke-width 130ms ease-out',
114
+ },
115
+ [`:where([data-edge-dir='back']) &`]: {
116
+ animationDirection: 'reverse',
117
+ },
118
+ [`${dimmed} &`]: {
119
+ animationPlayState: 'paused',
120
+ },
121
+ },
122
+ })
@@ -0,0 +1,48 @@
1
+ import { style } from '@vanilla-extract/css'
2
+ import { transitions, vars } from '../../../theme-vars'
3
+
4
+ export const container = style({
5
+ position: 'absolute',
6
+ top: `calc(100% - 28px)`,
7
+ // transform: 'translateY(-100%)',
8
+ left: 0,
9
+ width: '100%',
10
+ minHeight: 28,
11
+ display: 'flex',
12
+ justifyContent: 'center',
13
+ alignItems: 'center',
14
+ zIndex: 10,
15
+ })
16
+
17
+ export const actionButtons = style({
18
+ display: 'flex',
19
+ justifyContent: 'center',
20
+ alignItems: 'center',
21
+ })
22
+
23
+ export const actionIcon = style({
24
+ color: vars.element.loContrast,
25
+ opacity: 0.75,
26
+ transition: transitions.fast,
27
+ 'vars': {
28
+ '--ai-bg-idle': `color-mix(in srgb , ${vars.element.fill}, transparent 99%)`,
29
+ '--ai-bg-container-hover': `color-mix(in srgb , ${vars.element.fill}, transparent 50%)`,
30
+ '--ai-bg': `var(--ai-bg-idle)`,
31
+ '--ai-bg-hover': `color-mix(in srgb , ${vars.element.fill} 65%, ${vars.element.stroke})`,
32
+ '--ai-hover': `color-mix(in srgb , ${vars.element.fill} 50%, ${vars.element.stroke})`,
33
+ },
34
+ background: `var(--ai-bg)`,
35
+ boxShadow: '1px 1px 3px 0px transparent',
36
+ selectors: {
37
+ [`:where([data-hovered='true']) &`]: {
38
+ opacity: 1,
39
+ boxShadow: '1px 1px 3px 0px rgba(0, 0, 0, 0.2)',
40
+ vars: {
41
+ '--ai-bg': `var(--ai-bg-hover)`,
42
+ },
43
+ },
44
+ },
45
+ })
46
+ // globalStyle(`${actionIcon} > *`, {
47
+ // pointerEvents: 'none',
48
+ // })
@@ -0,0 +1,73 @@
1
+ import { ActionIcon, Box } from '@mantine/core'
2
+ import clsx from 'clsx'
3
+ import { m } from 'framer-motion'
4
+ import { stopPropagation } from '../../../utils/xyflow'
5
+ import type { NodeProps } from '../../types'
6
+ import * as css from './ElementActionButtons.css'
7
+
8
+ type ElementActionButtonsProps = NodeProps & {
9
+ buttons: ElementActionButtons.Item[]
10
+ }
11
+
12
+ export function ElementActionButtons({
13
+ id,
14
+ selected = false,
15
+ data: {
16
+ hovered: isHovered = false,
17
+ },
18
+ buttons,
19
+ }: ElementActionButtonsProps) {
20
+ if (!buttons.length) {
21
+ return null
22
+ }
23
+ return (
24
+ <Box className={css.container}>
25
+ <Box
26
+ component={m.div}
27
+ layoutRoot
28
+ initial={false}
29
+ style={{
30
+ originY: 0,
31
+ gap: '6px',
32
+ }}
33
+ animate={{
34
+ opacity: (isHovered || selected) ? 1 : 0.75,
35
+ scale: isHovered ? 1.1 : (selected ? 0.9 : 0.8),
36
+ y: (isHovered || selected) ? 6 : 0,
37
+ }}
38
+ data-hovered={isHovered}
39
+ className={clsx('nodrag nopan', css.actionButtons)}
40
+ >
41
+ {buttons.map((button, index) => (
42
+ <m.div
43
+ key={`action-button-${id}-${button.key ?? index}`}
44
+ initial={false}
45
+ whileTap={{ scale: 1 }}
46
+ whileHover={{
47
+ scale: 1.35,
48
+ }}
49
+ >
50
+ <ActionIcon
51
+ className={css.actionIcon}
52
+ size={'md'}
53
+ radius="md"
54
+ // Otherwise node receives click event and is selected
55
+ onClick={button.onClick}
56
+ onDoubleClick={stopPropagation}
57
+ >
58
+ {button.icon}
59
+ </ActionIcon>
60
+ </m.div>
61
+ ))}
62
+ </Box>
63
+ </Box>
64
+ )
65
+ }
66
+
67
+ export namespace ElementActionButtons {
68
+ export type Item = {
69
+ key?: string
70
+ icon: React.ReactNode
71
+ onClick: (e: React.MouseEvent) => void
72
+ }
73
+ }