@pixldocs/canvas-renderer 0.5.324 → 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,116 +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 hasRotatedChild = obj.getObjects().some(
13758
- (c) => Math.abs((c.angle ?? 0) % 360) > 0.5
13759
- );
13760
- if (hasRotatedChild) {
13761
- if (obj.__asRotAwareSnap == null) {
13762
- obj.__asRotAwareSnap = {
13763
- width: obj.width ?? 0,
13764
- height: obj.height ?? 0,
13765
- scaleX: obj.scaleX ?? 1,
13766
- scaleY: obj.scaleY ?? 1,
13767
- angle: obj.angle ?? 0,
13768
- aCoords: (() => {
13769
- obj.setCoords();
13770
- const c = obj.aCoords;
13771
- return c ? { tl: { x: c.tl.x, y: c.tl.y }, tr: { x: c.tr.x, y: c.tr.y }, br: { x: c.br.x, y: c.br.y }, bl: { x: c.bl.x, y: c.bl.y } } : null;
13772
- })(),
13773
- corner
13774
- };
13775
- for (const ch of obj.getObjects()) {
13776
- ch.__asRotAwareChild = {
13777
- width: ch.width ?? 0,
13778
- height: ch.height ?? 0,
13779
- scaleX: ch.scaleX ?? 1,
13780
- scaleY: ch.scaleY ?? 1,
13781
- left: ch.left ?? 0,
13782
- top: ch.top ?? 0,
13783
- angle: ch.angle ?? 0
13784
- };
13785
- }
13786
- }
13787
- const snap = obj.__asRotAwareSnap;
13788
- const asAngle = snap.angle;
13789
- const effAxisScale = isXSide ? (obj.scaleX ?? 1) / (snap.scaleX || 1) : (obj.scaleY ?? 1) / (snap.scaleY || 1);
13790
- obj._set("scaleX", snap.scaleX);
13791
- obj._set("scaleY", snap.scaleY);
13792
- for (const child of obj.getObjects()) {
13793
- const cSnap = child.__asRotAwareChild;
13794
- if (!cSnap) continue;
13795
- const relAngleRad = (cSnap.angle - asAngle) * Math.PI / 180;
13796
- const proj = Math.abs(Math.cos(relAngleRad));
13797
- const effChildScale = 1 + (effAxisScale - 1) * proj;
13798
- if (child instanceof fabric__namespace.Textbox) {
13799
- if (isXSide) {
13800
- const origVisW = cSnap.width * (cSnap.scaleX || 1);
13801
- const newW = Math.max(20, origVisW * effChildScale);
13802
- if (Math.abs((child.width ?? 0) - newW) > 0.5) {
13803
- child._set("width", newW);
13804
- child._set("scaleX", cSnap.scaleX);
13805
- try {
13806
- child.initDimensions();
13807
- } catch {
13808
- }
13809
- }
13810
- } else {
13811
- const origVisH = cSnap.height * (cSnap.scaleY || 1);
13812
- const newH = Math.max(20, origVisH * effChildScale);
13813
- child.minBoxHeight = newH;
13814
- child._set("scaleY", cSnap.scaleY);
13815
- try {
13816
- child.initDimensions();
13817
- } catch {
13818
- }
13819
- }
13820
- } else if (child instanceof fabric__namespace.FabricImage && !child.__cropGroup && !child.smartElementType) {
13821
- if (isXSide) {
13822
- const origVisW = cSnap.width * (cSnap.scaleX || 1);
13823
- const newW = Math.max(1, origVisW * effChildScale);
13824
- child._set("width", newW);
13825
- child._set("scaleX", cSnap.scaleX);
13826
- } else {
13827
- const origVisH = cSnap.height * (cSnap.scaleY || 1);
13828
- const newH = Math.max(1, origVisH * effChildScale);
13829
- child._set("height", newH);
13830
- child._set("scaleY", cSnap.scaleY);
13831
- }
13832
- } else {
13833
- child._set("scaleX", (cSnap.scaleX || 1) * effChildScale);
13834
- child._set("scaleY", (cSnap.scaleY || 1) * effChildScale);
13835
- }
13836
- if (isXSide) {
13837
- child._set("left", cSnap.left * effAxisScale);
13838
- child._set("top", cSnap.top);
13839
- } else {
13840
- child._set("left", cSnap.left);
13841
- child._set("top", cSnap.top * effAxisScale);
13842
- }
13843
- child.setCoords();
13844
- child.dirty = true;
13845
- }
13846
- try {
13847
- obj.triggerLayout();
13848
- } catch {
13849
- }
13850
- obj.setCoords();
13851
- const aAfter = obj.aCoords;
13852
- const aBefore = snap.aCoords;
13853
- if (aBefore && aAfter) {
13854
- const midBefore = corner === "ml" ? { x: (aBefore.tr.x + aBefore.br.x) / 2, y: (aBefore.tr.y + aBefore.br.y) / 2 } : corner === "mr" ? { x: (aBefore.tl.x + aBefore.bl.x) / 2, y: (aBefore.tl.y + aBefore.bl.y) / 2 } : corner === "mt" ? { x: (aBefore.bl.x + aBefore.br.x) / 2, y: (aBefore.bl.y + aBefore.br.y) / 2 } : { x: (aBefore.tl.x + aBefore.tr.x) / 2, y: (aBefore.tl.y + aBefore.tr.y) / 2 };
13855
- const midAfter = corner === "ml" ? { x: (aAfter.tr.x + aAfter.br.x) / 2, y: (aAfter.tr.y + aAfter.br.y) / 2 } : corner === "mr" ? { x: (aAfter.tl.x + aAfter.bl.x) / 2, y: (aAfter.tl.y + aAfter.bl.y) / 2 } : corner === "mt" ? { x: (aAfter.bl.x + aAfter.br.x) / 2, y: (aAfter.bl.y + aAfter.br.y) / 2 } : { x: (aAfter.tl.x + aAfter.tr.x) / 2, y: (aAfter.tl.y + aAfter.tr.y) / 2 };
13856
- const dx = midBefore.x - midAfter.x;
13857
- const dy = midBefore.y - midAfter.y;
13858
- if (Math.abs(dx) > 0.01 || Math.abs(dy) > 0.01) {
13859
- obj._set("left", (obj.left ?? 0) + dx);
13860
- obj._set("top", (obj.top ?? 0) + dy);
13861
- obj.setCoords();
13862
- }
13863
- }
13864
- obj.dirty = true;
13865
- return;
13866
- }
13867
13757
  if (isXSide && ((_b2 = groupShiftReflowSnapshotRef.current) == null ? void 0 : _b2.selection) !== obj) {
13868
13758
  groupShiftReflowSnapshotRef.current = null;
13869
13759
  const logicalGroupId = obj.__pixldocsGroupSelection;
@@ -14364,9 +14254,7 @@ const PageCanvas = react.forwardRef(
14364
14254
  for (const child of t.getObjects()) {
14365
14255
  delete child.__asLiveOrigW;
14366
14256
  delete child.__asLiveOrigH;
14367
- delete child.__asRotAwareChild;
14368
14257
  }
14369
- delete t.__asRotAwareSnap;
14370
14258
  }
14371
14259
  } catch {
14372
14260
  }
