@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
package/src/base/types.ts CHANGED
@@ -4,8 +4,8 @@ import type {
4
4
  Node as RFNode,
5
5
  NodeProps as ReactFlowNodeProps,
6
6
  } from '@xyflow/react'
7
- import { hasSubObject } from 'remeda'
8
7
  import type { OptionalKeysOf, SetRequired, Simplify } from 'type-fest'
8
+ import * as Base from './types.Base'
9
9
 
10
10
  /**
11
11
 
@@ -40,8 +40,8 @@ export type NonOptional<T extends object, Keys extends OptionalKeysOf<T> = Optio
40
40
  /**
41
41
  * ReactFlow Custom Node properties with BaseNodeData at least
42
42
  */
43
- export type NodeProps<T extends Record<string, unknown> = {}> = ReactFlowNodeProps<
44
- RFNode<Base.NodeData & T, any>
43
+ export type NodeProps<T extends Record<string, unknown> = {}, NodeType extends string = string> = ReactFlowNodeProps<
44
+ RFNode<Base.NodeData & T, NodeType>
45
45
  >
46
46
 
47
47
  /**
@@ -64,106 +64,4 @@ export type ReactFlowEdge<Data extends Record<string, unknown>, EdgeType extends
64
64
  'type' | 'data'
65
65
  >
66
66
 
67
- export namespace Base {
68
- // 'immediate' means that the node is dimmed without delay
69
- export type Dimmed = 'immediate' | boolean
70
-
71
- export type NodeData<Data extends Record<string, unknown> = {}> = Simplify<
72
- Data & {
73
- /**
74
- * Whether the cursor is hovering over the node
75
- */
76
- hovered?: boolean
77
- /**
78
- * Whether the node is dimmed
79
- * 'immediate' means that the node is dimmed without delay
80
- */
81
- dimmed?: Dimmed
82
- }
83
- >
84
-
85
- export type Node = RFNode<NodeData>
86
-
87
- export type NodeProps = ReactFlowNodeProps<RFNode<Base.NodeData, any>>
88
-
89
- export type EdgeData<Data extends Record<string, unknown> = {}> = Simplify<
90
- Data & {
91
- /**
92
- * Whether the cursor is hovering over the edge
93
- */
94
- hovered?: boolean
95
- /**
96
- * Whether the edge is active (animated and highlighted)
97
- */
98
- active?: boolean
99
- /**
100
- * Whether the edge is dimmed
101
- * 'immediate' means that the edge is dimmed without delay
102
- */
103
- dimmed?: Dimmed
104
- }
105
- >
106
-
107
- // export type Edge = SetRequired<ReactFlowEdge<EdgeData, 'relation'>, 'data' | 'type'>
108
- export type Edge = SetRequired<RFEdge<EdgeData>, 'data'>
109
-
110
- type WithDimmed = { data: { dimmed?: Dimmed } }
111
- type WithHovered = { data: { hovered?: boolean } }
112
-
113
- const _setDimmed = <T extends WithDimmed>(v: T, dimmed: Dimmed): T =>
114
- (v.data.dimmed ?? false) === dimmed ? v : ({
115
- ...v,
116
- data: {
117
- ...v.data,
118
- dimmed,
119
- },
120
- })
121
-
122
- export function setDimmed<T extends WithDimmed>(value: T, dimmed: 'immediate' | boolean): T
123
- export function setDimmed(dimmed: 'immediate' | boolean): <T extends WithDimmed>(value: T) => T
124
- export function setDimmed<T extends WithDimmed>(arg1: T | Dimmed, arg2?: Dimmed) {
125
- if (arg2 !== undefined) {
126
- return _setDimmed(arg1 as T, arg2)
127
- }
128
- return (v: T) => _setDimmed(v, arg1 as Dimmed)
129
- }
130
-
131
- const _setHovered = <T extends WithHovered>(v: T, hovered: boolean): T =>
132
- (v.data.hovered ?? false) === hovered ? v : ({
133
- ...v,
134
- data: {
135
- ...v.data,
136
- hovered,
137
- },
138
- })
139
- export function setHovered<T extends WithHovered>(value: T, hovered: boolean): T
140
- export function setHovered(hovered: boolean): <T extends WithHovered>(value: T) => T
141
- export function setHovered<T extends WithHovered>(arg1: T | boolean, arg2?: boolean) {
142
- if (arg2 !== undefined) {
143
- return _setHovered(arg1 as T, arg2)
144
- }
145
- return (v: T) => _setHovered(v, arg1 as boolean)
146
- }
147
-
148
- type WithData<D> = { data: D }
149
- function _setData<D, E extends WithData<D>>(value: E, state: Partial<NoInfer<D>>): E {
150
- if (hasSubObject(value.data as any, state as any)) {
151
- return value
152
- }
153
- return {
154
- ...value,
155
- data: {
156
- ...value.data,
157
- ...state,
158
- },
159
- }
160
- }
161
- export function setData<E extends WithData<any>>(value: E, state: Partial<E['data']>): E
162
- export function setData<E extends WithData<any>>(state: Partial<E['data']>): (value: E) => E
163
- export function setData<E extends WithData<any>>(arg1: E | Partial<E['data']>, arg2?: any) {
164
- if (arg2 !== undefined) {
165
- return _setData(arg1 as E, arg2)
166
- }
167
- return (edge: E) => _setData(edge, arg1 as Partial<EdgeData>)
168
- }
169
- }
67
+ export * as Base from './types.Base'
@@ -1,12 +1,13 @@
1
- import type { WhereOperator } from '@likec4/core'
1
+ import type { WhereOperator } from '@likec4/core/types'
2
+ import type * as aux from '@likec4/core/types/aux'
2
3
  import type { CSSProperties } from 'react'
