@pixldocs/canvas-renderer 0.5.306 → 0.5.307

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.
@@ -11259,10 +11259,31 @@ const PageCanvas = react.forwardRef(
11259
11259
  const [ready, setReady] = react.useState(false);
11260
11260
  const [unlockRequestId, setUnlockRequestId] = react.useState(0);
11261
11261
  const applyLogicalGroupSelectionVisualState = react.useCallback((selection, groupId) => {
11262
- var _a2;
11262
+ var _a2, _b2;
11263
11263
  selection.__pixldocsGroupSelection = groupId;
11264
11264
  delete selection.__pixldocsLogicalGroupIds;
11265
11265
  selection.hasBorders = true;
11266
+ try {
11267
+ const state = useEditorStore.getState();
11268
+ const pages = ((_a2 = state.canvas) == null ? void 0 : _a2.pages) ?? [];
11269
+ let groupNode = null;
11270
+ for (const page of pages) {
11271
+ const found = findNodeById(page.children ?? [], groupId);
11272
+ if (found && isGroup(found)) {
11273
+ groupNode = found;
11274
+ break;
11275
+ }
11276
+ }
11277
+ if (groupNode && !isStackLayoutMode(groupNode.layoutMode) && typeof groupNode.angle === "number" && Math.abs(groupNode.angle) > 0.01) {
11278
+ const currentAngle = ((selection.angle ?? 0) % 360 + 360) % 360;
11279
+ const targetAngle = ((groupNode.angle ?? 0) % 360 + 360) % 360;
11280
+ if (Math.abs(currentAngle - targetAngle) > 0.01) {
11281
+ selection.rotate(targetAngle);
11282
+ selection.setCoords();
11283
+ }
11284
+ }
11285
+ } catch {
11286
+ }
11266
11287
  const members = selection.getObjects();
11267
11288
  for (const prev of suppressGroupMemberBordersRef.current) {
11268
11289
  if (members.includes(prev)) continue;
@@ -11286,7 +11307,7 @@ const PageCanvas = react.forwardRef(
11286
11307
  if (m.__pixldocsOrigHasControls === void 0) m.__pixldocsOrigHasControls = m.hasControls;
11287
11308
  m.hasBorders = false;
11288
11309
  m.hasControls = false;
11289
- if (m.__cropGroup || ((_a2 = m._ct) == null ? void 0 : _a2.isCropGroup)) {
11310
+ if (m.__cropGroup || ((_b2 = m._ct) == null ? void 0 : _b2.isCropGroup)) {
11290
11311
  if (m.__pixldocsOrigLockScalingX === void 0) {
11291
11312
  m.__pixldocsOrigLockScalingX = m.lockScalingX;
11292
11313
  m.__pixldocsOrigLockScalingY = m.lockScalingY;
@@ -13869,6 +13890,12 @@ const PageCanvas = react.forwardRef(
13869
13890
  if (didShift) didReflowTextChild = true;
13870
13891
  }
13871
13892
  if (isXSide && didReflowTextChild && typeof obj.triggerLayout === "function") {
13893
+ obj.setCoords();
13894
+ const cornersBefore = obj.aCoords;
13895
+ let fixedMidBefore = null;
13896
+ if (cornersBefore) {
13897
+ fixedMidBefore = corner === "ml" ? { x: (cornersBefore.tr.x + cornersBefore.br.x) / 2, y: (cornersBefore.tr.y + cornersBefore.br.y) / 2 } : { x: (cornersBefore.tl.x + cornersBefore.bl.x) / 2, y: (cornersBefore.tl.y + cornersBefore.bl.y) / 2 };
13898
+ }
13872
13899
  try {
13873
13900
  obj.triggerLayout();
13874
13901
  } catch {
@@ -13877,11 +13904,22 @@ const PageCanvas = react.forwardRef(
13877
13904
  obj._set("scaleX", asSx0);
13878
13905
  obj._set("scaleY", asSy0);
13879
13906
  obj.setCoords();
13880
- const afterRect = obj.getBoundingRect();
13881
- const fixedLeft = asRect0.left;
13882
- const fixedRight = asRect0.left + asRect0.width;
13883
- const nextLeft = corner === "ml" ? (obj.left ?? 0) + (fixedRight - (afterRect.left + afterRect.width)) : (obj.left ?? 0) + (fixedLeft - afterRect.left);
13884
- obj._set("left", nextLeft);
13907
+ const cornersAfter = obj.aCoords;
13908
+ if (fixedMidBefore && cornersAfter) {
13909
+ const fixedMidAfter = corner === "ml" ? { x: (cornersAfter.tr.x + cornersAfter.br.x) / 2, y: (cornersAfter.tr.y + cornersAfter.br.y) / 2 } : { x: (cornersAfter.tl.x + cornersAfter.bl.x) / 2, y: (cornersAfter.tl.y + cornersAfter.bl.y) / 2 };
13910
+ const dx = fixedMidBefore.x - fixedMidAfter.x;
13911
+ const dy = fixedMidBefore.y - fixedMidAfter.y;
13912
+ if (Math.abs(dx) > 0.01 || Math.abs(dy) > 0.01) {
13913
+ obj._set("left", (obj.left ?? 0) + dx);
13914
+ obj._set("top", (obj.top ?? 0) + dy);
13915
+ }
13916
+ } else {
13917
+ const afterRect = obj.getBoundingRect();
13918
+ const fixedLeft = asRect0.left;
13919
+ const fixedRight = asRect0.left + asRect0.width;
13920
+ const nextLeft = corner === "ml" ? (obj.left ?? 0) + (fixedRight - (afterRect.left + afterRect.width)) : (obj.left ?? 0) + (fixedLeft - afterRect.left);
13921
+ obj._set("left", nextLeft);
13922
+ }
13885
13923
  } else {
13886
13924
  obj._set("height", asH0);
13887
13925
  obj._set("left", asLeft0);
@@ -14626,6 +14664,47 @@ const PageCanvas = react.forwardRef(
14626
14664
  unlockEditsSoon();
14627
14665
  return;
14628
14666
  }
14667
+ if (hadRotation && !hadScale && isActiveSelection && activeObj instanceof fabric__namespace.ActiveSelection && !isStackLayoutMode(groupToMove.layoutMode)) {
14668
+ const groupSelectionId = activeObj.__pixldocsGroupSelection ?? groupToMove.id;
14669
+ const newAngle = ((activeObj.angle ?? 0) % 360 + 360) % 360;
14670
+ const { updateNode: updateNodeStore, commitHistory: commitHistoryStore, getCurrentElements } = useEditorStore.getState();
14671
+ const rotPatch = { angle: newAngle === 0 ? void 0 : newAngle };
14672
+ if (Math.abs(deltaX) > 0.1) rotPatch.left = (groupToMove.left ?? 0) + deltaX;
14673
+ if (Math.abs(deltaY) > 0.1) rotPatch.top = (groupToMove.top ?? 0) + deltaY;
14674
+ updateNodeStore(groupToMove.id, rotPatch, { recordHistory: false, skipLayoutRecalc: true });
14675
+ commitHistoryStore();
14676
+ pendingGroupDrillInRef.current = null;
14677
+ fabricCanvas.__activeEditingGroupId = null;
14678
+ setDrilledGroupBounds(null);
14679
+ drilledGroupIdRef.current = null;
14680
+ if (groupSelectionId) {
14681
+ restoreGroupSelectionVisualState(activeObj, groupSelectionId);
14682
+ fabricCanvas.setActiveObject(activeObj);
14683
+ activeObj.setCoords();
14684
+ }
14685
+ selectElements([groupSelectionId], false, false);
14686
+ fabricCanvas.requestRenderAll();
14687
+ elementsRef.current = getCurrentElements();
14688
+ const rotTargets = activeObj.getObjects();
14689
+ for (const o of rotTargets) {
14690
+ const oid = getObjectId(o);
14691
+ if (oid && oid !== "__background__") {
14692
+ justModifiedIdsRef.current.add(oid);
14693
+ modifiedIdsThisRound.add(oid);
14694
+ }
14695
+ }
14696
+ setTimeout(() => modifiedIdsThisRound.forEach((id) => justModifiedIdsRef.current.delete(id)), 150);
14697
+ groupSelectionTransformStartRef.current = null;
14698
+ const rotSnapshot = {
14699
+ memberIds: rotTargets.map((o) => getObjectId(o)).filter((id) => !!id && id !== "__background__"),
14700
+ groupSelectionId,
14701
+ expiresAt: Date.now() + 1200
14702
+ };
14703
+ recentGroupSelectionRestoreRef.current = rotSnapshot;
14704
+ restorePreservedGroupSelectionSoon(rotSnapshot);
14705
+ unlockEditsSoon();
14706
+ return;
14707
+ }
14629
14708
  }
14630
14709
  }
14631
14710
  const pendingCropGroupFrameBakes = [];
@@ -24211,9 +24290,9 @@ function captureFabricCanvasSvgForPdf(fabricInstance, canvasWidth, canvasHeight)
24211
24290
  }
24212
24291
  return svgString;
24213
24292
  }
24214
- const resolvedPackageVersion = "0.5.306";
24293
+ const resolvedPackageVersion = "0.5.307";
24215
24294
  const PACKAGE_VERSION = resolvedPackageVersion;
24216
- const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.306";
24295
+ const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.307";
24217
24296
  const roundParityValue = (value) => {
24218
24297
  if (typeof value !== "number") return value;
24219
24298
  return Number.isFinite(value) ? Number(value.toFixed(3)) : value;
@@ -25027,7 +25106,7 @@ class PixldocsRenderer {
25027
25106
  await this.waitForCanvasScene(container, cloned, i);
25028
25107
  }
25029
25108
  console.log(`[canvas-renderer][pdf-unified] mounted ${cloned.pages.length} page(s), handing off to client exportMultiPagePdf`);
25030
- const { exportMultiPagePdf, preparePagesForExport } = await Promise.resolve().then(() => require("./vectorPdfExport-DlIHeeIS.cjs"));
25109
+ const { exportMultiPagePdf, preparePagesForExport } = await Promise.resolve().then(() => require("./vectorPdfExport-BLbk8p1V.cjs"));
25031
25110
  const prepared = preparePagesForExport(
25032
25111
  cloned.pages,
25033
25112
  canvasWidth,
@@ -27347,7 +27426,7 @@ async function prepareLiveCanvasSvgForPdf(rawSvg, pageWidth, pageHeight, pageKey
27347
27426
  if (options == null ? void 0 : options.stripPageBackground) stripRootPageBackgroundFromSvg(svgToDraw);
27348
27427
  sanitizeSvgTreeForPdf(svgToDraw);
27349
27428
  try {
27350
- const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await Promise.resolve().then(() => require("./vectorPdfExport-DlIHeeIS.cjs"));
27429
+ const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await Promise.resolve().then(() => require("./vectorPdfExport-BLbk8p1V.cjs"));
27351
27430
  try {
27352
27431
  await logTextMeasurementDiagnostic(svgToDraw);
27353
27432
  } catch {
@@ -27744,4 +27823,4 @@ exports.setAutoShrinkDebug = setAutoShrinkDebug;
27744
27823
  exports.setBundledAssetPrefixes = setBundledAssetPrefixes;
27745
27824
  exports.warmResolvedTemplateForPreview = warmResolvedTemplateForPreview;
27746
27825
  exports.warmTemplateFromForm = warmTemplateFromForm;
27747
- //# sourceMappingURL=index-Dtus6g8-.cjs.map
27826
+ //# sourceMappingURL=index-DDubE6xA.cjs.map