@likec4/diagram 1.31.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 (264) hide show
  1. package/bundle/{chunk-BBzMXzCg.js → chunk-BvTQaUYl.js} +1675 -1207
  2. package/bundle/custom.js +50 -47
  3. package/bundle/index.js +2482 -2438
  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 +28 -22
  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 +8 -6
  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 +3 -2
  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 +27 -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 +104 -107
  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 +3 -3
  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/useLikeC4ElementsTree.js +1 -1
  83. package/dist/likec4model/useLikeC4Model.d.ts +22 -10
  84. package/dist/likec4model/useLikeC4Model.js +11 -7
  85. package/dist/overlays/Overlays.js +4 -27
  86. package/dist/overlays/element-details/ElementDetailsCard.d.ts +1 -1
  87. package/dist/overlays/element-details/ElementDetailsCard.js +19 -12
  88. package/dist/overlays/element-details/TabPanelDeployments.d.ts +1 -1
  89. package/dist/overlays/element-details/TabPanelDeployments.js +1 -1
  90. package/dist/overlays/element-details/TabPanelRelationships.d.ts +1 -1
  91. package/dist/overlays/element-details/TabPanelStructure.d.ts +1 -1
  92. package/dist/overlays/element-details/actor.d.ts +288 -286
  93. package/dist/overlays/overlay/Overlay.css.d.ts +57 -2
  94. package/dist/overlays/overlay/Overlay.css.js +76 -39
  95. package/dist/overlays/overlay/Overlay.d.ts +12 -0
  96. package/dist/overlays/overlay/Overlay.js +36 -25
  97. package/dist/overlays/overlaysActor.d.ts +1 -1
  98. package/dist/overlays/relationship-details/RelationshipDetails.d.ts +3 -2
  99. package/dist/overlays/relationship-details/RelationshipDetails.js +3 -3
  100. package/dist/overlays/relationship-details/_types.d.ts +2 -2
  101. package/dist/overlays/relationship-details/actor.js +7 -7
  102. package/dist/overlays/relationship-details/custom/edgeTypes.d.ts +3 -2
  103. package/dist/overlays/relationship-details/custom/nodeTypes.js +4 -0
  104. package/dist/overlays/relationship-details/hooks.d.ts +10 -9
  105. package/dist/overlays/relationship-details/layout-to-xyflow.js +1 -0
  106. package/dist/overlays/relationship-details/layout.js +3 -1
  107. package/dist/overlays/relationships-browser/RelationshipsBrowser.d.ts +3 -2
  108. package/dist/overlays/relationships-browser/SelectElement.js +1 -1
  109. package/dist/overlays/relationships-browser/_types.d.ts +2 -2
  110. package/dist/overlays/relationships-browser/actor.d.ts +1 -1
  111. package/dist/overlays/relationships-browser/actor.js +7 -7
  112. package/dist/overlays/relationships-browser/custom/edgeTypes.d.ts +3 -2
  113. package/dist/overlays/relationships-browser/custom/nodeTypes.d.ts +8 -5
  114. package/dist/overlays/relationships-browser/custom/nodeTypes.js +4 -0
  115. package/dist/overlays/relationships-browser/layout.d.ts +2 -2
  116. package/dist/overlays/relationships-browser/layout.js +10 -6
  117. package/dist/overlays/relationships-browser/useViewToNodesEdges.js +4 -3
  118. package/dist/search/Search.d.ts +5 -0
  119. package/dist/search/Search.js +192 -0
  120. package/dist/{likec4diagram/ui/search → search/components}/ElementsColumn.css.js +0 -1
  121. package/dist/search/components/ElementsColumn.d.ts +2 -0
  122. package/dist/{likec4diagram/ui/search → search/components}/ElementsColumn.js +21 -19
  123. package/dist/search/components/PickView.d.ts +4 -0
  124. package/dist/search/components/PickView.js +135 -0
  125. package/dist/search/components/SearchByTags.d.ts +1 -0
  126. package/dist/search/components/SearchByTags.js +116 -0
  127. package/dist/search/components/SearchInput.d.ts +2 -0
  128. package/dist/{likec4diagram/ui/search → search/components}/SearchInput.js +53 -34
  129. package/dist/{likec4diagram/ui/search → search/components}/ViewsColum.d.ts +3 -2
  130. package/dist/{likec4diagram/ui/search → search/components}/ViewsColum.js +14 -13
  131. package/dist/{likec4diagram/ui/search → search/components}/_shared.css.js +26 -35
  132. package/dist/{likec4diagram/ui/search/LikeC4Search.css.d.ts → search/components/styles.css.d.ts} +0 -2
  133. package/dist/search/components/styles.css.js +60 -0
  134. package/dist/{likec4diagram/ui/search → search/components}/utils.d.ts +1 -0
  135. package/dist/{likec4diagram/ui/search → search/components}/utils.js +7 -1
  136. package/dist/search/hooks.d.ts +16 -0
  137. package/dist/search/hooks.js +35 -0
  138. package/dist/search/searchActor.d.ts +90 -0
  139. package/dist/search/searchActor.js +75 -0
  140. package/dist/state/DiagramActorProvider.d.ts +9 -7
  141. package/dist/state/DiagramActorProvider.js +24 -18
  142. package/dist/state/assign.d.ts +0 -1
  143. package/dist/state/assign.js +9 -19
  144. package/dist/state/diagram-machine.d.ts +430 -176
  145. package/dist/state/diagram-machine.js +119 -54
  146. package/dist/state/syncManualLayoutActor.d.ts +2 -2
  147. package/dist/state/types.d.ts +2 -0
  148. package/dist/state/utils.d.ts +2 -0
  149. package/dist/state/utils.js +3 -0
  150. package/dist/styles-min.css +1 -1
  151. package/dist/styles-xyflow.css +1 -1
  152. package/dist/styles.css +1 -1
  153. package/dist/styles.css2.js +1 -1
  154. package/package.json +18 -18
  155. package/panda.buildinfo.json +171 -148
  156. package/src/LikeC4CustomColors.tsx +21 -6
  157. package/src/LikeC4Diagram.props.ts +35 -30
  158. package/src/LikeC4Diagram.tsx +19 -20
  159. package/src/LikeC4ModelProvider.tsx +6 -5
  160. package/src/StaticLikeC4Diagram.tsx +8 -6
  161. package/src/base/const.ts +1 -1
  162. package/src/base/index.ts +2 -1
  163. package/src/base/primitives/compound/CompoundActionButton.tsx +2 -1
  164. package/src/base/primitives/compound/CompoundDetailsButton.tsx +2 -1
  165. package/src/base/primitives/compound/CompoundTitle.tsx +3 -2
  166. package/src/base/primitives/edge/EdgeContainer.tsx +2 -1
  167. package/src/base/primitives/edge/EdgeLabel.css.ts +1 -0
  168. package/src/base/primitives/edge/EdgeLabel.tsx +20 -15
  169. package/src/base/primitives/edge/EdgeLabelContainer.tsx +1 -1
  170. package/src/base/primitives/edge/EdgeMarkers.tsx +2 -1
  171. package/src/base/primitives/edge/EdgePath.tsx +1 -1
  172. package/src/base/primitives/element/ElementActionButtons.tsx +11 -10
  173. package/src/base/primitives/element/ElementDetailsButton.tsx +2 -1
  174. package/src/base/primitives/element/ElementShape.tsx +2 -1
  175. package/src/base/primitives/element/ElementTags.tsx +182 -0
  176. package/src/base/primitives/element/ElementTitle.tsx +21 -15
  177. package/src/base/primitives/index.ts +1 -0
  178. package/src/base/types.Base.ts +104 -0
  179. package/src/base/types.ts +2 -99
  180. package/src/bundle/LikeC4View.props.ts +17 -4
  181. package/src/bundle/LikeC4View.tsx +17 -19
  182. package/src/bundle/ReactLikeC4.tsx +14 -26
  183. package/src/components/ErrorFallback.tsx +30 -0
  184. package/src/context/DiagramEventHandlers.tsx +5 -4
  185. package/src/context/DiagramFeatures.tsx +3 -22
  186. package/src/context/EnsureMantine.tsx +1 -1
  187. package/src/context/IconRenderer.tsx +1 -4
  188. package/src/context/RootContainer.tsx +9 -3
  189. package/src/context/TagStylesContext.tsx +96 -0
  190. package/src/custom/components.ts +2 -0
  191. package/src/custom/customNodes.tsx +24 -14
  192. package/src/custom/hooks.ts +1 -0
  193. package/src/hooks/index.ts +1 -1
  194. package/src/hooks/useCurrentViewId.ts +1 -4
  195. package/src/hooks/useDiagram.ts +104 -12
  196. package/src/hooks/useMantinePortalProps.ts +10 -1
  197. package/src/hooks/useSearchActor.ts +11 -0
  198. package/src/hooks/useUpdateEffect.ts +7 -4
  199. package/src/hooks/useXYFlow.ts +5 -0
  200. package/src/likec4diagram/DiagramUI.tsx +5 -0
  201. package/src/likec4diagram/DiagramXYFlow.tsx +115 -118
  202. package/src/likec4diagram/custom/edges/RelationshipEdge.tsx +9 -0
  203. package/src/likec4diagram/custom/edges/RelationshipsDropdownMenu.tsx +10 -9
  204. package/src/likec4diagram/custom/nodes/nodes.tsx +45 -43
  205. package/src/likec4diagram/custom/nodes/toolbar/_shared.tsx +11 -3
  206. package/src/likec4diagram/types.ts +5 -3
  207. package/src/likec4diagram/ui/controls/Controls.tsx +11 -4
  208. package/src/likec4diagram/ui/notation/NotationPanel.tsx +2 -2
  209. package/src/likec4diagram/useViewToNodesEdges.ts +34 -36
  210. package/src/likec4model/LikeC4ModelContext.ts +2 -2
  211. package/src/likec4model/useLikeC4ElementsTree.ts +1 -1
  212. package/src/likec4model/useLikeC4Model.ts +18 -16
  213. package/src/overlays/Overlays.tsx +5 -32
  214. package/src/overlays/element-details/ElementDetailsCard.tsx +25 -18
  215. package/src/overlays/element-details/TabPanelDeployments.tsx +3 -2
  216. package/src/overlays/element-details/TabPanelRelationships.tsx +2 -1
  217. package/src/overlays/element-details/TabPanelStructure.tsx +1 -1
  218. package/src/overlays/element-details/actor.ts +2 -2
  219. package/src/overlays/overlay/Overlay.css.ts +75 -38
  220. package/src/overlays/overlay/Overlay.tsx +43 -26
  221. package/src/overlays/overlaysActor.ts +1 -1
  222. package/src/overlays/relationship-details/RelationshipDetails.tsx +4 -4
  223. package/src/overlays/relationship-details/_types.ts +2 -1
  224. package/src/overlays/relationship-details/custom/nodeTypes.tsx +4 -0
  225. package/src/overlays/relationship-details/layout-to-xyflow.ts +1 -0
  226. package/src/overlays/relationship-details/layout.ts +3 -1
  227. package/src/overlays/relationships-browser/SelectElement.tsx +1 -1
  228. package/src/overlays/relationships-browser/_types.ts +2 -1
  229. package/src/overlays/relationships-browser/custom/nodeTypes.tsx +4 -0
  230. package/src/overlays/relationships-browser/layout.ts +12 -7
  231. package/src/overlays/relationships-browser/useViewToNodesEdges.ts +4 -4
  232. package/src/search/Search.tsx +237 -0
  233. package/src/{likec4diagram/ui/search → search/components}/ElementsColumn.css.ts +0 -29
  234. package/src/{likec4diagram/ui/search → search/components}/ElementsColumn.tsx +24 -22
  235. package/src/search/components/PickView.tsx +140 -0
  236. package/src/search/components/SearchByTags.tsx +109 -0
  237. package/src/{likec4diagram/ui/search → search/components}/SearchInput.tsx +63 -36
  238. package/src/{likec4diagram/ui/search → search/components}/ViewsColum.tsx +17 -18
  239. package/src/{likec4diagram/ui/search → search/components}/_shared.css.ts +26 -37
  240. package/src/{likec4diagram/ui/search/LikeC4Search.css.ts → search/components/styles.css.ts} +9 -36
  241. package/src/{likec4diagram/ui/search → search/components}/utils.ts +7 -0
  242. package/src/search/hooks.ts +41 -0
  243. package/src/search/searchActor.ts +99 -0
  244. package/src/state/DiagramActorProvider.tsx +36 -25
  245. package/src/state/assign.ts +10 -10
  246. package/src/state/diagram-machine.ts +115 -52
  247. package/src/state/syncManualLayoutActor.ts +1 -1
  248. package/src/state/types.ts +2 -0
  249. package/src/state/utils.ts +4 -0
  250. package/dist/base/types.js +0 -54
  251. package/dist/likec4diagram/ui/search/ElementsColumn.d.ts +0 -1
  252. package/dist/likec4diagram/ui/search/LikeC4Search.css.js +0 -87
  253. package/dist/likec4diagram/ui/search/LikeC4Search.d.ts +0 -2
  254. package/dist/likec4diagram/ui/search/LikeC4Search.js +0 -267
  255. package/dist/likec4diagram/ui/search/SearchInput.d.ts +0 -1
  256. package/dist/likec4diagram/ui/search/state.d.ts +0 -19
  257. package/dist/likec4diagram/ui/search/state.js +0 -63
  258. package/src/likec4diagram/ui/search/LikeC4Search.tsx +0 -301
  259. package/src/likec4diagram/ui/search/state.ts +0 -78
  260. /package/dist/{likec4diagram/ui/search → search/components}/ElementsColumn.css.d.ts +0 -0
  261. /package/dist/{likec4diagram/ui/search → search/components}/ViewsColumn.css.d.ts +0 -0
  262. /package/dist/{likec4diagram/ui/search → search/components}/ViewsColumn.css.js +0 -0
  263. /package/dist/{likec4diagram/ui/search → search/components}/_shared.css.d.ts +0 -0
  264. /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
 
