@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,11 +1,11 @@
1
- import { DiagramEdge } from '@likec4/core';
1
+ import { DiagramEdge } from '@likec4/core/types';
2
2
  import { BoxProps } from '@likec4/styles/jsx';
3
- import { PropsWithChildren } from 'react';
3
+ import { PropsWithChildren, ForwardRefExoticComponent, RefAttributes } from 'react';
4
4
  import { UndefinedOnPartialDeep } from 'type-fest';
5
5
  import { EdgeProps } from '../../types';
6
6
  type Data = UndefinedOnPartialDeep<Pick<DiagramEdge, 'label' | 'technology'>>;
7
7
  type EdgeLabelProps = PropsWithChildren<BoxProps & {
8
8
  edgeProps: EdgeProps<Data>;
9
9
  }>;
10
- export declare function EdgeLabel({ edgeProps: { id, data: { label, technology, }, }, className, style, children, ...rest }: EdgeLabelProps): import("react/jsx-runtime").JSX.Element;
10
+ export declare const EdgeLabel: ForwardRefExoticComponent<Omit<EdgeLabelProps, "ref"> & RefAttributes<HTMLDivElement>>;
11
11
  export {};
@@ -3,11 +3,11 @@ import { isStepEdgeId, extractStep } from '@likec4/core';
3
3
  import { cx } from '@likec4/styles/css';
4
4
  import { Box } from '@likec4/styles/jsx';
5
5
  import { Text } from '@mantine/core';
6
- import '../../../_virtual/index.js';
6
+ import { forwardRef } from 'react';
7
7
  import { isTruthy } from 'remeda';
8
8
  import { labelsva } from './EdgeLabel.css.js';
9
9
 
