@likec4/diagram 1.30.0 → 1.32.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 (403) hide show
  1. package/README.md +324 -5
  2. package/bundle/chunk-BvTQaUYl.js +21851 -0
  3. package/bundle/custom.js +65 -0
  4. package/bundle/index.js +19910 -40570
  5. package/dist/LikeC4CustomColors.d.ts +2 -7
  6. package/dist/LikeC4CustomColors.js +17 -6
  7. package/dist/LikeC4Diagram.d.ts +3 -2
  8. package/dist/LikeC4Diagram.js +14 -16
  9. package/dist/LikeC4Diagram.props.d.ts +34 -23
  10. package/dist/LikeC4ModelProvider.d.ts +5 -4
  11. package/dist/LikeC4ModelProvider.js +0 -1
  12. package/dist/StaticLikeC4Diagram.d.ts +3 -2
  13. package/dist/StaticLikeC4Diagram.js +2 -2
  14. package/dist/base/BaseXYFlow.js +8 -8
  15. package/dist/base/const.d.ts +1 -1
  16. package/dist/base/const.js +1 -1
  17. package/dist/base/index.d.ts +2 -1
  18. package/dist/base/primitives/compound/CompoundActionButton.d.ts +3 -2
  19. package/dist/base/primitives/compound/CompoundActionButton.js +2 -1
  20. package/dist/base/primitives/compound/CompoundDetailsButton.d.ts +3 -2
  21. package/dist/base/primitives/compound/CompoundDetailsButton.js +2 -1
  22. package/dist/base/primitives/compound/CompoundNodeContainer.d.ts +7 -3
  23. package/dist/base/primitives/compound/CompoundNodeContainer.js +3 -2
  24. package/dist/base/primitives/compound/CompoundTitle.d.ts +1 -1
  25. package/dist/base/primitives/compound/CompoundTitle.js +2 -1
  26. package/dist/base/primitives/customEdge.d.ts +2 -35
  27. package/dist/base/primitives/customEdge.js +2 -2
  28. package/dist/base/primitives/customNode.d.ts +2 -2
  29. package/dist/base/primitives/customNode.js +9 -2
  30. package/dist/base/primitives/edge/EdgeContainer.d.ts +1 -1
  31. package/dist/base/primitives/edge/EdgeContainer.js +0 -1
  32. package/dist/base/primitives/edge/EdgeLabel.css.js +1 -0
  33. package/dist/base/primitives/edge/EdgeLabel.d.ts +3 -3
  34. package/dist/base/primitives/edge/EdgeLabel.js +6 -5
  35. package/dist/base/primitives/edge/EdgeLabelContainer.d.ts +1 -1
  36. package/dist/base/primitives/edge/EdgeLabelContainer.js +0 -2
  37. package/dist/base/primitives/edge/EdgeMarkers.d.ts +1 -1
  38. package/dist/base/primitives/edge/EdgePath.d.ts +1 -1
  39. package/dist/base/primitives/edge/EdgePath.js +2 -2
  40. package/dist/base/primitives/element/ElementActionButtons.js +10 -9
  41. package/dist/base/primitives/element/ElementDetailsButton.js +2 -1
  42. package/dist/base/primitives/element/ElementNodeContainer.d.ts +24 -22
  43. package/dist/base/primitives/element/ElementNodeContainer.js +66 -68
  44. package/dist/base/primitives/element/ElementShape.d.ts +8 -4
  45. package/dist/base/primitives/element/ElementShape.js +4 -3
  46. package/dist/base/primitives/element/ElementTags.d.ts +14 -0
  47. package/dist/base/primitives/element/ElementTags.js +176 -0
  48. package/dist/base/primitives/element/ElementTitle.css.d.ts +1 -1
  49. package/dist/base/primitives/element/ElementTitle.d.ts +5 -4
  50. package/dist/base/primitives/element/ElementTitle.js +6 -7
  51. package/dist/base/primitives/index.d.ts +1 -0
  52. package/dist/base/types.Base.d.ts +54 -0
  53. package/dist/base/types.Base.js +48 -0
  54. package/dist/base/types.d.ts +3 -53
  55. package/dist/bundle/LikeC4View.d.ts +2 -1
  56. package/dist/bundle/LikeC4View.js +13 -8
  57. package/dist/bundle/LikeC4View.props.d.ts +20 -5
  58. package/dist/bundle/ReactLikeC4.d.ts +4 -7
  59. package/dist/bundle/ReactLikeC4.js +4 -4
  60. package/dist/bundle/ShadowRoot.js +3 -3
  61. package/dist/bundle/custom.d.ts +1 -0
  62. package/dist/bundle/index.d.ts +3 -1
  63. package/dist/bundle/index.js +9 -0
  64. package/dist/bundle/styles.css.js +5 -5
  65. package/dist/components/ErrorFallback.d.ts +2 -0
  66. package/dist/components/ErrorFallback.js +29 -0
  67. package/dist/components/SearchControl.js +2 -2
  68. package/dist/context/ControlsCustomLayout.js +0 -1
  69. package/dist/context/DiagramEventHandlers.d.ts +6 -5
  70. package/dist/context/DiagramEventHandlers.js +5 -5
  71. package/dist/context/DiagramFeatures.d.ts +3 -5
  72. package/dist/context/DiagramFeatures.js +11 -40
  73. package/dist/context/EnsureMantine.js +9 -4
  74. package/dist/context/FramerMotionConfig.js +0 -1
  75. package/dist/context/IconRenderer.js +8 -11
  76. package/dist/context/ReduceGraphics.js +6 -6
  77. package/dist/context/RootContainer.js +10 -6
  78. package/dist/context/TagStylesContext.d.ts +7 -0
  79. package/dist/context/TagStylesContext.js +85 -0
  80. package/dist/context/index.d.ts +1 -1
  81. package/dist/custom/components.d.ts +5 -0
  82. package/dist/custom/customNodes.d.ts +228 -0
  83. package/dist/custom/hooks.d.ts +10 -0
  84. package/dist/custom/index.d.ts +4 -0
  85. package/dist/hooks/index.d.ts +1 -1
  86. package/dist/hooks/safeContext.js +3 -3
  87. package/dist/hooks/useCurrentViewId.d.ts +5 -1
  88. package/dist/hooks/useCurrentViewId.js +1 -2
  89. package/dist/hooks/useDiagram.d.ts +77 -12572
  90. package/dist/hooks/useDiagram.js +9 -7
  91. package/dist/hooks/useMantinePortalProps.d.ts +2 -2
  92. package/dist/hooks/useMantinePortalProps.js +2 -2
  93. package/dist/hooks/useSearchActor.d.ts +2 -0
  94. package/dist/hooks/useSearchActor.js +10 -0
  95. package/dist/hooks/useSetState.js +3 -3
  96. package/dist/hooks/useUpdateEffect.js +3 -1
  97. package/dist/hooks/useXYFlow.d.ts +75 -73
  98. package/dist/hooks/useXYFlow.js +7 -3
  99. package/dist/index.d.ts +2 -4
  100. package/dist/index.js +8 -3
  101. package/dist/likec4diagram/DiagramUI.js +9 -4
  102. package/dist/likec4diagram/DiagramXYFlow.d.ts +4 -3
  103. package/dist/likec4diagram/DiagramXYFlow.js +124 -109
  104. package/dist/likec4diagram/custom/edges/NotePopover.js +2 -2
  105. package/dist/likec4diagram/custom/edges/RelationshipEdge.d.ts +12 -15
  106. package/dist/likec4diagram/custom/edges/RelationshipEdge.js +16 -8
  107. package/dist/likec4diagram/custom/edges/RelationshipsDropdownMenu.js +19 -15
  108. package/dist/likec4diagram/custom/index.d.ts +18 -21
  109. package/dist/likec4diagram/custom/index.js +3 -3
  110. package/dist/likec4diagram/custom/nodes/CompoundActions.js +2 -2
  111. package/dist/likec4diagram/custom/nodes/ElementActions.d.ts +27 -4
  112. package/dist/likec4diagram/custom/nodes/ElementActions.js +67 -53
  113. package/dist/likec4diagram/custom/nodes/index.d.ts +8 -0
  114. package/dist/likec4diagram/custom/nodes/nodes.d.ts +10 -0
  115. package/dist/likec4diagram/custom/nodes/nodes.js +105 -0
  116. package/dist/likec4diagram/custom/nodes/toolbar/ColorButton.js +2 -2
  117. package/dist/likec4diagram/custom/nodes/toolbar/CompoundToolbar.js +6 -7
  118. package/dist/likec4diagram/custom/nodes/toolbar/ElementToolbar.js +3 -3
  119. package/dist/likec4diagram/custom/nodes/toolbar/Toolbar.d.ts +3 -2
  120. package/dist/likec4diagram/custom/nodes/toolbar/Toolbar.js +2 -2
  121. package/dist/likec4diagram/custom/nodes/toolbar/_shared.d.ts +5 -5
  122. package/dist/likec4diagram/custom/nodes/toolbar/_shared.js +2 -2
  123. package/dist/likec4diagram/types.d.ts +18 -10
  124. package/dist/likec4diagram/ui/controls/ChangeAutoLayoutButton.js +4 -4
  125. package/dist/likec4diagram/ui/controls/Controls.js +14 -6
  126. package/dist/likec4diagram/ui/diagram-title/DiagramTitlePanel.js +2 -2
  127. package/dist/likec4diagram/ui/notation/NotationPanel.js +7 -9
  128. package/dist/likec4diagram/ui/walkthrough/DynamicViewWalkthrough.js +4 -4
  129. package/dist/likec4diagram/useLayoutConstraints.js +3 -4
  130. package/dist/likec4diagram/useViewToNodesEdges.d.ts +5 -3
  131. package/dist/likec4diagram/useViewToNodesEdges.js +22 -30
  132. package/dist/likec4model/LikeC4ModelContext.d.ts +2 -2
  133. package/dist/likec4model/LikeC4ModelContext.js +2 -2
  134. package/dist/likec4model/useLikeC4ElementsTree.d.ts +1 -1
  135. package/dist/likec4model/useLikeC4ElementsTree.js +4 -4
  136. package/dist/likec4model/useLikeC4Model.d.ts +22 -10
  137. package/dist/likec4model/useLikeC4Model.js +13 -9
  138. package/dist/overlays/Overlays.d.ts +2 -3
  139. package/dist/overlays/Overlays.js +9 -33
  140. package/dist/overlays/element-details/ElementDetailsCard.css.js +13 -9
  141. package/dist/overlays/element-details/ElementDetailsCard.d.ts +1 -1
  142. package/dist/overlays/element-details/ElementDetailsCard.js +110 -110
  143. package/dist/overlays/element-details/TabPanelDeployments.d.ts +1 -1
  144. package/dist/overlays/element-details/TabPanelDeployments.js +5 -5
  145. package/dist/overlays/element-details/TabPanelRelationships.d.ts +1 -1
  146. package/dist/overlays/element-details/TabPanelRelationships.js +2 -2
  147. package/dist/overlays/element-details/TabPanelStructure.d.ts +1 -1
  148. package/dist/overlays/element-details/TabPanelStructure.js +3 -3
  149. package/dist/overlays/element-details/actor.d.ts +5482 -18265
  150. package/dist/overlays/element-details/actor.js +0 -2
  151. package/dist/overlays/element-details/actorContext.js +3 -3
  152. package/dist/overlays/overlay/Overlay.css.d.ts +57 -2
  153. package/dist/overlays/overlay/Overlay.css.js +76 -39
  154. package/dist/overlays/overlay/Overlay.d.ts +23 -1
  155. package/dist/overlays/overlay/Overlay.js +40 -29
  156. package/dist/overlays/overlaysActor.d.ts +5 -3
  157. package/dist/overlays/overlaysActor.js +2 -1
  158. package/dist/overlays/relationship-details/RelationshipDetails.d.ts +6 -9
  159. package/dist/overlays/relationship-details/RelationshipDetails.js +15 -15
  160. package/dist/overlays/relationship-details/SelectEdge.js +2 -3
  161. package/dist/overlays/relationship-details/_types.d.ts +7 -6
  162. package/dist/overlays/relationship-details/actor.d.ts +3 -3
  163. package/dist/overlays/relationship-details/actor.js +7 -7
  164. package/dist/overlays/relationship-details/compute.js +3 -3
  165. package/dist/overlays/relationship-details/custom/edgeTypes.d.ts +6 -9
  166. package/dist/overlays/relationship-details/custom/edgeTypes.js +2 -2
  167. package/dist/overlays/relationship-details/custom/nodeTypes.d.ts +3 -31
  168. package/dist/overlays/relationship-details/custom/nodeTypes.js +4 -0
  169. package/dist/overlays/relationship-details/hooks.d.ts +28 -27
  170. package/dist/overlays/relationship-details/hooks.js +4 -4
  171. package/dist/overlays/relationship-details/layout-to-xyflow.js +1 -0
  172. package/dist/overlays/relationship-details/layout.js +5 -4
  173. package/dist/overlays/relationships-browser/RelationshipsBrowser.d.ts +6 -9
  174. package/dist/overlays/relationships-browser/RelationshipsBrowser.js +8 -8
  175. package/dist/overlays/relationships-browser/SelectElement.js +6 -6
  176. package/dist/overlays/relationships-browser/_types.d.ts +7 -6
  177. package/dist/overlays/relationships-browser/actor.d.ts +64 -429
  178. package/dist/overlays/relationships-browser/actor.js +7 -7
  179. package/dist/overlays/relationships-browser/custom/edgeTypes.d.ts +6 -9
  180. package/dist/overlays/relationships-browser/custom/edgeTypes.js +2 -2
  181. package/dist/overlays/relationships-browser/custom/nodeTypes.d.ts +17 -18
  182. package/dist/overlays/relationships-browser/custom/nodeTypes.js +5 -2
  183. package/dist/overlays/relationships-browser/hooks.d.ts +4 -61
  184. package/dist/overlays/relationships-browser/hooks.js +4 -4
  185. package/dist/overlays/relationships-browser/layout.d.ts +2 -2
  186. package/dist/overlays/relationships-browser/layout.js +13 -10
  187. package/dist/overlays/relationships-browser/useViewToNodesEdges.js +4 -3
  188. package/dist/search/Search.d.ts +5 -0
  189. package/dist/search/Search.js +192 -0
  190. package/dist/{likec4diagram/ui/search → search/components}/ElementsColumn.css.js +0 -1
  191. package/dist/search/components/ElementsColumn.d.ts +2 -0
  192. package/dist/{likec4diagram/ui/search → search/components}/ElementsColumn.js +26 -25
  193. package/dist/search/components/PickView.d.ts +4 -0
  194. package/dist/search/components/PickView.js +135 -0
  195. package/dist/search/components/SearchByTags.d.ts +1 -0
  196. package/dist/search/components/SearchByTags.js +116 -0
  197. package/dist/search/components/SearchInput.d.ts +2 -0
  198. package/dist/{likec4diagram/ui/search → search/components}/SearchInput.js +53 -35
  199. package/dist/{likec4diagram/ui/search → search/components}/ViewsColum.d.ts +3 -2
  200. package/dist/{likec4diagram/ui/search → search/components}/ViewsColum.js +14 -13
  201. package/dist/search/components/_shared.css.d.ts +4 -0
  202. package/dist/{likec4diagram/ui/search → search/components}/_shared.css.js +26 -35
  203. package/dist/{likec4diagram/ui/search/LikeC4Search.css.d.ts → search/components/styles.css.d.ts} +0 -2
  204. package/dist/search/components/styles.css.js +60 -0
  205. package/dist/{likec4diagram/ui/search → search/components}/utils.d.ts +1 -0
  206. package/dist/{likec4diagram/ui/search → search/components}/utils.js +7 -1
  207. package/dist/search/hooks.d.ts +16 -0
  208. package/dist/search/hooks.js +35 -0
  209. package/dist/search/searchActor.d.ts +90 -0
  210. package/dist/search/searchActor.js +75 -0
  211. package/dist/state/DiagramActorProvider.d.ts +9 -7
  212. package/dist/state/DiagramActorProvider.js +24 -18
  213. package/dist/state/assign.d.ts +0 -1
  214. package/dist/state/assign.js +9 -19
  215. package/dist/state/diagram-machine.d.ts +749 -10678
  216. package/dist/state/diagram-machine.js +121 -55
  217. package/dist/state/hotkeyActor.d.ts +4 -2
  218. package/dist/state/syncManualLayoutActor.d.ts +15 -4
  219. package/dist/state/syncManualLayoutActor.js +2 -1
  220. package/dist/state/types.d.ts +7 -4
  221. package/dist/state/utils.d.ts +3 -1
  222. package/dist/state/utils.js +3 -0
  223. package/dist/styles-font.css +1 -0
  224. package/dist/styles-min.css +1 -0
  225. package/dist/styles-xyflow.css +1 -0
  226. package/dist/styles.css +1 -0
  227. package/dist/styles.css2.js +3 -0
  228. package/package.json +50 -25
  229. package/panda.buildinfo.json +1002 -0
  230. package/src/LikeC4CustomColors.tsx +21 -6
  231. package/src/LikeC4Diagram.props.ts +42 -31
  232. package/src/LikeC4Diagram.tsx +21 -20
  233. package/src/LikeC4ModelProvider.tsx +7 -6
  234. package/src/StaticLikeC4Diagram.tsx +9 -6
  235. package/src/base/Background.tsx +0 -4
  236. package/src/base/const.ts +1 -1
  237. package/src/base/index.ts +2 -1
  238. package/src/base/primitives/compound/CompoundActionButton.tsx +9 -5
  239. package/src/base/primitives/compound/CompoundDetailsButton.tsx +9 -5
  240. package/src/base/primitives/compound/CompoundNodeContainer.tsx +8 -7
  241. package/src/base/primitives/compound/CompoundTitle.tsx +3 -2
  242. package/src/base/primitives/customEdge.ts +1 -1
  243. package/src/base/primitives/{customNode.ts → customNode.tsx} +11 -3
  244. package/src/base/primitives/edge/EdgeContainer.tsx +2 -1
  245. package/src/base/primitives/edge/EdgeLabel.css.ts +1 -0
  246. package/src/base/primitives/edge/EdgeLabel.tsx +20 -15
  247. package/src/base/primitives/edge/EdgeLabelContainer.tsx +1 -1
  248. package/src/base/primitives/edge/EdgeMarkers.tsx +2 -1
  249. package/src/base/primitives/edge/EdgePath.tsx +1 -1
  250. package/src/base/primitives/element/ElementActionButtons.tsx +11 -10
  251. package/src/base/primitives/element/ElementDetailsButton.tsx +2 -1
  252. package/src/base/primitives/element/ElementNodeContainer.tsx +87 -80
  253. package/src/base/primitives/element/ElementShape.tsx +12 -10
  254. package/src/base/primitives/element/ElementTags.tsx +182 -0
  255. package/src/base/primitives/element/ElementTitle.tsx +21 -15
  256. package/src/base/primitives/index.ts +1 -0
  257. package/src/base/types.Base.ts +104 -0
  258. package/src/base/types.ts +4 -106
  259. package/src/bundle/LikeC4View.props.ts +23 -5
  260. package/src/bundle/LikeC4View.tsx +20 -19
  261. package/src/bundle/ReactLikeC4.tsx +15 -27
  262. package/src/bundle/custom.ts +1 -0
  263. package/src/bundle/index.ts +20 -1
  264. package/src/bundle/styles.css.ts +1 -1
  265. package/src/components/ErrorFallback.tsx +30 -0
  266. package/src/components/SearchControl.tsx +1 -1
  267. package/src/context/DiagramEventHandlers.tsx +5 -4
  268. package/src/context/DiagramFeatures.tsx +15 -30
  269. package/src/context/EnsureMantine.tsx +13 -3
  270. package/src/context/IconRenderer.tsx +2 -5
  271. package/src/context/ReduceGraphics.tsx +6 -6
  272. package/src/context/RootContainer.tsx +9 -3
  273. package/src/context/TagStylesContext.tsx +96 -0
  274. package/src/context/index.ts +0 -1
  275. package/src/custom/components.ts +49 -0
  276. package/src/custom/customNodes.tsx +254 -0
  277. package/src/custom/hooks.ts +36 -0
  278. package/src/custom/index.ts +5 -0
  279. package/src/hooks/index.ts +1 -1
  280. package/src/hooks/useCurrentViewId.ts +6 -1
  281. package/src/hooks/useDiagram.ts +131 -18
  282. package/src/hooks/useMantinePortalProps.ts +10 -1
  283. package/src/hooks/useSearchActor.ts +11 -0
  284. package/src/hooks/useUpdateEffect.ts +7 -4
  285. package/src/hooks/useXYFlow.ts +5 -0
  286. package/src/index.ts +4 -8
  287. package/src/likec4diagram/DiagramUI.tsx +5 -0
  288. package/src/likec4diagram/DiagramXYFlow.tsx +135 -115
  289. package/src/likec4diagram/custom/edges/RelationshipEdge.tsx +10 -1
  290. package/src/likec4diagram/custom/edges/RelationshipsDropdownMenu.tsx +17 -14
  291. package/src/likec4diagram/custom/{index.tsx → index.ts} +2 -2
  292. package/src/likec4diagram/custom/nodes/CompoundActions.tsx +2 -2
  293. package/src/likec4diagram/custom/nodes/ElementActions.tsx +100 -57
  294. package/src/likec4diagram/custom/nodes/index.ts +17 -0
  295. package/src/likec4diagram/custom/nodes/nodes.tsx +127 -0
  296. package/src/likec4diagram/custom/nodes/toolbar/CompoundToolbar.tsx +3 -4
  297. package/src/likec4diagram/custom/nodes/toolbar/ElementToolbar.tsx +3 -3
  298. package/src/likec4diagram/custom/nodes/toolbar/Toolbar.tsx +5 -4
  299. package/src/likec4diagram/custom/nodes/toolbar/_shared.tsx +11 -3
  300. package/src/likec4diagram/types.ts +24 -12
  301. package/src/likec4diagram/ui/controls/Controls.tsx +11 -4
  302. package/src/likec4diagram/ui/diagram-title/DiagramTitlePanel.tsx +1 -1
  303. package/src/likec4diagram/ui/notation/NotationPanel.tsx +3 -4
  304. package/src/likec4diagram/ui/walkthrough/DynamicViewWalkthrough.tsx +1 -1
  305. package/src/likec4diagram/useViewToNodesEdges.ts +36 -36
  306. package/src/likec4model/LikeC4ModelContext.ts +2 -2
  307. package/src/likec4model/useLikeC4ElementsTree.ts +4 -2
  308. package/src/likec4model/useLikeC4Model.ts +18 -16
  309. package/src/overlays/Overlays.tsx +7 -35
  310. package/src/overlays/element-details/ElementDetailsCard.css.ts +14 -22
  311. package/src/overlays/element-details/ElementDetailsCard.tsx +43 -34
  312. package/src/overlays/element-details/TabPanelDeployments.tsx +3 -2
  313. package/src/overlays/element-details/TabPanelRelationships.tsx +2 -1
  314. package/src/overlays/element-details/TabPanelStructure.tsx +1 -1
  315. package/src/overlays/element-details/actor.ts +2 -2
  316. package/src/overlays/overlay/Overlay.css.ts +75 -38
  317. package/src/overlays/overlay/Overlay.tsx +45 -29
  318. package/src/overlays/overlaysActor.ts +5 -4
  319. package/src/overlays/relationship-details/RelationshipDetails.tsx +5 -5
  320. package/src/overlays/relationship-details/SelectEdge.tsx +0 -2
  321. package/src/overlays/relationship-details/_types.ts +18 -14
  322. package/src/overlays/relationship-details/custom/edgeTypes.tsx +2 -2
  323. package/src/overlays/relationship-details/custom/nodeTypes.tsx +4 -0
  324. package/src/overlays/relationship-details/layout-to-xyflow.ts +1 -0
  325. package/src/overlays/relationship-details/layout.ts +3 -1
  326. package/src/overlays/relationships-browser/SelectElement.tsx +1 -1
  327. package/src/overlays/relationships-browser/_types.ts +20 -16
  328. package/src/overlays/relationships-browser/actor.ts +2 -2
  329. package/src/overlays/relationships-browser/custom/edgeTypes.tsx +2 -2
  330. package/src/overlays/relationships-browser/custom/nodeTypes.tsx +5 -2
  331. package/src/overlays/relationships-browser/layout.ts +12 -7
  332. package/src/overlays/relationships-browser/useViewToNodesEdges.ts +4 -4
  333. package/src/search/Search.tsx +237 -0
  334. package/src/{likec4diagram/ui/search → search/components}/ElementsColumn.css.ts +0 -29
  335. package/src/{likec4diagram/ui/search → search/components}/ElementsColumn.tsx +25 -25
  336. package/src/search/components/PickView.tsx +140 -0
  337. package/src/search/components/SearchByTags.tsx +109 -0
  338. package/src/{likec4diagram/ui/search → search/components}/SearchInput.tsx +63 -36
  339. package/src/{likec4diagram/ui/search → search/components}/ViewsColum.tsx +17 -18
  340. package/src/{likec4diagram/ui/search → search/components}/_shared.css.ts +26 -37
  341. package/src/{likec4diagram/ui/search/LikeC4Search.css.ts → search/components/styles.css.ts} +9 -36
  342. package/src/{likec4diagram/ui/search → search/components}/utils.ts +7 -0
  343. package/src/search/hooks.ts +41 -0
  344. package/src/search/searchActor.ts +99 -0
  345. package/src/state/DiagramActorProvider.tsx +36 -25
  346. package/src/state/assign.ts +10 -10
  347. package/src/state/diagram-machine.ts +128 -60
  348. package/src/state/hotkeyActor.ts +4 -2
  349. package/src/state/syncManualLayoutActor.ts +10 -4
  350. package/src/state/types.ts +11 -3
  351. package/src/state/utils.ts +7 -3
  352. package/src/styles-min.css +2 -0
  353. package/src/styles-xyflow.css +1 -0
  354. package/dist/_virtual/_commonjsHelpers.js +0 -5
  355. package/dist/_virtual/default-map.js +0 -7
  356. package/dist/_virtual/index.js +0 -5
  357. package/dist/_virtual/index2.js +0 -3
  358. package/dist/_virtual/react.production.js +0 -3
  359. package/dist/_virtual/set.js +0 -5
  360. package/dist/_virtual/set2.js +0 -3
  361. package/dist/base/types.js +0 -54
  362. package/dist/base/xyflowMachine.d.ts +0 -212
  363. package/dist/likec4diagram/custom/nodes/nodeTypes.d.ts +0 -8
  364. package/dist/likec4diagram/custom/nodes/nodeTypes.js +0 -92
  365. package/dist/likec4diagram/ui/search/ElementsColumn.d.ts +0 -1
  366. package/dist/likec4diagram/ui/search/LikeC4Search.css.js +0 -87
  367. package/dist/likec4diagram/ui/search/LikeC4Search.d.ts +0 -2
  368. package/dist/likec4diagram/ui/search/LikeC4Search.js +0 -267
  369. package/dist/likec4diagram/ui/search/SearchInput.d.ts +0 -1
  370. package/dist/likec4diagram/ui/search/_shared.css.d.ts +0 -4
  371. package/dist/likec4diagram/ui/search/state.d.ts +0 -19
  372. package/dist/likec4diagram/ui/search/state.js +0 -64
  373. package/dist/node_modules/.pnpm/mnemonist@0.40.3_patch_hash_5c12abb43fcff6fd81e53021b89075d53249640d165a2556cc1e58d71201a13a/node_modules/mnemonist/default-map.js +0 -172
  374. package/dist/node_modules/.pnpm/mnemonist@0.40.3_patch_hash_5c12abb43fcff6fd81e53021b89075d53249640d165a2556cc1e58d71201a13a/node_modules/mnemonist/set.js +0 -369
  375. package/dist/node_modules/.pnpm/react@19.1.0/node_modules/react/cjs/react.production.js +0 -556
  376. package/dist/node_modules/.pnpm/react@19.1.0/node_modules/react/index.js +0 -15
  377. package/dist/packages/core/src/compute-view/relationships-view/compute.js +0 -123
  378. package/dist/packages/core/src/compute-view/relationships-view/utils.js +0 -68
  379. package/dist/packages/core/src/errors/index.js +0 -15
  380. package/dist/packages/core/src/model/connection/model/ConnectionModel.js +0 -121
  381. package/dist/packages/core/src/model/connection/model/find.js +0 -39
  382. package/dist/packages/core/src/model/connection/ops.js +0 -7
  383. package/dist/packages/core/src/utils/const.js +0 -3
  384. package/dist/packages/core/src/utils/fqn.js +0 -51
  385. package/dist/packages/core/src/utils/guards.js +0 -7
  386. package/dist/packages/core/src/utils/iterable/filter.js +0 -21
  387. package/dist/packages/core/src/utils/iterable/find.js +0 -21
  388. package/dist/packages/core/src/utils/iterable/map.js +0 -18
  389. package/dist/packages/core/src/utils/iterable/some.js +0 -21
  390. package/dist/packages/core/src/utils/iterable/to.js +0 -14
  391. package/dist/packages/core/src/utils/set.js +0 -48
  392. package/dist/packages/core/src/utils/string-hash.js +0 -13
  393. package/dist/styles.css.js +0 -3
  394. package/src/base/xyflowMachine.ts +0 -75
  395. package/src/likec4diagram/custom/nodes/nodeTypes.tsx +0 -109
  396. package/src/likec4diagram/ui/search/LikeC4Search.tsx +0 -301
  397. package/src/likec4diagram/ui/search/state.ts +0 -78
  398. /package/dist/{likec4diagram/ui/search → search/components}/ElementsColumn.css.d.ts +0 -0
  399. /package/dist/{likec4diagram/ui/search → search/components}/ViewsColumn.css.d.ts +0 -0
  400. /package/dist/{likec4diagram/ui/search → search/components}/ViewsColumn.css.js +0 -0
  401. /package/dist/{bundle/font.css.js → styles-font.css2.js} +0 -0
  402. /package/src/{likec4diagram/ui/search → search/components}/ViewsColumn.css.ts +0 -0
  403. /package/src/{bundle/font.css → styles-font.css} +0 -0
