@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.
@@ -12345,6 +12345,7 @@ const PageCanvas = react.forwardRef(
12345
12345
  selectionLeft: rect.left,
12346
12346
  selectionTop: rect.top
12347
12347
  };
12348
+ prepareGroupSelectionTransformStart(active);
12348
12349
  }
12349
12350
  if (fabricCanvas._currentTransform) {
12350
12351
  fabricCanvas.__isUserTransforming = true;
@@ -14480,7 +14481,7 @@ const PageCanvas = react.forwardRef(
14480
14481
  });
14481
14482
  let cropGroupSaveTimer = null;
14482
14483
  fabricCanvas.on("object:modified", (e) => {
14483
- var _a2, _b2, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
14484
+ var _a2, _b2, _c, _d, _e, _f, _g, _h, _i, _j, _k;
14484
14485
  try {
14485
14486
  dragStarted = false;
14486
14487
  setGuides([]);
@@ -14988,9 +14989,8 @@ const PageCanvas = react.forwardRef(
14988
14989
  }
14989
14990
  if (!isActiveSelectionSideResize && !hadScale && !hadRotation && (Math.abs(deltaX) > 0.1 || Math.abs(deltaY) > 0.1)) {
14990
14991
  const { updateNode: updateNodeStore, commitHistory: commitHistoryStore, getCurrentElements } = useEditorStore.getState();
14991
- const newLeft = (groupToMove.left ?? 0) + deltaX;
14992
- const newTop = (groupToMove.top ?? 0) + deltaY;
14993
- updateNodeStore(groupToMove.id, { left: newLeft, top: newTop }, { recordHistory: false, skipLayoutRecalc: true });
14992
+ const storePos = absoluteToStorePosition(movedGroupLeft, movedGroupTop, groupToMove.id, pageChildren2);
14993
+ updateNodeStore(groupToMove.id, { left: storePos.left, top: storePos.top }, { recordHistory: false, skipLayoutRecalc: true });
14994
14994
  commitHistoryStore();
14995
14995
  pendingGroupDrillInRef.current = null;
14996
14996
  fabricCanvas.__activeEditingGroupId = null;
@@ -15032,7 +15032,35 @@ const PageCanvas = react.forwardRef(
15032
15032
  const pendingCropGroupFrameBakes = [];
15033
15033
  const logicalGroupSelectionId = activeObj instanceof fabric__namespace.ActiveSelection ? activeObj.__pixldocsGroupSelection : void 0;
15034
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;
15035
+ const logicalGroupNodeForBake = logicalGroupSelectionId ? findNodeById(pageChildren2, logicalGroupSelectionId) : null;
15036
+ const asAngleForBake = isLogicalGroupAS && activeObj ? normalizeAngle(Number((logicalGroupNodeForBake == null ? void 0 : logicalGroupNodeForBake.angle) ?? activeObj.angle ?? 0)) : 0;
15037
+ const logicalGroupFinalFrame = (() => {
15038
+ var _a3;
15039
+ if (!isLogicalGroupAS || !logicalGroupSelectionId || !(activeObj instanceof fabric__namespace.ActiveSelection)) return null;
15040
+ const baseline = ((_a3 = groupSelectionTransformStartRef.current) == null ? void 0 : _a3.groupId) === logicalGroupSelectionId ? groupSelectionTransformStartRef.current : null;
15041
+ const localWidth = Math.max(1, (activeObj.width ?? (baseline == null ? void 0 : baseline.groupWidth) ?? 1) * Math.abs(activeObj.scaleX ?? 1));
15042
+ const localHeight = Math.max(1, (activeObj.height ?? (baseline == null ? void 0 : baseline.groupHeight) ?? 1) * Math.abs(activeObj.scaleY ?? 1));
15043
+ const center = activeObj.getCenterPoint();
15044
+ return {
15045
+ groupId: logicalGroupSelectionId,
15046
+ left: center.x - localWidth / 2,
15047
+ top: center.y - localHeight / 2,
15048
+ width: localWidth,
15049
+ height: localHeight,
15050
+ centerX: center.x,
15051
+ centerY: center.y,
15052
+ angle: asAngleForBake,
15053
+ matrix: fabric__namespace.util.composeMatrix({
15054
+ translateX: center.x,
15055
+ translateY: center.y,
15056
+ angle: asAngleForBake,
15057
+ scaleX: 1,
15058
+ scaleY: 1,
15059
+ skewX: 0,
15060
+ skewY: 0
15061
+ })
15062
+ };
15063
+ })();
15036
15064
  for (const obj of activeObjects) {
15037
15065
  const objId = getObjectId(obj);
15038
15066
  if (!objId || objId === "__background__") continue;
@@ -15476,7 +15504,18 @@ const PageCanvas = react.forwardRef(
15476
15504
  const state = useEditorStore.getState();
15477
15505
  const page = state.canvas.pages.find((p) => p.id === pageId);
15478
15506
  const pageChildrenForSave = (page == null ? void 0 : page.children) ?? [];
15479
- const storePos = absoluteToStorePosition(absoluteLeft, absoluteTop, objId, pageChildrenForSave);
15507
+ const storePos = (logicalGroupFinalFrame == null ? void 0 : logicalGroupFinalFrame.groupId) === logicalGroupSelectionId ? (() => {
15508
+ const localCenter = fabric__namespace.util.transformPoint(
15509
+ new fabric__namespace.Point(decomposed.translateX ?? 0, decomposed.translateY ?? 0),
15510
+ fabric__namespace.util.invertTransform(logicalGroupFinalFrame.matrix)
15511
+ );
15512
+ const localAngle = finalAngleFromDecomposed ? ((Number(finalAngle ?? 0) - asAngleForBake) % 360 + 540) % 360 - 180 : Number(finalAngle ?? 0);
15513
+ const localAngleRad = localAngle * Math.PI / 180;
15514
+ return {
15515
+ left: localCenter.x - finalWidth / 2 * Math.cos(localAngleRad) + finalHeight / 2 * Math.sin(localAngleRad) + logicalGroupFinalFrame.width / 2,
15516
+ top: localCenter.y - finalWidth / 2 * Math.sin(localAngleRad) - finalHeight / 2 * Math.cos(localAngleRad) + logicalGroupFinalFrame.height / 2
15517
+ };
15518
+ })() : absoluteToStorePosition(absoluteLeft, absoluteTop, objId, pageChildrenForSave);
15480
15519
  if (isLogicalGroupAS && finalAngleFromDecomposed && typeof finalAngle === "number") {
15481
15520
  finalAngle = ((finalAngle - asAngleForBake) % 360 + 540) % 360 - 180;
15482
15521
  }
@@ -15545,28 +15584,21 @@ const PageCanvas = react.forwardRef(
15545
15584
  try {
15546
15585
  const pageChildrenForGroup = ((_j = useEditorStore.getState().canvas.pages.find((p) => p.id === pageId)) == null ? void 0 : _j.children) ?? [];
15547
15586
  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);
15587
+ if (groupNode && logicalGroupFinalFrame) {
15588
+ const storePosGroup = absoluteToStorePosition(logicalGroupFinalFrame.left, logicalGroupFinalFrame.top, logicalGroupSelectionId, pageChildrenForGroup);
15559
15589
  useEditorStore.getState().updateNode(logicalGroupSelectionId, {
15560
15590
  left: storePosGroup.left,
15561
15591
  top: storePosGroup.top,
15562
- angle: asAngleForBake
15592
+ width: logicalGroupFinalFrame.width,
15593
+ height: logicalGroupFinalFrame.height,
15594
+ angle: logicalGroupFinalFrame.angle
15563
15595
  }, { recordHistory: false, skipLayoutRecalc: true });
15564
15596
  }
15565
15597
  } catch (err) {
15566
15598
  console.warn("[Pixldocs] logical-group envelope persist failed", err);
15567
15599
  }
15568
15600
  }
15569
- const pageChildrenForReflow = ((_l = useEditorStore.getState().canvas.pages.find((p) => p.id === pageId)) == null ? void 0 : _l.children) ?? [];
15601
+ const pageChildrenForReflow = ((_k = useEditorStore.getState().canvas.pages.find((p) => p.id === pageId)) == null ? void 0 : _k.children) ?? [];
15570
15602
  const stackGroupsToReflow = /* @__PURE__ */ new Set();
15571
15603
  for (const id of modifiedIdsThisRound) {
15572
15604
  const parent = findParentGroup(pageChildrenForReflow, id);
@@ -24707,9 +24739,9 @@ function captureFabricCanvasSvgForPdf(fabricInstance, canvasWidth, canvasHeight)
24707
24739
  }
24708
24740
  return svgString;
24709
24741
  }
24710
- const resolvedPackageVersion = "0.5.345";
24742
+ const resolvedPackageVersion = "0.5.346";
24711
24743
  const PACKAGE_VERSION = resolvedPackageVersion;
24712
- const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.345";
24744
+ const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.346";
24713
24745
  const roundParityValue = (value) => {
24714
24746
  if (typeof value !== "number") return value;
24715
24747
  return Number.isFinite(value) ? Number(value.toFixed(3)) : value;
@@ -25523,7 +25555,7 @@ class PixldocsRenderer {
25523
25555
  await this.waitForCanvasScene(container, cloned, i);
25524
25556
  }
25525
25557
  console.log(`[canvas-renderer][pdf-unified] mounted ${cloned.pages.length} page(s), handing off to client exportMultiPagePdf`);
25526
- const { exportMultiPagePdf, preparePagesForExport } = await Promise.resolve().then(() => require("./vectorPdfExport-Mhjrus5I.cjs"));
25558
+ const { exportMultiPagePdf, preparePagesForExport } = await Promise.resolve().then(() => require("./vectorPdfExport-DRpVTciP.cjs"));
25527
25559
  const prepared = preparePagesForExport(
25528
25560
  cloned.pages,
25529
25561
  canvasWidth,
@@ -27843,7 +27875,7 @@ async function prepareLiveCanvasSvgForPdf(rawSvg, pageWidth, pageHeight, pageKey
27843
27875
  if (options == null ? void 0 : options.stripPageBackground) stripRootPageBackgroundFromSvg(svgToDraw);
27844
27876
  sanitizeSvgTreeForPdf(svgToDraw);
27845
27877
  try {
27846
- const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await Promise.resolve().then(() => require("./vectorPdfExport-Mhjrus5I.cjs"));
27878
+ const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await Promise.resolve().then(() => require("./vectorPdfExport-DRpVTciP.cjs"));
27847
27879
  try {
27848
27880
  await logTextMeasurementDiagnostic(svgToDraw);
27849
27881
  } catch {
@@ -28240,4 +28272,4 @@ exports.setAutoShrinkDebug = setAutoShrinkDebug;
28240
28272
  exports.setBundledAssetPrefixes = setBundledAssetPrefixes;
28241
28273
  exports.warmResolvedTemplateForPreview = warmResolvedTemplateForPreview;
28242
28274
  exports.warmTemplateFromForm = warmTemplateFromForm;
28243
- //# sourceMappingURL=index-D4xGj5W4.cjs.map
28275
+ //# sourceMappingURL=index-C6VMQJMY.cjs.map