@likec4/diagram 1.57.0 → 1.59.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 (329) hide show
  1. package/dist/LikeC4Diagram.js +1 -1
  2. package/dist/LikeC4Diagram.props.d.ts +1 -1
  3. package/dist/LikeC4Styles.js +1 -1
  4. package/dist/LikeC4View.js +2 -2
  5. package/dist/ReactLikeC4.d.ts +1 -1
  6. package/dist/base/Base.d.ts +3 -2
  7. package/dist/base/Base.js +14 -26
  8. package/dist/base/BaseXYFlow.d.ts +2 -1
  9. package/dist/base/BaseXYFlow.js +63 -4
  10. package/dist/base/keyboardZoom.d.ts +3 -0
  11. package/dist/base/keyboardZoom.js +20 -0
  12. package/dist/base/updateEdges.js +7 -16
  13. package/dist/base/updateNodes.js +3 -9
  14. package/dist/base-primitives/Markdown.d.ts +1 -1
  15. package/dist/base-primitives/NodeHandles.d.ts +1 -1
  16. package/dist/base-primitives/compound/CompoundActionButton.d.ts +2 -1
  17. package/dist/base-primitives/compound/CompoundActionButton.js +5 -2
  18. package/dist/base-primitives/compound/CompoundDetailsButton.d.ts +2 -1
  19. package/dist/base-primitives/compound/CompoundDetailsButton.js +5 -2
  20. package/dist/base-primitives/compound/CompoundNodeContainer.d.ts +1 -1
  21. package/dist/base-primitives/compound/CompoundTitle.d.ts +7 -1
  22. package/dist/base-primitives/compound/CompoundTitle.js +2 -1
  23. package/dist/base-primitives/compound/actionbtns.css.d.ts +1 -1
  24. package/dist/base-primitives/edge/EdgeActionButton.d.ts +2 -1
  25. package/dist/base-primitives/edge/EdgeActionButton.js +2 -1
  26. package/dist/base-primitives/edge/EdgeContainer.d.ts +1 -1
  27. package/dist/base-primitives/edge/EdgeContainer.js +4 -2
  28. package/dist/base-primitives/edge/EdgeLabel.d.ts +2 -0
  29. package/dist/base-primitives/edge/EdgeLabel.js +2 -5
  30. package/dist/base-primitives/edge/EdgeLabelContainer.d.ts +1 -1
  31. package/dist/base-primitives/edge/EdgeMarkers.d.ts +8 -8
  32. package/dist/base-primitives/element/ElementActionButtons.d.ts +2 -1
  33. package/dist/base-primitives/element/ElementActionButtons.js +4 -1
  34. package/dist/base-primitives/element/ElementData.d.ts +4 -2
  35. package/dist/base-primitives/element/ElementData.js +2 -1
  36. package/dist/base-primitives/element/ElementDetailsButton.d.ts +2 -1
  37. package/dist/base-primitives/element/ElementDetailsButton.js +5 -2
  38. package/dist/base-primitives/element/ElementNodeContainer.js +1 -1
  39. package/dist/base-primitives/element/ElementShape.d.ts +1 -1
  40. package/dist/base-primitives/element/ElementShape.js +3 -0
  41. package/dist/base-primitives/element/ElementTags.d.ts +1 -1
  42. package/dist/base-primitives/element/ElementTags.js +1 -3
  43. package/dist/components/ErrorFallback.d.ts +2 -2
  44. package/dist/components/ErrorFallback.js +3 -5
  45. package/dist/components/Link.js +6 -6
  46. package/dist/components/NavigationPanel.d.ts +2 -2
  47. package/dist/components/NavigationPanel.js +1 -1
  48. package/dist/components/PortalToContainer.d.ts +1 -1
  49. package/dist/components/RootContainer.d.ts +1 -1
  50. package/dist/components/SearchControl.css.js +11 -11
  51. package/dist/components/SearchControl.d.ts +2 -2
  52. package/dist/components/ViewNotFound.d.ts +2 -2
  53. package/dist/context/CurrentViewModelProvider.d.ts +1 -1
  54. package/dist/context/DefaultMantineProvider.d.ts +1 -1
  55. package/dist/context/DiagramEventHandlers.d.ts +1 -1
  56. package/dist/context/EnsureMantine.d.ts +1 -1
  57. package/dist/context/FramerMotionConfig.d.ts +3 -3
  58. package/dist/context/FramerMotionConfig.js +2 -2
  59. package/dist/context/IconRenderer.d.ts +2 -2
  60. package/dist/context/IconRenderer.js +32 -12
  61. package/dist/context/LikeC4ModelContext.d.ts +1 -1
  62. package/dist/context/TagStylesContext.d.ts +4 -3
  63. package/dist/context/TagStylesContext.js +20 -22
  64. package/dist/custom/index.d.ts +1 -0
  65. package/dist/custom/index.js +3 -2
  66. package/dist/editor/LikeC4EditorProvider.d.ts +2 -2
  67. package/dist/editor/actor/actions.d.ts +74 -15
  68. package/dist/editor/actor/actions.js +91 -25
  69. package/dist/editor/actor/hotkey.d.ts +1 -1
  70. package/dist/editor/actor/hotkey.js +7 -0
  71. package/dist/editor/actor/machine.d.ts +4 -6
  72. package/dist/editor/actor/machine.js +1 -0
  73. package/dist/editor/actor/setup.d.ts +25 -4
  74. package/dist/editor/actor/setup.js +8 -6
  75. package/dist/editor/actor/state.editor.d.ts +64 -14
  76. package/dist/editor/actor/state.editor.js +12 -11
  77. package/dist/editor/actor/state.sync-queue.d.ts +283 -91
  78. package/dist/editor/actor/state.sync-queue.js +93 -56
  79. package/dist/editor/actor/types.d.ts +6 -1
  80. package/dist/editor/actor/types.js +1 -1
  81. package/dist/editor/useEditorActorLogic.js +14 -2
  82. package/dist/hooks/index.d.ts +1 -1
  83. package/dist/hooks/safeContext.d.ts +156 -3
  84. package/dist/hooks/safeContext.js +60 -12
  85. package/dist/hooks/useCurrentViewModel.js +1 -1
  86. package/dist/hooks/useDiagram.d.ts +8 -0
  87. package/dist/hooks/useDiagram.js +9 -2
  88. package/dist/hooks/useEditorActor.d.ts +5 -0
  89. package/dist/hooks/useEditorActor.js +4 -3
  90. package/dist/hooks/useLikeC4ElementsTree.js +1 -1
  91. package/dist/hooks/useLikeC4Model.js +1 -1
  92. package/dist/hooks/useXYFlow.d.ts +1 -0
  93. package/dist/hooks/useXYFlow.js +5 -3
  94. package/dist/index.d.ts +3 -1
  95. package/dist/index.js +4 -2
  96. package/dist/likec4diagram/DiagramUI.d.ts +1 -1
  97. package/dist/likec4diagram/DiagramUI.js +19 -6
  98. package/dist/likec4diagram/DiagramXYFlow.js +54 -17
  99. package/dist/likec4diagram/convert-to-xyflow.d.ts +3 -5
  100. package/dist/likec4diagram/convert-to-xyflow.js +29 -10
  101. package/dist/likec4diagram/custom/edges/EdgeDrifts.d.ts +1 -1
  102. package/dist/likec4diagram/custom/edges/RelationshipEdge.js +140 -18
  103. package/dist/likec4diagram/custom/edges/SequenceStepEdge.d.ts +1 -1
  104. package/dist/likec4diagram/custom/edges/SequenceStepEdge.js +11 -4
  105. package/dist/likec4diagram/custom/edges/edges.css.d.ts +1 -0
  106. package/dist/likec4diagram/custom/edges/edges.css.js +6 -2
  107. package/dist/likec4diagram/custom/index.d.ts +2 -1
  108. package/dist/likec4diagram/custom/index.js +5 -3
  109. package/dist/likec4diagram/custom/nodes/CompoundActions.d.ts +1 -1
  110. package/dist/likec4diagram/custom/nodes/CompoundActions.js +1 -0
  111. package/dist/likec4diagram/custom/nodes/ElementActions.d.ts +4 -4
  112. package/dist/likec4diagram/custom/nodes/ElementActions.js +13 -3
  113. package/dist/likec4diagram/custom/nodes/NodeDrifts.d.ts +1 -1
  114. package/dist/likec4diagram/custom/nodes/NodeNotes.d.ts +1 -1
  115. package/dist/likec4diagram/custom/nodes/NodeNotes.js +0 -4
  116. package/dist/likec4diagram/custom/nodes/SequenceActorNode.d.ts +2 -2
  117. package/dist/likec4diagram/custom/nodes/SequenceActorNode.js +32 -19
  118. package/dist/likec4diagram/custom/nodes/SequenceSubFlow.d.ts +2 -0
  119. package/dist/likec4diagram/custom/nodes/SequenceSubFlow.js +234 -0
  120. package/dist/likec4diagram/custom/nodes/index.d.ts +1 -0
  121. package/dist/likec4diagram/custom/nodes/nodes.d.ts +7 -7
  122. package/dist/likec4diagram/custom/nodes/nodes.js +20 -5
  123. package/dist/likec4diagram/custom/nodes/toolbar/ColorButton.d.ts +3 -3
  124. package/dist/likec4diagram/custom/nodes/toolbar/ColorButton.js +1 -1
  125. package/dist/likec4diagram/custom/nodes/toolbar/CompoundToolbar.d.ts +2 -2
  126. package/dist/likec4diagram/custom/nodes/toolbar/ElementToolbar.d.ts +2 -2
  127. package/dist/likec4diagram/custom/nodes/toolbar/Toolbar.d.ts +1 -1
  128. package/dist/likec4diagram/custom/nodes/toolbar/_shared.d.ts +3 -3
  129. package/dist/likec4diagram/custom/nodes/toolbar/_shared.js +1 -1
  130. package/dist/likec4diagram/relationship-popover/RelationshipPopover.d.ts +1 -1
  131. package/dist/likec4diagram/relationship-popover/RelationshipPopover.js +15 -14
  132. package/dist/likec4diagram/relationship-popover/components.d.ts +2 -2
  133. package/dist/likec4diagram/state/DiagramActorProvider.d.ts +1 -1
  134. package/dist/likec4diagram/state/DiagramActorProvider.js +11 -20
  135. package/dist/likec4diagram/state/aligners.js +1 -1
  136. package/dist/likec4diagram/state/assign.d.ts +1 -1
  137. package/dist/likec4diagram/state/assign.js +1 -1
  138. package/dist/likec4diagram/state/createViewChange.js +2 -1
  139. package/dist/likec4diagram/state/diagram-api.d.ts +18 -10
  140. package/dist/likec4diagram/state/diagram-api.js +333 -229
  141. package/dist/likec4diagram/state/machine.actions.d.ts +1026 -332
  142. package/dist/likec4diagram/state/machine.actions.js +118 -46
  143. package/dist/likec4diagram/state/machine.actions.layout.d.ts +123 -51
  144. package/dist/likec4diagram/state/machine.actions.layout.js +40 -33
  145. package/dist/likec4diagram/state/machine.d.ts +154 -16
  146. package/dist/likec4diagram/state/machine.js +5 -41
  147. package/dist/likec4diagram/state/machine.setup.d.ts +84 -19
  148. package/dist/likec4diagram/state/machine.setup.js +65 -12
  149. package/dist/likec4diagram/state/machine.state.initializing.d.ts +59 -33
  150. package/dist/likec4diagram/state/machine.state.navigating.js +7 -3
  151. package/dist/likec4diagram/state/machine.state.ready.d.ts +1540 -476
  152. package/dist/likec4diagram/state/machine.state.ready.focused.d.ts +294 -53
  153. package/dist/likec4diagram/state/machine.state.ready.focused.js +3 -3
  154. package/dist/likec4diagram/state/machine.state.ready.idle.d.ts +264 -73
  155. package/dist/likec4diagram/state/machine.state.ready.idle.js +31 -6
  156. package/dist/likec4diagram/state/machine.state.ready.js +22 -16
  157. package/dist/likec4diagram/state/machine.state.ready.printing.d.ts +23 -9
  158. package/dist/likec4diagram/state/machine.state.ready.walkthrough.d.ts +288 -84
  159. package/dist/likec4diagram/state/machine.state.ready.walkthrough.js +135 -66
  160. package/dist/likec4diagram/state/types.d.ts +4 -2
  161. package/dist/likec4diagram/state/utils.d.ts +7 -0
  162. package/dist/likec4diagram/state/utils.js +36 -34
  163. package/dist/likec4diagram/types.d.ts +49 -3
  164. package/dist/likec4diagram/ui/FloatingSequenceActors.d.ts +6 -0
  165. package/dist/likec4diagram/ui/FloatingSequenceActors.js +155 -0
  166. package/dist/likec4diagram/ui/LayoutDriftFrame.d.ts +1 -1
  167. package/dist/likec4diagram/ui/LayoutDriftFrame.js +2 -2
  168. package/dist/likec4diagram/ui/index.d.ts +2 -0
  169. package/dist/likec4diagram/ui/notation/NotationPanel.css.js +5 -5
  170. package/dist/likec4diagram/ui/notation/NotationPanel.d.ts +1 -1
  171. package/dist/likec4diagram/ui/sequence-outline/SequenceOutlinePanel.d.ts +2 -0
  172. package/dist/likec4diagram/ui/sequence-outline/SequenceOutlinePanel.js +519 -0
  173. package/dist/likec4diagram/ui/sequence-outline/state.d.ts +36 -0
  174. package/dist/likec4diagram/ui/sequence-outline/state.js +55 -0
  175. package/dist/likec4diagram/xyflow-diagram/diagram-view.d.ts +1 -1
  176. package/dist/likec4diagram/xyflow-diagram/diagram-view.js +116 -62
  177. package/dist/likec4diagram/xyflow-sequence/_types.d.ts +55 -5
  178. package/dist/likec4diagram/xyflow-sequence/const.d.ts +5 -5
  179. package/dist/likec4diagram/xyflow-sequence/const.js +4 -4
  180. package/dist/likec4diagram/xyflow-sequence/layouter.d.ts +30 -6
  181. package/dist/likec4diagram/xyflow-sequence/layouter.js +561 -0
  182. package/dist/likec4diagram/xyflow-sequence/{sequence-layout.d.ts → sequence-view-to-xy.d.ts} +8 -2
  183. package/dist/likec4diagram/xyflow-sequence/{sequence-layout.js → sequence-view-to-xy.js} +112 -14
  184. package/dist/likec4diagram/xyflow-sequence/sequence-view.d.ts +2 -7
  185. package/dist/likec4diagram/xyflow-sequence/sequence-view.js +144 -0
  186. package/dist/likec4diagram/xyflow-sequence/utils.d.ts +9 -1
  187. package/dist/likec4diagram/xyflow-sequence/utils.js +96 -0
  188. package/dist/navigationpanel/NavigationPanel.d.ts +5 -2
  189. package/dist/navigationpanel/NavigationPanel.js +58 -59
  190. package/dist/navigationpanel/NavigationPanelControls.d.ts +1 -1
  191. package/dist/navigationpanel/NavigationPanelDropdown.d.ts +1 -1
  192. package/dist/navigationpanel/NavigationPanelDropdown.js +47 -40
  193. package/dist/navigationpanel/_common.d.ts +2 -2
  194. package/dist/navigationpanel/_common.js +2 -2
  195. package/dist/navigationpanel/actor.actions.d.ts +19 -0
  196. package/dist/navigationpanel/actor.actions.js +45 -0
  197. package/dist/navigationpanel/actor.d.ts +34 -96
  198. package/dist/navigationpanel/actor.js +21 -84
  199. package/dist/navigationpanel/actor.setup.d.ts +98 -0
  200. package/dist/navigationpanel/actor.setup.js +31 -0
  201. package/dist/navigationpanel/comparepanel/CompareActionsMenu.d.ts +1 -1
  202. package/dist/navigationpanel/comparepanel/ComparePanel.d.ts +1 -1
  203. package/dist/navigationpanel/comparepanel/ComparePanelControls.d.ts +1 -1
  204. package/dist/navigationpanel/comparepanel/DriftsSummary.d.ts +1 -1
  205. package/dist/navigationpanel/comparepanel/DriftsSummary.js +4 -5
  206. package/dist/navigationpanel/comparepanel/LayoutTypeSwitcher.d.ts +1 -1
  207. package/dist/navigationpanel/controls/DetailsControls.d.ts +1 -1
  208. package/dist/navigationpanel/controls/DetailsControls.js +7 -8
  209. package/dist/navigationpanel/controls/LayoutWarning.d.ts +1 -1
  210. package/dist/navigationpanel/controls/LogoButton.d.ts +1 -1
  211. package/dist/navigationpanel/controls/NavigationButtons.d.ts +1 -1
  212. package/dist/navigationpanel/controls/OpenSource.d.ts +1 -1
  213. package/dist/navigationpanel/controls/SearchControl.d.ts +1 -1
  214. package/dist/navigationpanel/controls/ToggleReadonly.d.ts +1 -1
  215. package/dist/navigationpanel/dropdown/ProjectsMenu.js +1 -1
  216. package/dist/navigationpanel/editorpanel/CenterCamera.d.ts +1 -1
  217. package/dist/navigationpanel/editorpanel/ChangeAutoLayoutButton.d.ts +1 -1
  218. package/dist/navigationpanel/editorpanel/EditorPanel.d.ts +1 -1
  219. package/dist/navigationpanel/editorpanel/ManualLayoutToolsButton.d.ts +1 -1
  220. package/dist/navigationpanel/editorpanel/ToggleReadonly.d.ts +1 -1
  221. package/dist/navigationpanel/editorpanel/styles.js +8 -8
  222. package/dist/navigationpanel/hooks.d.ts +20 -5
  223. package/dist/navigationpanel/hooks.js +4 -18
  224. package/dist/navigationpanel/styles.css.d.ts +1 -1
  225. package/dist/navigationpanel/walkthrough/ActiveWalkthroughControls.d.ts +1 -1
  226. package/dist/navigationpanel/walkthrough/ActiveWalkthroughControls.js +2 -2
  227. package/dist/navigationpanel/walkthrough/DynamicViewControls.d.ts +5 -5
  228. package/dist/navigationpanel/walkthrough/DynamicViewControls.js +23 -25
  229. package/dist/navigationpanel/walkthrough/WalkthroughPanel.d.ts +1 -1
  230. package/dist/navigationpanel/walkthrough/WalkthroughPanel.js +5 -5
  231. package/dist/overlays/Overlays.d.ts +4 -2
  232. package/dist/overlays/Overlays.js +10 -10
  233. package/dist/overlays/element-details/ElementDetails.d.ts +1 -1
  234. package/dist/overlays/element-details/ElementDetailsCard.css.js +17 -17
  235. package/dist/overlays/element-details/ElementDetailsCard.d.ts +1 -1
  236. package/dist/overlays/element-details/MetadataValue.d.ts +2 -2
  237. package/dist/overlays/element-details/MetadataValue.js +15 -15
  238. package/dist/overlays/element-details/TabPanelDeployments.css.js +5 -5
  239. package/dist/overlays/element-details/TabPanelRelationships.css.js +11 -11
  240. package/dist/overlays/element-details/TabPanelRelationships.d.ts +1 -1
  241. package/dist/overlays/element-details/TabPanelRelationships.js +1 -1
  242. package/dist/overlays/element-details/TabPanelStructure.css.js +2 -2
  243. package/dist/overlays/element-details/TabPanelStructure.d.ts +2 -2
  244. package/dist/overlays/element-details/TabPanelStructure.js +1 -1
  245. package/dist/overlays/element-details/actor.d.ts +2 -3
  246. package/dist/overlays/hooks.d.ts +28 -0
  247. package/dist/overlays/hooks.js +5 -0
  248. package/dist/overlays/overlay/Overlay.js +34 -25
  249. package/dist/overlays/overlaysActor.js +0 -1
  250. package/dist/overlays/relationship-details/RelationshipDetails.d.ts +1 -1
  251. package/dist/overlays/relationship-details/SelectEdge.d.ts +1 -1
  252. package/dist/overlays/relationship-details/custom/ElementActions.d.ts +1 -1
  253. package/dist/overlays/relationship-details/custom/nodeTypes.d.ts +4 -4
  254. package/dist/overlays/relationship-details/custom/nodeTypes.js +1 -1
  255. package/dist/overlays/relationship-details/layout.js +1 -1
  256. package/dist/overlays/relationships-browser/RelationshipsBrowser.d.ts +1 -1
  257. package/dist/overlays/relationships-browser/SelectElement.css.js +2 -2
  258. package/dist/overlays/relationships-browser/SelectElement.d.ts +1 -1
  259. package/dist/overlays/relationships-browser/actor.js +79 -78
  260. package/dist/overlays/relationships-browser/custom/ElementActions.d.ts +1 -1
  261. package/dist/overlays/relationships-browser/custom/EmptyNode.d.ts +1 -1
  262. package/dist/overlays/relationships-browser/custom/nodeTypes.d.ts +4 -4
  263. package/dist/overlays/relationships-browser/custom/nodeTypes.js +1 -1
  264. package/dist/overlays/relationships-browser/hooks.js +1 -1
  265. package/dist/overlays/relationships-browser/layout.js +2 -2
  266. package/dist/projects-overview/ProjectsOverview.d.ts +1 -1
  267. package/dist/projects-overview/actor.js +4 -4
  268. package/dist/projects-overview/custom/nodeTypes.d.ts +1 -1
  269. package/dist/projects-overview/panel/ProjectsOverviewPanel.d.ts +1 -1
  270. package/dist/search/Search.d.ts +1 -1
  271. package/dist/search/Search.js +1 -1
  272. package/dist/search/XStateSearchAdapter.d.ts +1 -1
  273. package/dist/search/components/ElementsColumn.css.js +2 -2
  274. package/dist/search/components/ElementsColumn.d.ts +1 -1
  275. package/dist/search/components/PickView.d.ts +1 -1
  276. package/dist/search/components/SearchByTags.d.ts +1 -1
  277. package/dist/search/components/SearchInput.d.ts +1 -1
  278. package/dist/search/components/ViewsColum.d.ts +3 -3
  279. package/dist/search/components/ViewsColum.js +1 -1
  280. package/dist/search/components/_shared.css.d.ts +1 -1
  281. package/dist/search/components/_shared.css.js +23 -23
  282. package/dist/search/components/styles.css.js +4 -4
  283. package/dist/shadowroot/ShadowRoot.d.ts +2 -3
  284. package/dist/shadowroot/ShadowRoot.js +95 -41
  285. package/dist/shadowroot/index.d.ts +1 -0
  286. package/dist/styles2.js +1 -1
  287. package/dist/utils/defineActors.d.ts +21 -0
  288. package/dist/utils/defineActors.js +13 -0
  289. package/dist/utils/index.d.ts +1 -0
  290. package/dist/utils/index.js +5 -4
  291. package/dist/utils/readableText.d.ts +11 -0
  292. package/dist/utils/readableText.js +18 -0
  293. package/package.json +30 -43
  294. package/panda.buildinfo.json +271 -295
  295. package/styles-min.css +1 -1
  296. package/styles-xyflow.css +1 -1
  297. package/styles.css +1 -1
  298. package/adhoc-editor/package.json +0 -4
  299. package/dist/adhoc-editor/EditorPanel.d.ts +0 -1
  300. package/dist/adhoc-editor/EditorPanel.js +0 -106
  301. package/dist/adhoc-editor/ElementsTree.d.ts +0 -2
  302. package/dist/adhoc-editor/ElementsTree.js +0 -112
  303. package/dist/adhoc-editor/LikeC4AdHocViewEditor.d.ts +0 -4
  304. package/dist/adhoc-editor/LikeC4AdHocViewEditor.js +0 -83
  305. package/dist/adhoc-editor/components/Tree.d.ts +0 -48
  306. package/dist/adhoc-editor/components/Tree.js +0 -213
  307. package/dist/adhoc-editor/hooks.d.ts +0 -14
  308. package/dist/adhoc-editor/hooks.js +0 -34
  309. package/dist/adhoc-editor/index.d.ts +0 -2
  310. package/dist/adhoc-editor/index.js +0 -2
  311. package/dist/adhoc-editor/state/ActorProvider.d.ts +0 -5
  312. package/dist/adhoc-editor/state/ActorProvider.js +0 -37
  313. package/dist/adhoc-editor/state/actor.d.ts +0 -13
  314. package/dist/adhoc-editor/state/actor.editor.d.ts +0 -56
  315. package/dist/adhoc-editor/state/actor.editor.js +0 -167
  316. package/dist/adhoc-editor/state/actor.js +0 -14
  317. package/dist/adhoc-editor/state/actor.layouter.d.ts +0 -51
  318. package/dist/adhoc-editor/state/actor.layouter.js +0 -54
  319. package/dist/adhoc-editor/state/actor.types.d.ts +0 -63
  320. package/dist/adhoc-editor/state/actor.types.js +0 -25
  321. package/dist/adhoc-editor/state/panel.d.ts +0 -95
  322. package/dist/adhoc-editor/state/panel.js +0 -124
  323. package/dist/adhoc-editor/state/utils.d.ts +0 -17
  324. package/dist/adhoc-editor/state/utils.js +0 -25
  325. package/dist/adhoc-editor/useElementsTree.d.ts +0 -18
  326. package/dist/adhoc-editor/useElementsTree.js +0 -98
  327. package/dist/adhoc-editor/viewrules/ViewRulesPanel.d.ts +0 -6
  328. package/dist/shadowroot/styles.css.d.ts +0 -12
  329. package/dist/shadowroot/styles.css.js +0 -59
