@pixldocs/canvas-renderer 0.5.345 → 0.5.346

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.
@@ -12327,6 +12327,7 @@ const PageCanvas = forwardRef(
12327
12327
  selectionLeft: rect.left,
12328
12328
  selectionTop: rect.top
12329
12329
  };
12330
+ prepareGroupSelectionTransformStart(active);
12330
12331
  }
12331
12332
  if (fabricCanvas._currentTransform) {
12332
12333
  fabricCanvas.__isUserTransforming = true;
@@ -14462,7 +14463,7 @@ const PageCanvas = forwardRef(
14462
14463
  });
14463
14464
  let cropGroupSaveTimer = null;
14464
14465
  fabricCanvas.on("object:modified", (e) => {
14465
- var _a2, _b2, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
14466
+ var _a2, _b2, _c, _d, _e, _f, _g, _h, _i, _j, _k;
14466
14467
  try {
14467
14468
  dragStarted = false;
14468
14469
  setGuides([]);
@@ -14970,9 +14971,8 @@ const PageCanvas = forwardRef(
14970
14971
  }
14971
14972
  if (!isActiveSelectionSideResize && !hadScale && !hadRotation && (Math.abs(deltaX) > 0.1 || Math.abs(deltaY) > 0.1)) {
14972
14973
  const { updateNode: updateNodeStore, commitHistory: commitHistoryStore, getCurrentElements } = useEditorStore.getState();
14973
- const newLeft = (groupToMove.left ?? 0) + deltaX;
14974
- const newTop = (groupToMove.top ?? 0) + deltaY;
14975
- updateNodeStore(groupToMove.id, { left: newLeft, top: newTop }, { recordHistory: false, skipLayoutRecalc: true });
14974
+ const storePos = absoluteToStorePosition(movedGroupLeft, movedGroupTop, groupToMove.id, pageChildren2);
14975
+ updateNodeStore(groupToMove.id, { left: storePos.left, top: storePos.top }, { recordHistory: false, skipLayoutRecalc: true });
14976
14976
  commitHistoryStore();
14977
14977
  pendingGroupDrillInRef.current = null;
14978
14978
  fabricCanvas.__activeEditingGroupId = null;
@@ -15014,7 +15014,35 @@ const PageCanvas = forwardRef(
15014
15014
  const pendingCropGroupFrameBakes = [];
15015
15015
  const logicalGroupSelectionId = activeObj instanceof fabric.ActiveSelection ? activeObj.__pixldocsGroupSelection : void 0;
15016
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;
15017
+ const logicalGroupNodeForBake = logicalGroupSelectionId ? findNodeById(pageChildren2, logicalGroupSelectionId) : null;
15018
+ const asAngleForBake = isLogicalGroupAS && activeObj ? normalizeAngle(Number((logicalGroupNodeForBake == null ? void 0 : logicalGroupNodeForBake.angle) ?? activeObj.angle ?? 0)) : 0;
15019
+ const logicalGroupFinalFrame = (() => {
15020
+ var _a3;
15021
+ if (!isLogicalGroupAS || !logicalGroupSelectionId || !(activeObj instanceof fabric.ActiveSelection)) return null;
15022
+ const baseline = ((_a3 = groupSelectionTransformStartRef.current) == null ? void 0 : _a3.groupId) === logicalGroupSelectionId ? groupSelectionTransformStartRef.current : null;
15023
+ const localWidth = Math.max(1, (activeObj.width ?? (baseline == null ? void 0 : baseline.groupWidth) ?? 1) * Math.abs(activeObj.scaleX ?? 1));
15024
+ const localHeight = Math.max(1, (activeObj.height ?? (baseline == null ? void 0 : baseline.groupHeight) ?? 1) * Math.abs(activeObj.scaleY ?? 1));
15025
+ const center = activeObj.getCenterPoint();
15026
+ return {
15027
+ groupId: logicalGroupSelectionId,
15028
+ left: center.x - localWidth / 2,
15029
+ top: center.y - localHeight / 2,
15030
+ width: localWidth,
15031
+ height: localHeight,
15032
+ centerX: center.x,
15033
+ centerY: center.y,
15034
+ angle: asAngleForBake,
15035
+ matrix: fabric.util.composeMatrix({
15036
+ translateX: center.x,
15037
+ translateY: center.y,
15038
+ angle: asAngleForBake,
15039
+ scaleX: 1,
15040
+ scaleY: 1,
15041
+ skewX: 0,
15042
+ skewY: 0
15043
+ })
15044
+ };
15045
+ })();
15018
15046
  for (const obj of activeObjects) {
15019
15047
  const objId = getObjectId(obj);
15020
15048
  if (!objId || objId === "__background__") continue;
@@ -15458,7 +15486,18 @@ const PageCanvas = forwardRef(
15458
15486
  const state = useEditorStore.getState();
15459
15487
  const page = state.canvas.pages.find((p) => p.id === pageId);
15460
15488
  const pageChildrenForSave = (page == null ? void 0 : page.children) ?? [];
15461
- const storePos = absoluteToStorePosition(absoluteLeft, absoluteTop, objId, pageChildrenForSave);
15489
+ const storePos = (logicalGroupFinalFrame == null ? void 0 : logicalGroupFinalFrame.groupId) === logicalGroupSelectionId ? (() => {
15490
+ const localCenter = fabric.util.transformPoint(
15491
+ new fabric.Point(decomposed.translateX ?? 0, decomposed.translateY ?? 0),
15492
+ fabric.util.invertTransform(logicalGroupFinalFrame.matrix)
15493
+ );
15494
+ const localAngle = finalAngleFromDecomposed ? ((Number(finalAngle ?? 0) - asAngleForBake) % 360 + 540) % 360 - 180 : Number(finalAngle ?? 0);
15495
+ const localAngleRad = localAngle * Math.PI / 180;
15496
+ return {
15497
+ left: localCenter.x - finalWidth / 2 * Math.cos(localAngleRad) + finalHeight / 2 * Math.sin(localAngleRad) + logicalGroupFinalFrame.width / 2,
15498
+ top: localCenter.y - finalWidth / 2 * Math.sin(localAngleRad) - finalHeight / 2 * Math.cos(localAngleRad) + logicalGroupFinalFrame.height / 2
15499
+ };
15500
+ })() : absoluteToStorePosition(absoluteLeft, absoluteTop, objId, pageChildrenForSave);
15462
15501
  if (isLogicalGroupAS && finalAngleFromDecomposed && typeof finalAngle === "number") {
15463
15502
  finalAngle = ((finalAngle - asAngleForBake) % 360 + 540) % 360 - 180;
15464
15503
  }
@@ -15527,28 +15566,21 @@ const PageCanvas = forwardRef(
15527
15566
  try {
15528
15567
  const pageChildrenForGroup = ((_j = useEditorStore.getState().canvas.pages.find((p) => p.id === pageId)) == null ? void 0 : _j.children) ?? [];
15529
15568
  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);
15569
+ if (groupNode && logicalGroupFinalFrame) {
15570
+ const storePosGroup = absoluteToStorePosition(logicalGroupFinalFrame.left, logicalGroupFinalFrame.top, logicalGroupSelectionId, pageChildrenForGroup);
15541
15571
  useEditorStore.getState().updateNode(logicalGroupSelectionId, {
15542
15572
  left: storePosGroup.left,
15543
15573
  top: storePosGroup.top,
15544
- angle: asAngleForBake
15574
+ width: logicalGroupFinalFrame.width,
15575
+ height: logicalGroupFinalFrame.height,
15576
+ angle: logicalGroupFinalFrame.angle
15545
15577
  }, { recordHistory: false, skipLayoutRecalc: true });
15546
15578
  }
15547
15579
  } catch (err) {
15548
15580
  console.warn("[Pixldocs] logical-group envelope persist failed", err);
15549
15581
  }
15550
15582
  }
15551
- const pageChildrenForReflow = ((_l = useEditorStore.getState().canvas.pages.find((p) => p.id === pageId)) == null ? void 0 : _l.children) ?? [];
15583
+ const pageChildrenForReflow = ((_k = useEditorStore.getState().canvas.pages.find((p) => p.id === pageId)) == null ? void 0 : _k.children) ?? [];
15552
15584
  const stackGroupsToReflow = /* @__PURE__ */ new Set();
15553
15585
  for (const id of modifiedIdsThisRound) {
15554
15586
  const parent = findParentGroup(pageChildrenForReflow, id);
@@ -24689,9 +24721,9 @@ function captureFabricCanvasSvgForPdf(fabricInstance, canvasWidth, canvasHeight)
24689
24721
  }
24690
24722
  return svgString;
24691
24723
  }
24692
- const resolvedPackageVersion = "0.5.345";
24724
+ const resolvedPackageVersion = "0.5.346";
24693
24725
  const PACKAGE_VERSION = resolvedPackageVersion;
24694
- const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.345";
24726
+ const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.346";
24695
24727
  const roundParityValue = (value) => {
24696
24728
  if (typeof value !== "number") return value;
24697
24729
  return Number.isFinite(value) ? Number(value.toFixed(3)) : value;
@@ -25505,7 +25537,7 @@ class PixldocsRenderer {
25505
25537
  await this.waitForCanvasScene(container, cloned, i);
25506
25538
  }
25507
25539
  console.log(`[canvas-renderer][pdf-unified] mounted ${cloned.pages.length} page(s), handing off to client exportMultiPagePdf`);
25508
- const { exportMultiPagePdf, preparePagesForExport } = await import("./vectorPdfExport-rFbeCudV.js");
25540
+ const { exportMultiPagePdf, preparePagesForExport } = await import("./vectorPdfExport-Bbi4foK-.js");
25509
25541
  const prepared = preparePagesForExport(
25510
25542
  cloned.pages,
25511
25543
  canvasWidth,
@@ -27825,7 +27857,7 @@ async function prepareLiveCanvasSvgForPdf(rawSvg, pageWidth, pageHeight, pageKey
27825
27857
  if (options == null ? void 0 : options.stripPageBackground) stripRootPageBackgroundFromSvg(svgToDraw);
27826
27858
  sanitizeSvgTreeForPdf(svgToDraw);
27827
27859
  try {
27828
- const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await import("./vectorPdfExport-rFbeCudV.js");
27860
+ const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await import("./vectorPdfExport-Bbi4foK-.js");
27829
27861
  try {
27830
27862
  await logTextMeasurementDiagnostic(svgToDraw);
27831
27863
  } catch {
@@ -28225,4 +28257,4 @@ export {
28225
28257
  buildTeaserBlurFlatKeys as y,
28226
28258
  collectFontDescriptorsFromConfig as z
28227
28259
  };
28228
- //# sourceMappingURL=index-wiw1EUl-.js.map
28260
+ //# sourceMappingURL=index-Jiw7-9ee.js.map