@pixldocs/canvas-renderer 0.5.184 → 0.5.185

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
@@ -406,3 +406,44 @@ rectangle (the closest pure-vector approximation), unchanged.
406
406
 
407
407
  No API change is required on the consumer side — the same `renderFromForm`,
408
408
  `renderPdfFromForm`, etc. respect the flag automatically.
409
+
410
+ ### Example: per-field blur for a biodata form (use page)
411
+
412
+ On pixldocs.com's Use page for the Biodata preset, every form field renders
413
+ a small **🔒 Blur in preview** checkbox next to it. Toggling it redacts only
414
+ that field's text in the watermarked preview — perfect for hiding reference
415
+ rows, phone numbers, or addresses behind the paywall while leaving the rest
416
+ of the biodata visible. Paid / clean downloads always render the original
417
+ content.
418
+
419
+ Under the hood the flow is:
420
+
421
+ 1. Keep a `Set<string>` of "blurred field ids" in component state — each id
422
+ encodes the field's path (single field, repeatable entry, or nested
423
+ repeatable entry), e.g.
424
+ `__bioPreviewBlur__:nested:family:1:siblings:2:name`.
425
+ 2. Resolve each blurred field id to the **exact cloned element ids** in the
426
+ paginated config (a single repeatable field may map to N cloned elements,
427
+ one per entry).
428
+ 3. Pass that set to `injectPreviewBlur` as `extraElementExactIds` (or
429
+ `extraElementBaseIds` if you only know the source/base id), then render
430
+ the returned config like any other.
431
+
432
+ ```tsx
433
+ import { injectPreviewBlur } from '@pixldocs/canvas-renderer';
434
+
435
+ // `blurredElementIds` = the resolved Set<string> of exact cloned element ids
436
+ // you built from the user's checkbox state.
437
+ const previewConfig = injectPreviewBlur(paginatedConfig, {
438
+ extraElementExactIds: blurredElementIds,
439
+ });
440
+
441
+ // Then render `previewConfig` with <PixldocsPreview config={previewConfig} />
442
+ // or `renderer.renderAllPages(previewConfig)`. The live React preview will
443
+ // additionally upgrade the static rectangles to real CSS
444
+ // `backdrop-filter: blur()` overlays automatically.
445
+ ```
446
+
447
+ This is exactly how the Biodata preset on pixldocs.com wires its per-field
448
+ 🔒 checkboxes — no template authoring required, the user picks at runtime
449
+ which fields stay visible in the watermarked preview.
@@ -16561,9 +16561,9 @@ function captureFabricCanvasSvgForPdf(fabricInstance, canvasWidth, canvasHeight)
16561
16561
  }
16562
16562
  return svgString;
16563
16563
  }
16564
- const resolvedPackageVersion = "0.5.184";
16564
+ const resolvedPackageVersion = "0.5.185";
16565
16565
  const PACKAGE_VERSION = resolvedPackageVersion;
16566
- const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.184";
16566
+ const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.185";
16567
16567
  const roundParityValue = (value) => {
16568
16568
  if (typeof value !== "number") return value;
16569
16569
  return Number.isFinite(value) ? Number(value.toFixed(3)) : value;
@@ -16862,7 +16862,7 @@ class PixldocsRenderer {
16862
16862
  if (shouldWatermark) {
16863
16863
  const { injectWatermark } = await import("./canvasWatermark-pkhacGge.js");
16864
16864
  configToRender = injectWatermark(configToRender, watermarkOptions);
16865
- const { injectPreviewBlur } = await import("./previewBlur-Dwbjk5sM.js");
16865
+ const { injectPreviewBlur } = await import("./previewBlur-B5SlBl4a.js");
16866
16866
  configToRender = injectPreviewBlur(configToRender);
16867
16867
  }
16868
16868
  return this.renderAllPages(configToRender, renderOpts);
@@ -16921,7 +16921,7 @@ class PixldocsRenderer {
16921
16921
  if (shouldWatermark) {
16922
16922
  const { injectWatermark } = await import("./canvasWatermark-pkhacGge.js");
16923
16923
  configToRender = injectWatermark(configToRender, watermarkOptions);
16924
- const { injectPreviewBlur } = await import("./previewBlur-Dwbjk5sM.js");
16924
+ const { injectPreviewBlur } = await import("./previewBlur-B5SlBl4a.js");
16925
16925
  configToRender = injectPreviewBlur(configToRender);
16926
16926
  }
16927
16927
  return this.renderAllPageSvgs(configToRender);
@@ -16965,7 +16965,7 @@ class PixldocsRenderer {
16965
16965
  if (shouldWatermark) {
16966
16966
  const { injectWatermark } = await import("./canvasWatermark-pkhacGge.js");
16967
16967
  configToRender = injectWatermark(configToRender, watermarkOptions);
16968
- const { injectPreviewBlur } = await import("./previewBlur-Dwbjk5sM.js");
16968
+ const { injectPreviewBlur } = await import("./previewBlur-B5SlBl4a.js");
16969
16969
  configToRender = injectPreviewBlur(configToRender);
16970
16970
  }
16971
16971
  return this.renderPdfViaClientExport(configToRender, {
@@ -17071,7 +17071,7 @@ class PixldocsRenderer {
17071
17071
  await this.waitForCanvasScene(container, cloned, i);
17072
17072
  }
17073
17073
  console.log(`[canvas-renderer][pdf-unified] mounted ${cloned.pages.length} page(s), handing off to client exportMultiPagePdf`);
17074
- const { exportMultiPagePdf, preparePagesForExport } = await import("./vectorPdfExport-CBUTexHq.js");
17074
+ const { exportMultiPagePdf, preparePagesForExport } = await import("./vectorPdfExport-CfmlwA1-.js");
17075
17075
  const prepared = preparePagesForExport(
17076
17076
  cloned.pages,
17077
17077
  canvasWidth,
@@ -19216,7 +19216,7 @@ async function prepareLiveCanvasSvgForPdf(rawSvg, pageWidth, pageHeight, pageKey
19216
19216
  if (options == null ? void 0 : options.stripPageBackground) stripRootPageBackgroundFromSvg(svgToDraw);
19217
19217
  sanitizeSvgTreeForPdf(svgToDraw);
19218
19218
  try {
19219
- const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await import("./vectorPdfExport-CBUTexHq.js");
19219
+ const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await import("./vectorPdfExport-CfmlwA1-.js");
19220
19220
  try {
19221
19221
  await logTextMeasurementDiagnostic(svgToDraw);
19222
19222
  } catch {
@@ -19613,4 +19613,4 @@ export {
19613
19613
  awaitFontsForConfig as y,
19614
19614
  collectFontDescriptorsFromConfig as z
19615
19615
  };
19616
- //# sourceMappingURL=index-D2deevHj.js.map
19616
+ //# sourceMappingURL=index-NWuzIM_r.js.map