@likec4/diagram 1.26.2 → 1.27.1

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 (487) hide show
  1. package/README.md +1 -1
  2. package/bundle/index.js +48937 -0
  3. package/dist/LikeC4CustomColors.js +27 -23
  4. package/dist/LikeC4Diagram.d.ts +1 -1
  5. package/dist/LikeC4Diagram.js +38 -43
  6. package/dist/LikeC4Diagram.props.d.ts +6 -0
  7. package/dist/LikeC4ModelProvider.js +6 -6
  8. package/dist/StaticLikeC4Diagram.js +5 -5
  9. package/dist/_virtual/_commonjsHelpers.js +5 -0
  10. package/dist/_virtual/default-map.js +7 -0
  11. package/dist/base/Background.js +6 -6
  12. package/dist/base/BaseXYFlow.d.ts +1 -1
  13. package/dist/base/BaseXYFlow.js +75 -46
  14. package/dist/base/const.js +2 -5
  15. package/dist/base/primitives/NodeHandles.js +5 -5
  16. package/dist/base/primitives/compound/CompoundActionButton.js +60 -33
  17. package/dist/base/primitives/compound/CompoundDetailsButton.js +66 -35
  18. package/dist/base/primitives/compound/CompoundNodeContainer.css.d.ts +35 -7
  19. package/dist/base/primitives/compound/CompoundNodeContainer.css.js +131 -12
  20. package/dist/base/primitives/compound/CompoundNodeContainer.d.ts +4 -20
  21. package/dist/base/primitives/compound/CompoundNodeContainer.js +99 -97
  22. package/dist/base/primitives/compound/CompoundTitle.d.ts +1 -1
  23. package/dist/base/primitives/compound/CompoundTitle.js +74 -12
  24. package/dist/base/primitives/compound/actionbtns.css.d.ts +11 -0
  25. package/dist/base/primitives/compound/actionbtns.css.js +32 -0
  26. package/dist/base/primitives/customEdge.d.ts +5 -5
  27. package/dist/base/primitives/customEdge.js +6 -7
  28. package/dist/base/primitives/customNode.js +5 -6
  29. package/dist/base/primitives/edge/EdgeActionButton.js +10 -12
  30. package/dist/base/primitives/edge/EdgeContainer.d.ts +1 -1
  31. package/dist/base/primitives/edge/EdgeContainer.js +21 -15
  32. package/dist/base/primitives/edge/EdgeLabel.css.d.ts +24 -10
  33. package/dist/base/primitives/edge/EdgeLabel.css.js +130 -20
  34. package/dist/base/primitives/edge/EdgeLabel.d.ts +4 -44
  35. package/dist/base/primitives/edge/EdgeLabel.js +35 -88
  36. package/dist/base/primitives/edge/EdgeLabelContainer.d.ts +18 -0
  37. package/dist/base/primitives/edge/EdgeLabelContainer.js +91 -0
  38. package/dist/base/primitives/edge/EdgeMarkers.js +5 -6
  39. package/dist/base/primitives/edge/EdgePath.d.ts +7 -7
  40. package/dist/base/primitives/edge/EdgePath.js +14 -29
  41. package/dist/base/primitives/edge/edge.css.d.ts +2 -2
  42. package/dist/base/primitives/edge/edge.css.js +125 -12
  43. package/dist/base/primitives/edge/xyvars.d.ts +24 -0
  44. package/dist/base/primitives/element/ElementActionButtons.js +35 -17
  45. package/dist/base/primitives/element/ElementDetailsButton.js +34 -16
  46. package/dist/base/primitives/element/ElementNodeContainer.css.d.ts +0 -1
  47. package/dist/base/primitives/element/ElementNodeContainer.css.js +51 -5
  48. package/dist/base/primitives/element/ElementNodeContainer.d.ts +1 -1
  49. package/dist/base/primitives/element/ElementNodeContainer.js +28 -19
  50. package/dist/base/primitives/element/ElementShape.css.js +107 -16
  51. package/dist/base/primitives/element/ElementShape.js +8 -10
  52. package/dist/base/primitives/element/ElementTitle.css.d.ts +33 -8
  53. package/dist/base/primitives/element/ElementTitle.css.js +196 -19
  54. package/dist/base/primitives/element/ElementTitle.js +25 -24
  55. package/dist/base/primitives/index.d.ts +1 -0
  56. package/dist/base/types.js +6 -6
  57. package/dist/base/updateEdges.js +5 -5
  58. package/dist/base/updateNodes.js +6 -6
  59. package/dist/bundle/LikeC4ModelProvider.d.ts +9 -0
  60. package/dist/bundle/LikeC4ModelProvider.js +5 -0
  61. package/dist/bundle/LikeC4View.d.ts +2 -0
  62. package/dist/bundle/LikeC4View.js +176 -0
  63. package/dist/bundle/LikeC4View.props.d.ts +207 -0
  64. package/dist/bundle/ReactLikeC4.d.ts +36 -0
  65. package/dist/bundle/ReactLikeC4.js +90 -0
  66. package/dist/bundle/ShadowRoot.d.ts +12 -0
  67. package/dist/bundle/ShadowRoot.js +52 -0
  68. package/dist/bundle/ViewNotFound.d.ts +5 -0
  69. package/dist/bundle/ViewNotFound.js +30 -0
  70. package/dist/bundle/font.css.js +3 -0
  71. package/dist/bundle/index.d.ts +5 -0
  72. package/dist/bundle/index.js +4 -0
  73. package/dist/bundle/styles.css.d.ts +10 -0
  74. package/dist/bundle/styles.css.js +145 -0
  75. package/dist/components/Link.js +62 -13
  76. package/dist/components/SearchControl.css.js +72 -9
  77. package/dist/components/SearchControl.js +11 -11
  78. package/dist/context/ControlsCustomLayout.js +5 -6
  79. package/dist/context/DiagramEventHandlers.js +8 -13
  80. package/dist/context/DiagramFeatures.js +7 -12
  81. package/dist/context/EnsureMantine.js +6 -6
  82. package/dist/context/FramerMotionConfig.js +8 -9
  83. package/dist/context/IconRenderer.js +7 -9
  84. package/dist/context/ReduceGraphics.d.ts +4 -5
  85. package/dist/context/ReduceGraphics.js +11 -43
  86. package/dist/context/RootContainer.js +23 -10
  87. package/dist/hooks/safeContext.js +5 -7
  88. package/dist/hooks/useCurrentViewId.js +6 -6
  89. package/dist/hooks/useDiagram.d.ts +5763 -5286
  90. package/dist/hooks/useDiagram.js +13 -17
  91. package/dist/hooks/useMantinePortalProps.js +5 -5
  92. package/dist/hooks/useOverlaysActor.d.ts +2 -0
  93. package/dist/hooks/useOverlaysActor.js +10 -0
  94. package/dist/hooks/useReducedGraphics.d.ts +1 -1
  95. package/dist/hooks/useSetState.js +5 -5
  96. package/dist/hooks/useUpdateEffect.js +6 -7
  97. package/dist/hooks/useXYFlow.d.ts +28 -28
  98. package/dist/hooks/useXYFlow.js +7 -11
  99. package/dist/index.d.ts +0 -1
  100. package/dist/index.js +10 -26
  101. package/dist/likec4diagram/DiagramUI.js +13 -13
  102. package/dist/likec4diagram/DiagramXYFlow.d.ts +1 -4
  103. package/dist/likec4diagram/DiagramXYFlow.js +83 -37
  104. package/dist/likec4diagram/custom/edges/NotePopover.css.js +21 -7
  105. package/dist/likec4diagram/custom/edges/NotePopover.js +18 -27
  106. package/dist/likec4diagram/custom/edges/RelationshipEdge.d.ts +9 -9
  107. package/dist/likec4diagram/custom/edges/RelationshipEdge.js +127 -122
  108. package/dist/likec4diagram/custom/edges/RelationshipsDropdownMenu.css.d.ts +1 -0
  109. package/dist/likec4diagram/custom/edges/RelationshipsDropdownMenu.css.js +38 -11
  110. package/dist/likec4diagram/custom/edges/RelationshipsDropdownMenu.d.ts +3 -3
  111. package/dist/likec4diagram/custom/edges/RelationshipsDropdownMenu.js +28 -30
  112. package/dist/likec4diagram/custom/edges/edges.css.js +44 -9
  113. package/dist/likec4diagram/custom/edges/utils.js +6 -7
  114. package/dist/likec4diagram/custom/index.d.ts +9 -9
  115. package/dist/likec4diagram/custom/index.js +5 -6
  116. package/dist/likec4diagram/custom/nodes/CompoundActions.js +7 -7
  117. package/dist/likec4diagram/custom/nodes/ElementActions.js +8 -9
  118. package/dist/likec4diagram/custom/nodes/nodeTypes.js +22 -26
  119. package/dist/likec4diagram/custom/nodes/toolbar/ColorButton.js +10 -13
  120. package/dist/likec4diagram/custom/nodes/toolbar/CompoundToolbar.js +15 -16
  121. package/dist/likec4diagram/custom/nodes/toolbar/ElementToolbar.js +12 -13
  122. package/dist/likec4diagram/custom/nodes/toolbar/Toolbar.d.ts +1 -1
  123. package/dist/likec4diagram/custom/nodes/toolbar/Toolbar.js +17 -14
  124. package/dist/likec4diagram/custom/nodes/toolbar/_shared.js +15 -20
  125. package/dist/likec4diagram/custom/nodes/toolbar/styles.css.js +15 -5
  126. package/dist/likec4diagram/ui/controls/ChangeAutoLayoutButton.js +15 -15
  127. package/dist/likec4diagram/ui/controls/Controls.js +24 -24
  128. package/dist/likec4diagram/ui/controls/LayoutDriftNotification.js +19 -12
  129. package/dist/likec4diagram/ui/controls/ManualLayoutToolsButton.js +8 -8
  130. package/dist/likec4diagram/ui/controls/NavigationButtons.js +8 -8
  131. package/dist/likec4diagram/ui/controls/ToggleReadonly.js +7 -7
  132. package/dist/likec4diagram/ui/controls/_shared.js +4 -5
  133. package/dist/likec4diagram/ui/controls/styles.css.js +79 -17
  134. package/dist/likec4diagram/ui/diagram-title/DiagramTitlePanel.css.js +49 -9
  135. package/dist/likec4diagram/ui/diagram-title/DiagramTitlePanel.js +12 -12
  136. package/dist/likec4diagram/ui/notation/NotationPanel.css.js +85 -15
  137. package/dist/likec4diagram/ui/notation/NotationPanel.js +32 -32
  138. package/dist/likec4diagram/ui/search/ElementsColumn.css.d.ts +0 -5
  139. package/dist/likec4diagram/ui/search/ElementsColumn.css.js +70 -30
  140. package/dist/likec4diagram/ui/search/ElementsColumn.js +40 -33
  141. package/dist/likec4diagram/ui/search/LikeC4Search.css.js +87 -20
  142. package/dist/likec4diagram/ui/search/LikeC4Search.js +18 -17
  143. package/dist/likec4diagram/ui/search/SearchInput.js +22 -24
  144. package/dist/likec4diagram/ui/search/ViewsColum.js +22 -22
  145. package/dist/likec4diagram/ui/search/ViewsColumn.css.d.ts +0 -2
  146. package/dist/likec4diagram/ui/search/ViewsColumn.css.js +29 -14
  147. package/dist/likec4diagram/ui/search/_shared.css.d.ts +3 -17
  148. package/dist/likec4diagram/ui/search/_shared.css.js +171 -0
  149. package/dist/likec4diagram/ui/search/state.js +12 -22
  150. package/dist/likec4diagram/ui/search/utils.js +2 -5
  151. package/dist/likec4diagram/ui/walkthrough/DynamicViewWalkthrough.css.js +66 -10
  152. package/dist/likec4diagram/ui/walkthrough/DynamicViewWalkthrough.js +18 -27
  153. package/dist/likec4diagram/useLayoutConstraints.d.ts +11 -10
  154. package/dist/likec4diagram/useLayoutConstraints.js +100 -104
  155. package/dist/likec4diagram/useViewToNodesEdges.js +12 -13
  156. package/dist/likec4model/LikeC4ModelContext.js +4 -4
  157. package/dist/likec4model/useLikeC4ElementsTree.js +6 -7
  158. package/dist/likec4model/useLikeC4Model.js +6 -6
  159. package/dist/node_modules/.pnpm/mnemonist@0.40.3_patch_hash_5c12abb43fcff6fd81e53021b89075d53249640d165a2556cc1e58d71201a13a/node_modules/mnemonist/default-map.js +172 -0
  160. package/dist/overlays/Overlays.js +22 -22
  161. package/dist/overlays/element-details/ElementDetails.js +9 -9
  162. package/dist/overlays/element-details/ElementDetailsCard.css.d.ts +2 -3
  163. package/dist/overlays/element-details/ElementDetailsCard.css.js +237 -35
  164. package/dist/overlays/element-details/ElementDetailsCard.js +44 -46
  165. package/dist/overlays/element-details/TabPanelDeployments.css.js +62 -11
  166. package/dist/overlays/element-details/TabPanelDeployments.js +11 -11
  167. package/dist/overlays/element-details/TabPanelRelationships.css.js +99 -9
  168. package/dist/overlays/element-details/TabPanelRelationships.js +41 -14
  169. package/dist/overlays/element-details/TabPanelStructure.css.js +36 -7
  170. package/dist/overlays/element-details/TabPanelStructure.js +8 -9
  171. package/dist/overlays/element-details/actor.d.ts +21892 -22686
  172. package/dist/overlays/element-details/actor.js +18 -19
  173. package/dist/overlays/element-details/actorContext.js +4 -5
  174. package/dist/overlays/overlay/Overlay.css.d.ts +2 -2
  175. package/dist/overlays/overlay/Overlay.css.js +76 -98
  176. package/dist/overlays/overlay/Overlay.d.ts +2 -2
  177. package/dist/overlays/overlay/Overlay.js +99 -94
  178. package/dist/overlays/overlaysActor.d.ts +6 -6
  179. package/dist/overlays/overlaysActor.js +17 -18
  180. package/dist/overlays/relationship-details/RelationshipDetails.d.ts +49 -0
  181. package/dist/overlays/relationship-details/RelationshipDetails.js +24 -17
  182. package/dist/overlays/relationship-details/SelectEdge.css.js +82 -17
  183. package/dist/overlays/relationship-details/SelectEdge.js +15 -17
  184. package/dist/overlays/relationship-details/actor.js +9 -9
  185. package/dist/overlays/relationship-details/custom/ElementActions.js +8 -8
  186. package/dist/overlays/relationship-details/custom/edgeTypes.d.ts +44 -46
  187. package/dist/overlays/relationship-details/custom/edgeTypes.js +49 -50
  188. package/dist/overlays/relationship-details/custom/index.d.ts +2 -2
  189. package/dist/overlays/relationship-details/custom/nodeTypes.d.ts +28 -30
  190. package/dist/overlays/relationship-details/custom/nodeTypes.js +31 -35
  191. package/dist/overlays/relationship-details/hooks.js +9 -13
  192. package/dist/overlays/relationship-details/useLayoutedDetails.js +17 -19
  193. package/dist/overlays/relationships-browser/-useRelationshipsView.d.ts +8 -24
  194. package/dist/overlays/relationships-browser/-useRelationshipsView.js +50 -85
  195. package/dist/overlays/relationships-browser/RelationshipsBrowser.d.ts +48 -0
  196. package/dist/overlays/relationships-browser/RelationshipsBrowser.js +101 -101
  197. package/dist/overlays/relationships-browser/SelectElement.css.js +22 -9
  198. package/dist/overlays/relationships-browser/SelectElement.d.ts +2 -7
  199. package/dist/overlays/relationships-browser/SelectElement.js +196 -112
  200. package/dist/overlays/relationships-browser/_types.d.ts +4 -1
  201. package/dist/overlays/relationships-browser/actor.d.ts +478 -351
  202. package/dist/overlays/relationships-browser/actor.js +108 -94
  203. package/dist/overlays/relationships-browser/const.d.ts +1 -1
  204. package/dist/overlays/relationships-browser/const.js +3 -4
  205. package/dist/overlays/relationships-browser/custom/ElementActions.js +9 -9
  206. package/dist/overlays/relationships-browser/custom/EmptyNode.js +6 -6
  207. package/dist/overlays/relationships-browser/custom/edgeTypes.d.ts +43 -44
  208. package/dist/overlays/relationships-browser/custom/edgeTypes.js +97 -65
  209. package/dist/overlays/relationships-browser/custom/index.d.ts +2 -2
  210. package/dist/overlays/relationships-browser/custom/nodeTypes.d.ts +37 -37
  211. package/dist/overlays/relationships-browser/custom/nodeTypes.js +36 -40
  212. package/dist/overlays/relationships-browser/custom/styles.css.js +14 -5
  213. package/dist/overlays/relationships-browser/hooks.d.ts +14 -6
  214. package/dist/overlays/relationships-browser/hooks.js +25 -16
  215. package/dist/overlays/relationships-browser/useViewToNodesEdges.js +13 -18
  216. package/dist/packages/core/src/compute-view/relationships-view/compute.js +123 -0
  217. package/dist/packages/core/src/compute-view/relationships-view/utils.js +68 -0
  218. package/dist/packages/core/src/errors/index.js +15 -0
  219. package/dist/packages/core/src/utils/fqn.js +43 -0
  220. package/dist/packages/core/src/utils/guards.js +7 -0
  221. package/dist/packages/core/src/utils/iterable/filter.js +21 -0
  222. package/dist/packages/core/src/utils/iterable/map.js +18 -0
  223. package/dist/packages/core/src/utils/iterable/to.js +14 -0
  224. package/dist/src/index.ts.d.ts +2 -0
  225. package/dist/state/DiagramActorProvider.d.ts +4 -2
  226. package/dist/state/DiagramActorProvider.js +44 -52
  227. package/dist/state/aligners.js +22 -31
  228. package/dist/state/assign.js +13 -23
  229. package/dist/state/diagram-machine.d.ts +5988 -5461
  230. package/dist/state/diagram-machine.js +476 -376
  231. package/dist/state/hotkeyActor.js +5 -5
  232. package/dist/state/inspector.d.ts +1 -1
  233. package/dist/state/persistence.js +4 -4
  234. package/dist/state/syncManualLayoutActor.d.ts +1 -1
  235. package/dist/state/syncManualLayoutActor.js +10 -10
  236. package/dist/state/utils.js +4 -9
  237. package/dist/styles.css.js +3 -0
  238. package/dist/utils/vector.js +2 -4
  239. package/dist/utils/xyflow.js +7 -12
  240. package/package.json +43 -42
  241. package/src/LikeC4CustomColors.tsx +44 -20
  242. package/src/LikeC4Diagram.props.ts +32 -0
  243. package/src/LikeC4Diagram.tsx +17 -21
  244. package/src/base/BaseXYFlow.tsx +67 -43
  245. package/src/base/primitives/compound/CompoundActionButton.tsx +41 -20
  246. package/src/base/primitives/compound/CompoundDetailsButton.tsx +48 -25
  247. package/src/base/primitives/compound/CompoundNodeContainer.css.ts +111 -111
  248. package/src/base/primitives/compound/CompoundNodeContainer.tsx +92 -92
  249. package/src/base/primitives/compound/CompoundTitle.tsx +73 -7
  250. package/src/base/primitives/compound/actionbtns.css.ts +30 -0
  251. package/src/base/primitives/customEdge.ts +2 -3
  252. package/src/base/primitives/edge/EdgeActionButton.tsx +3 -5
  253. package/src/base/primitives/edge/EdgeContainer.tsx +17 -9
  254. package/src/base/primitives/edge/EdgeLabel.css.ts +110 -177
  255. package/src/base/primitives/edge/EdgeLabel.tsx +43 -114
  256. package/src/base/primitives/edge/EdgeLabelContainer.tsx +118 -0
  257. package/src/base/primitives/edge/EdgePath.tsx +28 -37
  258. package/src/base/primitives/edge/edge.css.ts +107 -132
  259. package/src/base/primitives/edge/xyvars.ts +31 -0
  260. package/src/base/primitives/element/ElementActionButtons.tsx +30 -10
  261. package/src/base/primitives/element/ElementDetailsButton.tsx +27 -8
  262. package/src/base/primitives/element/ElementNodeContainer.css.ts +44 -70
  263. package/src/base/primitives/element/ElementNodeContainer.tsx +18 -8
  264. package/src/base/primitives/element/ElementShape.css.ts +70 -114
  265. package/src/base/primitives/element/ElementShape.tsx +0 -1
  266. package/src/base/primitives/element/ElementTitle.css.ts +169 -124
  267. package/src/base/primitives/element/ElementTitle.tsx +16 -16
  268. package/src/base/primitives/index.ts +1 -0
  269. package/src/base/types.ts +2 -2
  270. package/src/bundle/LikeC4ModelProvider.tsx +12 -0
  271. package/src/bundle/LikeC4View.props.ts +249 -0
  272. package/src/bundle/LikeC4View.tsx +196 -0
  273. package/src/bundle/ReactLikeC4.tsx +148 -0
  274. package/src/bundle/ShadowRoot.tsx +60 -0
  275. package/src/bundle/ViewNotFound.tsx +25 -0
  276. package/src/bundle/font.css +251 -0
  277. package/src/bundle/index.ts +7 -0
  278. package/src/bundle/react-dom-server-mock.ts +3 -0
  279. package/src/bundle/styles.css.ts +168 -0
  280. package/src/components/Link.tsx +59 -6
  281. package/src/components/SearchControl.css.ts +52 -59
  282. package/src/components/SearchControl.tsx +2 -5
  283. package/src/context/ReduceGraphics.tsx +9 -47
  284. package/src/context/RootContainer.tsx +21 -5
  285. package/src/hooks/safeContext.tsx +2 -3
  286. package/src/hooks/useCurrentViewId.ts +4 -4
  287. package/src/hooks/useDiagram.ts +4 -3
  288. package/src/hooks/useOverlaysActor.ts +11 -0
  289. package/src/hooks/useReducedGraphics.ts +8 -1
  290. package/src/hooks/useXYFlow.ts +2 -2
  291. package/src/index.ts +1 -3
  292. package/src/likec4diagram/DiagramUI.tsx +2 -2
  293. package/src/likec4diagram/DiagramXYFlow.tsx +83 -27
  294. package/src/likec4diagram/custom/edges/NotePopover.css.ts +7 -13
  295. package/src/likec4diagram/custom/edges/RelationshipEdge.tsx +108 -90
  296. package/src/likec4diagram/custom/edges/RelationshipsDropdownMenu.css.ts +23 -44
  297. package/src/likec4diagram/custom/edges/RelationshipsDropdownMenu.tsx +26 -24
  298. package/src/likec4diagram/custom/edges/edges.css.ts +25 -32
  299. package/src/likec4diagram/custom/nodes/nodeTypes.tsx +2 -2
  300. package/src/likec4diagram/custom/nodes/toolbar/Toolbar.tsx +10 -6
  301. package/src/likec4diagram/custom/nodes/toolbar/styles.css.ts +8 -4
  302. package/src/likec4diagram/ui/controls/LayoutDriftNotification.tsx +8 -4
  303. package/src/likec4diagram/ui/controls/styles.css.ts +46 -57
  304. package/src/likec4diagram/ui/diagram-title/DiagramTitlePanel.css.ts +38 -34
  305. package/src/likec4diagram/ui/diagram-title/DiagramTitlePanel.tsx +4 -4
  306. package/src/likec4diagram/ui/notation/NotationPanel.css.ts +44 -56
  307. package/src/likec4diagram/ui/notation/NotationPanel.tsx +17 -14
  308. package/src/likec4diagram/ui/search/ElementsColumn.css.ts +80 -85
  309. package/src/likec4diagram/ui/search/ElementsColumn.tsx +21 -14
  310. package/src/likec4diagram/ui/search/LikeC4Search.css.ts +50 -67
  311. package/src/likec4diagram/ui/search/LikeC4Search.tsx +1 -2
  312. package/src/likec4diagram/ui/search/SearchInput.tsx +2 -2
  313. package/src/likec4diagram/ui/search/ViewsColum.tsx +10 -7
  314. package/src/likec4diagram/ui/search/ViewsColumn.css.ts +29 -28
  315. package/src/likec4diagram/ui/search/_shared.css.ts +158 -74
  316. package/src/likec4diagram/ui/walkthrough/DynamicViewWalkthrough.css.ts +31 -34
  317. package/src/likec4diagram/ui/walkthrough/DynamicViewWalkthrough.tsx +6 -6
  318. package/src/likec4diagram/useLayoutConstraints.ts +84 -89
  319. package/src/likec4diagram/useViewToNodesEdges.ts +2 -1
  320. package/src/overlays/Overlays.tsx +7 -5
  321. package/src/overlays/element-details/ElementDetailsCard.css.ts +143 -177
  322. package/src/overlays/element-details/ElementDetailsCard.tsx +29 -29
  323. package/src/overlays/element-details/TabPanelDeployments.css.ts +49 -54
  324. package/src/overlays/element-details/TabPanelRelationships.css.ts +62 -66
  325. package/src/overlays/element-details/TabPanelRelationships.tsx +32 -3
  326. package/src/overlays/element-details/TabPanelStructure.css.ts +26 -26
  327. package/src/overlays/element-details/actor.ts +4 -2
  328. package/src/overlays/overlay/Overlay.css.ts +53 -47
  329. package/src/overlays/overlay/Overlay.tsx +102 -98
  330. package/src/overlays/overlaysActor.ts +1 -0
  331. package/src/overlays/relationship-details/RelationshipDetails.tsx +15 -3
  332. package/src/overlays/relationship-details/SelectEdge.css.ts +52 -71
  333. package/src/overlays/relationship-details/SelectEdge.tsx +1 -2
  334. package/src/overlays/relationship-details/custom/edgeTypes.tsx +35 -30
  335. package/src/overlays/relationship-details/custom/index.ts +2 -0
  336. package/src/overlays/relationship-details/custom/nodeTypes.tsx +20 -24
  337. package/src/overlays/relationship-details/custom/styles.css.ts +8 -8
  338. package/src/overlays/relationship-details/useLayoutedDetails.ts +1 -1
  339. package/src/overlays/relationships-browser/-useRelationshipsView.ts +55 -82
  340. package/src/overlays/relationships-browser/RelationshipsBrowser.tsx +39 -36
  341. package/src/overlays/relationships-browser/SelectElement.css.ts +9 -12
  342. package/src/overlays/relationships-browser/SelectElement.tsx +192 -105
  343. package/src/overlays/relationships-browser/_types.ts +4 -9
  344. package/src/overlays/relationships-browser/actor.ts +144 -123
  345. package/src/overlays/relationships-browser/const.ts +1 -1
  346. package/src/overlays/relationships-browser/custom/EmptyNode.tsx +2 -2
  347. package/src/overlays/relationships-browser/custom/edgeTypes.tsx +95 -59
  348. package/src/overlays/relationships-browser/custom/index.ts +2 -0
  349. package/src/overlays/relationships-browser/custom/nodeTypes.tsx +25 -26
  350. package/src/overlays/relationships-browser/custom/styles.css.ts +5 -6
  351. package/src/overlays/relationships-browser/hooks.ts +17 -3
  352. package/src/overlays/relationships-browser/useViewToNodesEdges.ts +4 -10
  353. package/src/state/DiagramActorProvider.tsx +37 -46
  354. package/src/state/assign.ts +2 -2
  355. package/src/state/diagram-machine.ts +477 -366
  356. package/src/state/inspector.ts +1 -1
  357. package/src/styles.css +3 -0
  358. package/dist/LikeC4Diagram.css.d.ts +0 -8
  359. package/dist/LikeC4Diagram.css.js +0 -11
  360. package/dist/base/example/RelationshipsBrowser.d.ts +0 -6
  361. package/dist/base/example/_types.d.ts +0 -20
  362. package/dist/base/example/custom.d.ts +0 -72
  363. package/dist/base/example/useViewToNodesEdges.d.ts +0 -6
  364. package/dist/base/primitives/compound/CompoundActionButton.css.d.ts +0 -2
  365. package/dist/base/primitives/compound/CompoundActionButton.css.js +0 -8
  366. package/dist/base/primitives/compound/CompoundDetailsButton.css.d.ts +0 -3
  367. package/dist/base/primitives/compound/CompoundDetailsButton.css.js +0 -8
  368. package/dist/base/primitives/compound/CompoundTitle.css.d.ts +0 -3
  369. package/dist/base/primitives/compound/CompoundTitle.css.js +0 -10
  370. package/dist/base/primitives/element/ElementActionButtons.css.d.ts +0 -3
  371. package/dist/base/primitives/element/ElementActionButtons.css.js +0 -10
  372. package/dist/base/primitives/element/ElementDetailsButton.css.d.ts +0 -3
  373. package/dist/base/primitives/element/ElementDetailsButton.css.js +0 -8
  374. package/dist/base/primitives/element/vars.css.d.ts +0 -3
  375. package/dist/base/primitives/element/vars.css.ts.vanilla.css.js +0 -1
  376. package/dist/components/Link.css.d.ts +0 -3
  377. package/dist/components/Link.css.js +0 -9
  378. package/dist/diagram.css +0 -1
  379. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Accordion/Accordion.module.css.mjs.vanilla.css.js +0 -1
  380. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/ActionIcon/ActionIcon.module.css.mjs.vanilla.css.js +0 -1
  381. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Affix/Affix.module.css.mjs.vanilla.css.js +0 -1
  382. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Alert/Alert.module.css.mjs.vanilla.css.js +0 -1
  383. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Anchor/Anchor.module.css.mjs.vanilla.css.js +0 -1
  384. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/AngleSlider/AngleSlider.module.css.mjs.vanilla.css.js +0 -1
  385. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/AppShell/AppShell.module.css.mjs.vanilla.css.js +0 -1
  386. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/AspectRatio/AspectRatio.module.css.mjs.vanilla.css.js +0 -1
  387. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Avatar/Avatar.module.css.mjs.vanilla.css.js +0 -1
  388. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/BackgroundImage/BackgroundImage.module.css.mjs.vanilla.css.js +0 -1
  389. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Badge/Badge.module.css.mjs.vanilla.css.js +0 -1
  390. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Blockquote/Blockquote.module.css.mjs.vanilla.css.js +0 -1
  391. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Breadcrumbs/Breadcrumbs.module.css.mjs.vanilla.css.js +0 -1
  392. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Burger/Burger.module.css.mjs.vanilla.css.js +0 -1
  393. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Button/Button.module.css.mjs.vanilla.css.js +0 -1
  394. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Card/Card.module.css.mjs.vanilla.css.js +0 -1
  395. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Center/Center.module.css.mjs.vanilla.css.js +0 -1
  396. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Checkbox/Checkbox.module.css.mjs.vanilla.css.js +0 -1
  397. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Checkbox/CheckboxCard/CheckboxCard.module.css.mjs.vanilla.css.js +0 -1
  398. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Checkbox/CheckboxIndicator/CheckboxIndicator.module.css.mjs.vanilla.css.js +0 -1
  399. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Chip/Chip.module.css.mjs.vanilla.css.js +0 -1
  400. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/CloseButton/CloseButton.module.css.mjs.vanilla.css.js +0 -1
  401. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Code/Code.module.css.mjs.vanilla.css.js +0 -1
  402. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/ColorInput/ColorInput.module.css.mjs.vanilla.css.js +0 -1
  403. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/ColorPicker/ColorPicker.module.css.mjs.vanilla.css.js +0 -1
  404. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/ColorSwatch/ColorSwatch.module.css.mjs.vanilla.css.js +0 -1
  405. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Combobox/Combobox.module.css.mjs.vanilla.css.js +0 -1
  406. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Container/Container.module.css.mjs.vanilla.css.js +0 -1
  407. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Dialog/Dialog.module.css.mjs.vanilla.css.js +0 -1
  408. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Divider/Divider.module.css.mjs.vanilla.css.js +0 -1
  409. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Drawer/Drawer.module.css.mjs.vanilla.css.js +0 -1
  410. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Fieldset/Fieldset.module.css.mjs.vanilla.css.js +0 -1
  411. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Flex/Flex.module.css.mjs.vanilla.css.js +0 -1
  412. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/FloatingIndicator/FloatingIndicator.module.css.mjs.vanilla.css.js +0 -1
  413. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Grid/Grid.module.css.mjs.vanilla.css.js +0 -1
  414. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Group/Group.module.css.mjs.vanilla.css.js +0 -1
  415. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Image/Image.module.css.mjs.vanilla.css.js +0 -1
  416. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Indicator/Indicator.module.css.mjs.vanilla.css.js +0 -1
  417. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/InlineInput/InlineInput.module.css.mjs.vanilla.css.js +0 -1
  418. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Input/Input.module.css.mjs.vanilla.css.js +0 -1
  419. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Kbd/Kbd.module.css.mjs.vanilla.css.js +0 -1
  420. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/List/List.module.css.mjs.vanilla.css.js +0 -1
  421. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Loader/Loader.module.css.mjs.vanilla.css.js +0 -1
  422. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/LoadingOverlay/LoadingOverlay.module.css.mjs.vanilla.css.js +0 -1
  423. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Mark/Mark.module.css.mjs.vanilla.css.js +0 -1
  424. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Menu/Menu.module.css.mjs.vanilla.css.js +0 -1
  425. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Modal/Modal.module.css.mjs.vanilla.css.js +0 -1
  426. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/ModalBase/ModalBase.module.css.mjs.vanilla.css.js +0 -1
  427. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/NavLink/NavLink.module.css.mjs.vanilla.css.js +0 -1
  428. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Notification/Notification.module.css.mjs.vanilla.css.js +0 -1
  429. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/NumberInput/NumberInput.module.css.mjs.vanilla.css.js +0 -1
  430. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Overlay/Overlay.module.css.mjs.vanilla.css.js +0 -1
  431. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Pagination/Pagination.module.css.mjs.vanilla.css.js +0 -1
  432. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Paper/Paper.module.css.mjs.vanilla.css.js +0 -1
  433. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/PasswordInput/PasswordInput.module.css.mjs.vanilla.css.js +0 -1
  434. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Pill/Pill.module.css.mjs.vanilla.css.js +0 -1
  435. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/PillsInput/PillsInput.module.css.mjs.vanilla.css.js +0 -1
  436. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/PinInput/PinInput.module.css.mjs.vanilla.css.js +0 -1
  437. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Popover/Popover.module.css.mjs.vanilla.css.js +0 -1
  438. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Progress/Progress.module.css.mjs.vanilla.css.js +0 -1
  439. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Radio/Radio.module.css.mjs.vanilla.css.js +0 -1
  440. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Radio/RadioCard/RadioCard.module.css.mjs.vanilla.css.js +0 -1
  441. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Radio/RadioIndicator/RadioIndicator.module.css.mjs.vanilla.css.js +0 -1
  442. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Rating/Rating.module.css.mjs.vanilla.css.js +0 -1
  443. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/RingProgress/RingProgress.module.css.mjs.vanilla.css.js +0 -1
  444. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/ScrollArea/ScrollArea.module.css.mjs.vanilla.css.js +0 -1
  445. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/SegmentedControl/SegmentedControl.module.css.mjs.vanilla.css.js +0 -1
  446. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/SemiCircleProgress/SemiCircleProgress.module.css.mjs.vanilla.css.js +0 -1
  447. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/SimpleGrid/SimpleGrid.module.css.mjs.vanilla.css.js +0 -1
  448. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Skeleton/Skeleton.module.css.mjs.vanilla.css.js +0 -1
  449. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Slider/Slider.module.css.mjs.vanilla.css.js +0 -1
  450. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Spoiler/Spoiler.module.css.mjs.vanilla.css.js +0 -1
  451. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Stack/Stack.module.css.mjs.vanilla.css.js +0 -1
  452. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Stepper/Stepper.module.css.mjs.vanilla.css.js +0 -1
  453. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Switch/Switch.module.css.mjs.vanilla.css.js +0 -1
  454. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Table/Table.module.css.mjs.vanilla.css.js +0 -1
  455. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/TableOfContents/TableOfContents.module.css.mjs.vanilla.css.js +0 -1
  456. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Tabs/Tabs.module.css.mjs.vanilla.css.js +0 -1
  457. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Text/Text.module.css.mjs.vanilla.css.js +0 -1
  458. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/ThemeIcon/ThemeIcon.module.css.mjs.vanilla.css.js +0 -1
  459. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Timeline/Timeline.module.css.mjs.vanilla.css.js +0 -1
  460. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Title/Title.module.css.mjs.vanilla.css.js +0 -1
  461. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Tooltip/Tooltip.module.css.mjs.vanilla.css.js +0 -1
  462. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/Tree/Tree.module.css.mjs.vanilla.css.js +0 -1
  463. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/TypographyStylesProvider/TypographyStylesProvider.module.css.mjs.vanilla.css.js +0 -1
  464. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/UnstyledButton/UnstyledButton.module.css.mjs.vanilla.css.js +0 -1
  465. package/dist/node_modules/.pnpm/@mantine_core@7.17.1_@mantine_hooks@7.17.1_react@19.0.0__@types_react@19.0.10_react-dom_fbfa2b80048a2180882527b4a447e1ea/node_modules/@mantine/core/esm/components/VisuallyHidden/VisuallyHidden.module.css.mjs.vanilla.css.js +0 -1
  466. package/dist/theme-vars.css.d.ts +0 -63
  467. package/dist/theme-vars.css.js +0 -7
  468. package/dist/theme-vars.css.ts.vanilla.css.js +0 -1
  469. package/dist/theme-vars.d.ts +0 -16
  470. package/dist/theme-vars.js +0 -7
  471. package/dist/utils/css.js +0 -10
  472. package/src/LikeC4Diagram.css.ts +0 -198
  473. package/src/base/example/RelationshipsBrowser.tsx +0 -62
  474. package/src/base/example/_types.ts +0 -72
  475. package/src/base/example/custom.tsx +0 -58
  476. package/src/base/example/useViewToNodesEdges.ts +0 -194
  477. package/src/base/primitives/compound/CompoundActionButton.css.ts +0 -52
  478. package/src/base/primitives/compound/CompoundDetailsButton.css.ts +0 -58
  479. package/src/base/primitives/compound/CompoundTitle.css.ts +0 -65
  480. package/src/base/primitives/element/ElementActionButtons.css.ts +0 -52
  481. package/src/base/primitives/element/ElementDetailsButton.css.ts +0 -50
  482. package/src/base/primitives/element/vars.css.ts +0 -5
  483. package/src/components/Link.css.ts +0 -49
  484. package/src/overlays/relationship-details/custom/index.tsx +0 -2
  485. package/src/overlays/relationships-browser/custom/index.tsx +0 -2
  486. package/src/theme-vars.css.ts +0 -69
  487. package/src/theme-vars.ts +0 -25