@@ -1,11 +1,11 @@
1
1
  import "../../_virtual/_rolldown/runtime.js";
2
2
  import { machine } from "./setup.js";
3
3
  import { typedSystem } from "../../likec4diagram/state/utils.js";
4
+ import { cancelSync, clearQueue, deleteNodesAndEdges, makeSnapshot, pushToSyncQueue, redo, scheduleSync, undo } from "./actions.js";
4
5
  import { isViewChange } from "./types.js";
5
- import { makeSnapshot, pushToSyncQueue, reschedule, scheduleSync, undo } from "./actions.js";
6
- import { isNot } from "remeda";
6
+ import { findLast } from "remeda";
7
7
  import { invariant } from "@likec4/core";
8
- import { assign, enqueueActions, sendTo } from "xstate";
8
+ import { assign, enqueueActions, log, sendTo } from "xstate";
9
9
  //#region src/editor/actor/state.sync-queue.ts
10
10
  var to = {
11
11
  idle: { target: "#queue-idle" },
@@ -24,6 +24,7 @@ var idle = machine.createStateConfig({
24
24
  ...to.pending
25
25
  },
26
26
  on: {
27
+ "delete.nodes-edges": { actions: deleteNodesAndEdges() },
27
28
  "change.sync-snapshot": {
28
29
  actions: pushToSyncQueue(),
29
30
  ...to.pending
@@ -32,11 +33,13 @@ var idle = machine.createStateConfig({
32
33
  actions: pushToSyncQueue(),
33
34
  ...to.process
34
35
  },
35
- "undo": {
36
- actions: undo(),
37
- reenter: true,
36
+ "undo": { actions: undo() },
37
+ "redo": { actions: redo() },
38
+ "cancel": {
39
+ actions: cancelSync(),
38
40
  ...to.idle
39
- }
41
+ },
42
+ "view.synched": { actions: log("in idle got view.synched") }
40
43
  }
41
44
  });
42
45
  /**
@@ -54,21 +57,32 @@ var pending = machine.createStateConfig({
54
57
  actions: pushToSyncQueue(),
55
58
  ...to.process
56
59
  },
60
+ "delete.nodes-edges": {
61
+ actions: deleteNodesAndEdges(),
62
+ reenter: true,
63
+ ...to.pending
64
+ },
57
65
  "edit.move.start": { ...to.suspended },
58
66
  "undo": {
67
+ reenter: true,
59
68
  actions: undo(),
69
+ ...to.pending
70
+ },
71
+ "redo": {
72
+ reenter: true,
73
+ actions: redo(),
74
+ ...to.pending
75
+ },
76
+ "cancel": {
77
+ actions: clearQueue(),
60
78
  ...to.idle
61
79
  },
62
- "view.synched": {
63
- guard: "has pending",
64
- actions: () => {},
65
- ...to.process
66
- }
80
+ "view.synched": { actions: log("in pending got view.synched") }
67
81
  },
68
82
  after: { "wait-after-edit": [{
69
83
  guard: "has pending",
70
84
  ...to.process
71
- }, { ...to.idle }] }
85
+ }, to.idle] }
72
86
  });
73
87
  /**
74
88
  * When editing starts, we suspend the queue
@@ -76,17 +90,14 @@ var pending = machine.createStateConfig({
76
90
  var suspended = machine.createStateConfig({
77
91
  ...idOf(to.suspended),
78
92
  on: {
79
- "undo": {
80
- actions: undo(),
93
+ "edit.*": to.idle,
94
+ "cancel": {
95
+ actions: [clearQueue(), cancelSync()],
81
96
  ...to.idle
82
- },
83
- "edit.*": { ...to.pending },
84
- "change.*": { actions: reschedule() },
85
- "cancel": { ...to.idle }
97
+ }
86
98
  }
87
99
  });
88
- var peekFromQueue = () => machine.assign(({ system, context: { syncQueue, processing } }) => {
89
- if (processing) return {};
100
+ var peekFromQueue = () => machine.assign(({ system, context: { syncQueue } }) => {
90
101
  let [head, ...tail] = syncQueue;
91
102
  if (head === "sync-snapshot") head = makeSnapshot(system).change;
92
103
  return {
@@ -100,16 +111,12 @@ var clearProcessing = () => ({ processing: null });
100
111
  */
101
112
  var process = machine.createStateConfig({
102
113
  ...idOf(to.process),
103
- initial: "enter",
114
+ initial: "peekFromQueue",
104
115
  tags: ["busy"],
105
116
  states: {
106
- enter: {
117
+ peekFromQueue: {
107
118
  entry: peekFromQueue(),
108
119
  always: [
109
- {
110
- guard: ({ context: { processing } }) => !processing,
111
- ...to.idle
112
- },
113
120
  {
114
121
  guard: ({ context: { processing } }) => processing === "apply-latest-to-manual",
115
122
  target: "applyLatestToManual"
@@ -118,7 +125,19 @@ var process = machine.createStateConfig({
118
125
  guard: ({ context: { processing } }) => processing === "apply-semantic-layout",
119
126
  target: "applySemanticLayout"
120
127
  },
121
- { target: "executeChanges" }
128
+ {
129
+ guard: ({ context: { processing } }) => isViewChange(processing),
130
+ target: "executeChanges"
131
+ },
132
+ {
133
+ guard: "has pending",
134
+ reenter: true,
135
+ ...to.process
136
+ },
137
+ {
138
+ actions: clearQueue(),
139
+ ...to.idle
140
+ }
122
141
  ]
123
142
  },
124
143
  /**
@@ -126,13 +145,15 @@ var process = machine.createStateConfig({
126
145
  */
127
146
  applyLatestToManual: machine.createStateConfig({
128
147
  initial: "call",
148
+ entry: assign(({ system }) => ({ processing: makeSnapshot(system).change })),
129
149
  states: {
130
150
  call: { invoke: {
131
151
  src: "applyLatest",
132
152
  input: ({ context }) => {
133
- const current = context.history?.head.change.layout;
153
+ const current = context.processing;
154
+ invariant(isViewChange(current) && current.op === "save-view-snapshot");
134
155
  return {
135
- current: current?._layout === "manual" ? current : void 0,
156
+ current: current.layout,
136
157
  viewId: context.viewId
137
158
  };
138
159
  },
@@ -140,20 +161,28 @@ var process = machine.createStateConfig({
140
161
  actions: sendTo(typedSystem.diagramActor, ({ event }) => ({
141
162
  type: "update.view",
142
163
  view: event.output.updated
143
- }), { delay: 10 }),
164
+ }), { delay: 20 }),
144
165
  target: "wait"
145
166
  },
146
167
  onError: {
147
- actions: [({ event }) => {
148
- console.error(event.error);
149
- }],
168
+ actions: assign(({ event }) => {
169
+ console.error("applyLatestToManual onError", { error: event.error });
170
+ return {
171
+ processing: null,
172
+ syncQueue: []
173
+ };
174
+ }),
150
175
  ...to.idle
151
176
  }
152
177
  } },
153
178
  wait: {
154
- entry: assign(clearProcessing),
179
+ on: { "*": { actions: log(({ event }) => `wait: ignoring event ${event.type}`) } },
155
180
  after: { "500ms": {
156
- actions: scheduleSync(),
181
+ actions: [
182
+ clearQueue(),
183
+ assign({ redo: null }),
184
+ scheduleSync()
185
+ ],
157
186
  ...to.idle
158
187
  } }
159
188
  }
@@ -169,10 +198,10 @@ var process = machine.createStateConfig({
169
198
  input: ({ context }) => ({ viewId: context.viewId }),
170
199
  onDone: { target: "decideNext" },
171
200
  onError: {
172
- actions: [({ event }) => {
173
- console.error(event.error);
174
- }],
175
- target: "decideNext"
201
+ actions: ({ event }) => {
202
+ console.error("applySemanticLayout onError", { error: event.error });
203
+ },
204
+ target: "failure"
176
205
  }
177
206
  }
178
207
  }),
@@ -190,36 +219,44 @@ var process = machine.createStateConfig({
190
219
  },
191
220
  onDone: {
192
221
  actions: enqueueActions(({ context, event, enqueue }) => {
222
+ const requested = event.output.requested;
193
223
  enqueue.assign({
194
224
  processing: null,
195
- syncQueue: context.syncQueue.filter(isNot(isViewChange))
225
+ syncQueue: context.syncQueue.filter((change) => !isViewChange(change) || !requested.includes(change))
226
+ });
227
+ const lastSyncSnapshot = findLast(event.output.applied, (c) => c.op === "save-view-snapshot");
228
+ if (lastSyncSnapshot) enqueue.sendTo(typedSystem.diagramActor, {
229
+ type: "update.view-bounds",
230
+ bounds: lastSyncSnapshot.layout.bounds
196
231
  });
197
232
  }),
198
- target: "decideNext"
233
+ target: "waitViewSynced"
199
234
  },
200
235
  onError: {
201
- actions: assign(({ event }) => {
236
+ actions: ({ event }) => {
202
237
  console.error("executeChanges onError", { error: event.error });
203
- return {
204
- processing: null,
205
- syncQueue: []
206
- };
207
- }),
208
- ...to.idle
238
+ },
239
+ target: "failure"
209
240
  }
210
241
  } }),
242
+ waitViewSynced: {
243
+ on: { "view.synched": { target: "decideNext" } },
244
+ after: { 2e3: "decideNext" }
245
+ },
211
246
  decideNext: {
212
247
  entry: assign(clearProcessing),
213
248
  always: [{
214
249
  guard: "has pending",
215
- target: "enter"
216
- }, { ...to.idle }]
217
- }
250
+ reenter: true,
251
+ ...to.process
252
+ }, to.idle]
253
+ },
254
+ failure: { always: {
255
+ actions: clearQueue(),
256
+ ...to.idle
257
+ } }
218
258
  },
219
- on: {
220
- "change.*": { actions: reschedule() },
221
- "view.synched": { actions: () => {} }
222
- }
259
+ on: {}
223
260
  });
