@pixldocs/canvas-renderer 0.5.181 → 0.5.183

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.
package/README.md CHANGED
@@ -351,8 +351,17 @@ UNLICENSED — Private package for Pixldocs ecosystem only.
351
351
 
352
352
  Set `previewBlur: true` on any text or image element in your config to redact
353
353
  it in watermarked previews — useful for protecting paid content (e.g. biodata
354
- reference rows) from screenshot theft. The block characters (`█`) replace
355
- the text content so layout/wrap stays identical, but content is unreadable.
354
+ reference rows) from screenshot theft.
355
+
356
+ The element renders normally underneath, and a **translucent frosted-glass
357
+ overlay rectangle** is appended on top at the element's absolute bounds, so
358
+ layout/wrap stays identical but the content is visually obscured. The
359
+ overlay auto-tints (light glass on dark text, dark glass on light text) and
360
+ is rendered with no stroke, no shadow, and square corners so it sits flush
361
+ against neighboring content. In the live web preview the overlay is upgraded
362
+ to a CSS `backdrop-filter: blur()` rectangle for a real frosted-glass effect;
363
+ exported PNG/PDF use the translucent rect (the closest pure-vector
364
+ approximation).
356
365
 
357
366
  Preview-blur is gated identically to the watermark: it only runs when
358
367
  `watermark === true` (or, by default, when `template.price > 0` and the user
@@ -3430,6 +3430,7 @@ const setupFontLoadingListener = (canvas, afterRerender, options = {}) => {
3430
3430
  };
3431
3431
  };
3432
3432
  preloadAllFonts();
3433
+ const EMPTY_IMAGE_PLACEHOLDER_DATA_URL = "data:image/png;base64,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";
3433
3434
  const svgTextCache = /* @__PURE__ */ new Map();
3434
3435
  const htmlImageCache = /* @__PURE__ */ new Map();
3435
3436
  const MAX_CACHE_ENTRIES = 200;
@@ -3662,7 +3663,7 @@ async function normalizeSvgImageDimensions(fabricImage, imageUrl, sourceFormat)
3662
3663
  fabricImage.setCoords();
3663
3664
  }
3664
3665
  }
3665
- const EMPTY_IMAGE_PLACEHOLDER_URL = "/image-placeholder.png";
3666
+ const EMPTY_IMAGE_PLACEHOLDER_URL = EMPTY_IMAGE_PLACEHOLDER_DATA_URL;
3666
3667
  let placeholderTileImage = null;
3667
3668
  let placeholderTilePromise = null;
3668
3669
  function loadPlaceholderTile() {
@@ -16498,9 +16499,9 @@ function captureFabricCanvasSvgForPdf(fabricInstance, canvasWidth, canvasHeight)
16498
16499
  }
16499
16500
  return svgString;
16500
16501
  }
16501
- const resolvedPackageVersion = "0.5.181";
16502
+ const resolvedPackageVersion = "0.5.183";
16502
16503
  const PACKAGE_VERSION = resolvedPackageVersion;
