@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
@@ -29,7 +29,7 @@ export type NonOptional<T extends object, Keys extends OptionalKeysOf<T> = Optio
29
29
  /**
30
30
  * ReactFlow Custom Node properties with BaseNodeData at least
31
31
  */
32
- export type NodeProps<T extends Record<string, unknown> = {}> = ReactFlowNodeProps<RFNode<Base.NodeData & T, any>>;
32
+ export type NodeProps<T extends Record<string, unknown> = {}, NodeType extends string = string> = ReactFlowNodeProps<RFNode<Base.NodeData & T, NodeType>>;
33
33
  /**
34
34
  * ReactFlow Custom Edge properties with BaseEdgeData at least
35
35
  */
@@ -38,7 +38,7 @@ export type ReactFlowNode<Data extends Record<string, unknown>, NodeType extends
38
38
  export type ReactFlowEdge<Data extends Record<string, unknown>, EdgeType extends string> = SetRequired<RFEdge<Data, EdgeType>, 'type' | 'data'>;
39
39
  export declare namespace Base {
40
40
  export type Dimmed = 'immediate' | boolean;
41
- export type NodeData<Data extends Record<string, unknown> = {}> = Simplify<Data & {
41
+ export type NodeData = {
42
42
  /**
43
43
  * Whether the cursor is hovering over the node
44
44
  */
@@ -48,10 +48,10 @@ export declare namespace Base {
48
48
  * 'immediate' means that the node is dimmed without delay
49
49
  */
50
50
  dimmed?: Dimmed;
51
- }>;
51
+ };
52
52
  export type Node = RFNode<NodeData>;
53
53
  export type NodeProps = ReactFlowNodeProps<RFNode<Base.NodeData, any>>;
54
- export type EdgeData<Data extends Record<string, unknown> = {}> = Simplify<Data & {
54
+ export type EdgeData = {
55
55
  /**
56
56
  * Whether the cursor is hovering over the edge
57
57
  */
@@ -65,7 +65,7 @@ export declare namespace Base {
65
65
  * 'immediate' means that the edge is dimmed without delay
66
66
  */
67
67
  dimmed?: Dimmed;
68
- }>;
68
+ };
69
69
  export type Edge = SetRequired<RFEdge<EdgeData>, 'data'>;
70
70
  type WithDimmed = {
71
71
  data: {
@@ -1,5 +1,5 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
- import { r as reactExports } from '../_virtual/index.js';
2
+ import { memo, useState } from 'react';
3
3
  import { ShadowRoot } from './ShadowRoot.js';
4
4
  import { cx } from '@likec4/styles/css';
5
5
  import { Box, ActionIcon } from '@mantine/core';
@@ -30,7 +30,7 @@ function LikeC4View({
30
30
  }
31
31
  return /* @__PURE__ */ jsx(LikeC4ViewInner, { view: view.$view, ...props });
32
32
  }
33
- const LikeC4ViewInner = reactExports.memo(({
33
+ const LikeC4ViewInner = memo(({
34
34
  view,
35
35
  className,
36
36
  pannable = false,
@@ -56,12 +56,13 @@ const LikeC4ViewInner = reactExports.memo(({
56
56
  styleNonce,
57
57
  style,
58
58
  reactFlowProps = {},
59
+ renderNodes,
59
60
  ...props
60
61
  }) => {
61
62
  const likec4model = useLikeC4Model(true, "layouted");
62
63
  const colorScheme = useColorScheme(explicitColorScheme);
63
64
  const [shadowRootProps, cssstyle] = useShadowRootStyle(keepAspectRatio, view);
64
- const [browserViewId, onNavigateTo] = reactExports.useState(null);
65
+ const [browserViewId, onNavigateTo] = useState(null);
65
66
  const browserView = browserViewId ? likec4model.findView(browserViewId)?.$view : null;
66
67
  const notations = view.notation?.elements ?? [];
67
68
  const hasNotations = notations.length > 0;
@@ -128,6 +129,7 @@ const LikeC4ViewInner = reactExports.memo(({
128
129
  onNodeClick: () => onNavigateTo(view.id)
129
130
  },
130
131
  reactFlowProps,
132
+ renderNodes,
131
133
  ...props
132
134
  }
133
135
  ),
@@ -148,6 +150,7 @@ const LikeC4ViewInner = reactExports.memo(({
148
150
  readonly: true,
149
151
  fitView: true,
150
152
  fitViewPadding: "16px",
153
+ renderNodes,
151
154
  ...props,
152
155
  ...browserProps,
153
156
  showNotations: (browserProps.showNotations ?? true) && (browserView.notation?.elements.length ?? 0) > 0
@@ -1,6 +1,6 @@
1
1
  import { WhereOperator } from '@likec4/core';
2
2
  import { CSSProperties } from 'react';
3
- import { ElementIconRenderer, OverrideReactFlowProps, PaddingWithUnit } from '../LikeC4Diagram.props';
3
+ import { CustomNodes, ElementIconRenderer, OverrideReactFlowProps, PaddingWithUnit } from '../LikeC4Diagram.props';
4
4
  export interface LikeC4ViewProps<ViewId = string, Tag = string, Kind = string> {
5
5
  /**
6
6
  * View to display.
@@ -122,6 +122,10 @@ export interface LikeC4ViewProps<ViewId = string, Tag = string, Kind = string> {
122
122
  mantineTheme?: any;
123
123
  /** Function to generate nonce attribute added to all generated `<style />` tags */
124
124
  styleNonce?: string | (() => string) | undefined;
125
+ /**
126
+ * Override node renderers
127
+ */
128
+ renderNodes?: CustomNodes | undefined;
125
129
  /**
126
130
  * Render custom icon for a node
127
131
  * By default, if icon is http:// or https://, it will be rendered as an image
@@ -1,5 +1,4 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
- import '../_virtual/index.js';
3
2
  import { ShadowRoot } from './ShadowRoot.js';
4
3
  import { cx } from '@likec4/styles/css';
5
4
  import { isString, isFunction } from 'remeda';
@@ -85,6 +84,6 @@ function ReactLikeC4Inner({
85
84
  )
86
85
  ] });
87
86
  }
88
- ReactLikeC4.displayName = "GenericReactLikeC4";
87
+ ReactLikeC4.displayName = "ReactLikeC4";
89
88
 
90
89
  export { ReactLikeC4 };
@@ -1,7 +1,7 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import { cx, css } from '@likec4/styles/css';
3
3
  import { MantineProvider } from '@mantine/core';
4
- import { r as reactExports } from '../_virtual/index.js';
4
+ import { useRef, useCallback } from 'react';
5
5
  import root from 'react-shadow';
6
6
  import { isDefined } from 'remeda';
7
7
  import { useBundledStyleSheet, DefaultTheme } from './styles.css.js';
@@ -15,9 +15,9 @@ function ShadowRoot({
15
15
  colorScheme,
16
16
  ...props
17
17
  }) {
18
- const rootRef = reactExports.useRef(null);
18
+ const rootRef = useRef(null);
19
19
  const styleSheets = useBundledStyleSheet(injectFontCss, styleNonce);
20
- const getRootElement = reactExports.useCallback(() => rootRef.current ?? void 0, [rootRef]);
20
+ const getRootElement = useCallback(() => rootRef.current ?? void 0, [rootRef]);
21
21
  let getStyleNonce;
22
22
  if (isDefined(styleNonce)) {
23
23
  getStyleNonce = typeof styleNonce === "function" ? styleNonce : () => styleNonce;
@@ -0,0 +1 @@
1
+ export * from '../custom';
@@ -1,5 +1,7 @@
1
+ export type { ChangeEvent, CustomNodes, DiagramNodeWithNavigate, ElementIconRenderer, LikeC4ColorScheme, LikeC4DiagramEventHandlers, OnCanvasClick, OnChange, OnEdgeClick, OnNavigateTo, OnNodeClick, OpenSourceParams, PaddingUnit, PaddingWithUnit, WhereOperator, } from '../LikeC4Diagram.props';
1
2
  export { LikeC4View } from './LikeC4View';
2
- export type { LikeC4ViewProps } from './LikeC4View.props';
3
+ export type { LikeC4BrowserProps, LikeC4ViewProps } from './LikeC4View.props';
3
4
  export { ReactLikeC4, type ReactLikeC4Props } from './ReactLikeC4';
4
5
  export { LikeC4ModelProvider } from './LikeC4ModelProvider';
5
6
  export { ViewNotFound } from './ViewNotFound';
7
+ export * from '../custom/hooks';
@@ -2,3 +2,12 @@ export { LikeC4View } from './LikeC4View.js';
2
2
  export { ReactLikeC4 } from './ReactLikeC4.js';
3
3
  export { LikeC4ModelProvider } from './LikeC4ModelProvider.js';
4
4
  export { ViewNotFound } from './ViewNotFound.js';
5
+ export { useDiagramEventHandlers } from '../context/DiagramEventHandlers.js';
6
+ export { useEnabledFeatures } from '../context/DiagramFeatures.js';
7
+ export { useCurrentViewId } from '../hooks/useCurrentViewId.js';
8
+ export { useDiagram, useDiagramContext } from '../hooks/useDiagram.js';
9
+ export { useXYFlow, useXYInternalNode, useXYStore, useXYStoreApi } from '../hooks/useXYFlow.js';
10
+ export { useLikeC4Model } from '../likec4model/useLikeC4Model.js';
11
+ export { useMantinePortalProps } from '../hooks/useMantinePortalProps.js';
12
+ export { useSetState } from '../hooks/useSetState.js';
13
+ export { useUpdateEffect } from '../hooks/useUpdateEffect.js';
@@ -2,10 +2,10 @@ import { css } from '@likec4/styles/css';
2
2
  import { createTheme, Portal } from '@mantine/core';
3
3
  import { useColorScheme as useColorScheme$1, useMutationObserver, useDebouncedCallback, useId } from '@mantine/hooks';
4
4
  import { useIsomorphicLayoutEffect } from '@react-hookz/web';
5
- import { r as reactExports } from '../_virtual/index.js';
5
+ import { useState } from 'react';
6
6
  import { first, isString, isFunction } from 'remeda';
7
- import inlinedStyles from '../styles.css.js';
8
- import fontsCss from './font.css.js';
7
+ import fontsCss from '../styles-font.css2.js';
8
+ import inlinedStyles from '../styles.css2.js';
9
9
 
10
10
  const DefaultTheme = createTheme({
11
11
  autoContrast: true,
@@ -42,7 +42,7 @@ const cssInteractive = css({
42
42
  }
43
43
  });
44
44
  function useBundledStyleSheet(injectFontCss, styleNonce) {
45
- const [styleSheets, setStyleSheets] = reactExports.useState([]);
45
+ const [styleSheets, setStyleSheets] = useState([]);
46
46
  useIsomorphicLayoutEffect(() => {
47
47
  if (injectFontCss && !document.querySelector(`style[data-likec4-font]`)) {
48
48
  const style = document.createElement("style");
@@ -83,7 +83,7 @@ const getComputedColorScheme = () => {
83
83
  };
84
84
  function useColorScheme(explicit) {
85
85
  const preferred = useColorScheme$1();
86
- const [computed, setComputed] = reactExports.useState(getComputedColorScheme);
86
+ const [computed, setComputed] = useState(getComputedColorScheme);
87
87
  useMutationObserver(
88
88
  useDebouncedCallback(() => setComputed(getComputedColorScheme), 100),
89
89
  {
@@ -1,13 +1,13 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { cx } from '@likec4/styles/css';
2
3
  import { UnstyledButton, Group, Text } from '@mantine/core';
3
4
  import { IconSearch } from '@tabler/icons-react';
4
5
  import { isMacOs } from '@xyflow/system';
5
- import clsx from 'clsx';
6
6
  import { placeholder, shortcut, root } from './SearchControl.css.js';
7
7
 
8
8
  function SearchControl({ className, ...others }) {
9
9
  const isMac = isMacOs();
10
- return /* @__PURE__ */ jsx(UnstyledButton, { ...others, className: clsx("group", root, className), children: /* @__PURE__ */ jsxs(Group, { gap: "xs", children: [
10
+ return /* @__PURE__ */ jsx(UnstyledButton, { ...others, className: cx("group", root, className), children: /* @__PURE__ */ jsxs(Group, { gap: "xs", children: [
11
11
  /* @__PURE__ */ jsx(IconSearch, { style: { width: "15px", height: "15px" }, stroke: 2 }),
12
12
  /* @__PURE__ */ jsx(Text, { component: "div", className: placeholder, children: "Search" }),
13
13
  /* @__PURE__ */ jsx(Text, { component: "div", className: shortcut, children: isMac ? "⌘ + K" : "Ctrl + K" })
@@ -1,5 +1,4 @@
1
1
  import { createOptionalContext } from '@mantine/core';
2
- import '../_virtual/index.js';
3
2
 
4
3
  const [
5
4
  ControlsCustomLayoutProvider,
@@ -1,6 +1,6 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import { useSyncedRef } from '@react-hookz/web';
3
- import { r as reactExports } from '../_virtual/index.js';
3
+ import { useContext, createContext, useMemo } from 'react';
4
4
  import { isFunction, mapToObj } from 'remeda';
5
5
 
6
6
  const HandlerNames = [
@@ -16,7 +16,7 @@ const HandlerNames = [
16
16
  "onChange",
17
17
  "onCanvasDblClick"
18
18
  ];
19
- const DiagramEventHandlersContext = reactExports.createContext({
19
+ const DiagramEventHandlersContext = createContext({
20
20
  ...mapToObj(HandlerNames, (name) => [name, null]),
21
21
  handlersRef: {
22
22
  current: {}
@@ -28,7 +28,7 @@ function DiagramEventHandlers({
28
28
  }) {
29
29
  const handlersRef = useSyncedRef(handlers);
30
30
  const deps = HandlerNames.map((name) => isFunction(handlers[name]));
31
- const value = reactExports.useMemo(() => ({
31
+ const value = useMemo(() => ({
32
32
  ...mapToObj(HandlerNames, (name) => {
33
33
  if (handlersRef.current[name]) {
34
34
  return [name, (...args) => handlersRef.current[name]?.(...args)];
@@ -40,10 +40,10 @@ function DiagramEventHandlers({
40
40
  return /* @__PURE__ */ jsx(DiagramEventHandlersContext.Provider, { value, children });
41
41
  }
42
42
  function useDiagramEventHandlers() {
43
- return reactExports.useContext(DiagramEventHandlersContext);
43
+ return useContext(DiagramEventHandlersContext);
44
44
  }
45
45
  function useDiagramEventHandlersRef() {
46
- return reactExports.useContext(DiagramEventHandlersContext).handlersRef;
46
+ return useContext(DiagramEventHandlersContext).handlersRef;
47
47
  }
48
48
 
49
49
  export { DiagramEventHandlers, useDiagramEventHandlers, useDiagramEventHandlersRef };
@@ -1,4 +1,4 @@
1
- import { ExclusiveUnion, NonEmptyArray } from '@likec4/core';
1
+ import { ExclusiveUnion } from '@likec4/core';
2
2
  import { PropsWithChildren } from 'react';
3
3
  declare const FeatureNames: readonly ["Controls", "ReadOnly", "FocusMode", "NavigateTo", "ElementDetails", "RelationshipDetails", "RelationshipBrowser", "Search", "NavigationButtons", "Notations", "DynamicViewWalkthrough", "EdgeEditing", "ViewTitle", "FitView", "LikeC4Model", "Vscode"];
4
4
  export type FeatureName = typeof FeatureNames[number];
@@ -17,9 +17,6 @@ export declare function DiagramFeatures({ children, features, overrides, }: Prop
17
17
  export declare namespace DiagramFeatures {
18
18
  var Overlays: ({ children }: PropsWithChildren) => import("react/jsx-runtime").JSX.Element;
19
19
  }
20
- export declare function useEnabledFeature<F extends NonEmptyArray<FeatureName>>(...names: F): {
21
- [P in `enable${F[number]}`]: boolean;
22
- };
23
20
  export declare function useEnabledFeatures(): EnabledFeatures;
24
21
  export declare function IfEnabled({ feature, children, and, }: PropsWithChildren<{
25
22
  feature: FeatureName;
@@ -28,4 +25,5 @@ export declare function IfEnabled({ feature, children, and, }: PropsWithChildren
28
25
  export declare function IfNotEnabled({ feature, children, }: PropsWithChildren<{
29
26
  feature: FeatureName;
30
27
  }>): import("react/jsx-runtime").JSX.Element | null;
28
+ export declare function IfNotReadOnly({ children, }: PropsWithChildren): import("react/jsx-runtime").JSX.Element | null;
31
29
  export {};
@@ -1,7 +1,7 @@
1
1
  import { jsx, Fragment } from 'react/jsx-runtime';
2
2
  import { shallowEqual } from 'fast-equals';
3
- import { r as reactExports } from '../_virtual/index.js';
4
- import { mapToObj, pick, map } from 'remeda';
3
+ import { useContext, createContext, useState, useEffect } from 'react';
4
+ import { mapToObj } from 'remeda';
5
5
 
6
6
  const FeatureNames = [
7
7
  "Controls",
@@ -31,7 +31,7 @@ const AllDisabled = mapToObj(
31
31
  FeatureNames,
32
32
  (name) => [`enable${name}`, false]
33
33
  );
34
- const DiagramFeaturesContext = reactExports.createContext(AllDisabled);
34
+ const DiagramFeaturesContext = createContext(AllDisabled);
35
35
  const validate = (features) => {
36
36
  let {
37
37
  enableReadOnly,
@@ -68,9 +68,9 @@ function DiagramFeatures({
68
68
  features,
69
69
  overrides
70
70
  }) {
71
- const outerScope = reactExports.useContext(DiagramFeaturesContext);
72
- const [scope, setScope] = reactExports.useState(outerScope);
73
- reactExports.useEffect(
71
+ const outerScope = useContext(DiagramFeaturesContext);
72
+ const [scope, setScope] = useState(outerScope);
73
+ useEffect(
74
74
  () => {
75
75
  setScope((current) => {
76
76
  const next = validate({
@@ -98,26 +98,25 @@ DiagramFeatures.Overlays = ({ children }) => {
98
98
  }
99
99
  );
100
100
  };
101
- function useEnabledFeature(...names) {
102
- return pick(reactExports.useContext(DiagramFeaturesContext), map(names, (name) => `enable${name}`));
103
- }
104
101
  function useEnabledFeatures() {
105
- return reactExports.useContext(DiagramFeaturesContext);
102
+ return useContext(DiagramFeaturesContext);
106
103
  }
107
104
  function IfEnabled({
108
105
  feature,
109
106
  children,
110
107
  and = true
111
108
  }) {
112
- const enabled = useEnabledFeature(feature)[`enable${feature}`] === true;
109
+ const enabled = useEnabledFeatures()[`enable${feature}`] === true;
113
110
  return enabled && and ? /* @__PURE__ */ jsx(Fragment, { children }) : null;
114
111
  }
115
- function IfNotEnabled({
116
- feature,
112
+ function IfNotReadOnly({
117
113
  children
118
114
  }) {
119
- const notEnabled = useEnabledFeature(feature)[`enable${feature}`] !== true;
120
- return notEnabled ? /* @__PURE__ */ jsx(Fragment, { children }) : null;
115
+ const isReadOnly = useEnabledFeatures()[`enableReadOnly`] === true;
116
+ if (isReadOnly) {
117
+ return null;
118
+ }
119
+ return /* @__PURE__ */ jsx(Fragment, { children });
121
120
  }
122
121
 
123
- export { AllDisabled, DiagramFeatures, IfEnabled, IfNotEnabled, useEnabledFeature, useEnabledFeatures };
122
+ export { AllDisabled, DiagramFeatures, IfEnabled, IfNotReadOnly, useEnabledFeatures };
@@ -1,11 +1,16 @@
1
1
  import { jsx, Fragment } from 'react/jsx-runtime';
2
- import { MantineContext } from '@mantine/core';
3
- import { r as reactExports } from '../_virtual/index.js';
2
+ import { MantineContext, MantineProvider } from '@mantine/core';
3
+ import { useContext, useEffect } from 'react';
4
4
 
5
5
  function EnsureMantine({ children }) {
6
- const mantineCtx = reactExports.useContext(MantineContext);
6
+ const mantineCtx = useContext(MantineContext);
7
+ useEffect(() => {
8
+ if (!mantineCtx) {
9
+ console.warn("LikeC4Diagram must be a child of MantineProvider");
10
+ }
11
+ }, []);
7
12
  if (!mantineCtx) {
8
- throw new Error("LikeC4Diagram must be a child of MantineProvider");
13
+ return /* @__PURE__ */ jsx(MantineProvider, { children });
9
14
  }
10
15
  return /* @__PURE__ */ jsx(Fragment, { children });
11
16
  }
@@ -1,7 +1,6 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import { useMantineStyleNonce } from '@mantine/core';
3
3
  import { LazyMotion, domMax, MotionConfig } from 'motion/react';
4
- import '../_virtual/index.js';
5
4
 
6
5
  const FramerMotionConfig = ({
7
6
  reducedMotion = "user",
@@ -1,14 +1,14 @@
1
1
  import { jsx, Fragment } from 'react/jsx-runtime';
2
+ import { cx } from '@likec4/styles/css';
2
3
  import { IconCylinder, IconRectangularPrism, IconReorder, IconUser, IconDeviceMobile, IconBrowser } from '@tabler/icons-react';
3
- import clsx from 'clsx';
4
- import { r as reactExports } from '../_virtual/index.js';
4
+ import { useContext, createContext } from 'react';
5
5
 
6
- const IconRendererContext = reactExports.createContext(null);
6
+ const IconRendererContext = createContext(null);
7
7
  function IconRendererProvider({
8
8
  value,
9
9
  children
10
10
  }) {
11
- const outerScope = reactExports.useContext(IconRendererContext);
11
+ const outerScope = useContext(IconRendererContext);
12
12
  if (outerScope) {
13
13
  return /* @__PURE__ */ jsx(Fragment, { children });
14
14
  }
@@ -18,7 +18,7 @@ function IconRenderer({
18
18
  element,
19
19
  className
20
20
  }) {
21
- const RenderIcon = reactExports.useContext(IconRendererContext);
21
+ const RenderIcon = useContext(IconRendererContext);
22
22
  if (!element || !element.icon || element.icon === "none") {
23
23
  return null;
24
24
  }
@@ -34,7 +34,7 @@ function IconRenderer({
34
34
  return /* @__PURE__ */ jsx(
35
35
  "div",
36
36
  {
37
- className: clsx(
37
+ className: cx(
38
38
  className,
39
39
  "likec4-element-icon"
40
40
  ),
@@ -67,7 +67,7 @@ function IconOrShapeRenderer({
67
67
  return /* @__PURE__ */ jsx(
68
68
  "div",
69
69
  {
70
- className: clsx(
70
+ className: cx(
71
71
  className,
72
72
  "likec4-shape-icon"
73
73
  ),
@@ -1,12 +1,12 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
- import { createSafeContext, createOptionalContext } from '@mantine/core';
2
+ import { createSafeContext } from '@mantine/core';
3
3
  import { useStore } from '@nanostores/react';
4
4
  import { atom } from 'nanostores';
5
- import { r as reactExports } from '../_virtual/index.js';
5
+ import { useRef, createContext, useContext } from 'react';
6
6
 
7
- const [ReduceGraphicsModeCtx, useReducedGraphics] = createOptionalContext();
7
+ const ReduceGraphicsModeCtx = createContext(null);
8
8
  function useIsReducedGraphics() {
9
- const isReduced = useReducedGraphics();
9
+ const isReduced = useContext(ReduceGraphicsModeCtx);
10
10
  if (isReduced === null) {
11
11
  console.warn("ReduceGraphicsMode is not provided");
12
12
  }
@@ -16,11 +16,11 @@ const [PanningAtomSafeCtx, usePanningAtom] = createSafeContext(
16
16
  "PanningAtomSafeCtx is not provided"
17
17
  );
18
18
  function ReduceGraphicsContext({ reduceGraphics, children }) {
19
- const $isPanningRef = reactExports.useRef(null);
19
+ const $isPanningRef = useRef(null);
20
20
  if (!$isPanningRef.current) {
21
21
  $isPanningRef.current = atom(reduceGraphics);
22
22
  }
23
- return /* @__PURE__ */ jsx(PanningAtomSafeCtx, { value: $isPanningRef.current, children: /* @__PURE__ */ jsx(ReduceGraphicsModeCtx, { value: reduceGraphics, children }) });
23
+ return /* @__PURE__ */ jsx(PanningAtomSafeCtx, { value: $isPanningRef.current, children: /* @__PURE__ */ jsx(ReduceGraphicsModeCtx.Provider, { value: reduceGraphics, children }) });
24
24
  }
25
25
  function useIsPanning() {
26
26
  return useStore(usePanningAtom());
@@ -1,18 +1,18 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import { cx } from '@likec4/styles/css';
3
3
  import { Box } from '@likec4/styles/jsx';
4
- import { r as reactExports } from '../_virtual/index.js';
4
+ import { useRef, useEffect, createContext, useContext, createRef } from 'react';
5
5
  import { usePanningAtom } from './ReduceGraphics.js';
6
6
 
7
- const RootContainerContext = reactExports.createContext(reactExports.createRef());
7
+ const RootContainerContext = createContext(createRef());
8
8
  function RootContainer({
9
9
  className,
10
10
  reduceGraphics = false,
11
11
  children
12
12
  }) {
13
- const ref = reactExports.useRef(null);
13
+ const ref = useRef(null);
14
14
  const $isPanning = usePanningAtom();
15
- reactExports.useEffect(() => {
15
+ useEffect(() => {
16
16
  return $isPanning.listen((isPanning) => {
17
17
  if (isPanning) {
18
18
  ref.current?.setAttribute("data-likec4-diagram-panning", "true");
@@ -34,7 +34,7 @@ function RootContainer({
34
34
  );
35
35
  }
36
36
  function useRootContainer() {
37
- return reactExports.useContext(RootContainerContext).current;
37
+ return useContext(RootContainerContext).current;
38
38
  }
39
39
 
40
40
  export { RootContainer, useRootContainer };
@@ -1,5 +1,5 @@
1
1
  export { DiagramEventHandlers, useDiagramEventHandlers } from './DiagramEventHandlers';
2
- export { AllDisabled, DiagramFeatures, IfEnabled, IfNotEnabled, useEnabledFeature, useEnabledFeatures, } from './DiagramFeatures';
2
+ export { AllDisabled, DiagramFeatures, IfEnabled, IfNotEnabled, useEnabledFeatures, } from './DiagramFeatures';
3
3
  export type { EnabledFeatures } from './DiagramFeatures';
4
4
  export { EnsureMantine } from './EnsureMantine';
5
5
  export { FramerMotionConfig } from './FramerMotionConfig';
@@ -0,0 +1,5 @@
1
+ export { CompoundActionButton, CompoundDetailsButton, CompoundNodeContainer, CompoundTitle, DefaultHandles, ElementActionButtons, ElementDetailsButton, ElementNodeContainer, ElementShape, ElementTitle, } from '../base/primitives';
2
+ export { IconOrShapeRenderer, IconRenderer, IconRendererProvider, } from '../context/IconRenderer';
3
+ export { CompoundActions, CompoundDeploymentNode, CompoundDeploymentToolbar, CompoundDetailsButtonWithHandler, CompoundElementNode, CompoundElementToolbar, DeploymentElementActions, DeploymentElementToolbar, DeploymentNode, ElementActions, ElementDetailsButtonWithHandler, ElementNode, ElementToolbar, Toolbar, ViewGroupNode, } from '../likec4diagram/custom/nodes';
4
+ export { IfEnabled, IfNotEnabled, IfNotReadOnly, } from '../context/DiagramFeatures';
5
+ export { Overlay, type OverlayProps, } from '../overlays/overlay/Overlay';