@pixldocs/canvas-renderer 0.5.344 → 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.
@@ -14480,7 +14480,7 @@ const PageCanvas = react.forwardRef(
14480
14480
  });
14481
14481
  let cropGroupSaveTimer = null;
14482
14482
  fabricCanvas.on("object:modified", (e) => {
14483
- var _a2, _b2, _c, _d, _e, _f, _g, _h, _i, _j;
14483
+ var _a2, _b2, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
14484
14484
  try {
14485
14485
  dragStarted = false;
14486
14486
  setGuides([]);
@@ -15030,6 +15030,9 @@ const PageCanvas = react.forwardRef(
15030
15030
  }
15031
15031
  }
15032
15032
  const pendingCropGroupFrameBakes = [];
15033
+ const logicalGroupSelectionId = activeObj instanceof fabric__namespace.ActiveSelection ? activeObj.__pixldocsGroupSelection : void 0;
15034
+ const isLogicalGroupAS = !!logicalGroupSelectionId && !(activeObj == null ? void 0 : activeObj.__cropGroup) && !(activeObj == null ? void 0 : activeObj.__docuforgeSectionGroup);
15035
+ const asAngleForBake = isLogicalGroupAS && activeObj ? normalizeAngle(activeObj.angle ?? 0) : 0;
15033
15036
  for (const obj of activeObjects) {
15034
15037
  const objId = getObjectId(obj);
15035
15038
  if (!objId || objId === "__background__") continue;
@@ -15120,6 +15123,7 @@ const PageCanvas = react.forwardRef(
15120
15123
  let finalAngle = decomposed.angle;
15121
15124
  let finalSkewX = decomposed.skewX;
15122
15125
  let finalSkewY = decomposed.skewY;
15126
+ let finalAngleFromDecomposed = true;
15123
15127
  if (obj instanceof fabric__namespace.Group && obj.__cropGroup) {
15124
15128
  const ct = obj.__cropData;
15125
15129
  if (ct) {
@@ -15182,6 +15186,7 @@ const PageCanvas = react.forwardRef(
15182
15186
  finalAngle = (sourceElement == null ? void 0 : sourceElement.angle) ?? obj.angle ?? decomposed.angle;
15183
15187
  finalSkewX = (sourceElement == null ? void 0 : sourceElement.skewX) ?? obj.skewX ?? 0;
15184
15188
  finalSkewY = (sourceElement == null ? void 0 : sourceElement.skewY) ?? obj.skewY ?? 0;
15189
+ if ((sourceElement == null ? void 0 : sourceElement.angle) !== void 0 || obj.angle !== void 0) finalAngleFromDecomposed = false;
15185
15190
  }
15186
15191
  obj.set({ scaleX: 1, scaleY: 1 });
15187
15192
  const newSrc = renderSmartElementToDataUri(sourceElement.smartElementType, sourceElement.smartProps, bakedW, bakedH);
@@ -15249,6 +15254,7 @@ const PageCanvas = react.forwardRef(
15249
15254
  finalAngle = (sourceElement == null ? void 0 : sourceElement.angle) ?? obj.angle ?? decomposed.angle;
15250
15255
  finalSkewX = (sourceElement == null ? void 0 : sourceElement.skewX) ?? obj.skewX ?? 0;
15251
15256
  finalSkewY = (sourceElement == null ? void 0 : sourceElement.skewY) ?? obj.skewY ?? 0;
15257
+ if ((sourceElement == null ? void 0 : sourceElement.angle) !== void 0 || obj.angle !== void 0) finalAngleFromDecomposed = false;
15252
15258
  }
15253
15259
  try {
15254
15260
  const angleRad = (finalAngle ?? 0) * Math.PI / 180;
@@ -15314,6 +15320,7 @@ const PageCanvas = react.forwardRef(
15314
15320
  finalAngle = (sourceElement == null ? void 0 : sourceElement.angle) ?? obj.angle ?? decomposed.angle;
15315
15321
  finalSkewX = (sourceElement == null ? void 0 : sourceElement.skewX) ?? obj.skewX ?? 0;
15316
15322
  finalSkewY = (sourceElement == null ? void 0 : sourceElement.skewY) ?? obj.skewY ?? 0;
15323
+ if ((sourceElement == null ? void 0 : sourceElement.angle) !== void 0 || obj.angle !== void 0) finalAngleFromDecomposed = false;
15317
15324
  }
15318
15325
  } else if (obj instanceof fabric__namespace.Textbox && isActiveSelection && (Math.abs((decomposed.scaleX ?? 1) - 1) > 1e-3 || Math.abs((decomposed.scaleY ?? 1) - 1) > 1e-3)) {
15319
15326
  const sx = Math.abs(decomposed.scaleX || 1);
@@ -15470,6 +15477,9 @@ const PageCanvas = react.forwardRef(
15470
15477
  const page = state.canvas.pages.find((p) => p.id === pageId);
15471
15478
  const pageChildrenForSave = (page == null ? void 0 : page.children) ?? [];
15472
15479
  const storePos = absoluteToStorePosition(absoluteLeft, absoluteTop, objId, pageChildrenForSave);
15480
+ if (isLogicalGroupAS && finalAngleFromDecomposed && typeof finalAngle === "number") {
15481
+ finalAngle = ((finalAngle - asAngleForBake) % 360 + 540) % 360 - 180;
15482
+ }
15473
15483
  const isLineObj = obj instanceof fabric__namespace.Line;
15474
15484
  const isAutoShrinkText = (sourceElement == null ? void 0 : sourceElement.type) === "text" && sourceElement.overflowPolicy === "auto-shrink";
15475
15485
  const autoShrinkStoredHeight = isAutoShrinkText ? sourceElement.height : void 0;
@@ -15531,7 +15541,32 @@ const PageCanvas = react.forwardRef(
15531
15541
  updateElement(objId, elementUpdate, { recordHistory: false, skipLayoutRecalc: true });
15532
15542
  obj.setCoords();
15533
15543
  }
15534
- const pageChildrenForReflow = ((_j = useEditorStore.getState().canvas.pages.find((p) => p.id === pageId)) == null ? void 0 : _j.children) ?? [];
15544
+ if (isLogicalGroupAS && logicalGroupSelectionId && activeObj instanceof fabric__namespace.ActiveSelection) {
15545
+ try {
15546
+ const pageChildrenForGroup = ((_j = useEditorStore.getState().canvas.pages.find((p) => p.id === pageId)) == null ? void 0 : _j.children) ?? [];
15547
+ const groupNode = findNodeById(pageChildrenForGroup, logicalGroupSelectionId);
15548
+ if (groupNode) {
15549
+ const baseline = ((_k = groupSelectionTransformStartRef.current) == null ? void 0 : _k.groupId) === logicalGroupSelectionId ? groupSelectionTransformStartRef.current : null;
15550
+ const center = activeObj.getCenterPoint();
15551
+ const prevAbs = getAbsoluteBounds(groupNode, pageChildrenForGroup, pageBoundsOptions);
15552
+ const baseCenterX = (baseline == null ? void 0 : baseline.selectionCenterX) ?? prevAbs.left + prevAbs.width / 2;
15553
+ const baseCenterY = (baseline == null ? void 0 : baseline.selectionCenterY) ?? prevAbs.top + prevAbs.height / 2;
15554
+ const baseLeft = (baseline == null ? void 0 : baseline.groupLeft) ?? prevAbs.left;
15555
+ const baseTop = (baseline == null ? void 0 : baseline.groupTop) ?? prevAbs.top;
15556
+ const newAbsLeft = baseLeft + (center.x - baseCenterX);
15557
+ const newAbsTop = baseTop + (center.y - baseCenterY);
15558
+ const storePosGroup = absoluteToStorePosition(newAbsLeft, newAbsTop, logicalGroupSelectionId, pageChildrenForGroup);
15559
+ useEditorStore.getState().updateNode(logicalGroupSelectionId, {
15560
+ left: storePosGroup.left,
15561
+ top: storePosGroup.top,
15562
+ angle: asAngleForBake
15563
+ }, { recordHistory: false, skipLayoutRecalc: true });
15564
+ }
15565
+ } catch (err) {
15566
+ console.warn("[Pixldocs] logical-group envelope persist failed", err);
15567
+ }
15568
+ }
15569
+ const pageChildrenForReflow = ((_l = useEditorStore.getState().canvas.pages.find((p) => p.id === pageId)) == null ? void 0 : _l.children) ?? [];
15535
15570
  const stackGroupsToReflow = /* @__PURE__ */ new Set();
15536
15571
  for (const id of modifiedIdsThisRound) {
15537
15572
  const parent = findParentGroup(pageChildrenForReflow, id);
@@ -24672,9 +24707,9 @@ function captureFabricCanvasSvgForPdf(fabricInstance, canvasWidth, canvasHeight)
24672
24707
  }
24673
24708
  return svgString;
24674
24709
  }
24675
- const resolvedPackageVersion = "0.5.344";
24710
+ const resolvedPackageVersion = "0.5.345";
24676
24711
  const PACKAGE_VERSION = resolvedPackageVersion;
24677
- const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.344";
24712
+ const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.345";
24678
24713
  const roundParityValue = (value) => {
24679
24714
  if (typeof value !== "number") return value;
24680
24715
  return Number.isFinite(value) ? Number(value.toFixed(3)) : value;
@@ -25488,7 +25523,7 @@ class PixldocsRenderer {
25488
25523
  await this.waitForCanvasScene(container, cloned, i);
25489
25524
  }
25490
25525
  console.log(`[canvas-renderer][pdf-unified] mounted ${cloned.pages.length} page(s), handing off to client exportMultiPagePdf`);
25491
- const { exportMultiPagePdf, preparePagesForExport } = await Promise.resolve().then(() => require("./vectorPdfExport-DslpfbFV.cjs"));
25526
+ const { exportMultiPagePdf, preparePagesForExport } = await Promise.resolve().then(() => require("./vectorPdfExport-Mhjrus5I.cjs"));
25492
25527
  const prepared = preparePagesForExport(
25493
25528
  cloned.pages,
25494
25529
  canvasWidth,
@@ -27808,7 +27843,7 @@ async function prepareLiveCanvasSvgForPdf(rawSvg, pageWidth, pageHeight, pageKey
27808
27843
  if (options == null ? void 0 : options.stripPageBackground) stripRootPageBackgroundFromSvg(svgToDraw);
27809
27844
  sanitizeSvgTreeForPdf(svgToDraw);
27810
27845
  try {
27811
- const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await Promise.resolve().then(() => require("./vectorPdfExport-DslpfbFV.cjs"));
27846
+ const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await Promise.resolve().then(() => require("./vectorPdfExport-Mhjrus5I.cjs"));
27812
27847
  try {
27813
27848
  await logTextMeasurementDiagnostic(svgToDraw);
27814
27849
  } catch {
@@ -28205,4 +28240,4 @@ exports.setAutoShrinkDebug = setAutoShrinkDebug;
28205
28240
  exports.setBundledAssetPrefixes = setBundledAssetPrefixes;
28206
28241
  exports.warmResolvedTemplateForPreview = warmResolvedTemplateForPreview;
28207
28242
  exports.warmTemplateFromForm = warmTemplateFromForm;
28208
- //# sourceMappingURL=index-Byw3hiCQ.cjs.map
28243
+ //# sourceMappingURL=index-D4xGj5W4.cjs.map