@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,4 +1,5 @@
1
- import type { Color, DiagramNode, Fqn, IconUrl, RelationId, RelationshipLineType, ViewId } from '@likec4/core'
1
+ import type { Color, DiagramNode, Fqn, IconUrl, RelationId, RelationshipLineType, ViewId } from '@likec4/core/types'
2
+ import type { Simplify } from 'type-fest'
2
3
  import type { Base, NonOptional, ReactFlowEdge, ReactFlowNode } from '../../base/types'
3
4
 
4
5
  export namespace RelationshipDetailsTypes {
@@ -11,7 +12,8 @@ export namespace RelationshipDetailsTypes {
11
12
  out: string[]
12
13
  }
13
14
 
14
- export type ElementNodeData = Base.NodeData<
15
+ export type ElementNodeData =
16
+ & Base.NodeData
15
17
  & NonOptional<
16
18
  Pick<
17
19
  DiagramNode,
@@ -24,6 +26,7 @@ export namespace RelationshipDetailsTypes {
24
26
  | 'height'
25
27
  | 'navigateTo'
26
28
  | 'style'
29
+ | 'tags'
27
30
  >
28
31
  >
29
32
  & {
@@ -32,9 +35,9 @@ export namespace RelationshipDetailsTypes {
32
35
  icon: IconUrl
33
36
  ports: Ports
34
37
  }
35
- >
36
38
 
37
- export type CompoundNodeData = Base.NodeData<
39
+ export type CompoundNodeData =
40
+ & Base.NodeData
38
41
  & NonOptional<
39
42
  Pick<
40
43
  DiagramNode,
@@ -50,7 +53,6 @@ export namespace RelationshipDetailsTypes {
50
53
  icon?: IconUrl
51
54
  ports: Ports
52
55
  }
53
- >
54
56
 
55
57
  export type ElementNode = ReactFlowNode<ElementNodeData, 'element'>
56
58
 
@@ -61,15 +63,17 @@ export namespace RelationshipDetailsTypes {
61
63
 
62
64
  // Extend the edge types provided by SharedFlowTypes with RelationshipsOfEdgeData
63
65
 
64
- export type EdgeData = Base.EdgeData<{
65
- relationId: RelationId
66
- color: Color | undefined
67
- label: string | null
68
- technology?: string | undefined
69
- description?: string | undefined
70
- navigateTo: ViewId | null
71
- line: RelationshipLineType
72
- }>
66
+ export type EdgeData = Simplify<
67
+ Base.EdgeData & {
68
+ relationId: RelationId
69
+ color: Color | undefined
70
+ label: string | null
71
+ technology?: string | undefined
72
+ description?: string | undefined
73
+ navigateTo: ViewId | null
74
+ line: RelationshipLineType
75
+ }
76
+ >
73
77
 
74
78
  export type Edge = ReactFlowEdge<EdgeData, 'relationship'>
75
79
  }
@@ -7,12 +7,12 @@ import {
7
7
  EdgeLabelContainer,
8
8
  EdgePath,
9
9
  } from '../../../base/primitives'
10
- import { useEnabledFeature } from '../../../context'
10
+ import { useEnabledFeatures } from '../../../context'
11
11
  import { useDiagram } from '../../../hooks/useDiagram'
12
12
  import type { RelationshipDetailsTypes } from '../_types'
13
13
 
14
14
  export const RelationshipEdge = customEdge<RelationshipDetailsTypes.EdgeData>((props) => {
15
- const { enableNavigateTo } = useEnabledFeature('NavigateTo')
15
+ const { enableNavigateTo } = useEnabledFeatures()
16
16
  const {
17
17
  sourceX,
18
18
  targetY,
@@ -5,6 +5,7 @@ import {
5
5
  ElementDetailsButton,
6
6
  ElementNodeContainer,
7
7
  ElementShape,
8
+ ElementTags,
8
9
  ElementTitle,
9
10
  } from '../../../base/primitives'
10
11
  import { ElementActions } from './ElementActions'
@@ -12,6 +13,7 @@ import { ElementActions } from './ElementActions'
12
13
  import { Handle } from '@xyflow/react'
13
14
  import { Position } from '@xyflow/system'
14
15
  import type { NodeProps } from '../../../base'
16
+ import { useEnabledFeatures } from '../../../context/DiagramFeatures'
15
17
  import { useDiagram } from '../../../hooks/useDiagram'
16
18
  import type { RelationshipDetailsTypes } from '../_types'
17
19
 
@@ -30,10 +32,12 @@ const ElementDetailsButtonWithHandler = (props: NodeProps<RelationshipDetailsTyp
30
32
  }
31
33
 
32
34
  export const ElementNode = customNode<RelationshipDetailsTypes.ElementNodeData>((props) => {
35
+ const { enableElementTags } = useEnabledFeatures()
33
36
  return (
34
37
  <ElementNodeContainer nodeProps={props}>
35
38
  <ElementShape {...props} />
36
39
  <ElementTitle {...props} />
40
+ {enableElementTags && <ElementTags {...props} />}
37
41
  <ElementDetailsButtonWithHandler {...props} />
38
42
  <ElementActions {...props} />
39
43
  <ElementPorts {...props} />
@@ -119,6 +119,7 @@ export function layoutResultToXYFlow(
119
119
  icon: node.icon ?? 'none',
120
120
  ports: node.ports,
121
121
  style: node.style,
122
+ tags: node.tags,
122
123
  ...navigateTo,
123
124
  },
124
125
  },
@@ -394,11 +394,13 @@ export function layoutRelationshipDetails(
394
394
  return {
395
395
  id: id as NodeId,
396
396
  parent: parentId as NodeId ?? null,
397
+ x: position.x,
398
+ y: position.y,
397
399
  position: [position.x, position.y],
398
400
  title: element.title,
399
401
  description: element.description,
400
402
  technology: element.technology,
401
- tags: null,
403
+ tags: [...element.tags],
402
404
  links: null,
403
405
  color: inheritFromNodeOrAncestor?.color ?? element.color,
404
406
  shape: inheritFromNode?.shape ?? element.shape,
@@ -47,7 +47,7 @@ export const SelectElement = memo(() => {
47
47
 
48
48
  const root = useRef<HTMLDivElement>(null)
49
49
  const viewport = useRef<HTMLDivElement>(null)
50
- const model = useLikeC4Model(true)
50
+ const model = useLikeC4Model()
51
51
  const subject = model.findElement(subjectId)
52
52
  const data = useLikeC4ElementsTree(scope === 'view' && viewId ? viewId : undefined)
53
53
  const tree = useTree({
@@ -7,7 +7,8 @@ import type {
7
7
  RelationId,
8
8
  RelationshipLineType,
9
9
  ViewId,
10
- } from '@likec4/core'
10
+ } from '@likec4/core/types'
11
+ import type { Simplify } from 'type-fest'
11
12
  import type { Base, NonOptional, ReactFlowEdge, ReactFlowNode } from '../../base/types'
12
13
 
13
14
  export namespace RelationshipsBrowserTypes {
@@ -21,7 +22,8 @@ export namespace RelationshipsBrowserTypes {
21
22
  out: string[]
22
23
  }
23
24
 
24
- export type ElementNodeData = Base.NodeData<
25
+ export type ElementNodeData = Simplify<
26
+ & Base.NodeData
25
27
  & NonOptional<
26
28
  Pick<
27
29
  DiagramNode,
@@ -33,6 +35,7 @@ export namespace RelationshipsBrowserTypes {
33
35
  | 'style'
34
36
  | 'width'
35
37
  | 'height'
38
+ | 'tags'
36
39
  | 'navigateTo'
37
40
  >
38
41
  >
@@ -45,7 +48,8 @@ export namespace RelationshipsBrowserTypes {
45
48
  }
46
49
  >
47
50
 
48
- export type CompoundNodeData = Base.NodeData<
51
+ export type CompoundNodeData = Simplify<
52
+ & Base.NodeData
49
53
  & NonOptional<
50
54
  Pick<
51
55
  DiagramNode,
@@ -71,9 +75,7 @@ export namespace RelationshipsBrowserTypes {
71
75
 
72
76
  // export type NonEmptyNode = ElementNode | CompoundNode
73
77
 
74
- export type EmptyNodeData = Base.NodeData<{
75
- column: Column
76
- }>
78
+ export type EmptyNodeData = Base.NodeData & { column: Column }
77
79
 
78
80
  export type EmptyNode = ReactFlowNode<EmptyNodeData, 'empty'>
79
81
 
@@ -82,16 +84,18 @@ export namespace RelationshipsBrowserTypes {
82
84
 
83
85
  // Extend the edge types provided by SharedFlowTypes with RelationshipsOfEdgeData
84
86
 
85
- export type EdgeData = Base.EdgeData<{
86
- sourceFqn: Fqn
87
- targetFqn: Fqn
88
- relations: NonEmptyArray<RelationId>
89
- color: Color | undefined
90
- label: string | null
91
- navigateTo: ViewId | null
92
- line: RelationshipLineType
93
- existsInCurrentView: boolean
94
- }>
87
+ export type EdgeData = Simplify<
88
+ Base.EdgeData & {
89
+ sourceFqn: Fqn
90
+ targetFqn: Fqn
91
+ relations: NonEmptyArray<RelationId>
92
+ color: Color | undefined
93
+ label: string | null
94
+ navigateTo: ViewId | null
95
+ line: RelationshipLineType
96
+ existsInCurrentView: boolean
97
+ }
98
+ >
95
99
 
96
100
  export type Edge = ReactFlowEdge<EdgeData, 'relationship'>
97
101
  }
@@ -186,7 +186,7 @@ export type Input = {
186
186
  // parentRef?: AnyActorRef| null
187
187
  }
188
188
 
189
- export type Context = Readonly<{
189
+ export interface Context {
190
190
  subject: Fqn
191
191
  viewId: ViewId | null
192
192
  scope: 'global' | 'view'
@@ -200,7 +200,7 @@ export type Context = Readonly<{
200
200
  navigateFromNode: string | null
201
201
  xynodes: RelationshipsBrowserTypes.Node[]
202
202
  xyedges: RelationshipsBrowserTypes.Edge[]
203
- }>
203
+ }
204
204
 
205
205
  export type Events =
206
206
  | { type: 'xyflow.init'; instance: XYFLowInstance; store: XYStoreApi }
@@ -9,14 +9,14 @@ import {
9
9
  EdgeLabelContainer,
10
10
  EdgePath,
11
11
  } from '../../../base/primitives'
12
- import { useEnabledFeature } from '../../../context'
12
+ import { useEnabledFeatures } from '../../../context'
13
13
  import { useDiagram } from '../../../hooks/useDiagram'
14
14
  import type { RelationshipsBrowserTypes } from '../_types'
15
15
  import { useRelationshipsBrowser } from '../hooks'
16
16
 
17
17
  export const RelationshipEdge = customEdge<RelationshipsBrowserTypes.EdgeData>((props) => {
18
18
  const browser = useRelationshipsBrowser()
19
- const { enableNavigateTo } = useEnabledFeature('NavigateTo')
19
+ const { enableNavigateTo } = useEnabledFeatures()
20
20
  const {
21
21
  id,
22
22
  data: {
@@ -1,6 +1,5 @@
1
1
  import { Handle } from '@xyflow/react'
2
2
  import { Position } from '@xyflow/system'
3
- import * as m from 'motion/react-m'
4
3
  import type { NodeProps } from '../../../base'
5
4
  import {
6
5
  CompoundNodeContainer,
@@ -9,8 +8,10 @@ import {
9
8
  ElementDetailsButton,
10
9
  ElementNodeContainer,
11
10
  ElementShape,
11
+ ElementTags,
12
12
  ElementTitle,
13
13
  } from '../../../base/primitives'
14
+ import { useEnabledFeatures } from '../../../context/DiagramFeatures'
14
15
  import { useDiagram } from '../../../hooks/useDiagram'
15
16
  import type { RelationshipsBrowserTypes } from '../_types'
16
17
  import { ElementActions } from './ElementActions'
@@ -33,10 +34,12 @@ const ElementDetailsButtonWithHandler = (
33
34
  }
34
35
 
35
36
  export const ElementNode = customNode<RelationshipsBrowserTypes.ElementNodeData>((props) => {
37
+ const { enableElementTags } = useEnabledFeatures()
36
38
  return (
37
- <ElementNodeContainer key={props.id} component={m.div} layoutId={props.id} nodeProps={props}>
39
+ <ElementNodeContainer key={props.id} layoutId={props.id} nodeProps={props}>
38
40
  <ElementShape {...props} />
39
41
  <ElementTitle {...props} />
42
+ {enableElementTags && <ElementTags {...props} />}
40
43
  <ElementDetailsButtonWithHandler {...props} />
41
44
  <ElementActions {...props} />
42
45
  <ElementPorts {...props} />
@@ -23,9 +23,10 @@ import {
23
23
  DefaultMap,
24
24
  ifind,
25
25
  invariant,
26
+ nonNullable,
26
27
  toArray,
27
28
  } from '@likec4/core'
28
- import type { AnyAux, ElementModel, LikeC4ViewModel, RelationshipModel } from '@likec4/core/model'
29
+ import type { ElementModel, LikeC4ViewModel, RelationshipModel } from '@likec4/core/model'
29
30
  import {
30
31
  concat,
31
32
  filter,
@@ -216,7 +217,7 @@ export namespace LayoutRelationshipsViewResult {
216
217
 
217
218
  export function layoutRelationshipsView(
218
219
  data: RelationshipsViewData,
219
- scope: LikeC4ViewModel<AnyAux> | null,
220
+ scope: LikeC4ViewModel | null,
220
221
  ): Omit<LayoutRelationshipsViewResult, 'subject'> {
221
222
  const g = createGraph()
222
223
 
@@ -459,12 +460,14 @@ export function layoutRelationshipsView(
459
460
  return {
460
461
  id: id as NodeId,
461
462
  parent: null,
463
+ x: position.x,
464
+ y: position.y,
462
465
  position: [position.x, position.y],
463
466
  title: 'empty node',
464
467
  description: null,
465
468
  technology: null,
466
- tags: null,
467
- links: null,
469
+ tags: [],
470
+ links: [],
468
471
  color: 'muted',
469
472
  shape: 'rectangle',
470
473
  style: {
@@ -508,11 +511,13 @@ export function layoutRelationshipsView(
508
511
  return {
509
512
  id: id as NodeId,
510
513
  parent: parentId as NodeId ?? null,
514
+ x: position.x,
515
+ y: position.y,
511
516
  position: [position.x, position.y],
512
517
  title: element.title,
513
518
  description: element.description,
514
519
  technology: element.technology,
515
- tags: null,
520
+ tags: [...element.tags],
516
521
  links: null,
517
522
  color: inheritFromNodeOrAncestor?.color ?? element.color,
518
523
  shape: inheritFromNode?.shape ?? element.shape,
@@ -568,7 +573,7 @@ export function layoutRelationshipsView(
568
573
  relations,
569
574
  sourceHandle,
570
575
  targetHandle,
571
- } = find(edges, e => e.name === ename)!
576
+ } = nonNullable(find(edges, e => e.name === ename))
572
577
  const onlyRelation = only(relations)
573
578
  const label = onlyRelation?.title ?? 'untitled'
574
579
  const isMultiple = relations.length > 1
@@ -602,7 +607,7 @@ export function useRelationshipsView(
602
607
  viewId: ViewId | null,
603
608
  scope: 'global' | 'view',
604
609
  ): LayoutRelationshipsViewResult {
605
- const model = useLikeC4Model(true)
610
+ const model = useLikeC4Model()
606
611
  return useMemo(() => {
607
612
  const view = viewId ? model.findView(viewId) : null
608
613
  const data = layoutRelationshipsView(
@@ -1,7 +1,6 @@
1
1
  import {
2
2
  type Fqn,
3
- DiagramNode,
4
- ElementKind,
3
+ GroupElementKind,
5
4
  invariant,
6
5
  nonNullable,
7
6
  Queue,
@@ -47,7 +46,7 @@ export function viewToNodesEdge(
47
46
  let next: TraverseItem | undefined
48
47
  while ((next = queue.dequeue())) {
49
48
  const { node, parent } = next
50
- const isCompound = hasAtLeast(node.children, 1) || node.kind == ElementKind.Group
49
+ const isCompound = hasAtLeast(node.children, 1) || node.kind == GroupElementKind
51
50
  if (isCompound) {
52
51
  for (const child of node.children) {
53
52
  queue.enqueue({ node: nodeById(child), parent: node })
@@ -83,7 +82,7 @@ export function viewToNodesEdge(
83
82
  }),
84
83
  } satisfies Omit<RelationshipsBrowserTypes.Node, 'data' | 'type'>
85
84
 
86
- const fqn = DiagramNode.modelRef(node)
85
+ const fqn = node.modelRef ?? null
87
86
  // const deploymentRef = DiagramNode.deploymentRef(node)
88
87
  // if (!fqn) {
89
88
  // console.error('Invalid node', node)
@@ -148,6 +147,7 @@ export function viewToNodesEdge(
148
147
  ports: node.ports,
149
148
  style: node.style,
150
149
  existsInCurrentView: node.existsInCurrentView,
150
+ tags: node.tags,
151
151
  ...navigateTo,
152
152
  },
153
153
  },
@@ -0,0 +1,237 @@
1
+ import { css } from '@likec4/styles/css'
2
+ import { VStack } from '@likec4/styles/jsx'
3
+ import { FocusTrap, Grid, GridCol, Group, ScrollArea, Title } from '@mantine/core'
4
+ import {
5
+ useCallbackRef,
6
+ useHotkeys,
7
+ } from '@mantine/hooks'
8
+ import { useTimeoutEffect } from '@react-hookz/web'
9
+ import { useSelector } from '@xstate/react'
10
+ import { AnimatePresence, LayoutGroup } from 'motion/react'
11
+ import { memo, useRef } from 'react'
12
+ import { ErrorBoundary } from 'react-error-boundary'
13
+ import { isTruthy } from 'remeda'
14
+ import { ErrorFallback } from '../components/ErrorFallback'
15
+ import { DiagramFeatures } from '../context/DiagramFeatures'
16
+ import { Overlay } from '../overlays/overlay/Overlay'
17
+ import { ElementsColumn } from './components/ElementsColumn'
18
+ import { PickView } from './components/PickView'
19
+ import { SearchByTags } from './components/SearchByTags'
20
+ import { LikeC4SearchInput } from './components/SearchInput'
21
+ import { focusToFirstFoundElement, moveFocusToSearchInput } from './components/utils'
22
+ import { ViewsColumn } from './components/ViewsColum'
23
+ import { SearchActorContext, usePickViewFor } from './hooks'
24
+ import { type SearchActorRef, type SearchActorSnapshot } from './searchActor'
25
+
26
+ const dialog = css({
27
+ backgroundColor: `[rgb(34 34 34 / var(--_opacity, 95%))]`,
28
+ _light: {
29
+ backgroundColor: `[rgb(250 250 250 / var(--_opacity, 95%))]`,
30
+ },
31
+ backdropFilter: 'auto',
32
+ backdropBlur: 'var(--_blur, 10px)',
33
+ // base: `[rgb(34 34 34 / var(${backdropOpacity}))]`,
34
+ // _light: `[rgb(255 255 255/ var(${backdropOpacity}))]`,
35
+ // },
36
+ })
37
+
38
+ const body = css({
39
+ // containerName: 'likec4-search',
40
+ // containerType: 'size',
41
+ // position: 'fixed',
42
+ // zIndex: 901,
43
+ // top: 0,
44
+ // left: 0,
45
+ width: '100%',
46
+ height: '100%',
47
+ maxHeight: '100vh',
48
+ overflow: 'hidden',
49
+ display: 'flex',
50
+ flexDirection: 'column',
51
+ justifyContent: 'stretch',
52
+ gap: 'sm',
53
+ paddingTop: 20,
54
+ paddingLeft: 16,
55
+ paddingRight: 16,
56
+ paddingBottom: 8,
57
+ background: '[transparent]',
58
+ // backgroundColor: {
59
+ // _dark: `[rgb(34 34 34 / 0.95)]`,
60
+ // _light: `[rgb(255 255 255/ 0.95)]`,
61
+ // },
62
+ })
63
+
64
+ const selectIsOpened = (s: SearchActorSnapshot) => !s.matches('inactive')
65
+
66
+ export const Search = memo<{ searchActorRef: SearchActorRef }>(({ searchActorRef }) => {
67
+ const isOpened = useSelector(searchActorRef, selectIsOpened)
68
+
69
+ const openSearch = () => {
70
+ searchActorRef.send({ type: 'open' })
71
+ }
72
+
73
+ const sendClose = () => {
74
+ searchActorRef.send({ type: 'close' })
75
+ }
76
+
77
+ const afterCloseCbRef = useRef<(() => void)>(null)
78
+ const close = useCallbackRef((cb?: () => void) => {
79
+ afterCloseCbRef.current = cb ?? null
80
+ sendClose()
81
+ })
82
+ const onExitComplete = useCallbackRef(() => {
83
+ if (afterCloseCbRef.current) {
84
+ afterCloseCbRef.current()
85
+ afterCloseCbRef.current = null
86
+ }
87
+ })
88
+
89
+ useHotkeys([
90
+ ['mod+k', openSearch, {
91
+ preventDefault: true,
92
+ }],
93
+ ['mod+f', openSearch, {
94
+ preventDefault: true,
95
+ }],
96
+ ])
97
+
98
+ return (
99
+ <SearchActorContext
100
+ value={{
101
+ searchActorRef,
102
+ close,
103
+ }}>
104
+ <DiagramFeatures.Overlays>
105
+ <ErrorBoundary FallbackComponent={ErrorFallback} onReset={sendClose}>
106
+ <LayoutGroup>
107
+ <AnimatePresence onExitComplete={onExitComplete}>
108
+ {isOpened && (
109
+ <Overlay
110
+ fullscreen
111
+ withBackdrop={false}
112
+ backdrop={{
113
+ opacity: 0.9,
114
+ }}
115
+ classes={{
116
+ dialog,
117
+ body,
118
+ }}
119
+ openDelay={0}
120
+ onClose={close}
121
+ data-likec4-search="true"
122
+ >
123
+ <SearchOverlay close={close} searchActorRef={searchActorRef} />
124
+ </Overlay>
125
+ )}
126
+ </AnimatePresence>
127
+ </LayoutGroup>
128
+ </ErrorBoundary>
129
+ </DiagramFeatures.Overlays>
130
+ </SearchActorContext>
131
+ )
132
+ })
133
+
134
+ const scrollArea = css({
135
+ height: [
136
+ '100%',
137
+ '100cqh',
138
+ ],
139
+ '& .mantine-ScrollArea-viewport': {
140
+ minHeight: '100%',
141
+ '& > div': {
142
+ minHeight: '100%',
143
+ height: '100%',
144
+ },
145
+ },
146
+ })
147
+
148
+ const SearchOverlay = ({ close, searchActorRef }: { close: () => void; searchActorRef: SearchActorRef }) => {
149
+ const pickViewFor = usePickViewFor()
150
+
151
+ useTimeoutEffect(() => {
152
+ if (isTruthy(searchActorRef.getSnapshot().context.openedWithSearch)) {
153
+ focusToFirstFoundElement()
154
+ }
155
+ }, 150)
156
+
157
+ return (
158
+ <FocusTrap>
159
+ <Group
160
+ className={'group'}
161
+ wrap="nowrap"
162
+ onClick={e => {
163
+ e.stopPropagation()
164
+ moveFocusToSearchInput()
165
+ }}>
166
+ <VStack flex={1} px={'sm'}>
167
+ <LikeC4SearchInput />
168
+ <SearchByTags />
169
+ </VStack>
170
+ {
171
+ /* <Box
172
+ css={{
173
+ alignSelf: 'flex-start',
174
+ flex: '0 0 auto',
175
+ display: 'flex',
176
+ alignItems: 'center',
177
+ justifyContent: 'center',
178
+ minHeight: 50,
179
+ }}>
180
+ <ActionIcon
181
+ size={'lg'}
182
+ variant="default"
183
+ onClick={(e) => {
184
+ e.stopPropagation()
185
+ close()
186
+ }}>
187
+ <IconX />
188
+ </ActionIcon>
189
+ </Box> */
190
+ }
191
+ </Group>
192
+ <Grid>
193
+ <GridCol span={6}>
194
+ <Title component={'div'} order={6} c="dimmed" pl="sm">Elements</Title>
195
+ </GridCol>
196
+ <GridCol span={6}>
197
+ <Title component={'div'} order={6} c="dimmed" pl="sm">Views</Title>
198
+ </GridCol>
199
+ </Grid>
200
+ <Grid
201
+ className={css({
202
+ containerName: 'likec4-search-elements',
203
+ containerType: 'size',
204
+ overflow: 'hidden',
205
+ flexGrow: 1,
206
+ })}>
207
+ <GridCol span={6}>
208
+ <ScrollArea
209
+ type="scroll"
210
+ className={scrollArea}
211
+ pr="xs"
212
+ scrollbars="y">
213
+ <AnimatePresence>
214
+ <LayoutGroup id="likec4-search-elements">
215
+ <ElementsColumn />
216
+ </LayoutGroup>
217
+ </AnimatePresence>
218
+ </ScrollArea>
219
+ </GridCol>
220
+ <GridCol span={6}>
221
+ <ScrollArea
222
+ type="scroll"
223
+ className={scrollArea}
224
+ pr="xs"
225
+ scrollbars="y">
226
+ <AnimatePresence>
227
+ <LayoutGroup id="likec4-search-views">
228
+ <ViewsColumn />
229
+ </LayoutGroup>
230
+ </AnimatePresence>
231
+ </ScrollArea>
232
+ </GridCol>
233
+ </Grid>
234
+ {pickViewFor && <PickView elementFqn={pickViewFor} />}
235
+ </FocusTrap>
236
+ )
237
+ }
@@ -14,7 +14,6 @@ export const treeRoot = css(
14
14
  containerName: 'likec4-tree',
15
15
  }),
16
16
  {
17
- overflow: 'hidden',
18
17
  containerType: 'inline-size',
19
18
  height: '100%',
20
19
  },
@@ -65,40 +64,12 @@ export const elementId = css({
65
64
  },
66
65
  })
67
66
 
68
- // const iconSizeVar = `var(${iconSize}, 32px)`
69
67
  export const elementIcon = css({
70
68
  ['--likec4-icon-size']: '24px',
71
69
  [whenContainerIsNarrow]: {
72
70
  ['--likec4-icon-size']: '18px',
73
71
  },
74
72
  })
75
- // flex: `0 0 ${iconSizeVar}`,
76
- // height: iconSizeVar,
77
- // width: iconSizeVar,
78
- // display: 'flex',
79
- // alignItems: 'center',
80
- // justifyContent: 'center',
81
- // alignSelf: 'flex-start',
82
- // marginTop: 4,
83
- // [`& svg, & img`]: {
84
- // width: '100%',
85
- // height: 'auto',
86
- // maxHeight: '100%',
87
- // pointerEvents: 'none',
88
- // },
89
- // [`& img`]: {
90
- // objectFit: 'contain',
91
- // },
92
- // '&.likec4-shape-icon svg': {
93
- // color: `[var(${iconColor})]`,
94
- // width: '90%',
95
- // strokeWidth: 1.5,
96
- // },
97
- // [iconSize]: '24px',
98
- // [whenContainerIsNarrow]: {
99
- // [iconSize]: '18px',
100
- // },
101
- // })
102
73
 
103
74
  export const elementViewsCount = css({
104
75
  flex: 0,