@likec4/diagram 1.18.0 → 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 (277) 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 +34 -27
  222. package/src/LikeC4Diagram.tsx +4 -4
  223. package/src/LikeC4Search.css.ts +12 -0
  224. package/src/LikeC4Search.tsx +39 -90
  225. package/src/controls/Text.ts +5 -0
  226. package/src/controls/action-button-bar/ActionButtonBar.css.ts +13 -0
  227. package/src/controls/action-button-bar/ActionButtonBar.tsx +138 -0
  228. package/src/controls/action-button-bar/useActionButtonBarCtx.ts +13 -0
  229. package/src/controls/action-buttons/ActionButton.css.ts +29 -0
  230. package/src/controls/action-buttons/ActionButton.tsx +66 -0
  231. package/src/controls/action-buttons/ActionButtons.tsx +138 -0
  232. package/src/hooks/useXYFlow.ts +8 -8
  233. package/src/index.ts +12 -6
  234. package/src/likec4model/index.ts +12 -2
  235. package/src/overlays/edge-details/EdgeDetailsXYFlow.tsx +18 -12
  236. package/src/overlays/edge-details/_types.ts +13 -37
  237. package/src/overlays/edge-details/use-layouted-edge-details.ts +16 -14
  238. package/src/overlays/edge-details/xyflow/CompoundNode.tsx +3 -11
  239. package/src/overlays/edge-details/xyflow/ElementNode.tsx +4 -11
  240. package/src/overlays/edge-details/xyflow/RelationshipEdge.tsx +3 -3
  241. package/src/overlays/edge-details/xyflow/styles.css.ts +1 -59
  242. package/src/overlays/relationships-of/RelationshipsXYFlow.tsx +23 -23
  243. package/src/overlays/relationships-of/_types.ts +20 -58
  244. package/src/overlays/relationships-of/use-layouted-relationships.ts +36 -40
  245. package/src/overlays/relationships-of/xyflow/CompoundNode.tsx +9 -13
  246. package/src/overlays/relationships-of/xyflow/ElementNode.tsx +12 -15
  247. package/src/overlays/relationships-of/xyflow/EmptyNode.tsx +4 -7
  248. package/src/overlays/relationships-of/xyflow/RelationshipEdge.tsx +16 -14
  249. package/src/overlays/shared/xyflow/RelationshipEdge.css.ts +60 -0
  250. package/src/overlays/shared/xyflow/_types.ts +87 -0
  251. package/src/state/diagram-to-xyflow.ts +6 -7
  252. package/src/state/diagramStore.layout.ts +3 -4
  253. package/src/state/diagramStore.ts +35 -37
  254. package/src/theme-vars.css.ts +81 -0
  255. package/src/theme-vars.ts +8 -81
  256. package/src/ui/DiagramTitlePanel.tsx +6 -6
  257. package/src/utils/types.ts +6 -0
  258. package/src/xyflow/SelectEdgesOnNodeFocus.tsx +3 -3
  259. package/src/xyflow/XYFlow.tsx +2 -2
  260. package/src/xyflow/edges/EdgeLabel.tsx +25 -18
  261. package/src/xyflow/edges/RelationshipEdge.tsx +5 -3
  262. package/src/xyflow/edges/RelationshipsDropdownMenu.tsx +3 -3
  263. package/src/xyflow/edges/edges.css.ts +68 -74
  264. package/src/xyflow/edges/utils.ts +6 -6
  265. package/src/xyflow/nodes/AnimateVariants.ts +143 -0
  266. package/src/xyflow/nodes/Node.css.ts +44 -0
  267. package/src/xyflow/nodes/compound/CompoundNode.css.ts +1 -64
  268. package/src/xyflow/nodes/compound/CompoundNode.tsx +69 -182
  269. package/src/xyflow/nodes/element/ElementLink.tsx +2 -3
  270. package/src/xyflow/nodes/element/ElementNode.tsx +64 -266
  271. package/src/xyflow/nodes/element/element.css.ts +0 -57
  272. package/src/xyflow/nodes/shared/Toolbar.tsx +30 -30
  273. package/src/xyflow/types.ts +48 -51
  274. package/src/xyflow/useLayoutConstraints.ts +9 -9
  275. package/src/xyflow/useXYFlowEvents.ts +13 -30
  276. package/src/xyflow/utils.ts +2 -2
  277. package/src/xyflow/nodes/use-animate-variants.tsx +0 -64
