@likec4/diagram 1.42.1 → 1.44.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 (309) hide show
  1. package/bundle/index.js +6198 -4860
  2. package/dist/LikeC4Diagram.d.ts +1 -1
  3. package/dist/LikeC4Diagram.js +15 -12
  4. package/dist/LikeC4Diagram.props.d.ts +28 -14
  5. package/dist/LikeC4ProjectsProvider.js +1 -1
  6. package/dist/LikeC4View.d.ts +28 -4
  7. package/dist/LikeC4View.js +28 -17
  8. package/dist/ReactLikeC4.d.ts +1 -1
  9. package/dist/ReactLikeC4.js +5 -7
  10. package/dist/StaticLikeC4Diagram.js +2 -2
  11. package/dist/_virtual/_commonjsHelpers.js +3 -0
  12. package/dist/_virtual/assign-dea9f7c8.cjs.js +3 -0
  13. package/dist/_virtual/log-ec8d4df4.cjs.js +3 -0
  14. package/dist/_virtual/raise-da5b247f.cjs.js +3 -0
  15. package/dist/_virtual/xstate-actions.cjs.js +5 -0
  16. package/dist/_virtual/xstate-actions.cjs2.js +3 -0
  17. package/dist/_virtual/xstate-dev.cjs.js +3 -0
  18. package/dist/_virtual/xstate-guards.cjs.js +5 -0
  19. package/dist/_virtual/xstate-guards.cjs2.js +3 -0
  20. package/dist/base/Background.d.ts +2 -1
  21. package/dist/base/Background.js +11 -2
  22. package/dist/base/Base.d.ts +28 -0
  23. package/dist/base/BaseXYFlow.d.ts +5 -5
  24. package/dist/base/BaseXYFlow.js +38 -44
  25. package/dist/base/const.d.ts +1 -1
  26. package/dist/base/const.js +1 -1
  27. package/dist/base/index.d.ts +6 -2
  28. package/dist/base/types.d.ts +1 -28
  29. package/dist/base/updateEdges.js +4 -3
  30. package/dist/base/updateNodes.js +3 -2
  31. package/dist/base-primitives/compound/CompoundActionButton.js +1 -1
  32. package/dist/base-primitives/compound/CompoundDetailsButton.js +1 -1
  33. package/dist/base-primitives/edge/EdgeActionButton.js +1 -1
  34. package/dist/base-primitives/edge/EdgeContainer.d.ts +1 -1
  35. package/dist/base-primitives/edge/EdgeContainer.js +4 -0
  36. package/dist/base-primitives/edge/EdgeLabel.d.ts +1 -0
  37. package/dist/base-primitives/edge/EdgeLabel.js +2 -0
  38. package/dist/base-primitives/edge/EdgeLabelContainer.d.ts +1 -1
  39. package/dist/base-primitives/edge/EdgeLabelContainer.js +4 -0
  40. package/dist/base-primitives/edge/EdgePath.d.ts +4 -0
  41. package/dist/base-primitives/edge/EdgePath.js +9 -5
  42. package/dist/base-primitives/element/ElementActionButtons.d.ts +3 -2
  43. package/dist/base-primitives/element/ElementActionButtons.js +1 -1
  44. package/dist/base-primitives/element/ElementDetailsButton.js +2 -5
  45. package/dist/base-primitives/element/ElementNodeContainer.css.js +15 -27
  46. package/dist/base-primitives/element/ElementTags.js +2 -1
  47. package/dist/base-primitives/memoEdge.js +4 -2
  48. package/dist/base-primitives/memoNode.d.ts +1 -1
  49. package/dist/base-primitives/memoNode.js +3 -3
  50. package/dist/components/ErrorFallback.js +52 -35
  51. package/dist/components/Link.js +2 -2
  52. package/dist/context/DiagramEventHandlers.js +2 -1
  53. package/dist/context/DiagramFeatures.d.ts +24 -6
  54. package/dist/context/DiagramFeatures.js +28 -56
  55. package/dist/context/IconRenderer.js +6 -6
  56. package/dist/context/LikeC4ModelContext.js +3 -10
  57. package/dist/context/TagStylesContext.js +2 -18
  58. package/dist/context/index.d.ts +1 -1
  59. package/dist/custom/customNodes.js +3 -2
  60. package/dist/custom/hooks.d.ts +1 -1
  61. package/dist/custom/index.d.ts +1 -1
  62. package/dist/custom/index.js +4 -4
  63. package/dist/editor/LikeC4EditorContext.d.ts +21 -0
  64. package/dist/editor/index.d.ts +2 -0
  65. package/dist/hooks/index.d.ts +2 -1
  66. package/dist/hooks/safeContext.d.ts +6 -3
  67. package/dist/hooks/safeContext.js +10 -3
  68. package/dist/hooks/useCallbackRef.d.ts +1 -0
  69. package/dist/hooks/useCallbackRef.js +13 -0
  70. package/dist/hooks/useCurrentView.d.ts +11 -0
  71. package/dist/hooks/{useCurrentViewId.js → useCurrentView.js} +7 -3
  72. package/dist/hooks/useCurrentViewModel.js +4 -1
  73. package/dist/hooks/useDiagram.d.ts +7 -113
  74. package/dist/hooks/useDiagram.js +7 -127
  75. package/dist/hooks/useDiagramCompareLayout.d.ts +35 -0
  76. package/dist/hooks/useDiagramCompareLayout.js +60 -0
  77. package/dist/hooks/useUpdateEffect.js +2 -4
  78. package/dist/hooks/useXYFlow.d.ts +1 -0
  79. package/dist/hooks/useXYFlow.js +4 -7
  80. package/dist/index.d.ts +2 -2
  81. package/dist/index.js +4 -3
  82. package/dist/likec4diagram/DiagramUI.js +14 -7
  83. package/dist/likec4diagram/DiagramXYFlow.d.ts +2 -2
  84. package/dist/likec4diagram/DiagramXYFlow.js +54 -51
  85. package/dist/likec4diagram/convert-to-xyflow.d.ts +0 -1
  86. package/dist/likec4diagram/custom/edges/RelationshipEdge.js +249 -220
  87. package/dist/likec4diagram/custom/edges/SequenceStepEdge.js +7 -2
  88. package/dist/likec4diagram/custom/edges/edges.css.js +3 -4
  89. package/dist/likec4diagram/custom/edges/useControlPoints.d.ts +8 -0
  90. package/dist/likec4diagram/custom/edges/useControlPoints.js +58 -0
  91. package/dist/likec4diagram/custom/edges/useRelationshipEdgePath.d.ts +7 -0
  92. package/dist/likec4diagram/custom/edges/useRelationshipEdgePath.js +60 -0
  93. package/dist/likec4diagram/custom/edges/utils.d.ts +0 -12
  94. package/dist/likec4diagram/custom/nodes/CompoundActions.js +4 -1
  95. package/dist/likec4diagram/custom/nodes/ElementActions.d.ts +2 -1
  96. package/dist/likec4diagram/custom/nodes/ElementActions.js +15 -10
  97. package/dist/likec4diagram/custom/nodes/ElementNodeDrifts.d.ts +4 -0
  98. package/dist/likec4diagram/custom/nodes/ElementNodeDrifts.js +46 -0
  99. package/dist/likec4diagram/custom/nodes/SequenceActorNode.js +4 -1
  100. package/dist/likec4diagram/custom/nodes/nodes.d.ts +9 -1
  101. package/dist/likec4diagram/custom/nodes/nodes.js +13 -9
  102. package/dist/likec4diagram/custom/nodes/toolbar/ColorButton.d.ts +1 -1
  103. package/dist/likec4diagram/custom/nodes/toolbar/ColorButton.js +1 -1
  104. package/dist/likec4diagram/custom/nodes/toolbar/CompoundToolbar.js +2 -1
  105. package/dist/likec4diagram/custom/nodes/toolbar/ElementToolbar.js +4 -3
  106. package/dist/likec4diagram/custom/nodes/toolbar/_shared.d.ts +1 -11
  107. package/dist/likec4diagram/custom/nodes/toolbar/_shared.js +7 -51
  108. package/dist/likec4diagram/custom/nodes/toolbar/types.d.ts +5 -0
  109. package/dist/likec4diagram/custom/nodes/toolbar/types.js +7 -0
  110. package/dist/likec4diagram/custom/nodes/toolbar/useHandlers.d.ts +8 -0
  111. package/dist/likec4diagram/custom/nodes/toolbar/useHandlers.js +44 -0
  112. package/dist/likec4diagram/relationship-popover/RelationshipPopover.js +5 -7
  113. package/dist/likec4diagram/state/DiagramActorProvider.d.ts +3 -2
  114. package/dist/likec4diagram/state/DiagramActorProvider.js +96 -70
  115. package/dist/likec4diagram/state/assign.d.ts +4 -2
  116. package/dist/likec4diagram/state/assign.js +39 -103
  117. package/dist/likec4diagram/state/createViewChange.d.ts +3 -0
  118. package/dist/likec4diagram/state/createViewChange.js +90 -0
  119. package/dist/likec4diagram/state/diagram-api.d.ts +113 -0
  120. package/dist/likec4diagram/state/diagram-api.js +134 -0
  121. package/dist/likec4diagram/state/hotkeyActor.d.ts +7 -0
  122. package/dist/likec4diagram/state/hotkeyActor.js +17 -1
  123. package/dist/likec4diagram/state/machine.actions.d.ts +2099 -0
  124. package/dist/likec4diagram/state/machine.actions.js +735 -0
  125. package/dist/likec4diagram/state/machine.d.ts +3717 -0
  126. package/dist/likec4diagram/state/machine.js +141 -0
  127. package/dist/likec4diagram/state/machine.setup.d.ts +284 -0
  128. package/dist/likec4diagram/state/machine.setup.js +71 -0
  129. package/dist/likec4diagram/state/machine.state.initializing.d.ts +183 -0
  130. package/dist/likec4diagram/state/machine.state.initializing.js +55 -0
  131. package/dist/likec4diagram/state/machine.state.navigating.d.ts +117 -0
  132. package/dist/likec4diagram/state/machine.state.navigating.js +45 -0
  133. package/dist/likec4diagram/state/machine.state.ready.d.ts +3666 -0
  134. package/dist/likec4diagram/state/machine.state.ready.js +437 -0
  135. package/dist/likec4diagram/state/syncManualLayoutActor.d.ts +220 -63
  136. package/dist/likec4diagram/state/syncManualLayoutActor.js +218 -143
  137. package/dist/likec4diagram/state/types.d.ts +4 -7
  138. package/dist/likec4diagram/state/utils.d.ts +4 -2
  139. package/dist/likec4diagram/state/utils.js +4 -1
  140. package/dist/likec4diagram/types.d.ts +6 -1
  141. package/dist/likec4diagram/ui/LayoutDriftFrame.d.ts +2 -0
  142. package/dist/likec4diagram/ui/LayoutDriftFrame.js +66 -0
  143. package/dist/likec4diagram/ui/index.d.ts +1 -0
  144. package/dist/likec4diagram/ui/notation/NotationPanel.js +10 -12
  145. package/dist/likec4diagram/useLayoutConstraints.d.ts +10 -5
  146. package/dist/likec4diagram/useLayoutConstraints.js +225 -54
  147. package/dist/likec4diagram/xyflow-diagram/diagram-view.d.ts +0 -1
  148. package/dist/likec4diagram/xyflow-diagram/diagram-view.js +15 -15
  149. package/dist/navigationpanel/NavigationPanel.js +11 -7
  150. package/dist/navigationpanel/NavigationPanelControls.d.ts +2 -1
  151. package/dist/navigationpanel/NavigationPanelControls.js +23 -17
  152. package/dist/navigationpanel/NavigationPanelDropdown.d.ts +2 -1
  153. package/dist/navigationpanel/NavigationPanelDropdown.js +62 -42
  154. package/dist/navigationpanel/_common.d.ts +1 -1
  155. package/dist/navigationpanel/_common.js +4 -2
  156. package/dist/navigationpanel/actor.d.ts +11 -7
  157. package/dist/navigationpanel/actor.js +5 -4
  158. package/dist/navigationpanel/comparepanel/CompareActionsMenu.d.ts +3 -0
  159. package/dist/navigationpanel/comparepanel/CompareActionsMenu.js +59 -0
  160. package/dist/navigationpanel/comparepanel/ComparePanel.d.ts +2 -0
  161. package/dist/navigationpanel/comparepanel/ComparePanel.js +42 -0
  162. package/dist/navigationpanel/comparepanel/ComparePanelControls.d.ts +1 -0
  163. package/dist/navigationpanel/comparepanel/ComparePanelControls.js +60 -0
  164. package/dist/navigationpanel/comparepanel/LayoutTypeSwitcher.d.ts +5 -0
  165. package/dist/navigationpanel/comparepanel/LayoutTypeSwitcher.js +38 -0
  166. package/dist/navigationpanel/comparepanel/index.d.ts +1 -0
  167. package/dist/navigationpanel/controls/{ViewDetailsCard.d.ts → DetailsControls.d.ts} +1 -1
  168. package/dist/navigationpanel/controls/{ViewDetailsCard.js → DetailsControls.js} +18 -14
  169. package/dist/navigationpanel/controls/LayoutWarning.d.ts +2 -0
  170. package/dist/navigationpanel/controls/LayoutWarning.js +102 -0
  171. package/dist/navigationpanel/controls/NavigationButtons.js +4 -3
  172. package/dist/navigationpanel/controls/OpenSource.js +2 -2
  173. package/dist/navigationpanel/controls/SearchControl.d.ts +2 -1
  174. package/dist/navigationpanel/controls/SearchControl.js +15 -17
  175. package/dist/navigationpanel/controls/ToggleReadonly.d.ts +1 -1
  176. package/dist/navigationpanel/controls/ToggleReadonly.js +19 -16
  177. package/dist/navigationpanel/controls/index.d.ts +2 -1
  178. package/dist/navigationpanel/dropdown/ProjectsMenu.d.ts +2 -2
  179. package/dist/navigationpanel/dropdown/ProjectsMenu.js +5 -5
  180. package/dist/navigationpanel/editorpanel/CenterCamera.js +5 -2
  181. package/dist/navigationpanel/editorpanel/ChangeAutoLayoutButton.d.ts +1 -1
  182. package/dist/navigationpanel/editorpanel/ChangeAutoLayoutButton.js +21 -20
  183. package/dist/navigationpanel/editorpanel/EditorPanel.js +3 -3
  184. package/dist/navigationpanel/editorpanel/ManualLayoutToolsButton.d.ts +2 -2
  185. package/dist/navigationpanel/editorpanel/ManualLayoutToolsButton.js +16 -13
  186. package/dist/navigationpanel/editorpanel/ToggleReadonly.d.ts +1 -0
  187. package/dist/navigationpanel/editorpanel/ToggleReadonly.js +15 -0
  188. package/dist/navigationpanel/styles.css.d.ts +2 -2
  189. package/dist/navigationpanel/styles.css.js +4 -4
  190. package/dist/navigationpanel/walkthrough/ActiveWalkthroughControls.js +14 -8
  191. package/dist/navigationpanel/walkthrough/DynamicViewControls.d.ts +10 -10
  192. package/dist/navigationpanel/walkthrough/DynamicViewControls.js +31 -14
  193. package/dist/navigationpanel/walkthrough/WalkthroughPanel.d.ts +2 -1
  194. package/dist/navigationpanel/walkthrough/WalkthroughPanel.js +66 -49
  195. package/dist/node_modules/.pnpm/xstate@5.24.0_patch_hash_3a1bd6d012ec67bf6e38a00c3226d1be77089442f83aeb6e424b00ca2a11d21c/node_modules/xstate/actions/dist/xstate-actions.cjs.js +37 -0
  196. package/dist/node_modules/.pnpm/xstate@5.24.0_patch_hash_3a1bd6d012ec67bf6e38a00c3226d1be77089442f83aeb6e424b00ca2a11d21c/node_modules/xstate/dev/dist/xstate-dev.cjs.js +59 -0
  197. package/dist/node_modules/.pnpm/xstate@5.24.0_patch_hash_3a1bd6d012ec67bf6e38a00c3226d1be77089442f83aeb6e424b00ca2a11d21c/node_modules/xstate/dist/assign-dea9f7c8.cjs.js +140 -0
  198. package/dist/node_modules/.pnpm/xstate@5.24.0_patch_hash_3a1bd6d012ec67bf6e38a00c3226d1be77089442f83aeb6e424b00ca2a11d21c/node_modules/xstate/dist/log-ec8d4df4.cjs.js +401 -0
  199. package/dist/node_modules/.pnpm/xstate@5.24.0_patch_hash_3a1bd6d012ec67bf6e38a00c3226d1be77089442f83aeb6e424b00ca2a11d21c/node_modules/xstate/dist/raise-da5b247f.cjs.js +2716 -0
  200. package/dist/node_modules/.pnpm/xstate@5.24.0_patch_hash_3a1bd6d012ec67bf6e38a00c3226d1be77089442f83aeb6e424b00ca2a11d21c/node_modules/xstate/guards/dist/xstate-guards.cjs.js +26 -0
  201. package/dist/overlays/element-details/ElementDetails.js +7 -7
  202. package/dist/overlays/element-details/ElementDetailsCard.js +18 -88
  203. package/dist/overlays/element-details/MetadataValue.d.ts +9 -0
  204. package/dist/overlays/element-details/MetadataValue.js +261 -0
  205. package/dist/overlays/element-details/TabPanelDeployments.js +6 -4
  206. package/dist/overlays/element-details/TabPanelRelationships.js +3 -3
  207. package/dist/overlays/element-details/TabPanelStructure.js +1 -1
  208. package/dist/overlays/element-details/actor.d.ts +3 -2
  209. package/dist/overlays/overlaysActor.d.ts +304 -62
  210. package/dist/overlays/overlaysActor.js +132 -131
  211. package/dist/overlays/relationship-details/RelationshipDetails.js +4 -3
  212. package/dist/overlays/relationship-details/SelectEdge.js +2 -2
  213. package/dist/overlays/relationship-details/actor.d.ts +14 -2
  214. package/dist/overlays/relationship-details/actor.js +23 -5
  215. package/dist/overlays/relationship-details/custom/ElementActions.js +8 -5
  216. package/dist/overlays/relationship-details/custom/edgeTypes.js +4 -1
  217. package/dist/overlays/relationship-details/custom/nodeTypes.js +4 -1
  218. package/dist/overlays/relationship-details/hooks.js +1 -1
  219. package/dist/overlays/relationships-browser/RelationshipsBrowser.js +6 -4
  220. package/dist/overlays/relationships-browser/SelectElement.js +2 -2
  221. package/dist/overlays/relationships-browser/actor.d.ts +239 -173
  222. package/dist/overlays/relationships-browser/actor.js +132 -110
  223. package/dist/overlays/relationships-browser/const.d.ts +3 -3
  224. package/dist/overlays/relationships-browser/const.js +3 -3
  225. package/dist/overlays/relationships-browser/custom/ElementActions.js +44 -37
  226. package/dist/overlays/relationships-browser/custom/edgeTypes.js +4 -1
  227. package/dist/overlays/relationships-browser/custom/nodeTypes.js +4 -1
  228. package/dist/overlays/relationships-browser/hooks.js +7 -6
  229. package/dist/search/Search.js +2 -1
  230. package/dist/search/components/ElementsColumn.js +5 -3
  231. package/dist/search/components/PickView.js +1 -1
  232. package/dist/search/components/SearchByTags.js +21 -44
  233. package/dist/search/components/SearchInput.js +1 -1
  234. package/dist/search/components/ViewsColum.js +6 -4
  235. package/dist/shadowroot/ShadowRoot.js +53 -12
  236. package/dist/shadowroot/styles.css.d.ts +0 -4
  237. package/dist/shadowroot/styles.css.js +1 -41
  238. package/dist/styles.css2.js +1 -1
  239. package/dist/utils/index.d.ts +4 -4
  240. package/dist/utils/vector.d.ts +78 -21
  241. package/dist/utils/vector.js +91 -24
  242. package/dist/utils/view-bounds.d.ts +8 -0
  243. package/dist/utils/view-bounds.js +57 -0
  244. package/dist/utils/xyflow.d.ts +49 -7
  245. package/dist/utils/xyflow.js +63 -11
  246. package/package.json +28 -27
  247. package/panda.buildinfo.json +140 -83
  248. package/styles-min.css +1 -1
  249. package/styles.css +1 -1
  250. package/dist/hooks/useCurrentViewId.d.ts +0 -6
  251. package/dist/likec4diagram/custom/edges/utils.js +0 -23
  252. package/dist/likec4diagram/state/diagram-machine.d.ts +0 -2590
  253. package/dist/likec4diagram/state/diagram-machine.js +0 -1180
  254. package/dist/navigationpanel/editorpanel/LayoutDriftNotification.d.ts +0 -1
  255. package/dist/navigationpanel/editorpanel/LayoutDriftNotification.js +0 -56
  256. package/dist/utils/get-view-bounds.d.ts +0 -3
  257. package/dist/utils/get-view-bounds.js +0 -14
  258. /package/dist/base/{types.js → Base.js} +0 -0
  259. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/createReactComponent.js +0 -0
  260. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/defaultAttributes.js +0 -0
  261. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconAlertTriangle.js +0 -0
  262. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconArrowDownRight.js +0 -0
  263. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconArrowLeft.js +0 -0
  264. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconArrowRight.js +0 -0
  265. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconBolt.js +0 -0
  266. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconBrowser.js +0 -0
  267. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconCheck.js +0 -0
  268. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconChevronDown.js +0 -0
  269. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconChevronLeft.js +0 -0
  270. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconChevronRight.js +0 -0
  271. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconCopy.js +0 -0
  272. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconCylinder.js +0 -0
  273. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconDeviceMobile.js +0 -0
  274. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconDirectionSignFilled.js +0 -0
  275. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconExternalLink.js +0 -0
  276. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconFileSymlink.js +0 -0
  277. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconFocusCentered.js +0 -0
  278. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconFolderFilled.js +0 -0
  279. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconHelpCircle.js +0 -0
  280. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconId.js +0 -0
  281. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconInfoCircle.js +0 -0
  282. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignBottom.js +0 -0
  283. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignCenter.js +0 -0
  284. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignLeft.js +0 -0
  285. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignMiddle.js +0 -0
  286. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignRight.js +0 -0
  287. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignTop.js +0 -0
  288. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutBoardSplit.js +0 -0
  289. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutCollage.js +0 -0
  290. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutDashboard.js +0 -0
  291. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconLink.js +0 -0
  292. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconLock.js +0 -0
  293. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconLockOpen2.js +0 -0
  294. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconPlayerPlayFilled.js +0 -0
  295. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconPlayerSkipBackFilled.js +0 -0
  296. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconPlayerSkipForwardFilled.js +0 -0
  297. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconPlayerStopFilled.js +0 -0
  298. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconRectangularPrism.js +0 -0
  299. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconReorder.js +0 -0
  300. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconRouteOff.js +0 -0
  301. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconSearch.js +0 -0
  302. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconSelector.js +0 -0
  303. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconStack2.js +0 -0
  304. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconStarFilled.js +0 -0
  305. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconTarget.js +0 -0
  306. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconTransform.js +0 -0
  307. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconUser.js +0 -0
  308. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconX.js +0 -0
  309. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconZoomScan.js +0 -0
