system-canvas-standalone 0.2.1 → 0.2.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.
@@ -12759,7 +12759,7 @@ var SystemCanvas = (() => {
12759
12759
  render: () => render,
12760
12760
  themes: () => themes
12761
12761
  });
12762
- var import_react22 = __toESM(require_react(), 1);
12762
+ var import_react24 = __toESM(require_react(), 1);
12763
12763
  var import_client = __toESM(require_client(), 1);
12764
12764
 
12765
12765
  // ../react/dist/components/SystemCanvas.js
@@ -14649,15 +14649,19 @@ var SystemCanvas = (() => {
14649
14649
  // ../react/dist/hooks/useCanvasInteraction.js
14650
14650
  var import_react2 = __toESM(require_react(), 1);
14651
14651
  function useCanvasInteraction(options) {
14652
- const { onNodeClick, onNodeDoubleClick, onEdgeClick, onEdgeDoubleClick, onContextMenu, onNavigableNodeClick, viewport, editable, onSelect, onBeginEdit, onSelectEdge, onBeginEditEdge } = options;
14652
+ const { onNodeClick, onNodeDoubleClick, onEdgeClick, onEdgeDoubleClick, onContextMenu, onNavigableNodeClick, viewport, editable, onSelect, onToggleSelect, onBeginEdit, onSelectEdge, onBeginEditEdge } = options;
14653
14653
  const handleNodeClick = (0, import_react2.useCallback)((node, event) => {
14654
14654
  event.stopPropagation();
14655
14655
  if (editable) {
14656
- onSelect?.(node.id);
14657
- onSelectEdge?.(null);
14656
+ if (event.shiftKey && onToggleSelect) {
14657
+ onToggleSelect(node.id);
14658
+ } else {
14659
+ onSelect?.(node.id);
14660
+ onSelectEdge?.(null);
14661
+ }
14658
14662
  }
14659
14663
  onNodeClick?.(node);
14660
- }, [editable, onNodeClick, onSelect, onSelectEdge]);
14664
+ }, [editable, onNodeClick, onSelect, onToggleSelect, onSelectEdge]);
14661
14665
  const handleNodeDoubleClick = (0, import_react2.useCallback)((node, event) => {
14662
14666
  event.stopPropagation();
14663
14667
  onNodeDoubleClick?.(node);
@@ -14736,7 +14740,7 @@ var SystemCanvas = (() => {
14736
14740
  var import_react3 = __toESM(require_react(), 1);
14737
14741
  var DRAG_THRESHOLD = 3;
14738
14742
  function useNodeDrag(options) {
14739
- const { viewport, nodesRef, onCommit, svgRef, canDropNodeOn, onNodeDrop } = options;
14743
+ const { viewport, nodesRef, onCommit, svgRef, canDropNodeOn, onNodeDrop, selectedIdsRef } = options;
14740
14744
  const [dragOverrides, setDragOverrides] = (0, import_react3.useState)(() => /* @__PURE__ */ new Map());
14741
14745
  const [isDragging, setIsDragging] = (0, import_react3.useState)(false);
14742
14746
  const [dropTargetId, setDropTargetId] = (0, import_react3.useState)(null);
@@ -14748,6 +14752,8 @@ var SystemCanvas = (() => {
14748
14752
  onNodeDropRef.current = onNodeDrop;
14749
14753
  const svgRefRef = (0, import_react3.useRef)(svgRef);
14750
14754
  svgRefRef.current = svgRef;
14755
+ const emptySetRef = (0, import_react3.useRef)(/* @__PURE__ */ new Set());
14756
+ const effectiveSelectedIdsRef = selectedIdsRef ?? emptySetRef;
14751
14757
  const dropTargetIdRef = (0, import_react3.useRef)(null);
14752
14758
  const computeDropTarget = (0, import_react3.useCallback)((clientX, clientY) => {
14753
14759
  const cb = canDropNodeOnRef.current;
@@ -14869,12 +14875,22 @@ var SystemCanvas = (() => {
14869
14875
  return;
14870
14876
  event.stopPropagation();
14871
14877
  const moving = /* @__PURE__ */ new Map();
14872
- moving.set(node.id, { startX: node.x, startY: node.y });
14873
- if (node.type === "group" && nodesRef.current) {
14874
- const children2 = getGroupChildren(node, nodesRef.current);
14875
- for (const c of children2) {
14876
- if (!moving.has(c.id)) {
14877
- moving.set(c.id, { startX: c.x, startY: c.y });
14878
+ const sel = effectiveSelectedIdsRef.current;
14879
+ if (sel && sel.size > 1 && sel.has(node.id) && nodesRef.current) {
14880
+ for (const id2 of sel) {
14881
+ const n = nodesRef.current.find((r) => r.id === id2);
14882
+ if (n) {
14883
+ moving.set(id2, { startX: n.x, startY: n.y });
14884
+ }
14885
+ }
14886
+ } else {
14887
+ moving.set(node.id, { startX: node.x, startY: node.y });
14888
+ if (node.type === "group" && nodesRef.current) {
14889
+ const children2 = getGroupChildren(node, nodesRef.current);
14890
+ for (const c of children2) {
14891
+ if (!moving.has(c.id)) {
14892
+ moving.set(c.id, { startX: c.x, startY: c.y });
14893
+ }
14878
14894
  }
14879
14895
  }
14880
14896
  }
@@ -18092,7 +18108,7 @@ var SystemCanvas = (() => {
18092
18108
 
18093
18109
  // ../react/dist/hooks/useViewport.js
18094
18110
  function useViewport(options) {
18095
- const { minZoom, maxZoom, defaultViewport, onViewportChange } = options;
18111
+ const { minZoom, maxZoom, defaultViewport, onViewportChange, marqueeActiveRef } = options;
18096
18112
  const svgRef = (0, import_react7.useRef)(null);
18097
18113
  const groupRef = (0, import_react7.useRef)(null);
18098
18114
  const viewport = (0, import_react7.useRef)(defaultViewport ?? { x: 0, y: 0, zoom: 1 });
@@ -18105,6 +18121,8 @@ var SystemCanvas = (() => {
18105
18121
  if (!svg || !group)
18106
18122
  return;
18107
18123
  const zoomBehavior = zoom_default2().scaleExtent([minZoom, maxZoom]).filter((event) => {
18124
+ if (marqueeActiveRef?.current && event.type !== "wheel")
18125
+ return false;
18108
18126
  if (event.button)
18109
18127
  return false;
18110
18128
  if (event.type === "wheel")
@@ -20760,6 +20778,12 @@ var SystemCanvas = (() => {
20760
20778
  }, getViewport: getViewportState, containerWidth: containerSize.width, containerHeight: containerSize.height, render: renderNodeToolbar }), editable && (renderAddNodeButton ? renderAddNodeButton(renderProps) : (0, import_jsx_runtime28.jsx)(AddNodeButton, { ...renderProps })), nodeContextMenu && (0, import_jsx_runtime28.jsx)(NodeContextMenuOverlay, { state: contextMenuState, config: nodeContextMenu, theme, onClose: () => setContextMenuState(null) })] });
20761
20779
  });
20762
20780
 
20781
+ // ../react/dist/hooks/useMultiSelect.js
20782
+ var import_react22 = __toESM(require_react(), 1);
20783
+
20784
+ // ../react/dist/hooks/useMultiSelectClipboard.js
20785
+ var import_react23 = __toESM(require_react(), 1);
20786
+
20763
20787
  // src/index.tsx
20764
20788
  function resolveThemeOption(theme) {
20765
20789
  if (typeof theme === "string") {
@@ -20868,7 +20892,7 @@ var SystemCanvas = (() => {
20868
20892
  onEdgeUpdate: handleEdgeUpdate,
20869
20893
  onEdgeDelete: handleEdgeDelete
20870
20894
  };
20871
- root2.render(import_react22.default.createElement(SystemCanvas, props));
20895
+ root2.render(import_react24.default.createElement(SystemCanvas, props));
20872
20896
  };
20873
20897
  doRender();
20874
20898
  return {