@pixldocs/canvas-renderer 0.5.432 → 0.5.433

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.
@@ -11958,6 +11958,7 @@ const PageCanvas = forwardRef(
11958
11958
  const preserveEditingScopeOnSelectionClearRef = useRef(false);
11959
11959
  const preserveActiveSelectionAfterTransformRef = useRef(null);
11960
11960
  const recentGroupSelectionRestoreRef = useRef(null);
11961
+ const intentionalGroupDeselectRef = useRef(null);
11961
11962
  const pendingGroupPromotionRef = useRef(null);
11962
11963
  const pendingGroupDrillInRef = useRef(null);
11963
11964
  const imageReloadRequestSeqRef = useRef(/* @__PURE__ */ new Map());
@@ -13489,6 +13490,14 @@ const PageCanvas = forwardRef(
13489
13490
  setDrilledGroupBounds(null);
13490
13491
  drilledGroupIdRef.current = null;
13491
13492
  }
13493
+ const explicitGroupDeselect = intentionalGroupDeselectRef.current;
13494
+ if (explicitGroupDeselect) {
13495
+ preserveActiveSelectionAfterTransformRef.current = null;
13496
+ recentGroupSelectionRestoreRef.current = null;
13497
+ preserveSelectionAfterTransformIdRef.current = null;
13498
+ editLockRef.current = false;
13499
+ syncLockedRef.current = false;
13500
+ }
13492
13501
  const preservedGroupSelection = preserveActiveSelectionAfterTransformRef.current;
13493
13502
  const shouldRestoreGroupSelection = !!((preservedGroupSelection == null ? void 0 : preservedGroupSelection.groupSelectionId) && (!preservedGroupSelection.expiresAt || preservedGroupSelection.expiresAt > Date.now()));
13494
13503
  if (skipSelectionClearOnDiscardRef.current) {
@@ -13497,11 +13506,12 @@ const PageCanvas = forwardRef(
13497
13506
  }
13498
13507
  const recentGroupSelectionRestore = recentGroupSelectionRestoreRef.current;
13499
13508
  const shouldReassertRecentGroupSelection = !!((recentGroupSelectionRestore == null ? void 0 : recentGroupSelectionRestore.groupSelectionId) && recentGroupSelectionRestore.expiresAt > Date.now());
13500
- if (editLockRef.current || syncLockedRef.current || didTransformRef.current || preserveSelectionAfterTransformIdRef.current || shouldRestoreGroupSelection || shouldReassertRecentGroupSelection) {
13509
+ if (!explicitGroupDeselect && (editLockRef.current || syncLockedRef.current || didTransformRef.current || preserveSelectionAfterTransformIdRef.current || shouldRestoreGroupSelection || shouldReassertRecentGroupSelection)) {
13501
13510
  if (shouldRestoreGroupSelection) restorePreservedGroupSelectionSoon(preservedGroupSelection);
13502
13511
  else if (shouldReassertRecentGroupSelection) restorePreservedGroupSelectionSoon(recentGroupSelectionRestore);
13503
13512
  return;
13504
13513
  }
13514
+ intentionalGroupDeselectRef.current = null;
13505
13515
  restoreSuppressedGroupBorders();
13506
13516
  editLockRef.current = false;
13507
13517
  syncLockedRef.current = false;
@@ -14148,7 +14158,7 @@ const PageCanvas = forwardRef(
14148
14158
  suppressTextEditForClick(effectiveTarget);
14149
14159
  }
14150
14160
  }
14151
- } else if (!target || targetId === "__background__") {
14161
+ } else if (!target || !targetId || targetId === "__background__") {
14152
14162
  const isMultiSelectKey = !!(((_j = opt.e) == null ? void 0 : _j.shiftKey) || ((_k = opt.e) == null ? void 0 : _k.metaKey) || ((_l = opt.e) == null ? void 0 : _l.ctrlKey));
14153
14163
  if (isMultiSelectKey) return;
14154
14164
  if ((_m = opt.e) == null ? void 0 : _m.altKey) return;
@@ -14157,6 +14167,26 @@ const PageCanvas = forwardRef(
14157
14167
  const px = pointer.x;
14158
14168
  const py = pointer.y;
14159
14169
  const pick = pickGroupAtPointer(px, py, childrenNow, activeEditingGroupId);
14170
+ if (!pick) {
14171
+ const activeNow = fabricCanvas.getActiveObject();
14172
+ const groupSelectionId = activeNow instanceof fabric.ActiveSelection ? activeNow.__pixldocsGroupSelection : activeNow == null ? void 0 : activeNow.__pixldocsGroupSelection;
14173
+ if (groupSelectionId) {
14174
+ intentionalGroupDeselectRef.current = groupSelectionId;
14175
+ preserveActiveSelectionAfterTransformRef.current = null;
14176
+ recentGroupSelectionRestoreRef.current = null;
14177
+ preserveSelectionAfterTransformIdRef.current = null;
14178
+ pendingGroupPromotionRef.current = null;
14179
+ pendingGroupDrillInRef.current = null;
14180
+ editLockRef.current = false;
14181
+ syncLockedRef.current = false;
14182
+ fabricCanvas._target = void 0;
14183
+ fabricCanvas._currentTransform = null;
14184
+ opt.target = void 0;
14185
+ fabricCanvas.discardActiveObject();
14186
+ fabricCanvas.requestRenderAll();
14187
+ }
14188
+ return;
14189
+ }
14160
14190
  if (pick) {
14161
14191
  const parent = pick.group;
14162
14192
  if (activeEditingGroupId !== parent.id) {
@@ -25762,9 +25792,9 @@ function captureFabricCanvasSvgForPdf(fabricInstance, canvasWidth, canvasHeight)
25762
25792
  }
25763
25793
  return svgString;
25764
25794
  }
25765
- const resolvedPackageVersion = "0.5.432";
25795
+ const resolvedPackageVersion = "0.5.433";
25766
25796
  const PACKAGE_VERSION = resolvedPackageVersion;
25767
- const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.432";
25797
+ const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.433";
25768
25798
  const roundParityValue = (value) => {
25769
25799
  if (typeof value !== "number") return value;
25770
25800
  return Number.isFinite(value) ? Number(value.toFixed(3)) : value;
@@ -26578,7 +26608,7 @@ class PixldocsRenderer {
26578
26608
  await this.waitForCanvasScene(container, cloned, i);
26579
26609
  }
26580
26610
  console.log(`[canvas-renderer][pdf-unified] mounted ${cloned.pages.length} page(s), handing off to client exportMultiPagePdf`);
26581
- const { exportMultiPagePdf, preparePagesForExport } = await import("./vectorPdfExport-Bkipkjlc.js");
26611
+ const { exportMultiPagePdf, preparePagesForExport } = await import("./vectorPdfExport-6d2YhE8F.js");
26582
26612
  const prepared = preparePagesForExport(
26583
26613
  cloned.pages,
26584
26614
  canvasWidth,
@@ -28898,7 +28928,7 @@ async function prepareLiveCanvasSvgForPdf(rawSvg, pageWidth, pageHeight, pageKey
28898
28928
  if (options == null ? void 0 : options.stripPageBackground) stripRootPageBackgroundFromSvg(svgToDraw);
28899
28929
  sanitizeSvgTreeForPdf(svgToDraw);
28900
28930
  try {
28901
- const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await import("./vectorPdfExport-Bkipkjlc.js");
28931
+ const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await import("./vectorPdfExport-6d2YhE8F.js");
28902
28932
  try {
28903
28933
  await logTextMeasurementDiagnostic(svgToDraw);
28904
28934
  } catch {
@@ -29298,4 +29328,4 @@ export {
29298
29328
  buildTeaserBlurFlatKeys as y,
29299
29329
  collectFontDescriptorsFromConfig as z
29300
29330
  };
29301
- //# sourceMappingURL=index-gL0A2DGr.js.map
29331
+ //# sourceMappingURL=index-XUxKXZ1L.js.map