@@ -1,14 +1,13 @@
1
1
  import {
2
+ type Any,
2
3
  type ComputedView,
3
4
  type DiagramView,
4
5
  type Element,
5
6
  type Fqn,
6
- type LikeC4View,
7
7
  type NodeId,
8
+ type scalar,
8
9
  type ViewId,
9
- isDeploymentView,
10
- isScopedElementView,
11
- } from '@likec4/core'
10
+ } from '@likec4/core/types'
12
11
  import { css, cx } from '@likec4/styles/css'
13
12
  import {
14
13
  type TextProps,
@@ -41,6 +40,7 @@ import type { Rect } from '@xyflow/system'
41
40
  import { type PanInfo, m, useDragControls, useMotionValue } from 'motion/react'
42
41
  import { type PropsWithChildren, useCallback, useRef, useState } from 'react'
43
42
  import { clamp, isNullish, map, only, partition, pipe } from 'remeda'
43
+ import { ElementTag } from '../../base/primitives/element/ElementTags'
44
44
  import { Link } from '../../components/Link'
45
45
  import { DiagramFeatures, IconRenderer, IfEnabled } from '../../context'
46
46
  import { useUpdateEffect } from '../../hooks'
@@ -113,7 +113,7 @@ export function ElementDetailsCard({
113
113
  defaultValue: 'Properties',
114
114
  })
115
115
  const diagram = useDiagram()
116
- const likec4model = useLikeC4Model(true)
116
+ const likec4model = useLikeC4Model()
117
117
  const viewModel = likec4model.view(viewId)
118
118
  const nodeModel = fromNode ? viewModel.findNode(fromNode) : viewModel.findNodeWithElement(fqn)
119
119
 
@@ -122,10 +122,7 @@ export function ElementDetailsCard({
122
122
  const [viewsOf, otherViews] = pipe(
123
123
  [...elementModel.views()],
124
124
  map(v => v.$view),
125
- partition(view => {
126
- const v = view as LikeC4View
127
- return isScopedElementView(v) && v.viewOf === fqn
128
- }),
125
+ partition(v => v._type === 'element' && v.viewOf === fqn),
129
126
  )
130
127
 
131
128
  let defaultView = nodeModel?.navigateTo?.$view ?? elementModel.defaultView?.$view ?? null
@@ -215,16 +212,19 @@ export function ElementDetailsCard({
215
212
  }
216
213
  }, 20)
217
214
 
215
+ /**
216
+ * This delay improves "enter" animations,
217
+ * if current tab is "Relationships"
218
+ */
218
219
  useTimeoutEffect(() => {
219
220
  setOpened(true)
220
- }, 150)
221
+ }, 200)
221
222
 
