@likec4/diagram 1.17.1 → 1.19.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 (300) hide show
  1. package/LICENSE +1 -1
  2. package/dist/LikeC4CustomColors.d.ts +7 -0
  3. package/dist/LikeC4CustomColors.js +30 -0
  4. package/dist/LikeC4Diagram.css.d.ts +5 -0
  5. package/dist/LikeC4Diagram.css.js +13 -0
  6. package/dist/LikeC4Diagram.d.ts +6 -0
  7. package/dist/LikeC4Diagram.js +194 -0
  8. package/dist/LikeC4Diagram.props.d.ts +166 -0
  9. package/dist/LikeC4ModelProvider.d.ts +9 -0
  10. package/dist/LikeC4ModelProvider.js +12 -0
  11. package/dist/LikeC4Search.css.d.ts +1 -0
  12. package/dist/LikeC4Search.css.js +5 -0
  13. package/dist/LikeC4Search.d.ts +2 -0
  14. package/dist/LikeC4Search.js +96 -0
  15. package/dist/StaticLikeC4Diagram.d.ts +3 -0
  16. package/dist/StaticLikeC4Diagram.js +41 -0
  17. package/dist/_virtual/_commonjsHelpers.js +6 -0
  18. package/dist/controls/Text.d.ts +2 -0
  19. package/dist/controls/Text.js +7 -0
  20. package/dist/controls/action-button-bar/ActionButtonBar.css.d.ts +1 -0
  21. package/dist/controls/action-button-bar/ActionButtonBar.css.js +5 -0
  22. package/dist/controls/action-button-bar/ActionButtonBar.d.ts +9 -0
  23. package/dist/controls/action-button-bar/ActionButtonBar.js +100 -0
  24. package/dist/controls/action-button-bar/useActionButtonBarCtx.d.ts +10 -0
  25. package/dist/controls/action-button-bar/useActionButtonBarCtx.js +9 -0
  26. package/dist/controls/action-buttons/ActionButton.css.d.ts +1 -0
  27. package/dist/controls/action-buttons/ActionButton.css.js +5 -0
  28. package/dist/controls/action-buttons/ActionButton.d.ts +9 -0
  29. package/dist/controls/action-buttons/ActionButton.js +66 -0
  30. package/dist/controls/action-buttons/ActionButtons.d.ts +12 -0
  31. package/dist/controls/action-buttons/ActionButtons.js +99 -0
  32. package/dist/globals.css.d.ts +1 -0
  33. package/dist/globals.css.js +92 -0
  34. package/dist/hooks/index.d.ts +5 -0
  35. package/dist/hooks/useDiagramState.d.ts +6 -0
  36. package/dist/hooks/useDiagramState.js +27 -0
  37. package/dist/hooks/useMantinePortalProps.d.ts +9 -0
  38. package/dist/hooks/useMantinePortalProps.js +9 -0
  39. package/dist/hooks/useSetState.d.ts +2 -0
  40. package/dist/hooks/useSetState.js +19 -0
  41. package/dist/hooks/useUpdateEffect.d.ts +4 -0
  42. package/dist/hooks/useUpdateEffect.js +32 -0
  43. package/dist/hooks/useXYFlow.d.ts +270 -0
  44. package/dist/hooks/useXYFlow.js +20 -0
  45. package/dist/index.d.ts +11 -0
  46. package/dist/index.js +25 -0
  47. package/dist/likec4model/LikeC4ModelContext.d.ts +3 -0
  48. package/dist/likec4model/LikeC4ModelContext.js +5 -0
  49. package/dist/likec4model/index.d.ts +2 -0
  50. package/dist/likec4model/useLikeC4ElementsTree.d.ts +12 -0
  51. package/dist/likec4model/useLikeC4ElementsTree.js +25 -0
  52. package/dist/likec4model/useLikeC4Model.d.ts +20 -0
  53. package/dist/likec4model/useLikeC4Model.js +55 -0
  54. package/dist/overlays/OverlayContext.d.ts +10 -0
  55. package/dist/overlays/OverlayContext.js +9 -0
  56. package/dist/overlays/Overlays.css.d.ts +3 -0
  57. package/dist/overlays/Overlays.css.js +7 -0
  58. package/dist/overlays/Overlays.d.ts +2 -0
  59. package/dist/overlays/Overlays.js +137 -0
  60. package/dist/overlays/edge-details/EdgeDetailsXYFlow.d.ts +5 -0
  61. package/dist/overlays/edge-details/EdgeDetailsXYFlow.js +185 -0
  62. package/dist/overlays/edge-details/SelectEdge.css.d.ts +7 -0
  63. package/dist/overlays/edge-details/SelectEdge.css.js +17 -0
  64. package/dist/overlays/edge-details/SelectEdge.d.ts +5 -0
  65. package/dist/overlays/edge-details/SelectEdge.js +129 -0
  66. package/dist/overlays/edge-details/_types.d.ts +14 -0
  67. package/dist/overlays/edge-details/use-layouted-edge-details.d.ts +21 -0
  68. package/dist/overlays/edge-details/use-layouted-edge-details.js +270 -0
  69. package/dist/overlays/edge-details/xyflow/CompoundNode.d.ts +5 -0
  70. package/dist/overlays/edge-details/xyflow/CompoundNode.js +76 -0
  71. package/dist/overlays/edge-details/xyflow/ElementNode.d.ts +5 -0
  72. package/dist/overlays/edge-details/xyflow/ElementNode.js +159 -0
  73. package/dist/overlays/edge-details/xyflow/RelationshipEdge.d.ts +3 -0
  74. package/dist/overlays/edge-details/xyflow/RelationshipEdge.js +84 -0
  75. package/dist/overlays/edge-details/xyflow/styles.css.d.ts +9 -0
  76. package/dist/overlays/edge-details/xyflow/styles.css.js +21 -0
  77. package/dist/overlays/element-details/ElementDetailsCard.css.d.ts +16 -0
  78. package/dist/overlays/element-details/ElementDetailsCard.css.js +33 -0
  79. package/dist/overlays/element-details/ElementDetailsCard.d.ts +7 -0
  80. package/dist/overlays/element-details/ElementDetailsCard.js +484 -0
  81. package/dist/overlays/element-details/TabPanelDeployments.css.d.ts +4 -0
  82. package/dist/overlays/element-details/TabPanelDeployments.css.js +11 -0
  83. package/dist/overlays/element-details/TabPanelDeployments.d.ts +7 -0
  84. package/dist/overlays/element-details/TabPanelDeployments.js +173 -0
  85. package/dist/overlays/element-details/TabPanelRelationships.css.d.ts +5 -0
  86. package/dist/overlays/element-details/TabPanelRelationships.css.js +11 -0
  87. package/dist/overlays/element-details/TabPanelRelationships.d.ts +8 -0
  88. package/dist/overlays/element-details/TabPanelRelationships.js +157 -0
  89. package/dist/overlays/element-details/TabPanelStructure.css.d.ts +2 -0
  90. package/dist/overlays/element-details/TabPanelStructure.css.js +7 -0
  91. package/dist/overlays/element-details/TabPanelStructure.d.ts +25 -0
  92. package/dist/overlays/element-details/TabPanelStructure.js +91 -0
  93. package/dist/overlays/index.d.ts +1 -0
  94. package/dist/overlays/relationships-of/RelationshipsOverlay.d.ts +5 -0
  95. package/dist/overlays/relationships-of/RelationshipsOverlay.js +193 -0
  96. package/dist/overlays/relationships-of/RelationshipsXYFlow.d.ts +19 -0
  97. package/dist/overlays/relationships-of/RelationshipsXYFlow.js +290 -0
  98. package/dist/overlays/relationships-of/SelectElement.css.d.ts +2 -0
  99. package/dist/overlays/relationships-of/SelectElement.css.js +7 -0
  100. package/dist/overlays/relationships-of/SelectElement.d.ts +7 -0
  101. package/dist/overlays/relationships-of/SelectElement.js +126 -0
  102. package/dist/overlays/relationships-of/_types.d.ts +28 -0
  103. package/dist/overlays/relationships-of/use-layouted-relationships.d.ts +22 -0
  104. package/dist/overlays/relationships-of/use-layouted-relationships.js +496 -0
  105. package/dist/overlays/relationships-of/xyflow/CompoundNode.d.ts +6 -0
  106. package/dist/overlays/relationships-of/xyflow/CompoundNode.js +120 -0
  107. package/dist/overlays/relationships-of/xyflow/ElementNode.d.ts +6 -0
  108. package/dist/overlays/relationships-of/xyflow/ElementNode.js +194 -0
  109. package/dist/overlays/relationships-of/xyflow/EmptyNode.d.ts +5 -0
  110. package/dist/overlays/relationships-of/xyflow/EmptyNode.js +18 -0
  111. package/dist/overlays/relationships-of/xyflow/RelationshipEdge.d.ts +3 -0
  112. package/dist/overlays/relationships-of/xyflow/RelationshipEdge.js +123 -0
  113. package/dist/overlays/relationships-of/xyflow/styles.css.d.ts +14 -0
  114. package/dist/overlays/relationships-of/xyflow/styles.css.js +24 -0
  115. package/dist/overlays/shared/xyflow/RelationshipEdge.css.d.ts +4 -0
  116. package/dist/overlays/shared/xyflow/RelationshipEdge.css.js +12 -0
  117. package/dist/overlays/shared/xyflow/_types.d.ts +77 -0
  118. package/dist/state/DiagramContext.d.ts +1609 -0
  119. package/dist/state/DiagramContext.js +101 -0
  120. package/dist/state/aligners.d.ts +42 -0
  121. package/dist/state/aligners.js +349 -0
  122. package/dist/state/diagram-to-xyflow.d.ts +11 -0
  123. package/dist/state/diagram-to-xyflow.js +113 -0
  124. package/dist/state/diagramStore.d.ts +1705 -0
  125. package/dist/state/diagramStore.js +808 -0
  126. package/dist/state/diagramStore.layout.d.ts +4 -0
  127. package/dist/state/diagramStore.layout.js +56 -0
  128. package/dist/style.css +1 -0
  129. package/dist/theme-vars.css.d.ts +72 -0
  130. package/dist/theme-vars.css.js +6 -0
  131. package/dist/theme-vars.css.ts.vanilla.css.js +1 -0
  132. package/dist/theme-vars.d.ts +3 -0
  133. package/dist/theme-vars.js +5 -0
  134. package/dist/ui/DiagramTitlePanel.css.d.ts +4 -0
  135. package/dist/ui/DiagramTitlePanel.css.js +11 -0
  136. package/dist/ui/DiagramTitlePanel.d.ts +1 -0
  137. package/dist/ui/DiagramTitlePanel.js +159 -0
  138. package/dist/ui/DynamicViewWalkthrough.css.d.ts +4 -0
  139. package/dist/ui/DynamicViewWalkthrough.css.js +11 -0
  140. package/dist/ui/DynamicViewWalkthrough.d.ts +1 -0
  141. package/dist/ui/DynamicViewWalkthrough.js +156 -0
  142. package/dist/ui/EnsureMantine.d.ts +7 -0
  143. package/dist/ui/EnsureMantine.js +14 -0
  144. package/dist/ui/FramerMotionConfig.d.ts +2 -0
  145. package/dist/ui/FramerMotionConfig.js +14 -0
  146. package/dist/ui/Link.d.ts +4 -0
  147. package/dist/ui/Link.js +36 -0
  148. package/dist/ui/notation/NotationPanel.css.d.ts +6 -0
  149. package/dist/ui/notation/NotationPanel.css.js +16 -0
  150. package/dist/ui/notation/NotationPanel.d.ts +1 -0
  151. package/dist/ui/notation/NotationPanel.js +250 -0
  152. package/dist/ui/notation/index.d.ts +1 -0
  153. package/dist/ui/top-left/ChangeAutoLayoutButton.d.ts +2 -0
  154. package/dist/ui/top-left/ChangeAutoLayoutButton.js +159 -0
  155. package/dist/ui/top-left/ManualLayoutToolsButton.d.ts +2 -0
  156. package/dist/ui/top-left/ManualLayoutToolsButton.js +137 -0
  157. package/dist/ui/top-left/TopLeftPanel.d.ts +4 -0
  158. package/dist/ui/top-left/TopLeftPanel.js +211 -0
  159. package/dist/ui/top-left/_shared.d.ts +7 -0
  160. package/dist/ui/top-left/_shared.js +22 -0
  161. package/dist/ui/top-left/styles.css.d.ts +8 -0
  162. package/dist/ui/top-left/styles.css.js +17 -0
  163. package/dist/utils/types.d.ts +8 -0
  164. package/dist/utils/vector.d.ts +24 -0
  165. package/dist/utils/vector.js +55 -0
  166. package/dist/xyflow/EdgeMarkers.d.ts +12 -0
  167. package/dist/xyflow/EdgeMarkers.js +192 -0
  168. package/dist/xyflow/FitviewOnDiagramChange.d.ts +4 -0
  169. package/dist/xyflow/FitviewOnDiagramChange.js +72 -0
  170. package/dist/xyflow/SelectEdgesOnNodeFocus.d.ts +1 -0
  171. package/dist/xyflow/SelectEdgesOnNodeFocus.js +96 -0
  172. package/dist/xyflow/XYFlow.d.ts +8 -0
  173. package/dist/xyflow/XYFlow.js +145 -0
  174. package/dist/xyflow/XYFlowBackground.d.ts +10 -0
  175. package/dist/xyflow/XYFlowBackground.js +25 -0
  176. package/dist/xyflow/XYFlowInner.d.ts +8 -0
  177. package/dist/xyflow/XYFlowInner.js +41 -0
  178. package/dist/xyflow/const.d.ts +7 -0
  179. package/dist/xyflow/const.js +12 -0
  180. package/dist/xyflow/edges/EdgeLabel.d.ts +7 -0
  181. package/dist/xyflow/edges/EdgeLabel.js +160 -0
  182. package/dist/xyflow/edges/RelationshipEdge.d.ts +6 -0
  183. package/dist/xyflow/edges/RelationshipEdge.js +443 -0
  184. package/dist/xyflow/edges/RelationshipsDropdownMenu.css.d.ts +4 -0
  185. package/dist/xyflow/edges/RelationshipsDropdownMenu.css.js +11 -0
  186. package/dist/xyflow/edges/RelationshipsDropdownMenu.d.ts +13 -0
  187. package/dist/xyflow/edges/RelationshipsDropdownMenu.js +211 -0
  188. package/dist/xyflow/edges/edges.css.d.ts +17 -0
  189. package/dist/xyflow/edges/edges.css.js +37 -0
  190. package/dist/xyflow/edges/utils.d.ts +16 -0
  191. package/dist/xyflow/edges/utils.js +24 -0
  192. package/dist/xyflow/nodes/AnimateVariants.d.ts +1313 -0
  193. package/dist/xyflow/nodes/AnimateVariants.js +123 -0
  194. package/dist/xyflow/nodes/Node.css.d.ts +3 -0
  195. package/dist/xyflow/nodes/Node.css.js +9 -0
  196. package/dist/xyflow/nodes/compound/CompoundNode.css.d.ts +14 -0
  197. package/dist/xyflow/nodes/compound/CompoundNode.css.js +27 -0
  198. package/dist/xyflow/nodes/compound/CompoundNode.d.ts +6 -0
  199. package/dist/xyflow/nodes/compound/CompoundNode.js +216 -0
  200. package/dist/xyflow/nodes/compound/index.d.ts +1 -0
  201. package/dist/xyflow/nodes/element/ElementLink.css.d.ts +3 -0
  202. package/dist/xyflow/nodes/element/ElementLink.d.ts +6 -0
  203. package/dist/xyflow/nodes/element/ElementNode.d.ts +6 -0
  204. package/dist/xyflow/nodes/element/ElementNode.js +190 -0
  205. package/dist/xyflow/nodes/element/ElementShapeSvg.d.ts +17 -0
  206. package/dist/xyflow/nodes/element/ElementShapeSvg.js +175 -0
  207. package/dist/xyflow/nodes/element/element.css.d.ts +18 -0
  208. package/dist/xyflow/nodes/element/element.css.js +31 -0
  209. package/dist/xyflow/nodes/element/index.d.ts +1 -0
  210. package/dist/xyflow/nodes/shared/ElementIcon.d.ts +8 -0
  211. package/dist/xyflow/nodes/shared/ElementIcon.js +38 -0
  212. package/dist/xyflow/nodes/shared/Toolbar.d.ts +9 -0
  213. package/dist/xyflow/nodes/shared/Toolbar.js +436 -0
  214. package/dist/xyflow/types.d.ts +36 -0
  215. package/dist/xyflow/useLayoutConstraints.d.ts +42 -0
  216. package/dist/xyflow/useLayoutConstraints.js +226 -0
  217. package/dist/xyflow/useXYFlowEvents.d.ts +160 -0
  218. package/dist/xyflow/useXYFlowEvents.js +275 -0
  219. package/dist/xyflow/utils.d.ts +22 -0
  220. package/dist/xyflow/utils.js +72 -0
  221. package/package.json +40 -31
  222. package/src/LikeC4Diagram.props.ts +21 -12
  223. package/src/LikeC4Diagram.tsx +8 -10
  224. package/src/LikeC4Search.css.ts +12 -0
  225. package/src/LikeC4Search.tsx +45 -93
  226. package/src/controls/Text.ts +5 -0
  227. package/src/controls/action-button-bar/ActionButtonBar.css.ts +13 -0
  228. package/src/controls/action-button-bar/ActionButtonBar.tsx +138 -0
  229. package/src/controls/action-button-bar/useActionButtonBarCtx.ts +13 -0
  230. package/src/controls/action-buttons/ActionButton.css.ts +29 -0
  231. package/src/controls/action-buttons/ActionButton.tsx +66 -0
  232. package/src/controls/action-buttons/ActionButtons.tsx +138 -0
  233. package/src/hooks/useDiagramState.ts +8 -3
  234. package/src/hooks/useXYFlow.ts +9 -8
  235. package/src/index.ts +12 -6
  236. package/src/likec4model/index.ts +12 -2
  237. package/src/likec4model/useLikeC4ElementsTree.ts +6 -13
  238. package/src/likec4model/useLikeC4Model.ts +21 -11
  239. package/src/overlays/Overlays.tsx +96 -63
  240. package/src/overlays/edge-details/EdgeDetailsXYFlow.tsx +18 -10
  241. package/src/overlays/edge-details/_types.ts +13 -33
  242. package/src/overlays/edge-details/use-layouted-edge-details.ts +35 -26
  243. package/src/overlays/edge-details/xyflow/CompoundNode.tsx +3 -11
  244. package/src/overlays/edge-details/xyflow/ElementNode.tsx +8 -13
  245. package/src/overlays/edge-details/xyflow/RelationshipEdge.tsx +7 -7
  246. package/src/overlays/edge-details/xyflow/styles.css.ts +1 -59
  247. package/src/overlays/element-details/ElementDetailsCard.tsx +91 -78
  248. package/src/overlays/element-details/TabPanelDeployments.css.ts +69 -0
  249. package/src/overlays/element-details/TabPanelDeployments.tsx +217 -0
  250. package/src/overlays/element-details/TabPanelRelationships.tsx +8 -9
  251. package/src/overlays/element-details/TabPanelStructure.tsx +10 -10
  252. package/src/overlays/relationships-of/RelationshipsOverlay.tsx +1 -1
  253. package/src/overlays/relationships-of/RelationshipsXYFlow.tsx +26 -34
  254. package/src/overlays/relationships-of/SelectElement.tsx +2 -2
  255. package/src/overlays/relationships-of/_types.ts +20 -58
  256. package/src/overlays/relationships-of/use-layouted-relationships.ts +54 -59
  257. package/src/overlays/relationships-of/xyflow/CompoundNode.tsx +10 -16
  258. package/src/overlays/relationships-of/xyflow/ElementNode.tsx +24 -21
  259. package/src/overlays/relationships-of/xyflow/EmptyNode.tsx +4 -7
  260. package/src/overlays/relationships-of/xyflow/RelationshipEdge.tsx +16 -15
  261. package/src/overlays/shared/xyflow/RelationshipEdge.css.ts +60 -0
  262. package/src/overlays/shared/xyflow/_types.ts +87 -0
  263. package/src/state/diagram-to-xyflow.ts +6 -7
  264. package/src/state/diagramStore.layout.ts +3 -4
  265. package/src/state/diagramStore.ts +63 -48
  266. package/src/theme-vars.css.ts +81 -0
  267. package/src/theme-vars.ts +8 -81
  268. package/src/ui/DiagramTitlePanel.tsx +7 -34
  269. package/src/ui/Link.tsx +40 -0
  270. package/src/ui/notation/NotationPanel.tsx +4 -2
  271. package/src/ui/top-left/ChangeAutoLayoutButton.tsx +2 -2
  272. package/src/ui/top-left/TopLeftPanel.tsx +5 -5
  273. package/src/utils/types.ts +6 -0
  274. package/src/xyflow/SelectEdgesOnNodeFocus.tsx +3 -3
  275. package/src/xyflow/XYFlow.tsx +2 -2
  276. package/src/xyflow/edges/EdgeLabel.tsx +26 -19
  277. package/src/xyflow/edges/RelationshipEdge.tsx +5 -3
  278. package/src/xyflow/edges/RelationshipsDropdownMenu.tsx +23 -10
  279. package/src/xyflow/edges/edges.css.ts +68 -74
  280. package/src/xyflow/edges/utils.ts +6 -6
  281. package/src/xyflow/nodes/AnimateVariants.ts +143 -0
  282. package/src/xyflow/nodes/Node.css.ts +44 -0
  283. package/src/xyflow/nodes/compound/CompoundNode.css.ts +27 -75
  284. package/src/xyflow/nodes/compound/CompoundNode.tsx +82 -163
  285. package/src/xyflow/nodes/element/ElementLink.tsx +2 -3
  286. package/src/xyflow/nodes/element/ElementNode.tsx +73 -252
  287. package/src/xyflow/nodes/element/element.css.ts +40 -64
  288. package/src/xyflow/nodes/shared/ElementIcon.tsx +1 -1
  289. package/src/xyflow/nodes/shared/Toolbar.tsx +51 -35
  290. package/src/xyflow/types.ts +48 -51
  291. package/src/xyflow/useLayoutConstraints.ts +10 -10
  292. package/src/xyflow/useXYFlowEvents.ts +31 -35
  293. package/src/xyflow/utils.ts +2 -2
  294. package/src/ui/OptionsPanel.css.ts +0 -9
  295. package/src/ui/OptionsPanel.tsx +0 -70
  296. package/src/ui/options/EdgeOptions.tsx +0 -142
  297. package/src/ui/options/NodeOptions.tsx +0 -362
  298. package/src/xyflow/nodes/element/ElementDetails.css.ts +0 -101
  299. package/src/xyflow/nodes/element/ElementDetails.tsx +0 -393
  300. package/src/xyflow/nodes/use-animate-variants.tsx +0 -64
