@likec4/diagram 1.27.0 → 1.27.2

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 (151) hide show
  1. package/bundle/index.js +2343 -6880
  2. package/dist/LikeC4Diagram.js +3 -9
  3. package/dist/LikeC4Diagram.props.d.ts +5 -3
  4. package/dist/StaticLikeC4Diagram.js +1 -1
  5. package/dist/_virtual/set.js +5 -0
  6. package/dist/_virtual/set2.js +3 -0
  7. package/dist/base/BaseXYFlow.d.ts +2 -1
  8. package/dist/base/primitives/compound/CompoundNodeContainer.d.ts +1 -1
  9. package/dist/base/primitives/compound/CompoundNodeContainer.js +1 -2
  10. package/dist/base/primitives/edge/EdgeLabel.css.js +1 -4
  11. package/dist/base/primitives/edge/EdgeLabelContainer.js +1 -1
  12. package/dist/base/primitives/edge/EdgePath.js +0 -3
  13. package/dist/base/primitives/edge/edge.css.js +2 -0
  14. package/dist/base/primitives/element/ElementActionButtons.js +5 -10
  15. package/dist/base/primitives/element/ElementNodeContainer.css.js +5 -4
  16. package/dist/base/primitives/element/ElementShape.css.js +1 -12
  17. package/dist/base/primitives/element/ElementTitle.css.js +3 -2
  18. package/dist/base/types.js +2 -2
  19. package/dist/base/updateEdges.js +1 -9
  20. package/dist/base/updateNodes.js +1 -12
  21. package/dist/bundle/LikeC4View.js +2 -2
  22. package/dist/bundle/LikeC4View.props.d.ts +7 -7
  23. package/dist/components/Link.js +1 -1
  24. package/dist/hooks/useCurrentViewId.js +8 -2
  25. package/dist/hooks/useDiagram.d.ts +2659 -1996
  26. package/dist/hooks/useDiagram.js +16 -8
  27. package/dist/likec4diagram/DiagramXYFlow.js +10 -9
  28. package/dist/likec4diagram/custom/edges/RelationshipEdge.js +30 -41
  29. package/dist/likec4diagram/custom/nodes/toolbar/Toolbar.js +1 -1
  30. package/dist/likec4diagram/custom/nodes/toolbar/styles.css.js +6 -1
  31. package/dist/likec4diagram/ui/controls/LayoutDriftNotification.js +13 -5
  32. package/dist/likec4diagram/ui/notation/NotationPanel.css.js +3 -3
  33. package/dist/likec4diagram/ui/notation/NotationPanel.js +10 -4
  34. package/dist/likec4diagram/useLayoutConstraints.d.ts +11 -10
  35. package/dist/likec4diagram/useLayoutConstraints.js +64 -61
  36. package/dist/node_modules/.pnpm/mnemonist@0.40.3_patch_hash_5c12abb43fcff6fd81e53021b89075d53249640d165a2556cc1e58d71201a13a/node_modules/mnemonist/set.js +369 -0
  37. package/dist/overlays/Overlays.js +5 -3
  38. package/dist/overlays/element-details/actor.d.ts +2769 -173
  39. package/dist/overlays/overlay/Overlay.css.d.ts +26 -2
  40. package/dist/overlays/overlay/Overlay.css.js +83 -16
  41. package/dist/overlays/overlay/Overlay.d.ts +7 -6
  42. package/dist/overlays/overlay/Overlay.js +39 -32
  43. package/dist/overlays/overlaysActor.js +2 -2
  44. package/dist/overlays/relationship-details/RelationshipDetails.js +113 -70
  45. package/dist/overlays/relationship-details/SelectEdge.d.ts +1 -1
  46. package/dist/overlays/relationship-details/SelectEdge.js +15 -9
  47. package/dist/overlays/relationship-details/_types.d.ts +4 -1
  48. package/dist/overlays/relationship-details/actor.d.ts +415 -128
  49. package/dist/overlays/relationship-details/actor.js +162 -53
  50. package/dist/overlays/relationship-details/compute.d.ts +12 -0
  51. package/dist/overlays/relationship-details/compute.js +139 -0
  52. package/dist/overlays/relationship-details/custom/ElementActions.js +27 -5
  53. package/dist/overlays/relationship-details/custom/edgeTypes.js +1 -1
  54. package/dist/overlays/relationship-details/custom/nodeTypes.d.ts +2 -1
  55. package/dist/overlays/relationship-details/hooks.d.ts +336 -6
  56. package/dist/overlays/relationship-details/hooks.js +9 -7
  57. package/dist/overlays/relationship-details/layout-to-xyflow.d.ts +12 -0
  58. package/dist/overlays/relationship-details/layout-to-xyflow.js +149 -0
  59. package/dist/overlays/relationship-details/layout.d.ts +22 -0
  60. package/dist/overlays/relationship-details/layout.js +314 -0
  61. package/dist/overlays/relationships-browser/RelationshipsBrowser.d.ts +3 -1
  62. package/dist/overlays/relationships-browser/RelationshipsBrowser.js +2 -2
  63. package/dist/overlays/relationships-browser/SelectElement.js +4 -4
  64. package/dist/overlays/relationships-browser/_types.d.ts +2 -0
  65. package/dist/overlays/relationships-browser/actor.d.ts +130 -14
  66. package/dist/overlays/relationships-browser/actor.js +30 -16
  67. package/dist/overlays/relationships-browser/custom/ElementActions.js +5 -3
  68. package/dist/overlays/relationships-browser/custom/edgeTypes.d.ts +3 -1
  69. package/dist/overlays/relationships-browser/custom/edgeTypes.js +1 -1
  70. package/dist/overlays/relationships-browser/hooks.d.ts +3 -1
  71. package/dist/overlays/relationships-browser/hooks.js +1 -1
  72. package/dist/overlays/relationships-browser/{-useRelationshipsView.d.ts → layout.d.ts} +2 -0
  73. package/dist/overlays/relationships-browser/{-useRelationshipsView.js → layout.js} +19 -2
  74. package/dist/overlays/relationships-browser/useViewToNodesEdges.d.ts +1 -1
  75. package/dist/overlays/relationships-browser/useViewToNodesEdges.js +3 -1
  76. package/dist/packages/core/src/compute-view/relationships-view/compute.js +1 -1
  77. package/dist/packages/core/src/model/connection/model/ConnectionModel.js +121 -0
  78. package/dist/packages/core/src/model/connection/model/find.js +39 -0
  79. package/dist/packages/core/src/model/connection/ops.js +7 -0
  80. package/dist/packages/core/src/utils/const.js +3 -0
  81. package/dist/packages/core/src/utils/fqn.js +9 -1
  82. package/dist/packages/core/src/utils/iterable/find.js +21 -0
  83. package/dist/packages/core/src/utils/iterable/some.js +21 -0
  84. package/dist/packages/core/src/utils/set.js +48 -0
  85. package/dist/packages/core/src/utils/string-hash.js +13 -0
  86. package/dist/state/DiagramActorProvider.d.ts +4 -2
  87. package/dist/state/DiagramActorProvider.js +30 -37
  88. package/dist/state/assign.js +2 -2
  89. package/dist/state/diagram-machine.d.ts +1731 -1040
  90. package/dist/state/diagram-machine.js +126 -60
  91. package/dist/state/syncManualLayoutActor.d.ts +1 -1
  92. package/dist/styles.css.js +1 -1
  93. package/package.json +11 -11
  94. package/src/LikeC4Diagram.props.ts +7 -3
  95. package/src/LikeC4Diagram.tsx +2 -8
  96. package/src/StaticLikeC4Diagram.tsx +1 -1
  97. package/src/base/BaseXYFlow.tsx +2 -1
  98. package/src/base/primitives/compound/CompoundNodeContainer.tsx +1 -3
  99. package/src/base/primitives/edge/EdgeLabel.css.ts +1 -4
  100. package/src/base/primitives/edge/EdgeLabelContainer.tsx +1 -1
  101. package/src/base/primitives/edge/EdgePath.tsx +0 -3
  102. package/src/base/primitives/edge/edge.css.ts +2 -0
  103. package/src/base/primitives/element/ElementActionButtons.tsx +6 -7
  104. package/src/base/primitives/element/ElementNodeContainer.css.ts +5 -4
  105. package/src/base/primitives/element/ElementShape.css.ts +1 -12
  106. package/src/base/primitives/element/ElementTitle.css.ts +3 -2
  107. package/src/base/types.ts +2 -7
  108. package/src/base/updateEdges.ts +8 -8
  109. package/src/base/updateNodes.ts +11 -11
  110. package/src/bundle/LikeC4View.props.ts +7 -7
  111. package/src/bundle/LikeC4View.tsx +2 -2
  112. package/src/components/Link.tsx +3 -1
  113. package/src/hooks/useCurrentViewId.ts +4 -2
  114. package/src/hooks/useDiagram.ts +18 -9
  115. package/src/likec4diagram/DiagramXYFlow.tsx +11 -9
  116. package/src/likec4diagram/custom/edges/RelationshipEdge.tsx +39 -48
  117. package/src/likec4diagram/custom/nodes/toolbar/Toolbar.tsx +2 -2
  118. package/src/likec4diagram/custom/nodes/toolbar/styles.css.ts +5 -0
  119. package/src/likec4diagram/ui/controls/LayoutDriftNotification.tsx +8 -4
  120. package/src/likec4diagram/ui/notation/NotationPanel.css.ts +2 -2
  121. package/src/likec4diagram/ui/notation/NotationPanel.tsx +8 -6
  122. package/src/likec4diagram/useLayoutConstraints.ts +84 -89
  123. package/src/overlays/Overlays.tsx +5 -3
  124. package/src/overlays/overlay/Overlay.css.ts +83 -15
  125. package/src/overlays/overlay/Overlay.tsx +52 -41
  126. package/src/overlays/overlaysActor.ts +1 -1
  127. package/src/overlays/relationship-details/RelationshipDetails.tsx +131 -68
  128. package/src/overlays/relationship-details/SelectEdge.tsx +19 -12
  129. package/src/overlays/relationship-details/_types.ts +3 -1
  130. package/src/overlays/relationship-details/actor.ts +217 -68
  131. package/src/overlays/relationship-details/compute.ts +186 -0
  132. package/src/overlays/relationship-details/custom/ElementActions.tsx +27 -18
  133. package/src/overlays/relationship-details/custom/edgeTypes.tsx +1 -1
  134. package/src/overlays/relationship-details/hooks.ts +10 -8
  135. package/src/overlays/relationship-details/layout-to-xyflow.ts +195 -0
  136. package/src/overlays/relationship-details/layout.ts +470 -0
  137. package/src/overlays/relationships-browser/RelationshipsBrowser.tsx +2 -2
  138. package/src/overlays/relationships-browser/SelectElement.tsx +5 -5
  139. package/src/overlays/relationships-browser/_types.ts +2 -0
  140. package/src/overlays/relationships-browser/actor.ts +39 -14
  141. package/src/overlays/relationships-browser/custom/ElementActions.tsx +5 -3
  142. package/src/overlays/relationships-browser/custom/edgeTypes.tsx +1 -1
  143. package/src/overlays/relationships-browser/hooks.ts +2 -2
  144. package/src/overlays/relationships-browser/{-useRelationshipsView.ts → layout.ts} +23 -13
  145. package/src/overlays/relationships-browser/useViewToNodesEdges.ts +3 -1
  146. package/src/state/DiagramActorProvider.tsx +40 -50
  147. package/src/state/assign.ts +2 -2
  148. package/src/state/diagram-machine.ts +151 -75
  149. package/dist/overlays/relationship-details/useLayoutedDetails.d.ts +0 -19
  150. package/dist/overlays/relationship-details/useLayoutedDetails.js +0 -267
  151. package/src/overlays/relationship-details/useLayoutedDetails.ts +0 -376
