@pixldocs/canvas-renderer 0.5.185 → 0.5.187
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 +109 -0
- package/dist/{index-NWuzIM_r.js → index-C9H38u7P.js} +261 -70
- package/dist/index-C9H38u7P.js.map +1 -0
- package/dist/{index-bI33y64A.cjs → index-DgMi1JSR.cjs} +218 -27
- package/dist/index-DgMi1JSR.cjs.map +1 -0
- package/dist/index.cjs +4 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +61 -0
- package/dist/index.js +40 -37
- package/dist/{vectorPdfExport-CfmlwA1-.js → vectorPdfExport-BkERGCkM.js} +4 -4
- package/dist/{vectorPdfExport-CfmlwA1-.js.map → vectorPdfExport-BkERGCkM.js.map} +1 -1
- package/dist/{vectorPdfExport-CHO9VGGL.cjs → vectorPdfExport-BknzMTNP.cjs} +4 -4
- package/dist/{vectorPdfExport-CHO9VGGL.cjs.map → vectorPdfExport-BknzMTNP.cjs.map} +1 -1
- package/package.json +1 -1
- package/dist/index-NWuzIM_r.js.map +0 -1
- package/dist/index-bI33y64A.cjs.map +0 -1
- package/dist/previewBlur-B5SlBl4a.js +0 -104
- package/dist/previewBlur-B5SlBl4a.js.map +0 -1
- package/dist/previewBlur-CORNmaPO.cjs +0 -104
- package/dist/previewBlur-CORNmaPO.cjs.map +0 -1
|
@@ -16133,6 +16133,44 @@ async function getTemplateForm(options) {
|
|
|
16133
16133
|
initialSectionState
|
|
16134
16134
|
};
|
|
16135
16135
|
}
|
|
16136
|
+
function stripFieldPrefix(s) {
|
|
16137
|
+
return s.startsWith("field_") ? s.slice("field_".length) : s;
|
|
16138
|
+
}
|
|
16139
|
+
function addAll(val, out) {
|
|
16140
|
+
if (!val) return false;
|
|
16141
|
+
if (Array.isArray(val)) {
|
|
16142
|
+
for (const v of val) out.add(v);
|
|
16143
|
+
return val.length > 0;
|
|
16144
|
+
}
|
|
16145
|
+
out.add(val);
|
|
16146
|
+
return true;
|
|
16147
|
+
}
|
|
16148
|
+
function resolveBlurElementExactIdsFromFlatFormKeys(config, flatFormKeys, options) {
|
|
16149
|
+
const cloneIdMap = (config == null ? void 0 : config.__cloneIdMap) || {};
|
|
16150
|
+
if (!cloneIdMap || typeof cloneIdMap !== "object") return [];
|
|
16151
|
+
const bindings = (options == null ? void 0 : options.bindings) ?? "value";
|
|
16152
|
+
const out = /* @__PURE__ */ new Set();
|
|
16153
|
+
for (const rawId of flatFormKeys) {
|
|
16154
|
+
if (typeof rawId !== "string" || !rawId) continue;
|
|
16155
|
+
if (bindings === "value" && !rawId.endsWith("_value")) continue;
|
|
16156
|
+
const candidates = [rawId];
|
|
16157
|
+
if (rawId.startsWith("field_")) {
|
|
16158
|
+
const topStripped = stripFieldPrefix(rawId);
|
|
16159
|
+
candidates.push(topStripped);
|
|
16160
|
+
const nestedIdx = topStripped.indexOf("_field_");
|
|
16161
|
+
if (nestedIdx >= 0) {
|
|
16162
|
+
const nestedStripped = topStripped.slice(0, nestedIdx + 1) + topStripped.slice(nestedIdx + 1 + "field_".length);
|
|
16163
|
+
candidates.push(nestedStripped);
|
|
16164
|
+
}
|
|
16165
|
+
}
|
|
16166
|
+
for (const k of candidates) {
|
|
16167
|
+
if (k in cloneIdMap) {
|
|
16168
|
+
if (addAll(cloneIdMap[k], out)) break;
|
|
16169
|
+
}
|
|
16170
|
+
}
|
|
16171
|
+
}
|
|
16172
|
+
return Array.from(out);
|
|
16173
|
+
}
|
|
16136
16174
|
const PREVIEW_DEBUG_PREFIX = "[canvas-renderer][preview-debug]";
|
|
16137
16175
|
function computeFontSignature(config) {
|
|
16138
16176
|
var _a;
|
|
@@ -16165,15 +16203,18 @@ function countUnderlinedNodes(config) {
|
|
|
16165
16203
|
function getNum(v, fallback = 0) {
|
|
16166
16204
|
return typeof v === "number" && Number.isFinite(v) ? v : fallback;
|
|
16167
16205
|
}
|
|
16168
|
-
function collectBlurBounds(node, parentLeft, parentTop, inheritedBlur, out) {
|
|
16206
|
+
function collectBlurBounds(node, parentLeft, parentTop, inheritedBlur, extraBaseIds, extraExactIds, out) {
|
|
16169
16207
|
if (!node || typeof node !== "object") return;
|
|
16170
|
-
const
|
|
16208
|
+
const matchesBase = !!(extraBaseIds && typeof node.id === "string" && extraBaseIds.has(baseId(node.id)));
|
|
16209
|
+
const matchesExact = !!(extraExactIds && typeof node.id === "string" && extraExactIds.has(node.id));
|
|
16210
|
+
const isBlurred = inheritedBlur || node.previewBlur === true || matchesBase || matchesExact;
|
|
16171
16211
|
const absLeft = parentLeft + getNum(node.left, 0);
|
|
16172
16212
|
const absTop = parentTop + getNum(node.top, 0);
|
|
16173
16213
|
if (node.type === "group") {
|
|
16174
16214
|
const children = node.children || node.elements;
|
|
16175
16215
|
if (Array.isArray(children)) {
|
|
16176
|
-
for (const c of children)
|
|
16216
|
+
for (const c of children)
|
|
16217
|
+
collectBlurBounds(c, absLeft, absTop, isBlurred, extraBaseIds, extraExactIds, out);
|
|
16177
16218
|
}
|
|
16178
16219
|
return;
|
|
16179
16220
|
}
|
|
@@ -16184,13 +16225,14 @@ function collectBlurBounds(node, parentLeft, parentTop, inheritedBlur, out) {
|
|
|
16184
16225
|
const h = Math.max(4, getNum(node.height, 0) * sy);
|
|
16185
16226
|
out.push({ left: absLeft, top: absTop, width: w, height: h });
|
|
16186
16227
|
}
|
|
16187
|
-
function computeFrostedBoundsForPage(config, pageIndex) {
|
|
16228
|
+
function computeFrostedBoundsForPage(config, pageIndex, extraBaseIds, extraExactIds) {
|
|
16188
16229
|
var _a;
|
|
16189
16230
|
const page = (_a = config == null ? void 0 : config.pages) == null ? void 0 : _a[pageIndex];
|
|
16190
16231
|
const children = (page == null ? void 0 : page.children) || (page == null ? void 0 : page.elements);
|
|
16191
16232
|
if (!Array.isArray(children)) return [];
|
|
16192
16233
|
const out = [];
|
|
16193
|
-
for (const c of children)
|
|
16234
|
+
for (const c of children)
|
|
16235
|
+
collectBlurBounds(c, 0, 0, false, extraBaseIds, extraExactIds, out);
|
|
16194
16236
|
return out;
|
|
16195
16237
|
}
|
|
16196
16238
|
function PixldocsPreview(props) {
|
|
@@ -16220,7 +16262,11 @@ function PixldocsPreview(props) {
|
|
|
16220
16262
|
// while the on-screen preview wasn't.
|
|
16221
16263
|
skipFontReadyWait = false,
|
|
16222
16264
|
frostedBlur = true,
|
|
16223
|
-
frostedBlurOptions
|
|
16265
|
+
frostedBlurOptions,
|
|
16266
|
+
blurFieldIds,
|
|
16267
|
+
blurElementExactIds,
|
|
16268
|
+
blurFlatFormKeys,
|
|
16269
|
+
blurFlatFormKeyOptions
|
|
16224
16270
|
} = props;
|
|
16225
16271
|
react.useEffect(() => {
|
|
16226
16272
|
setPackageApiUrl(imageProxyUrl);
|
|
@@ -16336,9 +16382,35 @@ function PixldocsPreview(props) {
|
|
|
16336
16382
|
setCanvasSettled(true);
|
|
16337
16383
|
onReady == null ? void 0 : onReady();
|
|
16338
16384
|
}, [onReady, pageIndex]);
|
|
16385
|
+
const blurBaseSet = react.useMemo(
|
|
16386
|
+
() => blurFieldIds && blurFieldIds.length ? new Set(blurFieldIds) : void 0,
|
|
16387
|
+
[blurFieldIds ? blurFieldIds.join("|") : ""]
|
|
16388
|
+
);
|
|
16389
|
+
const blurExactSet = react.useMemo(
|
|
16390
|
+
() => {
|
|
16391
|
+
const merged = /* @__PURE__ */ new Set();
|
|
16392
|
+
if (blurElementExactIds) for (const id of blurElementExactIds) merged.add(id);
|
|
16393
|
+
if (config && blurFlatFormKeys && blurFlatFormKeys.length) {
|
|
16394
|
+
for (const id of resolveBlurElementExactIdsFromFlatFormKeys(
|
|
16395
|
+
config,
|
|
16396
|
+
blurFlatFormKeys,
|
|
16397
|
+
blurFlatFormKeyOptions
|
|
16398
|
+
)) {
|
|
16399
|
+
merged.add(id);
|
|
16400
|
+
}
|
|
16401
|
+
}
|
|
16402
|
+
return merged.size > 0 ? merged : void 0;
|
|
16403
|
+
},
|
|
16404
|
+
[
|
|
16405
|
+
blurElementExactIds ? blurElementExactIds.join("|") : "",
|
|
16406
|
+
blurFlatFormKeys ? blurFlatFormKeys.join("|") : "",
|
|
16407
|
+
blurFlatFormKeyOptions == null ? void 0 : blurFlatFormKeyOptions.bindings,
|
|
16408
|
+
config
|
|
16409
|
+
]
|
|
16410
|
+
);
|
|
16339
16411
|
const frostedBounds = react.useMemo(
|
|
16340
|
-
() => frostedBlur ? computeFrostedBoundsForPage(config, pageIndex) : [],
|
|
16341
|
-
[frostedBlur, config, pageIndex]
|
|
16412
|
+
() => frostedBlur ? computeFrostedBoundsForPage(config, pageIndex, blurBaseSet, blurExactSet) : [],
|
|
16413
|
+
[frostedBlur, config, pageIndex, blurBaseSet, blurExactSet]
|
|
16342
16414
|
);
|
|
16343
16415
|
const blurPx = (frostedBlurOptions == null ? void 0 : frostedBlurOptions.blurPx) ?? 5;
|
|
16344
16416
|
const satPct = (frostedBlurOptions == null ? void 0 : frostedBlurOptions.saturatePct) ?? 130;
|
|
@@ -16579,9 +16651,9 @@ function captureFabricCanvasSvgForPdf(fabricInstance, canvasWidth, canvasHeight)
|
|
|
16579
16651
|
}
|
|
16580
16652
|
return svgString;
|
|
16581
16653
|
}
|
|
16582
|
-
const resolvedPackageVersion = "0.5.
|
|
16654
|
+
const resolvedPackageVersion = "0.5.187";
|
|
16583
16655
|
const PACKAGE_VERSION = resolvedPackageVersion;
|
|
16584
|
-
const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.
|
|
16656
|
+
const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.187";
|
|
16585
16657
|
const roundParityValue = (value) => {
|
|
16586
16658
|
if (typeof value !== "number") return value;
|
|
16587
16659
|
return Number.isFinite(value) ? Number(value.toFixed(3)) : value;
|
|
@@ -16880,8 +16952,8 @@ class PixldocsRenderer {
|
|
|
16880
16952
|
if (shouldWatermark) {
|
|
16881
16953
|
const { injectWatermark } = await Promise.resolve().then(() => require("./canvasWatermark-B0ab38Ok.cjs"));
|
|
16882
16954
|
configToRender = injectWatermark(configToRender, watermarkOptions);
|
|
16883
|
-
const { injectPreviewBlur } = await Promise.resolve().then(() =>
|
|
16884
|
-
configToRender =
|
|
16955
|
+
const { injectPreviewBlur: injectPreviewBlur2 } = await Promise.resolve().then(() => previewBlur);
|
|
16956
|
+
configToRender = injectPreviewBlur2(configToRender);
|
|
16885
16957
|
}
|
|
16886
16958
|
return this.renderAllPages(configToRender, renderOpts);
|
|
16887
16959
|
}
|
|
@@ -16939,8 +17011,8 @@ class PixldocsRenderer {
|
|
|
16939
17011
|
if (shouldWatermark) {
|
|
16940
17012
|
const { injectWatermark } = await Promise.resolve().then(() => require("./canvasWatermark-B0ab38Ok.cjs"));
|
|
16941
17013
|
configToRender = injectWatermark(configToRender, watermarkOptions);
|
|
16942
|
-
const { injectPreviewBlur } = await Promise.resolve().then(() =>
|
|
16943
|
-
configToRender =
|
|
17014
|
+
const { injectPreviewBlur: injectPreviewBlur2 } = await Promise.resolve().then(() => previewBlur);
|
|
17015
|
+
configToRender = injectPreviewBlur2(configToRender);
|
|
16944
17016
|
}
|
|
16945
17017
|
return this.renderAllPageSvgs(configToRender);
|
|
16946
17018
|
}
|
|
@@ -16983,8 +17055,8 @@ class PixldocsRenderer {
|
|
|
16983
17055
|
if (shouldWatermark) {
|
|
16984
17056
|
const { injectWatermark } = await Promise.resolve().then(() => require("./canvasWatermark-B0ab38Ok.cjs"));
|
|
16985
17057
|
configToRender = injectWatermark(configToRender, watermarkOptions);
|
|
16986
|
-
const { injectPreviewBlur } = await Promise.resolve().then(() =>
|
|
16987
|
-
configToRender =
|
|
17058
|
+
const { injectPreviewBlur: injectPreviewBlur2 } = await Promise.resolve().then(() => previewBlur);
|
|
17059
|
+
configToRender = injectPreviewBlur2(configToRender);
|
|
16988
17060
|
}
|
|
16989
17061
|
return this.renderPdfViaClientExport(configToRender, {
|
|
16990
17062
|
title: title ?? resolved.config.name,
|
|
@@ -17089,7 +17161,7 @@ class PixldocsRenderer {
|
|
|
17089
17161
|
await this.waitForCanvasScene(container, cloned, i);
|
|
17090
17162
|
}
|
|
17091
17163
|
console.log(`[canvas-renderer][pdf-unified] mounted ${cloned.pages.length} page(s), handing off to client exportMultiPagePdf`);
|
|
17092
|
-
const { exportMultiPagePdf, preparePagesForExport } = await Promise.resolve().then(() => require("./vectorPdfExport-
|
|
17164
|
+
const { exportMultiPagePdf, preparePagesForExport } = await Promise.resolve().then(() => require("./vectorPdfExport-BknzMTNP.cjs"));
|
|
17093
17165
|
const prepared = preparePagesForExport(
|
|
17094
17166
|
cloned.pages,
|
|
17095
17167
|
canvasWidth,
|
|
@@ -17931,7 +18003,7 @@ function collectFontSpecsFromMarkup(markup) {
|
|
|
17931
18003
|
}
|
|
17932
18004
|
return Array.from(specs);
|
|
17933
18005
|
}
|
|
17934
|
-
function parseColor(color) {
|
|
18006
|
+
function parseColor$1(color) {
|
|
17935
18007
|
if (!color) return null;
|
|
17936
18008
|
const raw = color.trim().toLowerCase();
|
|
17937
18009
|
if (!raw || raw === "transparent" || raw === "none") return null;
|
|
@@ -18484,7 +18556,7 @@ function stripSuspiciousFullPageOverlayNodes(svg) {
|
|
|
18484
18556
|
if (!(pageWidth > 0 && pageHeight > 0)) return;
|
|
18485
18557
|
const isNear = (a, b, tolerance = 0.75) => Math.abs(a - b) <= tolerance;
|
|
18486
18558
|
const isDarkPaint = (value) => {
|
|
18487
|
-
const rgb = value ? parseColor(value) : null;
|
|
18559
|
+
const rgb = value ? parseColor$1(value) : null;
|
|
18488
18560
|
return rgb ? rgb.r <= 32 && rgb.g <= 32 && rgb.b <= 32 : false;
|
|
18489
18561
|
};
|
|
18490
18562
|
const removeIfSuspicious = (el) => {
|
|
@@ -18597,13 +18669,13 @@ function inlineComputedStyles(svg) {
|
|
|
18597
18669
|
const fill = cs.fill;
|
|
18598
18670
|
const stroke = cs.stroke;
|
|
18599
18671
|
if (fill && fill !== "none" && fill !== "rgba(0, 0, 0, 0)") {
|
|
18600
|
-
const parsed = parseColor(fill);
|
|
18672
|
+
const parsed = parseColor$1(fill);
|
|
18601
18673
|
if (parsed) el.setAttribute("fill", rgbToHex(parsed.r, parsed.g, parsed.b));
|
|
18602
18674
|
} else if (fill === "rgba(0, 0, 0, 0)" || fill === "transparent") {
|
|
18603
18675
|
el.setAttribute("fill", "none");
|
|
18604
18676
|
}
|
|
18605
18677
|
if (stroke && stroke !== "none" && stroke !== "rgba(0, 0, 0, 0)") {
|
|
18606
|
-
const parsed = parseColor(stroke);
|
|
18678
|
+
const parsed = parseColor$1(stroke);
|
|
18607
18679
|
if (parsed) el.setAttribute("stroke", rgbToHex(parsed.r, parsed.g, parsed.b));
|
|
18608
18680
|
}
|
|
18609
18681
|
}
|
|
@@ -18751,7 +18823,7 @@ function setPdfColorFromSvg(pdf, svg, _elementId) {
|
|
|
18751
18823
|
const { fill, stroke } = getFirstExplicitColorFromSvg(svg);
|
|
18752
18824
|
const setColor = (hex, setter) => {
|
|
18753
18825
|
if (!hex) return;
|
|
18754
|
-
const c = parseColor(hex);
|
|
18826
|
+
const c = parseColor$1(hex);
|
|
18755
18827
|
if (c) pdf[setter](c.r, c.g, c.b);
|
|
18756
18828
|
};
|
|
18757
18829
|
setColor(fill, "setFillColor");
|
|
@@ -19234,7 +19306,7 @@ async function prepareLiveCanvasSvgForPdf(rawSvg, pageWidth, pageHeight, pageKey
|
|
|
19234
19306
|
if (options == null ? void 0 : options.stripPageBackground) stripRootPageBackgroundFromSvg(svgToDraw);
|
|
19235
19307
|
sanitizeSvgTreeForPdf(svgToDraw);
|
|
19236
19308
|
try {
|
|
19237
|
-
const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await Promise.resolve().then(() => require("./vectorPdfExport-
|
|
19309
|
+
const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await Promise.resolve().then(() => require("./vectorPdfExport-BknzMTNP.cjs"));
|
|
19238
19310
|
try {
|
|
19239
19311
|
await logTextMeasurementDiagnostic(svgToDraw);
|
|
19240
19312
|
} catch {
|
|
@@ -19254,7 +19326,7 @@ function drawPageBackground(pdf, pageIndex, pageWidth, pageHeight, backgroundCol
|
|
|
19254
19326
|
if (backgroundGradient && ((_a = backgroundGradient.stops) == null ? void 0 : _a.length) >= 2) {
|
|
19255
19327
|
const grad = backgroundGradient;
|
|
19256
19328
|
const colorStops = grad.stops.map((s) => {
|
|
19257
|
-
const c = parseColor(s.color);
|
|
19329
|
+
const c = parseColor$1(s.color);
|
|
19258
19330
|
return {
|
|
19259
19331
|
offset: Math.max(0, Math.min(1, Number(s.offset))),
|
|
19260
19332
|
color: c ? [c.r, c.g, c.b] : [0, 0, 0]
|
|
@@ -19310,7 +19382,7 @@ function drawPageBackground(pdf, pageIndex, pageWidth, pageHeight, backgroundCol
|
|
|
19310
19382
|
pdf.rect(0, 0, pageWidth, pageHeight, "F");
|
|
19311
19383
|
}
|
|
19312
19384
|
} else {
|
|
19313
|
-
const bgColor = parseColor(backgroundColor && backgroundColor !== "transparent" ? backgroundColor : "#ffffff");
|
|
19385
|
+
const bgColor = parseColor$1(backgroundColor && backgroundColor !== "transparent" ? backgroundColor : "#ffffff");
|
|
19314
19386
|
if (bgColor) {
|
|
19315
19387
|
pdf.setFillColor(bgColor.r, bgColor.g, bgColor.b);
|
|
19316
19388
|
pdf.rect(0, 0, pageWidth, pageHeight, "F");
|
|
@@ -19433,6 +19505,123 @@ async function assemblePdfFromSvgs(svgResults, options = {}) {
|
|
|
19433
19505
|
pages: svgResults.map((p) => ({ width: p.width, height: p.height }))
|
|
19434
19506
|
};
|
|
19435
19507
|
}
|
|
19508
|
+
const OVERLAY_ID_PREFIX = "__pb_";
|
|
19509
|
+
function getNumber(v, fallback = 0) {
|
|
19510
|
+
return typeof v === "number" && Number.isFinite(v) ? v : fallback;
|
|
19511
|
+
}
|
|
19512
|
+
function resolveSize(node, key) {
|
|
19513
|
+
const v = node == null ? void 0 : node[key];
|
|
19514
|
+
if (typeof v === "number" && Number.isFinite(v)) return v;
|
|
19515
|
+
return 0;
|
|
19516
|
+
}
|
|
19517
|
+
function collectOverlays(node, parentLeft, parentTop, inheritedBlur, extraBaseIds, extraExactIds, out) {
|
|
19518
|
+
if (!node || typeof node !== "object") return;
|
|
19519
|
+
const matchesBase = !!(extraBaseIds && typeof node.id === "string" && extraBaseIds.has(baseId(node.id)));
|
|
19520
|
+
const matchesExact = !!(extraExactIds && typeof node.id === "string" && extraExactIds.has(node.id));
|
|
19521
|
+
const isBlurred = inheritedBlur || node.previewBlur === true || matchesBase || matchesExact;
|
|
19522
|
+
const absLeft = parentLeft + getNumber(node.left, 0);
|
|
19523
|
+
const absTop = parentTop + getNumber(node.top, 0);
|
|
19524
|
+
if (node.type === "group") {
|
|
19525
|
+
const children = node.children || node.elements;
|
|
19526
|
+
if (Array.isArray(children)) {
|
|
19527
|
+
for (const child of children) {
|
|
19528
|
+
collectOverlays(child, absLeft, absTop, isBlurred, extraBaseIds, extraExactIds, out);
|
|
19529
|
+
}
|
|
19530
|
+
}
|
|
19531
|
+
return;
|
|
19532
|
+
}
|
|
19533
|
+
if (!isBlurred) return;
|
|
19534
|
+
const scaleX = getNumber(node.scaleX, 1) || 1;
|
|
19535
|
+
const scaleY = getNumber(node.scaleY, 1) || 1;
|
|
19536
|
+
const w = Math.max(4, resolveSize(node, "width") * scaleX);
|
|
19537
|
+
const h = Math.max(4, resolveSize(node, "height") * scaleY);
|
|
19538
|
+
out.push({
|
|
19539
|
+
left: absLeft,
|
|
19540
|
+
top: absTop,
|
|
19541
|
+
width: w,
|
|
19542
|
+
height: h,
|
|
19543
|
+
hintFill: typeof node.fill === "string" ? node.fill : void 0
|
|
19544
|
+
});
|
|
19545
|
+
}
|
|
19546
|
+
function parseColor(c) {
|
|
19547
|
+
if (!c) return null;
|
|
19548
|
+
const s = c.trim();
|
|
19549
|
+
const hex = s.match(/^#([0-9a-f]{3}|[0-9a-f]{6})$/i);
|
|
19550
|
+
if (hex) {
|
|
19551
|
+
let h = hex[1];
|
|
19552
|
+
if (h.length === 3) h = h.split("").map((x) => x + x).join("");
|
|
19553
|
+
return {
|
|
19554
|
+
r: parseInt(h.slice(0, 2), 16),
|
|
19555
|
+
g: parseInt(h.slice(2, 4), 16),
|
|
19556
|
+
b: parseInt(h.slice(4, 6), 16)
|
|
19557
|
+
};
|
|
19558
|
+
}
|
|
19559
|
+
const rgb = s.match(/^rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)/i);
|
|
19560
|
+
if (rgb) return { r: +rgb[1], g: +rgb[2], b: +rgb[3] };
|
|
19561
|
+
return null;
|
|
19562
|
+
}
|
|
19563
|
+
function buildOverlay(b, idx) {
|
|
19564
|
+
const c = parseColor(b.hintFill);
|
|
19565
|
+
const lum = c ? (0.299 * c.r + 0.587 * c.g + 0.114 * c.b) / 255 : 0.2;
|
|
19566
|
+
const isLightGlass = lum < 0.5;
|
|
19567
|
+
const baseFill = isLightGlass ? "rgba(245,245,245,0.68)" : "rgba(30,30,30,0.62)";
|
|
19568
|
+
return {
|
|
19569
|
+
id: `${OVERLAY_ID_PREFIX}${idx}`,
|
|
19570
|
+
type: "shape",
|
|
19571
|
+
shapeType: "rounded-rect",
|
|
19572
|
+
left: b.left,
|
|
19573
|
+
top: b.top,
|
|
19574
|
+
width: b.width,
|
|
19575
|
+
height: b.height,
|
|
19576
|
+
cornerRadius: 0,
|
|
19577
|
+
fill: baseFill,
|
|
19578
|
+
stroke: "transparent",
|
|
19579
|
+
strokeWidth: 0,
|
|
19580
|
+
opacity: 1,
|
|
19581
|
+
selectable: false,
|
|
19582
|
+
locked: true,
|
|
19583
|
+
visible: true,
|
|
19584
|
+
scaleX: 1,
|
|
19585
|
+
scaleY: 1
|
|
19586
|
+
};
|
|
19587
|
+
}
|
|
19588
|
+
function injectPreviewBlur(config, options) {
|
|
19589
|
+
const cloned = typeof structuredClone === "function" ? structuredClone(config) : JSON.parse(JSON.stringify(config));
|
|
19590
|
+
const extraBase = (options == null ? void 0 : options.extraElementBaseIds) && options.extraElementBaseIds.size > 0 ? options.extraElementBaseIds : void 0;
|
|
19591
|
+
const extraExact = (options == null ? void 0 : options.extraElementExactIds) && options.extraElementExactIds.size > 0 ? options.extraElementExactIds : void 0;
|
|
19592
|
+
let idx = 0;
|
|
19593
|
+
for (const page of cloned.pages || []) {
|
|
19594
|
+
const children = page.children || page.elements;
|
|
19595
|
+
if (!Array.isArray(children)) continue;
|
|
19596
|
+
const overlays = [];
|
|
19597
|
+
for (const child of children) {
|
|
19598
|
+
collectOverlays(child, 0, 0, false, extraBase, extraExact, overlays);
|
|
19599
|
+
}
|
|
19600
|
+
if (overlays.length === 0) continue;
|
|
19601
|
+
for (const b of overlays) {
|
|
19602
|
+
children.push(buildOverlay(b, idx++));
|
|
19603
|
+
}
|
|
19604
|
+
}
|
|
19605
|
+
return cloned;
|
|
19606
|
+
}
|
|
19607
|
+
function hasAnyPreviewBlur(config) {
|
|
19608
|
+
function walk(node) {
|
|
19609
|
+
if (!node || typeof node !== "object") return false;
|
|
19610
|
+
if (node.previewBlur === true) return true;
|
|
19611
|
+
const children = node.children || node.elements;
|
|
19612
|
+
if (Array.isArray(children)) {
|
|
19613
|
+
for (const c of children) if (walk(c)) return true;
|
|
19614
|
+
}
|
|
19615
|
+
return false;
|
|
19616
|
+
}
|
|
19617
|
+
for (const page of config.pages || []) if (walk(page)) return true;
|
|
19618
|
+
return false;
|
|
19619
|
+
}
|
|
19620
|
+
const previewBlur = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
19621
|
+
__proto__: null,
|
|
19622
|
+
hasAnyPreviewBlur,
|
|
19623
|
+
injectPreviewBlur
|
|
19624
|
+
}, Symbol.toStringTag, { value: "Module" }));
|
|
19436
19625
|
const SELECT_COLUMNS = "id,name,description,category,thumbnail_url,preview_images,price,download_count,workspace_id,sort_order,created_at,updated_at";
|
|
19437
19626
|
async function listPublishedTemplates(options) {
|
|
19438
19627
|
const { workspaceId, supabaseUrl, supabaseAnonKey, category, limit = 200, offset = 0 } = options;
|
|
@@ -19584,7 +19773,6 @@ exports.applyThemeToConfig = applyThemeToConfig;
|
|
|
19584
19773
|
exports.assemblePdfFromSvgs = assemblePdfFromSvgs;
|
|
19585
19774
|
exports.awaitFontsForConfig = awaitFontsForConfig;
|
|
19586
19775
|
exports.bakeEdgeFade = bakeEdgeFade;
|
|
19587
|
-
exports.baseId = baseId;
|
|
19588
19776
|
exports.buildRoundedTrianglePath = buildRoundedTrianglePath;
|
|
19589
19777
|
exports.canvasImageLoader = canvasImageLoader;
|
|
19590
19778
|
exports.captureFabricCanvasSvgForPdf = captureFabricCanvasSvgForPdf;
|
|
@@ -19608,7 +19796,9 @@ exports.getPublishedTemplate = getPublishedTemplate;
|
|
|
19608
19796
|
exports.getRoundedRectRadii = getRoundedRectRadii;
|
|
19609
19797
|
exports.getTemplateForm = getTemplateForm;
|
|
19610
19798
|
exports.getTrianglePoints = getTrianglePoints;
|
|
19799
|
+
exports.hasAnyPreviewBlur = hasAnyPreviewBlur;
|
|
19611
19800
|
exports.hasEdgeFade = hasEdgeFade;
|
|
19801
|
+
exports.injectPreviewBlur = injectPreviewBlur;
|
|
19612
19802
|
exports.isBundledAssetUrl = isBundledAssetUrl;
|
|
19613
19803
|
exports.isElement = isElement;
|
|
19614
19804
|
exports.isFontAvailable = isFontAvailable;
|
|
@@ -19620,6 +19810,7 @@ exports.normalizeFontFamily = normalizeFontFamily;
|
|
|
19620
19810
|
exports.normalizeShapeType = normalizeShapeType;
|
|
19621
19811
|
exports.parseTextMarkdown = parseTextMarkdown;
|
|
19622
19812
|
exports.renderSmartElementToSvg = renderSmartElementToSvg;
|
|
19813
|
+
exports.resolveBlurElementExactIdsFromFlatFormKeys = resolveBlurElementExactIdsFromFlatFormKeys;
|
|
19623
19814
|
exports.resolveFontWeight = resolveFontWeight;
|
|
19624
19815
|
exports.resolveFromForm = resolveFromForm;
|
|
19625
19816
|
exports.resolveTemplateData = resolveTemplateData;
|
|
@@ -19628,4 +19819,4 @@ exports.setAutoShrinkDebug = setAutoShrinkDebug;
|
|
|
19628
19819
|
exports.setBundledAssetPrefixes = setBundledAssetPrefixes;
|
|
19629
19820
|
exports.warmResolvedTemplateForPreview = warmResolvedTemplateForPreview;
|
|
19630
19821
|
exports.warmTemplateFromForm = warmTemplateFromForm;
|
|
19631
|
-
//# sourceMappingURL=index-
|
|
19822
|
+
//# sourceMappingURL=index-DgMi1JSR.cjs.map
|