@likec4/diagram 1.43.0 → 1.45.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 (349) hide show
  1. package/bundle/index.js +14727 -13166
  2. package/dist/LikeC4Diagram.d.ts +1 -1
  3. package/dist/LikeC4Diagram.js +14 -9
  4. package/dist/LikeC4Diagram.props.d.ts +25 -15
  5. package/dist/LikeC4ProjectsProvider.js +1 -1
  6. package/dist/LikeC4Styles.js +0 -3
  7. package/dist/LikeC4View.d.ts +8 -3
  8. package/dist/LikeC4View.js +29 -14
  9. package/dist/ReactLikeC4.d.ts +2 -2
  10. package/dist/ReactLikeC4.js +2 -2
  11. package/dist/StaticLikeC4Diagram.js +1 -1
  12. package/dist/_virtual/_commonjsHelpers.js +3 -0
  13. package/dist/_virtual/assign-dea9f7c8.cjs.js +3 -0
  14. package/dist/_virtual/log-ec8d4df4.cjs.js +3 -0
  15. package/dist/_virtual/raise-da5b247f.cjs.js +3 -0
  16. package/dist/_virtual/xstate-actions.cjs.js +5 -0
  17. package/dist/_virtual/xstate-actions.cjs2.js +3 -0
  18. package/dist/_virtual/xstate-dev.cjs.js +3 -0
  19. package/dist/_virtual/xstate-guards.cjs.js +5 -0
  20. package/dist/_virtual/xstate-guards.cjs2.js +3 -0
  21. package/dist/base/Background.d.ts +2 -1
  22. package/dist/base/Background.js +11 -2
  23. package/dist/base/Base.d.ts +28 -0
  24. package/dist/base/BaseXYFlow.d.ts +5 -5
  25. package/dist/base/BaseXYFlow.js +38 -44
  26. package/dist/base/index.d.ts +6 -2
  27. package/dist/base/types.d.ts +1 -28
  28. package/dist/base/updateEdges.js +25 -14
  29. package/dist/base/updateNodes.d.ts +14 -0
  30. package/dist/base/updateNodes.js +51 -17
  31. package/dist/base-primitives/Markdown.d.ts +30 -4
  32. package/dist/base-primitives/Markdown.js +3 -2
  33. package/dist/base-primitives/compound/CompoundActionButton.d.ts +3 -2
  34. package/dist/base-primitives/compound/CompoundActionButton.js +1 -1
  35. package/dist/base-primitives/compound/CompoundDetailsButton.d.ts +3 -2
  36. package/dist/base-primitives/compound/CompoundDetailsButton.js +1 -1
  37. package/dist/base-primitives/edge/EdgeActionButton.d.ts +3 -2
  38. package/dist/base-primitives/edge/EdgeActionButton.js +1 -1
  39. package/dist/base-primitives/edge/EdgeContainer.d.ts +1 -1
  40. package/dist/base-primitives/edge/EdgeContainer.js +8 -1
  41. package/dist/base-primitives/edge/EdgeLabel.d.ts +3 -2
  42. package/dist/base-primitives/edge/EdgeLabel.js +2 -0
  43. package/dist/base-primitives/edge/EdgeLabelContainer.d.ts +1 -1
  44. package/dist/base-primitives/edge/EdgeLabelContainer.js +4 -0
  45. package/dist/base-primitives/edge/EdgePath.d.ts +4 -0
  46. package/dist/base-primitives/edge/EdgePath.js +29 -5
  47. package/dist/base-primitives/element/ElementActionButtons.d.ts +6 -4
  48. package/dist/base-primitives/element/ElementActionButtons.js +3 -3
  49. package/dist/base-primitives/element/ElementData.d.ts +3 -3
  50. package/dist/base-primitives/element/ElementData.js +13 -7
  51. package/dist/base-primitives/element/ElementDetailsButton.d.ts +3 -2
  52. package/dist/base-primitives/element/ElementDetailsButton.js +5 -5
  53. package/dist/base-primitives/element/ElementNodeContainer.css.js +15 -27
  54. package/dist/base-primitives/element/ElementShape.js +5 -5
  55. package/dist/base-primitives/element/ElementTags.d.ts +6 -4
  56. package/dist/base-primitives/element/ElementTags.js +2 -1
  57. package/dist/base-primitives/memoEdge.js +4 -2
  58. package/dist/base-primitives/memoNode.d.ts +1 -1
  59. package/dist/base-primitives/memoNode.js +3 -3
  60. package/dist/components/ErrorFallback.js +52 -35
  61. package/dist/components/Link.js +2 -2
  62. package/dist/context/DiagramEventHandlers.js +2 -1
  63. package/dist/context/DiagramFeatures.d.ts +25 -6
  64. package/dist/context/DiagramFeatures.js +28 -56
  65. package/dist/context/IconRenderer.js +6 -6
  66. package/dist/context/LikeC4ModelContext.js +3 -10
  67. package/dist/context/TagStylesContext.js +3 -19
  68. package/dist/context/index.d.ts +1 -1
  69. package/dist/custom/customNodes.js +3 -2
  70. package/dist/custom/hooks.d.ts +3 -3
  71. package/dist/custom/index.d.ts +1 -1
  72. package/dist/custom/index.js +5 -5
  73. package/dist/editor/LikeC4EditorContext.d.ts +21 -0
  74. package/dist/editor/index.d.ts +2 -0
  75. package/dist/hooks/index.d.ts +4 -2
  76. package/dist/hooks/safeContext.d.ts +6 -3
  77. package/dist/hooks/safeContext.js +10 -3
  78. package/dist/hooks/useCallbackRef.d.ts +1 -0
  79. package/dist/hooks/useCallbackRef.js +13 -0
  80. package/dist/hooks/useCurrentView.d.ts +11 -0
  81. package/dist/hooks/{useCurrentViewId.js → useCurrentView.js} +7 -3
  82. package/dist/hooks/useCurrentViewModel.js +4 -1
  83. package/dist/hooks/useDiagram.d.ts +7 -113
  84. package/dist/hooks/useDiagram.js +7 -127
  85. package/dist/hooks/useDiagramCompareLayout.d.ts +35 -0
  86. package/dist/hooks/useDiagramCompareLayout.js +65 -0
  87. package/dist/hooks/useLikeC4Project.d.ts +6 -1
  88. package/dist/hooks/useLikeC4Project.js +14 -2
  89. package/dist/hooks/useMediaPrint.d.ts +6 -0
  90. package/dist/hooks/useUpdateEffect.js +2 -4
  91. package/dist/hooks/useXYFlow.d.ts +1 -0
  92. package/dist/hooks/useXYFlow.js +4 -7
  93. package/dist/index.d.ts +2 -2
  94. package/dist/index.js +4 -3
  95. package/dist/likec4diagram/DiagramUI.js +14 -7
  96. package/dist/likec4diagram/DiagramXYFlow.d.ts +2 -2
  97. package/dist/likec4diagram/DiagramXYFlow.js +60 -52
  98. package/dist/likec4diagram/convert-to-xyflow.d.ts +0 -1
  99. package/dist/likec4diagram/custom/edges/EdgeDrifts.d.ts +6 -0
  100. package/dist/likec4diagram/custom/edges/EdgeDrifts.js +38 -0
  101. package/dist/likec4diagram/custom/edges/RelationshipEdge.js +256 -217
  102. package/dist/likec4diagram/custom/edges/SequenceStepEdge.js +9 -2
  103. package/dist/likec4diagram/custom/edges/edges.css.js +3 -4
  104. package/dist/likec4diagram/custom/edges/useControlPoints.d.ts +8 -0
  105. package/dist/likec4diagram/custom/edges/useControlPoints.js +58 -0
  106. package/dist/likec4diagram/custom/edges/useRelationshipEdgePath.d.ts +7 -0
  107. package/dist/likec4diagram/custom/edges/useRelationshipEdgePath.js +60 -0
  108. package/dist/likec4diagram/custom/edges/utils.d.ts +0 -12
  109. package/dist/likec4diagram/custom/nodes/CompoundActions.js +4 -1
  110. package/dist/likec4diagram/custom/nodes/ElementActions.d.ts +2 -1
  111. package/dist/likec4diagram/custom/nodes/ElementActions.js +15 -10
  112. package/dist/likec4diagram/custom/nodes/NodeDrifts.d.ts +6 -0
  113. package/dist/likec4diagram/custom/nodes/NodeDrifts.js +50 -0
  114. package/dist/likec4diagram/custom/nodes/SequenceActorNode.js +7 -2
  115. package/dist/likec4diagram/custom/nodes/index.d.ts +1 -0
  116. package/dist/likec4diagram/custom/nodes/nodes.d.ts +9 -1
  117. package/dist/likec4diagram/custom/nodes/nodes.js +74 -29
  118. package/dist/likec4diagram/custom/nodes/toolbar/ColorButton.d.ts +1 -1
  119. package/dist/likec4diagram/custom/nodes/toolbar/ColorButton.js +1 -1
  120. package/dist/likec4diagram/custom/nodes/toolbar/CompoundToolbar.js +2 -1
  121. package/dist/likec4diagram/custom/nodes/toolbar/ElementToolbar.js +4 -3
  122. package/dist/likec4diagram/custom/nodes/toolbar/_shared.d.ts +1 -11
  123. package/dist/likec4diagram/custom/nodes/toolbar/_shared.js +7 -51
  124. package/dist/likec4diagram/custom/nodes/toolbar/types.d.ts +5 -0
  125. package/dist/likec4diagram/custom/nodes/toolbar/types.js +7 -0
  126. package/dist/likec4diagram/custom/nodes/toolbar/useHandlers.d.ts +8 -0
  127. package/dist/likec4diagram/custom/nodes/toolbar/useHandlers.js +44 -0
  128. package/dist/likec4diagram/relationship-popover/RelationshipPopover.js +8 -10
  129. package/dist/likec4diagram/relationship-popover/actor.d.ts +1 -1
  130. package/dist/likec4diagram/state/DiagramActorProvider.d.ts +4 -3
  131. package/dist/likec4diagram/state/DiagramActorProvider.js +95 -70
  132. package/dist/likec4diagram/state/assign.d.ts +13 -7
  133. package/dist/likec4diagram/state/assign.js +43 -282
  134. package/dist/likec4diagram/state/createViewChange.d.ts +3 -0
  135. package/dist/likec4diagram/state/createViewChange.js +79 -0
  136. package/dist/likec4diagram/state/diagram-api.d.ts +109 -0
  137. package/dist/likec4diagram/state/diagram-api.js +126 -0
  138. package/dist/likec4diagram/state/machine.actions.d.ts +1783 -0
  139. package/dist/likec4diagram/state/machine.actions.js +644 -0
  140. package/dist/likec4diagram/state/machine.actions.layout.d.ts +579 -0
  141. package/dist/likec4diagram/state/machine.actions.layout.js +129 -0
  142. package/dist/likec4diagram/state/machine.d.ts +22 -0
  143. package/dist/likec4diagram/state/machine.js +127 -0
  144. package/dist/likec4diagram/state/machine.setup.d.ts +327 -0
  145. package/dist/likec4diagram/state/machine.setup.js +93 -0
  146. package/dist/likec4diagram/state/machine.state.initializing.d.ts +208 -0
  147. package/dist/likec4diagram/state/machine.state.initializing.js +55 -0
  148. package/dist/likec4diagram/state/machine.state.navigating.d.ts +14 -0
  149. package/dist/likec4diagram/state/machine.state.navigating.js +178 -0
  150. package/dist/likec4diagram/state/machine.state.ready.d.ts +3131 -0
  151. package/dist/likec4diagram/state/machine.state.ready.focused.d.ts +386 -0
  152. package/dist/likec4diagram/state/machine.state.ready.focused.js +85 -0
  153. package/dist/likec4diagram/state/machine.state.ready.idle.d.ts +474 -0
  154. package/dist/likec4diagram/state/machine.state.ready.idle.js +96 -0
  155. package/dist/likec4diagram/state/machine.state.ready.js +262 -0
  156. package/dist/likec4diagram/state/machine.state.ready.printing.d.ts +128 -0
  157. package/dist/likec4diagram/state/machine.state.ready.printing.js +40 -0
  158. package/dist/likec4diagram/state/machine.state.ready.walkthrough.d.ts +511 -0
  159. package/dist/likec4diagram/state/machine.state.ready.walkthrough.js +177 -0
  160. package/dist/likec4diagram/state/mediaPrintActor.d.ts +12 -0
  161. package/dist/likec4diagram/state/mediaPrintActor.js +18 -0
  162. package/dist/likec4diagram/state/syncManualLayoutActor.d.ts +31 -108
  163. package/dist/likec4diagram/state/syncManualLayoutActor.js +278 -142
  164. package/dist/likec4diagram/state/types.d.ts +7 -12
  165. package/dist/likec4diagram/state/utils.d.ts +19 -4
  166. package/dist/likec4diagram/state/utils.js +47 -4
  167. package/dist/likec4diagram/types.d.ts +8 -8
  168. package/dist/likec4diagram/ui/LayoutDriftFrame.d.ts +2 -0
  169. package/dist/likec4diagram/ui/LayoutDriftFrame.js +66 -0
  170. package/dist/likec4diagram/ui/index.d.ts +1 -0
  171. package/dist/likec4diagram/ui/notation/NotationPanel.css.js +5 -2
  172. package/dist/likec4diagram/ui/notation/NotationPanel.js +5 -4
  173. package/dist/likec4diagram/useLayoutConstraints.d.ts +10 -5
  174. package/dist/likec4diagram/useLayoutConstraints.js +237 -61
  175. package/dist/likec4diagram/xyflow-diagram/diagram-view.d.ts +0 -1
  176. package/dist/likec4diagram/xyflow-diagram/diagram-view.js +14 -17
  177. package/dist/likec4diagram/xyflow-sequence/sequence-layout.js +11 -8
  178. package/dist/navigationpanel/NavigationPanel.js +16 -8
  179. package/dist/navigationpanel/NavigationPanelControls.d.ts +2 -1
  180. package/dist/navigationpanel/NavigationPanelControls.js +23 -17
  181. package/dist/navigationpanel/NavigationPanelDropdown.d.ts +2 -1
  182. package/dist/navigationpanel/NavigationPanelDropdown.js +62 -42
  183. package/dist/navigationpanel/_common.d.ts +1 -1
  184. package/dist/navigationpanel/_common.js +4 -2
  185. package/dist/navigationpanel/actor.d.ts +9 -205
  186. package/dist/navigationpanel/actor.js +6 -5
  187. package/dist/navigationpanel/comparepanel/CompareActionsMenu.d.ts +3 -0
  188. package/dist/navigationpanel/comparepanel/CompareActionsMenu.js +59 -0
  189. package/dist/navigationpanel/comparepanel/ComparePanel.d.ts +2 -0
  190. package/dist/navigationpanel/comparepanel/ComparePanel.js +42 -0
  191. package/dist/navigationpanel/comparepanel/ComparePanelControls.d.ts +1 -0
  192. package/dist/navigationpanel/comparepanel/ComparePanelControls.js +60 -0
  193. package/dist/navigationpanel/comparepanel/LayoutTypeSwitcher.d.ts +5 -0
  194. package/dist/navigationpanel/comparepanel/LayoutTypeSwitcher.js +38 -0
  195. package/dist/navigationpanel/comparepanel/index.d.ts +1 -0
  196. package/dist/navigationpanel/controls/{ViewDetailsCard.d.ts → DetailsControls.d.ts} +1 -1
  197. package/dist/navigationpanel/controls/{ViewDetailsCard.js → DetailsControls.js} +18 -14
  198. package/dist/navigationpanel/controls/LayoutWarning.d.ts +2 -0
  199. package/dist/navigationpanel/controls/LayoutWarning.js +102 -0
  200. package/dist/navigationpanel/controls/NavigationButtons.js +4 -3
  201. package/dist/navigationpanel/controls/OpenSource.js +2 -2
  202. package/dist/navigationpanel/controls/SearchControl.d.ts +2 -1
  203. package/dist/navigationpanel/controls/SearchControl.js +15 -17
  204. package/dist/navigationpanel/controls/ToggleReadonly.d.ts +1 -1
  205. package/dist/navigationpanel/controls/ToggleReadonly.js +26 -18
  206. package/dist/navigationpanel/controls/index.d.ts +2 -1
  207. package/dist/navigationpanel/dropdown/ProjectsMenu.d.ts +2 -2
  208. package/dist/navigationpanel/dropdown/ProjectsMenu.js +5 -5
  209. package/dist/navigationpanel/editorpanel/CenterCamera.js +5 -2
  210. package/dist/navigationpanel/editorpanel/ChangeAutoLayoutButton.d.ts +1 -1
  211. package/dist/navigationpanel/editorpanel/ChangeAutoLayoutButton.js +21 -20
  212. package/dist/navigationpanel/editorpanel/EditorPanel.js +3 -3
  213. package/dist/navigationpanel/editorpanel/ManualLayoutToolsButton.d.ts +2 -2
  214. package/dist/navigationpanel/editorpanel/ManualLayoutToolsButton.js +16 -13
  215. package/dist/navigationpanel/editorpanel/ToggleReadonly.d.ts +1 -0
  216. package/dist/navigationpanel/editorpanel/ToggleReadonly.js +15 -0
  217. package/dist/navigationpanel/styles.css.d.ts +2 -2
  218. package/dist/navigationpanel/styles.css.js +4 -4
  219. package/dist/navigationpanel/walkthrough/ActiveWalkthroughControls.js +14 -8
  220. package/dist/navigationpanel/walkthrough/DynamicViewControls.d.ts +66 -66
  221. package/dist/navigationpanel/walkthrough/DynamicViewControls.js +31 -14
  222. package/dist/navigationpanel/walkthrough/WalkthroughPanel.d.ts +2 -1
  223. package/dist/navigationpanel/walkthrough/WalkthroughPanel.js +68 -50
  224. package/dist/node_modules/.pnpm/xstate@5.24.0_patch_hash_3a1bd6d012ec67bf6e38a00c3226d1be77089442f83aeb6e424b00ca2a11d21c/node_modules/xstate/actions/dist/xstate-actions.cjs.js +37 -0
  225. package/dist/node_modules/.pnpm/xstate@5.24.0_patch_hash_3a1bd6d012ec67bf6e38a00c3226d1be77089442f83aeb6e424b00ca2a11d21c/node_modules/xstate/dev/dist/xstate-dev.cjs.js +59 -0
  226. package/dist/node_modules/.pnpm/xstate@5.24.0_patch_hash_3a1bd6d012ec67bf6e38a00c3226d1be77089442f83aeb6e424b00ca2a11d21c/node_modules/xstate/dist/assign-dea9f7c8.cjs.js +140 -0
  227. package/dist/node_modules/.pnpm/xstate@5.24.0_patch_hash_3a1bd6d012ec67bf6e38a00c3226d1be77089442f83aeb6e424b00ca2a11d21c/node_modules/xstate/dist/log-ec8d4df4.cjs.js +401 -0
  228. package/dist/node_modules/.pnpm/xstate@5.24.0_patch_hash_3a1bd6d012ec67bf6e38a00c3226d1be77089442f83aeb6e424b00ca2a11d21c/node_modules/xstate/dist/raise-da5b247f.cjs.js +2716 -0
  229. package/dist/node_modules/.pnpm/xstate@5.24.0_patch_hash_3a1bd6d012ec67bf6e38a00c3226d1be77089442f83aeb6e424b00ca2a11d21c/node_modules/xstate/guards/dist/xstate-guards.cjs.js +26 -0
  230. package/dist/overlays/element-details/ElementDetails.js +7 -7
  231. package/dist/overlays/element-details/ElementDetailsCard.css.js +3 -3
  232. package/dist/overlays/element-details/ElementDetailsCard.js +7 -5
  233. package/dist/overlays/element-details/MetadataValue.d.ts +2 -1
  234. package/dist/overlays/element-details/MetadataValue.js +2 -2
  235. package/dist/overlays/element-details/TabPanelDeployments.js +6 -4
  236. package/dist/overlays/element-details/TabPanelRelationships.js +3 -3
  237. package/dist/overlays/element-details/TabPanelStructure.js +1 -1
  238. package/dist/overlays/element-details/actor.d.ts +8 -82
  239. package/dist/overlays/element-details/actor.js +0 -8
  240. package/dist/overlays/overlay/Overlay.js +10 -10
  241. package/dist/overlays/overlaysActor.d.ts +7 -150
  242. package/dist/overlays/overlaysActor.js +183 -161
  243. package/dist/overlays/relationship-details/RelationshipDetails.js +4 -3
  244. package/dist/overlays/relationship-details/SelectEdge.js +2 -2
  245. package/dist/overlays/relationship-details/_types.d.ts +3 -4
  246. package/dist/overlays/relationship-details/actor.d.ts +6 -550
  247. package/dist/overlays/relationship-details/actor.js +18 -3
  248. package/dist/overlays/relationship-details/custom/ElementActions.js +8 -5
  249. package/dist/overlays/relationship-details/custom/edgeTypes.js +4 -1
  250. package/dist/overlays/relationship-details/custom/nodeTypes.js +4 -1
  251. package/dist/overlays/relationship-details/hooks.js +1 -1
  252. package/dist/overlays/relationship-details/layout-to-xyflow.js +3 -5
  253. package/dist/overlays/relationship-details/layout.d.ts +3 -3
  254. package/dist/overlays/relationship-details/layout.js +4 -4
  255. package/dist/overlays/relationships-browser/RelationshipsBrowser.js +6 -4
  256. package/dist/overlays/relationships-browser/SelectElement.js +2 -2
  257. package/dist/overlays/relationships-browser/_types.d.ts +2 -3
  258. package/dist/overlays/relationships-browser/actor.d.ts +7 -673
  259. package/dist/overlays/relationships-browser/actor.js +132 -110
  260. package/dist/overlays/relationships-browser/custom/ElementActions.js +44 -37
  261. package/dist/overlays/relationships-browser/custom/edgeTypes.js +4 -1
  262. package/dist/overlays/relationships-browser/custom/nodeTypes.js +4 -1
  263. package/dist/overlays/relationships-browser/hooks.js +7 -6
  264. package/dist/overlays/relationships-browser/layout.d.ts +2 -2
  265. package/dist/overlays/relationships-browser/layout.js +3 -3
  266. package/dist/overlays/relationships-browser/useViewToNodesEdges.js +0 -3
  267. package/dist/overlays/types.d.ts +12 -13
  268. package/dist/search/Search.js +2 -1
  269. package/dist/search/components/ElementsColumn.js +5 -3
  270. package/dist/search/components/PickView.js +1 -1
  271. package/dist/search/components/SearchByTags.js +21 -44
  272. package/dist/search/components/SearchInput.js +1 -1
  273. package/dist/search/components/ViewsColum.js +6 -4
  274. package/dist/search/components/_shared.css.d.ts +1 -1
  275. package/dist/search/searchActor.d.ts +3 -66
  276. package/dist/shadowroot/ShadowRoot.d.ts +5 -7
  277. package/dist/shadowroot/ShadowRoot.js +8 -6
  278. package/dist/styles.css2.js +1 -1
  279. package/dist/utils/index.d.ts +4 -4
  280. package/dist/utils/vector.d.ts +83 -21
  281. package/dist/utils/vector.js +98 -24
  282. package/dist/utils/view-bounds.d.ts +8 -0
  283. package/dist/utils/view-bounds.js +58 -0
  284. package/dist/utils/xyflow.d.ts +52 -8
  285. package/dist/utils/xyflow.js +31 -11
  286. package/package.json +26 -24
  287. package/panda.buildinfo.json +124 -71
  288. package/styles-min.css +1 -1
  289. package/styles.css +1 -1
  290. package/dist/hooks/useCurrentViewId.d.ts +0 -6
  291. package/dist/likec4diagram/custom/edges/utils.js +0 -23
  292. package/dist/likec4diagram/state/diagram-machine.d.ts +0 -2590
  293. package/dist/likec4diagram/state/diagram-machine.js +0 -1180
  294. package/dist/navigationpanel/editorpanel/LayoutDriftNotification.d.ts +0 -1
  295. package/dist/navigationpanel/editorpanel/LayoutDriftNotification.js +0 -56
  296. package/dist/utils/get-view-bounds.d.ts +0 -3
  297. package/dist/utils/get-view-bounds.js +0 -14
  298. /package/dist/base/{types.js → Base.js} +0 -0
  299. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/createReactComponent.js +0 -0
  300. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/defaultAttributes.js +0 -0
  301. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconAlertTriangle.js +0 -0
  302. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconArrowDownRight.js +0 -0
  303. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconArrowLeft.js +0 -0
  304. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconArrowRight.js +0 -0
  305. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconBolt.js +0 -0
  306. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconBrowser.js +0 -0
  307. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconCheck.js +0 -0
  308. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconChevronDown.js +0 -0
  309. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconChevronLeft.js +0 -0
  310. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconChevronRight.js +0 -0
  311. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconCopy.js +0 -0
  312. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconCylinder.js +0 -0
  313. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconDeviceMobile.js +0 -0
  314. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconDirectionSignFilled.js +0 -0
  315. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconExternalLink.js +0 -0
  316. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconFileSymlink.js +0 -0
  317. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconFocusCentered.js +0 -0
  318. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconFolderFilled.js +0 -0
  319. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconHelpCircle.js +0 -0
  320. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconId.js +0 -0
  321. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconInfoCircle.js +0 -0
  322. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignBottom.js +0 -0
  323. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignCenter.js +0 -0
  324. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignLeft.js +0 -0
  325. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignMiddle.js +0 -0
  326. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignRight.js +0 -0
  327. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignTop.js +0 -0
  328. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutBoardSplit.js +0 -0
  329. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutCollage.js +0 -0
  330. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutDashboard.js +0 -0
  331. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconLink.js +0 -0
  332. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconLock.js +0 -0
  333. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconLockOpen2.js +0 -0
  334. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconPlayerPlayFilled.js +0 -0
  335. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconPlayerSkipBackFilled.js +0 -0
  336. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconPlayerSkipForwardFilled.js +0 -0
  337. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconPlayerStopFilled.js +0 -0
  338. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconRectangularPrism.js +0 -0
  339. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconReorder.js +0 -0
  340. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconRouteOff.js +0 -0
  341. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconSearch.js +0 -0
  342. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconSelector.js +0 -0
  343. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconStack2.js +0 -0
  344. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconStarFilled.js +0 -0
  345. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconTarget.js +0 -0
  346. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconTransform.js +0 -0
  347. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconUser.js +0 -0
  348. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconX.js +0 -0
  349. /package/dist/node_modules/.pnpm/{@tabler_icons-react@3.35.0_react@19.1.1 → @tabler_icons-react@3.35.0_react@19.2.0}/node_modules/@tabler/icons-react/dist/esm/icons/IconZoomScan.js +0 -0