@@ -0,0 +1,160 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { isStepEdgeId, extractStep } from "@likec4/core";
3
+ import { Box, Stack, Text, ActionIcon, Popover, PopoverTarget, PopoverDropdown, ScrollAreaAutosize, CloseButton, Group, Button } from "@mantine/core";
4
+ import { useDebouncedEffect } from "@react-hookz/web";
5
+ import { IconZoomScan } from "@tabler/icons-react";
6
+ import { EdgeLabelRenderer } from "@xyflow/react";
7
+ import clsx from "clsx";
8
+ import { useState } from "react";
9
+ import { isTruthy } from "remeda";
10
+ import { useLikeC4Model } from "../../likec4model/useLikeC4Model.js";
11
+ import { stopPropagation } from "../utils.js";
12
+ import { stepEdgeNumber, edgeLabelText, edgeLabelTechnology, cssNavigateBtn, cssNavigateBtnIcon, edgeNoteText, edgeNoteCloseButton } from "./edges.css.js";
13
+ import { RelationshipsDropdownMenu } from "./RelationshipsDropdownMenu.js";
14
+ import { useDiagramState, useDiagramStoreApi } from "../../hooks/useDiagramState.js";
15
+ import { useMantinePortalProps } from "../../hooks/useMantinePortalProps.js";
16
+ const EdgeLabel = ({
17
+ isDimmed,
18
+ edgeData: {
19
+ label,
20
+ edge
21
+ },
22
+ ...props
23
+ }) => {
24
+ const likec4model = useLikeC4Model();
25
+ const {
26
+ enableRelationshipDetails,
27
+ isActiveWalkthroughStep,
28
+ hasOnNavigateTo
29
+ } = useDiagramState((s) => {
30
+ var _a;
31
+ return {
32
+ enableRelationshipDetails: s.enableRelationshipDetails,
33
+ isActiveWalkthroughStep: ((_a = s.activeWalkthrough) == null ? void 0 : _a.stepId) === edge.id,
34
+ hasOnNavigateTo: !!s.onNavigateTo
35
+ };
36
+ });
37
+ const notes = isActiveWalkthroughStep ? edge.notes ?? null : null;
38
+ const stepNum = isStepEdgeId(edge.id) ? extractStep(edge.id) : null;
39
+ const navigateTo = hasOnNavigateTo ? edge.navigateTo ?? null : null;
40
+ const wrapWithPopover = (node) => {
41
+ if (isTruthy(notes)) {
42
+ return /* @__PURE__ */ jsx(NotePopover, { notes, children: node });
43
+ }
44
+ if (enableRelationshipDetails && likec4model && edge.relations.length > 0) {
45
+ return /* @__PURE__ */ jsx(
46
+ RelationshipsDropdownMenu,
47
+ {
48
+ disabled: isDimmed,
49
+ likec4model,
50
+ edge,
51
+ children: node
52
+ }
53
+ );
54
+ }
55
+ return node;
56
+ };
57
+ return /* @__PURE__ */ jsx(EdgeLabelRenderer, { children: wrapWithPopover(
58
+ /* @__PURE__ */ jsxs(Box, { ...props, children: [
59
+ stepNum !== null && /* @__PURE__ */ jsx(Box, { className: stepEdgeNumber, children: stepNum }),
60
+ /* @__PURE__ */ jsxs(Stack, { gap: 4, align: "center", children: [
61
+ isTruthy(label == null ? void 0 : label.text) && /* @__PURE__ */ jsx(Text, { component: "div", className: edgeLabelText, lineClamp: 5, children: label.text }),
62
+ isTruthy(edge.technology) && /* @__PURE__ */ jsx(Text, { component: "div", className: edgeLabelTechnology, children: "[ " + edge.technology + " ]" }),
63
+ navigateTo && /* @__PURE__ */ jsx(NavigateToBtn, { viewId: navigateTo })
64
+ ] })
65
+ ] })
66
+ ) });
67
+ };
68
+ const NotePopover = ({ notes, children }) => {
69
+ const {
70
+ nextDynamicStep,
71
+ hasNext,
72
+ hasPrevious
73
+ } = useDiagramState((s) => {
74
+ var _a, _b;
75
+ return {
76
+ nextDynamicStep: s.nextDynamicStep,
77
+ hasNext: ((_a = s.activeWalkthrough) == null ? void 0 : _a.hasNext) ?? false,
78
+ hasPrevious: ((_b = s.activeWalkthrough) == null ? void 0 : _b.hasPrevious) ?? false
79
+ };
80
+ });
81
+ const [isOpened, setIsOpened] = useState(false);
82
+ const portalProps = useMantinePortalProps();
83
+ useDebouncedEffect(
84
+ () => {
85
+ setIsOpened(true);
86
+ },
87
+ [],
88
+ 300
89
+ );
90
+ return /* @__PURE__ */ jsxs(
91
+ Popover,
92
+ {
93
+ shadow: "xs",
94
+ offset: 16,
95
+ opened: isOpened,
96
+ closeOnClickOutside: false,
97
+ ...portalProps,
98
+ children: [
99
+ /* @__PURE__ */ jsx(PopoverTarget, { children }),
100
+ /* @__PURE__ */ jsxs(
101
+ PopoverDropdown,
102
+ {
103
+ component: Stack,
104
+ p: "xs",
105
+ onPointerDownCapture: stopPropagation,
106
+ onClick: stopPropagation,
107
+ onDoubleClick: stopPropagation,
108
+ children: [
109
+ /* @__PURE__ */ jsx(ScrollAreaAutosize, { maw: 450, mah: 350, type: "scroll", mx: "auto", mt: 2, children: /* @__PURE__ */ jsx(Text, { component: "div", className: edgeNoteText, p: 4, children: notes }) }),
110
+ /* @__PURE__ */ jsx(
111
+ CloseButton,
112
+ {
113
+ size: "xs",
114
+ className: edgeNoteCloseButton,
115
+ onClick: () => setIsOpened(false)
116
+ }
117
+ ),
118
+ (hasPrevious || hasNext) && /* @__PURE__ */ jsxs(Group, { gap: 0, justify: hasPrevious ? "flex-start" : "flex-end", children: [
119
+ hasPrevious && /* @__PURE__ */ jsx(
120
+ Button,
121
+ {
122
+ variant: "subtle",
123
+ radius: "xs",
124
+ size: "compact-xs",
125
+ onClick: () => nextDynamicStep(-1),
126
+ children: "back"
127
+ }
128
+ ),
129
+ hasNext && /* @__PURE__ */ jsx(Button, { variant: "subtle", radius: "xs", size: "compact-xs", onClick: () => nextDynamicStep(), children: "next" })
130
+ ] })
131
+ ]
132
+ }
133
+ )
134
+ ]
135
+ }
136
+ );
137
+ };
138
+ function NavigateToBtn({ viewId }) {
139
+ const diagramApi = useDiagramStoreApi();
140
+ return /* @__PURE__ */ jsx(
141
+ ActionIcon,
142
+ {
143
+ className: clsx("nodrag nopan", cssNavigateBtn),
144
+ size: "sm",
145
+ radius: "sm",
146
+ onPointerDownCapture: stopPropagation,
147
+ onClick: (event) => {
148
+ var _a, _b;
149
+ event.stopPropagation();
150
+ (_b = (_a = diagramApi.getState()).onNavigateTo) == null ? void 0 : _b.call(_a, viewId, event);
151
+ },
152
+ role: "button",
153
+ onDoubleClick: stopPropagation,
154
+ children: /* @__PURE__ */ jsx(IconZoomScan, { className: cssNavigateBtnIcon })
155
+ }
156
+ );
157
+ }
158
+ export {
159
+ EdgeLabel
160
+ };
@@ -0,0 +1,6 @@
1
+ import { EdgeProps } from '@xyflow/react';
2
+ import { DiagramFlowTypes } from '../types';
3
+ import { NamedExoticComponent } from 'react';
4
+ type DiagramEdgeProps = EdgeProps<DiagramFlowTypes.Edge>;
5
+ export declare const RelationshipEdge: NamedExoticComponent<DiagramEdgeProps>;
6
+ export {};
@@ -0,0 +1,443 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { nonNullable, isStepEdgeId, nonexhaustive, invariant } from "@likec4/core";
3
+ import { useDebouncedEffect } from "@react-hookz/web";
4
+ import { assignInlineVars } from "../../node_modules/@vanilla-extract/dynamic/dist/vanilla-extract-dynamic.esm.js";
5
+ import clsx from "clsx";
6
+ import { line, curveCatmullRomOpen } from "d3-shape";
7
+ import { deepEqual } from "fast-equals";
8
+ import { memo, useState, useRef, useEffect } from "react";
9
+ import { isTruthy, first, last, hasAtLeast, isArray } from "remeda";
10
+ import { useDiagramStoreApi, useDiagramState } from "../../hooks/useDiagramState.js";
11
+ import { useXYStoreApi } from "../../hooks/useXYFlow.js";
12
+ import { VectorImpl, vector } from "../../utils/vector.js";
13
+ import { ZIndexes } from "../const.js";
14
+ import { EdgeMarkers } from "../EdgeMarkers.js";
15
+ import { bezierControlPoints } from "../utils.js";
16
+ import { EdgeLabel } from "./EdgeLabel.js";
17
+ import { container, dimmed, controlDragging, markerContext, edgePathBg, cssEdgePath, controlPoint, edgeLabel, varLabelX, varLabelY } from "./edges.css.js";
18
+ import { getNodeIntersectionFromCenterToPoint } from "./utils.js";
19
+ const toMarker = (arrowType) => {
20
+ if (!arrowType || arrowType === "none") {
21
+ return void 0;
22
+ }
23
+ switch (arrowType) {
24
+ case "normal":
25
+ return "Arrow";
26
+ case "crow":
27
+ return "Crow";
28
+ case "onormal":
29
+ return "OArrow";
30
+ case "diamond":
31
+ return "Diamond";
32
+ case "odiamond":
33
+ return "ODiamond";
34
+ case "open":
35
+ case "vee":
36
+ return "Open";
37
+ case "dot":
38
+ return "Dot";
39
+ case "odot":
40
+ return `ODot`;
41
+ default:
42
+ nonexhaustive(arrowType);
43
+ }
44
+ };
45
+ function bezierPath(bezierSpline) {
46
+ let [start, ...points] = bezierSpline;
47
+ invariant(start, "start should be defined");
48
+ let path = `M ${start[0]},${start[1]}`;
49
+ while (hasAtLeast(points, 3)) {
50
+ const [cp1, cp2, end, ...rest] = points;
51
+ path = path + ` C ${cp1[0]},${cp1[1]} ${cp2[0]},${cp2[1]} ${end[0]},${end[1]}`;
52
+ points = rest;
53
+ }
54
+ invariant(points.length === 0, "all points should be consumed");
55
+ return path;
56
+ }
57
+ const isSame = (a, b) => {
58
+ return Math.abs(a - b) < 2.5;
59
+ };
60
+ const isSamePoint = (a, b) => {
61
+ return isSame(isArray(a) ? a[0] : a.x, isArray(b) ? b[0] : b.x) && isSame(isArray(a) ? a[1] : a.y, isArray(b) ? b[1] : b.y);
62
+ };
63
+ const sameControlPoints = (a, b) => {
64
+ if (a === b) return true;
65
+ if (!a || !b || a.length !== b.length) return false;
66
+ return a.every((ap, i) => isSamePoint(ap, b[i]));
67
+ };
68
+ const isEqualProps = (prev, next) => prev.id === next.id && deepEqual(prev.source, next.source) && deepEqual(prev.target, next.target) && deepEqual(prev.selected ?? false, next.selected ?? false) && isSame(prev.sourceX, next.sourceX) && isSame(prev.sourceY, next.sourceY) && isSame(prev.targetX, next.targetX) && isSame(prev.targetY, next.targetY) && deepEqual(prev.data.label, next.data.label) && sameControlPoints(prev.data.controlPoints, next.data.controlPoints) && deepEqual(prev.data.edge, next.data.edge);
69
+ const curve = line().curve(curveCatmullRomOpen).x((d) => d.x).y((d) => d.y);
70
+ const RelationshipEdge = memo(function RelationshipEdgeR({
71
+ id,
72
+ data,
73
+ sourceX,
74
+ sourceY,
75
+ targetX,
76
+ targetY,
77
+ style,
78
+ source,
79
+ target,
80
+ interactionWidth
81
+ }) {
82
+ const [isControlPointDragging, setIsControlPointDragging] = useState(false);
83
+ const diagramStore = useDiagramStoreApi();
84
+ const xyflowStore = useXYStoreApi();
85
+ const {
86
+ connectedToFocusedNode,
87
+ isActiveWalkthroughStep,
88
+ isEdgePathEditable,
89
+ isHovered,
90
+ isDimmed,
91
+ isActiveAsParallel
92
+ } = useDiagramState((s) => {
93
+ var _a, _b;
94
+ return {
95
+ isEdgePathEditable: s.readonly !== true && s.experimentalEdgeEditing === true && s.focusedNodeId === null && s.activeWalkthrough === null,
96
+ connectedToFocusedNode: s.focusedNodeId === source || s.focusedNodeId === target,
97
+ isActiveWalkthroughStep: ((_a = s.activeWalkthrough) == null ? void 0 : _a.stepId) === data.edge.id,
98
+ // If activeWalkthrough and this edge is part of the parallel group
99
+ isActiveAsParallel: !!((_b = s.activeWalkthrough) == null ? void 0 : _b.parallelPrefix) && id.startsWith(s.activeWalkthrough.parallelPrefix),
100
+ isHovered: s.hoveredEdgeId === id,
101
+ isDimmed: s.dimmed.has(id)
102
+ };
103
+ });
104
+ const isActive = connectedToFocusedNode || isActiveWalkthroughStep;
105
+ const { nodeLookup, edgeLookup } = xyflowStore.getState();
106
+ const sourceNode = nonNullable(nodeLookup.get(source), `source node ${source} not found`);
107
+ const targetNode = nonNullable(nodeLookup.get(target), `target node ${target} not found`);
108
+ const isModified = isTruthy(data.controlPoints) || !isSamePoint(sourceNode.internals.positionAbsolute, sourceNode.data.element.position) || !isSamePoint(targetNode.internals.positionAbsolute, targetNode.data.element.position);
109
+ const {
110
+ label,
111
+ edge: {
112
+ points: diagramEdgePoints,
113
+ line: line2 = "dashed",
114
+ color = "gray",
115
+ labelBBox,
116
+ ...diagramEdge
117
+ }
118
+ } = data;
119
+ let controlPoints = data.controlPoints ?? bezierControlPoints(data.edge);
120
+ const isStepEdge = isStepEdgeId(data.edge.id);
121
+ const isDotted = line2 === "dotted";
122
+ const isDashed = isDotted || line2 === "dashed";
123
+ let strokeDasharray;
124
+ if (isDotted) {
125
+ strokeDasharray = "1,8";
126
+ } else if (isDashed) {
127
+ strokeDasharray = "8,10";
128
+ }
129
+ let labelX = (labelBBox == null ? void 0 : labelBBox.x) ?? 0, labelY = (labelBBox == null ? void 0 : labelBBox.y) ?? 0;
130
+ const [labelPos, setLabelPos] = useState({
131
+ x: (label == null ? void 0 : label.bbox.x) ?? labelX,
132
+ y: (label == null ? void 0 : label.bbox.y) ?? labelY
133
+ });
134
+ let edgePath;
135
+ if (isModified) {
136
+ const sourceCenterPos = { x: sourceX, y: sourceY };
137
+ const targetCenterPos = { x: targetX, y: targetY };
138
+ const points = diagramEdge.dir === "back" ? [
139
+ targetCenterPos,
140
+ getNodeIntersectionFromCenterToPoint(targetNode, first(controlPoints) ?? sourceCenterPos),
141
+ ...controlPoints,
142
+ getNodeIntersectionFromCenterToPoint(sourceNode, last(controlPoints) ?? targetCenterPos),
143
+ sourceCenterPos
144
+ ] : [
145
+ sourceCenterPos,
146
+ getNodeIntersectionFromCenterToPoint(sourceNode, first(controlPoints) ?? targetCenterPos),
147
+ ...controlPoints,
148
+ getNodeIntersectionFromCenterToPoint(targetNode, last(controlPoints) ?? sourceCenterPos),
149
+ targetCenterPos
150
+ ];
151
+ edgePath = nonNullable(curve(points));
152
+ } else {
153
+ edgePath = bezierPath(diagramEdgePoints);
154
+ }
155
+ const svgPathRef = useRef(null);
156
+ useEffect(() => {
157
+ const path = svgPathRef.current;
158
+ if (!path) return;
159
+ const dompoint = path.getPointAtLength(path.getTotalLength() * 0.5);
160
+ const point = {
161
+ x: Math.round(dompoint.x),
162
+ y: Math.round(dompoint.y)
163
+ };
164
+ setLabelPos((current) => isSamePoint(current, point) ? current : point);
165
+ }, [edgePath]);
166
+ useDebouncedEffect(
167
+ () => {
168
+ if (!label || label.bbox.x === labelPos.x && label.bbox.y === labelPos.y) {
169
+ return;
170
+ }
171
+ diagramStore.getState().xyflow.updateEdgeData(id, {
172
+ label: {
173
+ ...label,
174
+ bbox: {
175
+ ...label.bbox,
176
+ ...labelPos
177
+ }
178
+ }
179
+ });
180
+ },
181
+ [labelPos],
182
+ 50,
183
+ 300
184
+ );
185
+ if (isModified || isControlPointDragging) {
186
+ labelX = labelPos.x;
187
+ labelY = labelPos.y;
188
+ }
189
+ const onLmbControlPointerDown = (index, e, domNode) => {
190
+ const { addSelectedEdges } = xyflowStore.getState();
191
+ const { xyflow } = diagramStore.getState();
192
+ addSelectedEdges([id]);
193
+ const wasCanceled = diagramStore.getState().cancelSaveManualLayout();
194
+ e.stopPropagation();
195
+ let hasMoved = false;
196
+ let pointer = { x: e.clientX, y: e.clientY };
197
+ const onPointerMove = (e2) => {
198
+ const clientPoint = {
199
+ x: e2.clientX,
200
+ y: e2.clientY
201
+ };
202
+ if (!isSamePoint(pointer, clientPoint)) {
203
+ setIsControlPointDragging(true);
204
+ hasMoved = true;
205
+ pointer = clientPoint;
206
+ const { x, y } = xyflow.screenToFlowPosition(pointer, { snapToGrid: false });
207
+ xyflow.updateEdgeData(id, (xyedge) => {
208
+ const cp = (xyedge.data.controlPoints ?? controlPoints).slice();
209
+ cp[index] = {
210
+ x: Math.round(x),
211
+ y: Math.round(y)
212
+ };
213
+ return {
214
+ controlPoints: cp
215
+ };
216
+ });
217
+ }
218
+ e2.stopPropagation();
219
+ };
220
+ const onPointerUp = (e2) => {
221
+ domNode.removeEventListener("pointermove", onPointerMove, {
222
+ capture: true
223
+ });
224
+ if (hasMoved) {
225
+ e2.stopPropagation();
226
+ }
227
+ if (hasMoved || wasCanceled) {
228
+ diagramStore.getState().scheduleSaveManualLayout();
229
+ }
230
+ setIsControlPointDragging(false);
231
+ };
232
+ domNode.addEventListener("pointermove", onPointerMove, {
233
+ capture: true
234
+ });
235
+ domNode.addEventListener("pointerup", onPointerUp, {
236
+ once: true,
237
+ capture: true
238
+ });
239
+ };
240
+ const onRmbControlPointerDown = (index, e, domNode) => {
241
+ const { xyflow } = diagramStore.getState();
242
+ if (controlPoints.length <= 1) {
243
+ return;
244
+ }
245
+ const onPointerUp = (e2) => {
246
+ const newControlPoints = controlPoints.slice();
247
+ newControlPoints.splice(index, 1);
248
+ e2.stopPropagation();
249
+ setTimeout(() => {
250
+ xyflow.updateEdgeData(id, { controlPoints: newControlPoints });
251
+ diagramStore.getState().scheduleSaveManualLayout();
252
+ }, 10);
253
+ domNode.removeEventListener("pointerup", onPointerUp, {
254
+ capture: true
255
+ });
256
+ e2.stopPropagation();
257
+ };
258
+ domNode.addEventListener("pointerup", onPointerUp, {
259
+ once: true,
260
+ capture: true
261
+ });
262
+ e.stopPropagation();
263
+ };
264
+ const onControlPointerDown = (index, e) => {
265
+ const { domNode } = xyflowStore.getState();
266
+ if (!domNode || e.pointerType !== "mouse") {
267
+ return;
268
+ }
269
+ switch (e.button) {
270
+ case 0:
271
+ onLmbControlPointerDown(index, e, domNode);
272
+ break;
273
+ case 2:
274
+ onRmbControlPointerDown(index, e, domNode);
275
+ break;
276
+ }
277
+ };
278
+ const onEdgePointerDown = (e) => {
279
+ const { domNode } = xyflowStore.getState();
280
+ const { xyflow, scheduleSaveManualLayout } = diagramStore.getState();
281
+ if (!domNode || e.pointerType !== "mouse") {
282
+ return;
283
+ }
284
+ if (e.button !== 2) {
285
+ return;
286
+ }
287
+ xyflow.updateEdgeData(id, (edge) => {
288
+ var _a;
289
+ const points = [
290
+ new VectorImpl(sourceX, sourceY),
291
+ ...controlPoints.map(vector) || [],
292
+ new VectorImpl(targetX, targetY)
293
+ ];
294
+ let pointer = { x: e.clientX, y: e.clientY };
295
+ const newPoint = vector(xyflow.screenToFlowPosition(pointer, { snapToGrid: false }));
296
+ let insertionIndex = 0;
297
+ let minDistance = Infinity;
298
+ for (let i = 0; i < points.length - 1; i++) {
299
+ const a = points[i], b = points[i + 1];
300
+ const fromCurrentToNext = b.sub(a);
301
+ const fromCurrentToNew = newPoint.sub(a);
302
+ const fromNextToNew = newPoint.sub(b);
303
+ if (fromCurrentToNext.dot(fromCurrentToNew) * fromCurrentToNext.dot(fromNextToNew) < 0) {
304
+ const distanceToEdge = Math.abs(fromCurrentToNext.cross(fromCurrentToNew).abs() / fromCurrentToNext.abs());
305
+ if (distanceToEdge < minDistance) {
306
+ minDistance = distanceToEdge;
307
+ insertionIndex = i;
308
+ }
309
+ }
310
+ }
311
+ const newControlPoints = ((_a = edge.data.controlPoints) == null ? void 0 : _a.slice()) || [];
312
+ newControlPoints.splice(insertionIndex, 0, newPoint);
313
+ return { controlPoints: newControlPoints };
314
+ });
315
+ scheduleSaveManualLayout();
316
+ e.stopPropagation();
317
+ };
318
+ let markerStartName = toMarker(diagramEdge.tail);
319
+ let markerEndName = toMarker(diagramEdge.head ?? "normal");
320
+ if (diagramEdge.dir === "back") {
321
+ [markerStartName, markerEndName] = [markerEndName, markerStartName];
322
+ }
323
+ const MarkerStart = markerStartName ? EdgeMarkers[markerStartName] : null;
324
+ const MarkerEnd = markerEndName ? EdgeMarkers[markerEndName] : null;
325
+ const edgeZIndex = edgeLookup.get(id).zIndex ?? ZIndexes.Edge;
326
+ let labelZIndex;
327
+ if (isEdgePathEditable) {
328
+ labelZIndex = edgeZIndex - 1;
329
+ } else if (isHovered) {
330
+ labelZIndex = ZIndexes.Element + 1;
331
+ } else {
332
+ labelZIndex = edgeZIndex + 1;
333
+ }
334
+ return /* @__PURE__ */ jsxs(
335
+ "g",
336
+ {
337
+ className: clsx(
338
+ container,
339
+ isDimmed && dimmed,
340
+ isControlPointDragging && controlDragging
341
+ ),
342
+ "data-likec4-color": color,
343
+ "data-edge-dir": diagramEdge.dir,
344
+ "data-edge-active": isActive,
345
+ "data-edge-animated": isActive || isActiveAsParallel,
346
+ "data-edge-hovered": isHovered,
347
+ children: [
348
+ /* @__PURE__ */ jsx(
349
+ "path",
350
+ {
351
+ className: clsx("react-flow__edge-interaction"),
352
+ d: edgePath,
353
+ fill: "none",
354
+ stroke: "transparent",
355
+ strokeWidth: interactionWidth ?? 10
356
+ }
357
+ ),
358
+ /* @__PURE__ */ jsxs("g", { className: markerContext, onPointerDown: (e) => onEdgePointerDown(e), children: [
359
+ /* @__PURE__ */ jsxs("defs", { children: [
360
+ MarkerStart && /* @__PURE__ */ jsx(MarkerStart, { id: "start" + id }),
361
+ MarkerEnd && /* @__PURE__ */ jsx(MarkerEnd, { id: "end" + id })
362
+ ] }),
363
+ /* @__PURE__ */ jsx(
364
+ "path",
365
+ {
366
+ className: clsx("react-flow__edge-path", edgePathBg),
367
+ d: edgePath,
368
+ style,
369
+ strokeLinecap: "round"
370
+ }
371
+ ),
372
+ /* @__PURE__ */ jsx(
373
+ "path",
374
+ {
375
+ ref: svgPathRef,
376
+ className: clsx("react-flow__edge-path", cssEdgePath),
377
+ d: edgePath,
378
+ style,
379
+ strokeLinecap: "round",
380
+ strokeDasharray,
381
+ markerStart: MarkerStart ? `url(#start${id})` : void 0,
382
+ markerEnd: MarkerEnd ? `url(#end${id})` : void 0
383
+ }
384
+ )
385
+ ] }),
386
+ isEdgePathEditable && /* @__PURE__ */ jsx(
387
+ "g",
388
+ {
389
+ onContextMenu: (e) => {
390
+ e.preventDefault();
391
+ e.stopPropagation();
392
+ },
393
+ children: controlPoints.map((p, i) => /* @__PURE__ */ jsx(
394
+ "circle",
395
+ {
396
+ onPointerDown: (e) => onControlPointerDown(i, e),
397
+ className: controlPoint,
398
+ cx: p.x,
399
+ cy: p.y,
400
+ r: 3
401
+ },
402
+ i
403
+ ))
404
+ }
405
+ ),
406
+ (data.label || isStepEdge) && /* @__PURE__ */ jsx(
407
+ EdgeLabel,
408
+ {
409
+ isDimmed,
410
+ edgeData: data,
411
+ className: clsx(
412
+ "nodrag nopan",
413
+ container,
414
+ edgeLabel,
415
+ isDimmed && dimmed
416
+ ),
417
+ style: {
418
+ ...assignInlineVars({
419
+ [varLabelX]: isModified ? `calc(${labelX}px - 10%)` : `${labelX}px`,
420
+ [varLabelY]: isModified ? `${labelY - 5}px` : `${labelY}px`
421
+ }),
422
+ // ...(isEdgePathEditable && selected && {
423
+ // pointerEvents: 'none'
424
+ // }),
425
+ ...label && {
426
+ maxWidth: label.bbox.width + 18
427
+ },
428
+ zIndex: labelZIndex
429
+ },
430
+ mod: {
431
+ "data-likec4-color": color,
432
+ "data-edge-hovered": isHovered && !isActiveWalkthroughStep,
433
+ "data-edge-active": isActive
434
+ }
435
+ }
436
+ )
437
+ ]
438
+ }
439
+ );
440
+ }, isEqualProps);
441
+ export {
442
+ RelationshipEdge
443
+ };
@@ -0,0 +1,4 @@
1
+ export declare const menuDropdown: string;
2
+ export declare const menuItemRelationship: string;
3
+ export declare const endpoint: string;
4
+ export declare const title: string;
@@ -0,0 +1,11 @@
1
+ /* empty css */
2
+ var menuDropdown = "qcv9lq0";
3
+ var menuItemRelationship = "qcv9lq1";
4
+ var endpoint = "qcv9lq2";
5
+ var title = "qcv9lq3";
6
+ export {
7
+ endpoint,
8
+ menuDropdown,
9
+ menuItemRelationship,
10
+ title
11
+ };
@@ -0,0 +1,13 @@
1
+ import { LikeC4Model } from '@likec4/core';
2
+ import { PropsWithChildren, ForwardRefExoticComponent, RefAttributes } from 'react';
3
+ import { DiagramFlowTypes } from '../types';
4
+ import { TooltipProps } from '@mantine/core';
5
+ export declare const Tooltip: ForwardRefExoticComponent< TooltipProps & RefAttributes<HTMLDivElement> & {
6
+ component?: any;
7
+ renderRoot?: (props: Record<string, any>) => React.ReactNode;
8
+ }>;
9
+ export declare function RelationshipsDropdownMenu({ edge, disabled, likec4model, children }: PropsWithChildren<{
10
+ edge: DiagramFlowTypes.DiagramEdgeData['edge'];
11
+ disabled?: boolean | undefined;
12
+ likec4model: LikeC4Model;
13
+ }>): import("react/jsx-runtime").JSX.Element;