@likec4/diagram 1.30.0 → 1.31.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.
- package/README.md +324 -5
- package/bundle/chunk-BBzMXzCg.js +21383 -0
- package/bundle/custom.js +62 -0
- package/bundle/index.js +17459 -38163
- package/dist/LikeC4CustomColors.js +2 -2
- package/dist/LikeC4Diagram.d.ts +1 -1
- package/dist/LikeC4Diagram.js +4 -2
- package/dist/LikeC4Diagram.props.d.ts +6 -1
- package/dist/LikeC4ModelProvider.d.ts +3 -3
- package/dist/LikeC4ModelProvider.js +0 -1
- package/dist/StaticLikeC4Diagram.d.ts +1 -1
- package/dist/base/BaseXYFlow.js +3 -3
- package/dist/base/primitives/compound/CompoundActionButton.d.ts +3 -2
- package/dist/base/primitives/compound/CompoundDetailsButton.d.ts +3 -2
- package/dist/base/primitives/compound/CompoundNodeContainer.d.ts +7 -3
- package/dist/base/primitives/compound/CompoundNodeContainer.js +3 -2
- package/dist/base/primitives/customEdge.d.ts +2 -35
- package/dist/base/primitives/customEdge.js +2 -2
- package/dist/base/primitives/customNode.d.ts +2 -2
- package/dist/base/primitives/customNode.js +9 -2
- package/dist/base/primitives/edge/EdgeContainer.js +0 -1
- package/dist/base/primitives/edge/EdgeLabel.js +0 -1
- package/dist/base/primitives/edge/EdgeLabelContainer.js +0 -2
- package/dist/base/primitives/edge/EdgePath.js +2 -2
- package/dist/base/primitives/element/ElementNodeContainer.d.ts +24 -22
- package/dist/base/primitives/element/ElementNodeContainer.js +66 -68
- package/dist/base/primitives/element/ElementShape.d.ts +8 -4
- package/dist/base/primitives/element/ElementShape.js +4 -3
- package/dist/base/primitives/element/ElementTitle.css.d.ts +1 -1
- package/dist/base/primitives/element/ElementTitle.js +0 -1
- package/dist/base/types.d.ts +5 -5
- package/dist/bundle/LikeC4View.js +6 -3
- package/dist/bundle/LikeC4View.props.d.ts +5 -1
- package/dist/bundle/ReactLikeC4.js +1 -2
- package/dist/bundle/ShadowRoot.js +3 -3
- package/dist/bundle/custom.d.ts +1 -0
- package/dist/bundle/index.d.ts +3 -1
- package/dist/bundle/index.js +9 -0
- package/dist/bundle/styles.css.js +5 -5
- package/dist/components/SearchControl.js +2 -2
- package/dist/context/ControlsCustomLayout.js +0 -1
- package/dist/context/DiagramEventHandlers.js +5 -5
- package/dist/context/DiagramFeatures.d.ts +2 -4
- package/dist/context/DiagramFeatures.js +15 -16
- package/dist/context/EnsureMantine.js +9 -4
- package/dist/context/FramerMotionConfig.js +0 -1
- package/dist/context/IconRenderer.js +7 -7
- package/dist/context/ReduceGraphics.js +6 -6
- package/dist/context/RootContainer.js +5 -5
- package/dist/context/index.d.ts +1 -1
- package/dist/custom/components.d.ts +5 -0
- package/dist/custom/customNodes.d.ts +218 -0
- package/dist/custom/hooks.d.ts +10 -0
- package/dist/custom/index.d.ts +4 -0
- package/dist/hooks/safeContext.js +3 -3
- package/dist/hooks/useCurrentViewId.d.ts +5 -1
- package/dist/hooks/useCurrentViewId.js +1 -2
- package/dist/hooks/useDiagram.d.ts +14 -12544
- package/dist/hooks/useDiagram.js +3 -5
- package/dist/hooks/useMantinePortalProps.js +2 -2
- package/dist/hooks/useSetState.js +3 -3
- package/dist/hooks/useUpdateEffect.js +0 -1
- package/dist/hooks/useXYFlow.d.ts +64 -64
- package/dist/hooks/useXYFlow.js +2 -2
- package/dist/index.d.ts +2 -4
- package/dist/index.js +8 -3
- package/dist/likec4diagram/DiagramUI.js +2 -2
- package/dist/likec4diagram/DiagramXYFlow.d.ts +1 -1
- package/dist/likec4diagram/DiagramXYFlow.js +25 -7
- package/dist/likec4diagram/custom/edges/NotePopover.js +2 -2
- package/dist/likec4diagram/custom/edges/RelationshipEdge.d.ts +9 -13
- package/dist/likec4diagram/custom/edges/RelationshipEdge.js +8 -8
- package/dist/likec4diagram/custom/edges/RelationshipsDropdownMenu.js +14 -12
- package/dist/likec4diagram/custom/index.d.ts +15 -19
- package/dist/likec4diagram/custom/index.js +3 -3
- package/dist/likec4diagram/custom/nodes/CompoundActions.js +2 -2
- package/dist/likec4diagram/custom/nodes/ElementActions.d.ts +27 -4
- package/dist/likec4diagram/custom/nodes/ElementActions.js +67 -53
- package/dist/likec4diagram/custom/nodes/index.d.ts +8 -0
- package/dist/likec4diagram/custom/nodes/nodes.d.ts +10 -0
- package/dist/likec4diagram/custom/nodes/{nodeTypes.js → nodes.js} +39 -39
- package/dist/likec4diagram/custom/nodes/toolbar/ColorButton.js +2 -2
- package/dist/likec4diagram/custom/nodes/toolbar/CompoundToolbar.js +6 -7
- package/dist/likec4diagram/custom/nodes/toolbar/ElementToolbar.js +3 -3
- package/dist/likec4diagram/custom/nodes/toolbar/Toolbar.d.ts +3 -2
- package/dist/likec4diagram/custom/nodes/toolbar/Toolbar.js +2 -2
- package/dist/likec4diagram/custom/nodes/toolbar/_shared.d.ts +2 -2
- package/dist/likec4diagram/custom/nodes/toolbar/_shared.js +2 -2
- package/dist/likec4diagram/types.d.ts +15 -7
- package/dist/likec4diagram/ui/controls/ChangeAutoLayoutButton.js +4 -4
- package/dist/likec4diagram/ui/controls/Controls.js +2 -2
- package/dist/likec4diagram/ui/diagram-title/DiagramTitlePanel.js +2 -2
- package/dist/likec4diagram/ui/notation/NotationPanel.js +6 -8
- package/dist/likec4diagram/ui/search/ElementsColumn.js +6 -7
- package/dist/likec4diagram/ui/search/LikeC4Search.js +3 -3
- package/dist/likec4diagram/ui/search/SearchInput.js +0 -1
- package/dist/likec4diagram/ui/search/_shared.css.d.ts +1 -1
- package/dist/likec4diagram/ui/search/state.js +3 -4
- package/dist/likec4diagram/ui/walkthrough/DynamicViewWalkthrough.js +4 -4
- package/dist/likec4diagram/useLayoutConstraints.js +3 -4
- package/dist/likec4diagram/useViewToNodesEdges.js +2 -0
- package/dist/likec4model/LikeC4ModelContext.d.ts +2 -2
- package/dist/likec4model/LikeC4ModelContext.js +2 -2
- package/dist/likec4model/useLikeC4ElementsTree.d.ts +1 -1
- package/dist/likec4model/useLikeC4ElementsTree.js +3 -3
- package/dist/likec4model/useLikeC4Model.d.ts +1 -1
- package/dist/likec4model/useLikeC4Model.js +2 -2
- package/dist/overlays/Overlays.d.ts +2 -3
- package/dist/overlays/Overlays.js +5 -6
- package/dist/overlays/element-details/ElementDetailsCard.css.js +13 -9
- package/dist/overlays/element-details/ElementDetailsCard.js +98 -105
- package/dist/overlays/element-details/TabPanelDeployments.js +4 -4
- package/dist/overlays/element-details/TabPanelRelationships.js +2 -2
- package/dist/overlays/element-details/TabPanelStructure.js +3 -3
- package/dist/overlays/element-details/actor.d.ts +6905 -19690
- package/dist/overlays/element-details/actor.js +0 -2
- package/dist/overlays/element-details/actorContext.js +3 -3
- package/dist/overlays/overlay/Overlay.d.ts +11 -1
- package/dist/overlays/overlay/Overlay.js +8 -8
- package/dist/overlays/overlaysActor.d.ts +4 -2
- package/dist/overlays/overlaysActor.js +2 -1
- package/dist/overlays/relationship-details/RelationshipDetails.d.ts +4 -8
- package/dist/overlays/relationship-details/RelationshipDetails.js +12 -12
- package/dist/overlays/relationship-details/SelectEdge.js +2 -3
- package/dist/overlays/relationship-details/_types.d.ts +6 -5
- package/dist/overlays/relationship-details/actor.d.ts +3 -3
- package/dist/overlays/relationship-details/compute.js +3 -3
- package/dist/overlays/relationship-details/custom/edgeTypes.d.ts +4 -8
- package/dist/overlays/relationship-details/custom/edgeTypes.js +2 -2
- package/dist/overlays/relationship-details/custom/nodeTypes.d.ts +3 -31
- package/dist/overlays/relationship-details/hooks.d.ts +27 -27
- package/dist/overlays/relationship-details/hooks.js +4 -4
- package/dist/overlays/relationship-details/layout.js +2 -3
- package/dist/overlays/relationships-browser/RelationshipsBrowser.d.ts +4 -8
- package/dist/overlays/relationships-browser/RelationshipsBrowser.js +8 -8
- package/dist/overlays/relationships-browser/SelectElement.js +5 -5
- package/dist/overlays/relationships-browser/_types.d.ts +6 -5
- package/dist/overlays/relationships-browser/actor.d.ts +63 -428
- package/dist/overlays/relationships-browser/custom/edgeTypes.d.ts +4 -8
- package/dist/overlays/relationships-browser/custom/edgeTypes.js +2 -2
- package/dist/overlays/relationships-browser/custom/nodeTypes.d.ts +10 -14
- package/dist/overlays/relationships-browser/custom/nodeTypes.js +1 -2
- package/dist/overlays/relationships-browser/hooks.d.ts +4 -61
- package/dist/overlays/relationships-browser/hooks.js +4 -4
- package/dist/overlays/relationships-browser/layout.js +3 -4
- package/dist/state/DiagramActorProvider.js +3 -3
- package/dist/state/diagram-machine.d.ts +186 -10369
- package/dist/state/diagram-machine.js +2 -1
- package/dist/state/hotkeyActor.d.ts +4 -2
- package/dist/state/syncManualLayoutActor.d.ts +14 -3
- package/dist/state/syncManualLayoutActor.js +2 -1
- package/dist/state/types.d.ts +5 -4
- package/dist/state/utils.d.ts +1 -1
- package/dist/styles-font.css +1 -0
- package/dist/styles-min.css +1 -0
- package/dist/styles-xyflow.css +1 -0
- package/dist/styles.css +1 -0
- package/dist/styles.css2.js +3 -0
- package/package.json +46 -21
- package/panda.buildinfo.json +979 -0
- package/src/LikeC4Diagram.props.ts +7 -1
- package/src/LikeC4Diagram.tsx +2 -0
- package/src/LikeC4ModelProvider.tsx +3 -3
- package/src/StaticLikeC4Diagram.tsx +1 -0
- package/src/base/Background.tsx +0 -4
- package/src/base/primitives/compound/CompoundActionButton.tsx +7 -4
- package/src/base/primitives/compound/CompoundDetailsButton.tsx +7 -4
- package/src/base/primitives/compound/CompoundNodeContainer.tsx +8 -7
- package/src/base/primitives/customEdge.ts +1 -1
- package/src/base/primitives/{customNode.ts → customNode.tsx} +11 -3
- package/src/base/primitives/element/ElementNodeContainer.tsx +87 -80
- package/src/base/primitives/element/ElementShape.tsx +11 -10
- package/src/base/types.ts +28 -33
- package/src/bundle/LikeC4View.props.ts +6 -1
- package/src/bundle/LikeC4View.tsx +3 -0
- package/src/bundle/ReactLikeC4.tsx +1 -1
- package/src/bundle/custom.ts +1 -0
- package/src/bundle/index.ts +20 -1
- package/src/bundle/styles.css.ts +1 -1
- package/src/components/SearchControl.tsx +1 -1
- package/src/context/DiagramFeatures.tsx +12 -8
- package/src/context/EnsureMantine.tsx +13 -3
- package/src/context/IconRenderer.tsx +1 -1
- package/src/context/ReduceGraphics.tsx +6 -6
- package/src/context/index.ts +0 -1
- package/src/custom/components.ts +47 -0
- package/src/custom/customNodes.tsx +244 -0
- package/src/custom/hooks.ts +35 -0
- package/src/custom/index.ts +5 -0
- package/src/hooks/useCurrentViewId.ts +9 -1
- package/src/hooks/useDiagram.ts +30 -9
- package/src/index.ts +4 -8
- package/src/likec4diagram/DiagramXYFlow.tsx +28 -5
- package/src/likec4diagram/custom/edges/RelationshipEdge.tsx +1 -1
- package/src/likec4diagram/custom/edges/RelationshipsDropdownMenu.tsx +9 -7
- package/src/likec4diagram/custom/{index.tsx → index.ts} +2 -2
- package/src/likec4diagram/custom/nodes/CompoundActions.tsx +2 -2
- package/src/likec4diagram/custom/nodes/ElementActions.tsx +100 -57
- package/src/likec4diagram/custom/nodes/index.ts +17 -0
- package/src/likec4diagram/custom/nodes/{nodeTypes.tsx → nodes.tsx} +52 -36
- package/src/likec4diagram/custom/nodes/toolbar/CompoundToolbar.tsx +3 -4
- package/src/likec4diagram/custom/nodes/toolbar/ElementToolbar.tsx +3 -3
- package/src/likec4diagram/custom/nodes/toolbar/Toolbar.tsx +5 -4
- package/src/likec4diagram/types.ts +19 -9
- package/src/likec4diagram/ui/diagram-title/DiagramTitlePanel.tsx +1 -1
- package/src/likec4diagram/ui/notation/NotationPanel.tsx +1 -2
- package/src/likec4diagram/ui/search/ElementsColumn.tsx +2 -4
- package/src/likec4diagram/ui/walkthrough/DynamicViewWalkthrough.tsx +1 -1
- package/src/likec4diagram/useViewToNodesEdges.ts +2 -0
- package/src/likec4model/LikeC4ModelContext.ts +2 -2
- package/src/likec4model/useLikeC4ElementsTree.ts +3 -1
- package/src/likec4model/useLikeC4Model.ts +1 -1
- package/src/overlays/Overlays.tsx +2 -3
- package/src/overlays/element-details/ElementDetailsCard.css.ts +14 -22
- package/src/overlays/element-details/ElementDetailsCard.tsx +18 -16
- package/src/overlays/overlay/Overlay.tsx +3 -4
- package/src/overlays/overlaysActor.ts +4 -3
- package/src/overlays/relationship-details/RelationshipDetails.tsx +1 -1
- package/src/overlays/relationship-details/SelectEdge.tsx +0 -2
- package/src/overlays/relationship-details/_types.ts +16 -13
- package/src/overlays/relationship-details/custom/edgeTypes.tsx +2 -2
- package/src/overlays/relationships-browser/_types.ts +18 -15
- package/src/overlays/relationships-browser/actor.ts +2 -2
- package/src/overlays/relationships-browser/custom/edgeTypes.tsx +2 -2
- package/src/overlays/relationships-browser/custom/nodeTypes.tsx +1 -2
- package/src/state/DiagramActorProvider.tsx +2 -2
- package/src/state/diagram-machine.ts +13 -8
- package/src/state/hotkeyActor.ts +4 -2
- package/src/state/syncManualLayoutActor.ts +9 -3
- package/src/state/types.ts +9 -3
- package/src/state/utils.ts +3 -3
- package/src/styles-min.css +2 -0
- package/src/styles-xyflow.css +1 -0
- package/dist/_virtual/_commonjsHelpers.js +0 -5
- package/dist/_virtual/default-map.js +0 -7
- package/dist/_virtual/index.js +0 -5
- package/dist/_virtual/index2.js +0 -3
- package/dist/_virtual/react.production.js +0 -3
- package/dist/_virtual/set.js +0 -5
- package/dist/_virtual/set2.js +0 -3
- package/dist/base/xyflowMachine.d.ts +0 -212
- package/dist/likec4diagram/custom/nodes/nodeTypes.d.ts +0 -8
- package/dist/node_modules/.pnpm/mnemonist@0.40.3_patch_hash_5c12abb43fcff6fd81e53021b89075d53249640d165a2556cc1e58d71201a13a/node_modules/mnemonist/default-map.js +0 -172
- package/dist/node_modules/.pnpm/mnemonist@0.40.3_patch_hash_5c12abb43fcff6fd81e53021b89075d53249640d165a2556cc1e58d71201a13a/node_modules/mnemonist/set.js +0 -369
- package/dist/node_modules/.pnpm/react@19.1.0/node_modules/react/cjs/react.production.js +0 -556
- package/dist/node_modules/.pnpm/react@19.1.0/node_modules/react/index.js +0 -15
- package/dist/packages/core/src/compute-view/relationships-view/compute.js +0 -123
- package/dist/packages/core/src/compute-view/relationships-view/utils.js +0 -68
- package/dist/packages/core/src/errors/index.js +0 -15
- package/dist/packages/core/src/model/connection/model/ConnectionModel.js +0 -121
- package/dist/packages/core/src/model/connection/model/find.js +0 -39
- package/dist/packages/core/src/model/connection/ops.js +0 -7
- package/dist/packages/core/src/utils/const.js +0 -3
- package/dist/packages/core/src/utils/fqn.js +0 -51
- package/dist/packages/core/src/utils/guards.js +0 -7
- package/dist/packages/core/src/utils/iterable/filter.js +0 -21
- package/dist/packages/core/src/utils/iterable/find.js +0 -21
- package/dist/packages/core/src/utils/iterable/map.js +0 -18
- package/dist/packages/core/src/utils/iterable/some.js +0 -21
- package/dist/packages/core/src/utils/iterable/to.js +0 -14
- package/dist/packages/core/src/utils/set.js +0 -48
- package/dist/packages/core/src/utils/string-hash.js +0 -13
- package/dist/styles.css.js +0 -3
- package/src/base/xyflowMachine.ts +0 -75
- /package/dist/{bundle/font.css.js → styles-font.css2.js} +0 -0
- /package/src/{bundle/font.css → styles-font.css} +0 -0
package/README.md
CHANGED
|
@@ -1,16 +1,335 @@
|
|
|
1
1
|
# `@likec4/diagram`
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
React components to render diagrams.
|
|
3
|
+
A React component library for rendering software architecture diagrams.\
|
|
6
4
|
Although you can use them directly, it is recommended to use [likec4](../likec4/) CLI to generate components from LikeC4 sources.
|
|
7
5
|
|
|
8
6
|
Install:
|
|
9
7
|
|
|
10
8
|
```bash
|
|
11
|
-
|
|
9
|
+
pnpm add @likec4/diagram
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
See:
|
|
13
|
+
|
|
14
|
+
- Docs - https://likec4.dev/tooling/react/
|
|
15
|
+
- Demo - https://template.likec4.dev/
|
|
16
|
+
|
|
17
|
+
Contents:
|
|
18
|
+
|
|
19
|
+
- [Bundled Version](#bundled-version)
|
|
20
|
+
- [LikeC4View](#likec4view)
|
|
21
|
+
- [ReactLikeC4](#reactlikec4)
|
|
22
|
+
- [Library Version](#library-version)
|
|
23
|
+
- [With Bundled Styles](#with-bundled-styles)
|
|
24
|
+
- [With PandaCSS](#with-pandacss)
|
|
25
|
+
- [Usage](#usage)
|
|
26
|
+
- [Customization](#customization)
|
|
27
|
+
- [Node renderer](#custom-node-renderer)
|
|
28
|
+
- [Styles](#custom-styles)
|
|
29
|
+
|
|
30
|
+
## Bundled version
|
|
31
|
+
|
|
32
|
+
The easiest way to use this package is the bundled version.\
|
|
33
|
+
Diagram renders inside shadow DOM and has its own styles.
|
|
34
|
+
|
|
35
|
+
### LikeC4View
|
|
36
|
+
|
|
37
|
+
```tsx
|
|
38
|
+
import { LikeC4Model } from '@likec4/core/model'
|
|
39
|
+
import { LikeC4ModelProvider, LikeC4View } from '@likec4/diagram/bundle'
|
|
40
|
+
|
|
41
|
+
// instance of LikeC4Model
|
|
42
|
+
// See https://likec4.dev/tooling/model-api/
|
|
43
|
+
const likec4model = LikeC4Model.fromDump()
|
|
44
|
+
|
|
45
|
+
function App() {
|
|
46
|
+
return (
|
|
47
|
+
<LikeC4ModelProvider model={likec4model}>
|
|
48
|
+
<LikeC4View
|
|
49
|
+
viewId="index1"
|
|
50
|
+
onNodeClick={(nodeId) => console.log(nodeId)}
|
|
51
|
+
/>
|
|
52
|
+
|
|
53
|
+
<LikeC4View viewId="index2" />
|
|
54
|
+
</LikeC4ModelProvider>
|
|
55
|
+
)
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
See [LikeC4ViewProps](../src/bundle/LikeC4View.props.ts) for available props.
|
|
60
|
+
|
|
61
|
+
You may need to import icons, if you use built-in node renderers.
|
|
62
|
+
|
|
63
|
+
```tsx
|
|
64
|
+
import { type ElementIconRenderer, LikeC4, LikeC4ModelProvider, LikeC4View } from '@likec4/diagram/bundle'
|
|
65
|
+
import { lazy, Suspense } from 'react'
|
|
66
|
+
|
|
67
|
+
// Better to lazy load icons, bundle is quite large at the moment
|
|
68
|
+
const Icon = lazy(() => import('@likec4/icons/all').then((m) => ({ default: m.IconRenderer })))
|
|
69
|
+
|
|
70
|
+
const IconRenderer: ElementIconRenderer = (props) => {
|
|
71
|
+
return (
|
|
72
|
+
<Suspense>
|
|
73
|
+
<Icon {...props} />
|
|
74
|
+
</Suspense>
|
|
75
|
+
)
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function App() {
|
|
79
|
+
return (
|
|
80
|
+
<LikeC4ModelProvider model={likec4model}>
|
|
81
|
+
<LikeC4View
|
|
82
|
+
viewId="index1"
|
|
83
|
+
renderIcon={IconRenderer}
|
|
84
|
+
/>
|
|
85
|
+
</LikeC4ModelProvider>
|
|
86
|
+
)
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### ReactLikeC4
|
|
91
|
+
|
|
92
|
+
`LikeC4View` renders views from your model, and allows exploring in the popup browser.
|
|
93
|
+
Component works in most usecases, but if you need more - use `ReactLikeC4`:
|
|
94
|
+
|
|
95
|
+
```tsx
|
|
96
|
+
import { ReactLikeC4, LikeC4ModelProvider } from '@likec4/diagram/bundle'
|
|
97
|
+
|
|
98
|
+
function App() {
|
|
99
|
+
const [viewId, setViewId] = useState('index')
|
|
100
|
+
return (
|
|
101
|
+
<LikeC4ModelProvider model={likec4model}>
|
|
102
|
+
<ReactLikeC4
|
|
103
|
+
viewId={viewId}
|
|
104
|
+
pannable
|
|
105
|
+
zoomable={false}
|
|
106
|
+
keepAspectRatio
|
|
107
|
+
showNavigationButtons
|
|
108
|
+
enableDynamicViewWalkthrough={false}
|
|
109
|
+
enableElementDetails
|
|
110
|
+
enableRelationshipDetails
|
|
111
|
+
showDiagramTitle={false}
|
|
112
|
+
onNavigateTo={setViewId}
|
|
113
|
+
onNodeClick={...}
|
|
114
|
+
/>
|
|
115
|
+
</LikeC4ModelProvider>
|
|
116
|
+
)
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### `likec4/react`
|
|
121
|
+
|
|
122
|
+
Package `likec4/react` re-exports everything from Bundled version.\
|
|
123
|
+
It also re-exports `likec4/icons/all`.
|
|
124
|
+
|
|
125
|
+
## Library version
|
|
126
|
+
|
|
127
|
+
If you want to use package as a library, you have to install dependencies and prepare CSS.
|
|
128
|
+
|
|
129
|
+
Library uses [Mantine](https://mantine.dev). If you already use it and have `MantineProvider` on the scope - LikeC4Diagram will use it. Otherwise, it will wrap itself with `MantineProvider`.
|
|
130
|
+
|
|
131
|
+
Even if you are not planning to use Mantine in your app, its styles are required for the diagrams to work (don't worry, Mantine is tree-shakable).
|
|
132
|
+
|
|
133
|
+
Here are the options:
|
|
134
|
+
|
|
135
|
+
### With bundled styles
|
|
136
|
+
|
|
137
|
+
1. Complete styles
|
|
138
|
+
|
|
139
|
+
```css
|
|
140
|
+
@import '@likec4/diagram/styles.css'
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
This includes all styles, including [Mantine](https://mantine.dev) styles.
|
|
144
|
+
|
|
145
|
+
2. If you are using Mantine
|
|
146
|
+
|
|
147
|
+
```css
|
|
148
|
+
@layer reset, base, mantine, xyflow, tokens, recipes, utilities;
|
|
149
|
+
@import "@mantine/core/styles.layer.css";
|
|
150
|
+
@import "@likec4/diagram/styles-min.css";
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
> [!IMPORTANT]
|
|
154
|
+
> Layers order is important.
|
|
155
|
+
|
|
156
|
+
3. Font.\
|
|
157
|
+
LikeC4Diagram uses [`IBM Plex Sans`](https://fontsource.org/fonts/ibm-plex-sans) by default.\
|
|
158
|
+
You can import it from [fontsource](https://fontsource.org/fonts/ibm-plex-sans) or any other CDN, bundle, or import:
|
|
159
|
+
|
|
160
|
+
```css
|
|
161
|
+
@import '@likec4/diagram/styles-font.css'
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
> [!NOTE]
|
|
165
|
+
> This stylesheet loads font from FontSource
|
|
166
|
+
|
|
167
|
+
### With PandaCSS
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
pnpm add @likec4/styles
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
Configure your `panda.config.ts`:
|
|
174
|
+
|
|
175
|
+
```ts
|
|
176
|
+
import likec4preset from '@likec4/styles/preset'
|
|
177
|
+
import { defineConfig } from '@pandacss/dev'
|
|
178
|
+
|
|
179
|
+
export default defineConfig({
|
|
180
|
+
include: [
|
|
181
|
+
'src/**/*.{ts,tsx}',
|
|
182
|
+
// Include likec4 diagram source code to get the styles
|
|
183
|
+
'./node_modules/@likec4/diagram/panda.buildinfo.json',
|
|
184
|
+
],
|
|
185
|
+
importMap: [
|
|
186
|
+
'@likec4/styles',
|
|
187
|
+
],
|
|
188
|
+
presets: [
|
|
189
|
+
likec4preset,
|
|
190
|
+
],
|
|
191
|
+
theme: {
|
|
192
|
+
extend: {
|
|
193
|
+
// Here you can override/extend the theme
|
|
194
|
+
},
|
|
195
|
+
},
|
|
196
|
+
})
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
You global CSS should look like this:
|
|
200
|
+
|
|
201
|
+
```css
|
|
202
|
+
@layer reset, base, mantine, xyflow, tokens, recipes, utilities;
|
|
203
|
+
@import "@mantine/core/styles.layer.css";
|
|
204
|
+
@import "@likec4/diagram/styles-xyflow.css";
|
|
205
|
+
@import "@likec4/diagram/styles-font.css";
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
Check [PandaCSS](https://panda-css.com) docs for full setup instructions.
|
|
209
|
+
|
|
210
|
+
### Usage
|
|
211
|
+
|
|
212
|
+
Same as [ReactLikeC4](#reactlikec4), but import from `@likec4/diagram`:
|
|
213
|
+
|
|
214
|
+
```tsx
|
|
215
|
+
import { LikeC4Diagram } from '@likec4/diagram'
|
|
216
|
+
|
|
217
|
+
function App() {
|
|
218
|
+
const [viewId, setViewId] = useState('index')
|
|
219
|
+
// Get instance of view
|
|
220
|
+
const view = likec4model.view(viewId).$view
|
|
221
|
+
return (
|
|
222
|
+
<LikeC4Diagram
|
|
223
|
+
view={view}
|
|
224
|
+
pannable
|
|
225
|
+
zoomable={false}
|
|
226
|
+
keepAspectRatio
|
|
227
|
+
showNavigationButtons
|
|
228
|
+
enableDynamicViewWalkthrough={false}
|
|
229
|
+
enableElementDetails
|
|
230
|
+
enableRelationshipDetails
|
|
231
|
+
showDiagramTitle={false}
|
|
232
|
+
onNavigateTo={setViewId}
|
|
233
|
+
onNodeClick={...}
|
|
234
|
+
/>
|
|
235
|
+
)
|
|
236
|
+
}
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
You can render any component inside `LikeC4Diagram`:
|
|
240
|
+
|
|
241
|
+
```tsx
|
|
242
|
+
import { LikeC4Diagram, LikeC4ModelProvider } from '@likec4/diagram'
|
|
243
|
+
import { Panel, ViewportPortal } from '@xyflow/react'
|
|
244
|
+
|
|
245
|
+
function App() {
|
|
246
|
+
return (
|
|
247
|
+
<LikeC4Diagram>
|
|
248
|
+
<YourComponent />
|
|
249
|
+
|
|
250
|
+
{/* You can use components from xyflow */}
|
|
251
|
+
<Panel position="top">
|
|
252
|
+
<p>Your component as a panel</p>
|
|
253
|
+
<a href="https://reactflow.dev/examples">Check examples</a>
|
|
254
|
+
</Panel>
|
|
255
|
+
|
|
256
|
+
<ViewportPortal>
|
|
257
|
+
<div
|
|
258
|
+
style={{
|
|
259
|
+
transform: 'translate(100px, 100px)',
|
|
260
|
+
position: 'absolute',
|
|
261
|
+
}}>
|
|
262
|
+
This div is positioned at [100, 100] on the diagram canvas
|
|
263
|
+
</div>
|
|
264
|
+
</ViewportPortal>
|
|
265
|
+
</LikeC4Diagram>
|
|
266
|
+
)
|
|
267
|
+
}
|
|
12
268
|
```
|
|
13
269
|
|
|
14
|
-
|
|
270
|
+
## Customization
|
|
271
|
+
|
|
272
|
+
### Custom node renderer
|
|
273
|
+
|
|
274
|
+
LikeC4Diagram can use custom node renderers.\
|
|
275
|
+
Compose custom nodes renderers using primitives from `@likec4/diagram/custom` (or `@likec4/diagram/bundle/custom` for the bundled version).\
|
|
276
|
+
See [customNodes.tsx](./src/custom/customNodes.tsx) for examples.
|
|
277
|
+
|
|
278
|
+
```tsx
|
|
279
|
+
import { LikeC4Diagram } from '@likec4/diagram'
|
|
280
|
+
import {
|
|
281
|
+
ElementActions,
|
|
282
|
+
ElementDetailsButtonWithHandler,
|
|
283
|
+
elementNode,
|
|
284
|
+
ElementNodeContainer,
|
|
285
|
+
ElementShape,
|
|
286
|
+
ElementTitle,
|
|
287
|
+
ElementToolbar,
|
|
288
|
+
IfNotReadOnly,
|
|
289
|
+
} from '@likec4/diagram/custom'
|
|
290
|
+
import { IconPlus } from '@tabler/icons-react'
|
|
291
|
+
|
|
292
|
+
const renderNodes = {
|
|
293
|
+
element: elementNode(({ nodeProps, nodeModel }) => (
|
|
294
|
+
<ElementNodeContainer nodeProps={nodeProps}>
|
|
295
|
+
<ElementShape {...nodeProps} />
|
|
296
|
+
<ElementTitle {...nodeProps} />
|
|
297
|
+
<ElementActions
|
|
298
|
+
{...nodeProps}
|
|
299
|
+
extraButtons={[
|
|
300
|
+
{
|
|
301
|
+
key: 'plus',
|
|
302
|
+
icon: <IconPlus />,
|
|
303
|
+
onClick: () => console.log('extra'),
|
|
304
|
+
},
|
|
305
|
+
]}
|
|
306
|
+
/>
|
|
307
|
+
<div style={{ position: 'absolute', bottom: 0 }}>
|
|
308
|
+
{nodeModel.element.getMetadata('your-attr')}
|
|
309
|
+
</div>
|
|
310
|
+
</ElementNodeContainer>
|
|
311
|
+
)),
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
function App() {
|
|
315
|
+
return (
|
|
316
|
+
<LikeC4Diagram
|
|
317
|
+
view={view}
|
|
318
|
+
renderNodes={renderNodes}
|
|
319
|
+
/>
|
|
320
|
+
)
|
|
321
|
+
}
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
> [!IMPORTANT]
|
|
325
|
+
> Try to keep node renderers referentially stable.
|
|
326
|
+
|
|
327
|
+
### Custom styles
|
|
328
|
+
|
|
329
|
+
LikeC4Diagram uses [PandaCSS](https://panda-css.com) for styling. You can use it to customize the styles.
|
|
330
|
+
|
|
331
|
+
TODO: add example
|
|
332
|
+
|
|
333
|
+
## Local Development
|
|
15
334
|
|
|
16
335
|
Use [packages/likec4](../likec4/) workspace
|