likec4 1.17.0 → 1.17.1

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.
@@ -1,10 +1,10 @@
1
1
  import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
2
  import { useOverviewGraph } from "virtual:likec4/overview-graph";
3
- import { c as createReactComponent, I as IconFolderFilled, e, u as useUpdateEffect, i, n as nonexhaustive } from "./main-Beyl8kQ7.js";
4
- import { u as useRouter } from "./tanstack-router-DJI32bwX.js";
5
- import { B as BaseEdge, H as Handle, P as Position, u as useNodesState, a as useEdgesState, i as index, b as Background, c as BackgroundVariant } from "./likec4-CLNXvKhh.js";
3
+ import { c as createReactComponent, I as IconFolderFilled, n, u as useUpdateEffect, i, a as nonexhaustive } from "./main-E2hyQKFO.js";
4
+ import { u as useRouter } from "./tanstack-router-CF1kJvtP.js";
5
+ import { B as BaseEdge, H as Handle, P as Position, u as useNodesState, a as useEdgesState, i as index, b as Background, c as BackgroundVariant } from "./likec4-DF_Jsv_p.js";
6
6
  import { memo, useRef, useMemo } from "react";
7
- import { P as Paper, c as clsx, G as Group, T as ThemeIcon, a as Text, C as Card, b as CardSection, d as Center, I as Image, B as Box, u as useMantineColorScheme } from "./mantine-CdYQpHSU.js";
7
+ import { P as Paper, c as clsx, G as Group, T as ThemeIcon, a as Text, C as Card, b as CardSection, d as Center, I as Image, B as Box, u as useMantineColorScheme } from "./mantine-BzD51ZKm.js";
8
8
  import { usePreviewUrl } from "virtual:likec4/previews";