10
- function EdgeLabel({
10
+ const EdgeLabel = forwardRef(({
11
11
  edgeProps: {
12
12
  id,
13
13
  data: {
@@ -19,12 +19,12 @@ function EdgeLabel({
19
19
  style,
20
20
  children,
21
21
  ...rest
22
- }) {
22
+ }, ref) => {
23
23
  const stepNum = isStepEdgeId(id) ? extractStep(id) : null;
24
24
  const classes = labelsva({
25
25
  isStepEdge: stepNum !== null
26
26
  });
27
- return /* @__PURE__ */ jsxs(Box, { className: cx(classes.root, className), ...rest, children: [
27
+ return /* @__PURE__ */ jsxs(Box, { ref, className: cx(classes.root, className), ...rest, children: [
28
28
  stepNum !== null && /* @__PURE__ */ jsx(Box, { className: classes.stepNumber, children: stepNum }),
29
29
  /* @__PURE__ */ jsxs(Box, { className: classes.labelContents, children: [
30
30
  isTruthy(label) && /* @__PURE__ */ jsx(Text, { component: "div", className: classes.labelText, lineClamp: 5, children: label }),
@@ -32,6 +32,7 @@ function EdgeLabel({
32
32
  children
33
33
  ] })
34
34
  ] });
35
- }
35
+ });
36
+ EdgeLabel.displayName = "EdgeLabel";
36
37
 
37
38
  export { EdgeLabel };
@@ -1,4 +1,4 @@
1
- import { DiagramEdge } from '@likec4/core';
1
+ import { DiagramEdge } from '@likec4/core/types';
2
2
  import { HTMLAttributes } from 'react';
3
3
  import { UndefinedOnPartialDeep } from 'type-fest';
4
4
  import { EdgeProps } from '../../types';
@@ -1,8 +1,6 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
- import '@likec4/core';
3
2
  import { cx, css } from '@likec4/styles/css';
4
3
  import { EdgeLabelRenderer } from '@xyflow/react';
5
- import '../../../_virtual/index.js';
6
4
  import { isNumber } from 'remeda';
7
5
  import { ZIndexes } from '../../const.js';
8
6
  import { edgeVars } from './edge.css.js';
@@ -1,4 +1,4 @@
1
- import { RelationshipArrowType } from '@likec4/core';
1
+ import { RelationshipArrowType } from '@likec4/core/types';
2
2
  import { SVGProps } from 'react';
3
3
  export declare const EdgeMarkers: {
4
4
  Arrow: (props: SVGProps<SVGMarkerElement>) => import("react/jsx-runtime").JSX.Element;
@@ -1,4 +1,4 @@
1
- import { DiagramEdge } from '@likec4/core';
1
+ import { DiagramEdge } from '@likec4/core/types';
2
2
  import { PointerEventHandler, ForwardRefExoticComponent, RefAttributes } from 'react';
3
3
  import { UndefinedOnPartialDeep } from 'type-fest';
4
4
  import { EdgeProps } from '../../types';
@@ -1,10 +1,10 @@
1
1
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
2
  import { cx, css } from '@likec4/styles/css';
3
- import { r as reactExports } from '../../../_virtual/index.js';
3
+ import { forwardRef } from 'react';
4
4
  import { hideOnReducedGraphics, markerContext, edgePathBg, cssEdgePath } from './edge.css.js';
5
5
  import { arrowTypeToMarker, EdgeMarkers } from './EdgeMarkers.js';
6
6
 
7
- const EdgePath = reactExports.forwardRef(({
7
+ const EdgePath = forwardRef(({
8
8
  edgeProps: {
9
9
  id,
10
10
  data: {
@@ -1,7 +1,8 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import { css, cx } from '@likec4/styles/css';
3
+ import { Box } from '@likec4/styles/jsx';
3
4
  import { actionBtn } from '@likec4/styles/recipes';
4
- import { Box, ActionIcon } from '@mantine/core';
5
+ import { ActionIcon } from '@mantine/core';
5
6
  import { useId } from '@mantine/hooks';
6
7
  import * as m from 'motion/react-m';
7
8
  import { useIsZoomTooSmall } from '../../../hooks/useXYFlow.js';
@@ -9,11 +10,12 @@ import { stopPropagation } from '../../../utils/xyflow.js';
9
10
 
10
11
  const container = css({
11
12
  position: "absolute",
12
- top: `calc(100% - 28px)`,
13
- // transform: 'translateY(-100%)',
14
- left: 0,
15
- width: "100%",
16
- minHeight: "28px",
13
+ zIndex: 1,
14
+ top: `calc(100% - 30px)`,
15
+ transform: "translateX(-50%)",
16
+ left: `50%`,
17
+ width: "auto",
18
+ minHeight: "30px",
17
19
  display: "flex",
18
20
  justifyContent: "center",
19
21
  alignItems: "center",
@@ -40,14 +42,13 @@ function ElementActionButtons({
40
42
  return null;
41
43
  }
42
44
  return /* @__PURE__ */ jsx(Box, { className: container, children: /* @__PURE__ */ jsx(
43
- Box,
45
+ m.div,
44
46
  {
45
- component: m.div,
46
47
  layoutRoot: true,
47
48
  initial: false,
48
49
  style: {
49
50
  originY: 0,
50
- gap: "8px"
51
+ gap: 6
51
52
  },
52
53
  animate: {
53
54
  opacity: isHovered || selected ? 1 : 0.75,
@@ -1,7 +1,8 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import { cx, css } from '@likec4/styles/css';
3
+ import { Box } from '@likec4/styles/jsx';
3
4
  import { actionBtn } from '@likec4/styles/recipes';
4
- import { Box, ActionIcon } from '@mantine/core';
5
+ import { ActionIcon } from '@mantine/core';
5
6
  import { useId } from '@mantine/hooks';
6
7
  import { IconId } from '@tabler/icons-react';
7
8
  import * as m from 'motion/react-m';
@@ -1,31 +1,33 @@
1
- import { DiagramNode, ElementStyle, ShapeSize, SpacingSize, TextSize } from '@likec4/core';
2
- import { BoxProps, PolymorphicComponentProps } from '@mantine/core';
3
- import { PropsWithChildren, FunctionComponent, ReactNode } from 'react';
1
+ import { Color, ElementShape, ElementStyle } from '@likec4/core/types';
2
+ import { LayoutProps } from 'motion/react';
3
+ import { CSSProperties, ReactNode, ForwardRefExoticComponent, RefAttributes } from 'react';
4
4
  import { NodeProps } from '../../types';
5
- type RequiredData = Pick<DiagramNode, 'color' | 'shape' | 'style'>;
6
- type ElementNodeContainerProps = BoxProps & PropsWithChildren<{
5
+ import { ShapeSize, SpacingSize, TextSize } from '@likec4/core';
6
+ export type RequiredData = {
7
+ color: Color;
8
+ shape: ElementShape;
9
+ style?: ElementStyle;
10
+ };
11
+ export type ElementNodeContainerProps = {
7
12
  nodeProps: NodeProps<RequiredData>;
8
- }>;
13
+ children?: ReactNode | undefined;
14
+ className?: string | undefined;
15
+ style?: CSSProperties | undefined;
16
+ [key: `data-${string}`]: string | undefined;
17
+ } & LayoutProps;
9
18
  export declare function nodeSizes({ size, padding, textSize, }: ElementStyle): {
10
19
  size: ShapeSize;
11
20
  padding: SpacingSize;
12
21
  textSize: TextSize;
13
22
  };
14
- export declare const ElementNodeContainer: (<C = "div">(props: PolymorphicComponentProps<C, ElementNodeContainerProps>) => React.ReactElement) & Omit< FunctionComponent<(BoxProps & {
15
- nodeProps: NodeProps<RequiredData>;
16
- } & {
17
- children?: ReactNode | undefined;
18
- } & {
19
- component?: any;
20
- } & Omit<Omit<any, "ref">, "children" | keyof BoxProps | "nodeProps" | "component"> & {
21
- ref?: any;
22
- renderRoot?: (props: any) => any;
23
- }) | (BoxProps & {
23
+ /**
24
+ * Top-level primitive to compose leaf nodes renderers.
25
+ * This container provides the state via data-* attributes
26
+ */
27
+ export declare const ElementNodeContainer: ForwardRefExoticComponent<{
28
+ [key: `data-${string}`]: string | undefined;
24
29
  nodeProps: NodeProps<RequiredData>;
25
- } & {
26
30
  children?: ReactNode | undefined;
27
- } & {
28
- component: React.ElementType;
29
- renderRoot?: (props: Record<string, any>) => any;
30
- })>, never> & Record<string, never>;
31
- export {};
31
+ className?: string | undefined;
32
+ style?: CSSProperties | undefined;
33
+ } & LayoutProps & RefAttributes<HTMLDivElement>>;
@@ -1,9 +1,8 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
- import { DefaultShapeSize, DefaultTextSize, DefaultPaddingSize } from '@likec4/core';
2
+ import { DefaultShapeSize, DefaultTextSize, DefaultPaddingSize } from '@likec4/core/types';
3
3
  import { cx, css } from '@likec4/styles/css';
4
- import { createPolymorphicComponent, Box } from '@mantine/core';
5
4
  import * as m from 'motion/react-m';
6
- import { r as reactExports } from '../../../_virtual/index.js';
5
+ import { forwardRef } from 'react';
7
6
  import { container } from './ElementNodeContainer.css.js';
8
7
 
9
8
  function nodeSizes({
@@ -29,73 +28,72 @@ function nodeSizes({
29
28
  textSize
30
29
  };
31
30
  }
32
- const ElementNodeContainer = createPolymorphicComponent(
33
- reactExports.forwardRef(({
34
- nodeProps: {
35
- selected = false,
36
- selectable = false,
37
- data: {
38
- hovered: isHovered = false,
39
- dimmed: isDimmed = false,
40
- ...data
41
- }
42
- },
43
- style,
44
- children,
45
- ...rest
46
- }, ref) => {
47
- let scale = 1;
48
- switch (true) {
49
- case isHovered:
50
- scale = 1.05;
51
- break;
52
- case selected:
53
- scale = 1.02;
54
- break;
31
+ const ElementNodeContainer = forwardRef(({
32
+ nodeProps: {
33
+ selected = false,
34
+ selectable = false,
35
+ data: {
36
+ hovered: isHovered = false,
37
+ dimmed: isDimmed = false,
38
+ ...data
55
39
  }
56
- const {
57
- size,
58
- padding,
59
- textSize
60
- } = nodeSizes(data.style);
61
- return /* @__PURE__ */ jsx(
62
- Box,
63
- {
64
- component: m.div,
65
- ref,
66
- className: cx(
67
- css({
68
- likec4Palette: data.color
69
- }),
70
- container,
71
- "group",
72
- "likec4-element-node"
73
- ),
74
- initial: false,
75
- ...selectable && {
76
- animate: {
77
- scale
78
- },
79
- whileTap: { scale: 0.98 }
80
- },
81
- "data-likec4-hovered": isHovered,
82
- "data-likec4-color": data.color,
83
- "data-likec4-shape": data.shape,
84
- "data-likec4-shape-size": size,
85
- "data-likec4-spacing": padding,
86
- "data-likec4-text-size": textSize,
87
- ...isDimmed !== false && {
88
- "data-likec4-dimmed": isDimmed
89
- },
90
- style: {
91
- ...style
40
+ },
41
+ className,
42
+ style,
43
+ children,
44
+ ...rest
45
+ }, ref) => {
46
+ let scale = 1;
47
+ switch (true) {
48
+ case isHovered:
49
+ scale = 1.05;
50
+ break;
51
+ case selected:
52
+ scale = 1.02;
53
+ break;
54
+ }
55
+ const {
56
+ size,
57
+ padding,
58
+ textSize
59
+ } = nodeSizes(data.style ?? {});
60
+ return /* @__PURE__ */ jsx(
61
+ m.div,
62
+ {
63
+ ref,
64
+ className: cx(
65
+ css({
66
+ likec4Palette: data.color
67
+ }),
68
+ container,
69
+ "group",
70
+ "likec4-element-node",
71
+ className
72
+ ),
73
+ initial: false,
74
+ ...selectable && {
75
+ animate: {
76
+ scale
92
77
  },
93
- ...rest,
94
- children
95
- }
96
- );
97
- })
98
- );
78
+ whileTap: { scale: 0.98 }
79
+ },
80
+ "data-likec4-hovered": isHovered,
81
+ "data-likec4-color": data.color,
82
+ "data-likec4-shape": data.shape,
83
+ "data-likec4-shape-size": size,
84
+ "data-likec4-spacing": padding,
85
+ "data-likec4-text-size": textSize,
86
+ ...isDimmed !== false && {
87
+ "data-likec4-dimmed": isDimmed
88
+ },
89
+ style: {
90
+ ...style
91
+ },
92
+ ...rest,
93
+ children
94
+ }
95
+ );
96
+ });
99
97
  ElementNodeContainer.displayName = "ElementNodeContainer";
100
98
 
101
99
  export { ElementNodeContainer, nodeSizes };
@@ -1,4 +1,4 @@
1
- import { DiagramNode, ElementShape } from '@likec4/core';
1
+ import { ElementShape, ElementStyle } from '@likec4/core/types';
2
2
  export declare function cylinderSVGPath(diameter: number, height: number, tilt?: number): {
3
3
  path: string;
4
4
  ry: number;
@@ -9,18 +9,22 @@ type ElementShapeProps = {
9
9
  w: number;
10
10
  h: number;
11
11
  };
12
- type Data = Pick<DiagramNode, 'shape' | 'width' | 'height'>;
12
+ type Data = {
13
+ shape: ElementShape;
14
+ width: number;
15
+ height: number;
16
+ style?: ElementStyle;
17
+ };
13
18
  type ElementShapePrimitiveProps = {
14
19
  data: Data;
15
20
  width?: number;
16
21
  height?: number;
17
- isMultiple?: boolean | undefined;
18
22
  /**
19
23
  * @default true
20
24
  */
21
25
  withSelectedIndicator?: boolean | undefined;
22
26
  };
23
- export declare function ElementShape({ data, width, height, isMultiple, withSelectedIndicator }: ElementShapePrimitiveProps): import("react/jsx-runtime").JSX.Element;
27
+ export declare function ElementShape({ data, width, height, withSelectedIndicator }: ElementShapePrimitiveProps): import("react/jsx-runtime").JSX.Element;
24
28
  /**
25
29
  * When element is selected, this component is used to render the indicator
26
30
  */
@@ -1,6 +1,6 @@
1
1
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
2
  import { nonexhaustive } from '@likec4/core';
3
- import clsx from 'clsx';
3
+ import { cx } from '@likec4/styles/css';
4
4
  import { toDomPrecision } from '../../../utils/xyflow.js';
5
5
  import { shapeSvgMultiple, shapeSvg, fillMixStroke, fillElementFill, indicator } from './ElementShape.css.js';
6
6
 
@@ -148,11 +148,12 @@ function ElementShapeSvg({ shape, w, h }) {
148
148
  }
149
149
  }
150
150
  }
151
- function ElementShape({ data, width, height, isMultiple = false, withSelectedIndicator = true }) {
151
+ function ElementShape({ data, width, height, withSelectedIndicator = true }) {
152
152
  let w = !!width && width > 10 ? width : data.width;
153
153
  let h = !!height && height > 10 ? height : data.height;
154
+ const isMultiple = data.style?.multiple ?? false;
154
155
  return /* @__PURE__ */ jsxs(Fragment, { children: [
155
- isMultiple && /* @__PURE__ */ jsx("svg", { className: clsx(shapeSvgMultiple), viewBox: `0 0 ${w} ${h}`, children: /* @__PURE__ */ jsx(ElementShapeSvg, { shape: data.shape, w, h }) }),
156
+ isMultiple && /* @__PURE__ */ jsx("svg", { className: cx(shapeSvgMultiple), viewBox: `0 0 ${w} ${h}`, children: /* @__PURE__ */ jsx(ElementShapeSvg, { shape: data.shape, w, h }) }),
156
157
  /* @__PURE__ */ jsxs("svg", { className: shapeSvg, viewBox: `0 0 ${w} ${h}`, children: [
157
158
  withSelectedIndicator && /* @__PURE__ */ jsx(SelectedIndicator, { shape: data.shape, w, h }),
158
159
  /* @__PURE__ */ jsx(ElementShapeSvg, { shape: data.shape, w, h })
@@ -0,0 +1,14 @@
1
+ import { BoxProps } from '@likec4/styles/jsx';
2
+ import { NodeProps } from '../../types';
3
+ import { ForwardRefExoticComponent, RefAttributes, MemoExoticComponent } from 'react';
4
+ export type ElementTagProps = {
5
+ tag: string;
6
+ } & Omit<BoxProps, 'children'>;
7
+ export declare const ElementTag: ForwardRefExoticComponent<Omit<ElementTagProps, "ref"> & RefAttributes<HTMLDivElement>>;
8
+ type Data = {
9
+ tags: readonly string[] | null | undefined;
10
+ width: number;
11
+ };
12
+ type ElementTagsProps = NodeProps<Data>;
13
+ export declare const ElementTags: MemoExoticComponent<({ id, data: { tags, width } }: ElementTagsProps) => import("react/jsx-runtime").JSX.Element | null>;
14
+ export {};
@@ -0,0 +1,176 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { isTagColorSpecified } from '@likec4/core';
3
+ import { cx, css } from '@likec4/styles/css';
4
+ import { Box, HStack } from '@likec4/styles/jsx';
5
+ import { hstack } from '@likec4/styles/patterns';
6
+ import { likec4tag } from '@likec4/styles/recipes';
7
+ import { HoverCard } from '@mantine/core';
8
+ import { deepEqual } from 'fast-equals';
9
+ import { memo, useCallback, forwardRef } from 'react';
10
+ import { useTagSpecification } from '../../../context/TagStylesContext.js';
11
+ import { useDiagram } from '../../../hooks/useDiagram.js';
12
+ import { useMantinePortalProps } from '../../../hooks/useMantinePortalProps.js';
13
+ import { useCurrentZoom } from '../../../hooks/useXYFlow.js';
14
+ import { stopPropagation } from '../../../utils/xyflow.js';
15
+
16
+ const ElementTag = forwardRef(
17
+ ({ tag, className, ...props }, ref) => {
18
+ const spec = useTagSpecification(tag);
19
+ return /* @__PURE__ */ jsxs(
20
+ Box,
21
+ {
22
+ ref,
23
+ "data-likec4-tag": tag,
24
+ className: cx(
25
+ likec4tag({
26
+ autoTextColor: isTagColorSpecified(spec)
27
+ }),
28
+ className
29
+ ),
30
+ ...props,
31
+ children: [
32
+ /* @__PURE__ */ jsx("span", { style: { opacity: 0.7, fontSize: "1.05em" }, children: "#" }),
33
+ /* @__PURE__ */ jsx("span", { children: tag })
34
+ ]
35
+ }
36
+ );
37
+ }
38
+ );
39
+ const propsAreEqual = (prev, next) => {
40
+ return prev.data.width === next.data.width && deepEqual(prev.data.tags, next.data.tags);
41
+ };
42
+ const ElementTags = memo(({ id, data: { tags, width } }) => {
43
+ const zoom = useCurrentZoom();
44
+ const zoomIsLargeEnough = zoom > 1.2;
45
+ const portalProps = useMantinePortalProps();
46
+ if (!tags || tags.length === 0) {
47
+ return null;
48
+ }
49
+ const maxWidth = Math.max(Math.round(width * zoom) - 10, 200);
50
+ return /* @__PURE__ */ jsxs(
51
+ HoverCard,
52
+ {
53
+ ...portalProps,
54
+ floatingStrategy: "fixed",
55
+ position: "bottom-start",
56
+ offset: {
57
+ alignmentAxis: Math.round(4 * zoom),
58
+ mainAxis: 8
59
+ },
60
+ keepMounted: false,
61
+ openDelay: 300,
62
+ closeDelay: 500,
63
+ children: [
64
+ /* @__PURE__ */ jsx(HoverCard.Target, { children: /* @__PURE__ */ jsx(
65
+ "div",
66
+ {
67
+ className: cx(
68
+ "likec4-element-tags",
69
+ hstack({
70
+ pointerEvents: "all",
71
+ gap: 4,
72
+ alignItems: "flex-end",
73
+ justifyItems: "stretch",
74
+ position: "absolute",
75
+ width: "100%",
76
+ bottom: 0,
77
+ left: 0,
78
+ padding: 4,
79
+ _shapeCylinder: {
80
+ bottom: 5
81
+ },
82
+ _shapeStorage: {
83
+ bottom: 5
84
+ },
85
+ _shapeQueue: {
86
+ bottom: 0,
87
+ paddingLeft: 14
88
+ }
89
+ })
90
+ ),
91
+ onClick: stopPropagation,
92
+ children: tags.map((tag) => /* @__PURE__ */ jsx(
93
+ Box,
94
+ {
95
+ "data-likec4-tag": tag,
96
+ className: css({
97
+ layerStyle: "likec4.tag",
98
+ flex: 1,
99
+ display: "flex",
100
+ alignItems: "center",
101
+ justifyContent: "center",
102
+ maxWidth: 50,
103
+ height: 5,
104
+ _whenHovered: {
105
+ height: 12,
106
+ borderRadius: 4,
107
+ transitionDelay: ".08s"
108
+ },
109
+ transition: "fast"
110
+ })
111
+ },
112
+ id + "#" + tag
113
+ ))
114
+ }
115
+ ) }),
116
+ /* @__PURE__ */ jsx(
117
+ HoverCard.Dropdown,
118
+ {
119
+ p: 0,
120
+ w: "auto",
121
+ maw: maxWidth,
122
+ className: css({
123
+ background: "transparent",
124
+ border: "none"
125
+ }),
126
+ children: /* @__PURE__ */ jsx(ElementTagsDropdown, { tags, zoomIsLargeEnough })
127
+ }
128
+ )
129
+ ]
130
+ }
131
+ );
132
+ }, propsAreEqual);
133
+ ElementTags.displayName = "ElementTags";
134
+ function ElementTagsDropdown({ tags, zoomIsLargeEnough }) {
135
+ const diagram = useDiagram();
136
+ const onHover = (tag) => {
137
+ diagram.send({ type: "tag.highlight", tag });
138
+ };
139
+ const onLeave = useCallback(() => {
140
+ diagram.send({ type: "tag.unhighlight" });
141
+ }, []);
142
+ return /* @__PURE__ */ jsx(
143
+ HStack,
144
+ {
145
+ css: {
146
+ gap: 4,
147
+ flexWrap: "wrap",
148
+ pb: "sm"
149
+ },
150
+ children: tags.map((tag) => /* @__PURE__ */ jsx(
151
+ ElementTag,
152
+ {
153
+ tag,
154
+ className: css({
155
+ userSelect: "none",
156
+ cursor: "pointer",
157
+ ...zoomIsLargeEnough && {
158
+ fontSize: "lg",
159
+ borderRadius: 4,
160
+ px: 6
161
+ }
162
+ }),
163
+ onClick: (e) => {
164
+ e.stopPropagation();
165
+ diagram.openSearch(`#${tag}`);
166
+ },
167
+ onMouseEnter: () => onHover(tag),
168
+ onMouseLeave: onLeave
169
+ },
170
+ tag
171
+ ))
172
+ }
173
+ );
174
+ }
175
+
176
+ export { ElementTag, ElementTags };
@@ -1,7 +1,7 @@
1
1
  import { SlotRecipeRuntimeFn } from '@likec4/styles/types';
2
2
  export declare const iconSize = "--icon-size";
3
3
  export declare const elementIcon: string;
4
- export declare const elementTitle: SlotRecipeRuntimeFn<"title" | "technology" | "description" | "root" | "textContainer", {
4
+ export declare const elementTitle: SlotRecipeRuntimeFn<"root" | "title" | "technology" | "description" | "textContainer", {
5
5
  hasIcon: {
6
6
  false: {};
7
7
  true: {
@@ -1,8 +1,9 @@
1
- import { DiagramNode } from '@likec4/core';
2
- import { NodeProps } from '../../types';
3
- type Data = Pick<DiagramNode, 'title' | 'technology' | 'description' | 'color' | 'style'> & {
1
+ import { DiagramNode } from '@likec4/core/types';
2
+ import { Simplify } from 'type-fest';
3
+ import { NodeProps, NonOptional } from '../../types';
4
+ type Data = Simplify<NonOptional<Pick<DiagramNode, 'title' | 'technology' | 'description' | 'color' | 'style'>> & {
4
5
  icon?: string | null;
5
- };
6
+ }>;
6
7
  type ElementTitleProps = NodeProps<Data> & {
7
8
  iconSize?: number;
8
9
  };
@@ -1,7 +1,7 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
- import '@likec4/core';
3
2
  import { cx } from '@likec4/styles/css';
4
- import { Box, Text } from '@mantine/core';
3
+ import { Box } from '@likec4/styles/jsx';
4
+ import { Text } from '@mantine/core';
5
5
  import { isTruthy, isEmpty, isNumber } from 'remeda';
6
6
  import { IconRenderer } from '../../../context/IconRenderer.js';
7
7
  import { nodeSizes } from './ElementNodeContainer.js';
@@ -31,11 +31,10 @@ function ElementTitle({ id, data, iconSize: iconSize$1 }) {
31
31
  classes.root,
32
32
  "likec4-element"
33
33
  ),
34
- style: {
35
- ...isNumber(iconSize$1) && {
36
- [iconSize]: `${iconSize$1}px`
37
- }
38
- },
34
+ style: isNumber(iconSize$1) ? {
35
+ // @ts-ignore
36
+ [iconSize]: `${iconSize$1}px`
37
+ } : void 0,
39
38
  children: [
40
39
  elementIcon$1,
41
40
  /* @__PURE__ */ jsxs(Box, { className: cx(classes.textContainer, "likec4-element-main-props"), children: [