@@ -3,7 +3,6 @@ import { Types } from '../types';
3
3
  export declare function diagramToXY(opts: {
4
4
  view: Pick<DiagramView, 'id' | 'nodes' | 'edges' | 'bounds' | '_type'>;
5
5
  where: WhereOperator | null;
6
- nodesSelectable: boolean;
7
6
  }): {
8
7
  bounds: BBox;
9
8
  xynodes: Types.Node[];
@@ -1,11 +1,10 @@
1
- import { Queue, whereOperatorAsPredicate, nonNullable, GroupElementKind, RichText, invariant } from '@likec4/core';
1
+ import { Queue, whereOperatorAsPredicate, nonNullable, GroupElementKind, invariant } from '@likec4/core';
2
2
  import { pick, hasAtLeast } from 'remeda';
3
3
  import { ZIndexes } from '../../base/const.js';
4
4
 
5
5
  function diagramToXY(opts) {
6
6
  const {
7
- view,
8
- nodesSelectable: selectable
7
+ view
9
8
  } = opts;
10
9
  const xynodes = [], xyedges = [], nodeLookup = /* @__PURE__ */ new Map();
11
10
  const queue = Queue.from(view.nodes.reduce(
@@ -53,8 +52,6 @@ function diagramToXY(opts) {
53
52
  const id = ns + node.id;
54
53
  const base = {
55
54
  id,
56
- selectable: selectable && node.kind !== GroupElementKind,
57
- focusable: selectable && node.kind !== GroupElementKind,
58
55
  deletable: false,
59
56
  position,
60
57
  zIndex: isCompound ? ZIndexes.Compound : ZIndexes.Element,
@@ -80,14 +77,15 @@ function diagramToXY(opts) {
80
77
  icon: node.icon ?? "none",
81
78
  tags: node.tags ?? null,
82
79
  x: node.x,
83
- y: node.y
80
+ y: node.y,
81
+ drifts: node.drifts ?? null
84
82
  };
85
83
  const leafNodeData = {
86
84
  viewId: view.id,
87
85
  id: node.id,
88
86
  title: node.title,
89
87
  technology: node.technology ?? null,
90
- description: RichText.from(node.description),
88
+ description: node.description ?? null,
91
89
  height: node.height,
92
90
  width: node.width,
93
91
  level: node.level,
@@ -98,7 +96,8 @@ function diagramToXY(opts) {
98
96
  tags: node.tags,
99
97
  x: node.x,
100
98
  y: node.y,
101
- isMultiple: node.style?.multiple ?? false
99
+ isMultiple: node.style?.multiple ?? false,
100
+ drifts: node.drifts ?? null
102
101
  };
103
102
  if (node.kind === GroupElementKind) {
104
103
  xynodes.push({
@@ -108,7 +107,7 @@ function diagramToXY(opts) {
108
107
  isViewGroup: true,
109
108
  ...compoundData
110
109
  },
111
- dragHandle: ".likec4-compound-title"
110
+ dragHandle: ".likec4-compound-title-container"
112
111
  });
113
112
  continue;
114
113
  }
@@ -130,8 +129,7 @@ function diagramToXY(opts) {
130
129
  ...navigateTo,
131
130
  deploymentFqn,
132
131
  modelFqn
133
- },
134
- dragHandle: ".likec4-compound-title"
132
+ }
135
133
  }
136
134
  );
137
135
  break;
@@ -146,8 +144,7 @@ function diagramToXY(opts) {
146
144
  ...compoundData,
147
145
  ...navigateTo,
148
146
  modelFqn
149
- },
150
- dragHandle: ".likec4-compound-title"
147
+ }
151
148
  }
152
149
  );
153
150
  break;
@@ -197,25 +194,25 @@ function diagramToXY(opts) {
197
194
  source: ns + source,
198
195
  target: ns + target,
199
196
  zIndex: ZIndexes.Edge,
200
- selectable,
201
197
  hidden: !visiblePredicate(edge),
202
198
  deletable: false,
203
199
  data: {
204
200
  id: edge.id,
205
201
  label: edge.label,
206
202
  technology: edge.technology,
207
- notes: RichText.from(edge.notes),
203
+ notes: edge.notes ?? null,
208
204
  navigateTo: edge.navigateTo,
209
205
  controlPoints: edge.controlPoints ?? null,
210
206
  labelBBox: edge.labelBBox ?? null,
211
- labelXY: edge.labelBBox ? { x: edge.labelBBox.x, y: edge.labelBBox.y } : null,
207
+ labelXY: null,
212
208
  points: edge.points,
213
209
  color: edge.color ?? "gray",
214
210
  line: edge.line ?? "dashed",
215
211
  dir: edge.dir ?? "forward",
216
212
  head: edge.head ?? "normal",
217
213
  tail: edge.tail ?? "none",
218
- astPath: edge.astPath
214
+ astPath: edge.astPath,
215
+ drifts: edge.drifts ?? null
219
216
  },
220
217
  interactionWidth: 20
221
218
  });