@@ -1,15 +1,16 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { cx } from '@likec4/styles/css';
3
3
  import { useMantineColorScheme } from '@mantine/core';
4
- import { useCallbackRef } from '@mantine/hooks';
5
4
  import { ReactFlow, useStore } from '@xyflow/react';
5
+ import { useMemo } from 'react';
6
+ import { useCallbackRef } from '../hooks/useCallbackRef.js';
6
7
  import { useUpdateEffect } from '../hooks/useUpdateEffect.js';
7
8
  import { useIsZoomTooSmall, useXYStoreApi } from '../hooks/useXYFlow.js';
8
9
  import { roundDpr } from '../utils/roundDpr.js';
9
10
  import { stopPropagation } from '../utils/xyflow.js';
10
11
  import { Background } from './Background.js';
12
+ import { Base } from './Base.js';
11
13
  import { MinZoom, MaxZoom } from './const.js';
12
- import { Base } from './types.js';
13
14
 
14
15
  function BaseXYFlow({
15
16
  nodes,
@@ -35,6 +36,12 @@ function BaseXYFlow({
35
36
  onEdgeMouseLeave,
36
37
  ...props
37
38
  }) {
39
+ const fitViewOptions = useMemo(() => ({
40
+ minZoom: MinZoom,
41
+ maxZoom: 1,
42
+ padding: fitViewPadding,
43
+ includeHiddenNodes: false
44
+ }), [fitViewPadding]);
38
45
  const isBgWithPattern = background !== "transparent" && background !== "solid";
39
46
  const isZoomTooSmall = useIsZoomTooSmall();
40
47
  const xystore = useXYStoreApi();
@@ -64,12 +71,7 @@ function BaseXYFlow({
64
71
  maxZoom: zoomable ? MaxZoom : 1,
65
72
  minZoom: zoomable ? MinZoom : 1,
66
73
  fitView,
67
- fitViewOptions: {
68
- minZoom: MinZoom,
69
- maxZoom: 1,
70
- padding: fitViewPadding,
71
- includeHiddenNodes: false
72
- },
74
+ fitViewOptions,
73
75
  preventScrolling: zoomable || pannable,
74
76
  defaultMarkerColor: "var(--xy-edge-stroke)",
75
77
  noDragClassName: "nodrag",
@@ -99,57 +101,49 @@ function BaseXYFlow({
99
101
  }
100
102
  onMoveEnd?.(event, { x: roundedX, y: roundedY, zoom });
101
103
  }),
102
- onNodeMouseEnter: useCallbackRef((_event, node) => {
104
+ onNodeMouseEnter: useCallbackRef((event, node) => {
103
105
  if (onNodeMouseEnter) {
104
- onNodeMouseEnter(_event, node);
106
+ onNodeMouseEnter(event, node);
105
107
  return;
106
108
  }
107
- if (!node.data.hovered) {
108
- onNodesChange([{
109
- id: node.id,
110
- type: "replace",
111
- item: Base.setHovered(node, true)
112
- }]);
113
- }
109
+ onNodesChange([{
110
+ id: node.id,
111
+ type: "replace",
112
+ item: Base.setHovered(node, true)
113
+ }]);
114
114
  }),
115
- onNodeMouseLeave: useCallbackRef((_event, node) => {
115
+ onNodeMouseLeave: useCallbackRef((event, node) => {
116
116
  if (onNodeMouseLeave) {
117
- onNodeMouseLeave(_event, node);
117
+ onNodeMouseLeave(event, node);
118
118
  return;
119
119
  }
120
- if (node.data.hovered) {
121
- onNodesChange([{
122
- id: node.id,
123
- type: "replace",
124
- item: Base.setHovered(node, false)
125
- }]);
126
- }
120
+ onNodesChange([{
121
+ id: node.id,
122
+ type: "replace",
123
+ item: Base.setHovered(node, false)
124
+ }]);
127
125
  }),
128
- onEdgeMouseEnter: useCallbackRef((_event, edge) => {
126
+ onEdgeMouseEnter: useCallbackRef((event, edge) => {
129
127
  if (onEdgeMouseEnter) {
130
- onEdgeMouseEnter(_event, edge);
128
+ onEdgeMouseEnter(event, edge);
131
129
  return;
132
130
  }
133
- if (!edge.data.hovered) {
134
- onEdgesChange([{
135
- id: edge.id,
136
- type: "replace",
137
- item: Base.setHovered(edge, true)
138
- }]);
139
- }
131
+ onEdgesChange([{
132
+ id: edge.id,
133
+ type: "replace",
134
+ item: Base.setHovered(edge, true)
135
+ }]);
140
136
  }),
141
- onEdgeMouseLeave: useCallbackRef((_event, edge) => {
137
+ onEdgeMouseLeave: useCallbackRef((event, edge) => {
142
138
  if (onEdgeMouseLeave) {
143
- onEdgeMouseLeave(_event, edge);
139
+ onEdgeMouseLeave(event, edge);
144
140
  return;
145
141
  }
146
- if (edge.data.hovered) {
147
- onEdgesChange([{
148
- id: edge.id,
149
- type: "replace",
150
- item: Base.setHovered(edge, false)
151
- }]);
152
- }
142
+ onEdgesChange([{
143
+ id: edge.id,
144
+ type: "replace",
145
+ item: Base.setHovered(edge, false)
146
+ }]);
153
147
  }),
154
148
  onNodeDoubleClick: stopPropagation,
155
149
  onEdgeDoubleClick: stopPropagation,
@@ -9,7 +9,7 @@ export declare const MaxZoom = 3;
9
9
  export declare const FitViewPaddings: {
10
10
  default: "16px";
11
11
  withControls: {
12
- top: "50px";
12
+ top: "58px";
13
13
  left: "16px";
14
14
  right: "16px";
15
15
  bottom: "16px";
@@ -10,7 +10,7 @@ const MaxZoom = 3;
10
10
  const FitViewPaddings = {
11
11
  default: "16px",
12
12
  withControls: {
13
- top: "50px",
13
+ top: "58px",
14
14
  left: "16px",
15
15
  right: "16px",
16
16
  bottom: "16px"
@@ -1,3 +1,7 @@
1
- export { BaseXYFlow, type BaseXYFlowProps } from './BaseXYFlow';
2
- export * from './types';
1
+ export { Background, type XYBackground, type XYBackgroundProps, type XYBackgroundVariant, } from './Background';
2
+ export { BaseXYFlow, type BaseXYFlowProps, } from './BaseXYFlow';
3
+ export * from './Base';
3
4
  export * from './const';
5
+ export * from './types';
6
+ export { updateEdges } from './updateEdges';
7
+ export { updateNodes } from './updateNodes';
@@ -1,5 +1,6 @@
1
1
  import { Edge, EdgeProps, Node, NodeProps } from '@xyflow/react';
2
2
  import { OptionalKeysOf, SetRequired, Simplify } from 'type-fest';
3
+ import { Base } from './Base';
3
4
  export type BaseNodeData = {
4
5
  /**
5
6
  * Whether the cursor is hovering over the node
@@ -41,33 +42,6 @@ export type BaseNodePropsWithData<Data extends Record<string, unknown>> = BaseNo
41
42
  export interface BaseEdgeProps<E extends BaseEdge = BaseEdge> extends EdgeProps<E> {
42
43
  }
43
44
  export type BaseEdgePropsWithData<Data extends Record<string, unknown>> = BaseEdgeProps<BaseEdge<Data>>;
44
- type WithDimmed = {
45
- data: {
46
- dimmed?: Base.Dimmed;
47
- };
48
- };
49
- type WithHovered = {
50
- data: {
51
- hovered?: boolean;
52
- };
53
- };
54
- declare function setDimmed<T extends WithDimmed>(value: T, dimmed: 'immediate' | boolean): T;
55
- declare function setDimmed(dimmed: 'immediate' | boolean): <T extends WithDimmed>(value: T) => T;
56
- declare function setHovered<T extends WithHovered>(value: T, hovered: boolean): T;
57
- declare function setHovered(hovered: boolean): <T extends WithHovered>(value: T) => T;
58
- type WithData<D> = {
59
- data: D;
60
- };
61
- declare function setData<E extends WithData<any>>(value: E, state: Partial<E['data']>): E;
62
- declare function setData<E extends WithData<any>>(state: Partial<E['data']>): (value: E) => E;
63
- export declare const Base: {
64
- setDimmed: typeof setDimmed;
65
- setHovered: typeof setHovered;
66
- setData: typeof setData;
67
- };
68
- export declare namespace Base {
69
- type Dimmed = 'immediate' | boolean;
70
- }
71
45
  /**
72
46
  * To cooperate with `exactOptionalPropertyTypes` in `tsconfig.json`
73
47
  *
@@ -90,4 +64,3 @@ export type NonOptional<T extends object, Keys extends OptionalKeysOf<T> = Optio
90
64
  } & {
91
65
  [P in Keys]-?: T[P] | undefined;
92
66
  }>;
93
- export {};
@@ -4,14 +4,15 @@ import { isDefined, omit } from 'remeda';
4
4
  function _update(current, update) {
5
5
  return update.map((next) => {
6
6
  const existing = current.find((n) => n.id === next.id);
7
- if (existing && deepEqual(existing.type, next.type)) {
8
- if (deepEqual(existing.hidden ?? false, next.hidden ?? false) && deepEqual(existing.source, next.source) && deepEqual(existing.sourceHandle ?? null, next.sourceHandle ?? null) && deepEqual(existing.target, next.target) && deepEqual(existing.targetHandle ?? null, next.targetHandle ?? null) && deepEqual(existing.zIndex ?? 0, next.zIndex ?? 0) && deepEqual(existing.data, next.data)) {
7
+ if (existing && existing.type === next.type && existing.source === next.source && existing.target === next.target) {
8
+ const isSameData = deepEqual(existing.data, next.data);
9
+ if (isSameData && deepEqual(existing.hidden ?? false, next.hidden ?? false) && deepEqual(existing.selected ?? false, next.selected ?? false) && deepEqual(existing.animated ?? false, next.animated ?? false) && deepEqual(existing.sourceHandle ?? null, next.sourceHandle ?? null) && deepEqual(existing.targetHandle ?? null, next.targetHandle ?? null) && deepEqual(existing.zIndex ?? 0, next.zIndex ?? 0) && deepEqual(existing.label ?? null, next.label ?? null)) {
9
10
  return existing;
10
11
  }
11
12
  return {
12
13
  ...omit(existing, ["hidden", "zIndex"]),
13
14
  ...next,
14
- data: next.data
15
+ data: isSameData ? existing.data : next.data
15
16
  };
16
17
  }
17
18
  return next;
@@ -6,8 +6,9 @@ function _update(current, updated) {
6
6
  return updated.map((update) => {
7
7
  const existing = current.find((n) => n.id === update.id);
8
8
  if (existing && deepEqual(existing.type, update.type)) {
9
+ const isSameData = deepEqual(existing.data, update.data);
9
10
  const { width: existingWidth, height: existingHeight } = getNodeDimensions(existing);
10
- if (deepEqual(existingWidth, update.initialWidth) && deepEqual(existingHeight, update.initialHeight) && deepEqual(existing.parentId ?? null, update.parentId ?? null) && deepEqual(existing.hidden ?? false, update.hidden ?? false) && deepEqual(existing.zIndex ?? 0, update.zIndex ?? 0) && deepEqual(existing.position, update.position) && deepEqual(existing.data, update.data)) {
11
+ if (isSameData && deepEqual(existingWidth, update.initialWidth) && deepEqual(existingHeight, update.initialHeight) && deepEqual(existing.parentId ?? null, update.parentId ?? null) && deepEqual(existing.hidden ?? false, update.hidden ?? false) && deepEqual(existing.zIndex ?? 0, update.zIndex ?? 0) && deepEqual(existing.position, update.position)) {
11
12
  return existing;
12
13
  }
13
14
  return {
@@ -16,7 +17,7 @@ function _update(current, updated) {
16
17
  // Force dimensions from update
17
18
  width: update.initialWidth,
18
19
  height: update.initialHeight,
19
- data: update.data
20
+ data: isSameData ? existing.data : update.data
20
21
  };
21
22
  }
22
23
  return update;
@@ -6,7 +6,7 @@ import { useDebouncedValue } from '@mantine/hooks';
6
6
  import * as m from 'motion/react-m';
7
7
  import { stopPropagation } from '../../utils/xyflow.js';
8
8
  import { compoundActionBtn } from './actionbtns.css.js';
9
- import IconZoomScan from '../../node_modules/.pnpm/@tabler_icons-react@3.35.0_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconZoomScan.js';
9
+ import IconZoomScan from '../../node_modules/.pnpm/@tabler_icons-react@3.35.0_react@19.2.0/node_modules/@tabler/icons-react/dist/esm/icons/IconZoomScan.js';
10
10
 
11
11
  function CompoundActionButton({
12
12
  data: {
@@ -6,7 +6,7 @@ import { useDebouncedValue } from '@mantine/hooks';
6
6
  import * as m from 'motion/react-m';
7
7
  import { stopPropagation } from '../../utils/xyflow.js';
8
8
  import { compoundActionBtn } from './actionbtns.css.js';
9
- import IconId from '../../node_modules/.pnpm/@tabler_icons-react@3.35.0_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconId.js';
9
+ import IconId from '../../node_modules/.pnpm/@tabler_icons-react@3.35.0_react@19.2.0/node_modules/@tabler/icons-react/dist/esm/icons/IconId.js';
10
10
 
11
11
  function CompoundDetailsButton({
12
12
  data: {
@@ -3,7 +3,7 @@ import { cx } from '@likec4/styles/css';
3
3
  import { edgeActionBtn } from '@likec4/styles/recipes';
4
4
  import { ActionIcon } from '@mantine/core';
5
5
  import { stopPropagation } from '../../utils/xyflow.js';
6
- import IconZoomScan from '../../node_modules/.pnpm/@tabler_icons-react@3.35.0_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconZoomScan.js';
6
+ import IconZoomScan from '../../node_modules/.pnpm/@tabler_icons-react@3.35.0_react@19.2.0/node_modules/@tabler/icons-react/dist/esm/icons/IconZoomScan.js';
7
7
 
8
8
  function EdgeActionButton({ icon, onClick }) {
9
9
  return /* @__PURE__ */ jsx(
@@ -7,5 +7,5 @@ type EdgeContainerProps = PropsWithChildren<BaseEdgePropsWithData<Data> & {
7
7
  component?: 'g' | 'svg' | undefined;
8
8
  className?: string | undefined;
9
9
  }>;
10
- export declare function EdgeContainer({ className, component, data: { color, hovered: isHovered, active: isActive, dimmed: isDimmed, ...data }, children, style, }: EdgeContainerProps): import("react/jsx-runtime").JSX.Element;
10
+ export declare function EdgeContainer({ className, component, selected, data: { color, hovered: isHovered, active: isActive, dimmed: isDimmed, ...data }, children, style, }: EdgeContainerProps): import("react/jsx-runtime").JSX.Element;
11
11
  export {};
@@ -6,6 +6,7 @@ import { edgeContainer } from './edge.css.js';
6
6
  function EdgeContainer({
7
7
  className,
8
8
  component = "g",
9
+ selected = false,
9
10
  data: {
10
11
  color = "gray",
11
12
  hovered: isHovered = false,
@@ -27,6 +28,9 @@ function EdgeContainer({
27
28
  "data-edge-active": isActive,
28
29
  "data-edge-animated": isActive,
29
30
  "data-likec4-hovered": isHovered,
31
+ ...selected && {
32
+ "data-likec4-selected": selected
33
+ },
30
34
  ...isDimmed !== false && {
31
35
  "data-likec4-dimmed": isDimmed
32
36
  }
@@ -7,6 +7,7 @@ type Data = UndefinedOnPartialDeep<Pick<DiagramEdge, 'label' | 'technology'>>;
7
7
  type EdgeLabelProps = HTMLMotionProps<'div'> & {
8
8
  children?: React.ReactNode;
9
9
  edgeProps: BaseEdgePropsWithData<Data>;
10
+ pointerEvents?: 'all' | 'none';
10
11
  };
11
12
  export declare const EdgeLabel: ForwardRefExoticComponent<Omit<EdgeLabelProps, "ref"> & RefAttributes<HTMLDivElement>>;
12
13
  export {};
@@ -18,6 +18,7 @@ const EdgeLabel = forwardRef(({
18
18
  selected = false,
19
19
  selectable = false
20
20
  },
21
+ pointerEvents = "all",
21
22
  className,
22
23
  style: _style,
23
24
  // omit
@@ -26,6 +27,7 @@ const EdgeLabel = forwardRef(({
26
27
  }, ref) => {
27
28
  const stepNum = isStepEdgeId(id) ? extractStep(id) : null;
28
29
  const classes = edgeLabel({
30
+ pointerEvents,
29
31
  isStepEdge: stepNum !== null,
30
32
  cursor: selectable || stepNum !== null ? "pointer" : "default"
31
33
  });
@@ -14,5 +14,5 @@ type EdgeLabelContainerProps = HTMLAttributes<HTMLDivElement> & {
14
14
  } | undefined;
15
15
  edgeProps: BaseEdgePropsWithData<Data>;
16
16
  };
17
- export declare function EdgeLabelContainer({ edgeProps: { id, data: { hovered: isHovered, active: isActive, dimmed: isDimmed, labelBBox, color, }, }, labelPosition: labelXY, className, style, children, ...rest }: EdgeLabelContainerProps): import("react/jsx-runtime").JSX.Element | null;
17
+ export declare function EdgeLabelContainer({ edgeProps: { id, selected, data: { hovered: isHovered, active: isActive, dimmed: isDimmed, labelBBox, color, }, }, labelPosition: labelXY, className, style, children, ...rest }: EdgeLabelContainerProps): import("react/jsx-runtime").JSX.Element | null;
18
18
  export {};
@@ -13,6 +13,7 @@ const toCssVarValue = (value) => {
13
13
  function EdgeLabelContainer({
14
14
  edgeProps: {
15
15
  id,
16
+ selected = false,
16
17
  data: {
17
18
  hovered: isHovered = false,
18
19
  active: isActive = false,
@@ -53,6 +54,9 @@ function EdgeLabelContainer({
53
54
  "data-likec4-color": color,
54
55
  "data-edge-active": isActive,
55
56
  "data-edge-animated": isActive,
57
+ ...selected !== false && {
58
+ "data-likec4-selected": selected
59
+ },
56
60
  ...isDimmed !== false && {
57
61
  "data-likec4-dimmed": isDimmed
58
62
  },
@@ -6,6 +6,10 @@ type Data = UndefinedOnPartialDeep<Pick<DiagramEdge, 'line' | 'dir' | 'tail' | '
6
6
  type EdgePathProps = {
7
7
  edgeProps: BaseEdgePropsWithData<Data>;
8
8
  svgPath: string;
9
+ /**
10
+ * If true, the edge is being dragged (used to disable animations)
11
+ */
12
+ isDragging?: boolean;
9
13
  strokeWidth?: number;
10
14
  onEdgePointerDown?: PointerEventHandler<SVGGElement> | undefined;
11
15
  };
@@ -17,6 +17,8 @@ const EdgePath = forwardRef(({
17
17
  style,
18
18
  interactionWidth
19
19
  },
20
+ isDragging = false,
21
+ // omit
20
22
  onEdgePointerDown,
21
23
  strokeWidth,
22
24
  svgPath
@@ -37,16 +39,16 @@ const EdgePath = forwardRef(({
37
39
  strokeDasharray = "8,10";
38
40
  }
39
41
  return /* @__PURE__ */ jsxs(Fragment, { children: [
40
- selectable && /* @__PURE__ */ jsx(
42
+ selectable && !isDragging && /* @__PURE__ */ jsx(
41
43
  "path",
42
44
  {
43
45
  className: cx(
44
46
  "react-flow__edge-interaction",
45
- "hide-on-reduced-graphics",
46
47
  css({
47
48
  fill: "none"
48
49
  })
49
50
  ),
51
+ onPointerDown: onEdgePointerDown,
50
52
  d: svgPath,
51
53
  style: {
52
54
  strokeWidth: interactionWidth ?? 10,
@@ -60,7 +62,7 @@ const EdgePath = forwardRef(({
60
62
  MarkerStart && /* @__PURE__ */ jsx(MarkerStart, { id: "start" + id }),
61
63
  MarkerEnd && /* @__PURE__ */ jsx(MarkerEnd, { id: "end" + id })
62
64
  ] }),
63
- /* @__PURE__ */ jsx(
65
+ !isDragging && /* @__PURE__ */ jsx(
64
66
  "path",
65
67
  {
66
68
  className: cx(
@@ -71,7 +73,8 @@ const EdgePath = forwardRef(({
71
73
  d: svgPath,
72
74
  style,
73
75
  strokeLinecap: "round"
74
- }
76
+ },
77
+ "edge-path-bg"
75
78
  ),
76
79
  /* @__PURE__ */ jsx(
77
80
  "path",
@@ -89,7 +92,8 @@ const EdgePath = forwardRef(({
89
92
  strokeDasharray,
90
93
  markerStart: MarkerStart ? `url(#start${id})` : void 0,
91
94
  markerEnd: MarkerEnd ? `url(#end${id})` : void 0
92
- }
95
+ },
96
+ "edge-path"
93
97
  )
94
98
  ] })
95
99
  ] });
@@ -1,7 +1,8 @@
1
- import { BaseNodeData } from '../../base/types';
2
1
  type ElementActionButtonsProps = {
3
2
  selected?: boolean;
4
- data: BaseNodeData;
3
+ data: {
4
+ hovered?: boolean;
5
+ };
5
6
  buttons: ElementActionButtons.Item[];
6
7
  };
7
8
  /**
@@ -7,7 +7,7 @@ import { ActionIcon } from '@mantine/core';
7
7
  import { useId } from '@mantine/hooks';
8
8
  import * as m from 'motion/react-m';
9
9
  import { stopPropagation } from '../../utils/xyflow.js';
10
- import IconBolt from '../../node_modules/.pnpm/@tabler_icons-react@3.35.0_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconBolt.js';
10
+ import IconBolt from '../../node_modules/.pnpm/@tabler_icons-react@3.35.0_react@19.2.0/node_modules/@tabler/icons-react/dist/esm/icons/IconBolt.js';
11
11
 
12
12
  const container = hstack({
13
13
  position: "absolute",
@@ -3,10 +3,9 @@ import { cx, css } from '@likec4/styles/css';
3
3
  import { Box } from '@likec4/styles/jsx';
4
4
  import { actionBtn } from '@likec4/styles/recipes';
5
5
  import { ActionIcon } from '@mantine/core';
6
- import { useId } from '@mantine/hooks';
7
6
  import * as m from 'motion/react-m';
8
7
  import { stopPropagation } from '../../utils/xyflow.js';
9
- import IconId from '../../node_modules/.pnpm/@tabler_icons-react@3.35.0_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconId.js';
8
+ import IconId from '../../node_modules/.pnpm/@tabler_icons-react@3.35.0_react@19.2.0/node_modules/@tabler/icons-react/dist/esm/icons/IconId.js';
10
9
 
11
10
  const container = css({
12
11
  position: "absolute",
@@ -38,7 +37,6 @@ function ElementDetailsButton({
38
37
  icon,
39
38
  onClick
40
39
  }) {
41
- const id = useId();
42
40
  return /* @__PURE__ */ jsx(Box, { className: cx(container, "details-button"), children: /* @__PURE__ */ jsx(
43
41
  ActionIcon,
44
42
  {
@@ -64,8 +62,7 @@ function ElementDetailsButton({
64
62
  onClick,
65
63
  onDoubleClick: stopPropagation,
66
64
  children: icon ?? /* @__PURE__ */ jsx(IconId, { stroke: 1.8, style: { width: "75%" } })
67
- },
68
- id
65
+ }
69
66
  ) });
70
67
  }
71
68
 
@@ -2,42 +2,30 @@ import { css } from '@likec4/styles/css';
2
2
 
3
3
  const container = css({
4
4
  position: "relative",
5
- width: "100%",
6
- height: "100%",
5
+ width: "full",
6
+ height: "full",
7
7
  padding: "0",
8
8
  margin: "0",
9
9
  display: "flex",
10
10
  alignItems: "center",
11
11
  justifyContent: "center",
12
12
  pointerEvents: "none",
13
- _before: {
14
- content: '" "',
15
- position: "absolute",
16
- top: "[calc(100% - 4px)]",
17
- left: "0",
18
- width: "100%",
19
- height: "24px",
20
- background: "[transparent]",
21
- pointerEvents: "all"
22
- },
23
13
  _focusVisible: {
24
14
  outline: "none"
25
15
  },
26
- // _whenDimmed: {
27
- // opacity: 0.25,
28
- // transition: `opacity 400ms {easings.inOut}, filter 500ms {easings.inOut}`,
29
- // transitionDelay: '50ms',
30
- // grayscale: 0.85,
31
- // blur: '2px',
32
- // // filter: `grayscale(0.85) ${fallbackVar(vars.safariAnimationHook, 'blur(2px)')}`,
33
- // },
34
- // _whenDimmedImmediate: {
35
- // opacity: 0.25,
36
- // grayscale: 0.85,
37
- // blur: '2px',
38
- // // transition: `opacity 100ms ${easings.inOut}, filter 100ms ${easings.inOut}`,
39
- // // filter: `grayscale(0.85) ${fallbackVar(vars.safariAnimationHook, 'blur(2px)')}`,
40
- // },
16
+ _whenSelectable: {
17
+ pointerEvents: "all",
18
+ _before: {
19
+ content: '" "',
20
+ position: "absolute",
21
+ top: "[calc(100% - 4px)]",
22
+ left: "0",
23
+ width: "full",
24
+ height: "24px",
25
+ background: "transparent",
26
+ pointerEvents: "all"
27
+ }
28
+ },
41
29
  _reduceGraphicsOnPan: {
42
30
  _before: {
43
31
  display: "none"
@@ -9,7 +9,8 @@ import { NodeToolbar, Position } from '@xyflow/react';
9
9
  import { deepEqual } from 'fast-equals';
10
10
  import { forwardRef, memo, useEffect, useCallback } from 'react';
11
11
  import { useTagSpecification } from '../../context/TagStylesContext.js';
12
- import { useDiagram } from '../../hooks/useDiagram.js';
12
+ import '@xstate/react';
13
+ import { useDiagram } from '../../hooks/safeContext.js';
13
14
  import { useCurrentZoom } from '../../hooks/useXYFlow.js';
14
15
  import { stopPropagation } from '../../utils/xyflow.js';
15
16
 
@@ -4,9 +4,11 @@ import { memo } from 'react';
4
4
  const isSame = (a, b) => {
5
5
  return Math.abs(a - b) < 2.5;
6
6
  };
7
- const edgePropsEqual = (prev, next) => prev.id === next.id && deepEqual(prev.selected ?? false, next.selected ?? false) && deepEqual(prev.animated ?? false, next.animated ?? false) && deepEqual(prev.source, next.source) && deepEqual(prev.sourceHandleId ?? null, next.sourceHandleId ?? null) && deepEqual(prev.sourcePosition, next.sourcePosition) && deepEqual(prev.target, next.target) && deepEqual(prev.targetHandleId ?? null, next.targetHandleId ?? null) && deepEqual(prev.targetPosition, next.targetPosition) && isSame(prev.sourceX, next.sourceX) && isSame(prev.sourceY, next.sourceY) && isSame(prev.targetX, next.targetX) && isSame(prev.targetY, next.targetY) && deepEqual(prev.data, next.data);
7
+ const edgePropsEqual = (prev, next) => prev.id === next.id && deepEqual(prev.selected ?? false, next.selected ?? false) && deepEqual(prev.animated ?? false, next.animated ?? false) && deepEqual(prev.source, next.source) && isSame(prev.sourceX, next.sourceX) && isSame(prev.sourceY, next.sourceY) && deepEqual(prev.sourceHandleId ?? null, next.sourceHandleId ?? null) && deepEqual(prev.sourcePosition, next.sourcePosition) && deepEqual(prev.target, next.target) && isSame(prev.targetY, next.targetY) && isSame(prev.targetX, next.targetX) && deepEqual(prev.targetHandleId ?? null, next.targetHandleId ?? null) && deepEqual(prev.targetPosition, next.targetPosition) && deepEqual(prev.data, next.data);
8
8
  function memoEdge(Edge) {
9
- return memo(Edge, edgePropsEqual);
9
+ const Memo = memo(Edge, edgePropsEqual);
10
+ Memo.displayName = `MemoEdge(${Edge.displayName || Edge.name})`;
11
+ return Memo;
10
12
  }
11
13
 
12
14
  export { memoEdge };
@@ -1,3 +1,3 @@
1
1
  import { FunctionComponent } from 'react';
2
2
  import { BaseNodeProps } from '../base/types';
3
- export declare function memoNode<P extends BaseNodeProps>(Node: FunctionComponent<P>): FunctionComponent<P>;
3
+ export declare function memoNode<P extends BaseNodeProps>(Node: FunctionComponent<P>, displayName?: string): FunctionComponent<P>;
@@ -2,10 +2,10 @@ import { deepEqual } from 'fast-equals';
2
2
  import { memo } from 'react';
3
3
 
4
4
  function nodePropsEqual(prev, next) {
5
- return 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.zIndex ?? 0, next.zIndex ?? 0) && deepEqual(prev.data, next.data);
5
+ return prev.id === next.id && deepEqual(prev.type, next.type) && 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.zIndex ?? 0, next.zIndex ?? 0) && deepEqual(prev.data, next.data);
6
6
  }
7
7
  const isMemoized = Symbol.for("isMemoized");
8
- function memoNode(Node) {
8
+ function memoNode(Node, displayName = "Node") {
9
9
  if (Node.hasOwnProperty(isMemoized)) {
10
10
  return Node;
11
11
  }
@@ -13,7 +13,7 @@ function memoNode(Node) {
13
13
  Node,
14
14
  nodePropsEqual
15
15
  );
16
- NodeComponent.displayName = "Node";
16
+ NodeComponent.displayName = displayName;
17
17
  Object.defineProperty(NodeComponent, isMemoized, {
18
18
  enumerable: false,
19
19
  writable: false,