@likec4/diagram 1.31.0 → 1.32.1

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 (269) hide show
  1. package/bundle/{chunk-BBzMXzCg.js → chunk-DlHyKoeo.js} +1700 -1206
  2. package/bundle/custom.js +51 -47
  3. package/bundle/index.js +5495 -5428
  4. package/dist/LikeC4CustomColors.d.ts +2 -7
  5. package/dist/LikeC4CustomColors.js +17 -6
  6. package/dist/LikeC4Diagram.d.ts +3 -2
  7. package/dist/LikeC4Diagram.js +10 -14
  8. package/dist/LikeC4Diagram.props.d.ts +41 -24
  9. package/dist/LikeC4ModelProvider.d.ts +5 -4
  10. package/dist/StaticLikeC4Diagram.d.ts +3 -2
  11. package/dist/StaticLikeC4Diagram.js +2 -2
  12. package/dist/base/BaseXYFlow.js +5 -5
  13. package/dist/base/const.d.ts +1 -1
  14. package/dist/base/const.js +1 -1
  15. package/dist/base/index.d.ts +2 -1
  16. package/dist/base/primitives/compound/CompoundActionButton.js +2 -1
  17. package/dist/base/primitives/compound/CompoundDetailsButton.js +2 -1
  18. package/dist/base/primitives/compound/CompoundTitle.d.ts +1 -1
  19. package/dist/base/primitives/compound/CompoundTitle.js +2 -1
  20. package/dist/base/primitives/edge/EdgeContainer.d.ts +1 -1
  21. package/dist/base/primitives/edge/EdgeLabel.css.js +1 -0
  22. package/dist/base/primitives/edge/EdgeLabel.d.ts +3 -3
  23. package/dist/base/primitives/edge/EdgeLabel.js +6 -4
  24. package/dist/base/primitives/edge/EdgeLabelContainer.d.ts +1 -1
  25. package/dist/base/primitives/edge/EdgeMarkers.d.ts +1 -1
  26. package/dist/base/primitives/edge/EdgePath.d.ts +1 -1
  27. package/dist/base/primitives/element/ElementActionButtons.js +10 -9
  28. package/dist/base/primitives/element/ElementDetailsButton.js +2 -1
  29. package/dist/base/primitives/element/ElementShape.d.ts +1 -1
  30. package/dist/base/primitives/element/ElementTags.d.ts +14 -0
  31. package/dist/base/primitives/element/ElementTags.js +176 -0
  32. package/dist/base/primitives/element/ElementTitle.d.ts +5 -4
  33. package/dist/base/primitives/element/ElementTitle.js +6 -6
  34. package/dist/base/primitives/index.d.ts +1 -0
  35. package/dist/base/types.Base.d.ts +54 -0
  36. package/dist/base/types.Base.js +48 -0
  37. package/dist/base/types.d.ts +2 -52
  38. package/dist/bundle/LikeC4View.d.ts +2 -1
  39. package/dist/bundle/LikeC4View.js +22 -19
  40. package/dist/bundle/LikeC4View.props.d.ts +15 -4
  41. package/dist/bundle/ReactLikeC4.d.ts +4 -7
  42. package/dist/bundle/ReactLikeC4.js +10 -8
  43. package/dist/bundle/index.js +1 -1
  44. package/dist/components/ErrorFallback.d.ts +2 -0
  45. package/dist/components/ErrorFallback.js +29 -0
  46. package/dist/context/DiagramEventHandlers.d.ts +6 -5
  47. package/dist/context/DiagramFeatures.d.ts +2 -2
  48. package/dist/context/DiagramFeatures.js +3 -31
  49. package/dist/context/EnsureMantine.js +1 -1
  50. package/dist/context/IconRenderer.js +1 -4
  51. package/dist/context/RootContainer.js +5 -1
  52. package/dist/context/TagStylesContext.d.ts +7 -0
  53. package/dist/context/TagStylesContext.js +85 -0
  54. package/dist/custom/components.d.ts +1 -1
  55. package/dist/custom/customNodes.d.ts +32 -17
  56. package/dist/custom/hooks.d.ts +1 -1
  57. package/dist/hooks/index.d.ts +1 -1
  58. package/dist/hooks/useDiagram.d.ts +73 -38
  59. package/dist/hooks/useDiagram.js +7 -3
  60. package/dist/hooks/useMantinePortalProps.d.ts +2 -2
  61. package/dist/hooks/useSearchActor.d.ts +2 -0
  62. package/dist/hooks/useSearchActor.js +10 -0
  63. package/dist/hooks/useUpdateEffect.js +3 -0
  64. package/dist/hooks/useXYFlow.d.ts +39 -37
  65. package/dist/hooks/useXYFlow.js +5 -1
  66. package/dist/index.js +1 -1
  67. package/dist/likec4diagram/DiagramUI.js +7 -2
  68. package/dist/likec4diagram/DiagramXYFlow.d.ts +4 -3
  69. package/dist/likec4diagram/DiagramXYFlow.js +107 -110
  70. package/dist/likec4diagram/custom/edges/RelationshipEdge.d.ts +7 -6
  71. package/dist/likec4diagram/custom/edges/RelationshipEdge.js +8 -0
  72. package/dist/likec4diagram/custom/edges/RelationshipsDropdownMenu.js +7 -5
  73. package/dist/likec4diagram/custom/index.d.ts +7 -6
  74. package/dist/likec4diagram/custom/nodes/nodes.js +39 -26
  75. package/dist/likec4diagram/custom/nodes/toolbar/_shared.d.ts +7 -7
  76. package/dist/likec4diagram/types.d.ts +5 -5
  77. package/dist/likec4diagram/ui/controls/Controls.js +12 -4
  78. package/dist/likec4diagram/ui/notation/NotationPanel.js +1 -1
  79. package/dist/likec4diagram/useViewToNodesEdges.d.ts +5 -3
  80. package/dist/likec4diagram/useViewToNodesEdges.js +20 -30
  81. package/dist/likec4model/LikeC4ModelContext.d.ts +2 -2
  82. package/dist/likec4model/index.d.ts +1 -1
  83. package/dist/likec4model/useLikeC4ElementsTree.js +1 -1
  84. package/dist/likec4model/useLikeC4Model.d.ts +23 -10
  85. package/dist/likec4model/useLikeC4Model.js +22 -7
  86. package/dist/overlays/Overlays.js +4 -27
  87. package/dist/overlays/element-details/ElementDetailsCard.d.ts +1 -1
  88. package/dist/overlays/element-details/ElementDetailsCard.js +19 -12
  89. package/dist/overlays/element-details/TabPanelDeployments.d.ts +1 -1
  90. package/dist/overlays/element-details/TabPanelDeployments.js +1 -1
  91. package/dist/overlays/element-details/TabPanelRelationships.d.ts +1 -1
  92. package/dist/overlays/element-details/TabPanelStructure.d.ts +1 -1
  93. package/dist/overlays/element-details/actor.d.ts +288 -286
  94. package/dist/overlays/overlay/Overlay.css.d.ts +57 -2
  95. package/dist/overlays/overlay/Overlay.css.js +76 -39
  96. package/dist/overlays/overlay/Overlay.d.ts +12 -0
  97. package/dist/overlays/overlay/Overlay.js +58 -27
  98. package/dist/overlays/overlaysActor.d.ts +1 -1
  99. package/dist/overlays/relationship-details/RelationshipDetails.d.ts +3 -2
  100. package/dist/overlays/relationship-details/RelationshipDetails.js +3 -3
  101. package/dist/overlays/relationship-details/_types.d.ts +2 -2
  102. package/dist/overlays/relationship-details/actor.js +7 -7
  103. package/dist/overlays/relationship-details/custom/edgeTypes.d.ts +3 -2
  104. package/dist/overlays/relationship-details/custom/nodeTypes.js +4 -0
  105. package/dist/overlays/relationship-details/hooks.d.ts +10 -9
  106. package/dist/overlays/relationship-details/layout-to-xyflow.js +1 -0
  107. package/dist/overlays/relationship-details/layout.js +3 -1
  108. package/dist/overlays/relationships-browser/RelationshipsBrowser.d.ts +3 -2
  109. package/dist/overlays/relationships-browser/SelectElement.js +1 -1
  110. package/dist/overlays/relationships-browser/_types.d.ts +2 -2
  111. package/dist/overlays/relationships-browser/actor.d.ts +1 -1
  112. package/dist/overlays/relationships-browser/actor.js +7 -7
  113. package/dist/overlays/relationships-browser/custom/edgeTypes.d.ts +3 -2
  114. package/dist/overlays/relationships-browser/custom/nodeTypes.d.ts +8 -5
  115. package/dist/overlays/relationships-browser/custom/nodeTypes.js +4 -0
  116. package/dist/overlays/relationships-browser/layout.d.ts +2 -2
  117. package/dist/overlays/relationships-browser/layout.js +10 -6
  118. package/dist/overlays/relationships-browser/useViewToNodesEdges.js +4 -3
  119. package/dist/search/Search.d.ts +4 -0
  120. package/dist/search/Search.js +173 -0
  121. package/dist/{likec4diagram/ui/search → search/components}/ElementsColumn.css.js +0 -1
  122. package/dist/search/components/ElementsColumn.d.ts +2 -0
  123. package/dist/{likec4diagram/ui/search → search/components}/ElementsColumn.js +26 -25
  124. package/dist/search/components/PickView.d.ts +4 -0
  125. package/dist/search/components/PickView.js +135 -0
  126. package/dist/search/components/SearchByTags.d.ts +1 -0
  127. package/dist/search/components/SearchByTags.js +119 -0
  128. package/dist/search/components/SearchInput.d.ts +2 -0
  129. package/dist/{likec4diagram/ui/search → search/components}/SearchInput.js +61 -40
  130. package/dist/{likec4diagram/ui/search → search/components}/ViewsColum.d.ts +3 -2
  131. package/dist/{likec4diagram/ui/search → search/components}/ViewsColum.js +25 -17
  132. package/dist/{likec4diagram/ui/search → search/components}/_shared.css.js +26 -35
  133. package/dist/{likec4diagram/ui/search/LikeC4Search.css.d.ts → search/components/styles.css.d.ts} +0 -2
  134. package/dist/search/components/styles.css.js +60 -0
  135. package/dist/search/components/utils.d.ts +5 -0
  136. package/dist/search/components/utils.js +58 -0
  137. package/dist/search/hooks.d.ts +10 -0
  138. package/dist/search/hooks.js +35 -0
  139. package/dist/search/searchActor.d.ts +90 -0
  140. package/dist/search/searchActor.js +75 -0
  141. package/dist/state/DiagramActorProvider.d.ts +9 -7
  142. package/dist/state/DiagramActorProvider.js +24 -18
  143. package/dist/state/assign.d.ts +0 -1
  144. package/dist/state/assign.js +9 -19
  145. package/dist/state/diagram-machine.d.ts +645 -183
  146. package/dist/state/diagram-machine.js +127 -60
  147. package/dist/state/syncManualLayoutActor.d.ts +2 -2
  148. package/dist/state/types.d.ts +2 -0
  149. package/dist/state/utils.d.ts +2 -0
  150. package/dist/state/utils.js +3 -0
  151. package/dist/styles-min.css +1 -1
  152. package/dist/styles-xyflow.css +1 -1
  153. package/dist/styles.css +1 -1
  154. package/dist/styles.css2.js +1 -1
  155. package/package.json +20 -19
  156. package/panda.buildinfo.json +171 -148
  157. package/src/LikeC4CustomColors.tsx +21 -6
  158. package/src/LikeC4Diagram.props.ts +48 -32
  159. package/src/LikeC4Diagram.tsx +19 -20
  160. package/src/LikeC4ModelProvider.tsx +6 -5
  161. package/src/StaticLikeC4Diagram.tsx +8 -6
  162. package/src/base/const.ts +1 -1
  163. package/src/base/index.ts +2 -1
  164. package/src/base/primitives/compound/CompoundActionButton.tsx +2 -1
  165. package/src/base/primitives/compound/CompoundDetailsButton.tsx +2 -1
  166. package/src/base/primitives/compound/CompoundTitle.tsx +3 -2
  167. package/src/base/primitives/edge/EdgeContainer.tsx +2 -1
  168. package/src/base/primitives/edge/EdgeLabel.css.ts +1 -0
  169. package/src/base/primitives/edge/EdgeLabel.tsx +20 -15
  170. package/src/base/primitives/edge/EdgeLabelContainer.tsx +1 -1
  171. package/src/base/primitives/edge/EdgeMarkers.tsx +2 -1
  172. package/src/base/primitives/edge/EdgePath.tsx +1 -1
  173. package/src/base/primitives/element/ElementActionButtons.tsx +11 -10
  174. package/src/base/primitives/element/ElementDetailsButton.tsx +2 -1
  175. package/src/base/primitives/element/ElementShape.tsx +2 -1
  176. package/src/base/primitives/element/ElementTags.tsx +182 -0
  177. package/src/base/primitives/element/ElementTitle.tsx +21 -15
  178. package/src/base/primitives/index.ts +1 -0
  179. package/src/base/types.Base.ts +104 -0
  180. package/src/base/types.ts +2 -99
  181. package/src/bundle/LikeC4View.props.ts +17 -4
  182. package/src/bundle/LikeC4View.tsx +27 -36
  183. package/src/bundle/ReactLikeC4.tsx +16 -36
  184. package/src/components/ErrorFallback.tsx +30 -0
  185. package/src/context/DiagramEventHandlers.tsx +5 -4
  186. package/src/context/DiagramFeatures.tsx +3 -22
  187. package/src/context/EnsureMantine.tsx +1 -1
  188. package/src/context/IconRenderer.tsx +1 -4
  189. package/src/context/RootContainer.tsx +9 -3
  190. package/src/context/TagStylesContext.tsx +96 -0
  191. package/src/custom/components.ts +2 -0
  192. package/src/custom/customNodes.tsx +29 -14
  193. package/src/custom/hooks.ts +2 -0
  194. package/src/hooks/index.ts +1 -1
  195. package/src/hooks/useCurrentViewId.ts +1 -4
  196. package/src/hooks/useDiagram.ts +104 -12
  197. package/src/hooks/useMantinePortalProps.ts +10 -1
  198. package/src/hooks/useSearchActor.ts +11 -0
  199. package/src/hooks/useUpdateEffect.ts +7 -4
  200. package/src/hooks/useXYFlow.ts +5 -0
  201. package/src/likec4diagram/DiagramUI.tsx +5 -0
  202. package/src/likec4diagram/DiagramXYFlow.tsx +118 -121
  203. package/src/likec4diagram/custom/edges/RelationshipEdge.tsx +9 -0
  204. package/src/likec4diagram/custom/edges/RelationshipsDropdownMenu.tsx +10 -9
  205. package/src/likec4diagram/custom/nodes/nodes.tsx +45 -43
  206. package/src/likec4diagram/custom/nodes/toolbar/_shared.tsx +11 -3
  207. package/src/likec4diagram/types.ts +5 -3
  208. package/src/likec4diagram/ui/controls/Controls.tsx +11 -4
  209. package/src/likec4diagram/ui/notation/NotationPanel.tsx +2 -2
  210. package/src/likec4diagram/useViewToNodesEdges.ts +34 -36
  211. package/src/likec4model/LikeC4ModelContext.ts +2 -2
  212. package/src/likec4model/index.ts +2 -0
  213. package/src/likec4model/useLikeC4ElementsTree.ts +1 -1
  214. package/src/likec4model/useLikeC4Model.ts +32 -16
  215. package/src/overlays/Overlays.tsx +5 -32
  216. package/src/overlays/element-details/ElementDetailsCard.tsx +25 -18
  217. package/src/overlays/element-details/TabPanelDeployments.tsx +3 -2
  218. package/src/overlays/element-details/TabPanelRelationships.tsx +2 -1
  219. package/src/overlays/element-details/TabPanelStructure.tsx +1 -1
  220. package/src/overlays/element-details/actor.ts +2 -2
  221. package/src/overlays/overlay/Overlay.css.ts +75 -38
  222. package/src/overlays/overlay/Overlay.tsx +61 -29
  223. package/src/overlays/overlaysActor.ts +1 -1
  224. package/src/overlays/relationship-details/RelationshipDetails.tsx +4 -4
  225. package/src/overlays/relationship-details/_types.ts +2 -1
  226. package/src/overlays/relationship-details/custom/nodeTypes.tsx +4 -0
  227. package/src/overlays/relationship-details/layout-to-xyflow.ts +1 -0
  228. package/src/overlays/relationship-details/layout.ts +3 -1
  229. package/src/overlays/relationships-browser/SelectElement.tsx +1 -1
  230. package/src/overlays/relationships-browser/_types.ts +2 -1
  231. package/src/overlays/relationships-browser/custom/nodeTypes.tsx +4 -0
  232. package/src/overlays/relationships-browser/layout.ts +12 -7
  233. package/src/overlays/relationships-browser/useViewToNodesEdges.ts +4 -4
  234. package/src/search/Search.tsx +220 -0
  235. package/src/{likec4diagram/ui/search → search/components}/ElementsColumn.css.ts +0 -29
  236. package/src/{likec4diagram/ui/search → search/components}/ElementsColumn.tsx +28 -29
  237. package/src/search/components/PickView.tsx +134 -0
  238. package/src/search/components/SearchByTags.tsx +112 -0
  239. package/src/{likec4diagram/ui/search → search/components}/SearchInput.tsx +72 -42
  240. package/src/{likec4diagram/ui/search → search/components}/ViewsColum.tsx +29 -22
  241. package/src/{likec4diagram/ui/search → search/components}/_shared.css.ts +26 -37
  242. package/src/{likec4diagram/ui/search/LikeC4Search.css.ts → search/components/styles.css.ts} +9 -36
  243. package/src/search/components/utils.ts +64 -0
  244. package/src/search/hooks.ts +38 -0
  245. package/src/search/searchActor.ts +99 -0
  246. package/src/state/DiagramActorProvider.tsx +37 -25
  247. package/src/state/assign.ts +10 -10
  248. package/src/state/diagram-machine.ts +123 -58
  249. package/src/state/syncManualLayoutActor.ts +1 -1
  250. package/src/state/types.ts +2 -0
  251. package/src/state/utils.ts +4 -0
  252. package/dist/base/types.js +0 -54
  253. package/dist/likec4diagram/ui/search/ElementsColumn.d.ts +0 -1
  254. package/dist/likec4diagram/ui/search/LikeC4Search.css.js +0 -87
  255. package/dist/likec4diagram/ui/search/LikeC4Search.d.ts +0 -2
  256. package/dist/likec4diagram/ui/search/LikeC4Search.js +0 -267
  257. package/dist/likec4diagram/ui/search/SearchInput.d.ts +0 -1
  258. package/dist/likec4diagram/ui/search/state.d.ts +0 -19
  259. package/dist/likec4diagram/ui/search/state.js +0 -63
  260. package/dist/likec4diagram/ui/search/utils.d.ts +0 -3
  261. package/dist/likec4diagram/ui/search/utils.js +0 -20
  262. package/src/likec4diagram/ui/search/LikeC4Search.tsx +0 -301
  263. package/src/likec4diagram/ui/search/state.ts +0 -78
  264. package/src/likec4diagram/ui/search/utils.ts +0 -20
  265. /package/dist/{likec4diagram/ui/search → search/components}/ElementsColumn.css.d.ts +0 -0
  266. /package/dist/{likec4diagram/ui/search → search/components}/ViewsColumn.css.d.ts +0 -0
  267. /package/dist/{likec4diagram/ui/search → search/components}/ViewsColumn.css.js +0 -0
  268. /package/dist/{likec4diagram/ui/search → search/components}/_shared.css.d.ts +0 -0
  269. /package/src/{likec4diagram/ui/search → search/components}/ViewsColumn.css.ts +0 -0