@@ -1,5 +1,4 @@
1
1
  import { nonNullable } from '@likec4/core';
2
- import { RichText } from '@likec4/core/types';
3
2
  import { SeqZIndex, SeqParallelAreaColor } from './const.js';
4
3
 
5
4
  function sequenceLayoutToXY(view) {
@@ -46,7 +45,8 @@ function toCompoundArea({ id, x, y, width, height, depth }, node, view) {
46
45
  y,
47
46
  viewId: view.id,
48
47
  depth,
49
- isViewGroup: true
48
+ isViewGroup: true,
49
+ drifts: node.drifts ?? null
50
50
  },
51
51
  // zIndex: SeqZIndex.compound,
52
52
  position: {
@@ -83,9 +83,10 @@ function toSeqParallelArea({ parallelPrefix, x, y, width, height }, view) {
83
83
  icon: null,
84
84
  width,
85
85
  height,
86
- description: RichText.EMPTY,
86
+ description: null,
87
87
  viewId: view.id,
88
- parallelPrefix
88
+ parallelPrefix,
89
+ drifts: null
89
90
  },
90
91
  zIndex: SeqZIndex.parallel,
91
92
  position: {
@@ -126,10 +127,11 @@ function toSeqActorNode({ id, x, y, width, height, ports }, actor, bounds, view)
126
127
  tags: actor.tags,
127
128
  modelFqn: actor.modelRef ?? null,
128
129
  technology: actor.technology ?? null,
129
- description: RichText.from(actor.description),
130
+ description: actor.description ?? null,
130
131
  viewHeight: bounds.height,
131
132
  viewId: view.id,
132
- ports
133
+ ports,
134
+ drifts: actor.drifts ?? null
133
135
  },
134
136
  deletable: false,
135
137
  selectable: true,
@@ -149,7 +151,7 @@ function toSeqStepEdge({ id, labelBBox, sourceHandle, targetHandle }, edge) {
149
151
  id,
150
152
  label: edge.label,
151
153
  technology: edge.technology,
152
- notes: RichText.from(edge.notes),
154
+ notes: edge.notes ?? null,
153
155
  navigateTo: edge.navigateTo,
154
156
  controlPoints: null,
155
157
  labelBBox: {
@@ -165,7 +167,8 @@ function toSeqStepEdge({ id, labelBBox, sourceHandle, targetHandle }, edge) {
165
167
  dir: "forward",
166
168
  head: edge.head ?? "normal",
167
169
  tail: edge.tail ?? "none",
168
- astPath: edge.astPath
170
+ astPath: edge.astPath,
171
+ drifts: edge.drifts ?? null
169
172
  },
170
173
  selectable: true,
171
174
  focusable: false,
@@ -8,7 +8,8 @@ import { LayoutGroup, AnimatePresence } from 'motion/react';
8
8
  import * as m from 'motion/react-m';
9
9
  import { memo, useEffect } from 'react';
10
10
  import { useDiagramActorRef } from '../hooks/safeContext.js';
11
- import { useCurrentViewModel } from '../hooks/useCurrentViewModel.js';
11
+ import { useCurrentView } from '../hooks/useCurrentView.js';
12
+ import { useOptionalCurrentViewModel } from '../hooks/useCurrentViewModel.js';
12
13
  import { useDiagramContext } from '../hooks/useDiagram.js';
13
14
  import { useMantinePortalProps } from '../hooks/useMantinePortalProps.js';
14
15
  import { navigationPanelActorLogic } from './actor.js';
@@ -16,16 +17,19 @@ import { NavigationPanelActorContextProvider } from './hooks.js';
16
17
  import { NavigationPanelControls } from './NavigationPanelControls.js';
17
18
  import { NavigationPanelDropdown } from './NavigationPanelDropdown.js';
18
19
  import { WalkthroughPanel } from './walkthrough/WalkthroughPanel.js';
20
+ import { ComparePanel } from './comparepanel/ComparePanel.js';
19
21
  import { EditorPanel } from './editorpanel/EditorPanel.js';
20
22
  import { ActiveWalkthroughControls } from './walkthrough/ActiveWalkthroughControls.js';
21
23
 
22
24
  const NavigationPanel = memo(() => {
23
25
  const diagramActor = useDiagramActorRef();
24
- const viewModel = useCurrentViewModel();
26
+ const view = useCurrentView();
27
+ const viewModel = useOptionalCurrentViewModel();
25
28
  const actorRef = useActorRef(
26
29
  navigationPanelActorLogic,
27
30
  {
28
31
  input: {
32
+ view,
29
33
  viewModel
30
34
  }
31
35
  }
@@ -39,8 +43,8 @@ const NavigationPanel = memo(() => {
39
43
  return () => subscription.unsubscribe();
40
44
  }, [actorRef, diagramActor]);
41
45
  useUpdateEffect(() => {
42
- actorRef.send({ type: "update.inputs", inputs: { viewModel } });
43
- }, [viewModel]);
46
+ actorRef.send({ type: "update.inputs", inputs: { viewModel, view } });
47
+ }, [viewModel, view]);
44
48
  return /* @__PURE__ */ jsx(
45
49
  VStack,
46
50
  {
@@ -65,12 +69,16 @@ const NavigationPanel = memo(() => {
65
69
  "calc(100vw - 2 * {spacing.md})",
66
70
  "calc(100cqw - 2 * {spacing.md})"
67
71
  ]
72
+ },
73
+ _print: {
74
+ display: "none"
68
75
  }
69
76
  },
70
77
  children: /* @__PURE__ */ jsxs(NavigationPanelActorContextProvider, { value: actorRef, children: [
71
78
  /* @__PURE__ */ jsx(NavigationPanelImpl, { actor: actorRef }),
72
- /* @__PURE__ */ jsx(EditorPanel, {}),
73
- /* @__PURE__ */ jsx(WalkthroughPanel, {})
79
+ /* @__PURE__ */ jsx(ComparePanel, {}),
80
+ /* @__PURE__ */ jsx(WalkthroughPanel, {}),
81
+ /* @__PURE__ */ jsx(EditorPanel, {})
74
82
  ] })
75
83
  }
76
84
  );
@@ -104,17 +112,17 @@ const NavigationPanelPopoverTarget = ({ actor }) => {
104
112
  m.div,
105
113
  {
106
114
  layout: true,
115
+ layoutDependency: isActiveWalkthrough,
107
116
  className: hstack({
108
117
  layerStyle: "likec4.panel",
109
118
  position: "relative",
110
119
  gap: "xs",
111
120
  cursor: "pointer",
112
- paddingRight: "md",
113
121
  pointerEvents: "all",
114
122
  width: "100%"
115
123
  }),
116
124
  onMouseLeave: () => actor.send({ type: "breadcrumbs.mouseLeave" }),
117
- children: /* @__PURE__ */ jsx(AnimatePresence, { mode: "popLayout", children: isActiveWalkthrough ? /* @__PURE__ */ jsx(ActiveWalkthroughControls, {}) : /* @__PURE__ */ jsx(NavigationPanelControls, {}) })
125
+ children: /* @__PURE__ */ jsx(AnimatePresence, { children: isActiveWalkthrough ? /* @__PURE__ */ jsx(ActiveWalkthroughControls, {}) : /* @__PURE__ */ jsx(NavigationPanelControls, {}) })
118
126
  }
119
127
  ) }) });
