@pixldocs/canvas-renderer 0.5.211 → 0.5.212
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/dist/{index-C0tTvSFQ.js → index-B1QDVK5k.js} +71 -11
- package/dist/index-B1QDVK5k.js.map +1 -0
- package/dist/{index-d8U2oDzI.cjs → index-DB8j0PV0.cjs} +71 -11
- package/dist/index-DB8j0PV0.cjs.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/dist/{vectorPdfExport-BEGl71uB.js → vectorPdfExport-CN-N0DE8.js} +4 -4
- package/dist/{vectorPdfExport-BEGl71uB.js.map → vectorPdfExport-CN-N0DE8.js.map} +1 -1
- package/dist/{vectorPdfExport-QzySzFJJ.cjs → vectorPdfExport-zGrrm-iT.cjs} +4 -4
- package/dist/{vectorPdfExport-QzySzFJJ.cjs.map → vectorPdfExport-zGrrm-iT.cjs.map} +1 -1
- package/package.json +1 -1
- package/dist/index-C0tTvSFQ.js.map +0 -1
- package/dist/index-d8U2oDzI.cjs.map +0 -1
|
@@ -6902,8 +6902,10 @@ 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 { perPassAlpha } = resolveShadowStrength(element);
|
|
6906
|
+
const finalColor = applyAlphaMultiplier(String(color), perPassAlpha);
|
|
6905
6907
|
return new fabric__namespace.Shadow({
|
|
6906
|
-
color:
|
|
6908
|
+
color: finalColor,
|
|
6907
6909
|
blur: blur || 0,
|
|
6908
6910
|
offsetX: ox || 0,
|
|
6909
6911
|
offsetY: oy || 0,
|
|
@@ -6911,6 +6913,65 @@ function buildTextShadow(element) {
|
|
|
6911
6913
|
nonScaling: false
|
|
6912
6914
|
});
|
|
6913
6915
|
}
|
|
6916
|
+
function resolveShadowStrength(element) {
|
|
6917
|
+
const raw = element.textShadowStrength;
|
|
6918
|
+
const s = typeof raw === "number" && Number.isFinite(raw) ? Math.max(0, Math.min(100, raw)) : 25;
|
|
6919
|
+
if (s <= 0) return { perPassAlpha: 0, passes: 0 };
|
|
6920
|
+
if (s <= 25) return { perPassAlpha: s / 25, passes: 1 };
|
|
6921
|
+
const passes = Math.min(4, Math.ceil(s / 25));
|
|
6922
|
+
return { perPassAlpha: 1, passes };
|
|
6923
|
+
}
|
|
6924
|
+
function applyTextShadow(textbox, element) {
|
|
6925
|
+
const shadow = buildTextShadow(element);
|
|
6926
|
+
const { passes } = resolveShadowStrength(element);
|
|
6927
|
+
const obj = textbox;
|
|
6928
|
+
if (!obj.__pdShadowOrigRender) {
|
|
6929
|
+
obj.__pdShadowOrigRender = obj.render.bind(obj);
|
|
6930
|
+
obj.render = function(ctx) {
|
|
6931
|
+
const n = Math.max(1, Number(obj.__pdShadowPasses || 1));
|
|
6932
|
+
for (let i = 0; i < n; i++) obj.__pdShadowOrigRender(ctx);
|
|
6933
|
+
};
|
|
6934
|
+
}
|
|
6935
|
+
obj.__pdShadowPasses = shadow ? Math.max(1, passes) : 1;
|
|
6936
|
+
textbox.set("shadow", shadow ?? null);
|
|
6937
|
+
}
|
|
6938
|
+
function applyAlphaMultiplier(c, mult) {
|
|
6939
|
+
const m = Math.max(0, Math.min(1, mult));
|
|
6940
|
+
const s = String(c).trim();
|
|
6941
|
+
const rgba = s.match(/^rgba?\s*\(([^)]+)\)$/i);
|
|
6942
|
+
if (rgba) {
|
|
6943
|
+
const parts = rgba[1].split(",").map((p) => p.trim());
|
|
6944
|
+
const [r, g, b] = parts;
|
|
6945
|
+
const baseA = parts.length >= 4 ? Math.max(0, Math.min(1, parseFloat(parts[3]) || 0)) : 1;
|
|
6946
|
+
return `rgba(${r}, ${g}, ${b}, ${Math.round(baseA * m * 1e3) / 1e3})`;
|
|
6947
|
+
}
|
|
6948
|
+
const hex8 = s.match(/^#([0-9a-f]{8})$/i);
|
|
6949
|
+
if (hex8) {
|
|
6950
|
+
const h = hex8[1];
|
|
6951
|
+
const r = parseInt(h.slice(0, 2), 16);
|
|
6952
|
+
const g = parseInt(h.slice(2, 4), 16);
|
|
6953
|
+
const b = parseInt(h.slice(4, 6), 16);
|
|
6954
|
+
const baseA = parseInt(h.slice(6, 8), 16) / 255;
|
|
6955
|
+
return `rgba(${r}, ${g}, ${b}, ${Math.round(baseA * m * 1e3) / 1e3})`;
|
|
6956
|
+
}
|
|
6957
|
+
const hex6 = s.match(/^#([0-9a-f]{6})$/i);
|
|
6958
|
+
if (hex6) {
|
|
6959
|
+
const h = hex6[1];
|
|
6960
|
+
const r = parseInt(h.slice(0, 2), 16);
|
|
6961
|
+
const g = parseInt(h.slice(2, 4), 16);
|
|
6962
|
+
const b = parseInt(h.slice(4, 6), 16);
|
|
6963
|
+
return `rgba(${r}, ${g}, ${b}, ${Math.round(m * 1e3) / 1e3})`;
|
|
6964
|
+
}
|
|
6965
|
+
const hex3 = s.match(/^#([0-9a-f]{3})$/i);
|
|
6966
|
+
if (hex3) {
|
|
6967
|
+
const h = hex3[1];
|
|
6968
|
+
const r = parseInt(h[0] + h[0], 16);
|
|
6969
|
+
const g = parseInt(h[1] + h[1], 16);
|
|
6970
|
+
const b = parseInt(h[2] + h[2], 16);
|
|
6971
|
+
return `rgba(${r}, ${g}, ${b}, ${Math.round(m * 1e3) / 1e3})`;
|
|
6972
|
+
}
|
|
6973
|
+
return `rgba(0, 0, 0, ${Math.round(m * 1e3) / 1e3})`;
|
|
6974
|
+
}
|
|
6914
6975
|
function buildRoundedRectPath2D(ctx, x, y, w, h, rTL, rTR, rBR, rBL) {
|
|
6915
6976
|
const maxR = Math.min(w, h) / 2;
|
|
6916
6977
|
const tl = Math.min(Math.max(0, rTL), maxR);
|
|
@@ -8475,8 +8536,7 @@ function createText(element) {
|
|
|
8475
8536
|
}));
|
|
8476
8537
|
}
|
|
8477
8538
|
applyTextBackground(textbox, extractTextBgConfig(element));
|
|
8478
|
-
|
|
8479
|
-
if (shadow) textbox.set("shadow", shadow);
|
|
8539
|
+
applyTextShadow(textbox, element);
|
|
8480
8540
|
return textbox;
|
|
8481
8541
|
}
|
|
8482
8542
|
function createLine(element) {
|
|
@@ -12283,8 +12343,7 @@ const PageCanvas = react.forwardRef(
|
|
|
12283
12343
|
obj.dirty = true;
|
|
12284
12344
|
try {
|
|
12285
12345
|
applyTextBackground(obj, extractTextBgConfig(element));
|
|
12286
|
-
|
|
12287
|
-
obj.set("shadow", shadow ?? null);
|
|
12346
|
+
applyTextShadow(obj, element);
|
|
12288
12347
|
try {
|
|
12289
12348
|
obj._cacheCanvas = null;
|
|
12290
12349
|
obj._cacheContext = null;
|
|
@@ -12312,7 +12371,8 @@ const PageCanvas = react.forwardRef(
|
|
|
12312
12371
|
sy: element.textShadowOffsetY ?? 0,
|
|
12313
12372
|
st: element.textShadowAffectsText !== false,
|
|
12314
12373
|
sa: element.textShadowAffectsBg !== false,
|
|
12315
|
-
sty: element.textShadowType ?? null
|
|
12374
|
+
sty: element.textShadowType ?? null,
|
|
12375
|
+
ss: element.textShadowStrength ?? null
|
|
12316
12376
|
});
|
|
12317
12377
|
obj.dirty = true;
|
|
12318
12378
|
} catch (err) {
|
|
@@ -18970,9 +19030,9 @@ function captureFabricCanvasSvgForPdf(fabricInstance, canvasWidth, canvasHeight)
|
|
|
18970
19030
|
}
|
|
18971
19031
|
return svgString;
|
|
18972
19032
|
}
|
|
18973
|
-
const resolvedPackageVersion = "0.5.
|
|
19033
|
+
const resolvedPackageVersion = "0.5.212";
|
|
18974
19034
|
const PACKAGE_VERSION = resolvedPackageVersion;
|
|
18975
|
-
const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.
|
|
19035
|
+
const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.212";
|
|
18976
19036
|
const roundParityValue = (value) => {
|
|
18977
19037
|
if (typeof value !== "number") return value;
|
|
18978
19038
|
return Number.isFinite(value) ? Number(value.toFixed(3)) : value;
|
|
@@ -19664,7 +19724,7 @@ class PixldocsRenderer {
|
|
|
19664
19724
|
await this.waitForCanvasScene(container, cloned, i);
|
|
19665
19725
|
}
|
|
19666
19726
|
console.log(`[canvas-renderer][pdf-unified] mounted ${cloned.pages.length} page(s), handing off to client exportMultiPagePdf`);
|
|
19667
|
-
const { exportMultiPagePdf, preparePagesForExport } = await Promise.resolve().then(() => require("./vectorPdfExport-
|
|
19727
|
+
const { exportMultiPagePdf, preparePagesForExport } = await Promise.resolve().then(() => require("./vectorPdfExport-zGrrm-iT.cjs"));
|
|
19668
19728
|
const prepared = preparePagesForExport(
|
|
19669
19729
|
cloned.pages,
|
|
19670
19730
|
canvasWidth,
|
|
@@ -21850,7 +21910,7 @@ async function prepareLiveCanvasSvgForPdf(rawSvg, pageWidth, pageHeight, pageKey
|
|
|
21850
21910
|
if (options == null ? void 0 : options.stripPageBackground) stripRootPageBackgroundFromSvg(svgToDraw);
|
|
21851
21911
|
sanitizeSvgTreeForPdf(svgToDraw);
|
|
21852
21912
|
try {
|
|
21853
|
-
const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await Promise.resolve().then(() => require("./vectorPdfExport-
|
|
21913
|
+
const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await Promise.resolve().then(() => require("./vectorPdfExport-zGrrm-iT.cjs"));
|
|
21854
21914
|
try {
|
|
21855
21915
|
await logTextMeasurementDiagnostic(svgToDraw);
|
|
21856
21916
|
} catch {
|
|
@@ -22247,4 +22307,4 @@ exports.setAutoShrinkDebug = setAutoShrinkDebug;
|
|
|
22247
22307
|
exports.setBundledAssetPrefixes = setBundledAssetPrefixes;
|
|
22248
22308
|
exports.warmResolvedTemplateForPreview = warmResolvedTemplateForPreview;
|
|
22249
22309
|
exports.warmTemplateFromForm = warmTemplateFromForm;
|
|
22250
|
-
//# sourceMappingURL=index-
|
|
22310
|
+
//# sourceMappingURL=index-DB8j0PV0.cjs.map
|