16503
- const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.181";
16504
+ const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.183";
16504
16505
  const roundParityValue = (value) => {
16505
16506
  if (typeof value !== "number") return value;
16506
16507
  return Number.isFinite(value) ? Number(value.toFixed(3)) : value;
@@ -16799,7 +16800,7 @@ class PixldocsRenderer {
16799
16800
  if (shouldWatermark) {
16800
16801
  const { injectWatermark } = await Promise.resolve().then(() => require("./canvasWatermark-B0ab38Ok.cjs"));
16801
16802
  configToRender = injectWatermark(configToRender, watermarkOptions);
16802
- const { injectPreviewBlur } = await Promise.resolve().then(() => require("./previewBlur-BB8gxlmo.cjs"));
16803
+ const { injectPreviewBlur } = await Promise.resolve().then(() => require("./previewBlur-B2SedQxb.cjs"));
16803
16804
  configToRender = injectPreviewBlur(configToRender);
16804
16805
  }
16805
16806
  return this.renderAllPages(configToRender, renderOpts);
@@ -16858,7 +16859,7 @@ class PixldocsRenderer {
16858
16859
  if (shouldWatermark) {
16859
16860
  const { injectWatermark } = await Promise.resolve().then(() => require("./canvasWatermark-B0ab38Ok.cjs"));
16860
16861
  configToRender = injectWatermark(configToRender, watermarkOptions);
16861
- const { injectPreviewBlur } = await Promise.resolve().then(() => require("./previewBlur-BB8gxlmo.cjs"));
16862
+ const { injectPreviewBlur } = await Promise.resolve().then(() => require("./previewBlur-B2SedQxb.cjs"));
16862
16863
  configToRender = injectPreviewBlur(configToRender);
16863
16864
  }
16864
16865
  return this.renderAllPageSvgs(configToRender);
@@ -16902,7 +16903,7 @@ class PixldocsRenderer {
16902
16903
  if (shouldWatermark) {
16903
16904
  const { injectWatermark } = await Promise.resolve().then(() => require("./canvasWatermark-B0ab38Ok.cjs"));
16904
16905
  configToRender = injectWatermark(configToRender, watermarkOptions);
16905
- const { injectPreviewBlur } = await Promise.resolve().then(() => require("./previewBlur-BB8gxlmo.cjs"));
16906
+ const { injectPreviewBlur } = await Promise.resolve().then(() => require("./previewBlur-B2SedQxb.cjs"));
16906
16907
  configToRender = injectPreviewBlur(configToRender);
16907
16908
  }
16908
16909
  return this.renderPdfViaClientExport(configToRender, {
@@ -17008,7 +17009,7 @@ class PixldocsRenderer {
17008
17009
  await this.waitForCanvasScene(container, cloned, i);
17009
17010
  }
17010
17011
  console.log(`[canvas-renderer][pdf-unified] mounted ${cloned.pages.length} page(s), handing off to client exportMultiPagePdf`);
17011
- const { exportMultiPagePdf, preparePagesForExport } = await Promise.resolve().then(() => require("./vectorPdfExport-DPng52xI.cjs"));
17012
+ const { exportMultiPagePdf, preparePagesForExport } = await Promise.resolve().then(() => require("./vectorPdfExport-B73_TC4T.cjs"));
17012
17013
  const prepared = preparePagesForExport(
17013
17014
  cloned.pages,
17014
17015
  canvasWidth,
@@ -19153,7 +19154,7 @@ async function prepareLiveCanvasSvgForPdf(rawSvg, pageWidth, pageHeight, pageKey
19153
19154
  if (options == null ? void 0 : options.stripPageBackground) stripRootPageBackgroundFromSvg(svgToDraw);
19154
19155
  sanitizeSvgTreeForPdf(svgToDraw);
19155
19156
  try {
19156
- const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await Promise.resolve().then(() => require("./vectorPdfExport-DPng52xI.cjs"));
19157
+ const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await Promise.resolve().then(() => require("./vectorPdfExport-B73_TC4T.cjs"));
19157
19158
  try {
19158
19159
  await logTextMeasurementDiagnostic(svgToDraw);
19159
19160
  } catch {
@@ -19503,6 +19504,7 @@ exports.applyThemeToConfig = applyThemeToConfig;
19503
19504
  exports.assemblePdfFromSvgs = assemblePdfFromSvgs;
19504
19505
  exports.awaitFontsForConfig = awaitFontsForConfig;
19505
19506
  exports.bakeEdgeFade = bakeEdgeFade;
19507
+ exports.baseId = baseId;
19506
19508
  exports.buildRoundedTrianglePath = buildRoundedTrianglePath;
19507
19509
  exports.canvasImageLoader = canvasImageLoader;
19508
19510
  exports.captureFabricCanvasSvgForPdf = captureFabricCanvasSvgForPdf;
@@ -19546,4 +19548,4 @@ exports.setAutoShrinkDebug = setAutoShrinkDebug;
19546
19548
  exports.setBundledAssetPrefixes = setBundledAssetPrefixes;
19547
19549
  exports.warmResolvedTemplateForPreview = warmResolvedTemplateForPreview;
19548
19550
  exports.warmTemplateFromForm = warmTemplateFromForm;
19549
- //# sourceMappingURL=index-DQBzPXXr.cjs.map
19551
+ //# sourceMappingURL=index-B1BBI3Bg.cjs.map