@likec4/diagram 1.55.1 → 1.57.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 (384) hide show
  1. package/dist/LikeC4Diagram.js +150 -194
  2. package/dist/LikeC4ModelProvider.js +13 -9
  3. package/dist/LikeC4ProjectsOverview.js +24 -30
  4. package/dist/LikeC4ProjectsProvider.js +33 -26
  5. package/dist/LikeC4Styles.js +40 -57
  6. package/dist/LikeC4View.js +148 -196
  7. package/dist/ReactLikeC4.js +43 -65
  8. package/dist/StaticLikeC4Diagram.js +36 -41
  9. package/dist/_virtual/_rolldown/runtime.js +17 -0
  10. package/dist/adhoc-editor/EditorPanel.js +102 -101
  11. package/dist/adhoc-editor/ElementsTree.js +109 -139
  12. package/dist/adhoc-editor/LikeC4AdHocViewEditor.js +77 -70
  13. package/dist/adhoc-editor/components/Tree.d.ts +2 -2
  14. package/dist/adhoc-editor/components/Tree.js +205 -288
  15. package/dist/adhoc-editor/hooks.js +28 -23
  16. package/dist/adhoc-editor/index.js +2 -1
  17. package/dist/adhoc-editor/state/ActorProvider.js +33 -36
  18. package/dist/adhoc-editor/state/actor.editor.js +148 -186
  19. package/dist/adhoc-editor/state/actor.js +12 -14
  20. package/dist/adhoc-editor/state/actor.layouter.js +49 -65
  21. package/dist/adhoc-editor/state/actor.types.js +19 -23
  22. package/dist/adhoc-editor/state/panel.js +112 -127
  23. package/dist/adhoc-editor/state/utils.js +22 -29
  24. package/dist/adhoc-editor/useElementsTree.js +89 -121
  25. package/dist/base/Background.js +26 -29
  26. package/dist/base/Base.js +34 -41
  27. package/dist/base/BaseXYFlow.js +135 -165
  28. package/dist/base/const.js +18 -19
  29. package/dist/base/updateEdges.js +38 -57
  30. package/dist/base/updateNodes.js +46 -65
  31. package/dist/base-primitives/Markdown.d.ts +1 -1
  32. package/dist/base-primitives/Markdown.js +32 -47
  33. package/dist/base-primitives/NodeHandles.js +39 -49
  34. package/dist/base-primitives/compound/CompoundActionButton.js +49 -69
  35. package/dist/base-primitives/compound/CompoundDetailsButton.js +39 -64
  36. package/dist/base-primitives/compound/CompoundNodeContainer.js +46 -66
  37. package/dist/base-primitives/compound/CompoundTitle.js +15 -12
  38. package/dist/base-primitives/compound/actionbtns.css.js +9 -18
  39. package/dist/base-primitives/edge/EdgeActionButton.js +17 -19
  40. package/dist/base-primitives/edge/EdgeContainer.js +29 -48
  41. package/dist/base-primitives/edge/EdgeLabel.js +44 -65
  42. package/dist/base-primitives/edge/EdgeLabelContainer.js +35 -73
  43. package/dist/base-primitives/edge/EdgeMarkers.js +157 -215
  44. package/dist/base-primitives/edge/EdgePath.js +62 -115
  45. package/dist/base-primitives/element/ElementActionButtons.js +92 -81
  46. package/dist/base-primitives/element/ElementData.js +107 -126
  47. package/dist/base-primitives/element/ElementDetailsButton.js +78 -98
  48. package/dist/base-primitives/element/ElementNodeContainer.js +51 -82
  49. package/dist/base-primitives/element/ElementShape.js +331 -317
  50. package/dist/base-primitives/element/ElementTags.d.ts +1 -1
  51. package/dist/base-primitives/element/ElementTags.js +133 -193
  52. package/dist/base-primitives/memoEdge.js +11 -10
  53. package/dist/base-primitives/memoNode.js +16 -20
  54. package/dist/components/ErrorFallback.js +111 -75
  55. package/dist/components/GithubIcon.js +14 -16
  56. package/dist/components/Link.js +99 -113
  57. package/dist/components/Logo.js +38 -41
  58. package/dist/components/NavigationLink.js +15 -23
  59. package/dist/components/NavigationPanel.js +26 -47
  60. package/dist/components/PortalToContainer.js +16 -10
  61. package/dist/components/RootContainer.js +36 -31
  62. package/dist/components/SearchControl.css.js +65 -75
  63. package/dist/components/SearchControl.js +36 -14
  64. package/dist/components/ViewNotFound.js +22 -29
  65. package/dist/context/CurrentViewModelProvider.js +11 -9
  66. package/dist/context/DefaultMantineProvider.js +45 -72
  67. package/dist/context/DiagramEventHandlers.js +43 -48
  68. package/dist/context/DiagramFeatures.d.ts +1 -1
  69. package/dist/context/DiagramFeatures.js +78 -69
  70. package/dist/context/EnsureMantine.js +13 -16
  71. package/dist/context/FramerMotionConfig.js +17 -11
  72. package/dist/context/IconRenderer.js +90 -106
  73. package/dist/context/LikeC4ModelContext.js +14 -10
  74. package/dist/context/LikeC4ProjectsContext.js +7 -6
  75. package/dist/context/RootContainerContext.d.ts +9 -19
  76. package/dist/context/RootContainerContext.js +14 -28
  77. package/dist/context/TagStylesContext.js +49 -57
  78. package/dist/custom/customNodes.js +224 -28
  79. package/dist/custom/index.d.ts +1 -1
  80. package/dist/custom/index.js +40 -40
  81. package/dist/editor/LikeC4EditorCallbacks.d.ts +5 -0
  82. package/dist/editor/LikeC4EditorCallbacks.js +4 -2
  83. package/dist/editor/LikeC4EditorProvider.js +32 -7
  84. package/dist/editor/actor/actions.d.ts +115 -0
  85. package/dist/editor/actor/actions.js +122 -0
  86. package/dist/editor/{hotkeyActor.d.ts → actor/hotkey.d.ts} +1 -1
  87. package/dist/editor/actor/hotkey.js +20 -0
  88. package/dist/editor/actor/machine.d.ts +11 -0
  89. package/dist/editor/actor/machine.js +22 -0
  90. package/dist/editor/{editorActor.setup.d.ts → actor/setup.d.ts} +13 -49
  91. package/dist/editor/actor/setup.js +35 -0
  92. package/dist/editor/actor/state.editor.d.ts +97 -0
  93. package/dist/editor/actor/state.editor.js +55 -0
  94. package/dist/editor/actor/state.sync-queue.d.ts +420 -0
  95. package/dist/editor/actor/state.sync-queue.js +235 -0
  96. package/dist/editor/actor/types.d.ts +59 -0
  97. package/dist/editor/actor/types.js +5 -0
  98. package/dist/editor/applyChangesToManualLayout.js +144 -163
  99. package/dist/editor/index.d.ts +2 -1
  100. package/dist/editor/useEditorActorLogic.d.ts +8 -2
  101. package/dist/editor/useEditorActorLogic.js +51 -43
  102. package/dist/hooks/safeContext.js +17 -17
  103. package/dist/hooks/useCallbackRef.js +18 -11
  104. package/dist/hooks/useCurrentView.js +16 -7
  105. package/dist/hooks/useCurrentViewModel.js +14 -9
  106. package/dist/hooks/useDiagram.js +60 -37
  107. package/dist/hooks/useDiagramCompareLayout.js +77 -81
  108. package/dist/hooks/useEditorActor.d.ts +4 -0
  109. package/dist/hooks/useEditorActor.js +26 -0
  110. package/dist/hooks/useId.js +8 -6
  111. package/dist/hooks/useLikeC4ElementsTree.d.ts +3 -2
  112. package/dist/hooks/useLikeC4ElementsTree.js +24 -21
  113. package/dist/hooks/useLikeC4Model.js +21 -20
  114. package/dist/hooks/useLikeC4Project.js +40 -29
  115. package/dist/hooks/useLikeC4Styles.js +6 -6
  116. package/dist/hooks/useMantinePortalProps.js +10 -6
  117. package/dist/hooks/useSetState.js +21 -19
  118. package/dist/hooks/useUpdateEffect.js +18 -29
  119. package/dist/hooks/useXYFlow.js +13 -15
  120. package/dist/index.js +24 -23
  121. package/dist/likec4diagram/DiagramUI.js +37 -37
  122. package/dist/likec4diagram/DiagramXYFlow.js +215 -224
  123. package/dist/likec4diagram/convert-to-xyflow.js +21 -22
  124. package/dist/likec4diagram/custom/edges/EdgeDrifts.js +22 -32
  125. package/dist/likec4diagram/custom/edges/RelationshipEdge.js +275 -372
  126. package/dist/likec4diagram/custom/edges/SequenceStepEdge.js +71 -75
  127. package/dist/likec4diagram/custom/edges/edges.css.js +41 -47
  128. package/dist/likec4diagram/custom/edges/useControlPoints.js +52 -56
  129. package/dist/likec4diagram/custom/edges/useRelationshipEdgePath.js +54 -76
  130. package/dist/likec4diagram/custom/index.js +17 -17
  131. package/dist/likec4diagram/custom/nodes/CompoundActions.js +19 -26
  132. package/dist/likec4diagram/custom/nodes/ElementActions.js +131 -82
  133. package/dist/likec4diagram/custom/nodes/NodeDrifts.js +20 -26
  134. package/dist/likec4diagram/custom/nodes/NodeNotes.js +215 -273
  135. package/dist/likec4diagram/custom/nodes/SequenceActorNode.js +131 -147
  136. package/dist/likec4diagram/custom/nodes/nodes.js +135 -146
  137. package/dist/likec4diagram/custom/nodes/toolbar/ColorButton.js +155 -159
  138. package/dist/likec4diagram/custom/nodes/toolbar/CompoundToolbar.js +58 -86
  139. package/dist/likec4diagram/custom/nodes/toolbar/ElementToolbar.js +108 -164
  140. package/dist/likec4diagram/custom/nodes/toolbar/Toolbar.js +56 -68
  141. package/dist/likec4diagram/custom/nodes/toolbar/_shared.d.ts +3 -6
  142. package/dist/likec4diagram/custom/nodes/toolbar/_shared.js +97 -102
  143. package/dist/likec4diagram/custom/nodes/toolbar/styles.css.js +13 -13
  144. package/dist/likec4diagram/custom/nodes/toolbar/types.js +6 -5
  145. package/dist/likec4diagram/custom/nodes/toolbar/useHandlers.js +36 -41
  146. package/dist/likec4diagram/relationship-popover/RelationshipPopover.js +510 -541
  147. package/dist/likec4diagram/relationship-popover/actor.js +113 -152
  148. package/dist/likec4diagram/relationship-popover/components.js +39 -43
  149. package/dist/likec4diagram/state/DiagramActorProvider.js +135 -136
  150. package/dist/likec4diagram/state/aligners.js +286 -360
  151. package/dist/likec4diagram/state/assign.js +84 -108
  152. package/dist/likec4diagram/state/createViewChange.js +72 -92
  153. package/dist/likec4diagram/state/diagram-api.d.ts +16 -0
  154. package/dist/likec4diagram/state/diagram-api.js +230 -152
  155. package/dist/likec4diagram/state/hotkeyActor.js +54 -45
  156. package/dist/likec4diagram/state/machine.actions.js +708 -821
  157. package/dist/likec4diagram/state/machine.actions.layout.js +154 -183
  158. package/dist/likec4diagram/state/machine.d.ts +1 -1
  159. package/dist/likec4diagram/state/machine.js +113 -134
  160. package/dist/likec4diagram/state/machine.setup.js +104 -113
  161. package/dist/likec4diagram/state/machine.state.initializing.js +54 -54
  162. package/dist/likec4diagram/state/machine.state.navigating.js +192 -227
  163. package/dist/likec4diagram/state/machine.state.ready.focused.js +72 -88
  164. package/dist/likec4diagram/state/machine.state.ready.idle.js +79 -98
  165. package/dist/likec4diagram/state/machine.state.ready.js +126 -202
  166. package/dist/likec4diagram/state/machine.state.ready.printing.js +38 -39
  167. package/dist/likec4diagram/state/machine.state.ready.walkthrough.js +153 -193
  168. package/dist/likec4diagram/state/mediaPrintActor.js +20 -16
  169. package/dist/likec4diagram/state/persistence.js +20 -21
  170. package/dist/likec4diagram/state/types.d.ts +1 -1
  171. package/dist/likec4diagram/state/utils.d.ts +1 -1
  172. package/dist/likec4diagram/state/utils.js +131 -162
  173. package/dist/likec4diagram/ui/LayoutDriftFrame.js +53 -64
  174. package/dist/likec4diagram/ui/notation/NotationPanel.css.js +58 -80
  175. package/dist/likec4diagram/ui/notation/NotationPanel.js +183 -214
  176. package/dist/likec4diagram/useLayoutConstraints.js +388 -433
  177. package/dist/likec4diagram/xyflow-diagram/diagram-view.js +216 -227
  178. package/dist/likec4diagram/xyflow-sequence/const.js +11 -7
  179. package/dist/likec4diagram/xyflow-sequence/sequence-layout.js +177 -180
  180. package/dist/navigationpanel/NavigationPanel.js +113 -123
  181. package/dist/navigationpanel/NavigationPanelControls.js +124 -150
  182. package/dist/navigationpanel/NavigationPanelDropdown.js +365 -477
  183. package/dist/navigationpanel/_common.d.ts +4 -10
  184. package/dist/navigationpanel/_common.js +57 -70
  185. package/dist/navigationpanel/actor.js +153 -236
  186. package/dist/navigationpanel/comparepanel/CompareActionsMenu.js +66 -83
  187. package/dist/navigationpanel/comparepanel/ComparePanel.js +135 -164
  188. package/dist/navigationpanel/comparepanel/ComparePanelControls.js +50 -58
  189. package/dist/navigationpanel/comparepanel/DriftsSummary.js +207 -254
  190. package/dist/navigationpanel/comparepanel/LayoutTypeSwitcher.js +33 -35
  191. package/dist/navigationpanel/controls/DetailsControls.js +219 -246
  192. package/dist/navigationpanel/controls/LayoutWarning.js +89 -100
  193. package/dist/navigationpanel/controls/LogoButton.js +46 -70
  194. package/dist/navigationpanel/controls/NavigationButtons.js +35 -52
  195. package/dist/navigationpanel/controls/OpenSource.js +27 -25
  196. package/dist/navigationpanel/controls/SearchControl.js +50 -61
  197. package/dist/navigationpanel/controls/ToggleReadonly.js +86 -81
  198. package/dist/navigationpanel/dropdown/ProjectsMenu.js +69 -87
  199. package/dist/navigationpanel/editorpanel/ApplySemanticLayout.d.ts +4 -0
  200. package/dist/navigationpanel/editorpanel/ApplySemanticLayout.js +36 -0
  201. package/dist/navigationpanel/editorpanel/CenterCamera.js +17 -13
  202. package/dist/navigationpanel/editorpanel/ChangeAutoLayoutButton.js +182 -154
  203. package/dist/navigationpanel/editorpanel/EditorPanel.js +59 -45
  204. package/dist/navigationpanel/editorpanel/ManualLayoutToolsButton.js +122 -173
  205. package/dist/navigationpanel/editorpanel/ToggleReadonly.js +20 -13
  206. package/dist/navigationpanel/editorpanel/_common.d.ts +3 -6
  207. package/dist/navigationpanel/editorpanel/_common.js +13 -13
  208. package/dist/navigationpanel/editorpanel/styles.js +58 -75
  209. package/dist/navigationpanel/hooks.js +35 -29
  210. package/dist/navigationpanel/styles.css.js +20 -28
  211. package/dist/navigationpanel/walkthrough/ActiveWalkthroughControls.js +107 -134
  212. package/dist/navigationpanel/walkthrough/DynamicViewControls.d.ts +65 -65
  213. package/dist/navigationpanel/walkthrough/DynamicViewControls.js +105 -120
  214. package/dist/navigationpanel/walkthrough/WalkthroughPanel.js +75 -83
  215. package/dist/overlays/Overlays.js +94 -112
  216. package/dist/overlays/element-details/ElementDetails.js +22 -28
  217. package/dist/overlays/element-details/ElementDetailsCard.css.js +198 -221
  218. package/dist/overlays/element-details/ElementDetailsCard.js +517 -499
  219. package/dist/overlays/element-details/MetadataValue.js +210 -250
  220. package/dist/overlays/element-details/TabPanelDeployments.css.js +40 -60
  221. package/dist/overlays/element-details/TabPanelDeployments.js +185 -178
  222. package/dist/overlays/element-details/TabPanelRelationships.css.js +63 -71
  223. package/dist/overlays/element-details/TabPanelRelationships.js +155 -140
  224. package/dist/overlays/element-details/TabPanelStructure.css.js +29 -33
  225. package/dist/overlays/element-details/TabPanelStructure.js +93 -93
  226. package/dist/overlays/element-details/actor.js +45 -55
  227. package/dist/overlays/element-details/actorContext.js +12 -10
  228. package/dist/overlays/overlay/Overlay.d.ts +16 -0
  229. package/dist/overlays/overlay/Overlay.js +102 -151
  230. package/dist/overlays/overlaysActor.js +215 -265
  231. package/dist/overlays/relationship-details/RelationshipDetails.js +270 -253
  232. package/dist/overlays/relationship-details/SelectEdge.css.js +62 -74
  233. package/dist/overlays/relationship-details/SelectEdge.js +146 -126
  234. package/dist/overlays/relationship-details/actor.js +242 -303
  235. package/dist/overlays/relationship-details/compute.js +109 -135
  236. package/dist/overlays/relationship-details/custom/ElementActions.js +43 -56
  237. package/dist/overlays/relationship-details/custom/edgeTypes.js +43 -49
  238. package/dist/overlays/relationship-details/custom/nodeTypes.d.ts +4 -5
  239. package/dist/overlays/relationship-details/custom/nodeTypes.js +96 -121
  240. package/dist/overlays/relationship-details/hooks.js +44 -38
  241. package/dist/overlays/relationship-details/layout-to-xyflow.js +119 -141
  242. package/dist/overlays/relationship-details/layout.js +275 -304
  243. package/dist/overlays/relationships-browser/RelationshipsBrowser.js +319 -321
  244. package/dist/overlays/relationships-browser/SelectElement.css.js +18 -21
  245. package/dist/overlays/relationships-browser/SelectElement.js +192 -218
  246. package/dist/overlays/relationships-browser/actor.js +364 -462
  247. package/dist/overlays/relationships-browser/const.js +7 -6
  248. package/dist/overlays/relationships-browser/custom/ElementActions.js +60 -63
  249. package/dist/overlays/relationships-browser/custom/EmptyNode.js +25 -29
  250. package/dist/overlays/relationships-browser/custom/edgeTypes.js +66 -99
  251. package/dist/overlays/relationships-browser/custom/nodeTypes.js +98 -123
  252. package/dist/overlays/relationships-browser/hooks.js +49 -51
  253. package/dist/overlays/relationships-browser/layout.js +413 -465
  254. package/dist/overlays/relationships-browser/useViewToNodesEdges.js +141 -157
  255. package/dist/projects-overview/ProjectsOverview.js +56 -55
  256. package/dist/projects-overview/ProjectsOverviewXY.js +105 -94
  257. package/dist/projects-overview/actor.js +252 -345
  258. package/dist/projects-overview/context.js +8 -7
  259. package/dist/projects-overview/custom/edgeTypes.js +22 -21
  260. package/dist/projects-overview/custom/nodeTypes.js +38 -42
  261. package/dist/projects-overview/hooks.js +9 -9
  262. package/dist/projects-overview/layouted-to-xyflow.js +46 -42
  263. package/dist/projects-overview/panel/ProjectsOverviewPanel.js +7 -9
  264. package/dist/projects-overview/persistence.js +22 -22
  265. package/dist/search/Search.d.ts +6 -3
  266. package/dist/search/Search.js +189 -182
  267. package/dist/search/SearchContext.js +16 -15
  268. package/dist/search/XStateSearchAdapter.js +68 -62
  269. package/dist/search/components/ElementsColumn.css.js +50 -68
  270. package/dist/search/components/ElementsColumn.js +253 -291
  271. package/dist/search/components/PickView.js +116 -140
  272. package/dist/search/components/SearchByTags.js +76 -94
  273. package/dist/search/components/SearchInput.js +187 -209
  274. package/dist/search/components/ViewsColum.js +151 -141
  275. package/dist/search/components/ViewsColumn.css.js +12 -26
  276. package/dist/search/components/_shared.css.js +127 -153
  277. package/dist/search/components/styles.css.js +47 -53
  278. package/dist/search/components/utils.js +44 -47
  279. package/dist/search/hooks.js +10 -10
  280. package/dist/search/searchActor.js +97 -128
  281. package/dist/shadowroot/ShadowRoot.d.ts +7 -6
  282. package/dist/shadowroot/ShadowRoot.js +106 -79
  283. package/dist/shadowroot/styles.css.d.ts +10 -2
  284. package/dist/shadowroot/styles.css.js +56 -69
  285. package/dist/styles-font2.js +4 -0
  286. package/dist/styles2.js +4 -0
  287. package/dist/utils/index.js +5 -0
  288. package/dist/utils/roundDpr.js +19 -15
  289. package/dist/utils/view-bounds.js +48 -55
  290. package/dist/utils/xyflow.js +143 -113
  291. package/package.json +18 -25
  292. package/panda.buildinfo.json +15 -15
  293. package/src/styles-font.css +114 -0
  294. package/src/styles-min.css +2 -0
  295. package/src/styles-xyflow.css +1 -0
  296. package/src/styles.css +3 -0
  297. package/styles-font.css +1 -1
  298. package/styles-min.css +1 -1
  299. package/styles-xyflow.css +1 -1
  300. package/styles.css +1 -1
  301. package/dist/_virtual/_commonjsHelpers.js +0 -3
  302. package/dist/_virtual/assign-f10db67b.cjs.js +0 -3
  303. package/dist/_virtual/log-30abbb83.cjs.js +0 -3
  304. package/dist/_virtual/raise-f051f097.cjs.js +0 -3
  305. package/dist/_virtual/store-cfe7da62.cjs.js +0 -3
  306. package/dist/_virtual/xstate-actions.cjs.js +0 -5
  307. package/dist/_virtual/xstate-actions.cjs2.js +0 -3
  308. package/dist/_virtual/xstate-dev.cjs.js +0 -3
  309. package/dist/_virtual/xstate-guards.cjs.js +0 -5
  310. package/dist/_virtual/xstate-guards.cjs2.js +0 -3
  311. package/dist/_virtual/xstate-store-react.cjs.js +0 -5
  312. package/dist/_virtual/xstate-store-react.cjs2.js +0 -3
  313. package/dist/bundle/index.d.ts +0 -1
  314. package/dist/editor/editorActor.actions.d.ts +0 -153
  315. package/dist/editor/editorActor.actions.js +0 -149
  316. package/dist/editor/editorActor.setup.js +0 -38
  317. package/dist/editor/editorActor.states.d.ts +0 -9
  318. package/dist/editor/editorActor.states.js +0 -273
  319. package/dist/editor/hotkeyActor.js +0 -19
  320. package/dist/hooks/useOverlaysActor.js +0 -10
  321. package/dist/hooks/useSearchActor.js +0 -10
  322. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/createReactComponent.js +0 -41
  323. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/defaultAttributes.js +0 -30
  324. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconAlertTriangle.js +0 -14
  325. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconArrowDownRight.js +0 -14
  326. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconArrowLeft.js +0 -14
  327. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconArrowRight.js +0 -14
  328. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconBolt.js +0 -14
  329. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconBrowser.js +0 -14
  330. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconCheck.js +0 -14
  331. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconChevronDown.js +0 -14
  332. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconChevronLeft.js +0 -14
  333. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconChevronRight.js +0 -14
  334. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconCopy.js +0 -14
  335. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconCylinder.js +0 -14
  336. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconDeviceMobile.js +0 -14
  337. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconDirectionSignFilled.js +0 -14
  338. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconExternalLink.js +0 -14
  339. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconFileSymlink.js +0 -14
  340. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconFileText.js +0 -14
  341. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconFocusCentered.js +0 -14
  342. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconFolderFilled.js +0 -14
  343. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconHelpCircle.js +0 -14
  344. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconId.js +0 -14
  345. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconInfoCircle.js +0 -14
  346. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignBottom.js +0 -14
  347. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignCenter.js +0 -14
  348. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignLeft.js +0 -14
  349. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignMiddle.js +0 -14
  350. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignRight.js +0 -14
  351. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignTop.js +0 -14
  352. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutBoardSplit.js +0 -14
  353. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutCollage.js +0 -14
  354. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutDashboard.js +0 -14
  355. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconLink.js +0 -14
  356. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconLock.js +0 -14
  357. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconLockOpen2.js +0 -14
  358. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconPlayerPlayFilled.js +0 -14
  359. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconPlayerSkipBackFilled.js +0 -14
  360. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconPlayerSkipForwardFilled.js +0 -14
  361. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconPlayerStopFilled.js +0 -14
  362. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconRectangularPrism.js +0 -14
  363. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconReorder.js +0 -14
  364. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconRouteOff.js +0 -14
  365. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconSearch.js +0 -14
  366. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconSelector.js +0 -14
  367. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconStack2.js +0 -14
  368. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconStarFilled.js +0 -14
  369. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconTarget.js +0 -14
  370. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconTransform.js +0 -14
  371. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconTrash.js +0 -14
  372. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconUser.js +0 -14
  373. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconX.js +0 -14
  374. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconZoomScan.js +0 -14
  375. package/dist/node_modules/.pnpm/@xstate_store@3.17.1_react@19.2.4/node_modules/@xstate/store/dist/store-cfe7da62.cjs.js +0 -761
  376. package/dist/node_modules/.pnpm/@xstate_store@3.17.1_react@19.2.4/node_modules/@xstate/store/react/dist/xstate-store-react.cjs.js +0 -180
  377. package/dist/node_modules/.pnpm/xstate@5.30.0/node_modules/xstate/actions/dist/xstate-actions.cjs.js +0 -37
  378. package/dist/node_modules/.pnpm/xstate@5.30.0/node_modules/xstate/dev/dist/xstate-dev.cjs.js +0 -59
  379. package/dist/node_modules/.pnpm/xstate@5.30.0/node_modules/xstate/dist/assign-f10db67b.cjs.js +0 -140
  380. package/dist/node_modules/.pnpm/xstate@5.30.0/node_modules/xstate/dist/log-30abbb83.cjs.js +0 -401
  381. package/dist/node_modules/.pnpm/xstate@5.30.0/node_modules/xstate/dist/raise-f051f097.cjs.js +0 -2830
  382. package/dist/node_modules/.pnpm/xstate@5.30.0/node_modules/xstate/guards/dist/xstate-guards.cjs.js +0 -26
  383. package/dist/styles-font.css2.js +0 -3
  384. package/dist/styles.css2.js +0 -3