@@ -199,6 +198,12 @@ export interface LikeC4DiagramProperties {
199
198
  */
200
199
  enableDynamicViewWalkthrough?: boolean | undefined
201
200
 
201
+ /**
202
+ * Display element tags in the bottom left corner
203
+ * @default true
204
+ */
205
+ enableElementTags?: boolean | undefined
206
+
202
207
  /**
203
208
  * Experimental feature to enable edge editing
204
209
  * @default false
@@ -231,7 +236,7 @@ export interface LikeC4DiagramProperties {
231
236
  /**
232
237
  * Dynamic filter, applies both to nodes and edges
233
238
  */
234
- where?: WhereOperator<string, string> | undefined
239
+ where?: WhereOperator<A> | undefined
235
240
 
236
241
  /**
237
242
  * Override ReactFlow props
@@ -239,35 +244,35 @@ export interface LikeC4DiagramProperties {
239
244
  reactFlowProps?: OverrideReactFlowProps | undefined
240
245
  }
241
246
 
242
- export type OpenSourceParams =
247
+ export type OpenSourceParams<A extends aux.Any = aux.Any> =
243
248
  | {
244
- element: Fqn
249
+ element: aux.Fqn<A>
245
250
  property?: string
246
251
  }
247
252
  | {
248
- relation: RelationId
253
+ relation: aux.RelationId
249
254
  }
250
255
  | {
251
- deployment: Fqn
256
+ deployment: aux.DeploymentFqn<A>
252
257
  property?: string
253
258
  }
254
259
  | {
255
- view: ViewId
260
+ view: aux.StrictViewId<A>
256
261
  }
257
262
 
258
- export interface LikeC4DiagramEventHandlers {
263
+ export interface LikeC4DiagramEventHandlers<A extends aux.Any> {
259
264
  onChange?: OnChange | null | undefined
260
- onNavigateTo?: OnNavigateTo | null | undefined
261
- onNodeClick?: OnNodeClick | null | undefined
262
- onNodeContextMenu?: OnNodeClick | null | undefined
265
+ onNavigateTo?: OnNavigateTo<A> | null | undefined
266
+ onNodeClick?: OnNodeClick<A> | null | undefined
267
+ onNodeContextMenu?: OnNodeClick<A> | null | undefined
263
268
  onCanvasContextMenu?: OnCanvasClick | null | undefined
264
- onEdgeClick?: OnEdgeClick | null | undefined
265
- onEdgeContextMenu?: OnEdgeClick | null | undefined
269
+ onEdgeClick?: OnEdgeClick<A> | null | undefined
270
+ onEdgeContextMenu?: OnEdgeClick<A> | null | undefined
266
271
  onCanvasClick?: OnCanvasClick | null | undefined
267
272
  onCanvasDblClick?: OnCanvasClick | null | undefined
268
273
 
269
274
  // if set, will render a burger menu icon in the top left corner
270
275
  onBurgerMenuClick?: null | undefined | (() => void)
271
276
 
272
- onOpenSource?: null | undefined | ((params: OpenSourceParams) => void)
277
+ onOpenSource?: null | undefined | ((params: OpenSourceParams<A>) => void)
273
278
  }
@@ -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 = true,
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'