@pixldocs/canvas-renderer 0.5.343 → 0.5.345

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.
@@ -14462,7 +14462,7 @@ const PageCanvas = forwardRef(
14462
14462
  });
14463
14463
  let cropGroupSaveTimer = null;
14464
14464
  fabricCanvas.on("object:modified", (e) => {
14465
- var _a2, _b2, _c, _d, _e, _f, _g, _h, _i, _j;
14465
+ var _a2, _b2, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
14466
14466
  try {
14467
14467
  dragStarted = false;
14468
14468
  setGuides([]);
@@ -14924,13 +14924,15 @@ const PageCanvas = forwardRef(
14924
14924
  const hadScale = isActiveSelection && activeObj && (hadResizeHandle || Math.abs((activeObj.scaleX ?? 1) - 1) > 0.01 || Math.abs((activeObj.scaleY ?? 1) - 1) > 0.01);
14925
14925
  const startSelAngle = normalizeAngle((transformStart == null ? void 0 : transformStart.selectionAngle) ?? 0);
14926
14926
  const currentSelAngle = isActiveSelection && activeObj ? normalizeAngle(activeObj.angle ?? 0) : 0;
14927
- const angleDelta = shortestAngleDelta(currentSelAngle, startSelAngle);
14927
+ const storedGroupAngle = normalizeAngle(Number(groupToMove.angle ?? 0));
14928
+ const effectiveStartAngle = transformStart ? startSelAngle : storedGroupAngle;
14929
+ const angleDelta = shortestAngleDelta(currentSelAngle, effectiveStartAngle);
14928
14930
  const hadRotation = isActiveSelection && activeObj && angleDelta > 0.01;
14929
14931
  if (activeGroupSelectionId === groupToMove.id && hadRotation && !hadScale && !activeSelectionResizeHandle && activeObj instanceof fabric.ActiveSelection) {
14930
14932
  const { updateNode: updateNodeStore, commitHistory: commitHistoryStore, getCurrentElements } = useEditorStore.getState();
14931
14933
  const center = activeObj.getCenterPoint();
14932
- const baseCenterX = (transformStart == null ? void 0 : transformStart.selectionCenterX) ?? center.x;
14933
- const baseCenterY = (transformStart == null ? void 0 : transformStart.selectionCenterY) ?? center.y;
14934
+ const baseCenterX = (transformStart == null ? void 0 : transformStart.selectionCenterX) ?? groupAbs.left + groupAbs.width / 2;
14935
+ const baseCenterY = (transformStart == null ? void 0 : transformStart.selectionCenterY) ?? groupAbs.top + groupAbs.height / 2;
14934
14936
  const nextAbsLeft = groupAbs.left + (center.x - baseCenterX);
14935
14937
  const nextAbsTop = groupAbs.top + (center.y - baseCenterY);
14936
14938
  const storePos = absoluteToStorePosition(nextAbsLeft, nextAbsTop, groupToMove.id, pageChildren2);
@@ -15010,6 +15012,9 @@ const PageCanvas = forwardRef(
15010
15012
  }
15011
15013
  }
15012
15014
  const pendingCropGroupFrameBakes = [];
15015
+ const logicalGroupSelectionId = activeObj instanceof fabric.ActiveSelection ? activeObj.__pixldocsGroupSelection : void 0;
15016
+ const isLogicalGroupAS = !!logicalGroupSelectionId && !(activeObj == null ? void 0 : activeObj.__cropGroup) && !(activeObj == null ? void 0 : activeObj.__docuforgeSectionGroup);
15017
+ const asAngleForBake = isLogicalGroupAS && activeObj ? normalizeAngle(activeObj.angle ?? 0) : 0;
15013
15018
  for (const obj of activeObjects) {
15014
15019
  const objId = getObjectId(obj);
15015
15020
  if (!objId || objId === "__background__") continue;
@@ -15100,6 +15105,7 @@ const PageCanvas = forwardRef(
15100
15105
  let finalAngle = decomposed.angle;
15101
15106
  let finalSkewX = decomposed.skewX;
15102
15107
  let finalSkewY = decomposed.skewY;
15108
+ let finalAngleFromDecomposed = true;
15103
15109
  if (obj instanceof fabric.Group && obj.__cropGroup) {
15104
15110
  const ct = obj.__cropData;
15105
15111
  if (ct) {
@@ -15162,6 +15168,7 @@ const PageCanvas = forwardRef(
15162
15168
  finalAngle = (sourceElement == null ? void 0 : sourceElement.angle) ?? obj.angle ?? decomposed.angle;
15163
15169
  finalSkewX = (sourceElement == null ? void 0 : sourceElement.skewX) ?? obj.skewX ?? 0;
15164
15170
  finalSkewY = (sourceElement == null ? void 0 : sourceElement.skewY) ?? obj.skewY ?? 0;
15171
+ if ((sourceElement == null ? void 0 : sourceElement.angle) !== void 0 || obj.angle !== void 0) finalAngleFromDecomposed = false;
15165
15172
  }
15166
15173
  obj.set({ scaleX: 1, scaleY: 1 });
15167
15174
  const newSrc = renderSmartElementToDataUri(sourceElement.smartElementType, sourceElement.smartProps, bakedW, bakedH);
@@ -15229,6 +15236,7 @@ const PageCanvas = forwardRef(
15229
15236
  finalAngle = (sourceElement == null ? void 0 : sourceElement.angle) ?? obj.angle ?? decomposed.angle;
15230
15237
  finalSkewX = (sourceElement == null ? void 0 : sourceElement.skewX) ?? obj.skewX ?? 0;
15231
15238
  finalSkewY = (sourceElement == null ? void 0 : sourceElement.skewY) ?? obj.skewY ?? 0;
15239
+ if ((sourceElement == null ? void 0 : sourceElement.angle) !== void 0 || obj.angle !== void 0) finalAngleFromDecomposed = false;
15232
15240
  }
15233
15241
  try {
15234
15242
  const angleRad = (finalAngle ?? 0) * Math.PI / 180;
@@ -15294,6 +15302,7 @@ const PageCanvas = forwardRef(
15294
15302
  finalAngle = (sourceElement == null ? void 0 : sourceElement.angle) ?? obj.angle ?? decomposed.angle;
15295
15303
  finalSkewX = (sourceElement == null ? void 0 : sourceElement.skewX) ?? obj.skewX ?? 0;
15296
15304
  finalSkewY = (sourceElement == null ? void 0 : sourceElement.skewY) ?? obj.skewY ?? 0;
15305
+ if ((sourceElement == null ? void 0 : sourceElement.angle) !== void 0 || obj.angle !== void 0) finalAngleFromDecomposed = false;
15297
15306
  }
15298
15307
  } else if (obj instanceof fabric.Textbox && isActiveSelection && (Math.abs((decomposed.scaleX ?? 1) - 1) > 1e-3 || Math.abs((decomposed.scaleY ?? 1) - 1) > 1e-3)) {
15299
15308
  const sx = Math.abs(decomposed.scaleX || 1);
@@ -15450,6 +15459,9 @@ const PageCanvas = forwardRef(
15450
15459
  const page = state.canvas.pages.find((p) => p.id === pageId);
15451
15460
  const pageChildrenForSave = (page == null ? void 0 : page.children) ?? [];
15452
15461
  const storePos = absoluteToStorePosition(absoluteLeft, absoluteTop, objId, pageChildrenForSave);
15462
+ if (isLogicalGroupAS && finalAngleFromDecomposed && typeof finalAngle === "number") {
15463
+ finalAngle = ((finalAngle - asAngleForBake) % 360 + 540) % 360 - 180;
15464
+ }
15453
15465
  const isLineObj = obj instanceof fabric.Line;
15454
15466
  const isAutoShrinkText = (sourceElement == null ? void 0 : sourceElement.type) === "text" && sourceElement.overflowPolicy === "auto-shrink";
15455
15467
  const autoShrinkStoredHeight = isAutoShrinkText ? sourceElement.height : void 0;
@@ -15511,7 +15523,32 @@ const PageCanvas = forwardRef(
15511
15523
  updateElement(objId, elementUpdate, { recordHistory: false, skipLayoutRecalc: true });
15512
15524
  obj.setCoords();
15513
15525
  }
15514
- const pageChildrenForReflow = ((_j = useEditorStore.getState().canvas.pages.find((p) => p.id === pageId)) == null ? void 0 : _j.children) ?? [];
15526
+ if (isLogicalGroupAS && logicalGroupSelectionId && activeObj instanceof fabric.ActiveSelection) {
15527
+ try {
15528
+ const pageChildrenForGroup = ((_j = useEditorStore.getState().canvas.pages.find((p) => p.id === pageId)) == null ? void 0 : _j.children) ?? [];
15529
+ const groupNode = findNodeById(pageChildrenForGroup, logicalGroupSelectionId);
15530
+ if (groupNode) {
15531
+ const baseline = ((_k = groupSelectionTransformStartRef.current) == null ? void 0 : _k.groupId) === logicalGroupSelectionId ? groupSelectionTransformStartRef.current : null;
15532
+ const center = activeObj.getCenterPoint();
15533
+ const prevAbs = getAbsoluteBounds(groupNode, pageChildrenForGroup, pageBoundsOptions);
15534
+ const baseCenterX = (baseline == null ? void 0 : baseline.selectionCenterX) ?? prevAbs.left + prevAbs.width / 2;
15535
+ const baseCenterY = (baseline == null ? void 0 : baseline.selectionCenterY) ?? prevAbs.top + prevAbs.height / 2;
15536
+ const baseLeft = (baseline == null ? void 0 : baseline.groupLeft) ?? prevAbs.left;
15537
+ const baseTop = (baseline == null ? void 0 : baseline.groupTop) ?? prevAbs.top;
15538
+ const newAbsLeft = baseLeft + (center.x - baseCenterX);
15539
+ const newAbsTop = baseTop + (center.y - baseCenterY);
15540
+ const storePosGroup = absoluteToStorePosition(newAbsLeft, newAbsTop, logicalGroupSelectionId, pageChildrenForGroup);
15541
+ useEditorStore.getState().updateNode(logicalGroupSelectionId, {
15542
+ left: storePosGroup.left,
15543
+ top: storePosGroup.top,
15544
+ angle: asAngleForBake
15545
+ }, { recordHistory: false, skipLayoutRecalc: true });
15546
+ }
15547
+ } catch (err) {
15548
+ console.warn("[Pixldocs] logical-group envelope persist failed", err);
15549
+ }
15550
+ }
15551
+ const pageChildrenForReflow = ((_l = useEditorStore.getState().canvas.pages.find((p) => p.id === pageId)) == null ? void 0 : _l.children) ?? [];
15515
15552
  const stackGroupsToReflow = /* @__PURE__ */ new Set();
15516
15553
  for (const id of modifiedIdsThisRound) {
15517
15554
  const parent = findParentGroup(pageChildrenForReflow, id);
@@ -24652,9 +24689,9 @@ function captureFabricCanvasSvgForPdf(fabricInstance, canvasWidth, canvasHeight)
24652
24689
  }
24653
24690
  return svgString;
24654
24691
  }
24655
- const resolvedPackageVersion = "0.5.343";
24692
+ const resolvedPackageVersion = "0.5.345";
24656
24693
  const PACKAGE_VERSION = resolvedPackageVersion;
24657
- const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.343";
24694
+ const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.345";
24658
24695
  const roundParityValue = (value) => {
24659
24696
  if (typeof value !== "number") return value;
24660
24697
  return Number.isFinite(value) ? Number(value.toFixed(3)) : value;
@@ -25468,7 +25505,7 @@ class PixldocsRenderer {
25468
25505
  await this.waitForCanvasScene(container, cloned, i);
25469
25506
  }
25470
25507
  console.log(`[canvas-renderer][pdf-unified] mounted ${cloned.pages.length} page(s), handing off to client exportMultiPagePdf`);
25471
- const { exportMultiPagePdf, preparePagesForExport } = await import("./vectorPdfExport-DWz1fLQ7.js");
25508
+ const { exportMultiPagePdf, preparePagesForExport } = await import("./vectorPdfExport-rFbeCudV.js");
25472
25509
  const prepared = preparePagesForExport(
25473
25510
  cloned.pages,
25474
25511
  canvasWidth,
@@ -27788,7 +27825,7 @@ async function prepareLiveCanvasSvgForPdf(rawSvg, pageWidth, pageHeight, pageKey
27788
27825
  if (options == null ? void 0 : options.stripPageBackground) stripRootPageBackgroundFromSvg(svgToDraw);
27789
27826
  sanitizeSvgTreeForPdf(svgToDraw);
27790
27827
  try {
27791
- const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await import("./vectorPdfExport-DWz1fLQ7.js");
27828
+ const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await import("./vectorPdfExport-rFbeCudV.js");
27792
27829
  try {
27793
27830
  await logTextMeasurementDiagnostic(svgToDraw);
27794
27831
  } catch {
@@ -28188,4 +28225,4 @@ export {
28188
28225
  buildTeaserBlurFlatKeys as y,
28189
28226
  collectFontDescriptorsFromConfig as z
28190
28227
  };
28191
- //# sourceMappingURL=index-JXiTI3jA.js.map
28228
+ //# sourceMappingURL=index-wiw1EUl-.js.map