@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.
@@ -13754,24 +13754,6 @@ const PageCanvas = react.forwardRef(
13754
13754
  const isXSide = corner === "ml" || corner === "mr";
13755
13755
  const sAxis = isXSide ? Math.abs(obj.scaleX ?? 1) : Math.abs(obj.scaleY ?? 1);
13756
13756
  if (sAxis > 1e-3) {
13757
- const childAnglesNorm = obj.getObjects().map((c) => {
13758
- const a = (c.angle ?? 0) % 360;
13759
- return a < 0 ? a + 360 : a;
13760
- });
13761
- const baseAngle = childAnglesNorm[0] ?? 0;
13762
- const hasMixedRotation = childAnglesNorm.some(
13763
- (a) => Math.abs(a - baseAngle) > 0.5 && Math.abs(Math.abs(a - baseAngle) - 360) > 0.5
13764
- );
13765
- if (hasMixedRotation) {
13766
- if (isXSide) {
13767
- obj._set("scaleY", obj.scaleX ?? 1);
13768
- } else {
13769
- obj._set("scaleX", obj.scaleY ?? 1);
13770
- }
13771
- obj.setCoords();
13772
- obj.dirty = true;
13773
- return;
13774
- }
13775
13757
  if (isXSide && ((_b2 = groupShiftReflowSnapshotRef.current) == null ? void 0 : _b2.selection) !== obj) {
13776
13758
  groupShiftReflowSnapshotRef.current = null;
13777
13759
  const logicalGroupId = obj.__pixldocsGroupSelection;
@@ -14796,6 +14778,9 @@ const PageCanvas = react.forwardRef(
14796
14778
  let finalScaleX = decomposed.scaleX;
14797
14779
  let finalScaleY = decomposed.scaleY;
14798
14780
  let finalAbsoluteMatrix = absoluteMatrix;
14781
+ let finalAngle = decomposed.angle;
14782
+ let finalSkewX = decomposed.skewX;
14783
+ let finalSkewY = decomposed.skewY;
14799
14784
  if (obj instanceof fabric__namespace.Group && obj.__cropGroup) {
14800
14785
  const ct = obj.__cropData;
14801
14786
  if (ct) {
@@ -14852,6 +14837,11 @@ const PageCanvas = react.forwardRef(
14852
14837
  finalHeight = bakedH;
14853
14838
  finalScaleX = 1;
14854
14839
  finalScaleY = 1;
14840
+ if (activeSelectionResizeHandle === "ml" || activeSelectionResizeHandle === "mr" || activeSelectionResizeHandle === "mt" || activeSelectionResizeHandle === "mb") {
14841
+ finalAngle = (sourceElement == null ? void 0 : sourceElement.angle) ?? obj.angle ?? decomposed.angle;
14842
+ finalSkewX = (sourceElement == null ? void 0 : sourceElement.skewX) ?? obj.skewX ?? 0;
14843
+ finalSkewY = (sourceElement == null ? void 0 : sourceElement.skewY) ?? obj.skewY ?? 0;
14844
+ }
14855
14845
  obj.set({ scaleX: 1, scaleY: 1 });
14856
14846
  const newSrc = renderSmartElementToDataUri(sourceElement.smartElementType, sourceElement.smartProps, bakedW, bakedH);
14857
14847
  if (newSrc) {
@@ -14902,20 +14892,7 @@ const PageCanvas = react.forwardRef(
14902
14892
  obj.set({ scaleX: localScaleX, scaleY: localScaleY });
14903
14893
  const selectionMatrix = (_g = activeObj == null ? void 0 : activeObj.calcTransformMatrix) == null ? void 0 : _g.call(activeObj);
14904
14894
  const localCenter = selectionMatrix ? fabric__namespace.util.transformPoint(preBakeCenter, fabric__namespace.util.invertTransform(selectionMatrix)) : preBakeCenter;
14905
- const localWidth = bakedW * localScaleX;
14906
- const localHeight = bakedH * localScaleY;
14907
- const isCenterOrigin = obj.originX === "center" || obj.originY === "center";
14908
- if (isCenterOrigin) {
14909
- obj.set({
14910
- left: localCenter.x,
14911
- top: localCenter.y
14912
- });
14913
- } else {
14914
- obj.set({
14915
- left: localCenter.x - localWidth / 2,
14916
- top: localCenter.y - localHeight / 2
14917
- });
14918
- }
14895
+ obj.setPositionByOrigin(localCenter, "center", "center");
14919
14896
  }
14920
14897
  obj.dirty = true;
14921
14898
  if (activeObj) activeObj.dirty = true;
@@ -14926,33 +14903,29 @@ const PageCanvas = react.forwardRef(
14926
14903
  finalHeight = bakedH;
14927
14904
  finalScaleX = 1;
14928
14905
  finalScaleY = 1;
14906
+ if (activeSelectionResizeHandle === "ml" || activeSelectionResizeHandle === "mr" || activeSelectionResizeHandle === "mt" || activeSelectionResizeHandle === "mb") {
14907
+ finalAngle = (sourceElement == null ? void 0 : sourceElement.angle) ?? obj.angle ?? decomposed.angle;
14908
+ finalSkewX = (sourceElement == null ? void 0 : sourceElement.skewX) ?? obj.skewX ?? 0;
14909
+ finalSkewY = (sourceElement == null ? void 0 : sourceElement.skewY) ?? obj.skewY ?? 0;
14910
+ }
14929
14911
  try {
14930
- const angleRad = (decomposed.angle ?? 0) * Math.PI / 180;
14912
+ const angleRad = (finalAngle ?? 0) * Math.PI / 180;
14931
14913
  const cos = Math.cos(angleRad);
14932
14914
  const sin = Math.sin(angleRad);
14933
14915
  const hw = finalWidth / 2;
14934
14916
  const hh = finalHeight / 2;
14935
- const corners = [
14936
- { x: -hw, y: -hh },
14937
- { x: hw, y: -hh },
14938
- { x: hw, y: hh },
14939
- { x: -hw, y: hh }
14940
- ].map((p) => ({
14941
- x: decomposed.translateX + p.x * cos - p.y * sin,
14942
- y: decomposed.translateY + p.x * sin + p.y * cos
14943
- }));
14944
- absoluteLeft = Math.min(...corners.map((p) => p.x));
14945
- absoluteTop = Math.min(...corners.map((p) => p.y));
14917
+ absoluteLeft = decomposed.translateX - hw * cos + hh * sin;
14918
+ absoluteTop = decomposed.translateY - hw * sin - hh * cos;
14946
14919
  } catch {
14947
14920
  }
14948
14921
  finalAbsoluteMatrix = fabric__namespace.util.composeMatrix({
14949
14922
  translateX: decomposed.translateX,
14950
14923
  translateY: decomposed.translateY,
14951
- angle: decomposed.angle ?? 0,
14924
+ angle: finalAngle ?? 0,
14952
14925
  scaleX: 1,
14953
14926
  scaleY: 1,
14954
- skewX: 0,
14955
- skewY: 0
14927
+ skewX: finalSkewX ?? 0,
14928
+ skewY: finalSkewY ?? 0
14956
14929
  });
14957
14930
  } else {
14958
14931
  finalWidth = intrinsicWidth;
@@ -14963,6 +14936,11 @@ const PageCanvas = react.forwardRef(
14963
14936
  finalHeight = 0;
14964
14937
  finalScaleX = 1;
14965
14938
  finalScaleY = 1;
14939
+ if (activeSelectionResizeHandle === "ml" || activeSelectionResizeHandle === "mr" || activeSelectionResizeHandle === "mt" || activeSelectionResizeHandle === "mb") {
14940
+ finalAngle = (sourceElement == null ? void 0 : sourceElement.angle) ?? obj.angle ?? decomposed.angle;
14941
+ finalSkewX = (sourceElement == null ? void 0 : sourceElement.skewX) ?? obj.skewX ?? 0;
14942
+ finalSkewY = (sourceElement == null ? void 0 : sourceElement.skewY) ?? obj.skewY ?? 0;
14943
+ }
14966
14944
  } else if (obj instanceof fabric__namespace.Textbox && isActiveSelection && (Math.abs((decomposed.scaleX ?? 1) - 1) > 1e-3 || Math.abs((decomposed.scaleY ?? 1) - 1) > 1e-3)) {
14967
14945
  const sx = Math.abs(decomposed.scaleX || 1);
14968
14946
  const sy = Math.abs(decomposed.scaleY || 1);
@@ -15033,12 +15011,7 @@ const PageCanvas = react.forwardRef(
15033
15011
  obj.set({ scaleX: localScaleX, scaleY: localScaleY });
15034
15012
  const selectionMatrix = (_h = activeObj == null ? void 0 : activeObj.calcTransformMatrix) == null ? void 0 : _h.call(activeObj);
15035
15013
  const localCenter = selectionMatrix ? fabric__namespace.util.transformPoint(preBakeCenter, fabric__namespace.util.invertTransform(selectionMatrix)) : preBakeCenter;
15036
- const localWidth = bakedWidth * localScaleX;
15037
- const localHeight = (obj.height ?? intrinsicHeight) * localScaleY;
15038
- obj.set({
15039
- left: localCenter.x - localWidth / 2,
15040
- top: localCenter.y - localHeight / 2
15041
- });
15014
+ obj.setPositionByOrigin(localCenter, "center", "center");
15042
15015
  } else {
15043
15016
  obj.setPositionByOrigin(preBakeCenter, "center", "center");
15044
15017
  }
@@ -15051,32 +15024,23 @@ const PageCanvas = react.forwardRef(
15051
15024
  } catch {
15052
15025
  }
15053
15026
  try {
15054
- const angleRad = (decomposed.angle ?? 0) * Math.PI / 180;
15027
+ const angleRad = (finalAngle ?? 0) * Math.PI / 180;
15055
15028
  const cos = Math.cos(angleRad);
15056
15029
  const sin = Math.sin(angleRad);
15057
15030
  const hw = finalWidth / 2;
15058
15031
  const hh = finalHeight / 2;
15059
- const corners = [
15060
- { x: -hw, y: -hh },
15061
- { x: hw, y: -hh },
15062
- { x: hw, y: hh },
15063
- { x: -hw, y: hh }
15064
- ].map((p) => ({
15065
- x: decomposed.translateX + p.x * cos - p.y * sin,
15066
- y: decomposed.translateY + p.x * sin + p.y * cos
15067
- }));
15068
- absoluteLeft = Math.min(...corners.map((p) => p.x));
15069
- absoluteTop = Math.min(...corners.map((p) => p.y));
15032
+ absoluteLeft = decomposed.translateX - hw * cos + hh * sin;
15033
+ absoluteTop = decomposed.translateY - hw * sin - hh * cos;
15070
15034
  } catch {
15071
15035
  }
15072
15036
  finalAbsoluteMatrix = fabric__namespace.util.composeMatrix({
15073
15037
  translateX: decomposed.translateX,
15074
15038
  translateY: decomposed.translateY,
15075
- angle: decomposed.angle ?? 0,
15039
+ angle: finalAngle ?? 0,
15076
15040
  scaleX: 1,
15077
15041
  scaleY: 1,
15078
- skewX: 0,
15079
- skewY: 0
15042
+ skewX: finalSkewX ?? 0,
15043
+ skewY: finalSkewY ?? 0
15080
15044
  });
15081
15045
  if (debugGroupTextCornerResize) {
15082
15046
  logGroupTextResizeDebug("text-bake", {
@@ -15143,9 +15107,9 @@ const PageCanvas = react.forwardRef(
15143
15107
  // so finalWidth already reflects the new width chosen by the user.
15144
15108
  width: finalWidth,
15145
15109
  height: isLineObj ? 0 : isAutoShrinkText ? typeof autoShrinkStoredHeight === "number" ? autoShrinkStoredHeight : finalHeight : finalHeight,
15146
- angle: decomposed.angle,
15147
- skewX: isLineObj ? 0 : decomposed.skewX,
15148
- skewY: isLineObj ? 0 : decomposed.skewY,
15110
+ angle: finalAngle,
15111
+ skewX: isLineObj ? 0 : finalSkewX,
15112
+ skewY: isLineObj ? 0 : finalSkewY,
15149
15113
  scaleX: finalScaleX,
15150
15114
  scaleY: finalScaleY,
15151
15115
  transformMatrix: finalAbsoluteMatrix
@@ -24299,9 +24263,9 @@ function captureFabricCanvasSvgForPdf(fabricInstance, canvasWidth, canvasHeight)
24299
24263
  }
24300
24264
  return svgString;
24301
24265
  }
24302
- const resolvedPackageVersion = "0.5.325";
24266
+ const resolvedPackageVersion = "0.5.326";
24303
24267
  const PACKAGE_VERSION = resolvedPackageVersion;
24304
- const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.325";
24268
+ const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.326";
24305
24269
  const roundParityValue = (value) => {
24306
24270
  if (typeof value !== "number") return value;
24307
24271
  return Number.isFinite(value) ? Number(value.toFixed(3)) : value;
@@ -25115,7 +25079,7 @@ class PixldocsRenderer {
25115
25079
  await this.waitForCanvasScene(container, cloned, i);
25116
25080
  }
25117
25081
  console.log(`[canvas-renderer][pdf-unified] mounted ${cloned.pages.length} page(s), handing off to client exportMultiPagePdf`);
25118
- const { exportMultiPagePdf, preparePagesForExport } = await Promise.resolve().then(() => require("./vectorPdfExport-DHtj2TRz.cjs"));
25082
+ const { exportMultiPagePdf, preparePagesForExport } = await Promise.resolve().then(() => require("./vectorPdfExport-CtjZ9wQ_.cjs"));
25119
25083
  const prepared = preparePagesForExport(
25120
25084
  cloned.pages,
25121
25085
  canvasWidth,
@@ -27435,7 +27399,7 @@ async function prepareLiveCanvasSvgForPdf(rawSvg, pageWidth, pageHeight, pageKey
27435
27399
  if (options == null ? void 0 : options.stripPageBackground) stripRootPageBackgroundFromSvg(svgToDraw);
27436
27400
  sanitizeSvgTreeForPdf(svgToDraw);
27437
27401
  try {
27438
- const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await Promise.resolve().then(() => require("./vectorPdfExport-DHtj2TRz.cjs"));
27402
+ const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await Promise.resolve().then(() => require("./vectorPdfExport-CtjZ9wQ_.cjs"));
27439
27403
  try {
27440
27404
  await logTextMeasurementDiagnostic(svgToDraw);
27441
27405
  } catch {
@@ -27832,4 +27796,4 @@ exports.setAutoShrinkDebug = setAutoShrinkDebug;
27832
27796
  exports.setBundledAssetPrefixes = setBundledAssetPrefixes;
27833
27797
  exports.warmResolvedTemplateForPreview = warmResolvedTemplateForPreview;
27834
27798
  exports.warmTemplateFromForm = warmTemplateFromForm;
27835
- //# sourceMappingURL=index-BeSkXpzz.cjs.map
27799
+ //# sourceMappingURL=index-MMaqERXX.cjs.map