@pixldocs/canvas-renderer 0.5.215 → 0.5.216

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.
@@ -19101,9 +19101,9 @@ function captureFabricCanvasSvgForPdf(fabricInstance, canvasWidth, canvasHeight)
19101
19101
  }
19102
19102
  return svgString;
19103
19103
  }
19104
- const resolvedPackageVersion = "0.5.215";
19104
+ const resolvedPackageVersion = "0.5.216";
19105
19105
  const PACKAGE_VERSION = resolvedPackageVersion;
19106
- const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.215";
19106
+ const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.216";
19107
19107
  const roundParityValue = (value) => {
19108
19108
  if (typeof value !== "number") return value;
19109
19109
  return Number.isFinite(value) ? Number(value.toFixed(3)) : value;
@@ -19795,7 +19795,7 @@ class PixldocsRenderer {
19795
19795
  await this.waitForCanvasScene(container, cloned, i);
19796
19796
  }
19797
19797
  console.log(`[canvas-renderer][pdf-unified] mounted ${cloned.pages.length} page(s), handing off to client exportMultiPagePdf`);
19798
- const { exportMultiPagePdf, preparePagesForExport } = await Promise.resolve().then(() => require("./vectorPdfExport-DUohXw5V.cjs"));
19798
+ const { exportMultiPagePdf, preparePagesForExport } = await Promise.resolve().then(() => require("./vectorPdfExport-K3LAdOXU.cjs"));
19799
19799
  const prepared = preparePagesForExport(
19800
19800
  cloned.pages,
19801
19801
  canvasWidth,
@@ -21737,6 +21737,9 @@ async function rasterizeShadowMarkers(svg) {
21737
21737
  const by = parseFloat(marker.getAttribute("data-by") || "0");
21738
21738
  const bw = parseFloat(marker.getAttribute("data-bw") || "0");
21739
21739
  const bh = parseFloat(marker.getAttribute("data-bh") || "0");
21740
+ const spread = parseFloat(marker.getAttribute("data-spread") || "0");
21741
+ const alphaRaw = parseFloat(marker.getAttribute("data-alpha") || "1");
21742
+ const shadowAlpha = Number.isFinite(alphaRaw) ? Math.max(0, Math.min(1, alphaRaw)) : 1;
21740
21743
  if (!Number.isFinite(bw) || !Number.isFinite(bh) || bw <= 0 || bh <= 0) {
21741
21744
  (_b = marker.parentNode) == null ? void 0 : _b.removeChild(marker);
21742
21745
  continue;
@@ -21760,7 +21763,8 @@ async function rasterizeShadowMarkers(svg) {
21760
21763
  const pxH = Math.min(4096, Math.max(8, Math.ceil(bh * scale)));
21761
21764
  const stdDev = Math.max(0, blur / 2);
21762
21765
  const filterId = `pdShadowBlur_${Math.random().toString(36).slice(2, 9)}`;
21763
- const styleBlock = fontFaceCss ? `<style>${fontFaceCss}</style>` : "";
21766
+ const spreadCss = spread > 0 ? `text,tspan,path{paint-order:stroke fill;stroke:currentColor;stroke-width:${spread.toFixed(3)}px;stroke-linejoin:round;stroke-linecap:round;}` : "";
21767
+ const styleBlock = fontFaceCss || spreadCss ? `<style>${fontFaceCss}${spreadCss}</style>` : "";
21764
21768
  const miniSvg = `<svg xmlns="${SVG_NS}" xmlns:xlink="${XLINK_NS}" width="${pxW}" height="${pxH}" viewBox="${bx} ${by} ${bw} ${bh}">${styleBlock}<defs><filter id="${filterId}" filterUnits="userSpaceOnUse" x="${bx}" y="${by}" width="${bw}" height="${bh}" color-interpolation-filters="sRGB"><feOffset dx="${ox}" dy="${oy}" result="offsetShadow" /><feGaussianBlur in="offsetShadow" stdDeviation="${stdDev}" /></filter></defs><g filter="url(#${filterId})">${innerXml}</g></svg>`;
21765
21769
  const dataUrl = await rasterSvgToPngDataUrl(miniSvg, pxW, pxH);
21766
21770
  if (!dataUrl) {
@@ -21775,7 +21779,7 @@ async function rasterizeShadowMarkers(svg) {
21775
21779
  img.setAttribute("preserveAspectRatio", "none");
21776
21780
  img.setAttributeNS(XLINK_NS, "xlink:href", dataUrl);
21777
21781
  img.setAttribute("href", dataUrl);
21778
- img.setAttribute("opacity", String(SHADOW_RASTER_ALPHA_COMPENSATION));
21782
+ img.setAttribute("opacity", String(SHADOW_RASTER_ALPHA_COMPENSATION * shadowAlpha));
21779
21783
  (_e = marker.parentNode) == null ? void 0 : _e.replaceChild(img, marker);
21780
21784
  } catch (e) {
21781
21785
  console.warn("[pdf-export] rasterizeShadowMarkers failed for one marker:", e);
@@ -21981,7 +21985,7 @@ async function prepareLiveCanvasSvgForPdf(rawSvg, pageWidth, pageHeight, pageKey
21981
21985
  if (options == null ? void 0 : options.stripPageBackground) stripRootPageBackgroundFromSvg(svgToDraw);
21982
21986
  sanitizeSvgTreeForPdf(svgToDraw);
21983
21987
  try {
21984
- const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await Promise.resolve().then(() => require("./vectorPdfExport-DUohXw5V.cjs"));
21988
+ const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await Promise.resolve().then(() => require("./vectorPdfExport-K3LAdOXU.cjs"));
21985
21989
  try {
21986
21990
  await logTextMeasurementDiagnostic(svgToDraw);
21987
21991
  } catch {
@@ -22378,4 +22382,4 @@ exports.setAutoShrinkDebug = setAutoShrinkDebug;
22378
22382
  exports.setBundledAssetPrefixes = setBundledAssetPrefixes;
22379
22383
  exports.warmResolvedTemplateForPreview = warmResolvedTemplateForPreview;
22380
22384
  exports.warmTemplateFromForm = warmTemplateFromForm;
22381
- //# sourceMappingURL=index-CzwZcfGF.cjs.map
22385
+ //# sourceMappingURL=index-C5McWFUS.cjs.map