120
128
  };
@@ -1 +1,2 @@
1
- export declare const NavigationPanelControls: () => import("react/jsx-runtime").JSX.Element;
1
+ import { MemoExoticComponent } from 'react';
2
+ export declare const NavigationPanelControls: MemoExoticComponent<() => import("react/jsx-runtime").JSX.Element>;
@@ -1,4 +1,5 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { extractViewTitleFromPath } from '@likec4/core/model';
2
3
  import { cx, css } from '@likec4/styles/css';
3
4
  import { hstack } from '@likec4/styles/patterns';
4
5
  import { UnstyledButton } from '@mantine/core';
@@ -6,34 +7,36 @@ import { useSelector } from '@xstate/react';
6
7
  import { deepEqual } from 'fast-equals';
7
8
  import { AnimatePresence } from 'motion/react';
8
9
  import * as m from 'motion/react-m';
10
+ import { memo } from 'react';
9
11
  import { useEnabledFeatures } from '../context/DiagramFeatures.js';
10
12
  import { BreadcrumbsSeparator } from './_common.js';
11
13
  import { useNavigationActor } from './hooks.js';
12
14
  import { breadcrumbTitle } from './styles.css.js';
13
15
  import { BurgerButton } from './controls/BurgerButton.js';
14
16
  import { NavigationButtons } from './controls/NavigationButtons.js';
