@pixldocs/canvas-renderer 0.5.182 → 0.5.184

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
@@ -367,6 +367,32 @@ Preview-blur is gated identically to the watermark: it only runs when
367
367
  `watermark === true` (or, by default, when `template.price > 0` and the user
368
368
  hasn't paid). Clean / paid downloads always render the original content.
369
369
 
370
+ ### Live `backdrop-filter` overlay in `<PixldocsPreview>`
371
+
372
+ The React `<PixldocsPreview>` component automatically renders a real CSS
373
+ `backdrop-filter: blur()` frosted-glass overlay on top of every element
374
+ marked `previewBlur: true`. Bounds are auto-derived from the config
375
+ (groups respected), so no extra wiring is required.
376
+
377
+ Defaults: `blur(5px) saturate(130%)` with a `rgba(255,255,255,0.12)` tint,
378
+ square corners, no stroke, no shadow — identical to the in-app preview on
379
+ pixldocs.com.
380
+
381
+ Opt-out or tune via props:
382
+
383
+ ```tsx
384
+ <PixldocsPreview
385
+ config={config}
386
+ // disable entirely
387
+ frostedBlur={false}
388
+ // or tune
389
+ frostedBlurOptions={{ blurPx: 6, saturatePct: 140, background: 'rgba(255,255,255,0.15)' }}
390
+ />
391
+ ```
392
+
393
+ The imperative PNG / PDF export paths still use the static translucent
394
+ rectangle (the closest pure-vector approximation), unchanged.
395
+
370
396
  ```ts
371
397
  // In your template config
372
398
  {
@@ -3412,6 +3412,7 @@ const setupFontLoadingListener = (canvas, afterRerender, options = {}) => {
3412
3412
  };
3413
3413
  };
3414
3414
  preloadAllFonts();
3415
+ const EMPTY_IMAGE_PLACEHOLDER_DATA_URL = "data:image/png;base64,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";
3415
3416
  const svgTextCache = /* @__PURE__ */ new Map();
3416
3417
  const htmlImageCache = /* @__PURE__ */ new Map();
3417
3418
  const MAX_CACHE_ENTRIES = 200;
@@ -3644,7 +3645,7 @@ async function normalizeSvgImageDimensions(fabricImage, imageUrl, sourceFormat)
3644
3645
  fabricImage.setCoords();
3645
3646
  }
3646
3647
  }
3647
- const EMPTY_IMAGE_PLACEHOLDER_URL = "/image-placeholder.png";
3648
+ const EMPTY_IMAGE_PLACEHOLDER_URL = EMPTY_IMAGE_PLACEHOLDER_DATA_URL;
3648
3649
  let placeholderTileImage = null;
3649
3650
  let placeholderTilePromise = null;
3650
3651
  function loadPlaceholderTile() {
@@ -16143,7 +16144,39 @@ function countUnderlinedNodes(config) {
16143
16144
  for (const page of config.pages) walk(page.children || []);
16144
16145
  return count;
16145
16146
  }
16147
+ function getNum(v, fallback = 0) {
16148
+ return typeof v === "number" && Number.isFinite(v) ? v : fallback;
16149
+ }
16150
+ function collectBlurBounds(node, parentLeft, parentTop, inheritedBlur, out) {
16151
+ if (!node || typeof node !== "object") return;
16152
+ const isBlurred = inheritedBlur || node.previewBlur === true;
16153
+ const absLeft = parentLeft + getNum(node.left, 0);
16154
+ const absTop = parentTop + getNum(node.top, 0);
16155
+ if (node.type === "group") {
16156
+ const children = node.children || node.elements;
16157
+ if (Array.isArray(children)) {
16158
+ for (const c of children) collectBlurBounds(c, absLeft, absTop, isBlurred, out);
16159
+ }
16160
+ return;
16161
+ }
16162
+ if (!isBlurred) return;
16163
+ const sx = getNum(node.scaleX, 1) || 1;
16164
+ const sy = getNum(node.scaleY, 1) || 1;
16165
+ const w = Math.max(4, getNum(node.width, 0) * sx);
16166
+ const h = Math.max(4, getNum(node.height, 0) * sy);
16167
+ out.push({ left: absLeft, top: absTop, width: w, height: h });
16168
+ }
16169
+ function computeFrostedBoundsForPage(config, pageIndex) {
16170
+ var _a;
16171
+ const page = (_a = config == null ? void 0 : config.pages) == null ? void 0 : _a[pageIndex];
16172
+ const children = (page == null ? void 0 : page.children) || (page == null ? void 0 : page.elements);
16173
+ if (!Array.isArray(children)) return [];
16174
+ const out = [];
16175
+ for (const c of children) collectBlurBounds(c, 0, 0, false, out);
16176
+ return out;
16177
+ }
16146
16178
  function PixldocsPreview(props) {
16179
+ var _a, _b;
16147
16180
  const {
16148
16181
  pageIndex = 0,
16149
16182
  zoom = 1,
@@ -16167,7 +16200,9 @@ function PixldocsPreview(props) {
16167
16200
  // `captureSvgViaPreviewCanvas`) already pass `skipFontReadyWait: false`
16168
16201
  // for this exact reason — that's why the downloaded PDF was correct
16169
16202
  // while the on-screen preview wasn't.
16170
- skipFontReadyWait = false
16203
+ skipFontReadyWait = false,
16204
+ frostedBlur = true,
16205
+ frostedBlurOptions
16171
16206
  } = props;
16172
16207
  useEffect(() => {
16173
16208
  setPackageApiUrl(imageProxyUrl);
@@ -16204,10 +16239,10 @@ function PixldocsPreview(props) {
16204
16239
  supabaseUrl: p.supabaseUrl,
16205
16240
  supabaseAnonKey: p.supabaseAnonKey
16206
16241
  }).then((resolved) => {
16207
- var _a, _b;
16242
+ var _a2, _b2;
16208
16243
  if (!cancelled) {
16209
16244
  console.log(PREVIEW_DEBUG_PREFIX, "resolve-done", {
16210
- pages: ((_b = (_a = resolved.config) == null ? void 0 : _a.pages) == null ? void 0 : _b.length) ?? 0,
16245
+ pages: ((_b2 = (_a2 = resolved.config) == null ? void 0 : _a2.pages) == null ? void 0 : _b2.length) ?? 0,
16211
16246
  underlinedNodes: countUnderlinedNodes(resolved.config)
16212
16247
  });
16213
16248
  setResolvedConfig(resolved.config);
@@ -16283,6 +16318,16 @@ function PixldocsPreview(props) {
16283
16318
  setCanvasSettled(true);
16284
16319
  onReady == null ? void 0 : onReady();
16285
16320
  }, [onReady, pageIndex]);
16321
+ const frostedBounds = useMemo(
16322
+ () => frostedBlur ? computeFrostedBoundsForPage(config, pageIndex) : [],
16323
+ [frostedBlur, config, pageIndex]
16324
+ );
16325
+ const blurPx = (frostedBlurOptions == null ? void 0 : frostedBlurOptions.blurPx) ?? 5;
16326
+ const satPct = (frostedBlurOptions == null ? void 0 : frostedBlurOptions.saturatePct) ?? 130;
16327
+ const bgTint = (frostedBlurOptions == null ? void 0 : frostedBlurOptions.background) ?? "rgba(255,255,255,0.12)";
16328
+ const canvasW = getNum((_a = config == null ? void 0 : config.canvas) == null ? void 0 : _a.width, 0);
16329
+ const canvasH = getNum((_b = config == null ? void 0 : config.canvas) == null ? void 0 : _b.height, 0);
16330
+ const hasOverlays = frostedBounds.length > 0 && canvasW > 0 && canvasH > 0;
16286
16331
  if (isLoading) {
16287
16332
  return /* @__PURE__ */ jsx("div", { className, style: { ...style, display: "flex", alignItems: "center", justifyContent: "center", minHeight: 200 }, children: /* @__PURE__ */ jsx("div", { style: { color: "#888", fontSize: 14 }, children: "Loading preview..." }) });
16288
16333
  }
@@ -16291,19 +16336,55 @@ function PixldocsPreview(props) {
16291
16336
  return /* @__PURE__ */ jsx("div", { className, style: { ...style, display: "flex", alignItems: "center", justifyContent: "center", minHeight: 200 }, children: /* @__PURE__ */ jsx("div", { style: { color: "#888", fontSize: 14 }, children: "Loading preview..." }) });
16292
16337
  }
16293
16338
  return /* @__PURE__ */ jsxs("div", { className, style: { ...style, position: "relative" }, children: [
16294
- /* @__PURE__ */ jsx("div", { style: { visibility: canvasSettled ? "visible" : "hidden" }, children: /* @__PURE__ */ jsx(
16295
- PreviewCanvas,
16339
+ /* @__PURE__ */ jsxs(
16340
+ "div",
16296
16341
  {
16297
- config,
16298
- pageIndex,
16299
- zoom,
16300
- absoluteZoom,
16301
- skipFontReadyWait,
16302
- onDynamicFieldClick,
16303
- onReady: handleCanvasReady
16304
- },
16305
- previewKey
16306
- ) }),
16342
+ style: hasOverlays ? { visibility: canvasSettled ? "visible" : "hidden", position: "relative", width: canvasW * zoom, height: canvasH * zoom } : { visibility: canvasSettled ? "visible" : "hidden" },
16343
+ children: [
16344
+ /* @__PURE__ */ jsx(
16345
+ PreviewCanvas,
16346
+ {
16347
+ config,
16348
+ pageIndex,
16349
+ zoom,
16350
+ absoluteZoom,
16351
+ skipFontReadyWait,
16352
+ onDynamicFieldClick,
16353
+ onReady: handleCanvasReady
16354
+ },
16355
+ previewKey
16356
+ ),
16357
+ hasOverlays && /* @__PURE__ */ jsx(
16358
+ "div",
16359
+ {
16360
+ style: {
16361
+ position: "absolute",
16362
+ inset: 0,
16363
+ pointerEvents: "none",
16364
+ zIndex: 5
16365
+ },
16366
+ children: frostedBounds.map((b, i) => /* @__PURE__ */ jsx(
16367
+ "div",
16368
+ {
16369
+ style: {
16370
+ position: "absolute",
16371
+ left: b.left * zoom,
16372
+ top: b.top * zoom,
16373
+ width: b.width * zoom,
16374
+ height: b.height * zoom,
16375
+ borderRadius: 0,
16376
+ backdropFilter: `blur(${blurPx}px) saturate(${satPct}%)`,
16377
+ WebkitBackdropFilter: `blur(${blurPx}px) saturate(${satPct}%)`,
16378
+ background: bgTint
16379
+ }
16380
+ },
16381
+ `frost-${pageIndex}-${i}`
16382
+ ))
16383
+ }
16384
+ )
16385
+ ]
16386
+ }
16387
+ ),
16307
16388
  !canvasSettled && /* @__PURE__ */ jsx("div", { style: { position: "absolute", inset: 0, display: "flex", alignItems: "center", justifyContent: "center", minHeight: 200 }, children: /* @__PURE__ */ jsx("div", { style: { color: "#888", fontSize: 14 }, children: "Loading preview..." }) })
16308
16389
  ] });
16309
16390
  }
@@ -16480,9 +16561,9 @@ function captureFabricCanvasSvgForPdf(fabricInstance, canvasWidth, canvasHeight)
16480
16561
  }
16481
16562
  return svgString;
16482
16563
  }
16483
- const resolvedPackageVersion = "0.5.182";
16564
+ const resolvedPackageVersion = "0.5.184";
16484
16565
  const PACKAGE_VERSION = resolvedPackageVersion;
16485
- const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.182";
16566
+ const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.184";
16486
16567
  const roundParityValue = (value) => {
16487
16568
  if (typeof value !== "number") return value;
16488
16569
  return Number.isFinite(value) ? Number(value.toFixed(3)) : value;
@@ -16781,7 +16862,7 @@ class PixldocsRenderer {
16781
16862
  if (shouldWatermark) {
16782
16863
  const { injectWatermark } = await import("./canvasWatermark-pkhacGge.js");
16783
16864
  configToRender = injectWatermark(configToRender, watermarkOptions);
16784
- const { injectPreviewBlur } = await import("./previewBlur-ceEQYSVv.js");
16865
+ const { injectPreviewBlur } = await import("./previewBlur-Dwbjk5sM.js");
16785
16866
  configToRender = injectPreviewBlur(configToRender);
16786
16867
  }
16787
16868
  return this.renderAllPages(configToRender, renderOpts);
@@ -16840,7 +16921,7 @@ class PixldocsRenderer {
16840
16921
  if (shouldWatermark) {
16841
16922
  const { injectWatermark } = await import("./canvasWatermark-pkhacGge.js");
16842
16923
  configToRender = injectWatermark(configToRender, watermarkOptions);
16843
- const { injectPreviewBlur } = await import("./previewBlur-ceEQYSVv.js");
16924
+ const { injectPreviewBlur } = await import("./previewBlur-Dwbjk5sM.js");
16844
16925
  configToRender = injectPreviewBlur(configToRender);
16845
16926
  }
16846
16927
  return this.renderAllPageSvgs(configToRender);
@@ -16884,7 +16965,7 @@ class PixldocsRenderer {
16884
16965
  if (shouldWatermark) {
16885
16966
  const { injectWatermark } = await import("./canvasWatermark-pkhacGge.js");
16886
16967
  configToRender = injectWatermark(configToRender, watermarkOptions);
16887
- const { injectPreviewBlur } = await import("./previewBlur-ceEQYSVv.js");
16968
+ const { injectPreviewBlur } = await import("./previewBlur-Dwbjk5sM.js");
16888
16969
  configToRender = injectPreviewBlur(configToRender);
16889
16970
  }
16890
16971
  return this.renderPdfViaClientExport(configToRender, {
@@ -16990,7 +17071,7 @@ class PixldocsRenderer {
16990
17071
  await this.waitForCanvasScene(container, cloned, i);
16991
17072
  }
16992
17073
  console.log(`[canvas-renderer][pdf-unified] mounted ${cloned.pages.length} page(s), handing off to client exportMultiPagePdf`);
16993
- const { exportMultiPagePdf, preparePagesForExport } = await import("./vectorPdfExport-BpRBLtU-.js");
17074
+ const { exportMultiPagePdf, preparePagesForExport } = await import("./vectorPdfExport-CBUTexHq.js");
16994
17075
  const prepared = preparePagesForExport(
16995
17076
  cloned.pages,
16996
17077
  canvasWidth,
@@ -19135,7 +19216,7 @@ async function prepareLiveCanvasSvgForPdf(rawSvg, pageWidth, pageHeight, pageKey
19135
19216
  if (options == null ? void 0 : options.stripPageBackground) stripRootPageBackgroundFromSvg(svgToDraw);
19136
19217
  sanitizeSvgTreeForPdf(svgToDraw);
19137
19218
  try {
19138
- const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await import("./vectorPdfExport-BpRBLtU-.js");
19219
+ const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await import("./vectorPdfExport-CBUTexHq.js");
19139
19220
  try {
19140
19221
  await logTextMeasurementDiagnostic(svgToDraw);
19141
19222
  } catch {
@@ -19532,4 +19613,4 @@ export {
19532
19613
  awaitFontsForConfig as y,
19533
19614
  collectFontDescriptorsFromConfig as z
19534
19615
  };
19535
- //# sourceMappingURL=index-CcCXKYy6.js.map
19616
+ //# sourceMappingURL=index-D2deevHj.js.map