@@ -14890,6 +14778,9 @@ const PageCanvas = react.forwardRef(
14890
14778
  let finalScaleX = decomposed.scaleX;
14891
14779
  let finalScaleY = decomposed.scaleY;
14892
14780
  let finalAbsoluteMatrix = absoluteMatrix;
14781
+ let finalAngle = decomposed.angle;
14782
+ let finalSkewX = decomposed.skewX;
14783
+ let finalSkewY = decomposed.skewY;
14893
14784
  if (obj instanceof fabric__namespace.Group && obj.__cropGroup) {
14894
14785
  const ct = obj.__cropData;
14895
14786
  if (ct) {
@@ -14946,6 +14837,11 @@ const PageCanvas = react.forwardRef(
14946
14837
  finalHeight = bakedH;
14947
14838
  finalScaleX = 1;
14948
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
+ }
14949
14845
  obj.set({ scaleX: 1, scaleY: 1 });
14950
14846
  const newSrc = renderSmartElementToDataUri(sourceElement.smartElementType, sourceElement.smartProps, bakedW, bakedH);
14951
14847
  if (newSrc) {
@@ -14996,20 +14892,7 @@ const PageCanvas = react.forwardRef(
14996
14892
  obj.set({ scaleX: localScaleX, scaleY: localScaleY });
14997
14893
  const selectionMatrix = (_g = activeObj == null ? void 0 : activeObj.calcTransformMatrix) == null ? void 0 : _g.call(activeObj);
14998
14894
  const localCenter = selectionMatrix ? fabric__namespace.util.transformPoint(preBakeCenter, fabric__namespace.util.invertTransform(selectionMatrix)) : preBakeCenter;
14999
- const localWidth = bakedW * localScaleX;
15000
- const localHeight = bakedH * localScaleY;
15001
- const isCenterOrigin = obj.originX === "center" || obj.originY === "center";
15002
- if (isCenterOrigin) {
15003
- obj.set({
15004
- left: localCenter.x,
15005
- top: localCenter.y
15006
- });
15007
- } else {
15008
- obj.set({
15009
- left: localCenter.x - localWidth / 2,
15010
- top: localCenter.y - localHeight / 2
15011
- });
15012
- }
14895
+ obj.setPositionByOrigin(localCenter, "center", "center");
15013
14896
  }
15014
14897
  obj.dirty = true;
15015
14898
  if (activeObj) activeObj.dirty = true;
@@ -15020,33 +14903,29 @@ const PageCanvas = react.forwardRef(
15020
14903
  finalHeight = bakedH;
15021
14904
  finalScaleX = 1;
15022
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
+ }
15023
14911
  try {
15024
- const angleRad = (decomposed.angle ?? 0) * Math.PI / 180;
14912
+ const angleRad = (finalAngle ?? 0) * Math.PI / 180;
15025
14913
  const cos = Math.cos(angleRad);
15026
14914
  const sin = Math.sin(angleRad);
15027
14915
  const hw = finalWidth / 2;
15028
14916
  const hh = finalHeight / 2;
15029
- const corners = [
15030
- { x: -hw, y: -hh },
15031
- { x: hw, y: -hh },
15032
- { x: hw, y: hh },
15033
- { x: -hw, y: hh }
15034
- ].map((p) => ({
15035
- x: decomposed.translateX + p.x * cos - p.y * sin,
15036
- y: decomposed.translateY + p.x * sin + p.y * cos
15037
- }));
15038
- absoluteLeft = Math.min(...corners.map((p) => p.x));
15039
- absoluteTop = Math.min(...corners.map((p) => p.y));
14917
+ absoluteLeft = decomposed.translateX - hw * cos + hh * sin;
14918
+ absoluteTop = decomposed.translateY - hw * sin - hh * cos;
15040
14919
  } catch {
15041
14920
  }
15042
14921
  finalAbsoluteMatrix = fabric__namespace.util.composeMatrix({
15043
14922
  translateX: decomposed.translateX,
15044
14923
  translateY: decomposed.translateY,
15045
- angle: decomposed.angle ?? 0,
14924
+ angle: finalAngle ?? 0,
15046
14925
  scaleX: 1,
15047
14926
  scaleY: 1,
15048
- skewX: 0,
15049
- skewY: 0
14927
+ skewX: finalSkewX ?? 0,
14928
+ skewY: finalSkewY ?? 0
15050
14929
  });
15051
14930
  } else {
15052
14931
  finalWidth = intrinsicWidth;
@@ -15057,6 +14936,11 @@ const PageCanvas = react.forwardRef(
15057
14936
  finalHeight = 0;
15058
14937
  finalScaleX = 1;
15059
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
+ }
15060
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)) {
15061
14945
  const sx = Math.abs(decomposed.scaleX || 1);
15062
14946
  const sy = Math.abs(decomposed.scaleY || 1);
@@ -15127,12 +15011,7 @@ const PageCanvas = react.forwardRef(
15127
15011
  obj.set({ scaleX: localScaleX, scaleY: localScaleY });
15128
15012
  const selectionMatrix = (_h = activeObj == null ? void 0 : activeObj.calcTransformMatrix) == null ? void 0 : _h.call(activeObj);
15129
15013
  const localCenter = selectionMatrix ? fabric__namespace.util.transformPoint(preBakeCenter, fabric__namespace.util.invertTransform(selectionMatrix)) : preBakeCenter;
15130
- const localWidth = bakedWidth * localScaleX;
15131
- const localHeight = (obj.height ?? intrinsicHeight) * localScaleY;
15132
- obj.set({
15133
- left: localCenter.x - localWidth / 2,
15134
- top: localCenter.y - localHeight / 2
15135
- });
15014
+ obj.setPositionByOrigin(localCenter, "center", "center");
15136
15015
  } else {
15137
15016
  obj.setPositionByOrigin(preBakeCenter, "center", "center");
15138
15017
  }
@@ -15145,32 +15024,23 @@ const PageCanvas = react.forwardRef(
15145
15024
  } catch {
15146
15025
  }
15147
15026
  try {
15148
- const angleRad = (decomposed.angle ?? 0) * Math.PI / 180;
15027
+ const angleRad = (finalAngle ?? 0) * Math.PI / 180;
15149
15028
  const cos = Math.cos(angleRad);
15150
15029
  const sin = Math.sin(angleRad);
15151
15030
  const hw = finalWidth / 2;
15152
15031
  const hh = finalHeight / 2;
15153
- const corners = [
15154
- { x: -hw, y: -hh },
15155
- { x: hw, y: -hh },
15156
- { x: hw, y: hh },
15157
- { x: -hw, y: hh }
15158
- ].map((p) => ({
15159
- x: decomposed.translateX + p.x * cos - p.y * sin,
15160
- y: decomposed.translateY + p.x * sin + p.y * cos
15161
- }));
15162
- absoluteLeft = Math.min(...corners.map((p) => p.x));
15163
- absoluteTop = Math.min(...corners.map((p) => p.y));
15032
+ absoluteLeft = decomposed.translateX - hw * cos + hh * sin;
15033
+ absoluteTop = decomposed.translateY - hw * sin - hh * cos;
15164
15034
  } catch {
15165
15035
  }
15166
15036
  finalAbsoluteMatrix = fabric__namespace.util.composeMatrix({
15167
15037
  translateX: decomposed.translateX,
15168
15038
  translateY: decomposed.translateY,
15169
- angle: decomposed.angle ?? 0,
15039
+ angle: finalAngle ?? 0,
15170
15040
  scaleX: 1,
15171
15041
  scaleY: 1,
15172
- skewX: 0,
15173
- skewY: 0
15042
+ skewX: finalSkewX ?? 0,
15043
+ skewY: finalSkewY ?? 0
15174
15044
  });
15175
15045
  if (debugGroupTextCornerResize) {
15176
15046
  logGroupTextResizeDebug("text-bake", {
@@ -15237,9 +15107,9 @@ const PageCanvas = react.forwardRef(
15237
15107
  // so finalWidth already reflects the new width chosen by the user.
15238
15108
  width: finalWidth,
15239
15109
  height: isLineObj ? 0 : isAutoShrinkText ? typeof autoShrinkStoredHeight === "number" ? autoShrinkStoredHeight : finalHeight : finalHeight,
15240
- angle: decomposed.angle,
15241
- skewX: isLineObj ? 0 : decomposed.skewX,
15242
- skewY: isLineObj ? 0 : decomposed.skewY,
15110
+ angle: finalAngle,
15111
+ skewX: isLineObj ? 0 : finalSkewX,
15112
+ skewY: isLineObj ? 0 : finalSkewY,
15243
15113
  scaleX: finalScaleX,
15244
15114
  scaleY: finalScaleY,
15245
15115
  transformMatrix: finalAbsoluteMatrix
@@ -24393,9 +24263,9 @@ function captureFabricCanvasSvgForPdf(fabricInstance, canvasWidth, canvasHeight)
24393
24263
  }
24394
24264
  return svgString;
24395
24265
  }
24396
- const resolvedPackageVersion = "0.5.324";
24266
+ const resolvedPackageVersion = "0.5.326";
24397
24267
  const PACKAGE_VERSION = resolvedPackageVersion;
24398
- const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.324";
24268
+ const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.326";
24399
24269
  const roundParityValue = (value) => {
24400
24270
  if (typeof value !== "number") return value;
24401
24271
  return Number.isFinite(value) ? Number(value.toFixed(3)) : value;
@@ -25209,7 +25079,7 @@ class PixldocsRenderer {
25209
25079
  await this.waitForCanvasScene(container, cloned, i);
25210
25080
  }
25211
25081
  console.log(`[canvas-renderer][pdf-unified] mounted ${cloned.pages.length} page(s), handing off to client exportMultiPagePdf`);
25212
- const { exportMultiPagePdf, preparePagesForExport } = await Promise.resolve().then(() => require("./vectorPdfExport-DYMHC1Zs.cjs"));
25082
+ const { exportMultiPagePdf, preparePagesForExport } = await Promise.resolve().then(() => require("./vectorPdfExport-CtjZ9wQ_.cjs"));
25213
25083
  const prepared = preparePagesForExport(
25214
25084
  cloned.pages,
25215
25085
  canvasWidth,
@@ -27529,7 +27399,7 @@ async function prepareLiveCanvasSvgForPdf(rawSvg, pageWidth, pageHeight, pageKey
27529
27399
  if (options == null ? void 0 : options.stripPageBackground) stripRootPageBackgroundFromSvg(svgToDraw);
27530
27400
  sanitizeSvgTreeForPdf(svgToDraw);
27531
27401
  try {
27532
- const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await Promise.resolve().then(() => require("./vectorPdfExport-DYMHC1Zs.cjs"));
27402
+ const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await Promise.resolve().then(() => require("./vectorPdfExport-CtjZ9wQ_.cjs"));
27533
27403
  try {
27534
27404
  await logTextMeasurementDiagnostic(svgToDraw);
27535
27405
  } catch {
@@ -27926,4 +27796,4 @@ exports.setAutoShrinkDebug = setAutoShrinkDebug;
27926
27796
  exports.setBundledAssetPrefixes = setBundledAssetPrefixes;
27927
27797
  exports.warmResolvedTemplateForPreview = warmResolvedTemplateForPreview;
27928
27798
  exports.warmTemplateFromForm = warmTemplateFromForm;
27929
- //# sourceMappingURL=index-DPUc5rGE.cjs.map
27799
+ //# sourceMappingURL=index-MMaqERXX.cjs.map