@pixldocs/canvas-renderer 0.5.213 → 0.5.214

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.
@@ -6902,9 +6902,9 @@ function buildTextShadow(element) {
6902
6902
  if (!color || color === "transparent") return null;
6903
6903
  const type = element.textShadowType;
6904
6904
  if (type && type !== "drop") return null;
6905
- const { passAlphas } = resolveShadowStrength(element);
6906
- const firstAlpha = passAlphas.length > 0 ? passAlphas[0] : 0;
6907
- const finalColor = applyAlphaMultiplier(String(color), firstAlpha);
6905
+ const alpha = resolveShadowAlpha(element);
6906
+ if (alpha <= 0) return null;
6907
+ const finalColor = applyAlphaMultiplier(String(color), alpha);
6908
6908
  return new fabric__namespace.Shadow({
6909
6909
  color: finalColor,
6910
6910
  blur: blur || 0,
@@ -6914,67 +6914,27 @@ function buildTextShadow(element) {
6914
6914
  nonScaling: false
6915
6915
  });
6916
6916
  }
6917
- function resolveShadowStrength(element) {
6917
+ function resolveShadowAlpha(element) {
6918
6918
  const raw = element.textShadowStrength;
6919
- const s = typeof raw === "number" && Number.isFinite(raw) ? Math.max(0, Math.min(100, raw)) : 33.34;
6920
- if (s <= 0) return { passAlphas: [] };
6921
- const intensity = Math.min(3, s / 33.34);
6922
- if (intensity <= 1) return { passAlphas: [intensity] };
6923
- const full = Math.floor(intensity);
6924
- const frac = intensity - full;
6925
- const arr = new Array(full).fill(1);
6926
- if (frac > 0.01) arr.push(frac);
6927
- return { passAlphas: arr };
6919
+ const s = typeof raw === "number" && Number.isFinite(raw) ? Math.max(0, Math.min(100, raw)) : 100;
6920
+ return s / 100;
6928
6921
  }
6929
6922
  function applyTextShadow(textbox, element) {
6930
6923
  const canonicalShadow = buildTextShadow(element);
6931
- const { passAlphas } = resolveShadowStrength(element);
6932
- const baseColor = element.textShadowColor;
6933
- const blur = Number(element.textShadowBlur ?? 0) || 0;
6934
- const ox = Number(element.textShadowOffsetX ?? 0) || 0;
6935
- const oy = Number(element.textShadowOffsetY ?? 0) || 0;
6936
- const hasShadow = !!canonicalShadow && passAlphas.length > 0;
6937
6924
  const obj = textbox;
6938
- if (!obj.__pdShadowOrigRender) {
6939
- obj.__pdShadowOrigRender = obj.render.bind(obj);
6940
- obj.render = function(ctx) {
6941
- const alphas = obj.__pdShadowPassAlphas;
6942
- if (!alphas || alphas.length <= 1) {
6943
- obj.__pdShadowOrigRender(ctx);
6944
- return;
6945
- }
6946
- const orig = obj.shadow;
6947
- const baseC = obj.__pdShadowBaseColor || "#000";
6948
- const b = obj.__pdShadowBlur || 0;
6949
- const x = obj.__pdShadowOX || 0;
6950
- const y = obj.__pdShadowOY || 0;
6951
- for (let i = 0; i < alphas.length; i++) {
6952
- obj.shadow = new fabric__namespace.Shadow({
6953
- color: applyAlphaMultiplier(String(baseC), alphas[i]),
6954
- blur: b,
6955
- offsetX: x,
6956
- offsetY: y,
6957
- affectStroke: false,
6958
- nonScaling: false
6959
- });
6960
- obj.__pdShadowOrigRender(ctx);
6961
- }
6962
- obj.shadow = orig;
6963
- };
6964
- }
6965
- if (hasShadow) {
6966
- obj.__pdShadowPassAlphas = passAlphas;
6967
- obj.__pdShadowBaseColor = baseColor;
6968
- obj.__pdShadowBlur = blur;
6969
- obj.__pdShadowOX = ox;
6970
- obj.__pdShadowOY = oy;
6971
- obj.__pdShadowPasses = passAlphas.length;
6972
- obj.__pdShadowLastAlpha = passAlphas[passAlphas.length - 1];
6973
- } else {
6925
+ if (obj.__pdShadowOrigRender) {
6926
+ try {
6927
+ obj.render = obj.__pdShadowOrigRender;
6928
+ } catch {
6929
+ }
6930
+ obj.__pdShadowOrigRender = void 0;
6974
6931
  obj.__pdShadowPassAlphas = void 0;
6975
- obj.__pdShadowPasses = 0;
6976
- obj.__pdShadowLastAlpha = 1;
6932
+ obj.__pdShadowBaseColor = void 0;
6933
+ obj.__pdShadowBlur = void 0;
6934
+ obj.__pdShadowOX = void 0;
6935
+ obj.__pdShadowOY = void 0;
6977
6936
  }
6937
+ obj.__pdShadowAlpha = canonicalShadow ? resolveShadowAlpha(element) : 1;
6978
6938
  textbox.set("shadow", canonicalShadow ?? null);
6979
6939
  }
6980
6940
  function applyAlphaMultiplier(c, mult) {
@@ -7356,10 +7316,9 @@ function applyTextBackground(obj, cfg) {
7356
7316
  const by = shadowBounds.y - pad;
7357
7317
  const bw = shadowBounds.w + pad * 2;
7358
7318
  const bh = shadowBounds.h + pad * 2;
7359
- const passes = Math.max(1, Math.min(8, Number(this.__pdShadowPasses) || 1));
7360
- const lastAlphaRaw = Number(this.__pdShadowLastAlpha);
7361
- const lastAlpha = Number.isFinite(lastAlphaRaw) ? Math.max(0, Math.min(1, lastAlphaRaw)) : 1;
7362
- const dataAttrs = `data-blur="${blur.toFixed(3)}" data-ox="${ox.toFixed(3)}" data-oy="${oy.toFixed(3)}" data-bx="${bx.toFixed(3)}" data-by="${by.toFixed(3)}" data-bw="${bw.toFixed(3)}" data-bh="${bh.toFixed(3)}" data-color="${escapeXmlAttr(shadowColor)}" data-passes="${passes}" data-last-alpha="${lastAlpha.toFixed(3)}"`;
7319
+ const alphaRaw = Number(this.__pdShadowAlpha);
7320
+ const shadowAlpha = Number.isFinite(alphaRaw) ? Math.max(0, Math.min(1, alphaRaw)) : 1;
7321
+ const dataAttrs = `data-blur="${blur.toFixed(3)}" data-ox="${ox.toFixed(3)}" data-oy="${oy.toFixed(3)}" data-bx="${bx.toFixed(3)}" data-by="${by.toFixed(3)}" data-bw="${bw.toFixed(3)}" data-bh="${bh.toFixed(3)}" data-color="${escapeXmlAttr(shadowColor)}" data-alpha="${shadowAlpha.toFixed(3)}"`;
7363
7322
  const wrapShadow = (markup) => blur <= 0 ? `<g transform="translate(${ox.toFixed(3)} ${oy.toFixed(3)})">${markup}</g>` : `<g class="__pdShadowRaster" ${dataAttrs}>${markup}</g>`;
7364
7323
  if (hasBg && (bg == null ? void 0 : bg.shadowAffectsBg) !== false) {
7365
7324
  const shadowOpacityAttr = bgOpacity < 1 ? ` fill-opacity="${bgOpacity}"` : "";
@@ -19075,9 +19034,9 @@ function captureFabricCanvasSvgForPdf(fabricInstance, canvasWidth, canvasHeight)
19075
19034
  }
19076
19035
  return svgString;
19077
19036
  }
19078
- const resolvedPackageVersion = "0.5.213";
19037
+ const resolvedPackageVersion = "0.5.214";
19079
19038
  const PACKAGE_VERSION = resolvedPackageVersion;
19080
- const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.213";
19039
+ const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.214";
19081
19040
  const roundParityValue = (value) => {
19082
19041
  if (typeof value !== "number") return value;
19083
19042
  return Number.isFinite(value) ? Number(value.toFixed(3)) : value;
@@ -19769,7 +19728,7 @@ class PixldocsRenderer {
19769
19728
  await this.waitForCanvasScene(container, cloned, i);
19770
19729
  }
19771
19730
  console.log(`[canvas-renderer][pdf-unified] mounted ${cloned.pages.length} page(s), handing off to client exportMultiPagePdf`);
19772
- const { exportMultiPagePdf, preparePagesForExport } = await Promise.resolve().then(() => require("./vectorPdfExport-krI8SwbX.cjs"));
19731
+ const { exportMultiPagePdf, preparePagesForExport } = await Promise.resolve().then(() => require("./vectorPdfExport-BBG0QRse.cjs"));
19773
19732
  const prepared = preparePagesForExport(
19774
19733
  cloned.pages,
19775
19734
  canvasWidth,
@@ -21691,7 +21650,7 @@ async function convertSvgTextDecorationsToLinesString(svgStr) {
21691
21650
  }
21692
21651
  }
21693
21652
  async function rasterizeShadowMarkers(svg) {
21694
- var _a, _b, _c, _d, _e, _f, _g;
21653
+ var _a, _b, _c, _d, _e, _f;
21695
21654
  if (typeof window === "undefined" || typeof document === "undefined") return;
21696
21655
  const markers = Array.from(svg.querySelectorAll("g.__pdShadowRaster"));
21697
21656
  if (markers.length === 0) return;
@@ -21746,29 +21705,17 @@ async function rasterizeShadowMarkers(svg) {
21746
21705
  img.setAttribute("y", String(by));
21747
21706
  img.setAttribute("width", String(bw));
21748
21707
  img.setAttribute("height", String(bh));
21749
- img.setAttribute("opacity", String(SHADOW_RASTER_ALPHA_COMPENSATION));
21750
21708
  img.setAttribute("preserveAspectRatio", "none");
21751
21709
  img.setAttributeNS(XLINK_NS, "xlink:href", dataUrl);
21752
21710
  img.setAttribute("href", dataUrl);
21753
- const passes = Math.max(1, Math.min(8, parseInt(marker.getAttribute("data-passes") || "1", 10) || 1));
21754
- const lastAlphaRaw = parseFloat(marker.getAttribute("data-last-alpha") || "1");
21755
- const lastAlpha = Number.isFinite(lastAlphaRaw) ? Math.max(0, Math.min(1, lastAlphaRaw)) : 1;
21756
- const baseOpacity = Number(img.getAttribute("opacity") || "1") || 1;
21711
+ const alphaRaw = parseFloat(marker.getAttribute("data-alpha") || "1");
21712
+ const shadowAlpha = Number.isFinite(alphaRaw) ? Math.max(0, Math.min(1, alphaRaw)) : 1;
21713
+ img.setAttribute("opacity", String(SHADOW_RASTER_ALPHA_COMPENSATION * shadowAlpha));
21757
21714
  (_e = marker.parentNode) == null ? void 0 : _e.replaceChild(img, marker);
21758
- for (let i = 1; i < passes; i++) {
21759
- const extra = img.cloneNode(true);
21760
- if (i === passes - 1 && lastAlpha < 1) {
21761
- extra.setAttribute("opacity", String(baseOpacity * lastAlpha));
21762
- }
21763
- (_f = img.parentNode) == null ? void 0 : _f.insertBefore(extra, img.nextSibling);
21764
- }
21765
- if (passes === 1 && lastAlpha < 1) {
21766
- img.setAttribute("opacity", String(baseOpacity * lastAlpha));
21767
- }
21768
21715
  } catch (e) {
21769
21716
  console.warn("[pdf-export] rasterizeShadowMarkers failed for one marker:", e);
21770
21717
  try {
21771
- (_g = marker.parentNode) == null ? void 0 : _g.removeChild(marker);
21718
+ (_f = marker.parentNode) == null ? void 0 : _f.removeChild(marker);
21772
21719
  } catch {
21773
21720
  }
21774
21721
  }
@@ -21969,7 +21916,7 @@ async function prepareLiveCanvasSvgForPdf(rawSvg, pageWidth, pageHeight, pageKey
21969
21916
  if (options == null ? void 0 : options.stripPageBackground) stripRootPageBackgroundFromSvg(svgToDraw);
21970
21917
  sanitizeSvgTreeForPdf(svgToDraw);
21971
21918
  try {
21972
- const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await Promise.resolve().then(() => require("./vectorPdfExport-krI8SwbX.cjs"));
21919
+ const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await Promise.resolve().then(() => require("./vectorPdfExport-BBG0QRse.cjs"));
21973
21920
  try {
21974
21921
  await logTextMeasurementDiagnostic(svgToDraw);
21975
21922
  } catch {
@@ -22366,4 +22313,4 @@ exports.setAutoShrinkDebug = setAutoShrinkDebug;
22366
22313
  exports.setBundledAssetPrefixes = setBundledAssetPrefixes;
22367
22314
  exports.warmResolvedTemplateForPreview = warmResolvedTemplateForPreview;
22368
22315
  exports.warmTemplateFromForm = warmTemplateFromForm;
22369
- //# sourceMappingURL=index-zkVpb-YL.cjs.map
22316
+ //# sourceMappingURL=index-Cy2_ElDZ.cjs.map