@@ -0,0 +1,59 @@
1
+ import { Types } from '../../likec4diagram/types';
2
+ import { HotKeyEvent } from './hotkey';
3
+ import type * as t from '@likec4/core/types';
4
+ export type EditorActorEvent = {
5
+ type: 'change.view';
6
+ change: t.ViewChange;
7
+ } | {
8
+ type: 'change.semantic-layout';
9
+ } | {
10
+ type: 'change.latest-to-manual';
11
+ } | {
12
+ type: 'change.sync-snapshot';
13
+ } | {
14
+ type: 'view.synched';
15
+ } | {
16
+ type: 'cancel';
17
+ } | {
18
+ type: 'edit.move.start';
19
+ subject: 'node' | 'edge';
20
+ } | {
21
+ type: 'edit.move.end';
22
+ } | {
23
+ type: 'edit.move.cancel';
24
+ } | HotKeyEvent;
25
+ export type Snapshot = {
26
+ view: t.LayoutedView;
27
+ change: t.ViewChange.SaveViewSnapshot;
28
+ xynodes: Types.Node[];
29
+ xyedges: Types.Edge[];
30
+ };
31
+ export type LinkedSnapshot = {
32
+ head: Snapshot;
33
+ tail: LinkedSnapshot | null;
34
+ };
35
+ export interface EditorActorInput {
36
+ viewId: t.ViewId;
37
+ }
38
+ export type SyncOp = t.ViewChange | 'sync-snapshot' | 'apply-semantic-layout' | 'apply-latest-to-manual';
39
+ export declare const isViewChange: (change: SyncOp) => change is t.ViewChange;
40
+ export interface EditorActorContext {
41
+ viewId: t.ViewId;
42
+ history: LinkedSnapshot | null;
43
+ editing: null | {
44
+ /**
45
+ * The subject of the edit
46
+ */
47
+ subject: 'node' | 'edge';
48
+ /**
49
+ * The state before editing started
50
+ */
51
+ before: Snapshot;
52
+ };
53
+ syncQueue: Array<SyncOp>;
54
+ processing: Exclude<SyncOp, 'sync-snapshot'> | null;
55
+ }
56
+ export type EditorActorEmitedEvent = {
57
+ type: 'idle';
58
+ };
59
+ export type EditorActorStateTag = 'pending' | 'busy' | 'ai-semantic-layout';
@@ -0,0 +1,5 @@
1
+ import "../../_virtual/_rolldown/runtime.js";
2
+ //#region src/editor/actor/types.ts
3
+ var isViewChange = (change) => typeof change !== "string";
4
+ //#endregion
5
+ export { isViewChange };
@@ -1,183 +1,164 @@
1
- import { invariant, nonNullable } from '@likec4/core';
2
- import { BBox, convertPoint, vector } from '@likec4/core/geometry';
3
- import { setAutoFreeze, produce, castDraft } from 'immer';
4
- import { map, isNullish } from 'remeda';
5
-
1
+ import "../_virtual/_rolldown/runtime.js";
2
+ import { isNullish, map } from "remeda";
3
+ import { invariant, nonNullable } from "@likec4/core";
4
+ import { BBox as BBox$1, convertPoint, vector } from "@likec4/core/geometry";
5
+ import "@likec4/core/types";
6
+ import { castDraft, produce, setAutoFreeze } from "immer";
7
+ //#region src/editor/applyChangesToManualLayout.ts
8
+ /**
9
+ * Applies changes to a manual layout.
10
+ *
11
+ * @param manual - The manual layout.
12
+ * @param latest - The latest layout.
13
+ */
6
14
  function applyChangesToManualLayout(manualView, latestView) {
7
- try {
8
- setAutoFreeze(false);
9
- return _applyChangesToManualLayout(manualView, latestView);
10
- } finally {
11
- setAutoFreeze(true);
12
- }
15
+ try {
16
+ setAutoFreeze(false);
17
+ return _applyChangesToManualLayout(manualView, latestView);
18
+ } finally {
19
+ setAutoFreeze(true);
20
+ }
13
21
  }