222
223
  return (
223
224
  <m.dialog
224
225
  ref={ref}
225
226
  className={cx(styles.dialog, RemoveScroll.classNames.fullWidth)}
226
227
  layout
227
- layoutRoot
228
228
  initial={{
229
229
  [styles.backdropBlur]: '0px',
230
230
  [styles.backdropOpacity]: '5%',
@@ -255,14 +255,15 @@ export function ElementDetailsCard({
255
255
  >
256
256
  <RemoveScroll forwardProps removeScrollBar={false}>
257
257
  <Card
258
+ shadow="md"
259
+ component={m.div}
260
+ layout
261
+ layoutRoot
258
262
  drag
263
+ dragControls={controls}
259
264
  dragElastic={0}
260
265
  dragMomentum={false}
261
266
  dragListener={false}
262
- dragControls={controls}
263
- withBorder
264
- shadow="md"
265
- component={m.div}
266
267
  className={cx(
267
268
  css({
268
269
  likec4Palette: nodeModel?.color ?? elementModel.color,
@@ -296,13 +297,11 @@ export function ElementDetailsCard({
296
297
  width: width as any,
297
298
  height: height as any,
298
299
  }}>
299
- <Box
300
- className={styles.cardHeader}
301
- onPointerDown={e => controls.start(e)}>
300
+ <div className={styles.cardHeader} onPointerDown={e => controls.start(e)}>
302
301
  <Group align="start" justify="space-between" gap={'sm'} mb={'sm'} wrap="nowrap">
303
302
  <Group align="start" gap={'sm'} style={{ cursor: 'default' }} wrap="nowrap">
304
303
  {elementIcon}
305
- <Box>
304
+ <div>
306
305
  <Text
307
306
  component={'div'}
308
307
  className={styles.title}>
@@ -313,7 +312,7 @@ export function ElementDetailsCard({
313
312
  {notation}
314
313
  </Text>
315
314
  )}
316
- </Box>
315
+ </div>
317
316
  </Group>
318
317
  <CloseButton
319
318
  size={'lg'}
@@ -323,22 +322,32 @@ export function ElementDetailsCard({
323
322
  }} />
324
323
  </Group>
325
324
  <Group align="baseline" gap={'sm'} wrap="nowrap">
326
- <Box>
325
+ <div>
327
326
  <SmallLabel>kind</SmallLabel>
328
327
  <Badge radius={'sm'} size="sm" fw={600} color="gray">{elementModel.kind}</Badge>
329
- </Box>
330
- <Box flex={1}>
328
+ </div>
329
+ <div style={{ flex: 1 }}>
331
330
  <SmallLabel>tags</SmallLabel>
332
- <Flex gap={4} flex={1} mt={6}>
331
+ <Flex gap={4} flex={1} mt={6} wrap="wrap">
333
332
  {elementModel.tags.map((tag) => (
334
- <Badge key={tag} radius={'sm'} size="sm" fw={600} variant="gradient">#{tag}</Badge>
333
+ <ElementTag
334
+ key={tag}
335
+ tag={tag}
336
+ css={{
337
+ cursor: 'pointer',
338
+ }}
339
+ onClick={e => {
340
+ e.stopPropagation()
341
+ diagram.openSearch(`#${tag}`)
342
+ }}
343
+ />
335
344
  ))}
336
345
  {elementModel.tags.length === 0 && <Badge radius={'sm'} size="sm" fw={600} color="gray">—</Badge>}
337
346
  </Flex>
338
- </Box>
347
+ </div>
339
348
  <ActionIconGroup
340
349
  style={{
341
- alignSelf: 'flex-end',
350
+ alignSelf: 'flex-start',
342
351
  }}>
343
352
  {defaultLink && (
344
353
  <ActionIcon
@@ -384,7 +393,7 @@ export function ElementDetailsCard({
384
393
  )}
385
394
  </ActionIconGroup>
386
395
  </Group>
387
- </Box>
396
+ </div>
388
397
  <Tabs
389
398
  value={activeTab}
390
399
  onChange={v => setActiveTab(v as any)}
@@ -452,7 +461,7 @@ export function ElementDetailsCard({
452
461
  <ViewButton
453
462
  key={view.id}
454
463
  view={view}
455
- onNavigateTo={to => diagram.navigateTo(to, fromNode ?? undefined)} />
464
+ onNavigateTo={to => diagram.navigateTo(to as scalar.ViewId, fromNode ?? undefined)} />
456
465
  ))}
457
466
  </Stack>
458
467
  </Box>
@@ -465,7 +474,7 @@ export function ElementDetailsCard({
465
474
  <ViewButton
466
475
  key={view.id}
467
476
  view={view}
468
- onNavigateTo={to => diagram.navigateTo(to, fromNode ?? undefined)} />
477
+ onNavigateTo={to => diagram.navigateTo(to as scalar.ViewId, fromNode ?? undefined)} />
469
478
  ))}
470
479
  </Stack>
471
480
  </Box>
@@ -499,18 +508,18 @@ export function ElementDetailsCard({
499
508
  )
500
509
  }
501
510
 
502
- const ViewButton = ({
511
+ const ViewButton = <A extends Any>({
503
512
  view,
504
513
  onNavigateTo,
505
514
  }: {
506
- view: ComputedView | DiagramView
507
- onNavigateTo: OnNavigateTo
515
+ view: ComputedView<A> | DiagramView<A>
516
+ onNavigateTo: OnNavigateTo<A>
508
517
  }) => {
509
518
  return (
510
519
  <UnstyledButton className={styles.viewButton} onClick={e => onNavigateTo(view.id, e)}>
511
520
  <Group gap={6} align="start" wrap="nowrap">
512
521
  <ThemeIcon size={'sm'} variant="transparent">
513
- {isDeploymentView(view)
522
+ {view._type === 'deployment'
514
523
  ? <IconStack2 stroke={1.8} />
515
524
  : <IconZoomScan stroke={1.8} />}
516
525
  </ThemeIcon>
@@ -1,4 +1,5 @@
1
- import type { Fqn, LikeC4Model } from '@likec4/core'
1
+ import type { LikeC4Model } from '@likec4/core/model'
2
+ import type { Fqn } from '@likec4/core/types'
2
3
  import { Alert, Box, Button, Group, Menu, rem, Text, ThemeIcon, Tree, useTree } from '@mantine/core'
3
4
  import { IconInfoCircle, IconTarget, IconZoomScan } from '@tabler/icons-react'
4
5
  import { type ReactNode, memo, useEffect, useMemo } from 'react'
@@ -107,7 +108,7 @@ const DeployedInstanceRenderer = (
107
108
 
108
109
  const setHoveredNode = () => {}
109
110
  export const TabPanelDeployments = memo<TabPanelDeploymentsProps>(({ elementFqn }) => {
110
- const element = useLikeC4Model(true).element(elementFqn)
111
+ const element = useLikeC4Model().element(elementFqn)
111
112
  const deployments = [...element.deployments()]
112
113
 
113
114
  const tree = useTree({
@@ -1,4 +1,5 @@
1
- import { type LikeC4Model, nameFromFqn } from '@likec4/core'
1
+ import { nameFromFqn } from '@likec4/core'
2
+ import type { LikeC4Model } from '@likec4/core/model'
2
3
  import { ActionIcon, Box, Group, Paper, Stack, Text, ThemeIcon, Tooltip as MantineTooltip } from '@mantine/core'
3
4
  import { IconArrowRight, IconExternalLink, IconInfoCircle } from '@tabler/icons-react'
4
5
  import { useSelector } from '@xstate/react'
@@ -1,4 +1,4 @@
1
- import type { LikeC4Model } from '@likec4/core'
1
+ import type { LikeC4Model } from '@likec4/core/model'
2
2
  import { Alert, Anchor, Box, Pill, Text, Tree, useTree } from '@mantine/core'
3
3
  import { IconInfoCircle } from '@tabler/icons-react'
4
4
  import { type ReactNode, useEffect, useMemo } from 'react'
@@ -1,5 +1,5 @@
1
- import { type DiagramView, type Fqn, type NodeId } from '@likec4/core'
2
- import { type Rect } from '@xyflow/system'
1
+ import type { DiagramView, Fqn, NodeId } from '@likec4/core/types'
2
+ import type { Rect } from '@xyflow/system'
3
3
  import {
4
4
  type ActorLogicFrom,
5
5
  type ActorRefFromLogic,
@@ -12,8 +12,8 @@ const dialog = css.raw({
12
12
  boxSizing: 'border-box',
13
13
  margin: 0,
14
14
  position: 'fixed',
15
- width: 'auto',
16
- height: 'auto',
15
+ width: '100vw',
16
+ height: '100vh',
17
17
  maxWidth: '100vw',
18
18
  maxHeight: '100vh',
19
19
  background: `mantine.colors.defaultBorder/50`,
@@ -26,41 +26,12 @@ const dialog = css.raw({
26
26
  [offset]: '0px',
27
27
  [inset]: 'calc((1 + var(--_level) * 0.75) * var(--_offset))',
28
28
  [backdropOpacity]: '0%',
29
+ [borderRadius]: '0px',
29
30
  _backdrop: {
30
31
  cursor: 'zoom-out',
31
- backdropFilter: `blur(var(${backdropBlur}))`,
32
- backgroundColor: {
33
- _dark: `[rgb(34 34 34 / var(${backdropOpacity}))]`,
34
- _light: `[rgb(15 15 15/ var(${backdropOpacity}))]`,
35
- },
36
- },
37
- smDown: {
38
- [borderRadius]: '0px',
39
- border: 'none',
40
- inset: 0,
41
- padding: 0,
42
- // [offset]: '0px',
43
- // [inset]: '0px',
44
- width: '100vw',
45
- height: '100vh',
46
- },
47
- sm: {
48
- inset: '[var(--_inset) var(--_inset) var(--_offset) var(--_inset)]',
49
- width: 'calc(100vw - 2 * var(--_inset))',
50
- height: 'calc(100vh - var(--_offset) - var(--_inset))',
51
- [borderRadius]: '6px',
52
- padding: '6px',
53
- [offset]: '1rem',
54
- },
55
- md: {
56
- [offset]: '1rem',
57
- },
58
- lg: {
59
- [offset]: '2rem',
60
- },
61
- xl: {
62
- [offset]: '4rem',
63
32
  },
33
+ inset: 0,
34
+ padding: 0,
64
35
  })
65
36
 
66
37
  const body = css.raw({
@@ -68,13 +39,10 @@ const body = css.raw({
68
39
  containerName: 'overlay-dialog',
69
40
  containerType: 'size',
70
41
  border: `0 solid transparent`,
71
- background: 'mantine.colors.body',
72
42
  overflow: 'hidden',
73
43
  width: '100%',
74
44
  height: '100%',
75
- sm: {
76
- borderRadius: `calc(var(${borderRadius}) - 2px)`,
77
- },
45
+ background: 'mantine.colors.body',
78
46
  })
79
47
 
80
48
  export const overlay = sva({
@@ -83,4 +51,73 @@ export const overlay = sva({
83
51
  dialog: dialog,
84
52
  body: body,
85
53
  },
54
+ variants: {
55
+ fullscreen: {
56
+ false: {
57
+ dialog: {
58
+ sm: {
59
+ inset: '[var(--_inset) var(--_inset) var(--_offset) var(--_inset)]',
60
+ width: 'calc(100vw - 2 * var(--_inset))',
61
+ height: 'calc(100vh - var(--_offset) - var(--_inset))',
62
+ [borderRadius]: '6px',
63
+ padding: '6px',
64
+ [offset]: '1rem',
65
+ },
66
+ md: {
67
+ [offset]: '1rem',
68
+ },
69
+ lg: {
70
+ [offset]: '2rem',
71
+ },
72
+ xl: {
73
+ [offset]: '4rem',
74
+ },
75
+ },
76
+ body: {
77
+ sm: {
78
+ borderRadius: `calc(var(${borderRadius}) - 2px)`,
79
+ },
80
+ },
81
+ },
82
+ true: {
83
+ dialog: {
84
+ inset: 0,
85
+ padding: 0,
86
+ },
87
+ },
88
+ },
89
+ // transparent: {
90
+ // false: {
91
+ // },
92
+ // true: {
93
+ // dialog: {
94
+ // background: 'transparent',
95
+ // },
96
+ // },
97
+ // },
98
+ withBackdrop: {
99
+ false: {
100
+ dialog: {
101
+ _backdrop: {
102
+ display: 'none',
103
+ },
104
+ },
105
+ },
106
+ true: {
107
+ dialog: {
108
+ _backdrop: {
109
+ backdropFilter: `blur(var(${backdropBlur}))`,
110
+ backgroundColor: {
111
+ _dark: `[rgb(34 34 34 / var(${backdropOpacity}))]`,
112
+ _light: `[rgb(15 15 15/ var(${backdropOpacity}))]`,
113
+ },
114
+ },
115
+ },
116
+ },
117
+ },
118
+ },
119
+ defaultVariants: {
120
+ fullscreen: false,
121
+ withBackdrop: true,
122
+ },
86
123
  })
@@ -1,22 +1,27 @@
1
1
  import { cx } from '@likec4/styles/css'
2
2
  import {
3
- Box,
4
3
  RemoveScroll,
5
4
  } from '@mantine/core'
6
5
  import { useMergedRef } from '@mantine/hooks'
7
- import { useDebouncedCallback, useSyncedRef, useTimeoutEffect } from '@react-hookz/web'
6
+ import { useDebouncedCallback, useTimeoutEffect } from '@react-hookz/web'
8
7
  import { m, useReducedMotionConfig } from 'motion/react'
9
- import { type PropsWithChildren, forwardRef, useEffect, useRef, useState } from 'react'
8
+ import { type PropsWithChildren, forwardRef, useLayoutEffect, useRef, useState } from 'react'
10
9
  import { stopPropagation } from '../../utils'
11
10
  import { backdropBlur, backdropOpacity, level as cssVarLevel, overlay as overlayCVA } from './Overlay.css'
12
11
 
13
- type OverlayProps = PropsWithChildren<{
12
+ export type OverlayProps = PropsWithChildren<{
13
+ fullscreen?: boolean | undefined
14
+ withBackdrop?: boolean | undefined
14
15
  overlayLevel?: number
15
16
  className?: string
16
17
  classes?: {
17
18
  dialog?: string
18
19
  body?: string
19
20
  }
21
+ backdrop?: {
22
+ opacity?: number
23
+ }
24
+ openDelay?: number
20
25
  onClose: () => void
21
26
  onClick?: never
22
27
  }>
@@ -27,15 +32,21 @@ export const Overlay = forwardRef<HTMLDialogElement, OverlayProps>(({
27
32
  classes,
28
33
  overlayLevel = 0,
29
34
  children,
35
+ fullscreen = false,
36
+ withBackdrop = true,
37
+ backdrop,
38
+ openDelay = 130,
30
39
  ...rest
31
40
  }, ref) => {
32
- const [opened, setOpened] = useState(false)
41
+ const [opened, setOpened] = useState(openDelay === 0)
33
42
  const dialogRef = useRef<HTMLDialogElement>(null)
34
43
  const isClosingRef = useRef(false)
35
44
 
36
45
  const motionNotReduced = useReducedMotionConfig() !== true
37
46
 
38
- const onCloseRef = useSyncedRef(onClose)
47
+ const onCloseRef = useRef(onClose)
48
+ onCloseRef.current = onClose
49
+
39
50
  const close = useDebouncedCallback(
40
51
  () => {
41
52
  if (isClosingRef.current) return
@@ -46,37 +57,30 @@ export const Overlay = forwardRef<HTMLDialogElement, OverlayProps>(({
46
57
  50,
47
58
  )
48
59
 
49
- useEffect(() => {
50
- const cancel = (e: Event) => {
51
- e.preventDefault()
52
- e.stopPropagation()
53
- close()
54
- }
55
- dialogRef.current?.addEventListener('cancel', cancel, { capture: true })
56
- return () => {
57
- dialogRef.current?.removeEventListener('cancel', cancel, { capture: true })
58
- }
59
- }, [])
60
-
61
- useTimeoutEffect(() => {
60
+ useLayoutEffect(() => {
62
61
  if (!dialogRef.current?.open) {
63
62
  // Move dialog to the top of the DOM
64
63
  dialogRef.current?.showModal()
65
64
  }
66
- }, 30)
65
+ }, [])
67
66
 
68
67
  useTimeoutEffect(() => {
69
68
  setOpened(true)
70
- }, 120)
69
+ }, openDelay > 0 ? openDelay : undefined)
71
70
 
72
71
  const styles = overlayCVA({
73
- level: overlayLevel as 0 | 1 | 2 | 3,
72
+ fullscreen,
73
+ withBackdrop,
74
74
  })
75
75
 
76
+ let targetBackdropOpacity = overlayLevel > 0 ? '50%' : '60%'
77
+ if (backdrop?.opacity !== undefined) {
78
+ targetBackdropOpacity = `${backdrop.opacity * 100}%`
79
+ }
76
80
  return (
77
81
  <m.dialog
78
82
  ref={useMergedRef(dialogRef, ref)}
79
- className={cx(RemoveScroll.classNames.fullWidth, styles.dialog, classes?.dialog, className)}
83
+ className={cx(RemoveScroll.classNames.fullWidth, classes?.dialog, className, styles.dialog)}
80
84
  layout
81
85
  style={{
82
86
  // @ts-ignore
@@ -87,21 +91,28 @@ export const Overlay = forwardRef<HTMLDialogElement, OverlayProps>(({
87
91
  initial: {
88
92
  [backdropBlur]: '0px',
89
93
  [backdropOpacity]: '0%',
90
- scale: overlayLevel > 0 ? 0.9 : 1.075,
94
+ scale: 0.95,
95
+ originY: 0,
96
+ translateY: -20,
91
97
  opacity: 0,
92
98
  },
93
99
  animate: {
94
100
  [backdropBlur]: overlayLevel > 0 ? '4px' : '8px',
95
- [backdropOpacity]: overlayLevel > 0 ? '50%' : '60%',
101
+ [backdropOpacity]: targetBackdropOpacity,
96
102
  scale: 1,
97
103
  opacity: 1,
104
+ translateY: 0,
98
105
  transition: {
99
106
  delay: 0.075,
100
107
  },
101
108
  },
102
109
  exit: {
103
- scale: 1.2,
104
110
  opacity: 0,
111
+ scale: 0.98,
112
+ translateY: -20,
113
+ transition: {
114
+ duration: 0.1,
115
+ },
105
116
  [backdropBlur]: '0px',
106
117
  [backdropOpacity]: '0%',
107
118
  },
@@ -109,7 +120,7 @@ export const Overlay = forwardRef<HTMLDialogElement, OverlayProps>(({
109
120
  : {
110
121
  initial: {
111
122
  [backdropBlur]: '8px',
112
- [backdropOpacity]: '60%',
123
+ [backdropOpacity]: targetBackdropOpacity,
113
124
  },
114
125
  }}
115
126
  onClick={e => {
@@ -119,6 +130,11 @@ export const Overlay = forwardRef<HTMLDialogElement, OverlayProps>(({
119
130
  return
120
131
  }
121
132
  }}
133
+ onCancel={e => {
134
+ e.preventDefault()
135
+ e.stopPropagation()
136
+ close()
137
+ }}
122
138
  onDoubleClick={stopPropagation}
123
139
  onPointerDown={stopPropagation}
124
140
  onClose={e => {
@@ -128,9 +144,9 @@ export const Overlay = forwardRef<HTMLDialogElement, OverlayProps>(({
128
144
  {...rest}
129
145
  >
130
146
  <RemoveScroll forwardProps removeScrollBar={false}>
131
- <Box className={cx(styles.body, 'overlay-body', classes?.body)}>
147
+ <div className={cx(classes?.body, styles.body, 'overlay-body')}>
132
148
  {opened && <>{children}</>}
133
- </Box>
149
+ </div>
134
150
  </RemoveScroll>
135
151
  </m.dialog>
136
152
  )
@@ -1,4 +1,4 @@
1
- import type { Fqn } from '@likec4/core'
1
+ import type { Fqn } from '@likec4/core/types'
2
2
  import { getHotkeyHandler } from '@mantine/hooks'
3
3
  import type { KeyboardEvent } from 'react'
4
4
  import { isString, last, reverse } from 'remeda'
@@ -7,7 +7,6 @@ import {
7
7
  type ActorRefFrom,
8
8
  type SnapshotFrom,
9
9
  assertEvent,
10
- assign,
11
10
  enqueueActions,
12
11
  fromCallback,
13
12
  setup,
@@ -59,7 +58,7 @@ const hotkeyLogic = fromCallback(({ sendBack }: {
59
58
  }
60
59
  })
61
60
 
62
- export const overlaysActorLogic = setup({
61
+ const _overlaysActorLogic = setup({
63
62
  types: {
64
63
  context: {} as OverlaysContext,
65
64
  events: {} as OverlayActorEvent,
@@ -278,6 +277,8 @@ export const overlaysActorLogic = setup({
278
277
  ],
279
278
  })
280
279
 
281
- export interface OverlaysActorLogic extends ActorLogicFrom<typeof overlaysActorLogic> {}
280
+ export interface OverlaysActorLogic extends ActorLogicFrom<typeof _overlaysActorLogic> {}
281
+ export const overlaysActorLogic: OverlaysActorLogic = _overlaysActorLogic
282
+
282
283
  export type OverlaysActorSnapshot = SnapshotFrom<OverlaysActorLogic>
283
284
  export interface OverlaysActorRef extends ActorRefFrom<OverlaysActorLogic> {}
@@ -1,10 +1,10 @@
1
1
  import { type DiagramEdge, type DiagramView, invariant, isAncestor, nonNullable } from '@likec4/core'
2
+ import { cx as clsx } from '@likec4/styles/css'
2
3
  import { ActionIcon, Group } from '@mantine/core'
3
4
  import { useCallbackRef, useStateHistory } from '@mantine/hooks'
4
5
  import { IconChevronLeft, IconChevronRight, IconX } from '@tabler/icons-react'
5
6
  import { useSelector } from '@xstate/react'
6
7
  import { Panel, ReactFlowProvider, useReactFlow, useStoreApi } from '@xyflow/react'
7
- import clsx from 'clsx'
8
8
  import { deepEqual } from 'fast-equals'
9
9
  import { AnimatePresence, LayoutGroup, m } from 'motion/react'
10
10
  import { memo, useEffect, useMemo, useRef } from 'react'
@@ -83,7 +83,7 @@ const selectSubject = (state: RelationshipDetailsSnapshot) => ({
83
83
  const SyncRelationshipDetailsXYFlow = memo(() => {
84
84
  const actor = useRelationshipDetailsActor()
85
85
  const subject = useSelector(actor, selectSubject, deepEqual)
86
- const likec4model = useLikeC4Model(true)
86
+ const likec4model = useLikeC4Model()
87
87
  const view = likec4model.findView(subject.viewId) ?? null
88
88
  const data = useMemo(() => {
89
89
  let data: RelationshipDetailsViewData
@@ -224,7 +224,7 @@ const topLeftPanelselector = ({ context }: RelationshipDetailsSnapshot) => ({
224
224
  })
225
225
  const TopLeftPanel = memo(() => {
226
226
  const { subject, viewId } = useRelationshipDetailsState(topLeftPanelselector, deepEqual)
227
- const likec4model = useLikeC4Model(true)
227
+ const likec4model = useLikeC4Model()
228
228
  const view = likec4model.findView(viewId)
229
229
 
230
230
  if (!view || !view.isDiagram()) {
@@ -239,8 +239,8 @@ const TopLeftPanel = memo(() => {
239
239
  find(edges, (e) => e.source.element?.id === subject.source && e.target.element?.id === subject.target)
240
240
  || find(edges, (e) => {
241
241
  return (e.source.element?.id === subject.source ||
242
- isAncestor(e.source.element?.id ?? '--', subject.source ?? '__')) &&
243
- (e.target.element?.id === subject.target || isAncestor(e.target.element?.id ?? '', subject.target ?? '__'))
242
+ isAncestor(e.source.element?.id ?? '__', subject.source ?? '__')) &&
243
+ (e.target.element?.id === subject.target || isAncestor(e.target.element?.id ?? '__', subject.target ?? '__'))
244
244
  })
245
245
  )
246
246
  if (!edge) {
@@ -8,11 +8,9 @@ import {
8
8
  ScrollAreaAutosize,
9
9
  Text,
10
10
  ThemeIcon,
11
- useComputedColorScheme,
12
11
  } from '@mantine/core'
13
12
  import { IconArrowRight, IconSelector } from '@tabler/icons-react'
14
13
  import { useRef } from 'react'
15
- import { useMantinePortalProps } from '../../hooks'
16
14
  import { useRelationshipDetails } from './hooks'
17
15
  import * as css from './SelectEdge.css'
18
16