15
- import { ViewDetailsCard } from './controls/ViewDetailsCard.js';
17
+ import { DetailsControls } from './controls/DetailsControls.js';
16
18
  import { OpenSource } from './controls/OpenSource.js';
17
19
  import { ToggleReadonly } from './controls/ToggleReadonly.js';
18
20
  import { DynamicViewControls } from './walkthrough/DynamicViewControls.js';
19
21
  import { SearchControl } from './controls/SearchControl.js';
22
+ import { LayoutWarning } from './controls/LayoutWarning.js';
20
23
 
21
24
  const selectBreadcrumbs = ({ context }) => {
22
- const folder = context.viewModel.folder;
25
+ const view = context.view;
26
+ const folder = context.viewModel?.folder;
23
27
  return {
24
- folders: folder.isRoot ? [] : folder.breadcrumbs.map((s) => ({
28
+ folders: !folder || folder.isRoot ? [] : folder.breadcrumbs.map((s) => ({
25
29
  folderPath: s.path,
26
30
  title: s.title
27
31
  })),
28
- viewId: context.viewModel.id,
29
- viewTitle: context.viewModel.titleOrUntitled,
30
- isDynamicView: context.viewModel.isDynamicView()
32
+ viewId: view.id,
33
+ viewTitle: context.viewModel?.title ?? (view.title && extractViewTitleFromPath(view.title)) ?? "Untitled View",
34
+ isDynamicView: (context.viewModel?._type ?? view._type) === "dynamic"
31
35
  };
32
36
  };
33
- const NavigationPanelControls = () => {
37
+ const NavigationPanelControls = memo(() => {
34
38
  const actor = useNavigationActor();
35
39
  const {
36
- enableSearch,
37
40
  enableNavigationButtons,
38
41
  enableDynamicViewWalkthrough
39
42
  } = useEnabledFeatures();
@@ -59,6 +62,9 @@ const NavigationPanelControls = () => {
59
62
  }
60
63
  })
61
64
  ),
65
+ initial: { opacity: 0 },
66
+ animate: { opacity: 1 },
67
+ exit: { opacity: 0 },
62
68
  title,
63
69
  onMouseEnter: () => actor.send({ type: "breadcrumbs.mouseEnter.folder", folderPath }),
64
70
  onMouseLeave: () => actor.send({ type: "breadcrumbs.mouseLeave.folder", folderPath }),
@@ -76,6 +82,9 @@ const NavigationPanelControls = () => {
76
82
  UnstyledButton,
77
83
  {
78
84
  component: m.button,
85
+ initial: { opacity: 0 },
86
+ animate: { opacity: 1 },
87
+ exit: { opacity: 0 },
79
88
  className: cx(
80
89
  "mantine-active",
81
90
  breadcrumbTitle({ truncate: true }),
@@ -94,7 +103,7 @@ const NavigationPanelControls = () => {
94
103
  },
95
104
  "view-title"
96
105
  );
97
- return /* @__PURE__ */ jsxs(AnimatePresence, { propagate: true, children: [
106
+ return /* @__PURE__ */ jsxs(AnimatePresence, { propagate: true, mode: "popLayout", children: [
98
107
  /* @__PURE__ */ jsx(BurgerButton, {}, "burger-button"),
99
108
  enableNavigationButtons && /* @__PURE__ */ jsx(NavigationButtons, {}, "nav-buttons"),
100
109
  /* @__PURE__ */ jsxs(
@@ -126,12 +135,7 @@ const NavigationPanelControls = () => {
126
135
  }
127
136
  }),
128
137
  children: [
129
- /* @__PURE__ */ jsx(
130
- ViewDetailsCard,
131
- {
132
- onOpen: () => actor.closeDropdown()
133
- }
134
- ),
138
+ /* @__PURE__ */ jsx(DetailsControls, { onOpen: () => actor.closeDropdown() }),
135
139
  /* @__PURE__ */ jsx(OpenSource, {}),
136
140
  /* @__PURE__ */ jsx(ToggleReadonly, {})
137
141
  ]
@@ -139,8 +143,10 @@ const NavigationPanelControls = () => {
139
143
  "actions"
140
144
  ),
141
145
  enableDynamicViewWalkthrough && isDynamicView && /* @__PURE__ */ jsx(DynamicViewControls, {}, "dynamic-view-controls"),
142
- enableSearch && /* @__PURE__ */ jsx(SearchControl, {}, "search-control")
146
+ /* @__PURE__ */ jsx(SearchControl, {}, "search-control"),
147
+ /* @__PURE__ */ jsx(LayoutWarning, {}, "outdated-manual-layout-warning")
143
148
  ] });
144
- };
149
+ });
150
+ NavigationPanelControls.displayName = "NavigationPanelControls";
145
151
 
146
152
  export { NavigationPanelControls };
@@ -1 +1,2 @@
1
- export declare function NavigationPanelDropdown(): import("react/jsx-runtime").JSX.Element;
1
+ import { MemoExoticComponent } from 'react';
2
+ export declare const NavigationPanelDropdown: MemoExoticComponent<() => import("react/jsx-runtime").JSX.Element>;
@@ -1,29 +1,29 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
- import { normalizeViewPath, VIEW_FOLDERS_SEPARATOR } from '@likec4/core/model';
2
+ import { VIEW_FOLDERS_SEPARATOR, normalizeViewPath } from '@likec4/core/model';
3
3
  import { ifilter, ifirst, toArray, compareNaturalHierarchically, nonexhaustive } from '@likec4/core/utils';
4
4
  import { cx, css } from '@likec4/styles/css';
5
5
  import { HStack, VStack, Box } from '@likec4/styles/jsx';
6
6
  import { vstack, hstack } from '@likec4/styles/patterns';
7
- import { PopoverDropdown, createScopedKeydownHandler, ScrollAreaAutosize, Input, rem, Button, Divider, Highlight, UnstyledButton, Breadcrumbs } from '@mantine/core';
7
+ import { PopoverDropdown, ScrollAreaAutosize, Input, createScopedKeydownHandler, rem, Button, Divider, Highlight, UnstyledButton, Breadcrumbs } from '@mantine/core';
8
8
  import { useThrottledCallback, useUncontrolled } from '@mantine/hooks';
9
9
  import { useMountEffect } from '@react-hookz/web';
10
10
  import { useSelector } from '@xstate/react';
11
- import { deepEqual } from 'fast-equals';
12
- import { useRef } from 'react';
11
+ import { shallowEqual, deepEqual } from 'fast-equals';
12
+ import { memo, useDeferredValue, useState, useEffect, useRef } from 'react';
13
13
  import { isEmpty, pipe, sort, isArray } from 'remeda';
14
14
  import { NavigationLink } from '../components/NavigationLink.js';
15
15
  import { useLikeC4Model } from '../hooks/useLikeC4Model.js';
16
16
  import { ProjectsMenu } from './dropdown/ProjectsMenu.js';
17
- import { useNavigationActor, useNavigationActorContext, useNavigationActorRef } from './hooks.js';
17
+ import { useNavigationActor, useNavigationActorSnapshot, useNavigationActorContext, useNavigationActorRef } from './hooks.js';
18
18
  import { breadcrumbTitle } from './styles.css.js';
19
19
  import { useOnDiagramEvent } from '../hooks/useDiagram.js';
20
- import IconSearch from '../node_modules/.pnpm/@tabler_icons-react@3.35.0_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconSearch.js';
21
- import IconChevronRight from '../node_modules/.pnpm/@tabler_icons-react@3.35.0_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconChevronRight.js';
22
- import IconDirectionSignFilled from '../node_modules/.pnpm/@tabler_icons-react@3.35.0_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconDirectionSignFilled.js';
23
- import IconStack2 from '../node_modules/.pnpm/@tabler_icons-react@3.35.0_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconStack2.js';
24
- import IconZoomScan from '../node_modules/.pnpm/@tabler_icons-react@3.35.0_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconZoomScan.js';
25
- import IconStarFilled from '../node_modules/.pnpm/@tabler_icons-react@3.35.0_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconStarFilled.js';
26
- import IconFolderFilled from '../node_modules/.pnpm/@tabler_icons-react@3.35.0_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconFolderFilled.js';
20
+ import IconSearch from '../node_modules/.pnpm/@tabler_icons-react@3.35.0_react@19.2.0/node_modules/@tabler/icons-react/dist/esm/icons/IconSearch.js';
21
+ import IconChevronRight from '../node_modules/.pnpm/@tabler_icons-react@3.35.0_react@19.2.0/node_modules/@tabler/icons-react/dist/esm/icons/IconChevronRight.js';
22
+ import IconDirectionSignFilled from '../node_modules/.pnpm/@tabler_icons-react@3.35.0_react@19.2.0/node_modules/@tabler/icons-react/dist/esm/icons/IconDirectionSignFilled.js';
23
+ import IconStack2 from '../node_modules/.pnpm/@tabler_icons-react@3.35.0_react@19.2.0/node_modules/@tabler/icons-react/dist/esm/icons/IconStack2.js';
24
+ import IconZoomScan from '../node_modules/.pnpm/@tabler_icons-react@3.35.0_react@19.2.0/node_modules/@tabler/icons-react/dist/esm/icons/IconZoomScan.js';
25
+ import IconStarFilled from '../node_modules/.pnpm/@tabler_icons-react@3.35.0_react@19.2.0/node_modules/@tabler/icons-react/dist/esm/icons/IconStarFilled.js';
26
+ import IconFolderFilled from '../node_modules/.pnpm/@tabler_icons-react@3.35.0_react@19.2.0/node_modules/@tabler/icons-react/dist/esm/icons/IconFolderFilled.js';
27
27
 
28
28
  const scopedKeydownHandler = createScopedKeydownHandler({
29
29
  siblingSelector: "[data-likec4-focusable]",
@@ -32,19 +32,24 @@ const scopedKeydownHandler = createScopedKeydownHandler({
32
32
  loop: true,
33
33
  orientation: "vertical"
34
34
  });
35
- function NavigationPanelDropdown() {
35
+ function hasSearchQuerySelector(s) {
36
+ return s.context.searchQuery.trim().length >= 2;
37
+ }
38
+ const NavigationPanelDropdown = memo(() => {
36
39
  const actor = useNavigationActor();
37
- const searchQuery = useSelector(actor.actorRef, (s) => s.context.searchQuery);
40
+ const hasSearchQuery = useNavigationActorSnapshot(hasSearchQuerySelector);
38
41
  useOnDiagramEvent("paneClick", () => {
39
42
  actor.closeDropdown();
40
43
  });
41
44
  useOnDiagramEvent("nodeClick", () => {
42
45
  actor.closeDropdown();
43
46
  });
47
+ useOnDiagramEvent("edgeClick", () => {
48
+ actor.closeDropdown();
49
+ });
44
50
  const setSearchQuery = useThrottledCallback((value) => {
45
51
  actor.send({ type: "searchQuery.change", value });
46
52
  }, 250);
47
- const hasSearchQuery = searchQuery.trim().length >= 2;
48
53
  return /* @__PURE__ */ jsxs(
49
54
  PopoverDropdown,
50
55
  {
@@ -64,10 +69,8 @@ function NavigationPanelDropdown() {
64
69
  /* @__PURE__ */ jsx(HStack, { gap: "xs", children: /* @__PURE__ */ jsx(
65
70
  SearchInput,
66
71
  {
67
- value: searchQuery,
68
- onChange: setSearchQuery,
69
- "data-likec4-focusable": true,
70
- onKeyDown: scopedKeydownHandler
72
+ defaultValue: actor.actorRef.getSnapshot().context.searchQuery,
73
+ onChange: setSearchQuery
71
74
  }
72
75
  ) }),
73
76
  /* @__PURE__ */ jsx(
@@ -89,32 +92,44 @@ function NavigationPanelDropdown() {
89
92
  overscrollBehavior: "none"
90
93
  }
91
94
  },
92
- children: hasSearchQuery ? /* @__PURE__ */ jsx(SearchResults, { searchQuery: normalizeViewPath(searchQuery).toLowerCase() }) : /* @__PURE__ */ jsx(FolderColumns, {})
95
+ children: hasSearchQuery ? /* @__PURE__ */ jsx(SearchResults, {}) : /* @__PURE__ */ jsx(FolderColumns, {})
93
96
  }
94
97
  )
95
98
  ]
96
99
  }
97
100
  );
101
+ });
102
+ NavigationPanelDropdown.displayName = "NavigationPanelDropdown";
103
+ function selectSearchQuery(s) {
104
+ return normalizeViewPath(s.context.searchQuery);
98
105
  }
99
106
  const compare = compareNaturalHierarchically(VIEW_FOLDERS_SEPARATOR);
100
- function SearchResults({ searchQuery }) {
107
+ const SearchResults = memo(() => {
101
108
  const likec4model = useLikeC4Model();
102
109
  const actor = useNavigationActor();
103
- const isSearchByPath = searchQuery.includes(VIEW_FOLDERS_SEPARATOR);
104
- const found = pipe(
105
- likec4model.views(),
106
- ifilter((v) => {
107
- if (isSearchByPath && v.$view.title) {
108
- return normalizeViewPath(v.$view.title).toLowerCase().includes(searchQuery);
109
- }
110
- return v.id.toLowerCase().includes(searchQuery) || !!v.title?.toLowerCase().includes(searchQuery);
111
- }),
112
- ifirst(20),
113
- toArray(),
114
- sort((a, b) => compare(a.folder.path, b.folder.path))
115
- );
110
+ const searchQuery = useSelector(actor.actorRef, selectSearchQuery);
111
+ const deferredSearchQuery = useDeferredValue(searchQuery);
112
+ const isSearchByPath = deferredSearchQuery.includes(VIEW_FOLDERS_SEPARATOR);
113
+ const highlight = isSearchByPath ? deferredSearchQuery.split(VIEW_FOLDERS_SEPARATOR) : deferredSearchQuery;
114
+ const [found, setFound] = useState([]);
115
+ useEffect(() => {
116
+ setFound((current) => {
117
+ const results = pipe(
118
+ likec4model.views(),
119
+ ifilter((v) => {
120
+ if (isSearchByPath && v.$view.title) {
121
+ return normalizeViewPath(v.$view.title).toLowerCase().includes(deferredSearchQuery);
122
+ }
123
+ return v.id.toLowerCase().includes(deferredSearchQuery) || !!v.title?.toLowerCase().includes(deferredSearchQuery);
124
+ }),
125
+ ifirst(20),
126
+ toArray(),
127
+ sort((a, b) => compare(a.folder.path, b.folder.path))
128
+ );
129
+ return shallowEqual(results, current) ? current : results;
130
+ });
131
+ }, [likec4model, deferredSearchQuery, isSearchByPath]);
116
132
  if (found.length === 0) return /* @__PURE__ */ jsx("div", { children: "no results" });
117
- const highlight = isSearchByPath ? searchQuery.split(VIEW_FOLDERS_SEPARATOR) : searchQuery;
118
133
  return /* @__PURE__ */ jsx(
119
134
  ScrollAreaAutosize,
120
135
  {
@@ -147,7 +162,7 @@ function SearchResults({ searchQuery }) {
147
162
  )) })
148
163
  }
149
164
  );
150
- }
165
+ });
151
166
  const foundedViewClass = hstack({
152
167
  gap: "xxs",
153
168
  rounded: "sm",
@@ -317,13 +332,16 @@ function folderColumn(folder, context) {
317
332
  viewId: s.id,
318
333
  title: s.title ?? s.id,
319
334
  description: s.description.nonEmpty && s.description.text || null,
320
- selected: s.id === context.viewModel.id
335
+ selected: s.id === context.viewModel?.id
321
336
  }))
322
337
  ]
323
338
  };