14
- const isRootNode = (node) => isNullish(node.parent);
22
+ var isRootNode = (node) => isNullish(node.parent);
15
23
  function _applyChangesToManualLayout(manualView, latestView) {
16
- invariant(manualView.id === latestView.id, "View IDs do not match");
17
- invariant(manualView._type === latestView._type, "View types do not match");
18
- invariant(manualView._layout === "manual" && latestView._layout === "auto", "Views must be manual and auto");
19
- const compounds = /* @__PURE__ */ new Set();
20
- const newnodes = /* @__PURE__ */ new Set();
21
- const isNotCompound = (node) => !compounds.has(typeof node === "string" ? node : node.id);
22
- const isBetweenNewLeafNodes = (edge) => newnodes.has(edge.source) && newnodes.has(edge.target) && isNotCompound(edge.source) && isNotCompound(edge.target);
23
- const nodesMap = new Map(
24
- latestView.nodes.map((latest) => {
25
- if (latest.children && latest.children.length > 0) {
26
- compounds.add(latest.id);
27
- }
28
- const manual = manualView.nodes.find((n) => n.id === latest.id);
29
- if (manual) {
30
- return [latest.id, applyFromManualNode({ latest, manual })];
31
- }
32
- newnodes.add(latest.id);
33
- return [latest.id, removeDrift(latest)];
34
- })
35
- );
36
- const newNodesOnly = newnodes.size === nodesMap.size;
37
- if (newNodesOnly) {
38
- return produce(latestView, (draft) => {
39
- draft._layout = "manual";
40
- draft.nodes = castDraft([...nodesMap.values()]);
41
- draft.edges = castDraft(latestView.edges.map(removeDrift));
42
- delete draft.drifts;
43
- });
44
- }
45
- if (compounds.size > 0) {
46
- expandCompoundNodes(nodesMap);
47
- }
48
- const nodes = [...nodesMap.values()];
49
- const edges = latestView.edges.map((latest) => {
50
- const dir = latest.dir ?? "forward";
51
- const hasSameEndpoints = (candidate) => candidate.source === latest.source && candidate.target === latest.target && (candidate.dir === dir || !candidate.dir && !latest.dir);
52
- let manual = manualView.edges.find((e) => e.id === latest.id && hasSameEndpoints(e));
53
- if (!manual) {
54
- manual = manualView.edges.find((e) => hasSameEndpoints(e));
55
- }
56
- if (manual) {
57
- return applyFromManualEdge({
58
- latest,
59
- manual
60
- });
61
- }
62
- if (isBetweenNewLeafNodes(latest)) {
63
- return removeDrift(latest);
64
- }
65
- const sourceNode = nodesMap.get(latest.source);
66
- const targetNode = nodesMap.get(latest.target);
67
- return makeAsStraightLine(latest, sourceNode, targetNode);
68
- });
69
- const bounds = BBox.merge(...nodes.filter(isRootNode));
70
- return produce(latestView, (draft) => {
71
- draft._layout = "manual";
72
- draft.nodes = castDraft(nodes);
73
- draft.edges = castDraft(edges);
74
- draft.bounds = bounds;
75
- delete draft.drifts;
76
- });
24
+ invariant(manualView.id === latestView.id, "View IDs do not match");
25
+ invariant(manualView._type === latestView._type, "View types do not match");
26
+ invariant(manualView._layout === "manual" && latestView._layout === "auto", "Views must be manual and auto");
27
+ const compounds = /* @__PURE__ */ new Set();
28
+ const newnodes = /* @__PURE__ */ new Set();
29
+ const isNotCompound = (node) => !compounds.has(typeof node === "string" ? node : node.id);
30
+ const isBetweenNewLeafNodes = (edge) => newnodes.has(edge.source) && newnodes.has(edge.target) && isNotCompound(edge.source) && isNotCompound(edge.target);
31
+ const nodesMap = new Map(latestView.nodes.map((latest) => {
32
+ if (latest.children && latest.children.length > 0) compounds.add(latest.id);
33
+ const manual = manualView.nodes.find((n) => n.id === latest.id);
34
+ if (manual) return [latest.id, applyFromManualNode({
35
+ latest,
36
+ manual
37
+ })];
38
+ newnodes.add(latest.id);
39
+ return [latest.id, removeDrift(latest)];
40
+ }));
41
+ if (newnodes.size === nodesMap.size) return produce(latestView, (draft) => {
42
+ draft._layout = "manual";
43
+ draft.nodes = castDraft([...nodesMap.values()]);
44
+ draft.edges = castDraft(latestView.edges.map(removeDrift));
45
+ delete draft.drifts;
46
+ });
47
+ if (compounds.size > 0) expandCompoundNodes(nodesMap);
48
+ const nodes = [...nodesMap.values()];
49
+ const edges = latestView.edges.map((latest) => {
50
+ const dir = latest.dir ?? "forward";
51
+ const hasSameEndpoints = (candidate) => candidate.source === latest.source && candidate.target === latest.target && (candidate.dir === dir || !candidate.dir && !latest.dir);
52
+ let manual = manualView.edges.find((e) => e.id === latest.id && hasSameEndpoints(e));
53
+ if (!manual) manual = manualView.edges.find((e) => hasSameEndpoints(e));
54
+ if (manual) return applyFromManualEdge({
55
+ latest,
56
+ manual
57
+ });
58
+ if (isBetweenNewLeafNodes(latest)) return removeDrift(latest);
59
+ return makeAsStraightLine(latest, nodesMap.get(latest.source), nodesMap.get(latest.target));
60
+ });
61
+ const bounds = BBox$1.merge(...nodes.filter(isRootNode));
62
+ return produce(latestView, (draft) => {
63
+ draft._layout = "manual";
64
+ draft.nodes = castDraft(nodes);
65
+ draft.edges = castDraft(edges);
66
+ draft.bounds = bounds;
67
+ delete draft.drifts;
68
+ });
77
69
  }
