@pixldocs/canvas-renderer 0.5.465 → 0.5.466

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.
@@ -5261,6 +5261,53 @@ function updateCoverLayout(g) {
5261
5261
  g.canvas.requestRenderAll();
5262
5262
  }
5263
5263
  }
5264
+ function shrinkContainGroupToImageBounds(g) {
5265
+ const ct = g.__cropData;
5266
+ if (!ct || ct.fit !== "contain") return;
5267
+ const img = ct._img;
5268
+ if (!img) return;
5269
+ const clip = g.clipPath;
5270
+ if (clip && (isSvgMaskClipPath(clip) || isLuminanceMaskClipPath(clip) || clip.__svgMask || clip.__edgeFadeMask)) return;
5271
+ const iw = img.width || 0;
5272
+ const ih = img.height || 0;
5273
+ const sx = Math.abs(img.scaleX || 1);
5274
+ const sy = Math.abs(img.scaleY || 1);
5275
+ const dispW = iw * sx;
5276
+ const dispH = ih * sy;
5277
+ if (dispW <= 0 || dispH <= 0) return;
5278
+ const frameW = Number(ct.frameW) || g.width || dispW;
5279
+ const frameH = Number(ct.frameH) || g.height || dispH;
5280
+ const alignH = ct.alignH ?? "center";
5281
+ const alignV = ct.alignV ?? "middle";
5282
+ const slackX = frameW - dispW;
5283
+ const slackY = frameH - dispH;
5284
+ const offsetX = alignH === "left" ? -slackX / 2 : alignH === "right" ? slackX / 2 : 0;
5285
+ const offsetY = alignV === "top" ? -slackY / 2 : alignV === "bottom" ? slackY / 2 : 0;
5286
+ const angleRad = fabric__namespace.util.degreesToRadians(g.angle || 0);
5287
+ const cos = Math.cos(angleRad);
5288
+ const sin = Math.sin(angleRad);
5289
+ const worldDx = offsetX * cos - offsetY * sin;
5290
+ const worldDy = offsetX * sin + offsetY * cos;
5291
+ g.set({
5292
+ left: (g.left || 0) + worldDx,
5293
+ top: (g.top || 0) + worldDy,
5294
+ width: dispW,
5295
+ height: dispH
5296
+ });
5297
+ img.set({ left: 0, top: 0 });
5298
+ if (clip) {
5299
+ if (clip instanceof fabric__namespace.Rect) {
5300
+ const rxRatio = Number(ct.rx) || 0;
5301
+ const rxPx = rxRatio > 0.5 ? Math.min(rxRatio, dispW / 2, dispH / 2) : Math.max(0, Math.min(rxRatio * Math.min(dispW, dispH), dispW / 2, dispH / 2));
5302
+ clip.set({ width: dispW, height: dispH, rx: rxPx, ry: rxPx });
5303
+ } else if (clip instanceof fabric__namespace.Ellipse) {
5304
+ clip.set({ rx: dispW / 2, ry: dispH / 2 });
5305
+ }
5306
+ clip.dirty = true;
5307
+ }
5308
+ g.dirty = true;
5309
+ g.setCoords();
5310
+ }
5264
5311
  function getDomEvent(eventData) {
5265
5312
  return (eventData == null ? void 0 : eventData.e) ?? eventData ?? null;
5266
5313
  }
@@ -17652,6 +17699,7 @@ const PageCanvas = react.forwardRef(
17652
17699
  ct.fit = elFit;
17653
17700
  }
17654
17701
  updateCoverLayout(existingObj);
17702
+ shrinkContainGroupToImageBounds(existingObj);
17655
17703
  applyEdgeFadeFrameClipPath(existingObj, element, ct.frameW, ct.frameH, ct.shape || "rect", ct.rx || 0);
17656
17704
  if (allowEditing) {
17657
17705
  installImageResizeControlsWithSnap(existingObj);
@@ -17759,6 +17807,7 @@ const PageCanvas = react.forwardRef(
17759
17807
  ctSync.alignV = element.imageAlignV ?? "middle";
17760
17808
  ctSync.containScale = Math.max(1, Math.min(3, Number(element.containScale ?? 1)));
17761
17809
  updateCoverLayout(existingObj);
17810
+ shrinkContainGroupToImageBounds(existingObj);
17762
17811
  existingObj.dirty = true;
17763
17812
  }
17764
17813
  }
@@ -19725,6 +19774,7 @@ const PageCanvas = react.forwardRef(
19725
19774
  updateCoverLayout(cropGroup);
19726
19775
  }
19727
19776
  applyEdgeFadeFrameClipPath(cropGroup, element, frameW, frameH, shape, rxRatio);
19777
+ shrinkContainGroupToImageBounds(cropGroup);
19728
19778
  setObjectData(cropGroup, element.id);
19729
19779
  cropGroup.__imageElement = cropImg;
19730
19780
  cropGroup.__imageSrc = imageUrl;
@@ -26308,9 +26358,9 @@ function captureFabricCanvasSvgForPdf(fabricInstance, canvasWidth, canvasHeight)
26308
26358
  }
26309
26359
  return svgString;
26310
26360
  }
26311
- const resolvedPackageVersion = "0.5.465";
26361
+ const resolvedPackageVersion = "0.5.466";
26312
26362
  const PACKAGE_VERSION = resolvedPackageVersion;
26313
- const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.465";
26363
+ const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.466";
26314
26364
  const roundParityValue = (value) => {
26315
26365
  if (typeof value !== "number") return value;
26316
26366
  return Number.isFinite(value) ? Number(value.toFixed(3)) : value;
@@ -27124,7 +27174,7 @@ class PixldocsRenderer {
27124
27174
  await this.waitForCanvasScene(container, cloned, i);
27125
27175
  }
27126
27176
  console.log(`[canvas-renderer][pdf-unified] mounted ${cloned.pages.length} page(s), handing off to client exportMultiPagePdf`);
27127
- const { exportMultiPagePdf, preparePagesForExport } = await Promise.resolve().then(() => require("./vectorPdfExport-Bsd1V19b.cjs"));
27177
+ const { exportMultiPagePdf, preparePagesForExport } = await Promise.resolve().then(() => require("./vectorPdfExport-DldoIDUl.cjs"));
27128
27178
  const prepared = preparePagesForExport(
27129
27179
  cloned.pages,
27130
27180
  canvasWidth,
@@ -29444,7 +29494,7 @@ async function prepareLiveCanvasSvgForPdf(rawSvg, pageWidth, pageHeight, pageKey
29444
29494
  if (options == null ? void 0 : options.stripPageBackground) stripRootPageBackgroundFromSvg(svgToDraw);
29445
29495
  sanitizeSvgTreeForPdf(svgToDraw);
29446
29496
  try {
29447
- const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await Promise.resolve().then(() => require("./vectorPdfExport-Bsd1V19b.cjs"));
29497
+ const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await Promise.resolve().then(() => require("./vectorPdfExport-DldoIDUl.cjs"));
29448
29498
  try {
29449
29499
  await logTextMeasurementDiagnostic(svgToDraw);
29450
29500
  } catch {
@@ -29758,4 +29808,4 @@ exports.setAutoShrinkDebug = setAutoShrinkDebug;
29758
29808
  exports.setBundledAssetPrefixes = setBundledAssetPrefixes;
29759
29809
  exports.warmResolvedTemplateForPreview = warmResolvedTemplateForPreview;
29760
29810
  exports.warmTemplateFromForm = warmTemplateFromForm;
29761
- //# sourceMappingURL=index-Co301SkV.cjs.map
29811
+ //# sourceMappingURL=index-CJitUO8J.cjs.map