324
339
  }
325
340
  const selectColumns = (context) => {
326
341
  const viewModel = context.viewModel;
342
+ if (!viewModel) {
343
+ return [];
344
+ }
327
345
  const likec4model = viewModel.$model;
328
346
  const columns = [
329
347
  folderColumn(likec4model.rootViewFolder, context)
@@ -336,7 +354,7 @@ const selectColumns = (context) => {
336
354
  }
337
355
  return columns;
338
356
  };
339
- function FolderColumns() {
357
+ const FolderColumns = memo(() => {
340
358
  const columns = useNavigationActorContext(selectColumns, deepEqual);
341
359
  return /* @__PURE__ */ jsx(HStack, { gap: "xs", alignItems: "stretch", children: columns.flatMap((column, i) => [
342
360
  i > 0 && /* @__PURE__ */ jsx(Divider, { orientation: "vertical" }, "divider" + i),
@@ -344,12 +362,12 @@ function FolderColumns() {
344
362
  FolderColumn,
345
363
  {
346
364
  data: column,
347
- isLast: i == columns.length - 1
365
+ isLast: i > 0 && i == columns.length - 1
348
366
  },
349
367
  column.folderPath
350
368
  )
351
369
  ]) });
352
- }
370
+ });
353
371
  function FolderColumn({ data, isLast }) {
354
372
  const ref = useRef(null);
355
373
  const actor = useNavigationActorRef();
@@ -364,6 +382,7 @@ function FolderColumn({ data, isLast }) {
364
382
  useMountEffect(() => {
365
383
  if (isLast && ref.current) {
366
384
  ref.current.scrollIntoView({
385
+ block: "nearest",
367
386
  inline: "nearest",
368
387
  behavior: "smooth"
369
388
  });
@@ -414,7 +433,7 @@ function FolderColumnItem({ columnItem, ...props }) {
414
433
  nonexhaustive(columnItem);
415
434
  }
416
435
  }
417
- function SearchInput({ onKeyDown, ...props }) {
436
+ function SearchInput(props) {
418
437
  const [_value, handleChange] = useUncontrolled({
419
438
  ...props,
420
439
  finalValue: ""
@@ -427,8 +446,9 @@ function SearchInput({ onKeyDown, ...props }) {
427
446
  variant: "unstyled",
428
447
  height: rem(26),
429
448
  value: _value,
430
- onKeyDown,
449
+ onKeyDown: scopedKeydownHandler,
431
450
  onChange: (e) => handleChange(e.currentTarget.value),
451
+ "data-likec4-focusable": true,
432
452
  classNames: {
433
453
  wrapper: css({
434
454
  flexGrow: 1,
@@ -11,5 +11,5 @@ export declare const Breadcrumbs: ForwardRefExoticComponent< BreadcrumbsProps &
11
11
  component?: any;
12
12
  renderRoot?: (props: Record<string, any>) => React.ReactNode;
13
13
  }>;
14
- export type PanelActionIconProps = Partial<NavigationPanelActionIconVariant> & Omit<ActionIconProps, keyof NavigationPanelActionIconVariant> & HTMLMotionProps<'button'>;
14
+ export type PanelActionIconProps = Partial<NavigationPanelActionIconVariant> & Omit<ActionIconProps, keyof NavigationPanelActionIconVariant> & Omit<HTMLMotionProps<'button'>, keyof NavigationPanelActionIconVariant>;
15
15
  export declare const PanelActionIcon: ForwardRefExoticComponent<Omit<PanelActionIconProps, "ref"> & RefAttributes<HTMLButtonElement>>;
@@ -4,7 +4,7 @@ import { navigationPanelActionIcon } from '@likec4/styles/recipes';
4
4
  import { ActionIcon, ThemeIcon, Tooltip as Tooltip$1, Breadcrumbs } from '@mantine/core';
5
5
  import * as m from 'motion/react-m';
6
6
  import { forwardRef } from 'react';
7
- import IconChevronRight from '../node_modules/.pnpm/@tabler_icons-react@3.35.0_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconChevronRight.js';
7
+ import IconChevronRight from '../node_modules/.pnpm/@tabler_icons-react@3.35.0_react@19.2.0/node_modules/@tabler/icons-react/dist/esm/icons/IconChevronRight.js';
8
8
 
9
9
  const Tooltip = Tooltip$1.withProps({
10
10
  color: "dark",
@@ -19,6 +19,7 @@ const Tooltip = Tooltip$1.withProps({
19
19
  const BreadcrumbsSeparator = () => /* @__PURE__ */ jsx(
20
20
  ThemeIcon,
21
21
  {
22
+ component: m.div,
22
23
  variant: "transparent",
23
24
  size: 16,
24
25
  className: css({
@@ -42,6 +43,7 @@ const PanelActionIcon = forwardRef(({
42
43
  variant = "default",
43
44
  className,
44
45
  disabled = false,
46
+ type,
45
47
  ...others
46
48
  }, ref) => /* @__PURE__ */ jsx(
47
49
  ActionIcon,
@@ -63,7 +65,7 @@ const PanelActionIcon = forwardRef(({
63
65
  ...others,
64
66
  className: cx(
65
67
  className,
66
- navigationPanelActionIcon({ variant })
68
+ navigationPanelActionIcon({ variant, type })
67
69
  ),
68
70
  ref
69
71
  }