78
- const COMPOUND_PADDING = {
79
- Left: 42,
80
- Right: 42,
81
- Top: 60,
82
- Bottom: 42
70
+ /**
71
+ * Padding constants for compound nodes (same as in useLayoutConstraints)
72
+ */
73
+ var COMPOUND_PADDING = {
74
+ Left: 42,
75
+ Right: 42,
76
+ Top: 60,
77
+ Bottom: 42
83
78
  };
79
+ /**
80
+ * Expands compound nodes to wrap all their children with proper padding.
81
+ * Processes nodes recursively from leaves up to ensure correct bounding boxes.
82
+ */
84
83
  function expandCompoundNodes(nodes) {
85
- function expand(nodeId) {
86
- const node = nonNullable(nodes.get(nodeId), `Node ${nodeId} not found`);
87
- if (node.children.length === 0) {
88
- return node;
89
- }
90
- const childBBoxes = [];
91
- for (const childId of node.children) {
92
- childBBoxes.push(
93
- expand(childId)
94
- );
95
- }
96
- const childrenBBox = BBox.merge(...childBBoxes);
97
- node.x = childrenBBox.x - COMPOUND_PADDING.Left;
98
- node.y = childrenBBox.y - COMPOUND_PADDING.Top;
99
- node.width = childrenBBox.width + COMPOUND_PADDING.Left + COMPOUND_PADDING.Right;
100
- node.height = childrenBBox.height + COMPOUND_PADDING.Top + COMPOUND_PADDING.Bottom;
101
- return node;
102
- }
103
- for (const node of nodes.values()) {
104
- if (!isRootNode(node) || node.children.length === 0) {
105
- continue;
106
- }
107
- expand(node.id);
108
- }
84
+ function expand(nodeId) {
85
+ const node = nonNullable(nodes.get(nodeId), `Node ${nodeId} not found`);
86
+ if (node.children.length === 0) return node;
87
+ const childBBoxes = [];
88
+ for (const childId of node.children) childBBoxes.push(expand(childId));
89
+ const childrenBBox = BBox$1.merge(...childBBoxes);
90
+ node.x = childrenBBox.x - COMPOUND_PADDING.Left;
91
+ node.y = childrenBBox.y - COMPOUND_PADDING.Top;
92
+ node.width = childrenBBox.width + COMPOUND_PADDING.Left + COMPOUND_PADDING.Right;
93
+ node.height = childrenBBox.height + COMPOUND_PADDING.Top + COMPOUND_PADDING.Bottom;
94
+ return node;
95
+ }
96
+ for (const node of nodes.values()) {
97
+ if (!isRootNode(node) || node.children.length === 0) continue;
98
+ expand(node.id);
99
+ }
109
100
  }
110
101
  function applyFromManualNode({ latest, manual }) {
111
- invariant(manual.id === latest.id, "Node IDs do not match");
112
- return produce(latest, (next) => {
113
- next.x = manual.x;
114
- next.y = manual.y;
115
- next.drifts = null;
116
- });
102
+ invariant(manual.id === latest.id, "Node IDs do not match");
103
+ return produce(latest, (next) => {
104
+ next.x = manual.x;
105
+ next.y = manual.y;
106
+ next.drifts = null;
107
+ });
117
108
  }
118
109
  function applyFromManualEdge(edges) {
119
- const { manual, latest } = edges;
120
- return produce(latest, (draft) => {
121
- if (manual.controlPoints) {
122
- draft.controlPoints = manual.controlPoints;
123
- } else {
124
- delete draft.controlPoints;
125
- }
126
- draft.points = castDraft(manual.points);
127
- if (manual.labelBBox) {
128
- draft.labelBBox = latest.labelBBox ?? manual.labelBBox;
129
- draft.labelBBox.x = manual.labelBBox.x;
130
- draft.labelBBox.y = manual.labelBBox.y;
131
- }
132
- draft.drifts = null;
133
- });
110
+ const { manual, latest } = edges;
111
+ return produce(latest, (draft) => {
112
+ if (manual.controlPoints) draft.controlPoints = manual.controlPoints;
113
+ else delete draft.controlPoints;
114
+ draft.points = castDraft(manual.points);
115
+ if (manual.labelBBox) {
116
+ draft.labelBBox = latest.labelBBox ?? manual.labelBBox;
117
+ draft.labelBBox.x = manual.labelBBox.x;
118
+ draft.labelBBox.y = manual.labelBBox.y;
119
+ }
120
+ draft.drifts = null;
121
+ });
134
122
  }
135
123
  function removeDrift(object) {
136
- if ("drifts" in object && object.drifts !== null) {
137
- const result = { ...object };
138
- result.drifts = null;
139
- return result;
140
- }
141
- return object;
124
+ if ("drifts" in object && object.drifts !== null) {
125
+ const result = { ...object };
126
+ result.drifts = null;
127
+ return result;
128
+ }
129
+ return object;
142
130
  }
143
131
  function makeAsStraightLine(edge, sourceNode, targetNode) {
144
- const controlPoints = edgeControlPoints(sourceNode, targetNode);
145
- const labelPos = controlPoints[0];
146
- return produce(edge, (draft) => {
147
- draft.points = castDraft(map(controlPoints, convertPoint));
148
- draft.controlPoints = controlPoints;
149
- if (edge.labelBBox) {
150
- draft.labelBBox.x = labelPos.x;
151
- draft.labelBBox.y = labelPos.y;
152
- }
153
- delete draft.drifts;
154
- });
132
+ const controlPoints = edgeControlPoints(sourceNode, targetNode);
133
+ const labelPos = controlPoints[0];
134
+ return produce(edge, (draft) => {
135
+ draft.points = castDraft(map(controlPoints, convertPoint));
136
+ draft.controlPoints = controlPoints;
137
+ if (edge.labelBBox) {
138
+ draft.labelBBox.x = labelPos.x;
139
+ draft.labelBBox.y = labelPos.y;
140
+ }
141
+ delete draft.drifts;
142
+ });
155
143
  }
156
144
  function getBorderPointOnVector(node, nodeCenter, v) {
157
- const xScale = node.width / 2 / v.x;
158
- const yScale = node.height / 2 / v.y;
159
- const scale = Math.min(Math.abs(xScale), Math.abs(yScale));
160
- return vector(v).multiply(scale).add(nodeCenter);
145
+ const xScale = node.width / 2 / v.x;
146
+ const yScale = node.height / 2 / v.y;
147
+ const scale = Math.min(Math.abs(xScale), Math.abs(yScale));
148
+ return vector(v).multiply(scale).add(nodeCenter);
161
149
  }
162
150
  function edgeControlPoints(source, target) {
163
- const sourceCenter = vector(BBox.center(source));
164
- const targetCenter = vector(BBox.center(target));
165
- if (source === target) {
166
- const loopSize = 80;
167
- const centerOfTopBoundary = vector(0, source.height || 0).multiply(-0.5).add(sourceCenter);
168
- return [
169
- centerOfTopBoundary.add(vector(-loopSize / 2.5, -loopSize)).trunc().toObject(),
170
- centerOfTopBoundary.add(vector(loopSize / 2.5, -loopSize)).trunc().toObject()
171
- ];
172
- }
173
- const sourceToTargetVector = targetCenter.subtract(sourceCenter);
174
- const sourceBorderPoint = getBorderPointOnVector(source, sourceCenter, sourceToTargetVector);
175
- const targetBorderPoint = getBorderPointOnVector(target, targetCenter, sourceToTargetVector.multiply(-1));
176
- const sourceToTarget = targetBorderPoint.subtract(sourceBorderPoint);
177
- return [
178
- sourceBorderPoint.add(sourceToTarget.multiply(0.4)).trunc().toObject(),
179
- sourceBorderPoint.add(sourceToTarget.multiply(0.6)).trunc().toObject()
180
- ];
151
+ const sourceCenter = vector(BBox$1.center(source));
152
+ const targetCenter = vector(BBox$1.center(target));
153
+ if (source === target) {
154
+ const loopSize = 80;
155
+ const centerOfTopBoundary = vector(0, source.height || 0).multiply(-.5).add(sourceCenter);
156
+ return [centerOfTopBoundary.add(vector(-80 / 2.5, -80)).trunc().toObject(), centerOfTopBoundary.add(vector(loopSize / 2.5, -80)).trunc().toObject()];
157
+ }
158
+ const sourceToTargetVector = targetCenter.subtract(sourceCenter);
159
+ const sourceBorderPoint = getBorderPointOnVector(source, sourceCenter, sourceToTargetVector);
160
+ const sourceToTarget = getBorderPointOnVector(target, targetCenter, sourceToTargetVector.multiply(-1)).subtract(sourceBorderPoint);
161
+ return [sourceBorderPoint.add(sourceToTarget.multiply(.4)).trunc().toObject(), sourceBorderPoint.add(sourceToTarget.multiply(.6)).trunc().toObject()];
181
162
  }
182
-
163
+ //#endregion
183
164
  export { applyChangesToManualLayout };
@@ -1,4 +1,5 @@
1
- export type * from './editorActor.states';
1
+ export type * from './actor/machine';
2
+ export type * from './actor/types';
2
3
  export { createLikeC4Editor } from './LikeC4EditorCallbacks';
3
4
  export type { LikeC4EditorCallbacks } from './LikeC4EditorCallbacks';
4
5
  export { EnsureEditorContext, LikeC4EditorProvider, useOptionalLikeC4Editor, } from './LikeC4EditorProvider';
@@ -1,2 +1,8 @@
1
- import { EditorActorLogic } from './editorActor.states';
2
- export declare function useEditorActorLogic(): EditorActorLogic;
1
+ import { EditorActorLogic } from './actor/machine';
2
+ export declare function useEditorActorLogic(): EditorActorLogic & {
3
+ /**
4
+ * True if the editor is running in stub mode (no actual editor port available)
5
+ * This happens when the diagram is rendered outside of vscode extension / vite- plugin
6
+ */
7
+ readonly isStub: boolean;
8
+ };
@@ -1,47 +1,55 @@
1
- import { useMemo } from 'react';
2
- import { fromPromise } from 'xstate';
3
- import { applyChangesToManualLayout } from './applyChangesToManualLayout.js';
4
- import { editorActorLogic } from './editorActor.states.js';
5
- import { useOptionalLikeC4Editor } from './LikeC4EditorProvider.js';
6
- import { useCallbackRef } from '../hooks/useCallbackRef.js';
7
-
8
- const promisify = (fn) => {
9
- return Promise.resolve().then(() => fn());
1
+ import "../_virtual/_rolldown/runtime.js";
2
+ import { useCallbackRef } from "../hooks/useCallbackRef.js";
3
+ import { useOptionalLikeC4Editor } from "./LikeC4EditorProvider.js";
4
+ import { editorActorLogic } from "./actor/machine.js";
5
+ import { applyChangesToManualLayout } from "./applyChangesToManualLayout.js";
6
+ import { useMemo } from "react";
7
+ import { isNullish } from "remeda";
8
+ import { fromPromise } from "xstate";
9
+ //#region src/editor/useEditorActorLogic.ts
10
+ var promisify = (fn) => {
11
+ return Promise.resolve().then(() => fn());
10
12
  };
11
13
  function useEditorActorLogic() {
12
- const port = useOptionalLikeC4Editor();
13
- const applyLatest = useCallbackRef(
14
- async ({ input: { viewId, current } }) => {
15
- if (!port) {
16
- console.error("No editor port available for applying latest to manual layout");
17
- return Promise.reject(new Error("No editor port"));
18
- }
19
- const manual = await promisify(() => current ?? port.fetchView(viewId, "manual"));
20
- const latest = await promisify(() => port.fetchView(viewId, "auto"));
21
- const updated = applyChangesToManualLayout(manual, latest);
22
- return {
23
- updated
24
- };
25
- }
26
- );
27
- const executeChange = useCallbackRef(
28
- async ({ input }) => {
29
- if (!port) {
30
- console.error("No editor port available for executing change");
31
- return Promise.reject(new Error("No editor port"));
32
- }
33
- for (const change of input.changes) {
34
- await promisify(() => port.handleChange(input.viewId, change));
35
- }
36
- return {};
37
- }
38
- );
39
- return useMemo(() => editorActorLogic.provide({
40
- actors: {
41
- applyLatest: fromPromise(applyLatest),
42
- executeChange: fromPromise(executeChange)
43
- }
44
- }), [applyLatest, executeChange]);
14
+ const port = useOptionalLikeC4Editor();
15
+ const isStub = isNullish(port);
16
+ const applyLatest = useCallbackRef(async ({ input: { viewId, current } }) => {
17
+ if (!port) {
18
+ console.error("No editor port available for applying latest to manual layout");
19
+ throw new Error("No editor port");
20
+ }
21
+ return { updated: applyChangesToManualLayout(await promisify(() => current ?? port.fetchView(viewId, "manual")), await promisify(() => port.fetchView(viewId, "auto"))) };
22
+ });
23
+ const executeChange = useCallbackRef(async ({ input }) => {
24
+ if (!port) {
25
+ console.error("No editor port available for executing change");
26
+ throw new Error("No editor port");
27
+ }
28
+ for (const change of input.changes) await promisify(() => port.handleChange(input.viewId, change));
29
+ return {};
30
+ });
31
+ const applySemanticLayout = useCallbackRef(async ({ input }) => {
32
+ if (!port) {
33
+ console.error("No editor port available for applying semantic layout");
34
+ throw new Error("No editor port");
35
+ }
36
+ if (!port.applySemanticLayout) {
37
+ console.error("No applySemanticLayout method available on editor port");
38
+ throw new Error("No applySemanticLayout method");
39
+ }
40
+ await port.applySemanticLayout(input.viewId);
41
+ return {};
42
+ });
43
+ return useMemo(() => Object.assign(editorActorLogic.provide({ actors: {
44
+ applyLatest: fromPromise(applyLatest),
45
+ executeChange: fromPromise(executeChange),
46
+ applySemanticLayout: fromPromise(applySemanticLayout)
47
+ } }), { isStub }), [
48
+ applyLatest,
49
+ executeChange,
50
+ applySemanticLayout,
51
+ isStub
52
+ ]);
45
53
  }
46
-
54
+ //#endregion
47
55
  export { useEditorActorLogic };
@@ -1,24 +1,24 @@
1
- import { useContext, createContext } from 'react';
2
-
3
- const DiagramActorSafeContext = createContext(null);
1
+ import "../_virtual/_rolldown/runtime.js";
2
+ import { createContext, useContext } from "react";
3
+ //#region src/hooks/safeContext.tsx
4
+ /**
5
+ * To improve experience with HMR, we move context to separate files and use as a boundary for hooks
6
+ */
7
+ var DiagramActorSafeContext = createContext(null);
4
8
  DiagramActorSafeContext.displayName = "DiagramActorSafeContext";
5
- const DiagramApiSafeContext = createContext(null);
9
+ var DiagramApiSafeContext = createContext(null);
6
10
  DiagramApiSafeContext.displayName = "DiagramApiSafeContext";
7
- const DiagramActorContextProvider = DiagramActorSafeContext.Provider;
8
- const DiagramApiContextProvider = DiagramApiSafeContext.Provider;
11
+ var DiagramActorContextProvider = DiagramActorSafeContext.Provider;
12
+ var DiagramApiContextProvider = DiagramApiSafeContext.Provider;
9
13
  function useDiagramActorRef() {
10
- const ctx = useContext(DiagramActorSafeContext);
11
- if (ctx === null) {
12
- throw new Error("DiagramActorRef is not provided");
13
- }
14
- return ctx;
14
+ const ctx = useContext(DiagramActorSafeContext);
15
+ if (ctx === null) throw new Error("DiagramActorRef is not provided");
16
+ return ctx;
15
17
  }
16
18
  function useDiagram() {
17
- const ctx = useContext(DiagramApiSafeContext);
18
- if (ctx === null) {
19
- throw new Error("DiagramApi is not provided");
20
- }
21
- return ctx;
19
+ const ctx = useContext(DiagramApiSafeContext);
20
+ if (ctx === null) throw new Error("DiagramApi is not provided");
21
+ return ctx;
22
22
  }
23
-
23
+ //#endregion
24
24
  export { DiagramActorContextProvider, DiagramApiContextProvider, useDiagram, useDiagramActorRef };
@@ -1,14 +1,21 @@
1
- import { useRef, useMemo } from 'react';
2
-
1
+ import "../_virtual/_rolldown/runtime.js";
2
+ import { useMemo, useRef } from "react";
3
+ //#region src/hooks/useCallbackRef.ts
4
+ /**
5
+ * Memoizes a callback function so that it will not be recreated on every render.
6
+ * The returned function is guaranteed to be the same reference across renders.
7
+ * @param callback the callback function to memoize
8
+ * @returns the memoized callback function
9
+ */
3
10
  function useCallbackRef(callback) {
4
- const ref = useRef(callback);
5
- ref.current = callback;
6
- return useMemo(() => {
7
- function callbackRef(...args) {
8
- return ref.current?.(...args);
9
- }
10
- return callbackRef;
11
- }, []);
11
+ const ref = useRef(callback);
12
+ ref.current = callback;
13
+ return useMemo(() => {
14
+ function callbackRef(...args) {
15
+ return ref.current?.(...args);
16
+ }
17
+ return callbackRef;
18
+ }, []);
12
19
  }
13
-
20
+ //#endregion
14
21
  export { useCallbackRef };
@@ -1,12 +1,21 @@
1
- import { useDiagramSnapshot, selectDiagramActor } from './useDiagram.js';
2
-
3
- const selectViewId = selectDiagramActor((s) => s.context.view.id);
1
+ import "../_virtual/_rolldown/runtime.js";
2
+ import { selectDiagramActor, useDiagramSnapshot } from "./useDiagram.js";
3
+ //#region src/hooks/useCurrentView.ts
4
+ var selectViewId = selectDiagramActor((s) => s.context.view.id);
5
+ /**
6
+ * Returns current view id
7
+ * Should be used only inside LikeC4Diagram
8
+ */
4
9
  function useCurrentViewId() {
5
- return useDiagramSnapshot(selectViewId);
10
+ return useDiagramSnapshot(selectViewId);
6
11
  }
7
- const selectView = selectDiagramActor((s) => s.context.view);
12
+ var selectView = selectDiagramActor((s) => s.context.view);
13
+ /**
14
+ * Returns current view
15
+ * Should be used only inside LikeC4Diagram
16
+ */
8
17
  function useCurrentView() {
9
- return useDiagramSnapshot(selectView);
18
+ return useDiagramSnapshot(selectView);
10
19
  }
11
-
20
+ //#endregion
12
21
  export { useCurrentView, useCurrentViewId };
@@ -1,11 +1,16 @@
1
- import { useOptionalCurrentViewModel } from '../context/LikeC4ModelContext.js';
2
-
1
+ import "../_virtual/_rolldown/runtime.js";
2
+ import { useOptionalCurrentViewModel } from "../context/LikeC4ModelContext.js";
3
+ //#region src/hooks/useCurrentViewModel.ts
4
+ /**
5
+ * Hook to get the current view model from the context.
6
+ * Throws an error if no view model is found in the context.
7
+ *
8
+ * @see useOptionalCurrentViewModel
9
+ */
3
10
  function useCurrentViewModel() {
4
- const vm = useOptionalCurrentViewModel();
5
- if (!vm) {
6
- throw new Error("No CurrentViewModelContext found");
7
- }
8
- return vm;
11
+ const vm = useOptionalCurrentViewModel();
12
+ if (!vm) throw new Error("No CurrentViewModelContext found");
13
+ return vm;
9
14
  }
10
-
11
- export { useCurrentViewModel, useOptionalCurrentViewModel };
15
+ //#endregion
16
+ export { useCurrentViewModel };