9
9
  /**
10
10
  * @license @tabler/icons-react v3.17.0 - MIT
@@ -46,7 +46,7 @@ const FolderNode = /* @__PURE__ */ memo(function({
46
46
  parentId,
47
47
  id
48
48
  }) {
49
- const isTopLevel = e(parentId);
49
+ const isTopLevel = n(parentId);
50
50
  return /* @__PURE__ */ jsxs(Fragment, { children: [
51
51
  /* @__PURE__ */ jsx(Handle, { type: "target", position: Position.Top, className: handleCenter }),
52
52
  /* @__PURE__ */ jsx(
@@ -75,7 +75,7 @@ const FolderNode = /* @__PURE__ */ memo(function({
75
75
  parentId,
76
76
  id
77
77
  }) {
78
- const isTopLevel = e(parentId);
78
+ const isTopLevel = n(parentId);
79
79
  return /* @__PURE__ */ jsxs(Fragment, { children: [
80
80
  /* @__PURE__ */ jsx(Handle, { type: "target", position: Position.Top, className: handleCenter }),
81
81
  /* @__PURE__ */ jsx(
@@ -142,7 +142,7 @@ const FolderNode = /* @__PURE__ */ memo(function({
142
142
  link: LinkEdge
143
143
  }, overviewGraphToXYFlowData = (graph) => ({
144
144
  nodes: graph.nodes.map(({ id, parentId, position, width, height, ...node }) => {
145
- const parent = parentId ? graph.nodes.find((n) => n.id === parentId) : null, rect = {
145
+ const parent = parentId ? graph.nodes.find((n2) => n2.id === parentId) : null, rect = {
146
146
  ...position,
147
147
  width,
148
148
  height
@@ -214,9 +214,9 @@ function OverviewDiagrams({
214
214
  const router = useRouter(), xyflowRef = useRef(), { colorScheme } = useMantineColorScheme(), xyflowdata = useMemo(() => overviewGraphToXYFlowData(graph), [graph]), [nodes, setNodes, onNodesChange] = useNodesState(xyflowdata.nodes), [edges, setEdges, onEdgeChanges] = useEdgesState(xyflowdata.edges);
215
215
  useUpdateEffect(() => {
216
216
  setNodes(
217
- (nodes2) => xyflowdata.nodes.map((n) => {
218
- const current = nodes2.find((node) => node.id === n.id);
219
- return current ? { ...i(current, ["selected", "hidden"]), ...n } : n;
217
+ (nodes2) => xyflowdata.nodes.map((n2) => {
218
+ const current = nodes2.find((node) => node.id === n2.id);
219
+ return current ? { ...i(current, ["selected", "hidden"]), ...n2 } : n2;
220
220
  })
221
221
  ), setEdges(xyflowdata.edges);
222
222
  }, [xyflowdata.nodes, xyflowdata.edges]);
@@ -276,7 +276,7 @@ function OverviewDiagrams({
276
276
  onInit: (instance) => xyflowRef.current = instance,
277
277
  onNodeClick: (event, node) => {
278
278
  if (node.type === "view") {
279
- event.stopPropagation(), setNodes((nodes2) => nodes2.map(({ data, ...n }) => ({ ...n, data: { ...data, dimmed: n.id !== node.id } }))), xyflowRef.current?.fitView({
279
+ event.stopPropagation(), setNodes((nodes2) => nodes2.map(({ data, ...n2 }) => ({ ...n2, data: { ...data, dimmed: n2.id !== node.id } }))), xyflowRef.current?.fitView({
280
280
  maxZoom: 10,
281
281
  padding: 0,
282
282
  nodes: [node],
@@ -294,7 +294,7 @@ function OverviewDiagrams({
294
294
  }, 800);
295
295
  return;
296
296
  }
297
- node.selected && (event.stopPropagation(), setNodes((nodes2) => nodes2.map((n) => n.id === node.id ? { ...n, selected: !1 } : n)));
297
+ node.selected && (event.stopPropagation(), setNodes((nodes2) => nodes2.map((n2) => n2.id === node.id ? { ...n2, selected: !1 } : n2)));
298
298
  },
299
299
  children: /* @__PURE__ */ jsx(Background, { variant: BackgroundVariant.Dots, size: 4, gap: 50 })
300
300
  }
@@ -2486,19 +2486,15 @@ function nodeHasDimensions(node) {
2486
2486
  return (node.measured?.width ?? node.width ?? node.initialWidth) !== void 0 && (node.measured?.height ?? node.height ?? node.initialHeight) !== void 0;
2487
2487
  }
2488
2488
  function evaluateAbsolutePosition(position, dimensions = { width: 0, height: 0 }, parentId, nodeLookup, nodeOrigin) {
2489
- let nextParentId = parentId;
2490
- const positionAbsolute = { ...position };
2491
- for (; nextParentId; ) {
2492
- const parent = nodeLookup.get(nextParentId);
2493
- if (nextParentId = parent?.parentId, parent) {
2494
- const origin = parent.origin || nodeOrigin;
2495
- positionAbsolute.x += parent.internals.positionAbsolute.x - (dimensions.width ?? 0) * origin[0], positionAbsolute.y += parent.internals.positionAbsolute.y - (dimensions.height ?? 0) * origin[1];
2496
- }
2489
+ const positionAbsolute = { ...position }, parent = nodeLookup.get(parentId);
2490
+ if (parent) {
2491
+ const origin = parent.origin || nodeOrigin;
2492
+ positionAbsolute.x += parent.internals.positionAbsolute.x - (dimensions.width ?? 0) * origin[0], positionAbsolute.y += parent.internals.positionAbsolute.y - (dimensions.height ?? 0) * origin[1];
2497
2493
  }
2498
2494
  return positionAbsolute;
2499
2495
  }
2500
- function getPointerPosition(event, { snapGrid = [0, 0], snapToGrid = !1, transform: transform2 }) {
2501
- const { x, y } = getEventPosition(event), pointerPos = pointToRendererPoint({ x, y }, transform2), { x: xSnapped, y: ySnapped } = snapToGrid ? snapPosition(pointerPos, snapGrid) : pointerPos;
2496
+ function getPointerPosition(event, { snapGrid = [0, 0], snapToGrid = !1, transform: transform2, containerBounds }) {
2497
+ const { x, y } = getEventPosition(event), pointerPos = pointToRendererPoint({ x: x - (containerBounds?.left ?? 0), y: y - (containerBounds?.top ?? 0) }, transform2), { x: xSnapped, y: ySnapped } = snapToGrid ? snapPosition(pointerPos, snapGrid) : pointerPos;
2502
2498
  return {
2503
2499
  xSnapped,
2504
2500
  ySnapped,
@@ -3120,7 +3116,7 @@ function XYDrag({ onNodeMouseDown, getStoreItems, onDragStart, onDrag, onDragSto
3120
3116
  function startDrag(event) {
3121
3117
  const { nodeLookup, multiSelectionActive, nodesDraggable, transform: transform2, snapGrid, snapToGrid, selectNodesOnDrag, onNodeDragStart, onSelectionDragStart, unselectNodesAndEdges } = getStoreItems();
3122
3118
  dragStarted = !0, (!selectNodesOnDrag || !isSelectable) && !multiSelectionActive && nodeId && (nodeLookup.get(nodeId)?.selected || unselectNodesAndEdges()), isSelectable && selectNodesOnDrag && nodeId && onNodeMouseDown?.(nodeId);
3123
- const pointerPos = getPointerPosition(event.sourceEvent, { transform: transform2, snapGrid, snapToGrid });
3119
+ const pointerPos = getPointerPosition(event.sourceEvent, { transform: transform2, snapGrid, snapToGrid, containerBounds });
3124
3120
  if (lastPos = pointerPos, dragItems = getDragItems(nodeLookup, nodesDraggable, pointerPos, nodeId), dragItems.size > 0 && (onDragStart || onNodeDragStart || !nodeId && onSelectionDragStart)) {
3125
3121
  const [currentNode, currentNodes] = getEventHandlerParams({
3126
3122
  nodeId,
@@ -3132,9 +3128,9 @@ function XYDrag({ onNodeMouseDown, getStoreItems, onDragStart, onDrag, onDragSto
3132
3128
  }
3133
3129
  const d3DragInstance = drag().clickDistance(nodeClickDistance).on("start", (event) => {
3134
3130
  const { domNode: domNode2, nodeDragThreshold, transform: transform2, snapGrid, snapToGrid } = getStoreItems();
3135
- abortDrag = !1, nodeDragThreshold === 0 && startDrag(event), lastPos = getPointerPosition(event.sourceEvent, { transform: transform2, snapGrid, snapToGrid }), containerBounds = domNode2?.getBoundingClientRect() || null, mousePosition = getEventPosition(event.sourceEvent, containerBounds);
3131
+ containerBounds = domNode2?.getBoundingClientRect() || null, abortDrag = !1, nodeDragThreshold === 0 && startDrag(event), lastPos = getPointerPosition(event.sourceEvent, { transform: transform2, snapGrid, snapToGrid, containerBounds }), mousePosition = getEventPosition(event.sourceEvent, containerBounds);
3136
3132
  }).on("drag", (event) => {
3137
- const { autoPanOnNodeDrag, transform: transform2, snapGrid, snapToGrid, nodeDragThreshold, nodeLookup } = getStoreItems(), pointerPos = getPointerPosition(event.sourceEvent, { transform: transform2, snapGrid, snapToGrid });
3133
+ const { autoPanOnNodeDrag, transform: transform2, snapGrid, snapToGrid, nodeDragThreshold, nodeLookup } = getStoreItems(), pointerPos = getPointerPosition(event.sourceEvent, { transform: transform2, snapGrid, snapToGrid, containerBounds });
3138
3134
  if ((event.sourceEvent.type === "touchmove" && event.sourceEvent.touches.length > 1 || // if user deletes a node while dragging, we need to abort the drag to prevent errors
3139
3135
  nodeId && !nodeLookup.has(nodeId)) && (abortDrag = !0), !abortDrag) {
3140
3136
  if (!autoPanStarted && autoPanOnNodeDrag && dragStarted && (autoPanStarted = !0, autoPan()), !dragStarted) {
@@ -3694,12 +3690,18 @@ function XYResizer({ domNode, nodeId, getStoreItems, onChange, onEnd }) {
3694
3690
  function update({ controlPosition, boundaries, keepAspectRatio, onResizeStart, onResize, onResizeEnd, shouldResize }) {
3695
3691
  let prevValues = { ...initPrevValues$1 }, startValues = { ...initStartValues };
3696
3692
  const controlDirection = getControlDirection(controlPosition);
3697
- let node, childNodes = [], parentNode, parentExtent, childExtent;
3693
+ let node, containerBounds = null, childNodes = [], parentNode, parentExtent, childExtent;
3698
3694
  const dragHandler = drag().on("start", (event) => {
3699
- const { nodeLookup, transform: transform2, snapGrid, snapToGrid, nodeOrigin } = getStoreItems();
3695
+ const { nodeLookup, transform: transform2, snapGrid, snapToGrid, nodeOrigin, paneDomNode } = getStoreItems();
3700
3696
  if (node = nodeLookup.get(nodeId), !node)
3701
3697
  return;
3702
- const { xSnapped, ySnapped } = getPointerPosition(event.sourceEvent, { transform: transform2, snapGrid, snapToGrid });
3698
+ containerBounds = paneDomNode?.getBoundingClientRect() ?? null;
3699
+ const { xSnapped, ySnapped } = getPointerPosition(event.sourceEvent, {
3700
+ transform: transform2,
3701
+ snapGrid,
3702
+ snapToGrid,
3703
+ containerBounds
3704
+ });
3703
3705
  prevValues = {
3704
3706
  width: node.measured.width ?? 0,
3705
3707
  height: node.measured.height ?? 0,
@@ -3725,7 +3727,12 @@ function XYResizer({ domNode, nodeId, getStoreItems, onChange, onEnd }) {
3725
3727
  }
3726
3728
  onResizeStart?.(event, { ...prevValues });
3727
3729
  }).on("drag", (event) => {
3728
- const { transform: transform2, snapGrid, snapToGrid, nodeOrigin: storeNodeOrigin } = getStoreItems(), pointerPosition = getPointerPosition(event.sourceEvent, { transform: transform2, snapGrid, snapToGrid }), childChanges = [];
3730
+ const { transform: transform2, snapGrid, snapToGrid, nodeOrigin: storeNodeOrigin } = getStoreItems(), pointerPosition = getPointerPosition(event.sourceEvent, {
3731
+ transform: transform2,
3732
+ snapGrid,
3733
+ snapToGrid,
3734
+ containerBounds
3735
+ }), childChanges = [];
3729
3736
  if (!node)
3730
3737
  return;
3731
3738
  const { x: prevX, y: prevY, width: prevWidth, height: prevHeight } = prevValues, change = {}, nodeOrigin = node.origin ?? storeNodeOrigin, { width, height, x, y } = getDimensionsAfterResize(startValues, controlDirection, pointerPosition, boundaries, keepAspectRatio, nodeOrigin, parentExtent, childExtent), isWidthChange = width !== prevWidth, isHeightChange = height !== prevHeight, isXPosChange = x !== prevX && isWidthChange, isYPosChange = y !== prevY && isHeightChange;
@@ -4006,7 +4013,12 @@ const defaultDoc = typeof document < "u" ? document : null;
4006
4013
  function useKeyPress(keyCode = null, options = { target: defaultDoc, actInsideInputWithModifier: !0 }) {
4007
4014
  const [keyPressed, setKeyPressed] = useState(!1), modifierPressed = useRef(!1), pressedKeys = useRef(/* @__PURE__ */ new Set([])), [keyCodes, keysToWatch] = useMemo(() => {
4008
4015
  if (keyCode !== null) {
4009
- const keys = (Array.isArray(keyCode) ? keyCode : [keyCode]).filter((kc) => typeof kc == "string").map((kc) => kc.split("+")), keysFlat = keys.reduce((res, item) => res.concat(...item), []);
4016
+ const keys = (Array.isArray(keyCode) ? keyCode : [keyCode]).filter((kc) => typeof kc == "string").map((kc) => kc.replace("+", `
4017
+ `).replace(`
4018
+
4019
+ `, `
4020
+ +`).split(`
4021
+ `)), keysFlat = keys.reduce((res, item) => res.concat(...item), []);
4010
4022
  return [keys, keysFlat];
4011
4023
  }
4012
4024
  return [[], []];
@@ -4207,15 +4219,11 @@ function fixedForwardRef(render) {
4207
4219
  }
4208
4220
  const useIsomorphicLayoutEffect = typeof window < "u" ? useLayoutEffect : useEffect;
4209
4221
  function useQueue(runQueue) {
4210
- const [shouldFlush, setShouldFlush] = useState(!1), [queue] = useState(() => createQueue(() => setShouldFlush(!0)));
4222
+ const [serial, setSerial] = useState(BigInt(0)), [queue] = useState(() => createQueue(() => setSerial((n2) => n2 + BigInt(1))));
4211
4223
  return useIsomorphicLayoutEffect(() => {
4212
- if (!shouldFlush) {
4213
- queue.reset();
4214
- return;
4215
- }
4216
4224
  const queueItems = queue.get();
4217
- queueItems.length && (runQueue(queueItems), queue.reset()), setShouldFlush(!1);
4218
- }, [shouldFlush]), queue;
4225
+ queueItems.length && (runQueue(queueItems), queue.reset());
4226
+ }, [serial]), queue;
4219
4227
  }
4220
4228
  function createQueue(cb) {
4221
4229
  let queue = [];
@@ -5935,13 +5943,14 @@ function ResizeControl({ nodeId, position, variant = ResizeControlVariant.Handle
5935
5943
  domNode: resizeControlRef.current,
5936
5944
  nodeId: id2,
5937
5945
  getStoreItems: () => {
5938
- const { nodeLookup, transform: transform2, snapGrid, snapToGrid, nodeOrigin } = store.getState();
5946
+ const { nodeLookup, transform: transform2, snapGrid, snapToGrid, nodeOrigin, domNode } = store.getState();
5939
5947
  return {
5940
5948
  nodeLookup,
5941
5949
  transform: transform2,
5942
5950
  snapGrid,
5943
5951
  snapToGrid,
5944
- nodeOrigin
5952
+ nodeOrigin,
5953
+ paneDomNode: domNode
5945
5954
  };
5946
5955
  },
5947
5956
  onChange: (change, childChanges) => {