@pixldocs/canvas-renderer 0.5.325 → 0.5.326

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.
@@ -13736,24 +13736,6 @@ const PageCanvas = forwardRef(
13736
13736
  const isXSide = corner === "ml" || corner === "mr";
13737
13737
  const sAxis = isXSide ? Math.abs(obj.scaleX ?? 1) : Math.abs(obj.scaleY ?? 1);
13738
13738
  if (sAxis > 1e-3) {
13739
- const childAnglesNorm = obj.getObjects().map((c) => {
13740
- const a = (c.angle ?? 0) % 360;
13741
- return a < 0 ? a + 360 : a;
13742
- });
13743
- const baseAngle = childAnglesNorm[0] ?? 0;
13744
- const hasMixedRotation = childAnglesNorm.some(
13745
- (a) => Math.abs(a - baseAngle) > 0.5 && Math.abs(Math.abs(a - baseAngle) - 360) > 0.5
13746
- );
13747
- if (hasMixedRotation) {
13748
- if (isXSide) {
13749
- obj._set("scaleY", obj.scaleX ?? 1);
13750
- } else {
13751
- obj._set("scaleX", obj.scaleY ?? 1);
13752
- }
13753
- obj.setCoords();
13754
- obj.dirty = true;
13755
- return;
13756
- }
13757
13739
  if (isXSide && ((_b2 = groupShiftReflowSnapshotRef.current) == null ? void 0 : _b2.selection) !== obj) {
13758
13740
  groupShiftReflowSnapshotRef.current = null;
13759
13741
  const logicalGroupId = obj.__pixldocsGroupSelection;
@@ -14778,6 +14760,9 @@ const PageCanvas = forwardRef(
14778
14760
  let finalScaleX = decomposed.scaleX;
14779
14761
  let finalScaleY = decomposed.scaleY;
14780
14762
  let finalAbsoluteMatrix = absoluteMatrix;
14763
+ let finalAngle = decomposed.angle;
14764
+ let finalSkewX = decomposed.skewX;
14765
+ let finalSkewY = decomposed.skewY;
14781
14766
  if (obj instanceof fabric.Group && obj.__cropGroup) {
14782
14767
  const ct = obj.__cropData;
14783
14768
  if (ct) {
@@ -14834,6 +14819,11 @@ const PageCanvas = forwardRef(
14834
14819
  finalHeight = bakedH;
14835
14820
  finalScaleX = 1;
14836
14821
  finalScaleY = 1;
14822
+ if (activeSelectionResizeHandle === "ml" || activeSelectionResizeHandle === "mr" || activeSelectionResizeHandle === "mt" || activeSelectionResizeHandle === "mb") {
14823
+ finalAngle = (sourceElement == null ? void 0 : sourceElement.angle) ?? obj.angle ?? decomposed.angle;
14824
+ finalSkewX = (sourceElement == null ? void 0 : sourceElement.skewX) ?? obj.skewX ?? 0;
14825
+ finalSkewY = (sourceElement == null ? void 0 : sourceElement.skewY) ?? obj.skewY ?? 0;
14826
+ }
14837
14827
  obj.set({ scaleX: 1, scaleY: 1 });
14838
14828
  const newSrc = renderSmartElementToDataUri(sourceElement.smartElementType, sourceElement.smartProps, bakedW, bakedH);
14839
14829
  if (newSrc) {
@@ -14884,20 +14874,7 @@ const PageCanvas = forwardRef(
14884
14874
  obj.set({ scaleX: localScaleX, scaleY: localScaleY });
14885
14875
  const selectionMatrix = (_g = activeObj == null ? void 0 : activeObj.calcTransformMatrix) == null ? void 0 : _g.call(activeObj);
14886
14876
  const localCenter = selectionMatrix ? fabric.util.transformPoint(preBakeCenter, fabric.util.invertTransform(selectionMatrix)) : preBakeCenter;
14887
- const localWidth = bakedW * localScaleX;
14888
- const localHeight = bakedH * localScaleY;
14889
- const isCenterOrigin = obj.originX === "center" || obj.originY === "center";
14890
- if (isCenterOrigin) {
14891
- obj.set({
14892
- left: localCenter.x,
14893
- top: localCenter.y
14894
- });
14895
- } else {
14896
- obj.set({
14897
- left: localCenter.x - localWidth / 2,
14898
- top: localCenter.y - localHeight / 2
14899
- });
14900
- }
14877
+ obj.setPositionByOrigin(localCenter, "center", "center");
14901
14878
  }
14902
14879
  obj.dirty = true;
14903
14880
  if (activeObj) activeObj.dirty = true;
@@ -14908,33 +14885,29 @@ const PageCanvas = forwardRef(
14908
14885
  finalHeight = bakedH;
14909
14886
  finalScaleX = 1;
14910
14887
  finalScaleY = 1;
14888
+ if (activeSelectionResizeHandle === "ml" || activeSelectionResizeHandle === "mr" || activeSelectionResizeHandle === "mt" || activeSelectionResizeHandle === "mb") {
14889
+ finalAngle = (sourceElement == null ? void 0 : sourceElement.angle) ?? obj.angle ?? decomposed.angle;
14890
+ finalSkewX = (sourceElement == null ? void 0 : sourceElement.skewX) ?? obj.skewX ?? 0;
14891
+ finalSkewY = (sourceElement == null ? void 0 : sourceElement.skewY) ?? obj.skewY ?? 0;
14892
+ }
14911
14893
  try {
14912
- const angleRad = (decomposed.angle ?? 0) * Math.PI / 180;
14894
+ const angleRad = (finalAngle ?? 0) * Math.PI / 180;
14913
14895
  const cos = Math.cos(angleRad);
14914
14896
  const sin = Math.sin(angleRad);
14915
14897
  const hw = finalWidth / 2;
14916
14898
  const hh = finalHeight / 2;
14917
- const corners = [
14918
- { x: -hw, y: -hh },
14919
- { x: hw, y: -hh },
14920
- { x: hw, y: hh },
14921
- { x: -hw, y: hh }
14922
- ].map((p) => ({
14923
- x: decomposed.translateX + p.x * cos - p.y * sin,
14924
- y: decomposed.translateY + p.x * sin + p.y * cos
14925
- }));
14926
- absoluteLeft = Math.min(...corners.map((p) => p.x));
14927
- absoluteTop = Math.min(...corners.map((p) => p.y));
14899
+ absoluteLeft = decomposed.translateX - hw * cos + hh * sin;
14900
+ absoluteTop = decomposed.translateY - hw * sin - hh * cos;
14928
14901
  } catch {
14929
14902
  }
14930
14903
  finalAbsoluteMatrix = fabric.util.composeMatrix({
14931
14904
  translateX: decomposed.translateX,
14932
14905
  translateY: decomposed.translateY,
14933
- angle: decomposed.angle ?? 0,
14906
+ angle: finalAngle ?? 0,
14934
14907
  scaleX: 1,
14935
14908
  scaleY: 1,
14936
- skewX: 0,
14937
- skewY: 0
14909
+ skewX: finalSkewX ?? 0,
14910
+ skewY: finalSkewY ?? 0
14938
14911
  });
14939
14912
  } else {
14940
14913
  finalWidth = intrinsicWidth;
@@ -14945,6 +14918,11 @@ const PageCanvas = forwardRef(
14945
14918
  finalHeight = 0;
14946
14919
  finalScaleX = 1;
14947
14920
  finalScaleY = 1;
14921
+ if (activeSelectionResizeHandle === "ml" || activeSelectionResizeHandle === "mr" || activeSelectionResizeHandle === "mt" || activeSelectionResizeHandle === "mb") {
14922
+ finalAngle = (sourceElement == null ? void 0 : sourceElement.angle) ?? obj.angle ?? decomposed.angle;
14923
+ finalSkewX = (sourceElement == null ? void 0 : sourceElement.skewX) ?? obj.skewX ?? 0;
14924
+ finalSkewY = (sourceElement == null ? void 0 : sourceElement.skewY) ?? obj.skewY ?? 0;
14925
+ }
14948
14926
  } else if (obj instanceof fabric.Textbox && isActiveSelection && (Math.abs((decomposed.scaleX ?? 1) - 1) > 1e-3 || Math.abs((decomposed.scaleY ?? 1) - 1) > 1e-3)) {
14949
14927
  const sx = Math.abs(decomposed.scaleX || 1);
14950
14928
  const sy = Math.abs(decomposed.scaleY || 1);
@@ -15015,12 +14993,7 @@ const PageCanvas = forwardRef(
15015
14993
  obj.set({ scaleX: localScaleX, scaleY: localScaleY });
15016
14994
  const selectionMatrix = (_h = activeObj == null ? void 0 : activeObj.calcTransformMatrix) == null ? void 0 : _h.call(activeObj);
15017
14995
  const localCenter = selectionMatrix ? fabric.util.transformPoint(preBakeCenter, fabric.util.invertTransform(selectionMatrix)) : preBakeCenter;
15018
- const localWidth = bakedWidth * localScaleX;
15019
- const localHeight = (obj.height ?? intrinsicHeight) * localScaleY;
15020
- obj.set({
15021
- left: localCenter.x - localWidth / 2,
15022
- top: localCenter.y - localHeight / 2
15023
- });
14996
+ obj.setPositionByOrigin(localCenter, "center", "center");
15024
14997
  } else {
15025
14998
  obj.setPositionByOrigin(preBakeCenter, "center", "center");
15026
14999
  }
@@ -15033,32 +15006,23 @@ const PageCanvas = forwardRef(
15033
15006
  } catch {
15034
15007
  }
15035
15008
  try {
15036
- const angleRad = (decomposed.angle ?? 0) * Math.PI / 180;
15009
+ const angleRad = (finalAngle ?? 0) * Math.PI / 180;
15037
15010
  const cos = Math.cos(angleRad);
15038
15011
  const sin = Math.sin(angleRad);
15039
15012
  const hw = finalWidth / 2;
15040
15013
  const hh = finalHeight / 2;
15041
- const corners = [
15042
- { x: -hw, y: -hh },
15043
- { x: hw, y: -hh },
15044
- { x: hw, y: hh },
15045
- { x: -hw, y: hh }
15046
- ].map((p) => ({
15047
- x: decomposed.translateX + p.x * cos - p.y * sin,
15048
- y: decomposed.translateY + p.x * sin + p.y * cos
15049
- }));
15050
- absoluteLeft = Math.min(...corners.map((p) => p.x));
15051
- absoluteTop = Math.min(...corners.map((p) => p.y));
15014
+ absoluteLeft = decomposed.translateX - hw * cos + hh * sin;
15015
+ absoluteTop = decomposed.translateY - hw * sin - hh * cos;
15052
15016
  } catch {
15053
15017
  }
15054
15018
  finalAbsoluteMatrix = fabric.util.composeMatrix({
15055
15019
  translateX: decomposed.translateX,
15056
15020
  translateY: decomposed.translateY,
15057
- angle: decomposed.angle ?? 0,
15021
+ angle: finalAngle ?? 0,
15058
15022
  scaleX: 1,
15059
15023
  scaleY: 1,
15060
- skewX: 0,
15061
- skewY: 0
15024
+ skewX: finalSkewX ?? 0,
15025
+ skewY: finalSkewY ?? 0
15062
15026
  });
15063
15027
  if (debugGroupTextCornerResize) {
15064
15028
  logGroupTextResizeDebug("text-bake", {
@@ -15125,9 +15089,9 @@ const PageCanvas = forwardRef(
15125
15089
  // so finalWidth already reflects the new width chosen by the user.
15126
15090
  width: finalWidth,
15127
15091
  height: isLineObj ? 0 : isAutoShrinkText ? typeof autoShrinkStoredHeight === "number" ? autoShrinkStoredHeight : finalHeight : finalHeight,
15128
- angle: decomposed.angle,
15129
- skewX: isLineObj ? 0 : decomposed.skewX,
15130
- skewY: isLineObj ? 0 : decomposed.skewY,
15092
+ angle: finalAngle,
15093
+ skewX: isLineObj ? 0 : finalSkewX,
15094
+ skewY: isLineObj ? 0 : finalSkewY,
15131
15095
  scaleX: finalScaleX,
15132
15096
  scaleY: finalScaleY,
15133
15097
  transformMatrix: finalAbsoluteMatrix
@@ -24281,9 +24245,9 @@ function captureFabricCanvasSvgForPdf(fabricInstance, canvasWidth, canvasHeight)
24281
24245
  }
24282
24246
  return svgString;
24283
24247
  }
24284
- const resolvedPackageVersion = "0.5.325";
24248
+ const resolvedPackageVersion = "0.5.326";
24285
24249
  const PACKAGE_VERSION = resolvedPackageVersion;
24286
- const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.325";
24250
+ const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.326";
24287
24251
  const roundParityValue = (value) => {
24288
24252
  if (typeof value !== "number") return value;
24289
24253
  return Number.isFinite(value) ? Number(value.toFixed(3)) : value;
@@ -25097,7 +25061,7 @@ class PixldocsRenderer {
25097
25061
  await this.waitForCanvasScene(container, cloned, i);
25098
25062
  }
25099
25063
  console.log(`[canvas-renderer][pdf-unified] mounted ${cloned.pages.length} page(s), handing off to client exportMultiPagePdf`);
25100
- const { exportMultiPagePdf, preparePagesForExport } = await import("./vectorPdfExport-Mq6tcwR7.js");
25064
+ const { exportMultiPagePdf, preparePagesForExport } = await import("./vectorPdfExport-N0-ZYAKl.js");
25101
25065
  const prepared = preparePagesForExport(
25102
25066
  cloned.pages,
25103
25067
  canvasWidth,
@@ -27417,7 +27381,7 @@ async function prepareLiveCanvasSvgForPdf(rawSvg, pageWidth, pageHeight, pageKey
27417
27381
  if (options == null ? void 0 : options.stripPageBackground) stripRootPageBackgroundFromSvg(svgToDraw);
27418
27382
  sanitizeSvgTreeForPdf(svgToDraw);
27419
27383
  try {
27420
- const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await import("./vectorPdfExport-Mq6tcwR7.js");
27384
+ const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await import("./vectorPdfExport-N0-ZYAKl.js");
27421
27385
  try {
27422
27386
  await logTextMeasurementDiagnostic(svgToDraw);
27423
27387
  } catch {
@@ -27817,4 +27781,4 @@ export {
27817
27781
  buildTeaserBlurFlatKeys as y,
27818
27782
  collectFontDescriptorsFromConfig as z
27819
27783
  };
27820
- //# sourceMappingURL=index-CYpr1MY-.js.map
27784
+ //# sourceMappingURL=index-CXrA6xYG.js.map