@@ -6,7 +6,6 @@ import { ControlsCustomLayoutProvider } from './context/ControlsCustomLayout.js'
6
6
  import { ReduceGraphicsContext } from './context/ReduceGraphics.js';
7
7
  import { LikeC4CustomColors } from './LikeC4CustomColors.js';
8
8
  import { LikeC4DiagramXYFlow } from './likec4diagram/DiagramXYFlow.js';
9
- import { useViewToNodesEdges } from './likec4diagram/useViewToNodesEdges.js';
10
9
  import { DiagramActorProvider } from './state/DiagramActorProvider.js';
11
10
  import { useLikeC4Model } from './likec4model/useLikeC4Model.js';
12
11
  import { EnsureMantine } from './context/EnsureMantine.js';
@@ -31,7 +30,7 @@ function LikeC4Diagram({
31
30
  view,
32
31
  className,
33
32
  fitView = true,
34
- fitViewPadding = 0,
33
+ fitViewPadding = "8px",
35
34
  readonly = true,
36
35
  pannable = true,
37
36
  zoomable = true,
@@ -60,11 +59,6 @@ function LikeC4Diagram({
60
59
  }) {
61
60
  const hasLikec4model = !!useLikeC4Model();
62
61
  const initialRef = useRef(null);
63
- const xyNodesEdges = useViewToNodesEdges({
64
- view,
65
- where,
66
- nodesSelectable
67
- });
68
62
  const isDynamicView = view.__ === "dynamic";
69
63
  if (initialRef.current == null) {
70
64
  initialRef.current = {
@@ -130,8 +124,8 @@ function LikeC4Diagram({
130
124
  view,
131
125
  pannable,
132
126
  zoomable,
133
- fitViewPadding,
134
- ...xyNodesEdges
127
+ nodesSelectable,
128
+ fitViewPadding
135
129
  },
136
130
  children: /* @__PURE__ */ jsx(ControlsCustomLayoutProvider, { value: renderControls ?? null, children: /* @__PURE__ */ jsx(
137
131
  LikeC4DiagramXYFlow,
@@ -27,6 +27,8 @@ export type ChangeEvent = {
27
27
  export type OnChange = (event: ChangeEvent) => void;
28
28
  export type LikeC4ColorScheme = 'light' | 'dark';
29
29
  export type OverrideReactFlowProps = Pick<XYFlowProps, 'paneClickDistance' | 'nodeClickDistance' | 'selectionKeyCode' | 'panActivationKeyCode' | 'multiSelectionKeyCode' | 'zoomActivationKeyCode' | 'snapToGrid' | 'snapGrid' | 'onlyRenderVisibleElements' | 'nodesDraggable' | 'nodesFocusable' | 'elementsSelectable' | 'selectNodesOnDrag' | 'panOnDrag' | 'preventScrolling' | 'zoomOnScroll' | 'zoomOnPinch' | 'panOnScroll' | 'panOnScrollSpeed' | 'panOnScrollMode' | 'zoomOnDoubleClick' | 'nodeDragThreshold'>;
30
+ export type PaddingUnit = 'px' | '%';
31
+ export type PaddingWithUnit = `${number}${PaddingUnit}` | number;
30
32
  export interface LikeC4DiagramProperties {
31
33
  view: DiagramView;
32
34
  className?: string | undefined;
@@ -57,10 +59,10 @@ export interface LikeC4DiagramProperties {
57
59
  */
58
60
  fitView?: boolean | undefined;
59
61
  /**
60
- * Seems like this is percentage of the view size
61
- * @default 0
62
+ * Padding around the diagram
63
+ * @default '8px'
62
64
  */
63
- fitViewPadding?: number | undefined;
65
+ fitViewPadding?: PaddingWithUnit | undefined;
64
66
  /**
65
67
  * @default false if readonly
66
68
  */
@@ -4,7 +4,7 @@ import { LikeC4Diagram } from './LikeC4Diagram.js';
4
4
  function StaticLikeC4Diagram({
5
5
  view,
6
6
  fitView = true,
7
- fitViewPadding = 0,
7
+ fitViewPadding = "8px",
8
8
  enableElementDetails = false,
9
9
  enableRelationshipDetails = false,
10
10
  enableRelationshipBrowser = enableRelationshipDetails,
@@ -0,0 +1,5 @@
1
+ import { __require as requireSet } from '../node_modules/.pnpm/mnemonist@0.40.3_patch_hash_5c12abb43fcff6fd81e53021b89075d53249640d165a2556cc1e58d71201a13a/node_modules/mnemonist/set.js';
2
+
3
+ var setExports = /*@__PURE__*/ requireSet();
4
+
5
+ export { setExports as s };
@@ -0,0 +1,3 @@
1
+ var set = {};
2
+
3
+ export { set as __exports };
@@ -1,5 +1,6 @@
1
1
  import { ReactFlowProps } from '@xyflow/react';
2
2
  import { SetRequired, Simplify } from 'type-fest';
3
+ import { PaddingWithUnit } from '../LikeC4Diagram.props';
3
4
  import { XYBackground } from './Background';
4
5
  import { Base } from './types';
5
6
  export type BaseXYFlowProps<NodeType extends Base.Node, EdgeType extends Base.Edge> = Simplify<{
@@ -8,7 +9,7 @@ export type BaseXYFlowProps<NodeType extends Base.Node, EdgeType extends Base.Ed
8
9
  nodesSelectable?: boolean;
9
10
  nodesDraggable?: boolean;
10
11
  background?: 'transparent' | 'solid' | XYBackground;
11
- fitViewPadding?: number;
12
+ fitViewPadding?: PaddingWithUnit | undefined;
12
13
  onViewportResize?: undefined | (() => void);
13
14
  } & SetRequired<Omit<ReactFlowProps<NodeType, EdgeType>, 'defaultNodes' | 'defaultEdges' | 'onNodeDoubleClick' | 'onEdgeDoubleClick' | 'fitViewOptions'>, 'nodes' | 'edges' | 'onNodesChange' | 'onEdgesChange'>>;
14
15
  export declare const BaseXYFlow: <NodeType extends Base.Node, EdgeType extends Base.Edge>({ nodes, edges, onEdgesChange, onNodesChange, className, pannable, zoomable, nodesSelectable, nodesDraggable, background, children, colorMode, fitViewPadding, fitView, zoomOnDoubleClick, onViewportResize, onMoveEnd, ...props }: BaseXYFlowProps<NodeType, EdgeType>) => import("react/jsx-runtime").JSX.Element;
@@ -2,7 +2,7 @@ import { DiagramNode } from '@likec4/core';
2
2
  import { HTMLMotionProps } from 'framer-motion';
3
3
  import { PropsWithChildren } from 'react';
4
4
  import { NodeProps } from '../../types';
5
- type RequiredData = Pick<DiagramNode, 'color' | 'depth' | 'shape' | 'style'>;
5
+ type RequiredData = Pick<DiagramNode, 'color' | 'depth' | 'style'>;
6
6
  type CompoundNodeContainerProps = Omit<HTMLMotionProps<'div'>, 'children'> & PropsWithChildren<{
7
7
  nodeProps: NodeProps<RequiredData>;
8
8
  }>;
@@ -54,13 +54,12 @@ function CompoundNodeContainer({
54
54
  "data-likec4-hovered": isHovered,
55
55
  "data-likec4-color": data.color,
56
56
  "data-compound-depth": depth,
57
- "data-likec4-shape": data.shape,
58
57
  ...isTransparent && {
59
58
  "data-compound-transparent": true,
60
59
  "data-compound-title-inverse": opacity < 0.5
61
60
  },
62
61
  ...isDimmed !== false && {
63
- "likec4-dimmed": isDimmed
62
+ "data-likec4-dimmed": isDimmed
64
63
  },
65
64
  style: {
66
65
  ...style,
@@ -42,7 +42,7 @@ const edgeLabelContainer = css({
42
42
  },
43
43
  _noReduceGraphics: {
44
44
  mixBlendMode: {
45
- base: "plus-lighter",
45
+ _dark: "plus-lighter",
46
46
  _light: "screen"
47
47
  }
48
48
  },
@@ -51,9 +51,6 @@ const edgeLabelContainer = css({
51
51
  },
52
52
  _reduceGraphicsOnPan: {
53
53
  display: "none"
54
- },
55
- _whenPanning: {
56
- mixBlendMode: "normal"
57
54
  }
58
55
  });
59
56
  const labelsva = sva({
@@ -10,7 +10,7 @@ import { translate, edgeLabelContainer } from './EdgeLabel.css.js';
10
10
 
11
11
  const toCssVarValue = (value) => {
12
12
  if (value === void 0) return void 0;
13
- return isNumber(value) ? `${value}px` : value;
13
+ return isNumber(value) ? `${Math.round(value)}px` : value;
14
14
  };
15
15
  function EdgeLabelContainer({
16
16
  edgeProps: {
@@ -66,9 +66,6 @@ const EdgePath = forwardRef(({
66
66
  "react-flow__edge-path",
67
67
  "react-flow__edge-interaction",
68
68
  cssEdgePath
69
- // css({
70
- // strokeDasharray: strokeDasharray,
71
- // }),
72
69
  ),
73
70
  d: svgPath,
74
71
  style,
@@ -39,6 +39,7 @@ const _hideOnReducedGraphics = css.raw({
39
39
  });
40
40
  const hideOnReducedGraphics = css(_hideOnReducedGraphics);
41
41
  const edgePathBg = css(_hideOnReducedGraphics, {
42
+ fill: "[none]",
42
43
  strokeWidth: "calc(var(--xy-edge-stroke-width) + 2)",
43
44
  strokeOpacity: 0.08,
44
45
  transitionProperty: "stroke-width, stroke-opacity",
@@ -62,6 +63,7 @@ const markerContext = css({
62
63
  stroke: "[var(--xy-edge-stroke)]"
63
64
  });
64
65
  const cssEdgePath = css({
66
+ fill: "[none]",
65
67
  strokeDashoffset: 10,
66
68
  _noReduceGraphics: {
67
69
  transition: "stroke 130ms ease-out,stroke-width 130ms ease-out"
@@ -61,17 +61,12 @@ function ElementActionButtons({
61
61
  initial: false,
62
62
  whileTap: { scale: 1 },
63
63
  whileHover: {
64
- scale: 1.35
64
+ scale: 1.3
65
65
  },
66
- children: /* @__PURE__ */ jsx(
67
- ActionIcon,
68
- {
69
- className: actionBtn({}),
70
- onClick: button.onClick,
71
- onDoubleClick: stopPropagation,
72
- children: button.icon
73
- }
74
- )
66
+ onTap: (e) => button.onClick(e),
67
+ onClick: stopPropagation,
68
+ onDoubleClick: stopPropagation,
69
+ children: /* @__PURE__ */ jsx(ActionIcon, { className: actionBtn({}), children: button.icon })
75
70
  },
76
71
  `action-button-${id}-${button.key ?? index}`
77
72
  ))
@@ -9,12 +9,13 @@ const container = css({
9
9
  display: "flex",
10
10
  alignItems: "center",
11
11
  justifyContent: "center",
12
- _after: {
12
+ pointerEvents: "none",
13
+ _before: {
13
14
  content: '" "',
14
15
  position: "absolute",
15
- top: "100%",
16
+ top: "calc(100% - 4px)",
16
17
  left: 0,
17
- right: 0,
18
+ width: "100%",
18
19
  height: "24px",
19
20
  background: "[transparent]",
20
21
  pointerEvents: "all"
@@ -38,7 +39,7 @@ const container = css({
38
39
  // // filter: `grayscale(0.85) ${fallbackVar(vars.safariAnimationHook, 'blur(2px)')}`,
39
40
  // },
40
41
  _reduceGraphicsOnPan: {
41
- _after: {
42
+ _before: {
42
43
  display: "none"
43
44
  }
44
45
  },
@@ -6,7 +6,7 @@ const indicator = css({
6
6
  },
7
7
  stroke: "likec4.palette.loContrast",
8
8
  fill: "[none]",
9
- strokeWidth: 6,
9
+ strokeWidth: 8,
10
10
  strokeOpacity: 0.8,
11
11
  visibility: "hidden",
12
12
  pointerEvents: "none",
@@ -14,25 +14,14 @@ const indicator = css({
14
14
  stroke: `[color-mix(in srgb, {colors.likec4.palette.fill} 50%,rgb(121, 121, 121))]`
15
15
  },
16
16
  _whenFocused: {
17
- strokeWidth: 12,
18
17
  visibility: "visible"
19
18
  },
20
19
  _groupFocusVisible: {
21
- strokeWidth: 12,
22
20
  visibility: "visible"
23
21
  },
24
22
  _whenSelected: {
25
23
  animationStyle: "indicator",
26
24
  visibility: "visible"
27
- },
28
- _shapeQueue: {
29
- strokeWidth: 8
30
- },
31
- _shapeCylinder: {
32
- strokeWidth: 8
33
- },
34
- _shapeStorage: {
35
- strokeWidth: 8
36
25
  }
37
26
  });
38
27
  const fillElementFill = css({
@@ -18,7 +18,7 @@ const description = css.raw({
18
18
  display: "none"
19
19
  },
20
20
  _smallZoom: {
21
- visibility: "hidden"
21
+ display: "none"
22
22
  }
23
23
  });
24
24
  const technology = css.raw({
@@ -40,7 +40,7 @@ const technology = css.raw({
40
40
  display: "none"
41
41
  },
42
42
  _smallZoom: {
43
- visibility: "hidden"
43
+ display: "none"
44
44
  }
45
45
  });
46
46
  const varIconSize = `var(${iconSize})`;
@@ -92,6 +92,7 @@ const elementTitle = sva({
92
92
  paddingLeft: "calc(var(--likec4-spacing) + 8px)",
93
93
  paddingRight: "calc(var(--likec4-spacing) + 8px)",
94
94
  overflow: "hidden",
95
+ pointerEvents: "none",
95
96
  gap: "12px",
96
97
  _shapeQueue: {
97
98
  paddingLeft: "46px",
@@ -2,7 +2,7 @@ import { hasSubObject } from 'remeda';
2
2
 
3
3
  var Base;
4
4
  ((Base2) => {
5
- const _setDimmed = (v, dimmed) => v.data.dimmed === dimmed ? v : {
5
+ const _setDimmed = (v, dimmed) => (v.data.dimmed ?? false) === dimmed ? v : {
6
6
  ...v,
7
7
  data: {
8
8
  ...v.data,
@@ -16,7 +16,7 @@ var Base;
16
16
  return (v) => _setDimmed(v, arg1);
17
17
  }
18
18
  Base2.setDimmed = setDimmed;
19
- const _setHovered = (v, hovered) => v.data.hovered === hovered ? v : {
19
+ const _setHovered = (v, hovered) => (v.data.hovered ?? false) === hovered ? v : {
20
20
  ...v,
21
21
  data: {
22
22
  ...v.data,
@@ -1,5 +1,5 @@
1
1
  import { deepEqual } from 'fast-equals';
2
- import { isDefined, omit } from 'remeda';
2
+ import { isDefined } from 'remeda';
3
3
 
4
4
  function _update(current, update) {
5
5
  return update.map((next) => {
@@ -8,14 +8,6 @@ function _update(current, update) {
8
8
  if (deepEqual(existing.hidden ?? false, next.hidden ?? false) && deepEqual(existing.source, next.source) && deepEqual(existing.sourceHandle ?? null, next.sourceHandle ?? null) && deepEqual(existing.target, next.target) && deepEqual(existing.targetHandle ?? null, next.targetHandle ?? null) && deepEqual(existing.zIndex ?? 0, next.zIndex ?? 0) && deepEqual(existing.data, next.data)) {
9
9
  return existing;
10
10
  }
11
- return {
12
- ...omit(existing, ["hidden", "zIndex"]),
13
- ...next,
14
- data: {
15
- ...existing.data,
16
- ...next.data
17
- }
18
- };
19
11
  }
20
12
  return next;
21
13
  });
@@ -1,6 +1,6 @@
1
1
  import { getNodeDimensions } from '@xyflow/system';
2
2
  import { deepEqual } from 'fast-equals';
3
- import { isDefined, omit } from 'remeda';
3
+ import { isDefined } from 'remeda';
4
4
 
5
5
  function _update(current, updated) {
6
6
  return updated.map((update) => {
@@ -10,17 +10,6 @@ function _update(current, updated) {
10
10
  if (deepEqual(existing.type, update.type) && deepEqual(existingWidth, update.initialWidth) && deepEqual(existingHeight, update.initialHeight) && deepEqual(existing.parentId ?? null, update.parentId ?? null) && deepEqual(existing.hidden ?? false, update.hidden ?? false) && deepEqual(existing.zIndex ?? 0, update.zIndex ?? 0) && deepEqual(existing.position, update.position) && deepEqual(existing.data, update.data)) {
11
11
  return existing;
12
12
  }
13
- return {
14
- ...omit(existing, ["measured", "parentId", "hidden", "zIndex"]),
15
- ...update,
16
- // Force dimensions from update
17
- width: update.initialWidth,
18
- height: update.initialHeight,
19
- data: {
20
- ...existing.data,
21
- ...update.data
22
- }
23
- };
24
13
  }
25
14
  return update;
26
15
  });
@@ -40,7 +40,7 @@ const LikeC4ViewInner = memo(({
40
40
  injectFontCss = true,
41
41
  controls = false,
42
42
  fitView = true,
43
- fitViewPadding = 0.1,
43
+ fitViewPadding = "8px",
44
44
  background = "transparent",
45
45
  browser = true,
46
46
  showDiagramTitle = false,
@@ -147,7 +147,7 @@ const LikeC4ViewInner = memo(({
147
147
  controls: true,
148
148
  readonly: true,
149
149
  fitView: true,
150
- fitViewPadding,
150
+ fitViewPadding: "16px",
151
151
  ...props,
152
152
  ...browserProps,
153
153
  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 } from '../LikeC4Diagram.props';
3
+ import { ElementIconRenderer, OverrideReactFlowProps, PaddingWithUnit } from '../LikeC4Diagram.props';
4
4
  export interface LikeC4ViewProps<ViewId = string, Tag = string, Kind = string> {
5
5
  /**
6
6
  * View to display.
@@ -55,10 +55,10 @@ export interface LikeC4ViewProps<ViewId = string, Tag = string, Kind = string> {
55
55
  */
56
56
  fitView?: boolean | undefined;
57
57
  /**
58
- * Seems like this is percentage of the view size
59
- * @default 0.1
58
+ * Padding around the diagram
59
+ * @default '8px'
60
60
  */
61
- fitViewPadding?: number | undefined;
61
+ fitViewPadding?: PaddingWithUnit | undefined;
62
62
  /**
63
63
  * Display diagram title / description
64
64
  *
@@ -135,10 +135,10 @@ export interface LikeC4BrowserProps {
135
135
  */
136
136
  background?: 'dots' | 'lines' | 'cross' | 'transparent' | 'solid' | undefined;
137
137
  /**
138
- * Seems like this is percentage of the view size
139
- * @default 0.1
138
+ * Padding around the diagram
139
+ * @default '16px'
140
140
  */
141
- fitViewPadding?: number | undefined;
141
+ fitViewPadding?: PaddingWithUnit | undefined;
142
142
  /**
143
143
  * Show/hide panel with top left controls,
144
144
  * @default true
@@ -54,7 +54,7 @@ function Link({
54
54
  size = "md"
55
55
  }) {
56
56
  const isNormalSize = size === "md";
57
- const url = new URL(value.url, window.location.href).toString();
57
+ const url = value.url.includes("://") ? value.url : new window.URL(value.url, window.location.href).toString();
58
58
  return /* @__PURE__ */ jsx(CopyButton, { value: url, children: ({ copied, copy }) => /* @__PURE__ */ jsxs(
59
59
  Anchor,
60
60
  {
@@ -1,8 +1,14 @@
1
- import { useDiagramActorSnapshot } from './useDiagram.js';
1
+ import { useSelector } from '@xstate/react';
2
+ import '@likec4/core';
3
+ import '@mantine/hooks';
4
+ import 'fast-equals';
5
+ import 'react';
6
+ import { useDiagramActorRef } from './safeContext.js';
2
7
 
3
8
  const selectViewId = (s) => s.context.view.id;
4
9
  function useCurrentViewId() {
5
- return useDiagramActorSnapshot(selectViewId);
10
+ const actorRef = useDiagramActorRef();
11
+ return useSelector(actorRef, selectViewId);
6
12
  }
7
13
 
8
14
  export { useCurrentViewId };