@@ -1,23 +1,21 @@
1
1
  import type {
2
+ Any,
2
3
  DiagramEdge,
3
4
  DiagramNode,
4
- DiagramView,
5
- Fqn,
6
- RelationId,
5
+ LayoutedView,
7
6
  ViewChange,
8
- ViewId,
9
7
  WhereOperator,
10
- } from '@likec4/core'
8
+ } from '@likec4/core/types'
9
+ import type * as aux from '@likec4/core/types/aux'
11
10
  import type { ReactFlowProps as XYFlowProps } from '@xyflow/react'
12
11
  import type { MouseEvent as ReactMouseEvent, ReactNode } from 'react'
12
+ import type { SetRequired } from 'type-fest'
13
13
  import type { ControlsCustomLayout } from './context/ControlsCustomLayout'
14
14
  import type { CustomNodes } from './custom/customNodes'
15
15
 
16
16
  export type { CustomNodes, WhereOperator }
17
17
 
18
- export type DiagramNodeWithNavigate<ID = ViewId> = Omit<DiagramNode, 'navigateTo'> & {
19
- navigateTo: ID
20
- }
18
+ export type DiagramNodeWithNavigate<A extends Any> = SetRequired<DiagramNode<A>, 'navigateTo'>
21
19
 
22
20
  type ElementIconRendererProps = {
23
21
  node: {
@@ -25,24 +23,25 @@ type ElementIconRendererProps = {
25
23
  title: string
26
24
  icon?: string | null | undefined
27
25
  }
26
+ className?: string
28
27
  }
29
28
 
30
29
  export type ElementIconRenderer = (props: ElementIconRendererProps) => ReactNode
31
30
 
32
- export type OnNavigateTo<ID = ViewId> = (
33
- to: ID,
31
+ export type OnNavigateTo<A extends Any> = (
32
+ to: aux.ViewId<A>,
34
33
  // These fields present if navigateTo triggered by a node click
35
34
  event?: ReactMouseEvent,
36
- element?: DiagramNodeWithNavigate<ID>,
35
+ element?: DiagramNodeWithNavigate<A>,
37
36
  ) => void
38
37
 
39
- export type OnNodeClick = (
40
- node: DiagramNode,
38
+ export type OnNodeClick<A extends Any> = (
39
+ node: DiagramNode<A>,
41
40
  event: ReactMouseEvent,
42
41
  ) => void
43
42
 
44
- export type OnEdgeClick = (
45
- edge: DiagramEdge,
43
+ export type OnEdgeClick<A extends Any> = (
44
+ edge: DiagramEdge<A>,
46
45
  event: ReactMouseEvent,
47
46
  ) => void
48
47
 
@@ -87,8 +86,8 @@ export type OverrideReactFlowProps = Pick<
87
86
  export type PaddingUnit = 'px' | '%'
88
87
  export type PaddingWithUnit = `${number}${PaddingUnit}` | number
89
88
 
90
- export interface LikeC4DiagramProperties {
91
- view: DiagramView
89
+ export interface LikeC4DiagramProperties<A extends aux.Any> {
90
+ view: LayoutedView<A>
92
91
 
93
92
  className?: string | undefined
94
93
 
@@ -135,7 +134,15 @@ export interface LikeC4DiagramProperties {
135
134
  */
136
135
  nodesDraggable?: boolean | undefined
137
136
 
137
+ /**
138
+ * Initial width of the diagram
139
+ * (supposed to be used during SSR)
140
+ */
138
141
  initialWidth?: number | undefined
142
+ /**
143
+ * Initial height of the diagram
144
+ * (supposed to be used during SSR)
145
+ */
139
146
  initialHeight?: number | undefined
140
147
 
141
148
  /**
@@ -157,7 +164,9 @@ export interface LikeC4DiagramProperties {
157
164
  showNavigationButtons?: undefined | boolean
158
165
 
159
166
  /**
160
- * Display notations of the view
167
+ * Display notations in the bottom right corner
168
+ * (Active if only notations are present)
169
+ *
161
170
  * @default true
162
171
  */
163
172
  showNotations?: boolean | undefined
@@ -199,6 +208,12 @@ export interface LikeC4DiagramProperties {
199
208
  */
200
209
  enableDynamicViewWalkthrough?: boolean | undefined
201
210
 
211
+ /**
212
+ * Display element tags in the bottom left corner
213
+ * @default false
214
+ */
215
+ enableElementTags?: boolean | undefined
216
+
202
217
  /**
203
218
  * Experimental feature to enable edge editing
204
219
  * @default false
@@ -207,8 +222,9 @@ export interface LikeC4DiagramProperties {
207
222
 
208
223
  /**
209
224
  * Improve performance by hiding certain elements and reducing visual effects (disable mix-blend, shadows, animations)
225
+ * Enable it if you have a large or static view
210
226
  *
211
- * @default 'auto' - will be set to true if view has more then 3000 * 2000 pixels
227
+ * @default 'auto' - will be `true` if view has more then 3000 * 2000 pixels
212
228
  */
213
229
  reduceGraphics?: 'auto' | boolean | undefined
214
230
 
@@ -231,7 +247,7 @@ export interface LikeC4DiagramProperties {
231
247
  /**
232
248
  * Dynamic filter, applies both to nodes and edges
233
249
  */
234
- where?: WhereOperator<string, string> | undefined
250
+ where?: WhereOperator<A> | undefined
235
251
 
236
252
  /**
237
253
  * Override ReactFlow props
@@ -239,35 +255,35 @@ export interface LikeC4DiagramProperties {
239
255
  reactFlowProps?: OverrideReactFlowProps | undefined
240
256
  }
241
257
 
242
- export type OpenSourceParams =
258
+ export type OpenSourceParams<A extends aux.Any = aux.Any> =
243
259
  | {
244
- element: Fqn
260
+ element: aux.Fqn<A>
245
261
  property?: string
246
262
  }
247
263
  | {
248
- relation: RelationId
264
+ relation: aux.RelationId
249
265
  }
250
266
  | {
251
- deployment: Fqn
267
+ deployment: aux.DeploymentFqn<A>
252
268
  property?: string
253
269
  }
254
270
  | {
255
- view: ViewId
271
+ view: aux.StrictViewId<A>
256
272
  }
257
273
 
258
- export interface LikeC4DiagramEventHandlers {
274
+ export interface LikeC4DiagramEventHandlers<A extends aux.Any> {
259
275
  onChange?: OnChange | null | undefined
260
- onNavigateTo?: OnNavigateTo | null | undefined
261
- onNodeClick?: OnNodeClick | null | undefined
262
- onNodeContextMenu?: OnNodeClick | null | undefined
276
+ onNavigateTo?: OnNavigateTo<A> | null | undefined
277
+ onNodeClick?: OnNodeClick<A> | null | undefined
278
+ onNodeContextMenu?: OnNodeClick<A> | null | undefined
263
279
  onCanvasContextMenu?: OnCanvasClick | null | undefined
264
- onEdgeClick?: OnEdgeClick | null | undefined
265
- onEdgeContextMenu?: OnEdgeClick | null | undefined
280
+ onEdgeClick?: OnEdgeClick<A> | null | undefined
281
+ onEdgeContextMenu?: OnEdgeClick<A> | null | undefined
266
282
  onCanvasClick?: OnCanvasClick | null | undefined
267
283
  onCanvasDblClick?: OnCanvasClick | null | undefined
268
284
 
269
285
  // if set, will render a burger menu icon in the top left corner
270
286
  onBurgerMenuClick?: null | undefined | (() => void)
271
287
 
272
- onOpenSource?: null | undefined | ((params: OpenSourceParams) => void)
288
+ onOpenSource?: null | undefined | ((params: OpenSourceParams<A>) => void)
273
289
  }
@@ -1,6 +1,6 @@
1
+ import type { Any } from '@likec4/core/types'
1
2
  import { ReactFlowProvider as XYFlowProvider } from '@xyflow/react'
2
3
  import { type PropsWithChildren, useRef } from 'react'
3
- import { isEmpty } from 'remeda'
4
4
  import {
5
5
  DiagramEventHandlers,
6
6
  DiagramFeatures,
@@ -15,11 +15,14 @@ import { LikeC4CustomColors } from './LikeC4CustomColors'
15
15
  import { type LikeC4DiagramEventHandlers, type LikeC4DiagramProperties } from './LikeC4Diagram.props'
16
16
  import { LikeC4DiagramXYFlow } from './likec4diagram/DiagramXYFlow'
17
17
  import type { Types } from './likec4diagram/types'
18
- import { useLikeC4Model } from './likec4model'
19
18
  import { DiagramActorProvider } from './state/DiagramActorProvider'
20
19
 
21
- export type LikeC4DiagramProps = PropsWithChildren<LikeC4DiagramProperties & LikeC4DiagramEventHandlers>
22
- export function LikeC4Diagram({
20
+ export type LikeC4DiagramProps<A extends Any = Any> = PropsWithChildren<
21
+ & LikeC4DiagramProperties<A>
22
+ & LikeC4DiagramEventHandlers<A>
23
+ >
24
+
25
+ export function LikeC4Diagram<A extends Any = Any>({
23
26
  onCanvasClick,
24
27
  onCanvasContextMenu,
25
28
  onCanvasDblClick,
@@ -39,6 +42,7 @@ export function LikeC4Diagram({
39
42
  pannable = true,
40
43
  zoomable = true,
41
44
  background = 'dots',
45
+ enableElementTags = false,
42
46
  enableFocusMode = false,
43
47
  enableElementDetails = false,
44
48
  enableRelationshipDetails = enableElementDetails,
@@ -61,8 +65,7 @@ export function LikeC4Diagram({
61
65
  reactFlowProps = {},
62
66
  renderNodes,
63
67
  children,
64
- }: LikeC4DiagramProps) {
65
- const hasLikec4model = !!useLikeC4Model()
68
+ }: LikeC4DiagramProps<A>) {
66
69
  const initialRef = useRef<{
67
70
  defaultNodes: Types.Node[]
68
71
  defaultEdges: Types.Edge[]
@@ -70,8 +73,6 @@ export function LikeC4Diagram({
70
73
  initialHeight: number
71
74
  }>(null)
72
75
 
73
- const isDynamicView = view.__ === 'dynamic'
74
-
75
76
  if (initialRef.current == null) {
76
77
  initialRef.current = {
77
78
  defaultEdges: [],
@@ -104,13 +105,13 @@ export function LikeC4Diagram({
104
105
  enableRelationshipBrowser,
105
106
  enableSearch,
106
107
  enableNavigationButtons: showNavigationButtons && !!onNavigateTo,
107
- enableDynamicViewWalkthrough: isDynamicView && enableDynamicViewWalkthrough,
108
+ enableDynamicViewWalkthrough: view._type === 'dynamic' && enableDynamicViewWalkthrough,
108
109
  enableEdgeEditing: experimentalEdgeEditing,
109
110
  enableNotations: showNotations,
110
111
  enableVscode: !!onOpenSource,
111
112
  enableControls: controls,
112
113
  enableViewTitle: showDiagramTitle,
113
- enableLikeC4Model: hasLikec4model,
114
+ enableElementTags,
114
115
  }}
115
116
  >
116
117
  <DiagramEventHandlers
@@ -129,21 +130,19 @@ export function LikeC4Diagram({
129
130
  }}>
130
131
  <ReduceGraphicsContext reduceGraphics={isReducedGraphicsMode}>
131
132
  <RootContainer className={className} reduceGraphics={isReducedGraphicsMode}>
132
- {!isEmpty(view.customColorDefinitions) && (
133
- <LikeC4CustomColors customColors={view.customColorDefinitions} />
134
- )}
133
+ <LikeC4CustomColors />
135
134
  <XYFlowProvider
136
135
  fitView={fitView}
137
136
  {...initialRef.current}
138
137
  >
139
138
  <DiagramActorProvider
140
- input={{
141
- view,
142
- pannable,
143
- zoomable,
144
- nodesSelectable,
145
- fitViewPadding,
146
- }}>
139
+ view={view}
140
+ zoomable={zoomable}
141
+ pannable={pannable}
142
+ fitViewPadding={fitViewPadding}
143
+ nodesSelectable={nodesSelectable}
144
+ where={where ?? null}
145
+ >
147
146
  <ControlsCustomLayoutProvider value={renderControls ?? null}>
148
147
  <LikeC4DiagramXYFlow
149
148
  nodesDraggable={nodesDraggable}
@@ -1,18 +1,19 @@
1
- import type { AnyAux, LikeC4Model } from '@likec4/core/model'
1
+ import type { LikeC4Model } from '@likec4/core/model'
2
+ import type { Any, Unknown } from '@likec4/core/types'
2
3
  import { type PropsWithChildren } from 'react'
3
4
  import { LikeC4ModelContext } from './likec4model/LikeC4ModelContext'
4
5
 
5
- export type LikeC4ModelProviderProps = PropsWithChildren<{
6
- likec4model: LikeC4Model<AnyAux>
6
+ export type LikeC4ModelProviderProps<A extends Any> = PropsWithChildren<{
7
+ likec4model: LikeC4Model<A>
7
8
  }>
8
9
 
9
10
  /**
10
11
  * Ensures LikeC4Model context
11
12
  */
12
- export function LikeC4ModelProvider({
13
+ export function LikeC4ModelProvider<A extends Any = Unknown>({
13
14
  children,
14
15
  likec4model,
15
- }: LikeC4ModelProviderProps) {
16
+ }: LikeC4ModelProviderProps<A>) {
16
17
  return (
17
18
  <LikeC4ModelContext.Provider value={likec4model}>
18
19
  {children}
@@ -1,8 +1,9 @@
1
+ import type * as aux from '@likec4/core/types/aux'
1
2
  import { LikeC4Diagram } from './LikeC4Diagram'
2
3
  import type { LikeC4DiagramProperties } from './LikeC4Diagram.props'
3
4
 
4
- export type StaticLikeC4DiagramProps = Pick<
5
- LikeC4DiagramProperties,
5
+ export type StaticLikeC4DiagramProps<A extends aux.Any> = Pick<
6
+ LikeC4DiagramProperties<A>,
6
7
  | 'view'
7
8
  | 'className'
8
9
  | 'fitView'
@@ -11,6 +12,7 @@ export type StaticLikeC4DiagramProps = Pick<
11
12
  | 'enableElementDetails'
12
13
  | 'enableRelationshipDetails'
13
14
  | 'enableRelationshipBrowser'
15
+ | 'enableElementTags'
14
16
  | 'reduceGraphics'
15
17
  | 'initialWidth'
16
18
  | 'initialHeight'
@@ -19,16 +21,15 @@ export type StaticLikeC4DiagramProps = Pick<
19
21
  | 'where'
20
22
  >
21
23
 
22
- export function StaticLikeC4Diagram({
24
+ export function StaticLikeC4Diagram<A extends aux.Any = aux.UnknownLayouted>({
23
25
  view,
24
26
  fitView = true,
25
27
  fitViewPadding = '8px',
26
- enableElementDetails = false,
27
28
  enableRelationshipDetails = false,
28
29
  enableRelationshipBrowser = enableRelationshipDetails,
29
30
  background = 'transparent',
30
31
  ...rest
31
- }: StaticLikeC4DiagramProps) {
32
+ }: StaticLikeC4DiagramProps<A>) {
32
33
  return (
33
34
  <LikeC4Diagram
34
35
  view={view}
@@ -41,7 +42,7 @@ export function StaticLikeC4Diagram({
41
42
  background={background}
42
43
  showDiagramTitle={false}
43
44
  showNotations={false}
44
- enableElementDetails={enableElementDetails}
45
+ enableElementDetails={false}
45
46
  enableRelationshipDetails={enableRelationshipDetails}
46
47
  enableRelationshipBrowser={enableRelationshipBrowser}
47
48
  enableDynamicViewWalkthrough={false}
@@ -51,6 +52,7 @@ export function StaticLikeC4Diagram({
51
52
  enableSearch={false}
52
53
  nodesSelectable={false}
53
54
  nodesDraggable={false}
55
+ enableElementTags={false}
54
56
  {...rest}
55
57
  />
56
58
  )
package/src/base/const.ts CHANGED
@@ -6,4 +6,4 @@ export const ZIndexes = {
6
6
  } as const
7
7
 
8
8
  export const MinZoom = 0.05
9
- export const MaxZoom = 2
9
+ export const MaxZoom = 3
package/src/base/index.ts CHANGED
@@ -1,10 +1,11 @@
1
1
  export { BaseXYFlow, type BaseXYFlowProps } from './BaseXYFlow'
2
2
 
3
3
  export {
4
- Base,
5
4
  type EdgeProps,
6
5
  type NodeProps,
7
6
  type NonOptional,
8
7
  type ReactFlowEdge,
9
8
  type ReactFlowNode,
10
9
  } from './types'
10
+
11
+ export * as Base from './types.Base'
@@ -1,6 +1,7 @@
1
1
  import { css, cx } from '@likec4/styles/css'
2
+ import { Box } from '@likec4/styles/jsx'
2
3
  import { actionBtn } from '@likec4/styles/recipes'
3
- import { ActionIcon, Box } from '@mantine/core'
4
+ import { ActionIcon } from '@mantine/core'
4
5
  import { useDebouncedValue } from '@mantine/hooks'
5
6
  import { IconZoomScan } from '@tabler/icons-react'
6
7
  import * as m from 'motion/react-m'
@@ -1,6 +1,7 @@
1
1
  import { css, cx } from '@likec4/styles/css'
2
+ import { Box } from '@likec4/styles/jsx'
2
3
  import { actionBtn } from '@likec4/styles/recipes'
3
- import { ActionIcon, Box } from '@mantine/core'
4
+ import { ActionIcon } from '@mantine/core'
4
5
  import { useDebouncedValue } from '@mantine/hooks'
5
6
  import { IconId } from '@tabler/icons-react'
6
7
  import * as m from 'motion/react-m'
@@ -1,6 +1,7 @@
1
- import type { DiagramNode } from '@likec4/core'
1
+ import type { DiagramNode } from '@likec4/core/types'
2
2
  import { css, cx } from '@likec4/styles/css'
3
- import { Box, Text } from '@mantine/core'
3
+ import { Box } from '@likec4/styles/jsx'
4
+ import { Text } from '@mantine/core'
4
5
  import { IconRenderer } from '../../../context'
5
6
  import type { NodeProps } from '../../types'
6
7
 
@@ -1,4 +1,5 @@
1
- import { type DiagramEdge, invariant } from '@likec4/core'
1
+ import { invariant } from '@likec4/core'
2
+ import type { DiagramEdge } from '@likec4/core/types'
2
3
  import { css, cx } from '@likec4/styles/css'
3
4
  import { type PropsWithChildren } from 'react'
4
5
  import type { UndefinedOnPartialDeep } from 'type-fest'
@@ -67,6 +67,7 @@ export const labelsva = sva({
67
67
  slots: ['root', 'stepNumber', 'labelContents', 'labelText', 'labelTechnology'],
68
68
  base: {
69
69
  root: {
70
+ pointerEvents: 'all',
70
71
  fontFamily: 'likec4.relation',
71
72
  padding: '3px 5px 5px 5px',
72
73
  display: 'flex',
@@ -1,8 +1,9 @@
1
- import { type DiagramEdge, extractStep, isStepEdgeId } from '@likec4/core'
1
+ import { extractStep, isStepEdgeId } from '@likec4/core'
2
+ import type { DiagramEdge } from '@likec4/core/types'
2
3
  import { cx } from '@likec4/styles/css'
3
4
  import { type BoxProps, Box } from '@likec4/styles/jsx'
4
5
  import { Text } from '@mantine/core'
5
- import { type PropsWithChildren } from 'react'
6
+ import { type PropsWithChildren, forwardRef } from 'react'
6
7
  import { isTruthy } from 'remeda'
7
8
  import type { UndefinedOnPartialDeep } from 'type-fest'
8
9
  import type { EdgeProps } from '../../types'
@@ -22,26 +23,29 @@ type EdgeLabelProps = PropsWithChildren<
22
23
  }
23
24
  >
24
25
 
25
- export function EdgeLabel({
26
- edgeProps: {
27
- id,
28
- data: {
29
- label,
30
- technology,
26
+ export const EdgeLabel = forwardRef<HTMLDivElement, EdgeLabelProps>((
27
+ {
28
+ edgeProps: {
29
+ id,
30
+ data: {
31
+ label,
32
+ technology,
33
+ },
31
34
  },
35
+ className,
36
+ style,
37
+ children,
38
+ ...rest
32
39
  },
33
- className,
34
- style,
35
- children,
36
- ...rest
37
- }: EdgeLabelProps) {
40
+ ref,
41
+ ) => {
38
42
  const stepNum = isStepEdgeId(id) ? extractStep(id) : null
39
43
  const classes = labelsva({
40
44
  isStepEdge: stepNum !== null,
41
45
  })
42
46
 
43
47
  return (
44
- <Box className={cx(classes.root!, className)} {...rest}>
48
+ <Box ref={ref} className={cx(classes.root!, className)} {...rest}>
45
49
  {stepNum !== null && (
46
50
  <Box className={classes.stepNumber!}>
47
51
  {stepNum}
@@ -62,4 +66,5 @@ export function EdgeLabel({
62
66
  </Box>
63
67
  </Box>
64
68
  )
65
- }
69
+ })
70
+ EdgeLabel.displayName = 'EdgeLabel'
@@ -1,4 +1,4 @@
1
- import { type DiagramEdge } from '@likec4/core'
1
+ import type { DiagramEdge } from '@likec4/core/types'
2
2
  import { css, cx } from '@likec4/styles/css'
3
3
  import { EdgeLabelRenderer } from '@xyflow/react'
4
4
  import { type HTMLAttributes } from 'react'
@@ -1,4 +1,5 @@
1
- import { type RelationshipArrowType, nonexhaustive } from '@likec4/core'
1
+ import { nonexhaustive } from '@likec4/core'
2
+ import type { RelationshipArrowType } from '@likec4/core/types'
2
3
  import type { SVGProps } from 'react'
3
4
 
4
5
  const Open = (props: SVGProps<SVGMarkerElement>) => (
@@ -1,4 +1,4 @@
1
- import type { DiagramEdge } from '@likec4/core'
1
+ import type { DiagramEdge } from '@likec4/core/types'
2
2
  import { css, cx } from '@likec4/styles/css'
3
3
  import { type PointerEventHandler, forwardRef } from 'react'
4
4
  import type { UndefinedOnPartialDeep } from 'type-fest'
@@ -1,6 +1,7 @@
1
1
  import { css, cx } from '@likec4/styles/css'
2
+ import { Box } from '@likec4/styles/jsx'
2
3
  import { actionBtn } from '@likec4/styles/recipes'
3
- import { ActionIcon, Box } from '@mantine/core'
4
+ import { ActionIcon } from '@mantine/core'
4
5
  import { useId } from '@mantine/hooks'
5
6
  import * as m from 'motion/react-m'
6
7
  import { useIsZoomTooSmall } from '../../../hooks/useXYFlow'
@@ -13,11 +14,12 @@ type ElementActionButtonsProps = NodeProps & {
13
14
 
14
15
  const container = css({
15
16
  position: 'absolute',
16
- top: `calc(100% - 28px)`,
17
- // transform: 'translateY(-100%)',
18
- left: 0,
19
- width: '100%',
20
- minHeight: '28px',
17
+ zIndex: 1,
18
+ top: `calc(100% - 30px)`,
19
+ transform: 'translateX(-50%)',
20
+ left: `50%`,
21
+ width: 'auto',
22
+ minHeight: '30px',
21
23
  display: 'flex',
22
24
  justifyContent: 'center',
23
25
  alignItems: 'center',
@@ -47,14 +49,13 @@ export function ElementActionButtons({
47
49
  }
48
50
  return (
49
51
  <Box className={container}>
50
- <Box
51
- component={m.div}
52
+ <m.div
52
53
  layoutRoot
53
54
  key={`${id}-action-buttons`}
54
55
  initial={false}
55
56
  style={{
56
57
  originY: 0,
57
- gap: '8px',
58
+ gap: 6,
58
59
  }}
59
60
  animate={{
60
61
  opacity: (isHovered || selected) ? 1 : 0.75,
@@ -82,7 +83,7 @@ export function ElementActionButtons({
82
83
  {button.icon}
83
84
  </ActionIcon>
84
85
  ))}
85
- </Box>
86
+ </m.div>
86
87
  </Box>
87
88
  )
88
89
  }
@@ -1,6 +1,7 @@
1
1
  import { css, cx } from '@likec4/styles/css'
2
+ import { Box } from '@likec4/styles/jsx'
2
3
  import { actionBtn } from '@likec4/styles/recipes'
3
- import { ActionIcon, Box } from '@mantine/core'
4
+ import { ActionIcon } from '@mantine/core'
4
5
  import { useId } from '@mantine/hooks'
5
6
  import { IconId } from '@tabler/icons-react'
6
7
  import * as m from 'motion/react-m'
@@ -1,4 +1,5 @@
1
- import { type ElementShape, type ElementStyle, nonexhaustive } from '@likec4/core'
1
+ import { nonexhaustive } from '@likec4/core'
2
+ import type { ElementShape, ElementStyle } from '@likec4/core/types'
2
3
  import { cx as clsx } from '@likec4/styles/css'
3
4
  import { toDomPrecision } from '../../../utils/xyflow'
4
5
  import * as css from './ElementShape.css'