@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.
- package/bundle/{chunk-BBzMXzCg.js → chunk-DlHyKoeo.js} +1700 -1206
- package/bundle/custom.js +51 -47
- package/bundle/index.js +5495 -5428
- package/dist/LikeC4CustomColors.d.ts +2 -7
- package/dist/LikeC4CustomColors.js +17 -6
- package/dist/LikeC4Diagram.d.ts +3 -2
- package/dist/LikeC4Diagram.js +10 -14
- package/dist/LikeC4Diagram.props.d.ts +41 -24
- package/dist/LikeC4ModelProvider.d.ts +5 -4
- package/dist/StaticLikeC4Diagram.d.ts +3 -2
- package/dist/StaticLikeC4Diagram.js +2 -2
- package/dist/base/BaseXYFlow.js +5 -5
- package/dist/base/const.d.ts +1 -1
- package/dist/base/const.js +1 -1
- package/dist/base/index.d.ts +2 -1
- package/dist/base/primitives/compound/CompoundActionButton.js +2 -1
- package/dist/base/primitives/compound/CompoundDetailsButton.js +2 -1
- package/dist/base/primitives/compound/CompoundTitle.d.ts +1 -1
- package/dist/base/primitives/compound/CompoundTitle.js +2 -1
- package/dist/base/primitives/edge/EdgeContainer.d.ts +1 -1
- package/dist/base/primitives/edge/EdgeLabel.css.js +1 -0
- package/dist/base/primitives/edge/EdgeLabel.d.ts +3 -3
- package/dist/base/primitives/edge/EdgeLabel.js +6 -4
- package/dist/base/primitives/edge/EdgeLabelContainer.d.ts +1 -1
- package/dist/base/primitives/edge/EdgeMarkers.d.ts +1 -1
- package/dist/base/primitives/edge/EdgePath.d.ts +1 -1
- package/dist/base/primitives/element/ElementActionButtons.js +10 -9
- package/dist/base/primitives/element/ElementDetailsButton.js +2 -1
- package/dist/base/primitives/element/ElementShape.d.ts +1 -1
- package/dist/base/primitives/element/ElementTags.d.ts +14 -0
- package/dist/base/primitives/element/ElementTags.js +176 -0
- package/dist/base/primitives/element/ElementTitle.d.ts +5 -4
- package/dist/base/primitives/element/ElementTitle.js +6 -6
- package/dist/base/primitives/index.d.ts +1 -0
- package/dist/base/types.Base.d.ts +54 -0
- package/dist/base/types.Base.js +48 -0
- package/dist/base/types.d.ts +2 -52
- package/dist/bundle/LikeC4View.d.ts +2 -1
- package/dist/bundle/LikeC4View.js +22 -19
- package/dist/bundle/LikeC4View.props.d.ts +15 -4
- package/dist/bundle/ReactLikeC4.d.ts +4 -7
- package/dist/bundle/ReactLikeC4.js +10 -8
- package/dist/bundle/index.js +1 -1
- package/dist/components/ErrorFallback.d.ts +2 -0
- package/dist/components/ErrorFallback.js +29 -0
- package/dist/context/DiagramEventHandlers.d.ts +6 -5
- package/dist/context/DiagramFeatures.d.ts +2 -2
- package/dist/context/DiagramFeatures.js +3 -31
- package/dist/context/EnsureMantine.js +1 -1
- package/dist/context/IconRenderer.js +1 -4
- package/dist/context/RootContainer.js +5 -1
- package/dist/context/TagStylesContext.d.ts +7 -0
- package/dist/context/TagStylesContext.js +85 -0
- package/dist/custom/components.d.ts +1 -1
- package/dist/custom/customNodes.d.ts +32 -17
- package/dist/custom/hooks.d.ts +1 -1
- package/dist/hooks/index.d.ts +1 -1
- package/dist/hooks/useDiagram.d.ts +73 -38
- package/dist/hooks/useDiagram.js +7 -3
- package/dist/hooks/useMantinePortalProps.d.ts +2 -2
- package/dist/hooks/useSearchActor.d.ts +2 -0
- package/dist/hooks/useSearchActor.js +10 -0
- package/dist/hooks/useUpdateEffect.js +3 -0
- package/dist/hooks/useXYFlow.d.ts +39 -37
- package/dist/hooks/useXYFlow.js +5 -1
- package/dist/index.js +1 -1
- package/dist/likec4diagram/DiagramUI.js +7 -2
- package/dist/likec4diagram/DiagramXYFlow.d.ts +4 -3
- package/dist/likec4diagram/DiagramXYFlow.js +107 -110
- package/dist/likec4diagram/custom/edges/RelationshipEdge.d.ts +7 -6
- package/dist/likec4diagram/custom/edges/RelationshipEdge.js +8 -0
- package/dist/likec4diagram/custom/edges/RelationshipsDropdownMenu.js +7 -5
- package/dist/likec4diagram/custom/index.d.ts +7 -6
- package/dist/likec4diagram/custom/nodes/nodes.js +39 -26
- package/dist/likec4diagram/custom/nodes/toolbar/_shared.d.ts +7 -7
- package/dist/likec4diagram/types.d.ts +5 -5
- package/dist/likec4diagram/ui/controls/Controls.js +12 -4
- package/dist/likec4diagram/ui/notation/NotationPanel.js +1 -1
- package/dist/likec4diagram/useViewToNodesEdges.d.ts +5 -3
- package/dist/likec4diagram/useViewToNodesEdges.js +20 -30
- package/dist/likec4model/LikeC4ModelContext.d.ts +2 -2
- package/dist/likec4model/index.d.ts +1 -1
- package/dist/likec4model/useLikeC4ElementsTree.js +1 -1
- package/dist/likec4model/useLikeC4Model.d.ts +23 -10
- package/dist/likec4model/useLikeC4Model.js +22 -7
- package/dist/overlays/Overlays.js +4 -27
- package/dist/overlays/element-details/ElementDetailsCard.d.ts +1 -1
- package/dist/overlays/element-details/ElementDetailsCard.js +19 -12
- package/dist/overlays/element-details/TabPanelDeployments.d.ts +1 -1
- package/dist/overlays/element-details/TabPanelDeployments.js +1 -1
- package/dist/overlays/element-details/TabPanelRelationships.d.ts +1 -1
- package/dist/overlays/element-details/TabPanelStructure.d.ts +1 -1
- package/dist/overlays/element-details/actor.d.ts +288 -286
- package/dist/overlays/overlay/Overlay.css.d.ts +57 -2
- package/dist/overlays/overlay/Overlay.css.js +76 -39
- package/dist/overlays/overlay/Overlay.d.ts +12 -0
- package/dist/overlays/overlay/Overlay.js +58 -27
- package/dist/overlays/overlaysActor.d.ts +1 -1
- package/dist/overlays/relationship-details/RelationshipDetails.d.ts +3 -2
- package/dist/overlays/relationship-details/RelationshipDetails.js +3 -3
- package/dist/overlays/relationship-details/_types.d.ts +2 -2
- package/dist/overlays/relationship-details/actor.js +7 -7
- package/dist/overlays/relationship-details/custom/edgeTypes.d.ts +3 -2
- package/dist/overlays/relationship-details/custom/nodeTypes.js +4 -0
- package/dist/overlays/relationship-details/hooks.d.ts +10 -9
- package/dist/overlays/relationship-details/layout-to-xyflow.js +1 -0
- package/dist/overlays/relationship-details/layout.js +3 -1
- package/dist/overlays/relationships-browser/RelationshipsBrowser.d.ts +3 -2
- package/dist/overlays/relationships-browser/SelectElement.js +1 -1
- package/dist/overlays/relationships-browser/_types.d.ts +2 -2
- package/dist/overlays/relationships-browser/actor.d.ts +1 -1
- package/dist/overlays/relationships-browser/actor.js +7 -7
- package/dist/overlays/relationships-browser/custom/edgeTypes.d.ts +3 -2
- package/dist/overlays/relationships-browser/custom/nodeTypes.d.ts +8 -5
- package/dist/overlays/relationships-browser/custom/nodeTypes.js +4 -0
- package/dist/overlays/relationships-browser/layout.d.ts +2 -2
- package/dist/overlays/relationships-browser/layout.js +10 -6
- package/dist/overlays/relationships-browser/useViewToNodesEdges.js +4 -3
- package/dist/search/Search.d.ts +4 -0
- package/dist/search/Search.js +173 -0
- package/dist/{likec4diagram/ui/search → search/components}/ElementsColumn.css.js +0 -1
- package/dist/search/components/ElementsColumn.d.ts +2 -0
- package/dist/{likec4diagram/ui/search → search/components}/ElementsColumn.js +26 -25
- package/dist/search/components/PickView.d.ts +4 -0
- package/dist/search/components/PickView.js +135 -0
- package/dist/search/components/SearchByTags.d.ts +1 -0
- package/dist/search/components/SearchByTags.js +119 -0
- package/dist/search/components/SearchInput.d.ts +2 -0
- package/dist/{likec4diagram/ui/search → search/components}/SearchInput.js +61 -40
- package/dist/{likec4diagram/ui/search → search/components}/ViewsColum.d.ts +3 -2
- package/dist/{likec4diagram/ui/search → search/components}/ViewsColum.js +25 -17
- package/dist/{likec4diagram/ui/search → search/components}/_shared.css.js +26 -35
- package/dist/{likec4diagram/ui/search/LikeC4Search.css.d.ts → search/components/styles.css.d.ts} +0 -2
- package/dist/search/components/styles.css.js +60 -0
- package/dist/search/components/utils.d.ts +5 -0
- package/dist/search/components/utils.js +58 -0
- package/dist/search/hooks.d.ts +10 -0
- package/dist/search/hooks.js +35 -0
- package/dist/search/searchActor.d.ts +90 -0
- package/dist/search/searchActor.js +75 -0
- package/dist/state/DiagramActorProvider.d.ts +9 -7
- package/dist/state/DiagramActorProvider.js +24 -18
- package/dist/state/assign.d.ts +0 -1
- package/dist/state/assign.js +9 -19
- package/dist/state/diagram-machine.d.ts +645 -183
- package/dist/state/diagram-machine.js +127 -60
- package/dist/state/syncManualLayoutActor.d.ts +2 -2
- package/dist/state/types.d.ts +2 -0
- package/dist/state/utils.d.ts +2 -0
- package/dist/state/utils.js +3 -0
- package/dist/styles-min.css +1 -1
- package/dist/styles-xyflow.css +1 -1
- package/dist/styles.css +1 -1
- package/dist/styles.css2.js +1 -1
- package/package.json +20 -19
- package/panda.buildinfo.json +171 -148
- package/src/LikeC4CustomColors.tsx +21 -6
- package/src/LikeC4Diagram.props.ts +48 -32
- package/src/LikeC4Diagram.tsx +19 -20
- package/src/LikeC4ModelProvider.tsx +6 -5
- package/src/StaticLikeC4Diagram.tsx +8 -6
- package/src/base/const.ts +1 -1
- package/src/base/index.ts +2 -1
- package/src/base/primitives/compound/CompoundActionButton.tsx +2 -1
- package/src/base/primitives/compound/CompoundDetailsButton.tsx +2 -1
- package/src/base/primitives/compound/CompoundTitle.tsx +3 -2
- package/src/base/primitives/edge/EdgeContainer.tsx +2 -1
- package/src/base/primitives/edge/EdgeLabel.css.ts +1 -0
- package/src/base/primitives/edge/EdgeLabel.tsx +20 -15
- package/src/base/primitives/edge/EdgeLabelContainer.tsx +1 -1
- package/src/base/primitives/edge/EdgeMarkers.tsx +2 -1
- package/src/base/primitives/edge/EdgePath.tsx +1 -1
- package/src/base/primitives/element/ElementActionButtons.tsx +11 -10
- package/src/base/primitives/element/ElementDetailsButton.tsx +2 -1
- package/src/base/primitives/element/ElementShape.tsx +2 -1
- package/src/base/primitives/element/ElementTags.tsx +182 -0
- package/src/base/primitives/element/ElementTitle.tsx +21 -15
- package/src/base/primitives/index.ts +1 -0
- package/src/base/types.Base.ts +104 -0
- package/src/base/types.ts +2 -99
- package/src/bundle/LikeC4View.props.ts +17 -4
- package/src/bundle/LikeC4View.tsx +27 -36
- package/src/bundle/ReactLikeC4.tsx +16 -36
- package/src/components/ErrorFallback.tsx +30 -0
- package/src/context/DiagramEventHandlers.tsx +5 -4
- package/src/context/DiagramFeatures.tsx +3 -22
- package/src/context/EnsureMantine.tsx +1 -1
- package/src/context/IconRenderer.tsx +1 -4
- package/src/context/RootContainer.tsx +9 -3
- package/src/context/TagStylesContext.tsx +96 -0
- package/src/custom/components.ts +2 -0
- package/src/custom/customNodes.tsx +29 -14
- package/src/custom/hooks.ts +2 -0
- package/src/hooks/index.ts +1 -1
- package/src/hooks/useCurrentViewId.ts +1 -4
- package/src/hooks/useDiagram.ts +104 -12
- package/src/hooks/useMantinePortalProps.ts +10 -1
- package/src/hooks/useSearchActor.ts +11 -0
- package/src/hooks/useUpdateEffect.ts +7 -4
- package/src/hooks/useXYFlow.ts +5 -0
- package/src/likec4diagram/DiagramUI.tsx +5 -0
- package/src/likec4diagram/DiagramXYFlow.tsx +118 -121
- package/src/likec4diagram/custom/edges/RelationshipEdge.tsx +9 -0
- package/src/likec4diagram/custom/edges/RelationshipsDropdownMenu.tsx +10 -9
- package/src/likec4diagram/custom/nodes/nodes.tsx +45 -43
- package/src/likec4diagram/custom/nodes/toolbar/_shared.tsx +11 -3
- package/src/likec4diagram/types.ts +5 -3
- package/src/likec4diagram/ui/controls/Controls.tsx +11 -4
- package/src/likec4diagram/ui/notation/NotationPanel.tsx +2 -2
- package/src/likec4diagram/useViewToNodesEdges.ts +34 -36
- package/src/likec4model/LikeC4ModelContext.ts +2 -2
- package/src/likec4model/index.ts +2 -0
- package/src/likec4model/useLikeC4ElementsTree.ts +1 -1
- package/src/likec4model/useLikeC4Model.ts +32 -16
- package/src/overlays/Overlays.tsx +5 -32
- package/src/overlays/element-details/ElementDetailsCard.tsx +25 -18
- package/src/overlays/element-details/TabPanelDeployments.tsx +3 -2
- package/src/overlays/element-details/TabPanelRelationships.tsx +2 -1
- package/src/overlays/element-details/TabPanelStructure.tsx +1 -1
- package/src/overlays/element-details/actor.ts +2 -2
- package/src/overlays/overlay/Overlay.css.ts +75 -38
- package/src/overlays/overlay/Overlay.tsx +61 -29
- package/src/overlays/overlaysActor.ts +1 -1
- package/src/overlays/relationship-details/RelationshipDetails.tsx +4 -4
- package/src/overlays/relationship-details/_types.ts +2 -1
- package/src/overlays/relationship-details/custom/nodeTypes.tsx +4 -0
- package/src/overlays/relationship-details/layout-to-xyflow.ts +1 -0
- package/src/overlays/relationship-details/layout.ts +3 -1
- package/src/overlays/relationships-browser/SelectElement.tsx +1 -1
- package/src/overlays/relationships-browser/_types.ts +2 -1
- package/src/overlays/relationships-browser/custom/nodeTypes.tsx +4 -0
- package/src/overlays/relationships-browser/layout.ts +12 -7
- package/src/overlays/relationships-browser/useViewToNodesEdges.ts +4 -4
- package/src/search/Search.tsx +220 -0
- package/src/{likec4diagram/ui/search → search/components}/ElementsColumn.css.ts +0 -29
- package/src/{likec4diagram/ui/search → search/components}/ElementsColumn.tsx +28 -29
- package/src/search/components/PickView.tsx +134 -0
- package/src/search/components/SearchByTags.tsx +112 -0
- package/src/{likec4diagram/ui/search → search/components}/SearchInput.tsx +72 -42
- package/src/{likec4diagram/ui/search → search/components}/ViewsColum.tsx +29 -22
- package/src/{likec4diagram/ui/search → search/components}/_shared.css.ts +26 -37
- package/src/{likec4diagram/ui/search/LikeC4Search.css.ts → search/components/styles.css.ts} +9 -36
- package/src/search/components/utils.ts +64 -0
- package/src/search/hooks.ts +38 -0
- package/src/search/searchActor.ts +99 -0
- package/src/state/DiagramActorProvider.tsx +37 -25
- package/src/state/assign.ts +10 -10
- package/src/state/diagram-machine.ts +123 -58
- package/src/state/syncManualLayoutActor.ts +1 -1
- package/src/state/types.ts +2 -0
- package/src/state/utils.ts +4 -0
- package/dist/base/types.js +0 -54
- package/dist/likec4diagram/ui/search/ElementsColumn.d.ts +0 -1
- package/dist/likec4diagram/ui/search/LikeC4Search.css.js +0 -87
- package/dist/likec4diagram/ui/search/LikeC4Search.d.ts +0 -2
- package/dist/likec4diagram/ui/search/LikeC4Search.js +0 -267
- package/dist/likec4diagram/ui/search/SearchInput.d.ts +0 -1
- package/dist/likec4diagram/ui/search/state.d.ts +0 -19
- package/dist/likec4diagram/ui/search/state.js +0 -63
- package/dist/likec4diagram/ui/search/utils.d.ts +0 -3
- package/dist/likec4diagram/ui/search/utils.js +0 -20
- package/src/likec4diagram/ui/search/LikeC4Search.tsx +0 -301
- package/src/likec4diagram/ui/search/state.ts +0 -78
- package/src/likec4diagram/ui/search/utils.ts +0 -20
- /package/dist/{likec4diagram/ui/search → search/components}/ElementsColumn.css.d.ts +0 -0
- /package/dist/{likec4diagram/ui/search → search/components}/ViewsColumn.css.d.ts +0 -0
- /package/dist/{likec4diagram/ui/search → search/components}/ViewsColumn.css.js +0 -0
- /package/dist/{likec4diagram/ui/search → search/components}/_shared.css.d.ts +0 -0
- /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
|
-
|
|
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<
|
|
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<
|
|
33
|
-
to:
|
|
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<
|
|
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:
|
|
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
|
|
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
|
|
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<
|
|
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:
|
|
267
|
+
deployment: aux.DeploymentFqn<A>
|
|
252
268
|
property?: string
|
|
253
269
|
}
|
|
254
270
|
| {
|
|
255
|
-
view:
|
|
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
|
}
|
package/src/LikeC4Diagram.tsx
CHANGED
|
@@ -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<
|
|
22
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
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 {
|
|
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<
|
|
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={
|
|
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
package/src/base/index.ts
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
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 {
|
|
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'
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import {
|
|
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
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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
|
-
|
|
34
|
-
|
|
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,5 @@
|
|
|
1
|
-
import {
|
|
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,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
|
|
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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
|
-
<
|
|
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:
|
|
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
|
-
</
|
|
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
|
|
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 {
|
|
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'
|