@pixldocs/canvas-renderer 0.5.256 → 0.5.257

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.
@@ -11180,6 +11180,50 @@ const PageCanvas = forwardRef(
11180
11180
  }
11181
11181
  }
11182
11182
  applyWarpAwareSelectionBorders(selection);
11183
+ try {
11184
+ if (members.length >= 2 && Math.abs((selection.angle ?? 0) % 360) < 0.01 && !selection.__pixldocsGroupAngleApplied) {
11185
+ const someBusy = members.some((m) => m.__pdCircleRadiusDrag || m.__pixldocsSectionGroup);
11186
+ if (!someBusy) {
11187
+ const first = ((members[0].angle ?? 0) % 360 + 360) % 360;
11188
+ const EPS = 0.5;
11189
+ const allSame = members.every((m) => {
11190
+ const a = ((m.angle ?? 0) % 360 + 360) % 360;
11191
+ const d = Math.min(Math.abs(a - first), 360 - Math.abs(a - first));
11192
+ return d <= EPS;
11193
+ });
11194
+ if (allSame && first > EPS && first < 360 - EPS) {
11195
+ const worldMatrices = members.map((c) => c.calcTransformMatrix());
11196
+ selection.set({ angle: first });
11197
+ selection.setCoords();
11198
+ const selMatrix = selection.calcTransformMatrix();
11199
+ const invSel = fabric.util.invertTransform(selMatrix);
11200
+ for (let i = 0; i < members.length; i++) {
11201
+ const child = members[i];
11202
+ const rel = fabric.util.multiplyTransformMatrices(invSel, worldMatrices[i]);
11203
+ const d = fabric.util.qrDecompose(rel);
11204
+ child.flipX = false;
11205
+ child.flipY = false;
11206
+ child.set({
11207
+ scaleX: d.scaleX,
11208
+ scaleY: d.scaleY,
11209
+ skewX: d.skewX,
11210
+ skewY: d.skewY,
11211
+ angle: d.angle
11212
+ });
11213
+ child.setPositionByOrigin(
11214
+ new fabric.Point(d.translateX, d.translateY),
11215
+ "center",
11216
+ "center"
11217
+ );
11218
+ child.setCoords();
11219
+ }
11220
+ selection.__pixldocsGroupAngleApplied = first;
11221
+ }
11222
+ }
11223
+ }
11224
+ } catch (err) {
11225
+ console.warn("[group-rotation-align] skipped", err);
11226
+ }
11183
11227
  }, []);
11184
11228
  const pageBoundsOptions = useMemo(
11185
11229
  () => ({ pageContentWidth: canvasWidth, pageContentHeight: canvasHeight }),
@@ -12529,7 +12573,8 @@ const PageCanvas = forwardRef(
12529
12573
  selectionLeft: rect.left,
12530
12574
  selectionTop: rect.top,
12531
12575
  groupLeft: groupAbs.left,
12532
- groupTop: groupAbs.top
12576
+ groupTop: groupAbs.top,
12577
+ selectionAngle: ((active.angle ?? 0) % 360 + 360) % 360
12533
12578
  };
12534
12579
  };
12535
12580
  const restoreGroupSelectionVisualState = (selection, groupId) => {
@@ -14170,7 +14215,13 @@ const PageCanvas = forwardRef(
14170
14215
  const deltaX = movedGroupLeft - groupAbs.left;
14171
14216
  const deltaY = movedGroupTop - groupAbs.top;
14172
14217
  const hadScale = isActiveSelection && activeObj && (Math.abs((activeObj.scaleX ?? 1) - 1) > 0.01 || Math.abs((activeObj.scaleY ?? 1) - 1) > 0.01);
14173
- const hadRotation = isActiveSelection && activeObj && Math.abs((activeObj.angle ?? 0) % 360) > 0.01;
14218
+ const startSelAngle = (((transformStart == null ? void 0 : transformStart.selectionAngle) ?? 0) % 360 + 360) % 360;
14219
+ const currentSelAngle = isActiveSelection && activeObj ? ((activeObj.angle ?? 0) % 360 + 360) % 360 : 0;
14220
+ const angleDelta = Math.min(
14221
+ Math.abs(currentSelAngle - startSelAngle),
14222
+ 360 - Math.abs(currentSelAngle - startSelAngle)
14223
+ );
14224
+ const hadRotation = isActiveSelection && activeObj && angleDelta > 0.01;
14174
14225
  if (!hadScale && !hadRotation && (Math.abs(deltaX) > 0.1 || Math.abs(deltaY) > 0.1)) {
14175
14226
  const { updateNode: updateNodeStore, commitHistory: commitHistoryStore, getCurrentElements } = useEditorStore.getState();
14176
14227
  const newLeft = (groupToMove.left ?? 0) + deltaX;
@@ -23521,9 +23572,9 @@ function captureFabricCanvasSvgForPdf(fabricInstance, canvasWidth, canvasHeight)
23521
23572
  }
23522
23573
  return svgString;
23523
23574
  }
23524
- const resolvedPackageVersion = "0.5.256";
23575
+ const resolvedPackageVersion = "0.5.257";
23525
23576
  const PACKAGE_VERSION = resolvedPackageVersion;
23526
- const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.256";
23577
+ const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.257";
23527
23578
  const roundParityValue = (value) => {
23528
23579
  if (typeof value !== "number") return value;
23529
23580
  return Number.isFinite(value) ? Number(value.toFixed(3)) : value;
@@ -24337,7 +24388,7 @@ class PixldocsRenderer {
24337
24388
  await this.waitForCanvasScene(container, cloned, i);
24338
24389
  }
24339
24390
  console.log(`[canvas-renderer][pdf-unified] mounted ${cloned.pages.length} page(s), handing off to client exportMultiPagePdf`);
24340
- const { exportMultiPagePdf, preparePagesForExport } = await import("./vectorPdfExport-CZHhQLm0.js");
24391
+ const { exportMultiPagePdf, preparePagesForExport } = await import("./vectorPdfExport-tca2qSZa.js");
24341
24392
  const prepared = preparePagesForExport(
24342
24393
  cloned.pages,
24343
24394
  canvasWidth,
@@ -26657,7 +26708,7 @@ async function prepareLiveCanvasSvgForPdf(rawSvg, pageWidth, pageHeight, pageKey
26657
26708
  if (options == null ? void 0 : options.stripPageBackground) stripRootPageBackgroundFromSvg(svgToDraw);
26658
26709
  sanitizeSvgTreeForPdf(svgToDraw);
26659
26710
  try {
26660
- const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await import("./vectorPdfExport-CZHhQLm0.js");
26711
+ const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await import("./vectorPdfExport-tca2qSZa.js");
26661
26712
  try {
26662
26713
  await logTextMeasurementDiagnostic(svgToDraw);
26663
26714
  } catch {
@@ -27057,4 +27108,4 @@ export {
27057
27108
  buildTeaserBlurFlatKeys as y,
27058
27109
  collectFontDescriptorsFromConfig as z
27059
27110
  };
27060
- //# sourceMappingURL=index-DdXbqycP.js.map
27111
+ //# sourceMappingURL=index-bZ7LCfUb.js.map