@@ -0,0 +1,123 @@
1
+ import { fallbackVar } from "../../node_modules/@vanilla-extract/css/dist/vanilla-extract-css.browser.esm.js";
2
+ import { useState, useMemo } from "react";
3
+ import { isNumber, isString, isEmpty } from "remeda";
4
+ import { vars } from "../../theme-vars.css.js";
5
+ const DEFAULT_SCALE_BY = 0;
6
+ const SELECTED_SCALE_BY = 16;
7
+ const HOVERED_SCALE_BY = 12;
8
+ const TAP_SCALE_BY = -16;
9
+ const DELAY_NODE = 0.1;
10
+ const DELAY_NODE_CHILDREN = 0.06;
11
+ const DIMMED_OPACITY = 0.15;
12
+ const DIMMED_DELAY = 0.2;
13
+ const NodeVariants = (width, height, opts) => {
14
+ const {
15
+ selectedScaleBy = SELECTED_SCALE_BY,
16
+ hoveredScaleBy = HOVERED_SCALE_BY,
17
+ tapScaleBy = TAP_SCALE_BY
18
+ } = opts ?? {};
19
+ const maxwh = Math.max(width, height);
20
+ const scaleBy = (diffPx) => ({
21
+ scale: (maxwh + diffPx) / maxwh
22
+ // scaleY: (maxwh + diffPx) / maxwh,
23
+ });
24
+ return {
25
+ dimmed: {
26
+ filter: `grayscale(0.85) ${fallbackVar(vars.safariAnimationHook, "blur(1px)")}`,
27
+ opacity: DIMMED_OPACITY,
28
+ transition: {
29
+ delay: DIMMED_DELAY,
30
+ ease: "easeInOut"
31
+ },
32
+ willChange: "opacity, filter"
33
+ },
34
+ idle: {
35
+ ...scaleBy(DEFAULT_SCALE_BY),
36
+ transition: {
37
+ delay: DELAY_NODE,
38
+ delayChildren: DELAY_NODE_CHILDREN
39
+ },
40
+ filter: `grayscale(0) ${fallbackVar(vars.safariAnimationHook, "blur(0px)")}`
41
+ },
42
+ selected: {
43
+ ...scaleBy(selectedScaleBy)
44
+ },
45
+ hovered: (_, { scale }) => ({
46
+ ...scaleBy(hoveredScaleBy),
47
+ transition: !isNumber(scale) || scale === 1 ? {
48
+ delay: DELAY_NODE,
49
+ delayChildren: DELAY_NODE_CHILDREN
50
+ } : {}
51
+ }),
52
+ tap: {
53
+ ...scaleBy(tapScaleBy)
54
+ }
55
+ };
56
+ };
57
+ function useFramerAnimateVariants() {
58
+ const [variants, setVariants] = useState(null);
59
+ const handlers = useMemo(() => {
60
+ const getTarget = (e) => {
61
+ var _a, _b;
62
+ try {
63
+ return ((_b = (_a = e == null ? void 0 : e.target) == null ? void 0 : _a.closest("[data-animate-target]")) == null ? void 0 : _b.getAttribute("data-animate-target")) ?? null;
64
+ } catch (_e) {
65
+ console.warn(`Failed to get animate target`, _e);
66
+ return null;
67
+ }
68
+ };
69
+ const onHoverStart = (e) => {
70
+ e == null ? void 0 : e.stopPropagation();
71
+ const hoverTarget = getTarget(e);
72
+ if (!isString(hoverTarget)) {
73
+ setVariants(null);
74
+ return;
75
+ }
76
+ if (isEmpty(hoverTarget)) {
77
+ setVariants(["hovered"]);
78
+ return;
79
+ }
80
+ setVariants(["hovered", `hovered:${hoverTarget}`]);
81
+ };
82
+ const resetVariants = (e) => {
83
+ e == null ? void 0 : e.stopPropagation();
84
+ const hoverTarget = getTarget(e);
85
+ if (!isString(hoverTarget) || isEmpty(hoverTarget)) {
86
+ setVariants(null);
87
+ return;
88
+ }
89
+ setVariants((v) => (v == null ? void 0 : v.filter((v2) => !v2.includes(hoverTarget))) ?? null);
90
+ };
91
+ return {
92
+ onTapStart: (e) => {
93
+ e == null ? void 0 : e.stopPropagation();
94
+ const tapTarget = getTarget(e);
95
+ if (!isString(tapTarget)) {
96
+ setVariants(null);
97
+ return;
98
+ }
99
+ if (isEmpty(tapTarget)) {
100
+ setVariants([
101
+ "hovered",
102
+ "tap"
103
+ ]);
104
+ } else {
105
+ setVariants([
106
+ "hovered",
107
+ `hovered:${tapTarget}`,
108
+ `tap:${tapTarget}`
109
+ ]);
110
+ }
111
+ },
112
+ onHoverStart,
113
+ onHoverEnd: resetVariants,
114
+ onTapCancel: resetVariants,
115
+ onTap: onHoverStart
116
+ };
117
+ }, [setVariants]);
118
+ return [variants, handlers];
119
+ }
120
+ export {
121
+ NodeVariants,
122
+ useFramerAnimateVariants
123
+ };
@@ -0,0 +1,3 @@
1
+ export declare const topLeftBtnContainer: string;
2
+ export declare const topRightBtnContainer: string;
3
+ export declare const bottomBtnContainer: string;
@@ -0,0 +1,9 @@
1
+ /* empty css */
2
+ var topLeftBtnContainer = "_12hvjem0";
3
+ var topRightBtnContainer = "_12hvjem1";
4
+ var bottomBtnContainer = "_12hvjem2";
5
+ export {
6
+ bottomBtnContainer,
7
+ topLeftBtnContainer,
8
+ topRightBtnContainer
9
+ };
@@ -0,0 +1,14 @@
1
+ export declare const containerForFramer: string;
2
+ export declare const container: string;
3
+ export declare const nodeHandlerInCenter: string;
4
+ export declare const varOpacity: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
5
+ export declare const varBorderColor: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
6
+ export declare const varBorderRadius: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
7
+ export declare const varBorderTransparency: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
8
+ export declare const compoundBody: string;
9
+ export declare const compoundTitle: string;
10
+ export declare const withNavigation: string;
11
+ export declare const transparent: string;
12
+ export declare const title: string;
13
+ export declare const indicator: string;
14
+ export declare const elementIcon: string;
@@ -0,0 +1,27 @@
1
+ /* empty css */
2
+ var containerForFramer = "lbtzdo0";
3
+ var container = "lbtzdo2";
4
+ var nodeHandlerInCenter = "lbtzdo3";
5
+ var varOpacity = "var(--lbtzdo4)";
6
+ var varBorderTransparency = "var(--lbtzdo7)";
7
+ var compoundBody = "lbtzdo8";
8
+ var compoundTitle = "lbtzdo9";
9
+ var withNavigation = "lbtzdoa";
10
+ var transparent = "lbtzdoc";
11
+ var title = "lbtzdod";
12
+ var indicator = "lbtzdoh";
13
+ var elementIcon = "lbtzdoj";
14
+ export {
15
+ compoundBody,
16
+ compoundTitle,
17
+ container,
18
+ containerForFramer,
19
+ elementIcon,
20
+ indicator,
21
+ nodeHandlerInCenter,
22
+ title,
23
+ transparent,
24
+ varBorderTransparency,
25
+ varOpacity,
26
+ withNavigation
27
+ };
@@ -0,0 +1,6 @@
1
+ import { NodeProps } from '@xyflow/react';
2
+ import { DiagramFlowTypes } from '../../types';
3
+ import { NamedExoticComponent } from 'react';
4
+ type CompoundNodeProps = NodeProps<DiagramFlowTypes.CompoundNode>;
5
+ export declare const CompoundNodeMemo: NamedExoticComponent<CompoundNodeProps>;
6
+ export {};
@@ -0,0 +1,216 @@
1
+ import { jsxs, Fragment, jsx } from "react/jsx-runtime";
2
+ import { DiagramNode } from "@likec4/core";
3
+ import { Box, Text } from "@mantine/core";
4
+ import { useDebouncedValue } from "@mantine/hooks";
5
+ import { assignInlineVars } from "../../../node_modules/@vanilla-extract/dynamic/dist/vanilla-extract-dynamic.esm.js";
6
+ import { Handle, Position } from "@xyflow/react";
7
+ import clsx from "clsx";
8
+ import { deepEqual } from "fast-equals";
9
+ import { m } from "framer-motion";
10
+ import { memo, useState } from "react";
11
+ import { clamp } from "remeda";
12
+ import { ActionButtonBar } from "../../../controls/action-button-bar/ActionButtonBar.js";
13
+ import { OpenDetailsButton, NavigateToButton } from "../../../controls/action-buttons/ActionButtons.js";
14
+ import { useDiagramState } from "../../../hooks/useDiagramState.js";
15
+ import { toDomPrecision } from "../../utils.js";
16
+ import { useFramerAnimateVariants, NodeVariants } from "../AnimateVariants.js";
17
+ import { topRightBtnContainer, topLeftBtnContainer } from "../Node.css.js";
18
+ import { ElementIcon } from "../shared/ElementIcon.js";
19
+ import { CompoundToolbar } from "../shared/Toolbar.js";
20
+ import { elementIcon, containerForFramer, container, indicator, compoundBody, transparent, varBorderTransparency, varOpacity, compoundTitle, withNavigation, title, nodeHandlerInCenter } from "./CompoundNode.css.js";
21
+ const isEqualProps = (prev, next) => prev.id === next.id && deepEqual(prev.selected ?? false, next.selected ?? false) && deepEqual(prev.dragging ?? false, next.dragging ?? false) && deepEqual(prev.data, next.data);
22
+ const CompoundNodeMemo = /* @__PURE__ */ memo(({
23
+ id,
24
+ selected = false,
25
+ dragging = false,
26
+ data: {
27
+ isViewGroup,
28
+ element
29
+ },
30
+ width,
31
+ height
32
+ }) => {
33
+ const modelRef = DiagramNode.modelRef(element);
34
+ const { depth, style, color } = element;
35
+ const isNotViewGroup = !isViewGroup;
36
+ const opacity = clamp((style.opacity ?? 100) / 100, {
37
+ min: 0,
38
+ max: 1
39
+ });
40
+ const MAX_TRANSPARENCY = 40;
41
+ const borderTransparency = clamp(MAX_TRANSPARENCY - opacity * MAX_TRANSPARENCY, {
42
+ min: 0,
43
+ max: MAX_TRANSPARENCY
44
+ });
45
+ const {
46
+ viewId,
47
+ isEditable,
48
+ isDimmed,
49
+ isInteractive,
50
+ isNavigable,
51
+ renderIcon,
52
+ isInActiveOverlay,
53
+ enableElementDetails
54
+ } = useDiagramState((s) => {
55
+ var _a, _b;
56
+ return {
57
+ viewId: s.view.id,
58
+ isEditable: s.readonly !== true,
59
+ isDimmed: s.dimmed.has(id),
60
+ isInteractive: s.nodesDraggable || s.nodesSelectable || s.enableElementDetails || !!s.onNavigateTo && !!element.navigateTo,
61
+ // If this is a view group, we don't want to show the navigate button
62
+ isNavigable: isNotViewGroup && !!s.onNavigateTo && !!element.navigateTo,
63
+ renderIcon: s.renderIcon,
64
+ isInActiveOverlay: (((_a = s.activeOverlay) == null ? void 0 : _a.elementDetails) ?? ((_b = s.activeOverlay) == null ? void 0 : _b.relationshipsOf)) === id,
65
+ enableElementDetails: isNotViewGroup && s.enableElementDetails
66
+ };
67
+ });
68
+ const w = toDomPrecision(width ?? element.width);
69
+ const h = toDomPrecision(height ?? element.height);
70
+ let animateVariant;
71
+ switch (true) {
72
+ case isInActiveOverlay:
73
+ animateVariant = "idle";
74
+ break;
75
+ case (dragging && selected):
76
+ animateVariant = "selected";
77
+ break;
78
+ case dragging:
79
+ animateVariant = "idle";
80
+ break;
81
+ case isDimmed:
82
+ animateVariant = "dimmed";
83
+ break;
84
+ case selected:
85
+ animateVariant = "selected";
86
+ break;
87
+ default:
88
+ animateVariant = "idle";
89
+ }
90
+ const [animateVariants, animateHandlers] = useFramerAnimateVariants();
91
+ if (!dragging && !isInActiveOverlay) {
92
+ animateVariant = animateVariants ?? animateVariant;
93
+ }
94
+ const isHovered = Array.isArray(animateVariant) && animateVariant.includes("hovered");
95
+ const _isToolbarVisible = isNotViewGroup && (selected && !dragging || isHovered);
96
+ const [isToolbarVisible] = useDebouncedValue(_isToolbarVisible, _isToolbarVisible ? 500 : 300);
97
+ const nodeVariants = NodeVariants(w, h, {
98
+ selectedScaleBy: 0,
99
+ hoveredScaleBy: 0,
100
+ tapScaleBy: -10
101
+ });
102
+ const [previewColor, setPreviewColor] = useState(null);
103
+ const elementIcon$1 = ElementIcon({
104
+ element,
105
+ viewId,
106
+ className: elementIcon,
107
+ renderIcon
108
+ });
109
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
110
+ isEditable && /* @__PURE__ */ jsx(
111
+ CompoundToolbar,
112
+ {
113
+ isVisible: isToolbarVisible,
114
+ element,
115
+ align: "start",
116
+ onColorPreview: setPreviewColor
117
+ }
118
+ ),
119
+ /* @__PURE__ */ jsx(
120
+ Box,
121
+ {
122
+ component: m.div,
123
+ variants: nodeVariants,
124
+ layoutId: `${viewId}:element:${id}`,
125
+ className: containerForFramer,
126
+ children: /* @__PURE__ */ jsxs(
127
+ Box,
128
+ {
129
+ component: m.div,
130
+ className: clsx(
131
+ container,
132
+ "likec4-compound-node",
133
+ opacity < 1 && "likec4-compound-transparent"
134
+ ),
135
+ initial: false,
136
+ variants: nodeVariants,
137
+ animate: animateVariant,
138
+ ...isInteractive && animateHandlers,
139
+ mod: {
140
+ "animate-target": "",
141
+ "compound-depth": depth,
142
+ "likec4-color": previewColor ?? color
143
+ },
144
+ tabIndex: -1,
145
+ children: [
146
+ /* @__PURE__ */ jsx("svg", { className: indicator, children: /* @__PURE__ */ jsx(
147
+ "rect",
148
+ {
149
+ x: 0,
150
+ y: 0,
151
+ width: "100%",
152
+ height: "100%",
153
+ rx: 6
154
+ }
155
+ ) }),
156
+ /* @__PURE__ */ jsx(
157
+ Box,
158
+ {
159
+ className: clsx(
160
+ compoundBody,
161
+ opacity < 1 && transparent,
162
+ "likec4-compound"
163
+ ),
164
+ style: {
165
+ ...opacity < 1 && {
166
+ ...assignInlineVars({
167
+ [varBorderTransparency]: `${borderTransparency}%`,
168
+ [varOpacity]: opacity.toFixed(2)
169
+ }),
170
+ ...style.border === "none" ? {
171
+ borderColor: "transparent"
172
+ } : {
173
+ borderStyle: style.border ?? "dashed"
174
+ }
175
+ }
176
+ },
177
+ children: /* @__PURE__ */ jsxs(
178
+ Box,
179
+ {
180
+ className: clsx(
181
+ compoundTitle,
182
+ isNavigable && withNavigation,
183
+ "likec4-compound-title"
184
+ ),
185
+ children: [
186
+ elementIcon$1,
187
+ /* @__PURE__ */ jsx(
188
+ Text,
189
+ {
190
+ component: m.div,
191
+ layoutId: `${viewId}:element:title:${id}`,
192
+ className: title,
193
+ children: element.title
194
+ },
195
+ `${viewId}:element:title:${id}`
196
+ ),
197
+ enableElementDetails && !!modelRef && /* @__PURE__ */ jsx(Box, { className: clsx(topRightBtnContainer), children: /* @__PURE__ */ jsx(OpenDetailsButton, { fqn: modelRef, ...isInteractive && animateHandlers }) })
198
+ ]
199
+ }
200
+ )
201
+ }
202
+ ),
203
+ isNavigable && /* @__PURE__ */ jsx(Box, { className: clsx(topLeftBtnContainer), children: /* @__PURE__ */ jsx(ActionButtonBar, { shiftX: "left", children: /* @__PURE__ */ jsx(NavigateToButton, { xynodeId: id, ...isInteractive && animateHandlers }) }) })
204
+ ]
205
+ }
206
+ )
207
+ },
208
+ `${viewId}:element:${id}`
209
+ ),
210
+ /* @__PURE__ */ jsx(Handle, { type: "target", position: Position.Top, className: nodeHandlerInCenter }),
211
+ /* @__PURE__ */ jsx(Handle, { type: "source", position: Position.Top, className: nodeHandlerInCenter })
212
+ ] });
213
+ }, isEqualProps);
214
+ export {
215
+ CompoundNodeMemo
216
+ };
@@ -0,0 +1 @@
1
+ export { CompoundNodeMemo as CompoundNode } from './CompoundNode';
@@ -0,0 +1,3 @@
1
+ export declare const elementLink: string;
2
+ export declare const trigger: string;
3
+ export declare const linkButton: string;
@@ -0,0 +1,6 @@
1
+ import { DiagramFlowTypes } from '../../types';
2
+ type ElementLinkProps = {
3
+ element: DiagramFlowTypes.Node['data']['element'];
4
+ };
5
+ export declare function ElementLink({ element }: ElementLinkProps): import("react/jsx-runtime").JSX.Element;
6
+ export {};
@@ -0,0 +1,6 @@
1
+ import { NodeProps } from '@xyflow/react';
2
+ import { DiagramFlowTypes } from '../../types';
3
+ import { NamedExoticComponent } from 'react';
4
+ type ElementNodeProps = NodeProps<DiagramFlowTypes.ElementNode>;
5
+ export declare const ElementNodeMemo: NamedExoticComponent<ElementNodeProps>;
6
+ export {};
@@ -0,0 +1,190 @@
1
+ import { jsxs, Fragment, jsx } from "react/jsx-runtime";
2
+ import { DiagramNode } from "@likec4/core";
3
+ import { Box } from "@mantine/core";
4
+ import { useDebouncedValue } from "@mantine/hooks";
5
+ import { Handle, Position } from "@xyflow/react";
6
+ import clsx from "clsx";
7
+ import { deepEqual } from "fast-equals";
8
+ import { m } from "framer-motion";
9
+ import { memo, useState } from "react";
10
+ import { isTruthy } from "remeda";
11
+ import { ActionButtonBar } from "../../../controls/action-button-bar/ActionButtonBar.js";
12
+ import { NavigateToButton, BrowseRelationshipsButton, OpenDetailsButton } from "../../../controls/action-buttons/ActionButtons.js";
13
+ import { Text } from "../../../controls/Text.js";
14
+ import { useDiagramState } from "../../../hooks/useDiagramState.js";
15
+ import { toDomPrecision } from "../../utils.js";
16
+ import { useFramerAnimateVariants, NodeVariants } from "../AnimateVariants.js";
17
+ import { bottomBtnContainer, topRightBtnContainer } from "../Node.css.js";
18
+ import { ElementIcon } from "../shared/ElementIcon.js";
19
+ import { ElementToolbar } from "../shared/Toolbar.js";
20
+ import { container, containerAnimated, shapeSvg, indicator, elementDataContainer, hasIcon, elementTextData, title, technology, description, handleCenter, elementIcon } from "./element.css.js";
21
+ import { SelectedIndicator, ElementShapeSvg } from "./ElementShapeSvg.js";
22
+ const isEqualProps = (prev, next) => prev.id === next.id && deepEqual(prev.selected ?? false, next.selected ?? false) && deepEqual(prev.dragging ?? false, next.dragging ?? false) && deepEqual(prev.width ?? 0, next.width ?? 0) && deepEqual(prev.height ?? 0, next.height ?? 0) && deepEqual(prev.data, next.data);
23
+ const ElementNodeMemo = memo(function ElementNode({
24
+ id,
25
+ data: {
26
+ element
27
+ },
28
+ dragging,
29
+ selected = false,
30
+ width,
31
+ height
32
+ }) {
33
+ const modelRef = DiagramNode.modelRef(element);
34
+ const {
35
+ viewId,
36
+ isEditable,
37
+ isDimmed,
38
+ isNavigable,
39
+ isInteractive,
40
+ enableElementDetails,
41
+ enableRelationshipBrowser,
42
+ isInActiveOverlay,
43
+ renderIcon
44
+ } = useDiagramState((s) => {
45
+ var _a, _b;
46
+ return {
47
+ viewId: s.view.id,
48
+ isEditable: s.readonly !== true,
49
+ isDimmed: s.dimmed.has(id),
50
+ isInteractive: s.nodesDraggable || s.nodesSelectable || s.enableElementDetails || s.enableRelationshipBrowser || !!s.onNavigateTo && !!element.navigateTo,
51
+ isNavigable: !!s.onNavigateTo && !!element.navigateTo,
52
+ enableElementDetails: s.enableElementDetails,
53
+ enableRelationshipBrowser: s.enableRelationshipBrowser,
54
+ openOverlay: s.openOverlay,
55
+ isInActiveOverlay: (((_a = s.activeOverlay) == null ? void 0 : _a.elementDetails) ?? ((_b = s.activeOverlay) == null ? void 0 : _b.relationshipsOf)) === id,
56
+ renderIcon: s.renderIcon
57
+ };
58
+ });
59
+ const w = toDomPrecision(width ?? element.width);
60
+ const h = toDomPrecision(height ?? element.height);
61
+ let animateVariant;
62
+ switch (true) {
63
+ case isInActiveOverlay:
64
+ animateVariant = "idle";
65
+ break;
66
+ case (dragging && selected):
67
+ animateVariant = "selected";
68
+ break;
69
+ case dragging:
70
+ animateVariant = "idle";
71
+ break;
72
+ case isDimmed:
73
+ animateVariant = "dimmed";
74
+ break;
75
+ case selected:
76
+ animateVariant = "selected";
77
+ break;
78
+ default:
79
+ animateVariant = "idle";
80
+ }
81
+ const [animateVariants, animateHandlers] = useFramerAnimateVariants();
82
+ if (!dragging && !isInActiveOverlay) {
83
+ animateVariant = animateVariants ?? animateVariant;
84
+ }
85
+ const isHovered = !!animateVariants && animateVariants.includes("hovered");
86
+ const _isToolbarVisible = selected && !dragging || isHovered;
87
+ const [isToolbarVisible] = useDebouncedValue(_isToolbarVisible, _isToolbarVisible ? 500 : 300);
88
+ const elementIcon$1 = ElementIcon({
89
+ element,
90
+ viewId,
91
+ className: elementIcon,
92
+ renderIcon
93
+ });
94
+ const [previewColor, setPreviewColor] = useState(null);
95
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
96
+ /* @__PURE__ */ jsxs(
97
+ Box,
98
+ {
99
+ component: m.div,
100
+ className: clsx([
101
+ container,
102
+ animateVariant !== "idle" && containerAnimated,
103
+ "likec4-element-node"
104
+ ]),
105
+ layoutId: `${viewId}:element:${id}`,
106
+ "data-hovered": !dragging && isHovered,
107
+ "data-likec4-color": previewColor ?? element.color,
108
+ "data-likec4-shape": element.shape,
109
+ "data-animate-target": "",
110
+ initial: false,
111
+ variants: NodeVariants(w, h),
112
+ animate: animateVariant,
113
+ ...isInteractive && animateHandlers,
114
+ tabIndex: -1,
115
+ children: [
116
+ isEditable && /* @__PURE__ */ jsx(
117
+ ElementToolbar,
118
+ {
119
+ element,
120
+ isVisible: isToolbarVisible,
121
+ align: "start",
122
+ onColorPreview: setPreviewColor
123
+ }
124
+ ),
125
+ /* @__PURE__ */ jsxs(
126
+ "svg",
127
+ {
128
+ className: clsx(shapeSvg),
129
+ viewBox: `0 0 ${w} ${h}`,
130
+ children: [
131
+ /* @__PURE__ */ jsx("g", { className: indicator, children: /* @__PURE__ */ jsx(SelectedIndicator, { shape: element.shape, w, h }) }),
132
+ /* @__PURE__ */ jsx(ElementShapeSvg, { shape: element.shape, w, h })
133
+ ]
134
+ }
135
+ ),
136
+ /* @__PURE__ */ jsxs(
137
+ Box,
138
+ {
139
+ className: clsx(
140
+ elementDataContainer,
141
+ isTruthy(elementIcon$1) && hasIcon,
142
+ "likec4-element"
143
+ ),
144
+ children: [
145
+ elementIcon$1,
146
+ /* @__PURE__ */ jsxs(Box, { className: clsx(elementTextData, "likec4-element-main-props"), children: [
147
+ /* @__PURE__ */ jsx(
148
+ Text,
149
+ {
150
+ component: m.div,
151
+ layoutId: `${viewId}:element:title:${id}`,
152
+ className: clsx(title, "likec4-element-title"),
153
+ children: element.title
154
+ },
155
+ `${viewId}:element:title:${id}`
156
+ ),
157
+ element.technology && /* @__PURE__ */ jsx(Text, { className: clsx(technology, "likec4-element-technology"), children: element.technology }),
158
+ element.description && /* @__PURE__ */ jsx(Text, { className: clsx(description, "likec4-element-description"), lineClamp: 5, children: element.description })
159
+ ] })
160
+ ]
161
+ }
162
+ ),
163
+ /* @__PURE__ */ jsx(Box, { className: clsx(bottomBtnContainer), children: /* @__PURE__ */ jsxs(ActionButtonBar, { shiftY: "bottom", children: [
164
+ isNavigable && /* @__PURE__ */ jsx(
165
+ NavigateToButton,
166
+ {
167
+ xynodeId: id,
168
+ ...isInteractive && animateHandlers
169
+ }
170
+ ),
171
+ enableRelationshipBrowser && !!modelRef && /* @__PURE__ */ jsx(
172
+ BrowseRelationshipsButton,
173
+ {
174
+ fqn: modelRef,
175
+ ...isInteractive && animateHandlers
176
+ }
177
+ )
178
+ ] }) }),
179
+ enableElementDetails && !!modelRef && /* @__PURE__ */ jsx(Box, { className: clsx(topRightBtnContainer), children: /* @__PURE__ */ jsx(OpenDetailsButton, { fqn: modelRef, ...isInteractive && animateHandlers }) })
180
+ ]
181
+ },
182
+ `${viewId}:element:${id}`
183
+ ),
184
+ /* @__PURE__ */ jsx(Handle, { type: "target", position: Position.Top, className: handleCenter }),
185
+ /* @__PURE__ */ jsx(Handle, { type: "source", position: Position.Top, className: handleCenter })
186
+ ] });
187
+ }, isEqualProps);
188
+ export {
189
+ ElementNodeMemo
190
+ };
@@ -0,0 +1,17 @@
1
+ import { ElementShape } from '@likec4/core';
2
+ export declare function cylinderSVGPath(diameter: number, height: number, tilt?: number): {
3
+ path: string;
4
+ ry: number;
5
+ rx: number;
6
+ };
7
+ type ElementShapeSvgProps = {
8
+ shape: ElementShape;
9
+ w: number;
10
+ h: number;
11
+ };
12
+ export declare function ElementShapeSvg({ shape, w, h }: ElementShapeSvgProps): import("react/jsx-runtime").JSX.Element;
13
+ /**
14
+ * When element is selected, this component is used to render the indicator
15
+ */
16
+ export declare function SelectedIndicator({ shape, w, h }: ElementShapeSvgProps): import("react/jsx-runtime").JSX.Element;
17
+ export {};