3
- import type { ElementIconRenderer, OverrideReactFlowProps, PaddingWithUnit } from '../LikeC4Diagram.props'
4
+ import type { CustomNodes, ElementIconRenderer, OverrideReactFlowProps, PaddingWithUnit } from '../LikeC4Diagram.props'
4
5
 
5
- export interface LikeC4ViewProps<ViewId = string, Tag = string, Kind = string> {
6
+ export interface LikeC4ViewProps<A extends aux.Any> {
6
7
  /**
7
8
  * View to display.
8
9
  */
9
- viewId: ViewId
10
+ viewId: aux.ViewId<A>
10
11
 
11
12
  /**
12
13
  * Enable/disable panning
@@ -110,6 +111,12 @@ export interface LikeC4ViewProps<ViewId = string, Tag = string, Kind = string> {
110
111
  */
111
112
  enableElementDetails?: boolean | undefined
112
113
 
114
+ /**
115
+ * Display element tags in the bottom left corner
116
+ * @default false
117
+ */
118
+ enableElementTags?: boolean | undefined
119
+
113
120
  /**
114
121
  * Experimental feature to browse relationships
115
122
  *
@@ -130,7 +137,7 @@ export interface LikeC4ViewProps<ViewId = string, Tag = string, Kind = string> {
130
137
  */
131
138
  reduceGraphics?: 'auto' | boolean | undefined
132
139
 
133
- where?: WhereOperator<Tag, Kind> | undefined
140
+ where?: WhereOperator<A> | undefined
134
141
 
135
142
  /**
136
143
  * Override some react flow props
@@ -148,6 +155,11 @@ export interface LikeC4ViewProps<ViewId = string, Tag = string, Kind = string> {
148
155
  /** Function to generate nonce attribute added to all generated `<style />` tags */
149
156
  styleNonce?: string | (() => string) | undefined
150
157
 
158
+ /**
159
+ * Override node renderers
160
+ */
161
+ renderNodes?: CustomNodes | undefined
162
+
151
163
  /**
152
164
  * Render custom icon for a node
153
165
  * By default, if icon is http:// or https://, it will be rendered as an image
@@ -225,6 +237,12 @@ export interface LikeC4BrowserProps {
225
237
  */
226
238
  enableRelationshipDetails?: boolean | undefined
227
239
 
240
+ /**
241
+ * Display element tags in the bottom left corner
242
+ * @default true
243
+ */
244
+ enableElementTags?: boolean | undefined
245
+
228
246
  /**
229
247
  * Display notations of the view
230
248
  * @default true
@@ -1,28 +1,24 @@
1
- import { memo, useState } from 'react'
2
- import { ShadowRoot } from './ShadowRoot'
3
-
4
- import type { DiagramView, ViewId } from '@likec4/core'
1
+ import type { Any, DiagramView, ViewId } from '@likec4/core/types'
2
+ import type * as aux from '@likec4/core/types/aux'
5
3
  import { cx } from '@likec4/styles/css'
6
4
  import { ActionIcon, Box } from '@mantine/core'
7
5
  import { shallowEqual } from '@mantine/hooks'
8
6
  import { IconX } from '@tabler/icons-react'
7
+ import { memo, useState } from 'react'
9
8
  import { isBoolean } from 'remeda'
10
9
  import { FramerMotionConfig } from '../context/FramerMotionConfig'
11
10
  import { LikeC4Diagram } from '../LikeC4Diagram'
12
11
  import { useLikeC4Model } from '../likec4model/useLikeC4Model'
13
12
  import { Overlay } from '../overlays/overlay/Overlay'
14
13
  import type { LikeC4ViewProps } from './LikeC4View.props'
14
+ import { ShadowRoot } from './ShadowRoot'
15
15
  import { cssInteractive, useColorScheme, useShadowRootStyle } from './styles.css'
16
16
  import { ErrorMessage, ViewNotFound } from './ViewNotFound'
17
17
 
18
- export function LikeC4View<
19
- ViewId extends string = string,
20
- Tag = string,
21
- Kind = string,
22
- >({
18
+ export function LikeC4View<A extends aux.Any = aux.UnknownLayouted>({
23
19
  viewId,
24
20
  ...props
25
- }: LikeC4ViewProps<ViewId, Tag, Kind>) {
21
+ }: LikeC4ViewProps<A>) {
26
22
  const likec4model = useLikeC4Model()
27
23
  const view = likec4model?.findView(viewId)
28
24
 
@@ -33,7 +29,7 @@ export function LikeC4View<
33
29
  </ErrorMessage>
34
30
  )
35
31
  }
36
- if (likec4model.type !== 'layouted') {
32
+ if (likec4model.stage !== 'layouted') {
37
33
  return (
38
34
  <ErrorMessage>
39
35
  LikeC4Model is not layouted. Make sure you have LikeC4ModelProvider with layouted model.
@@ -48,10 +44,10 @@ export function LikeC4View<
48
44
  return <LikeC4ViewInner view={view.$view} {...props} />
49
45
  }
50
46
 
51
- type LikeC4ViewInnerProps = Omit<LikeC4ViewProps<any, any, any>, 'viewId'> & {
52
- view: DiagramView
47
+ type LikeC4ViewInnerProps<A extends aux.Any> = Omit<LikeC4ViewProps<A>, 'viewId'> & {
48
+ view: DiagramView<A>
53
49
  }
54
- const LikeC4ViewInner = memo<LikeC4ViewInnerProps>(({
50
+ const LikeC4ViewInner = memo<LikeC4ViewInnerProps<aux.Any>>(({
55
51
  view,
56
52
  className,
57
53
  pannable = false,
@@ -77,18 +73,19 @@ const LikeC4ViewInner = memo<LikeC4ViewInnerProps>(({
77
73
  styleNonce,
78
74
  style,
79
75
  reactFlowProps = {},
76
+ renderNodes,
80
77
  ...props
81
78
  }) => {
82
- const likec4model = useLikeC4Model(true, 'layouted')
79
+ const likec4model = useLikeC4Model('layouted')
83
80
  const colorScheme = useColorScheme(explicitColorScheme)
84
81
 
85
82
  const [shadowRootProps, cssstyle] = useShadowRootStyle(keepAspectRatio, view)
86
83
 
87
- const [browserViewId, onNavigateTo] = useState(null as ViewId | null)
84
+ const [browserViewId, onNavigateTo] = useState(null as aux.ViewId<Any> | null)
88
85
 
89
86
  const browserView = browserViewId ? likec4model.findView(browserViewId)?.$view : null
90
87
 
91
- const notations = view.notation?.elements ?? []
88
+ const notations = view.notation?.nodes ?? []
92
89
  const hasNotations = notations.length > 0
93
90
 
94
91
  let nonce
@@ -123,7 +120,7 @@ const LikeC4ViewInner = memo<LikeC4ViewInnerProps>(({
123
120
  style={style}>
124
121
  <FramerMotionConfig>
125
122
  <LikeC4Diagram
126
- view={view as any}
123
+ view={view}
127
124
  readonly
128
125
  pannable={pannable}
129
126
  zoomable={zoomable}
@@ -139,6 +136,7 @@ const LikeC4ViewInner = memo<LikeC4ViewInnerProps>(({
139
136
  enableRelationshipDetails={enableRelationshipDetails}
140
137
  enableElementDetails={enableElementDetails}
141
138
  enableRelationshipBrowser={enableRelationshipBrowser}
139
+ enableElementTags={false}
142
140
  controls={controls}
143
141
  nodesDraggable={false}
144
142
  reduceGraphics={reduceGraphics}
@@ -152,6 +150,7 @@ const LikeC4ViewInner = memo<LikeC4ViewInnerProps>(({
152
150
  onNodeClick: () => onNavigateTo(view.id),
153
151
  }}
154
152
  reactFlowProps={reactFlowProps}
153
+ renderNodes={renderNodes}
155
154
  {...props}
156
155
  />
157
156
  {browserView && (
@@ -166,14 +165,16 @@ const LikeC4ViewInner = memo<LikeC4ViewInnerProps>(({
166
165
  enableElementDetails
167
166
  enableRelationshipDetails
168
167
  enableSearch
168
+ enableElementTags
169
169
  controls
170
170
  readonly
171
171
  fitView
172
172
  fitViewPadding={'16px'}
173
+ renderNodes={renderNodes}
173
174
  {...props}
174
175
  {...browserProps}
175
176
  showNotations={(browserProps.showNotations ?? true) &&
176
- (browserView.notation?.elements.length ?? 0) > 0}
177
+ (browserView.notation?.nodes.length ?? 0) > 0}
177
178
  />
178
179
  <Box pos="absolute" top={'1rem'} right={'1rem'}>
179
180
  <ActionIcon
@@ -1,21 +1,16 @@
1
- import type { DiagramView, WhereOperator } from '@likec4/core'
2
- import { type CSSProperties } from 'react'
3
- import { ShadowRoot } from './ShadowRoot'
4
-
1
+ import type { Any, DiagramView } from '@likec4/core/types'
2
+ import type * as aux from '@likec4/core/types/aux'
5
3
  import { cx } from '@likec4/styles/css'
4
+ import { type CSSProperties } from 'react'
6
5
  import { isFunction, isString } from 'remeda'
7
6
  import { type LikeC4DiagramProps, LikeC4Diagram } from '../LikeC4Diagram'
8
- import type { OnNavigateTo } from '../LikeC4Diagram.props'
9
7
  import { useLikeC4Model } from '../likec4model/useLikeC4Model'
8
+ import { ShadowRoot } from './ShadowRoot'
10
9
  import { useColorScheme, useShadowRootStyle } from './styles.css'
11
10
  import { ErrorMessage, ViewNotFound } from './ViewNotFound'
12
11
 
13
- export type ReactLikeC4Props<
14
- ViewId = string,
15
- Tag = string,
16
- Kind = string,
17
- > = Omit<LikeC4DiagramProps, 'view' | 'where' | 'onNavigateTo'> & {
18
- viewId: ViewId
12
+ export type ReactLikeC4Props<A extends aux.Any> = Omit<LikeC4DiagramProps<A>, 'view'> & {
13
+ viewId: aux.ViewId<A>
19
14
 
20
15
  /**
21
16
  * Keep aspect ratio of the diagram
@@ -41,24 +36,16 @@ export type ReactLikeC4Props<
41
36
 
42
37
  style?: CSSProperties | undefined
43
38
 
44
- where?: WhereOperator<Tag, Kind> | undefined
45
-
46
- onNavigateTo?: OnNavigateTo<ViewId> | undefined
47
-
48
39
  mantineTheme?: any
49
40
 
50
41
  /** Function to generate nonce attribute added to all generated `<style />` tags */
51
42
  styleNonce?: string | (() => string) | undefined
52
43
  }
53
44
 
54
- export function ReactLikeC4<
55
- ViewId extends string = string,
56
- Tag = string,
57
- Kind = string,
58
- >({
45
+ export function ReactLikeC4<A extends aux.Any = aux.UnknownLayouted>({
59
46
  viewId,
60
47
  ...props
61
- }: ReactLikeC4Props<ViewId, Tag, Kind>) {
48
+ }: ReactLikeC4Props<A>) {
62
49
  const likec4model = useLikeC4Model()
63
50
  const view = likec4model?.findView(viewId)
64
51
 
@@ -85,10 +72,10 @@ export function ReactLikeC4<
85
72
  return <ReactLikeC4Inner view={view.$view} {...props} />
86
73
  }
87
74
 
88
- type ReactLikeC4InnerProps = Omit<ReactLikeC4Props<any, any, any>, 'viewId'> & {
89
- view: DiagramView
75
+ type ReactLikeC4InnerProps<A extends Any> = Omit<ReactLikeC4Props<A>, 'viewId'> & {
76
+ view: DiagramView<A>
90
77
  }
91
- function ReactLikeC4Inner({
78
+ function ReactLikeC4Inner<A extends Any>({
92
79
  className,
93
80
  view,
94
81
  colorScheme: explicitColorScheme,
@@ -101,12 +88,12 @@ function ReactLikeC4Inner({
101
88
  mantineTheme,
102
89
  styleNonce,
103
90
  ...props
104
- }: ReactLikeC4InnerProps) {
91
+ }: ReactLikeC4InnerProps<A>) {
105
92
  const colorScheme = useColorScheme(explicitColorScheme)
106
93
 
107
94
  const [shadowRootProps, cssstyle] = useShadowRootStyle(keepAspectRatio, view)
108
95
 
109
- const notations = view.notation?.elements ?? []
96
+ const notations = view.notation?.nodes ?? []
110
97
  const hasNotations = notations.length > 0
111
98
 
112
99
  let nonce
@@ -139,10 +126,11 @@ function ReactLikeC4Inner({
139
126
  showNotations={showNotations && hasNotations}
140
127
  onNavigateTo={onNavigateTo as any}
141
128
  background={background}
129
+ enableElementTags={false}
142
130
  {...props}
143
131
  />
144
132
  </ShadowRoot>
145
133
  </>
146
134
  )
147
135
  }
148
- ReactLikeC4.displayName = 'GenericReactLikeC4'
136
+ ReactLikeC4.displayName = 'ReactLikeC4'
@@ -0,0 +1 @@
1
+ export * from '../custom'
@@ -1,7 +1,26 @@
1
+ export type {
2
+ ChangeEvent,
3
+ CustomNodes,
4
+ DiagramNodeWithNavigate,
5
+ ElementIconRenderer,
6
+ LikeC4ColorScheme,
7
+ LikeC4DiagramEventHandlers,
8
+ OnCanvasClick,
9
+ OnChange,
10
+ OnEdgeClick,
11
+ OnNavigateTo,
12
+ OnNodeClick,
13
+ OpenSourceParams,
14
+ PaddingUnit,
15
+ PaddingWithUnit,
16
+ WhereOperator,
17
+ } from '../LikeC4Diagram.props'
1
18
  export { LikeC4View } from './LikeC4View'
2
- export type { LikeC4ViewProps } from './LikeC4View.props'
19
+ export type { LikeC4BrowserProps, LikeC4ViewProps } from './LikeC4View.props'
3
20
  export { ReactLikeC4, type ReactLikeC4Props } from './ReactLikeC4'
4
21
 
5
22
  export { LikeC4ModelProvider } from './LikeC4ModelProvider'
6
23
 
7
24
  export { ViewNotFound } from './ViewNotFound'
25
+
26
+ export * from '../custom/hooks'
@@ -10,8 +10,8 @@ import {
10
10
  import { useIsomorphicLayoutEffect } from '@react-hookz/web'
11
11
  import { useState } from 'react'
12
12
  import { first, isFunction, isString } from 'remeda'
13
+ import fontsCss from '../styles-font.css?inline'
13
14
  import inlinedStyles from '../styles.css?inline'
14
- import fontsCss from './font.css?inline'
15
15
 
16
16
  export const DefaultTheme = createTheme({
17
17
  autoContrast: true,
@@ -0,0 +1,30 @@
1
+ import { Box } from '@likec4/styles/jsx'
2
+ import { Button, Code, Group, Notification, ScrollAreaAutosize } from '@mantine/core'
3
+ import { IconX } from '@tabler/icons-react'
4
+ import type { FallbackProps } from 'react-error-boundary'
5
+
6
+ export function ErrorFallback({ error, resetErrorBoundary }: FallbackProps) {
7
+ const errorString = error instanceof Error ? error.message : 'Unknown error'
8
+ return (
9
+ <Box pos={'fixed'} top={0} left={0} w={'100%'} p={0} style={{ zIndex: 1000 }}>
10
+ <Notification
11
+ icon={<IconX style={{ width: 16, height: 16 }} />}
12
+ styles={{
13
+ icon: {
14
+ alignSelf: 'flex-start',
15
+ },
16
+ }}
17
+ color={'red'}
18
+ title={'Oops, something went wrong'}
19
+ p={'xl'}
20
+ withCloseButton={false}>
21
+ <ScrollAreaAutosize maw={'100%'} mah={400}>
22
+ <Code block>{errorString}</Code>
23
+ </ScrollAreaAutosize>
24
+ <Group gap={'xs'} mt="xl">
25
+ <Button color="gray" size="xs" variant="light" onClick={() => resetErrorBoundary()}>Reset</Button>
26
+ </Group>
27
+ </Notification>
28
+ </Box>
29
+ )
30
+ }
@@ -1,3 +1,4 @@
1
+ import { cx } from '@likec4/styles/css'
1
2
  import {
2
3
  type ElementProps,
3
4
  type UnstyledButtonProps,
@@ -7,7 +8,6 @@ import {
7
8
  } from '@mantine/core'
8
9
  import { IconSearch } from '@tabler/icons-react'
9
10
  import { isMacOs } from '@xyflow/system'
10
- import cx from 'clsx'
11
11
  import * as classes from './SearchControl.css'
12
12
 
13
13
  interface SearchControlProps extends UnstyledButtonProps, ElementProps<'button'> {}
@@ -1,3 +1,4 @@
1
+ import type { Any } from '@likec4/core/types'
1
2
  import { useSyncedRef } from '@react-hookz/web'
2
3
  import { type PropsWithChildren, type RefObject, createContext, useContext, useMemo } from 'react'
3
4
  import { isFunction, mapToObj } from 'remeda'
@@ -21,8 +22,8 @@ const HandlerNames = [
21
22
  'onCanvasDblClick',
22
23
  ] as const
23
24
 
24
- type DiagramEventHandlersContextValue = RequiredOrNull<LikeC4DiagramEventHandlers> & {
25
- handlersRef: RefObject<LikeC4DiagramEventHandlers>
25
+ type DiagramEventHandlersContextValue = RequiredOrNull<LikeC4DiagramEventHandlers<Any>> & {
26
+ handlersRef: RefObject<LikeC4DiagramEventHandlers<Any>>
26
27
  }
27
28
 
28
29
  const DiagramEventHandlersContext = createContext<DiagramEventHandlersContextValue>({
@@ -32,10 +33,10 @@ const DiagramEventHandlersContext = createContext<DiagramEventHandlersContextVal
32
33
  },
33
34
  })
34
35
 
35
- export function DiagramEventHandlers({
36
+ export function DiagramEventHandlers<A extends Any>({
36
37
  handlers,
37
38
  children,
38
- }: PropsWithChildren<{ handlers: LikeC4DiagramEventHandlers }>) {
39
+ }: PropsWithChildren<{ handlers: LikeC4DiagramEventHandlers<A> }>) {
39
40
  const handlersRef = useSyncedRef(handlers)
40
41
 
41
42
  const deps = HandlerNames.map((name) => isFunction(handlers[name]))
@@ -1,7 +1,7 @@
1
- import type { ExclusiveUnion, NonEmptyArray } from '@likec4/core'
1
+ import type { ExclusiveUnion } from '@likec4/core/types'
2
2
  import { shallowEqual } from 'fast-equals'
3
3
  import { type PropsWithChildren, createContext, useContext, useEffect, useState } from 'react'
4
- import { map, mapToObj, pick } from 'remeda'
4
+ import { mapToObj } from 'remeda'
5
5
 
6
6
  const FeatureNames = [
7
7
  'Controls',
@@ -18,14 +18,11 @@ const FeatureNames = [
18
18
  'EdgeEditing',
19
19
  'ViewTitle',
20
20
  'FitView',
21
- /**
22
- * LikeC4Model is available in context
23
- */
24
- 'LikeC4Model',
25
21
  /**
26
22
  * Running in VSCode
27
23
  */
28
24
  'Vscode',
25
+ 'ElementTags',
29
26
  ] as const
30
27
  export type FeatureName = typeof FeatureNames[number]
31
28
  export type EnabledFeatures = {
@@ -41,20 +38,9 @@ const DiagramFeaturesContext = createContext<EnabledFeatures>(AllDisabled)
41
38
  const validate = (features: EnabledFeatures) => {
42
39
  let {
43
40
  enableReadOnly,
44
- enableLikeC4Model,
45
- enableElementDetails,
46
- enableRelationshipDetails,
47
- enableRelationshipBrowser,
48
- enableSearch,
49
41
  enableEdgeEditing,
50
42
  ...rest
51
43
  } = features
52
- if (!enableLikeC4Model) {
53
- enableElementDetails = false
54
- enableRelationshipDetails = false
55
- enableRelationshipBrowser = false
56
- enableSearch = false
57
- }
58
44
 
59
45
  if (enableReadOnly) {
60
46
  enableEdgeEditing = false
@@ -62,11 +48,6 @@ const validate = (features: EnabledFeatures) => {
62
48
 
63
49
  return {
64
50
  enableReadOnly,
65
- enableLikeC4Model,
66
- enableElementDetails,
67
- enableRelationshipDetails,
68
- enableRelationshipBrowser,
69
- enableSearch,
70
51
  enableEdgeEditing,
71
52
  ...rest,
72
53
  }
@@ -123,12 +104,6 @@ DiagramFeatures.Overlays = ({ children }: PropsWithChildren) => {
123
104
  )
124
105
  }
125
106
 
126
- export function useEnabledFeature<F extends NonEmptyArray<FeatureName>>(
127
- ...names: F
128
- ): { [P in `enable${F[number]}`]: boolean } {
129
- return pick(useContext(DiagramFeaturesContext), map(names, (name) => `enable${name}` as const))
130
- }
131
-
132
107
  export function useEnabledFeatures(): EnabledFeatures {
133
108
  return useContext(DiagramFeaturesContext)
134
109
  }
@@ -138,7 +113,7 @@ export function IfEnabled({
138
113
  children,
139
114
  and = true,
140
115
  }: PropsWithChildren<{ feature: FeatureName; and?: boolean }>) {
141
- const enabled = useEnabledFeature(feature)[`enable${feature}`] === true
116
+ const enabled = useEnabledFeatures()[`enable${feature}`] === true
142
117
  return enabled && and ? <>{children}</> : null
143
118
  }
144
119
 
@@ -146,6 +121,16 @@ export function IfNotEnabled({
146
121
  feature,
147
122
  children,
148
123
  }: PropsWithChildren<{ feature: FeatureName }>) {
149
- const notEnabled = useEnabledFeature(feature)[`enable${feature}`] !== true
124
+ const notEnabled = useEnabledFeatures()[`enable${feature}`] !== true
150
125
  return notEnabled ? <>{children}</> : null
151
126
  }
127
+
128
+ export function IfNotReadOnly({
129
+ children,
130
+ }: PropsWithChildren) {
131
+ const isReadOnly = useEnabledFeatures()[`enableReadOnly`] === true
132
+ if (isReadOnly) {
133
+ return null
134
+ }
135
+ return <>{children}</>
136
+ }
@@ -1,13 +1,23 @@
1
- import { MantineContext } from '@mantine/core'
2
- import { type PropsWithChildren, useContext } from 'react'
1
+ import { MantineContext, MantineProvider } from '@mantine/core'
2
+ import { type PropsWithChildren, useContext, useEffect } from 'react'
3
3
 
4
4
  type EnsureMantineProps = PropsWithChildren<{}>
5
5
 
6
6
  export function EnsureMantine({ children }: EnsureMantineProps) {
7
7
  const mantineCtx = useContext(MantineContext)
8
8
 
9
+ useEffect(() => {
10
+ if (!mantineCtx) {
11
+ console.warn('LikeC4Diagram must be a child of MantineProvider')
12
+ }
13
+ }, [])
14
+
9
15
  if (!mantineCtx) {
10
- throw new Error('LikeC4Diagram must be a child of MantineProvider')
16
+ return (
17
+ <MantineProvider defaultColorScheme="auto">
18
+ {children}
19
+ </MantineProvider>
20
+ )
11
21
  }
12
22
 
13
23
  return <>{children}</>
@@ -1,4 +1,5 @@
1
1
  import type { ElementShape } from '@likec4/core'
2
+ import { cx as clsx } from '@likec4/styles/css'
2
3
  import {
3
4
  type Icon,
4
5
  type IconProps,
@@ -9,7 +10,6 @@ import {
9
10
  IconReorder,
10
11
  IconUser,
11
12
  } from '@tabler/icons-react'
12
- import clsx from 'clsx'
13
13
  import {
14
14
  type ForwardRefExoticComponent,
15
15
  type PropsWithChildren,
@@ -99,10 +99,7 @@ export function IconOrShapeRenderer({
99
99
  }
100
100
  className: string
101
101
  }) {
102
- const icon = IconRenderer({
103
- element,
104
- className,
105
- })
102
+ const icon = <IconRenderer element={element} className={className} />
106
103
  if (icon) {
107
104
  return icon
108
105
  }