224
261
  var syncQueue = machine.createStateConfig({
225
262
  initial: "idle",
@@ -10,6 +10,10 @@ export type EditorActorEvent = {
10
10
  type: 'change.latest-to-manual';
11
11
  } | {
12
12
  type: 'change.sync-snapshot';
13
+ } | {
14
+ type: 'delete.nodes-edges';
15
+ nodeIds: t.NodeId[];
16
+ edgeIds: t.EdgeId[];
13
17
  } | {
14
18
  type: 'view.synched';
15
19
  } | {
@@ -36,10 +40,11 @@ export interface EditorActorInput {
36
40
  viewId: t.ViewId;
37
41
  }
38
42
  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;
43
+ export declare const isViewChange: (change: SyncOp | null) => change is t.ViewChange;
40
44
  export interface EditorActorContext {
41
45
  viewId: t.ViewId;
42
46
  history: LinkedSnapshot | null;
47
+ redo: LinkedSnapshot | null;
43
48
  editing: null | {
44
49
  /**
45
50
  * The subject of the edit
@@ -1,5 +1,5 @@
1
1
  import "../../_virtual/_rolldown/runtime.js";
2
2
  //#region src/editor/actor/types.ts
3
- var isViewChange = (change) => typeof change !== "string";
3
+ var isViewChange = (change) => change !== null && typeof change !== "string";
4
4
  //#endregion
5
5
  export { isViewChange };
@@ -25,8 +25,20 @@ function useEditorActorLogic() {
25
25
  console.error("No editor port available for executing change");
26
26
  throw new Error("No editor port");
27
27
  }
28
- for (const change of input.changes) await promisify(() => port.handleChange(input.viewId, change));
29
- return {};
28
+ const applied = [];
29
+ for (const change of input.changes) try {
30
+ await promisify(() => port.handleChange(input.viewId, change));
31
+ applied.push(change);
32
+ } catch (error) {
33
+ console.error("Failed to execute change", {
34
+ change,
35
+ error
36
+ });
37
+ }
38
+ return {
39
+ requested: input.changes,
40
+ applied
41
+ };
30
42
  });
31
43
  const applySemanticLayout = useCallbackRef(async ({ input }) => {
32
44
  if (!port) {
@@ -11,4 +11,4 @@ export { useCurrentViewModel } from './useCurrentViewModel';
11
11
  export { useLikeC4Model, useLikeC4Specification, useLikeC4ViewModel, useOptionalLikeC4Model, } from './useLikeC4Model';
12
12
  export { useChangeLikeC4Project, useHasProjects, useLikeC4Project, useLikeC4ProjectId, useLikeC4Projects, useLikeC4ProjectsContext, } from './useLikeC4Project';
13
13
  export { useLikeC4Styles } from './useLikeC4Styles';
14
- export * from './useDiagram';
14
+ export { selectDiagramContext, selectDiagramSnapshot, useDiagram, useDiagramSelector, useOnDiagramEvent, } from './useDiagram';
@@ -1,7 +1,160 @@
1
1
  import { Provider } from 'react';
2
+ import { AnyActorRef, SnapshotFrom, MachineSnapshot, ActorRefFromLogic } from 'xstate';
2
3
  import { DiagramApi } from '../likec4diagram/state/diagram-api';
3
- import { DiagramActorRef } from '../likec4diagram/state/types';
4
- export declare const DiagramActorContextProvider: Provider<DiagramActorRef>;
4
+ import { DiagramActorRef, DiagramContext } from '../likec4diagram/state/types';
5
+ import { DiagramEvents } from '../custom';
6
+ import { OverlaysActorRef, OverlaysActorLogic } from '../overlays/overlaysActor';
7
+ import { SearchActorRef, SearchActorLogic } from '../search/searchActor';
8
+ import { BaseEditorActorRef } from '../editor/actor/setup';
9
+ import { NavigationPanelActorRef, NavigationPanelActorLogic } from '../navigationpanel/actor';
10
+ import { HotkeyActorLogic } from '../likec4diagram/state/hotkeyActor';
11
+ import { MediaPrintActorLogic } from '../likec4diagram/state/mediaPrintActor';
12
+ import { EditorActorLogic } from '../editor';
5
13
  export declare const DiagramApiContextProvider: Provider<DiagramApi>;
6
- export declare function useDiagramActorRef(): DiagramActorRef;
7
14
  export declare function useDiagram(): DiagramApi;
15
+ /**
16
+ * Tuple type for selector and compare function pair
17
+ */
18
+ type SelectAndCompare<A, B> = [
19
+ selector: (snapshot: A) => B,
20
+ compare: (a: B, b: B) => boolean
21
+ ];
22
+ type SafeContextForActor<A extends AnyActorRef, Snapshot, Context> = {
23
+ /**
24
+ * The React context provider for this actor
25
+ */
26
+ ContextProvider: Provider<A>;
27
+ /**
28
+ * Hook to get the actor ref from context
29
+ */
30
+ useActorRef: () => A;
31
+ /**
32
+ * @param select - Function to extract a value from the actor's snapshot
33
+ * @param compare - Optional comparison function. If not provided, shallow equality is used.
34
+ * The comparison function receives the selected value from the previous snapshot ()
35
+ * and the selected value from the current snapshot. If the comparison returns true,
36
+ * the component will not re-render.
37
+ */
38
+ selectSnapshot<T>(select: (state: Snapshot) => T, compare?: (old: NoInfer<T>, next: NoInfer<T>) => boolean): SelectAndCompare<Snapshot, T>;
39
+ /**
40
+ * @param select - Function to extract a value from the actor's context
41
+ * @param compare - Optional comparison function. If not provided, shallow equality is used.
42
+ */
43
+ selectContext<T>(select: (state: Context) => T, compare?: (old: NoInfer<T>, next: NoInfer<T>) => boolean): SelectAndCompare<Snapshot, T>;
44
+ useActorSelector<T>(select: (state: Snapshot) => T): T;
45
+ useActorSelector<T>(selectorCompare: SelectAndCompare<Snapshot, T>): T;
46
+ useActorSelector<T>(...selectorCompare: SelectAndCompare<Snapshot, T>): T;
47
+ };
48
+ /**
49
+ * Helper to create a safe context for an actor
50
+ * @example
51
+ * ```tsx
52
+ * const {
53
+ * ContextProvider: MyActorContext,
54
+ * useActorRef,
55
+ * selectSnapshot,
56
+ * useActorSelector
57
+ * } = createSafeContextForActor<MyActorRef>()
58
+ *
59
+ * const select = selectSnapshot(
60
+ * s => ....,
61
+ * (a, b) => a === b
62
+ * )
63
+ *
64
+ * // Later in component:
65
+ * const value = useActorSelector(select)
66
+ * ```
67
+ */
68
+ export declare function createSafeContextForActor<A extends AnyActorRef, Snapshot = SnapshotFrom<A>, Context = Snapshot extends {
69
+ context: infer C;
70
+ } ? C : never>(name: string): SafeContextForActor<A, Snapshot, Context>;
71
+ export declare const DiagramActorContextProvider: Provider<DiagramActorRef>, selectDiagramSnapshot: <T>(select: (state: MachineSnapshot<DiagramContext, DiagramEvents, {
72
+ overlays: OverlaysActorRef | undefined;
73
+ search: SearchActorRef | undefined;
74
+ editor: BaseEditorActorRef | undefined;
75
+ navigationPanel: NavigationPanelActorRef | undefined;
76
+ } & Omit<{
77
+ hotkey: ActorRefFromLogic<HotkeyActorLogic> | undefined;
78
+ overlays: ActorRefFromLogic<OverlaysActorLogic> | undefined;
79
+ search: ActorRefFromLogic<SearchActorLogic> | undefined;
80
+ mediaPrint: ActorRefFromLogic<MediaPrintActorLogic> | undefined;
81
+ editor: ActorRefFromLogic<EditorActorLogic> | undefined;
82
+ navigationPanel: ActorRefFromLogic<NavigationPanelActorLogic> | undefined;
83
+ }, "search" | "overlays" | "editor" | "navigationPanel">, "final" | "isReady" | "navigating" | "ready" | "initializing" | {
84
+ ready?: NonNullable<"idle" | "walkthrough" | "focused" | "printing">;
85
+ }, never, never, never, never>) => T, compare?: ((old: NoInfer<T>, next: NoInfer<T>) => boolean) | undefined) => SelectAndCompare< MachineSnapshot<DiagramContext, DiagramEvents, {
86
+ overlays: OverlaysActorRef | undefined;
87
+ search: SearchActorRef | undefined;
88
+ editor: BaseEditorActorRef | undefined;
89
+ navigationPanel: NavigationPanelActorRef | undefined;
90
+ } & Omit<{
91
+ hotkey: ActorRefFromLogic<HotkeyActorLogic> | undefined;
92
+ overlays: ActorRefFromLogic<OverlaysActorLogic> | undefined;
93
+ search: ActorRefFromLogic<SearchActorLogic> | undefined;
94
+ mediaPrint: ActorRefFromLogic<MediaPrintActorLogic> | undefined;
95
+ editor: ActorRefFromLogic<EditorActorLogic> | undefined;
96
+ navigationPanel: ActorRefFromLogic<NavigationPanelActorLogic> | undefined;
97
+ }, "search" | "overlays" | "editor" | "navigationPanel">, "final" | "isReady" | "navigating" | "ready" | "initializing" | {
98
+ ready?: NonNullable<"idle" | "walkthrough" | "focused" | "printing">;
99
+ }, never, never, never, never>, T>, selectDiagramContext: <T>(select: (state: DiagramContext) => T, compare?: ((old: NoInfer<T>, next: NoInfer<T>) => boolean) | undefined) => SelectAndCompare< MachineSnapshot<DiagramContext, DiagramEvents, {
100
+ overlays: OverlaysActorRef | undefined;
101
+ search: SearchActorRef | undefined;
102
+ editor: BaseEditorActorRef | undefined;
103
+ navigationPanel: NavigationPanelActorRef | undefined;
104
+ } & Omit<{
105
+ hotkey: ActorRefFromLogic<HotkeyActorLogic> | undefined;
106
+ overlays: ActorRefFromLogic<OverlaysActorLogic> | undefined;
107
+ search: ActorRefFromLogic<SearchActorLogic> | undefined;
108
+ mediaPrint: ActorRefFromLogic<MediaPrintActorLogic> | undefined;
109
+ editor: ActorRefFromLogic<EditorActorLogic> | undefined;
110
+ navigationPanel: ActorRefFromLogic<NavigationPanelActorLogic> | undefined;
111
+ }, "search" | "overlays" | "editor" | "navigationPanel">, "final" | "isReady" | "navigating" | "ready" | "initializing" | {
112
+ ready?: NonNullable<"idle" | "walkthrough" | "focused" | "printing">;
113
+ }, never, never, never, never>, T>, useDiagramSelector: {
114
+ <T>(select: (state: MachineSnapshot<DiagramContext, DiagramEvents, {
115
+ overlays: OverlaysActorRef | undefined;
116
+ search: SearchActorRef | undefined;
117
+ editor: BaseEditorActorRef | undefined;
118
+ navigationPanel: NavigationPanelActorRef | undefined;
119
+ } & Omit<{
120
+ hotkey: ActorRefFromLogic<HotkeyActorLogic> | undefined;
121
+ overlays: ActorRefFromLogic<OverlaysActorLogic> | undefined;
122
+ search: ActorRefFromLogic<SearchActorLogic> | undefined;
123
+ mediaPrint: ActorRefFromLogic<MediaPrintActorLogic> | undefined;
124
+ editor: ActorRefFromLogic<EditorActorLogic> | undefined;
125
+ navigationPanel: ActorRefFromLogic<NavigationPanelActorLogic> | undefined;
126
+ }, "search" | "overlays" | "editor" | "navigationPanel">, "final" | "isReady" | "navigating" | "ready" | "initializing" | {
127
+ ready?: NonNullable<"idle" | "walkthrough" | "focused" | "printing">;
128
+ }, never, never, never, never>) => T): T;
129
+ <T>(selectorCompare: SelectAndCompare< MachineSnapshot<DiagramContext, DiagramEvents, {
130
+ overlays: OverlaysActorRef | undefined;
131
+ search: SearchActorRef | undefined;
132
+ editor: BaseEditorActorRef | undefined;
133
+ navigationPanel: NavigationPanelActorRef | undefined;
134
+ } & Omit<{
135
+ hotkey: ActorRefFromLogic<HotkeyActorLogic> | undefined;
136
+ overlays: ActorRefFromLogic<OverlaysActorLogic> | undefined;
137
+ search: ActorRefFromLogic<SearchActorLogic> | undefined;
138
+ mediaPrint: ActorRefFromLogic<MediaPrintActorLogic> | undefined;
139
+ editor: ActorRefFromLogic<EditorActorLogic> | undefined;
140
+ navigationPanel: ActorRefFromLogic<NavigationPanelActorLogic> | undefined;
141
+ }, "search" | "overlays" | "editor" | "navigationPanel">, "final" | "isReady" | "navigating" | "ready" | "initializing" | {
142
+ ready?: NonNullable<"idle" | "walkthrough" | "focused" | "printing">;
143
+ }, never, never, never, never>, T>): T;
144
+ <T>(selector: (snapshot: MachineSnapshot<DiagramContext, DiagramEvents, {
145
+ overlays: OverlaysActorRef | undefined;
146
+ search: SearchActorRef | undefined;
147
+ editor: BaseEditorActorRef | undefined;
148
+ navigationPanel: NavigationPanelActorRef | undefined;
149
+ } & Omit<{
150
+ hotkey: ActorRefFromLogic<HotkeyActorLogic> | undefined;
151
+ overlays: ActorRefFromLogic<OverlaysActorLogic> | undefined;
152
+ search: ActorRefFromLogic<SearchActorLogic> | undefined;
153
+ mediaPrint: ActorRefFromLogic<MediaPrintActorLogic> | undefined;
154
+ editor: ActorRefFromLogic<EditorActorLogic> | undefined;
155
+ navigationPanel: ActorRefFromLogic<NavigationPanelActorLogic> | undefined;
156
+ }, "search" | "overlays" | "editor" | "navigationPanel">, "final" | "isReady" | "navigating" | "ready" | "initializing" | {
157
+ ready?: NonNullable<"idle" | "walkthrough" | "focused" | "printing">;
158
+ }, never, never, never, never>) => T, compare: (a: T, b: T) => boolean): T;
159
+ }, useDiagramActorRef: () => DiagramActorRef;
160
+ export {};
@@ -1,24 +1,72 @@
1
1
  import "../_virtual/_rolldown/runtime.js";
2
2
  import { createContext, useContext } from "react";
3
+ import { shallowEqual } from "fast-equals";
4
+ import { isFunction } from "remeda";
5
+ import { useSelector } from "@xstate/react";
6
+ import { invariant } from "motion";
3
7
  //#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);
8
- DiagramActorSafeContext.displayName = "DiagramActorSafeContext";
9
8
  var DiagramApiSafeContext = createContext(null);
10
9
  DiagramApiSafeContext.displayName = "DiagramApiSafeContext";
11
- var DiagramActorContextProvider = DiagramActorSafeContext.Provider;
12
10
  var DiagramApiContextProvider = DiagramApiSafeContext.Provider;
13
- function useDiagramActorRef() {
14
- const ctx = useContext(DiagramActorSafeContext);
15
- if (ctx === null) throw new Error("DiagramActorRef is not provided");
16
- return ctx;
17
- }
18
11
  function useDiagram() {
19
12
  const ctx = useContext(DiagramApiSafeContext);
20
13
  if (ctx === null) throw new Error("DiagramApi is not provided");
21
14
  return ctx;
22
15
  }
16
+ /**
17
+ * Helper to create a safe context for an actor
18
+ * @example
19
+ * ```tsx
20
+ * const {
21
+ * ContextProvider: MyActorContext,
22
+ * useActorRef,
23
+ * selectSnapshot,
24
+ * useActorSelector
25
+ * } = createSafeContextForActor<MyActorRef>()
26
+ *
27
+ * const select = selectSnapshot(
28
+ * s => ....,
29
+ * (a, b) => a === b
30
+ * )
31
+ *
32
+ * // Later in component:
33
+ * const value = useActorSelector(select)
34
+ * ```
35
+ */
36
+ function createSafeContextForActor(name) {
37
+ const Ctx = createContext(null);
38
+ function selectSnapshot(selector, compare) {
39
+ return [selector, compare ?? shallowEqual];
40
+ }
41
+ function selectContext(selector, compare) {
42
+ return [(snapshot) => selector(snapshot.context), compare ?? shallowEqual];
43
+ }
44
+ function useActorRef() {
45
+ const actorRef = useContext(Ctx);
46
+ if (actorRef === null) throw new Error(`${name}SafeContext is not provided `);
47
+ return actorRef;
48
+ }
49
+ function useActorSelector(arg1, arg2) {
50
+ let selector;
51
+ let compare;
52
+ if (arg2 !== void 0) [selector, compare] = [arg1, arg2];
53
+ else if (Array.isArray(arg1)) [selector, compare] = arg1;
54
+ else {
55
+ selector = arg1;
56
+ compare = shallowEqual;
57
+ }
58
+ compare ??= shallowEqual;
59
+ invariant(isFunction(selector), "selector must be a function");
60
+ return useSelector(useActorRef(), selector, compare);
61
+ }
62
+ return {
63
+ ContextProvider: Ctx.Provider,
64
+ selectSnapshot,
65
+ selectContext,
66
+ useActorSelector,
67
+ useActorRef
68
+ };
69
+ }
70
+ var { ContextProvider: DiagramActorContextProvider, selectSnapshot: selectDiagramSnapshot, selectContext: selectDiagramContext, useActorSelector: useDiagramSelector, useActorRef: useDiagramActorRef } = createSafeContextForActor("DiagramActor");
23
71
  //#endregion
24
- export { DiagramActorContextProvider, DiagramApiContextProvider, useDiagram, useDiagramActorRef };
72
+ export { DiagramActorContextProvider, DiagramApiContextProvider, createSafeContextForActor, selectDiagramContext, selectDiagramSnapshot, useDiagram, useDiagramActorRef, useDiagramSelector };
@@ -13,4 +13,4 @@ function useCurrentViewModel() {
13
13
  return vm;
14
14
  }
15
15
  //#endregion
16
- export { useCurrentViewModel };
16
+ export { useCurrentViewModel, useOptionalCurrentViewModel };
@@ -6,15 +6,22 @@ export { useDiagram, useDiagramActorRef };
6
6
  export type { DiagramApi, DiagramContext };
7
7
  /**
8
8
  * Helper to create a selector for diagram actor snapshot
9
+ * @deprecated use {@link selectDiagramSnapshot}
9
10
  */
10
11
  export declare function selectDiagramActor<T = unknown>(selector: (state: DiagramActorSnapshot) => T): (state: DiagramActorSnapshot) => T;
12
+ /**
13
+ * Read diagram actor snapshot
14
+ * @deprecated use {@link useDiagramSelector}
15
+ */
11
16
  export declare function useDiagramSnapshot<T = unknown>(selector: (state: DiagramActorSnapshot) => T, compare?: (a: NoInfer<T>, b: NoInfer<T>) => boolean): T;
12
17
  /**
13
18
  * Helper to create a selector for diagram actor snapshot
19
+ * @deprecated use {@link selectDiagramContext}
14
20
  */
15
21
  export declare function selectDiagramActorContext<T = unknown>(selector: (state: DiagramContext) => T): (state: DiagramActorSnapshot) => T;
16
22
  /**
17
23
  * Read diagram context
24
+ * @deprecated use {@link useDiagramSelector}
18
25
  */
19
26
  export declare function useDiagramContext<T = unknown>(selector: (context: DiagramContext) => T, compare?: (a: NoInfer<T>, b: NoInfer<T>) => boolean, deps?: DependencyList): T;
20
27
  type PickEmittedEvent<T> = T extends DiagramEmittedEvents['type'] ? DiagramEmittedEvents & {
@@ -32,3 +39,4 @@ type PickEmittedEvent<T> = T extends DiagramEmittedEvents['type'] ? DiagramEmitt
32
39
  export declare function useOnDiagramEvent<T extends DiagramEmittedEvents['type'] | '*'>(event: T, callback: (event: PickEmittedEvent<T>) => void, options?: {
33
40
  once?: boolean;
34
41
  }): void;
42
+ export { selectDiagramContext, selectDiagramSnapshot, useDiagramSelector, } from './safeContext';
@@ -1,27 +1,34 @@
1
1
  import "../_virtual/_rolldown/runtime.js";
2
2
  import { useCallbackRef } from "./useCallbackRef.js";
3
- import { useDiagramActorRef } from "./safeContext.js";
3
+ import { selectDiagramContext, selectDiagramSnapshot, useDiagram, useDiagramActorRef, useDiagramSelector } from "./safeContext.js";
4
4
  import { useCallback, useEffect, useRef } from "react";
5
5
  import { shallowEqual } from "fast-equals";
6
6
  import { useSelector } from "@xstate/react";
7
7
  //#region src/hooks/useDiagram.ts
8
8
  /**
9
9
  * Helper to create a selector for diagram actor snapshot
10
+ * @deprecated use {@link selectDiagramSnapshot}
10
11
  */
11
12
  function selectDiagramActor(selector) {
12
13
  return selector;
13
14
  }
15
+ /**
16
+ * Read diagram actor snapshot
17
+ * @deprecated use {@link useDiagramSelector}
18
+ */
14
19
  function useDiagramSnapshot(selector, compare = shallowEqual) {
15
20
  return useSelector(useDiagramActorRef(), selector, compare);
16
21
  }
17
22
  /**
18
23
  * Helper to create a selector for diagram actor snapshot
24
+ * @deprecated use {@link selectDiagramContext}
19
25
  */
20
26
  function selectDiagramActorContext(selector) {
21
27
  return (state) => selector(state.context);
22
28
  }
23
29
  /**
24
30
  * Read diagram context
31
+ * @deprecated use {@link useDiagramSelector}
25
32
  */
26
33
  function useDiagramContext(selector, compare = shallowEqual, deps = []) {
27
34
  const actorRef = useDiagramActorRef();
@@ -67,4 +74,4 @@ function useOnDiagramEvent(event, callback, options) {
67
74
  ]);
68
75
  }
69
76
  //#endregion
70
- export { selectDiagramActor, selectDiagramActorContext, useDiagramContext, useDiagramSnapshot, useOnDiagramEvent };
77
+ export { selectDiagramActor, selectDiagramActorContext, selectDiagramContext, selectDiagramSnapshot, useDiagram, useDiagramActorRef, useDiagramContext, useDiagramSelector, useDiagramSnapshot, useOnDiagramEvent };
@@ -2,3 +2,8 @@ import { EditorActorRef } from '../editor/actor/machine';
2
2
  import { EditorActorStateTag } from '../editor/actor/types';
3
3
  export declare function useEditorActorRef(): EditorActorRef | null;
4
4
  export declare function useEditorActorStateHasTag(tag: EditorActorStateTag): boolean;
5
+ /**
6
+ * Check if the editor actor is in the 'busy' state
7
+ * (i.e. syncing with the backend)
8
+ */
9
+ export declare function useEditorIsBusy(): boolean;