@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
@@ -2,7 +2,7 @@ import { jsx, Fragment } from 'react/jsx-runtime';
2
2
  import '@likec4/core';
3
3
  import { useMantineStyleNonce } from '@mantine/core';
4
4
  import { deepEqual } from 'fast-equals';
5
- import { r as reactExports } from './_virtual/index.js';
5
+ import { memo } from 'react';
6
6
  import { entries } from 'remeda';
7
7
 
8
8
  function toStyle(name, colors) {
@@ -24,7 +24,7 @@ function toStyle(name, colors) {
24
24
  }
25
25
  `;
26
26
  }
27
- const LikeC4CustomColors = reactExports.memo(({ customColors }) => {
27
+ const LikeC4CustomColors = memo(({ customColors }) => {
28
28
  const styles = entries(customColors).map(([name, color]) => toStyle(name, color)).join("\n");
29
29
  const nonce = useMantineStyleNonce()?.();
30
30
  return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("style", { type: "text/css", dangerouslySetInnerHTML: { __html: styles }, nonce }) });
@@ -1,4 +1,4 @@
1
1
  import { PropsWithChildren } from 'react';
2
2
  import { LikeC4DiagramEventHandlers, LikeC4DiagramProperties } from './LikeC4Diagram.props';
3
3
  export type LikeC4DiagramProps = PropsWithChildren<LikeC4DiagramProperties & LikeC4DiagramEventHandlers>;
4
- export declare function LikeC4Diagram({ onCanvasClick, onCanvasContextMenu, onCanvasDblClick, onEdgeClick, onChange, onEdgeContextMenu, onNavigateTo, onNodeClick, onNodeContextMenu, onOpenSource, onBurgerMenuClick, view, className, fitView, fitViewPadding, readonly, pannable, zoomable, background, enableFocusMode, enableElementDetails, enableRelationshipDetails, enableRelationshipBrowser, nodesDraggable, nodesSelectable, controls, showDiagramTitle, showNotations, showNavigationButtons, enableDynamicViewWalkthrough, enableSearch, initialWidth, initialHeight, experimentalEdgeEditing, reduceGraphics, renderIcon, renderControls, where, reactFlowProps, children, }: LikeC4DiagramProps): import("react/jsx-runtime").JSX.Element;
4
+ export declare function LikeC4Diagram({ onCanvasClick, onCanvasContextMenu, onCanvasDblClick, onEdgeClick, onChange, onEdgeContextMenu, onNavigateTo, onNodeClick, onNodeContextMenu, onOpenSource, onBurgerMenuClick, view, className, fitView, fitViewPadding, readonly, pannable, zoomable, background, enableFocusMode, enableElementDetails, enableRelationshipDetails, enableRelationshipBrowser, nodesDraggable, nodesSelectable, controls, showDiagramTitle, showNotations, showNavigationButtons, enableDynamicViewWalkthrough, enableSearch, initialWidth, initialHeight, experimentalEdgeEditing, reduceGraphics, renderIcon, renderControls, where, reactFlowProps, renderNodes, children, }: LikeC4DiagramProps): import("react/jsx-runtime").JSX.Element;
@@ -1,6 +1,6 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import { ReactFlowProvider } from '@xyflow/react';
3
- import { r as reactExports } from './_virtual/index.js';
3
+ import { useRef } from 'react';
4
4
  import { isEmpty } from 'remeda';
5
5
  import { ControlsCustomLayoutProvider } from './context/ControlsCustomLayout.js';
6
6
  import { ReduceGraphicsContext } from './context/ReduceGraphics.js';
@@ -55,10 +55,11 @@ function LikeC4Diagram({
55
55
  renderControls,
56
56
  where,
57
57
  reactFlowProps = {},
58
+ renderNodes,
58
59
  children
59
60
  }) {
60
61
  const hasLikec4model = !!useLikeC4Model();
61
- const initialRef = reactExports.useRef(null);
62
+ const initialRef = useRef(null);
62
63
  const isDynamicView = view.__ === "dynamic";
63
64
  if (initialRef.current == null) {
64
65
  initialRef.current = {
@@ -134,6 +135,7 @@ function LikeC4Diagram({
134
135
  nodesSelectable,
135
136
  background,
136
137
  reactFlowProps,
138
+ renderNodes,
137
139
  children
138
140
  }
139
141
  ) })
@@ -2,7 +2,8 @@ import { DiagramEdge, DiagramNode, DiagramView, Fqn, RelationId, ViewChange, Vie
2
2
  import { ReactFlowProps as XYFlowProps } from '@xyflow/react';
3
3
  import { MouseEvent as ReactMouseEvent, ReactNode } from 'react';
4
4
  import { ControlsCustomLayout } from './context/ControlsCustomLayout';
5
- export type { WhereOperator };
5
+ import { CustomNodes } from './custom/customNodes';
6
+ export type { CustomNodes, WhereOperator };
6
7
  export type DiagramNodeWithNavigate<ID = ViewId> = Omit<DiagramNode, 'navigateTo'> & {
7
8
  navigateTo: ID;
8
9
  };
@@ -144,6 +145,10 @@ export interface LikeC4DiagramProperties {
144
145
  * Customize layout of the controls on the top left
145
146
  */
146
147
  renderControls?: ControlsCustomLayout | undefined;
148
+ /**
149
+ * Override node renderers
150
+ */
151
+ renderNodes?: CustomNodes | undefined;
147
152
  /**
148
153
  * Dynamic filter, applies both to nodes and edges
149
154
  */
@@ -1,9 +1,9 @@
1
- import { LikeC4Model } from '@likec4/core';
1
+ import { AnyAux, LikeC4Model } from '@likec4/core/model';
2
2
  import { PropsWithChildren } from 'react';
3
3
  export type LikeC4ModelProviderProps = PropsWithChildren<{
4
- likec4model: LikeC4Model;
4
+ likec4model: LikeC4Model<AnyAux>;
5
5
  }>;
6
6
  /**
7
7
  * Ensures LikeC4Model context
8
8
  */
9
- export declare function LikeC4ModelProvider({ children, likec4model }: LikeC4ModelProviderProps): import("react/jsx-runtime").JSX.Element;
9
+ export declare function LikeC4ModelProvider({ children, likec4model, }: LikeC4ModelProviderProps): import("react/jsx-runtime").JSX.Element;
@@ -1,5 +1,4 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
- import './_virtual/index.js';
3
2
  import { LikeC4ModelContext } from './likec4model/LikeC4ModelContext.js';
4
3
 
5
4
  function LikeC4ModelProvider({
@@ -1,3 +1,3 @@
1
1
  import { LikeC4DiagramProperties } from './LikeC4Diagram.props';
2
- export type StaticLikeC4DiagramProps = Pick<LikeC4DiagramProperties, 'view' | 'className' | 'fitView' | 'fitViewPadding' | 'background' | 'enableElementDetails' | 'enableRelationshipDetails' | 'enableRelationshipBrowser' | 'reduceGraphics' | 'initialWidth' | 'initialHeight' | 'renderIcon' | 'where'>;
2
+ export type StaticLikeC4DiagramProps = Pick<LikeC4DiagramProperties, 'view' | 'className' | 'fitView' | 'fitViewPadding' | 'background' | 'enableElementDetails' | 'enableRelationshipDetails' | 'enableRelationshipBrowser' | 'reduceGraphics' | 'initialWidth' | 'initialHeight' | 'renderIcon' | 'renderNodes' | 'where'>;
3
3
  export declare function StaticLikeC4Diagram({ view, fitView, fitViewPadding, enableElementDetails, enableRelationshipDetails, enableRelationshipBrowser, background, ...rest }: StaticLikeC4DiagramProps): import("react/jsx-runtime").JSX.Element;
@@ -2,7 +2,7 @@ import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { cx, css } from '@likec4/styles/css';
3
3
  import { useCallbackRef } from '@mantine/hooks';
4
4
  import { ReactFlow, useStore } from '@xyflow/react';
5
- import { r as reactExports } from '../_virtual/index.js';
5
+ import { useMemo, Fragment } from 'react';
6
6
  import { useUpdateEffect } from '../hooks/useUpdateEffect.js';
7
7
  import { useIsZoomTooSmall, useXYStoreApi } from '../hooks/useXYFlow.js';
8
8
  import { stopPropagation } from '../utils/xyflow.js';
@@ -82,7 +82,7 @@ const BaseXYFlow = ({
82
82
  maxZoom: zoomable ? MaxZoom : 1,
83
83
  minZoom: zoomable ? MinZoom : 1,
84
84
  fitView,
85
- fitViewOptions: reactExports.useMemo(() => ({
85
+ fitViewOptions: useMemo(() => ({
86
86
  minZoom: MinZoom,
87
87
  maxZoom: 1,
88
88
  padding: fitViewPadding,
@@ -156,7 +156,7 @@ const BaseXYFlow = ({
156
156
  onEdgeDoubleClick: stopPropagation,
157
157
  ...props,
158
158
  children: [
159
- /* @__PURE__ */ jsxs(reactExports.Fragment, { children: [
159
+ /* @__PURE__ */ jsxs(Fragment, { children: [
160
160
  isBgWithPattern && /* @__PURE__ */ jsx(Background, { background }),
161
161
  onViewportResize && /* @__PURE__ */ jsx(ViewportResizeHanlder, { onViewportResize })
162
162
  ] }, "_internals"),
@@ -1,7 +1,8 @@
1
+ import { Simplify } from 'type-fest';
1
2
  import { NodeProps } from '../../types';
2
- type CompoundActionButtonProps = NodeProps & {
3
+ type CompoundActionButtonProps = Simplify<NodeProps<{}> & {
3
4
  icon?: React.ReactNode;
4
5
  onClick: (e: React.MouseEvent) => void;
5
- };
6
+ }>;
6
7
  export declare function CompoundActionButton({ data: { hovered: isHovered, }, icon, onClick, }: CompoundActionButtonProps): import("react/jsx-runtime").JSX.Element;
7
8
  export {};
@@ -1,7 +1,8 @@
1
+ import { Simplify } from 'type-fest';
1
2
  import { NodeProps } from '../../types';
2
- type CompoundDetailsButtonProps = NodeProps & {
3
+ type CompoundDetailsButtonProps = Simplify<NodeProps<{}> & {
3
4
  icon?: React.ReactNode;
4
5
  onClick: (e: React.MouseEvent) => void;
5
- };
6
+ }>;
6
7
  export declare function CompoundDetailsButton({ data: { hovered: isHovered, }, icon, onClick, }: CompoundDetailsButtonProps): import("react/jsx-runtime").JSX.Element;
7
8
  export {};
@@ -1,10 +1,14 @@
1
- import { DiagramNode } from '@likec4/core';
1
+ import { Color, ElementStyle } from '@likec4/core/types';
2
2
  import { HTMLMotionProps } from 'motion/react';
3
3
  import { PropsWithChildren } from 'react';
4
4
  import { NodeProps } from '../../types';
5
- type RequiredData = Pick<DiagramNode, 'color' | 'depth' | 'style'>;
5
+ export type RequiredData = {
6
+ color: Color;
7
+ depth: number;
8
+ style: ElementStyle;
9
+ };
6
10
  type CompoundNodeContainerProps = Omit<HTMLMotionProps<'div'>, 'children'> & PropsWithChildren<{
7
11
  nodeProps: NodeProps<RequiredData>;
8
12
  }>;
9
- export declare function CompoundNodeContainer({ nodeProps: { selected: isSelected, data: { hovered: isHovered, dimmed: isDimmed, ...data }, }, children, style, ...rest }: CompoundNodeContainerProps): import("react/jsx-runtime").JSX.Element;
13
+ export declare function CompoundNodeContainer({ nodeProps: { selected: isSelected, data: { hovered: isHovered, dimmed: isDimmed, ...data }, }, className, children, style, ...rest }: CompoundNodeContainerProps): import("react/jsx-runtime").JSX.Element;
10
14
  export {};
@@ -1,7 +1,6 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { cx, css } from '@likec4/styles/css';
3
3
  import { m } from 'motion/react';
4
- import '../../../_virtual/index.js';
5
4
  import { isNumber, clamp } from 'remeda';
6
5
  import { compound, borderOpacityPercent, borderRadius, borderWidth, compoundOpacity } from './CompoundNodeContainer.css.js';
7
6
  import { useIsReducedGraphics } from '../../../context/ReduceGraphics.js';
@@ -15,6 +14,7 @@ function CompoundNodeContainer({
15
14
  ...data
16
15
  }
17
16
  },
17
+ className,
18
18
  children,
19
19
  style,
20
20
  ...rest
@@ -48,7 +48,8 @@ function CompoundNodeContainer({
48
48
  likec4Palette: `${data.color}.${depth}`
49
49
  }),
50
50
  classes.root,
51
- "likec4-compound-node"
51
+ "likec4-compound-node",
52
+ className
52
53
  ),
53
54
  initial: false,
54
55
  "data-likec4-hovered": isHovered,
@@ -1,37 +1,4 @@
1
- import { FunctionComponent, NamedExoticComponent, CSSProperties, ReactNode } from 'react';
1
+ import { FunctionComponent } from 'react';
2
2
  import { Base, EdgeProps } from '../types';
3
- import { Position } from '@xyflow/system';
4
3
  export declare const edgePropsEqual: <P extends Record<string, unknown> = Base.EdgeData>(prev: EdgeProps<P>, next: EdgeProps<P>) => boolean;
5
- export declare function customEdge<P extends Record<string, unknown> = Base.NodeData>(Edge: FunctionComponent<EdgeProps<P>>): NamedExoticComponent<{
6
- id: string;
7
- selected?: boolean;
8
- selectable?: boolean;
9
- deletable?: boolean;
10
- style?: CSSProperties;
11
- source: string;
12
- target: string;
13
- animated?: boolean;
14
- sourceX: number;
15
- sourceY: number;
16
- targetX: number;
17
- targetY: number;
18
- sourcePosition: Position;
19
- targetPosition: Position;
20
- label?: ReactNode;
21
- labelStyle?: CSSProperties;
22
- labelShowBg?: boolean;
23
- labelBgStyle?: CSSProperties;
24
- labelBgPadding?: [number, number];
25
- labelBgBorderRadius?: number;
26
- sourceHandleId?: string | null;
27
- targetHandleId?: string | null;
28
- markerStart?: string;
29
- markerEnd?: string;
30
- pathOptions?: any;
31
- interactionWidth?: number;
32
- data: {
33
- hovered?: boolean;
34
- active?: boolean;
35
- dimmed?: Base.Dimmed;
36
- } & P;
37
- }>;
4
+ export declare function customEdge<P extends Record<string, unknown> = Base.NodeData>(Edge: FunctionComponent<EdgeProps<P>>): FunctionComponent<EdgeProps<P>>;
@@ -1,12 +1,12 @@
1
1
  import { deepEqual } from 'fast-equals';
2
- import { r as reactExports } from '../../_virtual/index.js';
2
+ import { memo } from 'react';
3
3
 
4
4
  const isSame = (a, b) => {
5
5
  return Math.abs(a - b) < 2.5;
6
6
  };
7
7
  const edgePropsEqual = (prev, next) => prev.id === next.id && deepEqual(prev.selected ?? false, next.selected ?? false) && deepEqual(prev.animated ?? false, next.animated ?? false) && deepEqual(prev.source, next.source) && deepEqual(prev.sourceHandleId ?? null, next.sourceHandleId ?? null) && deepEqual(prev.sourcePosition, next.sourcePosition) && deepEqual(prev.target, next.target) && deepEqual(prev.targetHandleId ?? null, next.targetHandleId ?? null) && deepEqual(prev.targetPosition, next.targetPosition) && isSame(prev.sourceX, next.sourceX) && isSame(prev.sourceY, next.sourceY) && isSame(prev.targetX, next.targetX) && isSame(prev.targetY, next.targetY) && deepEqual(prev.data, next.data);
8
8
  function customEdge(Edge) {
9
- return reactExports.memo(Edge, edgePropsEqual);
9
+ return memo(Edge, edgePropsEqual);
10
10
  }
11
11
 
12
12
  export { customEdge, edgePropsEqual };
@@ -1,4 +1,4 @@
1
- import { FunctionComponent, NamedExoticComponent } from 'react';
1
+ import { FunctionComponent, MemoExoticComponent } from 'react';
2
2
  import { Base, NodeProps } from '../types';
3
3
  export declare const nodePropsEqual: <P extends Record<string, unknown> = Base.NodeData>(prev: NodeProps<P>, next: NodeProps<P>) => boolean;
4
- export declare function customNode<P extends Record<string, unknown> = Base.NodeData>(Node: FunctionComponent<NodeProps<P>>): NamedExoticComponent<NodeProps<P>>;
4
+ export declare function customNode<P extends Record<string, unknown> = {}, NodeType extends string = string>(Node: FunctionComponent<NodeProps<P, NodeType>>): MemoExoticComponent<(props: NodeProps<P, NodeType>) => import("react/jsx-runtime").JSX.Element>;
@@ -1,9 +1,16 @@
1
+ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
1
2
  import { deepEqual } from 'fast-equals';
2
- import { r as reactExports } from '../../_virtual/index.js';
3
+ import { memo } from 'react';
4
+ import { DefaultHandles } from './NodeHandles.js';
3
5
 
4
6
  const nodePropsEqual = (prev, next) => prev.id === next.id && deepEqual(prev.selected ?? false, next.selected ?? false) && deepEqual(prev.dragging ?? false, next.dragging ?? false) && deepEqual(prev.width ?? 0, next.width ?? 0) && deepEqual(prev.height ?? 0, next.height ?? 0) && deepEqual(prev.zIndex ?? 0, next.zIndex ?? 0) && deepEqual(prev.data, next.data);
5
7
  function customNode(Node) {
6
- return reactExports.memo(Node, nodePropsEqual);
8
+ const NodeComponent = memo((props) => /* @__PURE__ */ jsxs(Fragment, { children: [
9
+ /* @__PURE__ */ jsx(Node, { ...props }),
10
+ /* @__PURE__ */ jsx(DefaultHandles, {})
11
+ ] }), nodePropsEqual);
12
+ NodeComponent.displayName = "Node";
13
+ return NodeComponent;
7
14
  }
8
15
 
9
16
  export { customNode, nodePropsEqual };
@@ -1,7 +1,6 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import { invariant } from '@likec4/core';
3
3
  import { cx, css } from '@likec4/styles/css';
4
- import '../../../_virtual/index.js';
5
4
  import { edgeVars, edgeContainer } from './edge.css.js';
6
5
 
7
6
  function EdgeContainer({
@@ -3,7 +3,6 @@ import { isStepEdgeId, extractStep } from '@likec4/core';
3
3
  import { cx } from '@likec4/styles/css';
4
4
  import { Box } from '@likec4/styles/jsx';
5
5
  import { Text } from '@mantine/core';
6
- import '../../../_virtual/index.js';
7
6
  import { isTruthy } from 'remeda';
8
7
  import { labelsva } from './EdgeLabel.css.js';
9
8
 
@@ -1,8 +1,6 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
- import '@likec4/core';
3
2
  import { cx, css } from '@likec4/styles/css';
4
3
  import { EdgeLabelRenderer } from '@xyflow/react';
5
- import '../../../_virtual/index.js';
6
4
  import { isNumber } from 'remeda';
7
5
  import { ZIndexes } from '../../const.js';
8
6
  import { edgeVars } from './edge.css.js';
@@ -1,10 +1,10 @@
1
1
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
2
  import { cx, css } from '@likec4/styles/css';
3
- import { r as reactExports } from '../../../_virtual/index.js';
3
+ import { forwardRef } from 'react';
4
4
  import { hideOnReducedGraphics, markerContext, edgePathBg, cssEdgePath } from './edge.css.js';
5
5
  import { arrowTypeToMarker, EdgeMarkers } from './EdgeMarkers.js';
6
6
 
7
- const EdgePath = reactExports.forwardRef(({
7
+ const EdgePath = forwardRef(({
8
8
  edgeProps: {
9
9
  id,
10
10
  data: {
@@ -1,31 +1,33 @@
1
- import { DiagramNode, ElementStyle, ShapeSize, SpacingSize, TextSize } from '@likec4/core';
2
- import { BoxProps, PolymorphicComponentProps } from '@mantine/core';
3
- import { PropsWithChildren, FunctionComponent, ReactNode } from 'react';
1
+ import { Color, ElementShape, ElementStyle } from '@likec4/core/types';
2
+ import { LayoutProps } from 'motion/react';
3
+ import { CSSProperties, ReactNode, ForwardRefExoticComponent, RefAttributes } from 'react';
4
4
  import { NodeProps } from '../../types';
5
- type RequiredData = Pick<DiagramNode, 'color' | 'shape' | 'style'>;
6
- type ElementNodeContainerProps = BoxProps & PropsWithChildren<{
5
+ import { ShapeSize, SpacingSize, TextSize } from '@likec4/core';
6
+ export type RequiredData = {
7
+ color: Color;
8
+ shape: ElementShape;
9
+ style?: ElementStyle;
10
+ };
11
+ export type ElementNodeContainerProps = {
7
12
  nodeProps: NodeProps<RequiredData>;
8
- }>;
13
+ children?: ReactNode | undefined;
14
+ className?: string | undefined;
15
+ style?: CSSProperties | undefined;
16
+ [key: `data-${string}`]: string | undefined;
17
+ } & LayoutProps;
9
18
  export declare function nodeSizes({ size, padding, textSize, }: ElementStyle): {
10
19
  size: ShapeSize;
11
20
  padding: SpacingSize;
12
21
  textSize: TextSize;
13
22
  };
14
- export declare const ElementNodeContainer: (<C = "div">(props: PolymorphicComponentProps<C, ElementNodeContainerProps>) => React.ReactElement) & Omit< FunctionComponent<(BoxProps & {
15
- nodeProps: NodeProps<RequiredData>;
16
- } & {
17
- children?: ReactNode | undefined;
18
- } & {
19
- component?: any;
20
- } & Omit<Omit<any, "ref">, "children" | keyof BoxProps | "nodeProps" | "component"> & {
21
- ref?: any;
22
- renderRoot?: (props: any) => any;
23
- }) | (BoxProps & {
23
+ /**
24
+ * Top-level primitive to compose leaf nodes renderers.
25
+ * This container provides the state via data-* attributes
26
+ */
27
+ export declare const ElementNodeContainer: ForwardRefExoticComponent<{
28
+ [key: `data-${string}`]: string | undefined;
24
29
  nodeProps: NodeProps<RequiredData>;
25
- } & {
26
30
  children?: ReactNode | undefined;
27
- } & {
28
- component: React.ElementType;
29
- renderRoot?: (props: Record<string, any>) => any;
30
- })>, never> & Record<string, never>;
31
- export {};
31
+ className?: string | undefined;
32
+ style?: CSSProperties | undefined;
33
+ } & LayoutProps & RefAttributes<HTMLDivElement>>;
@@ -1,9 +1,8 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
- import { DefaultShapeSize, DefaultTextSize, DefaultPaddingSize } from '@likec4/core';
2
+ import { DefaultShapeSize, DefaultTextSize, DefaultPaddingSize } from '@likec4/core/types';
3
3
  import { cx, css } from '@likec4/styles/css';
4
- import { createPolymorphicComponent, Box } from '@mantine/core';
5
4
  import * as m from 'motion/react-m';
6
- import { r as reactExports } from '../../../_virtual/index.js';
5
+ import { forwardRef } from 'react';
7
6
  import { container } from './ElementNodeContainer.css.js';
8
7
 
9
8
  function nodeSizes({
@@ -29,73 +28,72 @@ function nodeSizes({
29
28
  textSize
30
29
  };
31
30
  }
32
- const ElementNodeContainer = createPolymorphicComponent(
33
- reactExports.forwardRef(({
34
- nodeProps: {
35
- selected = false,
36
- selectable = false,
37
- data: {
38
- hovered: isHovered = false,
39
- dimmed: isDimmed = false,
40
- ...data
41
- }
42
- },
43
- style,
44
- children,
45
- ...rest
46
- }, ref) => {
47
- let scale = 1;
48
- switch (true) {
49
- case isHovered:
50
- scale = 1.05;
51
- break;
52
- case selected:
53
- scale = 1.02;
54
- break;
31
+ const ElementNodeContainer = forwardRef(({
32
+ nodeProps: {
33
+ selected = false,
34
+ selectable = false,
35
+ data: {
36
+ hovered: isHovered = false,
37
+ dimmed: isDimmed = false,
38
+ ...data
55
39
  }
56
- const {
57
- size,
58
- padding,
59
- textSize
60
- } = nodeSizes(data.style);
61
- return /* @__PURE__ */ jsx(
62
- Box,
63
- {
64
- component: m.div,
65
- ref,
66
- className: cx(
67
- css({
68
- likec4Palette: data.color
69
- }),
70
- container,
71
- "group",
72
- "likec4-element-node"
73
- ),
74
- initial: false,
75
- ...selectable && {
76
- animate: {
77
- scale
78
- },
79
- whileTap: { scale: 0.98 }
80
- },
81
- "data-likec4-hovered": isHovered,
82
- "data-likec4-color": data.color,
83
- "data-likec4-shape": data.shape,
84
- "data-likec4-shape-size": size,
85
- "data-likec4-spacing": padding,
86
- "data-likec4-text-size": textSize,
87
- ...isDimmed !== false && {
88
- "data-likec4-dimmed": isDimmed
89
- },
90
- style: {
91
- ...style
40
+ },
41
+ className,
42
+ style,
43
+ children,
44
+ ...rest
45
+ }, ref) => {
46
+ let scale = 1;
47
+ switch (true) {
48
+ case isHovered:
49
+ scale = 1.05;
50
+ break;
51
+ case selected:
52
+ scale = 1.02;
53
+ break;
54
+ }
55
+ const {
56
+ size,
57
+ padding,
58
+ textSize
59
+ } = nodeSizes(data.style ?? {});
60
+ return /* @__PURE__ */ jsx(
61
+ m.div,
62
+ {
63
+ ref,
64
+ className: cx(
65
+ css({
66
+ likec4Palette: data.color
67
+ }),
68
+ container,
69
+ "group",
70
+ "likec4-element-node",
71
+ className
72
+ ),
73
+ initial: false,
74
+ ...selectable && {
75
+ animate: {
76
+ scale
92
77
  },
93
- ...rest,
94
- children
95
- }
96
- );
97
- })
98
- );
78
+ whileTap: { scale: 0.98 }
79
+ },
80
+ "data-likec4-hovered": isHovered,
81
+ "data-likec4-color": data.color,
82
+ "data-likec4-shape": data.shape,
83
+ "data-likec4-shape-size": size,
84
+ "data-likec4-spacing": padding,
85
+ "data-likec4-text-size": textSize,
86
+ ...isDimmed !== false && {
87
+ "data-likec4-dimmed": isDimmed
88
+ },
89
+ style: {
90
+ ...style
91
+ },
92
+ ...rest,
93
+ children
94
+ }
95
+ );
96
+ });
99
97
  ElementNodeContainer.displayName = "ElementNodeContainer";
100
98
 
101
99
  export { ElementNodeContainer, nodeSizes };
@@ -1,4 +1,4 @@
1
- import { DiagramNode, ElementShape } from '@likec4/core';
1
+ import { ElementShape, ElementStyle } from '@likec4/core';
2
2
  export declare function cylinderSVGPath(diameter: number, height: number, tilt?: number): {
3
3
  path: string;
4
4
  ry: number;
@@ -9,18 +9,22 @@ type ElementShapeProps = {
9
9
  w: number;
10
10
  h: number;
11
11
  };
12
- type Data = Pick<DiagramNode, 'shape' | 'width' | 'height'>;
12
+ type Data = {
13
+ shape: ElementShape;
14
+ width: number;
15
+ height: number;
16
+ style?: ElementStyle;
17
+ };
13
18
  type ElementShapePrimitiveProps = {
14
19
  data: Data;
15
20
  width?: number;
16
21
  height?: number;
17
- isMultiple?: boolean | undefined;
18
22
  /**
19
23
  * @default true
20
24
  */
21
25
  withSelectedIndicator?: boolean | undefined;
22
26
  };
23
- export declare function ElementShape({ data, width, height, isMultiple, withSelectedIndicator }: ElementShapePrimitiveProps): import("react/jsx-runtime").JSX.Element;
27
+ export declare function ElementShape({ data, width, height, withSelectedIndicator }: ElementShapePrimitiveProps): import("react/jsx-runtime").JSX.Element;
24
28
  /**
25
29
  * When element is selected, this component is used to render the indicator
26
30
  */
@@ -1,6 +1,6 @@
1
1
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
2
  import { nonexhaustive } from '@likec4/core';
3
- import clsx from 'clsx';
3
+ import { cx } from '@likec4/styles/css';
4
4
  import { toDomPrecision } from '../../../utils/xyflow.js';
5
5
  import { shapeSvgMultiple, shapeSvg, fillMixStroke, fillElementFill, indicator } from './ElementShape.css.js';
6
6
 
@@ -148,11 +148,12 @@ function ElementShapeSvg({ shape, w, h }) {
148
148
  }
149
149
  }
150
150
  }
151
- function ElementShape({ data, width, height, isMultiple = false, withSelectedIndicator = true }) {
151
+ function ElementShape({ data, width, height, withSelectedIndicator = true }) {
152
152
  let w = !!width && width > 10 ? width : data.width;
153
153
  let h = !!height && height > 10 ? height : data.height;
154
+ const isMultiple = data.style?.multiple ?? false;
154
155
  return /* @__PURE__ */ jsxs(Fragment, { children: [
155
- isMultiple && /* @__PURE__ */ jsx("svg", { className: clsx(shapeSvgMultiple), viewBox: `0 0 ${w} ${h}`, children: /* @__PURE__ */ jsx(ElementShapeSvg, { shape: data.shape, w, h }) }),
156
+ isMultiple && /* @__PURE__ */ jsx("svg", { className: cx(shapeSvgMultiple), viewBox: `0 0 ${w} ${h}`, children: /* @__PURE__ */ jsx(ElementShapeSvg, { shape: data.shape, w, h }) }),
156
157
  /* @__PURE__ */ jsxs("svg", { className: shapeSvg, viewBox: `0 0 ${w} ${h}`, children: [
157
158
  withSelectedIndicator && /* @__PURE__ */ jsx(SelectedIndicator, { shape: data.shape, w, h }),
158
159
  /* @__PURE__ */ jsx(ElementShapeSvg, { shape: data.shape, w, h })
@@ -1,7 +1,7 @@
1
1
  import { SlotRecipeRuntimeFn } from '@likec4/styles/types';
2
2
  export declare const iconSize = "--icon-size";
3
3
  export declare const elementIcon: string;
4
- export declare const elementTitle: SlotRecipeRuntimeFn<"title" | "technology" | "description" | "root" | "textContainer", {
4
+ export declare const elementTitle: SlotRecipeRuntimeFn<"root" | "title" | "technology" | "description" | "textContainer", {
5
5
  hasIcon: {
6
6
  false: {};
7
7
  true: {
@@ -1,5 +1,4 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
- import '@likec4/core';
3
2
  import { cx } from '@likec4/styles/css';
4
3
  import { Box, Text } from '@mantine/core';
5
4
  import { isTruthy, isEmpty, isNumber } from 'remeda';