@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.
@@ -19083,9 +19083,9 @@ function captureFabricCanvasSvgForPdf(fabricInstance, canvasWidth, canvasHeight)
19083
19083
  }
19084
19084
  return svgString;
19085
19085
  }
19086
- const resolvedPackageVersion = "0.5.215";
19086
+ const resolvedPackageVersion = "0.5.216";
19087
19087
  const PACKAGE_VERSION = resolvedPackageVersion;
19088
- const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.215";
19088
+ const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.216";
19089
19089
  const roundParityValue = (value) => {
19090
19090
  if (typeof value !== "number") return value;
19091
19091
  return Number.isFinite(value) ? Number(value.toFixed(3)) : value;
@@ -19777,7 +19777,7 @@ class PixldocsRenderer {
19777
19777
  await this.waitForCanvasScene(container, cloned, i);
19778
19778
  }
19779
19779
  console.log(`[canvas-renderer][pdf-unified] mounted ${cloned.pages.length} page(s), handing off to client exportMultiPagePdf`);
19780
- const { exportMultiPagePdf, preparePagesForExport } = await import("./vectorPdfExport-CN1fcrfR.js");
19780
+ const { exportMultiPagePdf, preparePagesForExport } = await import("./vectorPdfExport-DZD415Qf.js");
19781
19781
  const prepared = preparePagesForExport(
19782
19782
  cloned.pages,
19783
19783
  canvasWidth,
@@ -21719,6 +21719,9 @@ async function rasterizeShadowMarkers(svg) {
21719
21719
  const by = parseFloat(marker.getAttribute("data-by") || "0");
21720
21720
  const bw = parseFloat(marker.getAttribute("data-bw") || "0");
21721
21721
  const bh = parseFloat(marker.getAttribute("data-bh") || "0");
21722
+ const spread = parseFloat(marker.getAttribute("data-spread") || "0");
21723
+ const alphaRaw = parseFloat(marker.getAttribute("data-alpha") || "1");
21724
+ const shadowAlpha = Number.isFinite(alphaRaw) ? Math.max(0, Math.min(1, alphaRaw)) : 1;
21722
21725
  if (!Number.isFinite(bw) || !Number.isFinite(bh) || bw <= 0 || bh <= 0) {
21723
21726
  (_b = marker.parentNode) == null ? void 0 : _b.removeChild(marker);
21724
21727
  continue;
@@ -21742,7 +21745,8 @@ async function rasterizeShadowMarkers(svg) {
21742
21745
  const pxH = Math.min(4096, Math.max(8, Math.ceil(bh * scale)));
21743
21746
  const stdDev = Math.max(0, blur / 2);
21744
21747
  const filterId = `pdShadowBlur_${Math.random().toString(36).slice(2, 9)}`;
21745
- const styleBlock = fontFaceCss ? `<style>${fontFaceCss}</style>` : "";
21748
+ 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;}` : "";
21749
+ const styleBlock = fontFaceCss || spreadCss ? `<style>${fontFaceCss}${spreadCss}</style>` : "";
21746
21750
  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>`;
21747
21751
  const dataUrl = await rasterSvgToPngDataUrl(miniSvg, pxW, pxH);
21748
21752
  if (!dataUrl) {
@@ -21757,7 +21761,7 @@ async function rasterizeShadowMarkers(svg) {
21757
21761
  img.setAttribute("preserveAspectRatio", "none");
21758
21762
  img.setAttributeNS(XLINK_NS, "xlink:href", dataUrl);
21759
21763
  img.setAttribute("href", dataUrl);
21760
- img.setAttribute("opacity", String(SHADOW_RASTER_ALPHA_COMPENSATION));
21764
+ img.setAttribute("opacity", String(SHADOW_RASTER_ALPHA_COMPENSATION * shadowAlpha));
21761
21765
  (_e = marker.parentNode) == null ? void 0 : _e.replaceChild(img, marker);
21762
21766
  } catch (e) {
21763
21767
  console.warn("[pdf-export] rasterizeShadowMarkers failed for one marker:", e);
@@ -21963,7 +21967,7 @@ async function prepareLiveCanvasSvgForPdf(rawSvg, pageWidth, pageHeight, pageKey
21963
21967
  if (options == null ? void 0 : options.stripPageBackground) stripRootPageBackgroundFromSvg(svgToDraw);
21964
21968
  sanitizeSvgTreeForPdf(svgToDraw);
21965
21969
  try {
21966
- const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await import("./vectorPdfExport-CN1fcrfR.js");
21970
+ const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await import("./vectorPdfExport-DZD415Qf.js");
21967
21971
  try {
21968
21972
  await logTextMeasurementDiagnostic(svgToDraw);
21969
21973
  } catch {
@@ -22363,4 +22367,4 @@ export {
22363
22367
  buildTeaserBlurFlatKeys as y,
22364
22368
  collectFontDescriptorsFromConfig as z
22365
22369
  };
22366
- //# sourceMappingURL=index-BV_MP9XQ.js.map
22370
+ //# sourceMappingURL=index-Bpa0-8Hq.js.map