@@ -42,6 +42,7 @@ import {
42
42
  stopChild,
43
43
  } from 'xstate'
44
44
  import { MinZoom } from '../base/const'
45
+ import { Base } from '../base/types'
45
46
  import { type EnabledFeatures, type FeatureName, AllDisabled } from '../context/DiagramFeatures'
46
47
  import type { OpenSourceParams } from '../LikeC4Diagram.props'
47
48
  import type { Types } from '../likec4diagram/types'
@@ -79,21 +80,25 @@ export interface NavigationHistory {
79
80
 
80
81
  export interface Input {
81
82
  view: DiagramView
82
- xynodes: Types.Node[]
83
- xyedges: Types.Edge[]
84
83
  xystore: XYStoreApi
85
84
  zoomable: boolean
86
85
  pannable: boolean
87
86
  fitViewPadding: number
87
+ nodesSelectable: boolean
88
88
  }
89
89
 
90
90
  type ToggledFeatures = Partial<EnabledFeatures>
91
91
 
92
92
  export interface Context extends Input {
93
+ xynodes: Types.Node[]
94
+ xyedges: Types.Edge[]
93
95
  features: EnabledFeatures
94
96
  // This is used to override features from props
95
97
  toggledFeatures: ToggledFeatures
96
- initialized: boolean
98
+ initialized: {
99
+ xydata: boolean
100
+ xyflow: boolean
101
+ }
97
102
  viewport: Viewport
98
103
  viewportChangedManually: boolean
99
104
  lastOnNavigate: null | {
@@ -119,7 +124,7 @@ export interface Context extends Input {
119
124
  viewportBeforeFocus: null | Viewport
120
125
  xyflow: ReactFlowInstance<Types.Node, Types.Edge> | null
121
126
 
122
- syncLayoutActorRef: ActorRef<Snapshot<unknown>, SyncLayoutEvents, AnyEventObject>
127
+ syncLayoutActorRef: null | ActorRef<Snapshot<unknown>, SyncLayoutEvents, AnyEventObject>
123
128
 
124
129
  // If Dynamic View
125
130
  activeWalkthrough: null | {
@@ -139,10 +144,14 @@ export type Events =
139
144
  | { type: 'xyflow.paneClick' }
140
145
  | { type: 'xyflow.paneDblClick' }
141
146
  | { type: 'xyflow.resized' }
147
+ | { type: 'xyflow.nodeMouseEnter'; node: Types.Node }
148
+ | { type: 'xyflow.nodeMouseLeave'; node: Types.Node }
149
+ | { type: 'xyflow.edgeMouseEnter'; edge: Types.Edge }
150
+ | { type: 'xyflow.edgeMouseLeave'; edge: Types.Edge }
142
151
  | { type: 'update.nodeData'; nodeId: NodeId; data: Partial<Types.NodeData> }
143
152
  | { type: 'update.edgeData'; edgeId: EdgeId; data: Partial<Types.Edge['data']> }
144
153
  | { type: 'update.view'; view: DiagramView; xynodes: Types.Node[]; xyedges: Types.Edge[] }
145
- | { type: 'update.inputs'; inputs: Partial<Omit<Input, 'view'>> }
154
+ | { type: 'update.inputs'; inputs: Partial<Omit<Input, 'view' | 'xystore'>> }
146
155
  | { type: 'update.features'; features: EnabledFeatures }
147
156
  | { type: 'fitDiagram'; duration?: number; bounds?: BBox }
148
157
  | ({ type: 'open.source' } & OpenSourceParams)
@@ -183,6 +192,7 @@ export const diagramMachine = setup({
183
192
  overlaysActorLogic,
184
193
  },
185
194
  guards: {
195
+ 'isReady': ({ context }) => context.initialized.xydata && context.initialized.xyflow,
186
196
  'enabled: FitView': ({ context }) => context.features.enableFitView,
187
197
  'enabled: FocusMode': ({ context }) => context.features.enableFocusMode,
188
198
  'enabled: Readonly': ({ context }) => context.features.enableReadOnly,
@@ -329,19 +339,21 @@ export const diagramMachine = setup({
329
339
  return
330
340
  }
331
341
  const constraints = createLayoutConstraints(xystore, nodesToAlign)
332
-
333
342
  const aligner = getAligner(mode)
334
343
 
335
- constraints.onMove(nodes => {
336
- aligner.computeLayout(nodes.map(({ node }) => toNodeRect(node)))
344
+ const nodes = nodesToAlign.map(id => ({
345
+ node: nonNullable(nodeLookup.get(id)),
346
+ rect: nonNullable(constraints.rects.get(id)),
347
+ }))
348
+ aligner.computeLayout(nodes.map(({ node }) => toNodeRect(node)))
337
349
 
338
- nodes.forEach(({ rect, node }) => {
339
- rect.positionAbsolute = {
340
- ...rect.positionAbsolute,
341
- ...aligner.applyPosition(toNodeRect(node)),
342
- }
343
- })
344
- })
350
+ for (const { rect, node } of nodes) {
351
+ rect.positionAbsolute = {
352
+ ...rect.positionAbsolute,
353
+ ...aligner.applyPosition(toNodeRect(node)),
354
+ }
355
+ }
356
+ constraints.updateXYFlowNodes()
345
357
  },
346
358
 
347
359
  'updateFeatures': enqueueActions(({ enqueue, system, event }) => {
@@ -359,34 +371,90 @@ export const diagramMachine = setup({
359
371
  return
360
372
  }
361
373
  if (!enableOverlays && hasRunning) {
374
+ enqueue.sendTo(hasRunning, {
375
+ type: 'close.all',
376
+ })
362
377
  enqueue.stopChild('overlays')
363
378
  }
364
379
  }),
365
380
 
366
- 'closeAllOverlays': enqueueActions(({ system, enqueue }) => {
367
- const overlays = typedSystem(system).overlaysActorRef
368
- if (overlays) {
369
- enqueue.sendTo(overlays, { type: 'close.all' })
370
- }
371
- }),
381
+ 'closeAllOverlays': sendTo(
382
+ ({ system }) => typedSystem(system).overlaysActorRef!,
383
+ {
384
+ type: 'close.all',
385
+ },
386
+ ),
387
+
388
+ 'startSyncLayout': assign(({ context, spawn, self }) => ({
389
+ syncLayoutActorRef: spawn('syncManualLayoutActorLogic', {
390
+ id: 'syncLayout',
391
+ input: { parent: self, viewId: context.view.id },
392
+ }),
393
+ })),
372
394
 
373
395
  'stopSyncLayout': enqueueActions(({ context, enqueue }) => {
374
- enqueue.sendTo(context.syncLayoutActorRef, { type: 'stop' })
375
- enqueue.stopChild(context.syncLayoutActorRef)
396
+ enqueue.sendTo(context.syncLayoutActorRef!, { type: 'stop' })
397
+ enqueue.stopChild(context.syncLayoutActorRef!)
376
398
  enqueue.assign({
377
399
  syncLayoutActorRef: null as any,
378
400
  })
379
401
  }),
402
+
403
+ 'onNodeMouseEnter': assign(({ context }, params: { node: Types.Node }) => {
404
+ return {
405
+ xynodes: context.xynodes.map(n => {
406
+ if (n.id === params.node.id) {
407
+ return Base.setHovered(n, true)
408
+ }
409
+ return n
410
+ }),
411
+ }
412
+ }),
413
+ 'onNodeMouseLeave': assign(({ context }, params: { node: Types.Node }) => {
414
+ return {
415
+ xynodes: context.xynodes.map(n => {
416
+ if (n.id === params.node.id) {
417
+ return Base.setHovered(n, false)
418
+ }
419
+ return n
420
+ }),
421
+ }
422
+ }),
423
+ 'onEdgeMouseEnter': assign(({ context }, params: { edge: Types.Edge }) => {
424
+ return {
425
+ xyedges: context.xyedges.map(e => {
426
+ if (e.id === params.edge.id) {
427
+ return Base.setHovered(e, true)
428
+ }
429
+ return e
430
+ }),
431
+ }
432
+ }),
433
+ 'onEdgeMouseLeave': assign(({ context }, params: { edge: Types.Edge }) => {
434
+ return {
435
+ xyedges: context.xyedges.map(e => {
436
+ if (e.id === params.edge.id) {
437
+ return Base.setHovered(e, false)
438
+ }
439
+ return e
440
+ }),
441
+ }
442
+ }),
380
443
  },
381
444
  }).createMachine({
382
445
  initial: 'initializing',
383
446
  context: ({ input, self, spawn }) => ({
384
447
  ...input,
448
+ xyedges: [],
449
+ xynodes: [],
385
450
  features: { ...AllDisabled },
386
451
  toggledFeatures: DiagramToggledFeaturesPersistence.read() ?? {
387
452
  enableReadOnly: true,
388
453
  },
389
- initialized: false,
454
+ initialized: {
455
+ xydata: false,
456
+ xyflow: false,
457
+ },
390
458
  viewportChangedManually: false,
391
459
  lastOnNavigate: null,
392
460
  lastClickedNode: null,
@@ -399,10 +467,7 @@ export const diagramMachine = setup({
399
467
  },
400
468
  viewport: { x: 0, y: 0, zoom: 1 },
401
469
  xyflow: null,
402
- syncLayoutActorRef: spawn('syncManualLayoutActorLogic', {
403
- id: 'syncLayout',
404
- input: { parent: self, viewId: input.view.id },
405
- }),
470
+ syncLayoutActorRef: null,
406
471
  activeWalkthrough: null,
407
472
  }),
408
473
  // entry: ({ spawn }) => spawn(layoutActor, { id: 'layout', input: { parent: self } }),
@@ -410,156 +475,200 @@ export const diagramMachine = setup({
410
475
  initializing: {
411
476
  on: {
412
477
  'xyflow.init': {
413
- actions: enqueueActions(({ enqueue, check }) => {
414
- enqueue.assign({
415
- initialized: true,
416
- xyflow: ({ event }) => event.instance,
417
- navigationHistory: ({ context, event }) => ({
418
- currentIndex: 0,
419
- history: [{
420
- viewId: context.view.id,
421
- fromNode: null,
422
- viewport: { ...event.instance.getViewport() },
423
- }],
424
- }),
425
- })
426
- if (check('enabled: FitView')) {
427
- enqueue({
428
- type: 'xyflow:fitDiagram',
429
- params: { duration: 0 },
430
- })
431
- }
432
- }),
433
- target: 'idle',
478
+ actions: assign(({ context, event }) => ({
479
+ initialized: {
480
+ ...context.initialized,
481
+ xyflow: true,
482
+ },
483
+ xyflow: event.instance,
484
+ })),
485
+ target: 'isReady',
486
+ },
487
+ 'update.view': {
488
+ actions: assign(({ context, event, spawn, self }) => ({
489
+ initialized: {
490
+ ...context.initialized,
491
+ xydata: true,
492
+ },
493
+ view: event.view,
494
+ xynodes: event.xynodes,
495
+ xyedges: event.xyedges,
496
+ })),
497
+ target: 'isReady',
434
498
  },
435
499
  },
436
500
  },
437
- idle: {
438
- id: 'idle',
439
- on: {
440
- 'xyflow.nodeClick': [
441
- {
442
- // TODO: xstate fails to infer the type of the guard
443
- guard: and([
444
- 'enabled: FocusMode',
445
- 'click: node has connections',
446
- or([
447
- 'click: same node',
448
- 'click: selected node',
449
- ]),
450
- ]) as any,
451
- actions: [
452
- assign({
453
- lastClickedNode,
454
- focusedNode: ({ event }) => event.node.id as NodeId,
455
- }),
456
- ],
457
- target: 'focused',
458
- },
501
+ 'isReady': {
502
+ always: [{
503
+ guard: 'isReady',
504
+ actions: [
459
505
  {
460
- actions: [
461
- 'assign lastClickedNode',
462
- 'open source of focused or last clicked node',
463
- ],
506
+ type: 'xyflow:fitDiagram',
507
+ params: { duration: 0 },
464
508
  },
509
+ 'startSyncLayout',
510
+ assign(({ context }) => ({
511
+ navigationHistory: {
512
+ currentIndex: 0,
513
+ history: [{
514
+ viewId: context.view.id,
515
+ fromNode: null,
516
+ viewport: { ...context.xyflow!.getViewport() },
517
+ }],
518
+ },
519
+ })),
465
520
  ],
466
- 'xyflow.paneClick': {
467
- actions: [
468
- assign({
469
- lastClickedNode: null,
521
+ target: 'ready',
522
+ }, {
523
+ target: 'initializing',
524
+ }],
525
+ },
526
+ ready: {
527
+ initial: 'idle',
528
+ on: {
529
+ 'navigate.to': {
530
+ guard: 'is another view',
531
+ actions: assign({
532
+ lastOnNavigate: ({ context, event }) => ({
533
+ fromView: context.view.id,
534
+ toView: event.viewId,
535
+ fromNode: event.fromNode ?? null,
470
536
  }),
471
- ],
537
+ }),
538
+ target: '#navigating',
539
+ },
540
+ 'navigate.back': {
541
+ guard: ({ context }: ActionArg) => context.navigationHistory.currentIndex > 0,
542
+ actions: assign(navigateBack),
543
+ target: '#navigating',
472
544
  },
473
- 'xyflow.paneDblClick': {
545
+ 'navigate.forward': {
546
+ guard: ({ context }: ActionArg) =>
547
+ context.navigationHistory.currentIndex < context.navigationHistory.history.length - 1,
548
+ actions: assign(navigateForward),
549
+ target: '#navigating',
550
+ },
551
+ 'layout.align': {
552
+ guard: 'not readonly',
474
553
  actions: [
475
- { type: 'xyflow:fitDiagram' },
476
- { type: 'trigger:OpenSource', params: ({ context }) => ({ view: context.view.id }) },
554
+ {
555
+ type: 'layout.align',
556
+ params: ({ event }) => ({ mode: event.mode }),
557
+ },
558
+ raise({ type: 'saveManualLayout.schedule' }),
477
559
  ],
478
560
  },
479
- 'saveManualLayout.*': {
561
+ 'layout.resetEdgeControlPoints': {
480
562
  guard: 'not readonly',
481
- actions: sendTo((c) => c.context.syncLayoutActorRef, ({ event }) => {
482
- if (event.type === 'saveManualLayout.schedule') {
483
- return { type: 'sync' }
563
+ actions: [
564
+ assign(resetEdgeControlPoints),
565
+ raise({ type: 'saveManualLayout.schedule' }),
566
+ ],
567
+ },
568
+ 'xyflow.resized': {
569
+ guard: ({ context }: { context: Context }) =>
570
+ context.features.enableFitView && !context.viewportChangedManually,
571
+ actions: [
572
+ cancel('fitDiagram'),
573
+ raise({ type: 'fitDiagram' }, { id: 'fitDiagram', delay: 200 }),
574
+ ],
575
+ },
576
+ 'open.elementDetails': {
577
+ actions: sendTo(({ system }) => typedSystem(system).overlaysActorRef!, ({ context, event }) => {
578
+ let initiatedFrom = null as null | {
579
+ node: NodeId
580
+ clientRect: Rect
484
581
  }
485
- if (event.type === 'saveManualLayout.cancel') {
486
- return { type: 'cancel' }
582
+ const fromNodeId = event.fromNode ?? context.view.nodes.find(n => DiagramNode.modelRef(n) === event.fqn)?.id
583
+ const internalNode = fromNodeId ? context.xystore.getState().nodeLookup.get(fromNodeId) : null
584
+ if (fromNodeId && internalNode) {
585
+ const nodeRect = nodeToRect(internalNode)
586
+ const zoom = context.xyflow!.getZoom()
587
+
588
+ const clientRect = {
589
+ ...context.xyflow!.flowToScreenPosition(nodeRect),
590
+ width: nodeRect.width * zoom,
591
+ height: nodeRect.height * zoom,
592
+ }
593
+ initiatedFrom = {
594
+ node: fromNodeId,
595
+ clientRect,
596
+ }
487
597
  }
488
- nonexhaustive(event)
598
+ return ({
599
+ type: 'open.elementDetails' as const,
600
+ subject: event.fqn,
601
+ currentView: context.view,
602
+ ...(initiatedFrom && { initiatedFrom }),
603
+ })
489
604
  }),
490
605
  },
491
- 'focus.node': {
492
- guard: 'enabled: FocusMode',
606
+ 'open.relationshipsBrowser': {
607
+ actions: sendTo(({ system }) => typedSystem(system).overlaysActorRef!, ({ context, event }) => ({
608
+ type: 'open.relationshipsBrowser',
609
+ subject: event.fqn,
610
+ viewId: context.view.id,
611
+ scope: 'view' as const,
612
+ closeable: true,
613
+ enableChangeScope: true,
614
+ enableSelectSubject: true,
615
+ })),
616
+ },
617
+ 'open.relationshipDetails': {
618
+ actions: sendTo(({ system }) => typedSystem(system).overlaysActorRef!, ({ context, event }) => ({
619
+ type: 'open.relationshipDetails',
620
+ view: context.view,
621
+ edgeId: event.edgeId,
622
+ })),
623
+ },
624
+ 'open.source': {
625
+ actions: {
626
+ type: 'trigger:OpenSource',
627
+ params: prop('event'),
628
+ },
629
+ },
630
+ 'walkthrough.start': {
631
+ guard: 'is dynamic view',
632
+ target: '.walkthrough',
633
+ },
634
+ 'toggle.feature': {
493
635
  actions: assign({
494
- focusedNode: ({ event }) => event.nodeId as NodeId,
636
+ toggledFeatures: ({ context, event }) => {
637
+ return DiagramToggledFeaturesPersistence.write({
638
+ ...context.toggledFeatures,
639
+ [`enable${event.feature}`]: event.forceValue ??
640
+ !(context.toggledFeatures[`enable${event.feature}`] ?? context.features[`enable${event.feature}`]),
641
+ })
642
+ },
495
643
  }),
496
- target: 'focused',
497
644
  },
498
- },
499
- },
500
- focused: {
501
- entry: [
502
- assign(s => ({
503
- ...focusNodesEdges(s),
504
- viewportBeforeFocus: { ...s.context.viewport },
505
- })),
506
- 'open source of focused or last clicked node',
507
- spawnChild('hotkeyActorLogic', { id: 'hotkey' }),
508
- 'xyflow:fitFocusedBounds',
509
- ],
510
- exit: enqueueActions(({ enqueue, context }) => {
511
- enqueue.stopChild('hotkey')
512
- if (context.viewportBeforeFocus) {
513
- enqueue({ type: 'xyflow:setViewport', params: { viewport: context.viewportBeforeFocus } })
514
- } else {
515
- enqueue({ type: 'xyflow:fitDiagram' })
516
- }
517
- enqueue.assign((s) => ({
518
- ...unfocusNodesEdges(s),
519
- viewportBeforeFocus: null,
520
- focusedNode: null,
521
- }))
522
- }),
523
- on: {
524
- 'xyflow.nodeClick': [
525
- {
526
- guard: 'click: focused node',
527
- target: '#idle',
645
+ 'xyflow.nodeMouseEnter': {
646
+ actions: {
647
+ type: 'onNodeMouseEnter',
648
+ params: prop('event'),
528
649
  },
529
- {
530
- actions: [
531
- assign({
532
- lastClickedNode,
533
- }),
534
- raise(({ event }) => ({
535
- type: 'focus.node',
536
- nodeId: event.node.id as NodeId,
537
- })),
538
- ],
650
+ },
651
+ 'xyflow.nodeMouseLeave': {
652
+ actions: {
653
+ type: 'onNodeMouseLeave',
654
+ params: prop('event'),
539
655
  },
540
- ],
541
- 'focus.node': {
542
- actions: [
543
- assign({
544
- focusedNode: ({ event }) => event.nodeId,
545
- }),
546
- assign(focusNodesEdges),
547
- 'open source of focused or last clicked node',
548
- 'xyflow:fitFocusedBounds',
549
- ],
550
656
  },
551
- 'key.esc': {
552
- target: 'idle',
657
+ 'xyflow.edgeMouseEnter': {
658
+ actions: {
659
+ type: 'onEdgeMouseEnter',
660
+ params: prop('event'),
661
+ },
553
662
  },
554
- 'xyflow.paneClick': {
555
- actions: assign({
556
- lastClickedNode: null,
557
- }),
558
- target: 'idle',
663
+ 'xyflow.edgeMouseLeave': {
664
+ actions: {
665
+ type: 'onEdgeMouseLeave',
666
+ params: prop('event'),
667
+ },
559
668
  },
560
669
  'saveManualLayout.*': {
561
670
  guard: 'not readonly',
562
- actions: sendTo(c => c.context.syncLayoutActorRef, ({ event }) => {
671
+ actions: sendTo((c) => c.context.syncLayoutActorRef!, ({ event }) => {
563
672
  if (event.type === 'saveManualLayout.schedule') {
564
673
  return { type: 'sync' }
565
674
  }
@@ -570,9 +679,204 @@ export const diagramMachine = setup({
570
679
  }),
571
680
  },
572
681
  },
682
+ exit: [
683
+ cancel('fitDiagram'),
684
+ ],
685
+ states: {
686
+ idle: {
687
+ id: 'idle',
688
+ on: {
689
+ 'xyflow.nodeClick': [
690
+ {
691
+ // TODO: xstate fails to infer the type of the guard
692
+ guard: and([
693
+ 'enabled: FocusMode',
694
+ 'click: node has connections',
695
+ or([
696
+ 'click: same node',
697
+ 'click: selected node',
698
+ ]),
699
+ ]) as any,
700
+ actions: [
701
+ assign({
702
+ lastClickedNode,
703
+ focusedNode: ({ event }) => event.node.id as NodeId,
704
+ }),
705
+ ],
706
+ target: 'focused',
707
+ },
708
+ {
709
+ actions: [
710
+ 'assign lastClickedNode',
711
+ 'open source of focused or last clicked node',
712
+ ],
713
+ },
714
+ ],
715
+ 'xyflow.paneClick': {
716
+ actions: [
717
+ assign({
718
+ lastClickedNode: null,
719
+ }),
720
+ ],
721
+ },
722
+ 'xyflow.paneDblClick': {
723
+ actions: [
724
+ { type: 'xyflow:fitDiagram' },
725
+ { type: 'trigger:OpenSource', params: ({ context }) => ({ view: context.view.id }) },
726
+ ],
727
+ },
728
+ 'focus.node': {
729
+ guard: 'enabled: FocusMode',
730
+ actions: assign({
731
+ focusedNode: ({ event }) => event.nodeId as NodeId,
732
+ }),
733
+ target: 'focused',
734
+ },
735
+ },
736
+ },
737
+ focused: {
738
+ entry: [
739
+ assign(s => ({
740
+ ...focusNodesEdges(s),
741
+ viewportBeforeFocus: { ...s.context.viewport },
742
+ })),
743
+ 'open source of focused or last clicked node',
744
+ spawnChild('hotkeyActorLogic', { id: 'hotkey' }),
745
+ 'xyflow:fitFocusedBounds',
746
+ ],
747
+ exit: enqueueActions(({ enqueue, context }) => {
748
+ enqueue.stopChild('hotkey')
749
+ if (context.viewportBeforeFocus) {
750
+ enqueue({ type: 'xyflow:setViewport', params: { viewport: context.viewportBeforeFocus } })
751
+ } else {
752
+ enqueue({ type: 'xyflow:fitDiagram' })
753
+ }
754
+ enqueue.assign((s) => ({
755
+ ...unfocusNodesEdges(s),
756
+ viewportBeforeFocus: null,
757
+ focusedNode: null,
758
+ }))
759
+ }),
760
+ on: {
761
+ 'xyflow.nodeClick': [
762
+ {
763
+ guard: 'click: focused node',
764
+ target: '#idle',
765
+ },
766
+ {
767
+ actions: [
768
+ assign({
769
+ lastClickedNode,
770
+ }),
771
+ raise(({ event }) => ({
772
+ type: 'focus.node',
773
+ nodeId: event.node.id as NodeId,
774
+ })),
775
+ ],
776
+ },
777
+ ],
778
+ 'focus.node': {
779
+ actions: [
780
+ assign({
781
+ focusedNode: ({ event }) => event.nodeId,
782
+ }),
783
+ assign(focusNodesEdges),
784
+ 'open source of focused or last clicked node',
785
+ 'xyflow:fitFocusedBounds',
786
+ ],
787
+ },
788
+ 'key.esc': {
789
+ target: 'idle',
790
+ },
791
+ 'xyflow.paneClick': {
792
+ actions: assign({
793
+ lastClickedNode: null,
794
+ }),
795
+ target: 'idle',
796
+ },
797
+ },
798
+ },
799
+ walkthrough: {
800
+ entry: [
801
+ spawnChild('hotkeyActorLogic', { id: 'hotkey' }),
802
+ assign({
803
+ viewportBeforeFocus: ({ context }) => context.viewport,
804
+ activeWalkthrough: ({ context, event }) => {
805
+ assertEvent(event, 'walkthrough.start')
806
+ const stepId = event.stepId ?? first(context.xyedges)!.id as StepEdgeId
807
+ return {
808
+ stepId,
809
+ parallelPrefix: getParallelStepsPrefix(stepId),
810
+ }
811
+ },
812
+ }),
813
+ assign(updateActiveWalkthrough),
814
+ 'xyflow:fitFocusedBounds',
815
+ ],
816
+ on: {
817
+ 'key.esc': {
818
+ target: 'idle',
819
+ },
820
+ 'key.arrow.left': {
821
+ actions: raise({ type: 'walkthrough.step', direction: 'previous' }),
822
+ },
823
+ 'key.arrow.right': {
824
+ actions: raise({ type: 'walkthrough.step', direction: 'next' }),
825
+ },
826
+ 'walkthrough.step': {
827
+ actions: enqueueActions(({ enqueue, context, event }) => {
828
+ const { stepId } = context.activeWalkthrough!
829
+ const stepIndex = context.xyedges.findIndex(e => e.id === stepId)
830
+ const nextStepIndex = clamp(event.direction === 'next' ? stepIndex + 1 : stepIndex - 1, {
831
+ min: 0,
832
+ max: context.xyedges.length - 1,
833
+ })
834
+ if (nextStepIndex === stepIndex) {
835
+ return
836
+ }
837
+ const nextStepId = context.xyedges[nextStepIndex]!.id as StepEdgeId
838
+ enqueue.assign({
839
+ activeWalkthrough: {
840
+ stepId: nextStepId,
841
+ parallelPrefix: getParallelStepsPrefix(nextStepId),
842
+ },
843
+ })
844
+ enqueue.assign(updateActiveWalkthrough)
845
+ enqueue('xyflow:fitFocusedBounds')
846
+ }),
847
+ },
848
+ 'walkthrough.end': {
849
+ target: 'idle',
850
+ },
851
+ 'xyflow.paneDblClick': {
852
+ target: 'idle',
853
+ },
854
+ // We received another view, close overlay and process event again
855
+ 'update.view': {
856
+ guard: 'is another view',
857
+ actions: raise(({ event }) => event, { delay: 50 }),
858
+ target: 'idle',
859
+ },
860
+ },
861
+ exit: enqueueActions(({ enqueue, context, event }) => {
862
+ enqueue.stopChild('hotkey')
863
+ if (context.viewportBeforeFocus) {
864
+ enqueue({ type: 'xyflow:setViewport', params: { viewport: context.viewportBeforeFocus } })
865
+ } else {
866
+ enqueue({ type: 'xyflow:fitDiagram' })
867
+ }
868
+ enqueue.assign({
869
+ activeWalkthrough: null,
870
+ ...unfocusNodesEdges({ context, event }),
871
+ viewportBeforeFocus: null,
872
+ })
873
+ }),
874
+ },
875
+ },
573
876
  },
574
877
  // Navigating to another view (after `navigateTo` event)
575
878
  navigating: {
879
+ id: 'navigating',
576
880
  entry: [
577
881
  'closeAllOverlays',
578
882
  'stopSyncLayout',
@@ -583,15 +887,6 @@ export const diagramMachine = setup({
583
887
  }),
584
888
  },
585
889
  ],
586
- exit: assign({
587
- syncLayoutActorRef: ({ self, context, spawn }) =>
588
- spawn('syncManualLayoutActorLogic', {
589
- id: 'syncLayout',
590
- systemId: 'syncLayout',
591
- input: { parent: self, viewId: context.view.id },
592
- }),
593
- // lastOnNavigate: null,
594
- }),
595
890
  on: {
596
891
  'update.view': {
597
892
  actions: enqueueActions(({ enqueue, context, event }) => {
@@ -616,91 +911,16 @@ export const diagramMachine = setup({
616
911
  enqueue.raise({ type: 'fitDiagram', duration: 200 }, { id: 'fitDiagram', delay: 25 })
617
912
  }
618
913
  enqueue.assign(updateNavigationHistory)
619
- enqueue.assign(mergeXYNodesEdges)
620
914
  enqueue.assign({
915
+ ...mergeXYNodesEdges({ context, event }),
621
916
  lastOnNavigate: null,
622
917
  })
918
+ enqueue('startSyncLayout')
623
919
  }),
624
920
  target: '#idle',
625
921
  },
626
922
  },
627
923
  },
628
- walkthrough: {
629
- entry: [
630
- spawnChild('hotkeyActorLogic', { id: 'hotkey' }),
631
- assign({
632
- viewportBeforeFocus: ({ context }) => context.viewport,
633
- activeWalkthrough: ({ context, event }) => {
634
- assertEvent(event, 'walkthrough.start')
635
- const stepId = event.stepId ?? first(context.xyedges)!.id as StepEdgeId
636
- return {
637
- stepId,
638
- parallelPrefix: getParallelStepsPrefix(stepId),
639
- }
640
- },
641
- }),
642
- assign(updateActiveWalkthrough),
643
- 'xyflow:fitFocusedBounds',
644
- ],
645
- on: {
646
- 'key.esc': {
647
- target: 'idle',
648
- },
649
- 'key.arrow.left': {
650
- actions: raise({ type: 'walkthrough.step', direction: 'previous' }),
651
- },
652
- 'key.arrow.right': {
653
- actions: raise({ type: 'walkthrough.step', direction: 'next' }),
654
- },
655
- 'walkthrough.step': {
656
- actions: enqueueActions(({ enqueue, context, event }) => {
657
- const { stepId } = context.activeWalkthrough!
658
- const stepIndex = context.xyedges.findIndex(e => e.id === stepId)
659
- const nextStepIndex = clamp(event.direction === 'next' ? stepIndex + 1 : stepIndex - 1, {
660
- min: 0,
661
- max: context.xyedges.length - 1,
662
- })
663
- if (nextStepIndex === stepIndex) {
664
- return
665
- }
666
- const nextStepId = context.xyedges[nextStepIndex]!.id as StepEdgeId
667
- enqueue.assign({
668
- activeWalkthrough: {
669
- stepId: nextStepId,
670
- parallelPrefix: getParallelStepsPrefix(nextStepId),
671
- },
672
- })
673
- enqueue.assign(updateActiveWalkthrough)
674
- enqueue('xyflow:fitFocusedBounds')
675
- }),
676
- },
677
- 'walkthrough.end': {
678
- target: 'idle',
679
- },
680
- 'xyflow.paneDblClick': {
681
- target: 'idle',
682
- },
683
- // We received another view, close overlay and process event again
684
- 'update.view': {
685
- guard: 'is another view',
686
- actions: raise(({ event }) => event, { delay: 50 }),
687
- target: 'idle',
688
- },
689
- },
690
- exit: enqueueActions(({ enqueue, context, event }) => {
691
- enqueue.stopChild('hotkey')
692
- if (context.viewportBeforeFocus) {
693
- enqueue({ type: 'xyflow:setViewport', params: { viewport: context.viewportBeforeFocus } })
694
- } else {
695
- enqueue({ type: 'xyflow:fitDiagram' })
696
- }
697
- enqueue.assign({
698
- activeWalkthrough: null,
699
- ...unfocusNodesEdges({ context, event }),
700
- viewportBeforeFocus: null,
701
- })
702
- }),
703
- },
704
924
  },
705
925
  on: {
706
926
  'xyflow.applyNodeChanges': {
@@ -726,27 +946,11 @@ export const diagramMachine = setup({
726
946
  params: prop('event'),
727
947
  },
728
948
  },
729
- 'navigate.to': {
730
- guard: 'is another view',
731
- actions: assign({
732
- lastOnNavigate: ({ context, event }) => ({
733
- fromView: context.view.id,
734
- toView: event.viewId,
735
- fromNode: event.fromNode ?? null,
736
- }),
737
- }),
738
- target: '.navigating',
739
- },
740
- 'navigate.back': {
741
- guard: ({ context }: ActionArg) => context.navigationHistory.currentIndex > 0,
742
- actions: assign(navigateBack),
743
- target: '.navigating',
949
+ 'update.nodeData': {
950
+ actions: assign(updateNodeData),
744
951
  },
745
- 'navigate.forward': {
746
- guard: ({ context }: ActionArg) =>
747
- context.navigationHistory.currentIndex < context.navigationHistory.history.length - 1,
748
- actions: assign(navigateForward),
749
- target: '.navigating',
952
+ 'update.edgeData': {
953
+ actions: assign(updateEdgeData),
750
954
  },
751
955
  'update.view': {
752
956
  actions: [
@@ -754,17 +958,10 @@ export const diagramMachine = setup({
754
958
  enqueueActions(({ enqueue, event, check, context }) => {
755
959
  const isAnotherView = check('is another view')
756
960
  if (isAnotherView) {
757
- const viewId = event.view.id
758
-
759
961
  enqueue('closeAllOverlays')
760
962
  enqueue('stopSyncLayout')
761
963
  enqueue.assign({
762
964
  focusedNode: null,
763
- syncLayoutActorRef: ({ self, spawn }) =>
764
- spawn('syncManualLayoutActorLogic', {
765
- id: 'syncLayout',
766
- input: { parent: self, viewId },
767
- }),
768
965
  })
769
966
  const { fromNode, toNode } = findCorrespondingNode(context, event)
770
967
  if (fromNode && toNode) {
@@ -786,16 +983,19 @@ export const diagramMachine = setup({
786
983
  })
787
984
  enqueue.raise({ type: 'fitDiagram', duration: 200 }, { id: 'fitDiagram', delay: 25 })
788
985
  }
986
+ }
987
+ enqueue.assign({
988
+ ...mergeXYNodesEdges({ context, event }),
989
+ lastOnNavigate: null,
990
+ })
991
+ if (isAnotherView) {
992
+ enqueue('startSyncLayout')
789
993
  } else {
790
- enqueue.sendTo(c => c.context.syncLayoutActorRef, { type: 'synced' })
994
+ enqueue.sendTo(c => c.context.syncLayoutActorRef!, { type: 'synced' })
791
995
  if (!context.viewportChangedManually) {
792
996
  enqueue.raise({ type: 'fitDiagram' }, { id: 'fitDiagram', delay: 50 })
793
997
  }
794
998
  }
795
- enqueue.assign(mergeXYNodesEdges)
796
- enqueue.assign({
797
- lastOnNavigate: null,
798
- })
799
999
  }),
800
1000
  ],
801
1001
  },
@@ -805,109 +1005,20 @@ export const diagramMachine = setup({
805
1005
  'update.features': {
806
1006
  actions: 'updateFeatures',
807
1007
  },
808
- 'update.nodeData': {
809
- actions: assign(updateNodeData),
810
- },
811
- 'update.edgeData': {
812
- actions: assign(updateEdgeData),
813
- },
814
- 'layout.align': {
815
- guard: 'not readonly',
816
- actions: [
817
- {
818
- type: 'layout.align',
819
- params: ({ event }) => ({ mode: event.mode }),
820
- },
821
- raise({ type: 'saveManualLayout.schedule' }),
822
- ],
823
- },
824
- 'layout.resetEdgeControlPoints': {
825
- guard: 'not readonly',
826
- actions: [
827
- assign(resetEdgeControlPoints),
828
- raise({ type: 'saveManualLayout.schedule' }),
829
- ],
830
- },
831
- 'xyflow.resized': {
832
- guard: ({ context }: { context: Context }) => context.features.enableFitView && !context.viewportChangedManually,
833
- actions: [
834
- cancel('fitDiagram'),
835
- raise({ type: 'fitDiagram' }, { id: 'fitDiagram', delay: 200 }),
836
- ],
837
- },
838
- 'open.elementDetails': {
839
- actions: sendTo(({ system }) => typedSystem(system).overlaysActorRef!, ({ context, event }) => {
840
- let initiatedFrom = null as null | {
841
- node: NodeId
842
- clientRect: Rect
843
- }
844
- const fromNodeId = event.fromNode ?? context.view.nodes.find(n => DiagramNode.modelRef(n) === event.fqn)?.id
845
- const internalNode = fromNodeId ? context.xystore.getState().nodeLookup.get(fromNodeId) : null
846
- if (fromNodeId && internalNode) {
847
- const nodeRect = nodeToRect(internalNode)
848
- const zoom = context.xyflow!.getZoom()
849
-
850
- const clientRect = {
851
- ...context.xyflow!.flowToScreenPosition(nodeRect),
852
- width: nodeRect.width * zoom,
853
- height: nodeRect.height * zoom,
854
- }
855
- initiatedFrom = {
856
- node: fromNodeId,
857
- clientRect,
858
- }
859
- }
860
- return ({
861
- type: 'open.elementDetails' as const,
862
- subject: event.fqn,
863
- currentView: context.view,
864
- ...(initiatedFrom && { initiatedFrom }),
865
- })
866
- }),
867
- },
868
- 'open.relationshipsBrowser': {
869
- actions: sendTo(({ system }) => typedSystem(system).overlaysActorRef!, ({ context, event }) => ({
870
- type: 'open.relationshipsBrowser',
871
- subject: event.fqn,
872
- scope: context.view,
873
- })),
874
- },
875
- 'open.relationshipDetails': {
876
- actions: sendTo(({ system }) => typedSystem(system).overlaysActorRef!, ({ context, event }) => ({
877
- type: 'open.relationshipDetails',
878
- view: context.view,
879
- edgeId: event.edgeId,
880
- })),
881
- },
882
- 'open.source': {
883
- actions: {
884
- type: 'trigger:OpenSource',
885
- params: prop('event'),
886
- },
887
- },
888
- 'walkthrough.start': {
889
- guard: 'is dynamic view',
890
- target: '.walkthrough',
891
- },
892
- 'toggle.feature': {
893
- actions: assign({
894
- toggledFeatures: ({ context, event }) => {
895
- return DiagramToggledFeaturesPersistence.write({
896
- ...context.toggledFeatures,
897
- [`enable${event.feature}`]: event.forceValue ??
898
- !(context.toggledFeatures[`enable${event.feature}`] ?? context.features[`enable${event.feature}`]),
899
- })
900
- },
901
- }),
902
- },
903
1008
  },
904
1009
  exit: [
905
1010
  'stopSyncLayout',
1011
+ cancel('fitDiagram'),
906
1012
  stopChild('hotkey'),
907
1013
  assign({
908
1014
  xyflow: null,
909
1015
  xystore: null as any,
910
- initialized: false,
1016
+ xyedges: [],
1017
+ xynodes: [],
1018
+ initialized: {
1019
+ xydata: false,
1020
+ xyflow: false,
1021
+ },
911
1022
  syncLayoutActorRef: null as any,
912
1023
  }),
913
1024
  ],