@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.
Files changed (266) hide show
  1. package/README.md +324 -5
  2. package/bundle/chunk-BBzMXzCg.js +21383 -0
  3. package/bundle/custom.js +62 -0
  4. package/bundle/index.js +17459 -38163
  5. package/dist/LikeC4CustomColors.js +2 -2
  6. package/dist/LikeC4Diagram.d.ts +1 -1
  7. package/dist/LikeC4Diagram.js +4 -2
  8. package/dist/LikeC4Diagram.props.d.ts +6 -1
  9. package/dist/LikeC4ModelProvider.d.ts +3 -3
  10. package/dist/LikeC4ModelProvider.js +0 -1
  11. package/dist/StaticLikeC4Diagram.d.ts +1 -1
  12. package/dist/base/BaseXYFlow.js +3 -3
  13. package/dist/base/primitives/compound/CompoundActionButton.d.ts +3 -2
  14. package/dist/base/primitives/compound/CompoundDetailsButton.d.ts +3 -2
  15. package/dist/base/primitives/compound/CompoundNodeContainer.d.ts +7 -3
  16. package/dist/base/primitives/compound/CompoundNodeContainer.js +3 -2
  17. package/dist/base/primitives/customEdge.d.ts +2 -35
  18. package/dist/base/primitives/customEdge.js +2 -2
  19. package/dist/base/primitives/customNode.d.ts +2 -2
  20. package/dist/base/primitives/customNode.js +9 -2
  21. package/dist/base/primitives/edge/EdgeContainer.js +0 -1
  22. package/dist/base/primitives/edge/EdgeLabel.js +0 -1
  23. package/dist/base/primitives/edge/EdgeLabelContainer.js +0 -2
  24. package/dist/base/primitives/edge/EdgePath.js +2 -2
  25. package/dist/base/primitives/element/ElementNodeContainer.d.ts +24 -22
  26. package/dist/base/primitives/element/ElementNodeContainer.js +66 -68
  27. package/dist/base/primitives/element/ElementShape.d.ts +8 -4
  28. package/dist/base/primitives/element/ElementShape.js +4 -3
  29. package/dist/base/primitives/element/ElementTitle.css.d.ts +1 -1
  30. package/dist/base/primitives/element/ElementTitle.js +0 -1
  31. package/dist/base/types.d.ts +5 -5
  32. package/dist/bundle/LikeC4View.js +6 -3
  33. package/dist/bundle/LikeC4View.props.d.ts +5 -1
  34. package/dist/bundle/ReactLikeC4.js +1 -2
  35. package/dist/bundle/ShadowRoot.js +3 -3
  36. package/dist/bundle/custom.d.ts +1 -0
  37. package/dist/bundle/index.d.ts +3 -1
  38. package/dist/bundle/index.js +9 -0
  39. package/dist/bundle/styles.css.js +5 -5
  40. package/dist/components/SearchControl.js +2 -2
  41. package/dist/context/ControlsCustomLayout.js +0 -1
  42. package/dist/context/DiagramEventHandlers.js +5 -5
  43. package/dist/context/DiagramFeatures.d.ts +2 -4
  44. package/dist/context/DiagramFeatures.js +15 -16
  45. package/dist/context/EnsureMantine.js +9 -4
  46. package/dist/context/FramerMotionConfig.js +0 -1
  47. package/dist/context/IconRenderer.js +7 -7
  48. package/dist/context/ReduceGraphics.js +6 -6
  49. package/dist/context/RootContainer.js +5 -5
  50. package/dist/context/index.d.ts +1 -1
  51. package/dist/custom/components.d.ts +5 -0
  52. package/dist/custom/customNodes.d.ts +218 -0
  53. package/dist/custom/hooks.d.ts +10 -0
  54. package/dist/custom/index.d.ts +4 -0
  55. package/dist/hooks/safeContext.js +3 -3
  56. package/dist/hooks/useCurrentViewId.d.ts +5 -1
  57. package/dist/hooks/useCurrentViewId.js +1 -2
  58. package/dist/hooks/useDiagram.d.ts +14 -12544
  59. package/dist/hooks/useDiagram.js +3 -5
  60. package/dist/hooks/useMantinePortalProps.js +2 -2
  61. package/dist/hooks/useSetState.js +3 -3
  62. package/dist/hooks/useUpdateEffect.js +0 -1
  63. package/dist/hooks/useXYFlow.d.ts +64 -64
  64. package/dist/hooks/useXYFlow.js +2 -2
  65. package/dist/index.d.ts +2 -4
  66. package/dist/index.js +8 -3
  67. package/dist/likec4diagram/DiagramUI.js +2 -2
  68. package/dist/likec4diagram/DiagramXYFlow.d.ts +1 -1
  69. package/dist/likec4diagram/DiagramXYFlow.js +25 -7
  70. package/dist/likec4diagram/custom/edges/NotePopover.js +2 -2
  71. package/dist/likec4diagram/custom/edges/RelationshipEdge.d.ts +9 -13
  72. package/dist/likec4diagram/custom/edges/RelationshipEdge.js +8 -8
  73. package/dist/likec4diagram/custom/edges/RelationshipsDropdownMenu.js +14 -12
  74. package/dist/likec4diagram/custom/index.d.ts +15 -19
  75. package/dist/likec4diagram/custom/index.js +3 -3
  76. package/dist/likec4diagram/custom/nodes/CompoundActions.js +2 -2
  77. package/dist/likec4diagram/custom/nodes/ElementActions.d.ts +27 -4
  78. package/dist/likec4diagram/custom/nodes/ElementActions.js +67 -53
  79. package/dist/likec4diagram/custom/nodes/index.d.ts +8 -0
  80. package/dist/likec4diagram/custom/nodes/nodes.d.ts +10 -0
  81. package/dist/likec4diagram/custom/nodes/{nodeTypes.js → nodes.js} +39 -39
  82. package/dist/likec4diagram/custom/nodes/toolbar/ColorButton.js +2 -2
  83. package/dist/likec4diagram/custom/nodes/toolbar/CompoundToolbar.js +6 -7
  84. package/dist/likec4diagram/custom/nodes/toolbar/ElementToolbar.js +3 -3
  85. package/dist/likec4diagram/custom/nodes/toolbar/Toolbar.d.ts +3 -2
  86. package/dist/likec4diagram/custom/nodes/toolbar/Toolbar.js +2 -2
  87. package/dist/likec4diagram/custom/nodes/toolbar/_shared.d.ts +2 -2
  88. package/dist/likec4diagram/custom/nodes/toolbar/_shared.js +2 -2
  89. package/dist/likec4diagram/types.d.ts +15 -7
  90. package/dist/likec4diagram/ui/controls/ChangeAutoLayoutButton.js +4 -4
  91. package/dist/likec4diagram/ui/controls/Controls.js +2 -2
  92. package/dist/likec4diagram/ui/diagram-title/DiagramTitlePanel.js +2 -2
  93. package/dist/likec4diagram/ui/notation/NotationPanel.js +6 -8
  94. package/dist/likec4diagram/ui/search/ElementsColumn.js +6 -7
  95. package/dist/likec4diagram/ui/search/LikeC4Search.js +3 -3
  96. package/dist/likec4diagram/ui/search/SearchInput.js +0 -1
  97. package/dist/likec4diagram/ui/search/_shared.css.d.ts +1 -1
  98. package/dist/likec4diagram/ui/search/state.js +3 -4
  99. package/dist/likec4diagram/ui/walkthrough/DynamicViewWalkthrough.js +4 -4
  100. package/dist/likec4diagram/useLayoutConstraints.js +3 -4
  101. package/dist/likec4diagram/useViewToNodesEdges.js +2 -0
  102. package/dist/likec4model/LikeC4ModelContext.d.ts +2 -2
  103. package/dist/likec4model/LikeC4ModelContext.js +2 -2
  104. package/dist/likec4model/useLikeC4ElementsTree.d.ts +1 -1
  105. package/dist/likec4model/useLikeC4ElementsTree.js +3 -3
  106. package/dist/likec4model/useLikeC4Model.d.ts +1 -1
  107. package/dist/likec4model/useLikeC4Model.js +2 -2
  108. package/dist/overlays/Overlays.d.ts +2 -3
  109. package/dist/overlays/Overlays.js +5 -6
  110. package/dist/overlays/element-details/ElementDetailsCard.css.js +13 -9
  111. package/dist/overlays/element-details/ElementDetailsCard.js +98 -105
  112. package/dist/overlays/element-details/TabPanelDeployments.js +4 -4
  113. package/dist/overlays/element-details/TabPanelRelationships.js +2 -2
  114. package/dist/overlays/element-details/TabPanelStructure.js +3 -3
  115. package/dist/overlays/element-details/actor.d.ts +6905 -19690
  116. package/dist/overlays/element-details/actor.js +0 -2
  117. package/dist/overlays/element-details/actorContext.js +3 -3
  118. package/dist/overlays/overlay/Overlay.d.ts +11 -1
  119. package/dist/overlays/overlay/Overlay.js +8 -8
  120. package/dist/overlays/overlaysActor.d.ts +4 -2
  121. package/dist/overlays/overlaysActor.js +2 -1
  122. package/dist/overlays/relationship-details/RelationshipDetails.d.ts +4 -8
  123. package/dist/overlays/relationship-details/RelationshipDetails.js +12 -12
  124. package/dist/overlays/relationship-details/SelectEdge.js +2 -3
  125. package/dist/overlays/relationship-details/_types.d.ts +6 -5
  126. package/dist/overlays/relationship-details/actor.d.ts +3 -3
  127. package/dist/overlays/relationship-details/compute.js +3 -3
  128. package/dist/overlays/relationship-details/custom/edgeTypes.d.ts +4 -8
  129. package/dist/overlays/relationship-details/custom/edgeTypes.js +2 -2
  130. package/dist/overlays/relationship-details/custom/nodeTypes.d.ts +3 -31
  131. package/dist/overlays/relationship-details/hooks.d.ts +27 -27
  132. package/dist/overlays/relationship-details/hooks.js +4 -4
  133. package/dist/overlays/relationship-details/layout.js +2 -3
  134. package/dist/overlays/relationships-browser/RelationshipsBrowser.d.ts +4 -8
  135. package/dist/overlays/relationships-browser/RelationshipsBrowser.js +8 -8
  136. package/dist/overlays/relationships-browser/SelectElement.js +5 -5
  137. package/dist/overlays/relationships-browser/_types.d.ts +6 -5
  138. package/dist/overlays/relationships-browser/actor.d.ts +63 -428
  139. package/dist/overlays/relationships-browser/custom/edgeTypes.d.ts +4 -8
  140. package/dist/overlays/relationships-browser/custom/edgeTypes.js +2 -2
  141. package/dist/overlays/relationships-browser/custom/nodeTypes.d.ts +10 -14
  142. package/dist/overlays/relationships-browser/custom/nodeTypes.js +1 -2
  143. package/dist/overlays/relationships-browser/hooks.d.ts +4 -61
  144. package/dist/overlays/relationships-browser/hooks.js +4 -4
  145. package/dist/overlays/relationships-browser/layout.js +3 -4
  146. package/dist/state/DiagramActorProvider.js +3 -3
  147. package/dist/state/diagram-machine.d.ts +186 -10369
  148. package/dist/state/diagram-machine.js +2 -1
  149. package/dist/state/hotkeyActor.d.ts +4 -2
  150. package/dist/state/syncManualLayoutActor.d.ts +14 -3
  151. package/dist/state/syncManualLayoutActor.js +2 -1
  152. package/dist/state/types.d.ts +5 -4
  153. package/dist/state/utils.d.ts +1 -1
  154. package/dist/styles-font.css +1 -0
  155. package/dist/styles-min.css +1 -0
  156. package/dist/styles-xyflow.css +1 -0
  157. package/dist/styles.css +1 -0
  158. package/dist/styles.css2.js +3 -0
  159. package/package.json +46 -21
  160. package/panda.buildinfo.json +979 -0
  161. package/src/LikeC4Diagram.props.ts +7 -1
  162. package/src/LikeC4Diagram.tsx +2 -0
  163. package/src/LikeC4ModelProvider.tsx +3 -3
  164. package/src/StaticLikeC4Diagram.tsx +1 -0
  165. package/src/base/Background.tsx +0 -4
  166. package/src/base/primitives/compound/CompoundActionButton.tsx +7 -4
  167. package/src/base/primitives/compound/CompoundDetailsButton.tsx +7 -4
  168. package/src/base/primitives/compound/CompoundNodeContainer.tsx +8 -7
  169. package/src/base/primitives/customEdge.ts +1 -1
  170. package/src/base/primitives/{customNode.ts → customNode.tsx} +11 -3
  171. package/src/base/primitives/element/ElementNodeContainer.tsx +87 -80
  172. package/src/base/primitives/element/ElementShape.tsx +11 -10
  173. package/src/base/types.ts +28 -33
  174. package/src/bundle/LikeC4View.props.ts +6 -1
  175. package/src/bundle/LikeC4View.tsx +3 -0
  176. package/src/bundle/ReactLikeC4.tsx +1 -1
  177. package/src/bundle/custom.ts +1 -0
  178. package/src/bundle/index.ts +20 -1
  179. package/src/bundle/styles.css.ts +1 -1
  180. package/src/components/SearchControl.tsx +1 -1
  181. package/src/context/DiagramFeatures.tsx +12 -8
  182. package/src/context/EnsureMantine.tsx +13 -3
  183. package/src/context/IconRenderer.tsx +1 -1
  184. package/src/context/ReduceGraphics.tsx +6 -6
  185. package/src/context/index.ts +0 -1
  186. package/src/custom/components.ts +47 -0
  187. package/src/custom/customNodes.tsx +244 -0
  188. package/src/custom/hooks.ts +35 -0
  189. package/src/custom/index.ts +5 -0
  190. package/src/hooks/useCurrentViewId.ts +9 -1
  191. package/src/hooks/useDiagram.ts +30 -9
  192. package/src/index.ts +4 -8
  193. package/src/likec4diagram/DiagramXYFlow.tsx +28 -5
  194. package/src/likec4diagram/custom/edges/RelationshipEdge.tsx +1 -1
  195. package/src/likec4diagram/custom/edges/RelationshipsDropdownMenu.tsx +9 -7
  196. package/src/likec4diagram/custom/{index.tsx → index.ts} +2 -2
  197. package/src/likec4diagram/custom/nodes/CompoundActions.tsx +2 -2
  198. package/src/likec4diagram/custom/nodes/ElementActions.tsx +100 -57
  199. package/src/likec4diagram/custom/nodes/index.ts +17 -0
  200. package/src/likec4diagram/custom/nodes/{nodeTypes.tsx → nodes.tsx} +52 -36
  201. package/src/likec4diagram/custom/nodes/toolbar/CompoundToolbar.tsx +3 -4
  202. package/src/likec4diagram/custom/nodes/toolbar/ElementToolbar.tsx +3 -3
  203. package/src/likec4diagram/custom/nodes/toolbar/Toolbar.tsx +5 -4
  204. package/src/likec4diagram/types.ts +19 -9
  205. package/src/likec4diagram/ui/diagram-title/DiagramTitlePanel.tsx +1 -1
  206. package/src/likec4diagram/ui/notation/NotationPanel.tsx +1 -2
  207. package/src/likec4diagram/ui/search/ElementsColumn.tsx +2 -4
  208. package/src/likec4diagram/ui/walkthrough/DynamicViewWalkthrough.tsx +1 -1
  209. package/src/likec4diagram/useViewToNodesEdges.ts +2 -0
  210. package/src/likec4model/LikeC4ModelContext.ts +2 -2
  211. package/src/likec4model/useLikeC4ElementsTree.ts +3 -1
  212. package/src/likec4model/useLikeC4Model.ts +1 -1
  213. package/src/overlays/Overlays.tsx +2 -3
  214. package/src/overlays/element-details/ElementDetailsCard.css.ts +14 -22
  215. package/src/overlays/element-details/ElementDetailsCard.tsx +18 -16
  216. package/src/overlays/overlay/Overlay.tsx +3 -4
  217. package/src/overlays/overlaysActor.ts +4 -3
  218. package/src/overlays/relationship-details/RelationshipDetails.tsx +1 -1
  219. package/src/overlays/relationship-details/SelectEdge.tsx +0 -2
  220. package/src/overlays/relationship-details/_types.ts +16 -13
  221. package/src/overlays/relationship-details/custom/edgeTypes.tsx +2 -2
  222. package/src/overlays/relationships-browser/_types.ts +18 -15
  223. package/src/overlays/relationships-browser/actor.ts +2 -2
  224. package/src/overlays/relationships-browser/custom/edgeTypes.tsx +2 -2
  225. package/src/overlays/relationships-browser/custom/nodeTypes.tsx +1 -2
  226. package/src/state/DiagramActorProvider.tsx +2 -2
  227. package/src/state/diagram-machine.ts +13 -8
  228. package/src/state/hotkeyActor.ts +4 -2
  229. package/src/state/syncManualLayoutActor.ts +9 -3
  230. package/src/state/types.ts +9 -3
  231. package/src/state/utils.ts +3 -3
  232. package/src/styles-min.css +2 -0
  233. package/src/styles-xyflow.css +1 -0
  234. package/dist/_virtual/_commonjsHelpers.js +0 -5
  235. package/dist/_virtual/default-map.js +0 -7
  236. package/dist/_virtual/index.js +0 -5
  237. package/dist/_virtual/index2.js +0 -3
  238. package/dist/_virtual/react.production.js +0 -3
  239. package/dist/_virtual/set.js +0 -5
  240. package/dist/_virtual/set2.js +0 -3
  241. package/dist/base/xyflowMachine.d.ts +0 -212
  242. package/dist/likec4diagram/custom/nodes/nodeTypes.d.ts +0 -8
  243. package/dist/node_modules/.pnpm/mnemonist@0.40.3_patch_hash_5c12abb43fcff6fd81e53021b89075d53249640d165a2556cc1e58d71201a13a/node_modules/mnemonist/default-map.js +0 -172
  244. package/dist/node_modules/.pnpm/mnemonist@0.40.3_patch_hash_5c12abb43fcff6fd81e53021b89075d53249640d165a2556cc1e58d71201a13a/node_modules/mnemonist/set.js +0 -369
  245. package/dist/node_modules/.pnpm/react@19.1.0/node_modules/react/cjs/react.production.js +0 -556
  246. package/dist/node_modules/.pnpm/react@19.1.0/node_modules/react/index.js +0 -15
  247. package/dist/packages/core/src/compute-view/relationships-view/compute.js +0 -123
  248. package/dist/packages/core/src/compute-view/relationships-view/utils.js +0 -68
  249. package/dist/packages/core/src/errors/index.js +0 -15
  250. package/dist/packages/core/src/model/connection/model/ConnectionModel.js +0 -121
  251. package/dist/packages/core/src/model/connection/model/find.js +0 -39
  252. package/dist/packages/core/src/model/connection/ops.js +0 -7
  253. package/dist/packages/core/src/utils/const.js +0 -3
  254. package/dist/packages/core/src/utils/fqn.js +0 -51
  255. package/dist/packages/core/src/utils/guards.js +0 -7
  256. package/dist/packages/core/src/utils/iterable/filter.js +0 -21
  257. package/dist/packages/core/src/utils/iterable/find.js +0 -21
  258. package/dist/packages/core/src/utils/iterable/map.js +0 -18
  259. package/dist/packages/core/src/utils/iterable/some.js +0 -21
  260. package/dist/packages/core/src/utils/iterable/to.js +0 -14
  261. package/dist/packages/core/src/utils/set.js +0 -48
  262. package/dist/packages/core/src/utils/string-hash.js +0 -13
  263. package/dist/styles.css.js +0 -3
  264. package/src/base/xyflowMachine.ts +0 -75
  265. /package/dist/{bundle/font.css.js → styles-font.css2.js} +0 -0
  266. /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
- [docs](https://likec4.dev/tooling/code-generation/react/) | [demo](https://template.likec4.dev/view/index/)
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
- npm add @likec4/diagram
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
- ### Local Development
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