@pixldocs/canvas-renderer 0.5.461 → 0.5.462

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.
@@ -4431,8 +4431,12 @@ async function loadImageAsync(element, placeholder, fc, fabricRef, syncLockedRef
4431
4431
  const elementHeight2 = Number(element.height) * (element.scaleY ?? 1);
4432
4432
  const scaledImageWidth = imgNaturalWidth * baseScaleX;
4433
4433
  const scaledImageHeight = imgNaturalHeight * baseScaleY;
4434
- const imageLeft = (elementWidth2 - scaledImageWidth) / 2;
4435
- const imageTop = (elementHeight2 - scaledImageHeight) / 2;
4434
+ const alignH = element.imageAlignH ?? "center";
4435
+ const alignV = element.imageAlignV ?? "middle";
4436
+ const slackX = elementWidth2 - scaledImageWidth;
4437
+ const slackY = elementHeight2 - scaledImageHeight;
4438
+ const imageLeft = imageFit2 === "contain" ? alignH === "left" ? 0 : alignH === "right" ? slackX : slackX / 2 : slackX / 2;
4439
+ const imageTop = imageFit2 === "contain" ? alignV === "top" ? 0 : alignV === "bottom" ? slackY : slackY / 2 : slackY / 2;
4436
4440
  img.set({
4437
4441
  originX: "left",
4438
4442
  originY: "top",
@@ -5231,8 +5235,19 @@ function updateCoverLayout(g) {
5231
5235
  const overflowY = Math.max(0, dispH - frameH);
5232
5236
  const panX = clamp$1(img._ct.panX ?? 0.5, 0, 1);
5233
5237
  const panY = clamp$1(img._ct.panY ?? 0.5, 0, 1);
5234
- const offsetX = fitContain ? 0 : overflowX > 0 ? -overflowX * (panX - 0.5) : 0;
5235
- const offsetY = fitContain ? 0 : overflowY > 0 ? -overflowY * (panY - 0.5) : 0;
5238
+ let offsetX = 0;
5239
+ let offsetY = 0;
5240
+ if (fitContain) {
5241
+ const alignH = ct.alignH ?? "center";
5242
+ const alignV = ct.alignV ?? "middle";
5243
+ const slackX = Math.max(0, frameW - dispW);
5244
+ const slackY = Math.max(0, frameH - dispH);
5245
+ offsetX = alignH === "left" ? -slackX / 2 : alignH === "right" ? slackX / 2 : 0;
5246
+ offsetY = alignV === "top" ? -slackY / 2 : alignV === "bottom" ? slackY / 2 : 0;
5247
+ } else {
5248
+ offsetX = overflowX > 0 ? -overflowX * (panX - 0.5) : 0;
5249
+ offsetY = overflowY > 0 ? -overflowY * (panY - 0.5) : 0;
5250
+ }
5236
5251
  img.set({ left: offsetX, top: offsetY });
5237
5252
  g.dirty = true;
5238
5253
  img.dirty = true;
@@ -5605,7 +5620,10 @@ async function createMaskedImageElement({
5605
5620
  visible = true,
5606
5621
  panX = 0.5,
5607
5622
  panY = 0.5,
5608
- zoom = 1
5623
+ zoom = 1,
5624
+ fit = "cover",
5625
+ alignH = "center",
5626
+ alignV = "middle"
5609
5627
  }) {
5610
5628
  const img = image || (url ? await fabric__namespace.FabricImage.fromURL(getProxiedImageUrl(url), { crossOrigin: "anonymous" }) : null);
5611
5629
  if (!img) {
@@ -5724,8 +5742,12 @@ async function createMaskedImageElement({
5724
5742
  rx,
5725
5743
  frameW,
5726
5744
  frameH,
5727
- fit: "cover",
5728
- // clip image to frame; use 'contain' only when simple-scale mode is set
5745
+ // Honor the element's authored imageFit. When 'contain', the image is
5746
+ // scaled to fit fully inside the frame (no clipping) and alignH/alignV
5747
+ // control where the letterboxed image sits.
5748
+ fit,
5749
+ alignH,
5750
+ alignV,
5729
5751
  _img: img,
5730
5752
  _border: border
5731
5753
  };
@@ -19634,7 +19656,13 @@ const PageCanvas = react.forwardRef(
19634
19656
  visible: !isHidden,
19635
19657
  panX,
19636
19658
  panY,
19637
- zoom: zoom2
19659
+ zoom: zoom2,
19660
+ // Honor authored Object Fit + alignment so contain logos render
19661
+ // fully inside the frame, with letterbox aligned to the chosen
19662
+ // edge (instead of being silently cover-cropped).
19663
+ fit: imageFitFinal === "contain" ? "contain" : "cover",
19664
+ alignH: element.imageAlignH ?? "center",
19665
+ alignV: element.imageAlignV ?? "middle"
19638
19666
  });
19639
19667
  cropGroup.__maintainResolution = element.maintainResolution !== false;
19640
19668
  cropGroup.set({
@@ -26241,9 +26269,9 @@ function captureFabricCanvasSvgForPdf(fabricInstance, canvasWidth, canvasHeight)
26241
26269
  }
26242
26270
  return svgString;
26243
26271
  }
26244
- const resolvedPackageVersion = "0.5.461";
26272
+ const resolvedPackageVersion = "0.5.462";
26245
26273
  const PACKAGE_VERSION = resolvedPackageVersion;
26246
- const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.461";
26274
+ const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.462";
26247
26275
  const roundParityValue = (value) => {
26248
26276
  if (typeof value !== "number") return value;
26249
26277
  return Number.isFinite(value) ? Number(value.toFixed(3)) : value;
@@ -27057,7 +27085,7 @@ class PixldocsRenderer {
27057
27085
  await this.waitForCanvasScene(container, cloned, i);
27058
27086
  }
27059
27087
  console.log(`[canvas-renderer][pdf-unified] mounted ${cloned.pages.length} page(s), handing off to client exportMultiPagePdf`);
27060
- const { exportMultiPagePdf, preparePagesForExport } = await Promise.resolve().then(() => require("./vectorPdfExport-C7mmAR68.cjs"));
27088
+ const { exportMultiPagePdf, preparePagesForExport } = await Promise.resolve().then(() => require("./vectorPdfExport-IjuMSK-o.cjs"));
27061
27089
  const prepared = preparePagesForExport(
27062
27090
  cloned.pages,
27063
27091
  canvasWidth,
@@ -29377,7 +29405,7 @@ async function prepareLiveCanvasSvgForPdf(rawSvg, pageWidth, pageHeight, pageKey
29377
29405
  if (options == null ? void 0 : options.stripPageBackground) stripRootPageBackgroundFromSvg(svgToDraw);
29378
29406
  sanitizeSvgTreeForPdf(svgToDraw);
29379
29407
  try {
29380
- const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await Promise.resolve().then(() => require("./vectorPdfExport-C7mmAR68.cjs"));
29408
+ const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await Promise.resolve().then(() => require("./vectorPdfExport-IjuMSK-o.cjs"));
29381
29409
  try {
29382
29410
  await logTextMeasurementDiagnostic(svgToDraw);
29383
29411
  } catch {
@@ -29691,4 +29719,4 @@ exports.setAutoShrinkDebug = setAutoShrinkDebug;
29691
29719
  exports.setBundledAssetPrefixes = setBundledAssetPrefixes;
29692
29720
  exports.warmResolvedTemplateForPreview = warmResolvedTemplateForPreview;
29693
29721
  exports.warmTemplateFromForm = warmTemplateFromForm;
29694
- //# sourceMappingURL=index-D1sMo2it.cjs.map
29722
+ //# sourceMappingURL=index-DjoKgogq.cjs.map