@pixldocs/canvas-renderer 0.5.345 → 0.5.347

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