@pixldocs/canvas-renderer 0.5.148 → 0.5.150
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-Bt1m9Esp.cjs → index-CczB1vpO.cjs} +5 -5
- package/dist/{index-Bt1m9Esp.cjs.map → index-CczB1vpO.cjs.map} +1 -1
- package/dist/{index-BkhtOI5W.js → index-khnxviCH.js} +5 -5
- package/dist/{index-BkhtOI5W.js.map → index-khnxviCH.js.map} +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/dist/{vectorPdfExport-BX2pT0Zn.js → vectorPdfExport-CDnEStQk.js} +46 -21
- package/dist/vectorPdfExport-CDnEStQk.js.map +1 -0
- package/dist/{vectorPdfExport-JGntLQJQ.cjs → vectorPdfExport-qAWd8i87.cjs} +46 -21
- package/dist/vectorPdfExport-qAWd8i87.cjs.map +1 -0
- package/package.json +1 -1
- package/dist/vectorPdfExport-BX2pT0Zn.js.map +0 -1
- package/dist/vectorPdfExport-JGntLQJQ.cjs.map +0 -1
package/dist/index.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const index = require("./index-
|
|
3
|
+
const index = require("./index-CczB1vpO.cjs");
|
|
4
4
|
exports.DEPLOYMENT_VERSION_MARKER = index.DEPLOYMENT_VERSION_MARKER;
|
|
5
5
|
exports.FONT_FALLBACK_DEVANAGARI = index.FONT_FALLBACK_DEVANAGARI;
|
|
6
6
|
exports.FONT_FALLBACK_MATH = index.FONT_FALLBACK_MATH;
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { D, F, o, q, s, P, t, u, v, w, x, y, z, B, C, E, G, H, I, J, K, L, b, M, N, O, Q, R, S, U, V, W, X, Y, Z, _ } from "./index-
|
|
1
|
+
import { D, F, o, q, s, P, t, u, v, w, x, y, z, B, C, E, G, H, I, J, K, L, b, M, N, O, Q, R, S, U, V, W, X, Y, Z, _ } from "./index-khnxviCH.js";
|
|
2
2
|
export {
|
|
3
3
|
D as DEPLOYMENT_VERSION_MARKER,
|
|
4
4
|
F as FONT_FALLBACK_DEVANAGARI,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsPDF, ShadingPattern } from "jspdf";
|
|
2
2
|
import { svg2pdf } from "svg2pdf.js";
|
|
3
3
|
import * as fabric from "fabric";
|
|
4
|
-
import { g as getCanvasForPage, c as captureFabricCanvasSvgForPdf, f as findNodeById, a as getAbsoluteBounds, p as parseTextMarkdown, r as renderSmartElementToSvg, n as normalizeShapeType, h as hasEdgeFade, b as getProxiedImageUrl, d as bakeEdgeFade, i as isElement, e as isGroup, j as buildRoundedTrianglePath, A as API_URL, k as getImageProxyFetchOptions, l as getRoundedRectRadii, T as TRIANGLE_STROKE_MITER_LIMIT, m as getTrianglePoints } from "./index-
|
|
4
|
+
import { g as getCanvasForPage, c as captureFabricCanvasSvgForPdf, f as findNodeById, a as getAbsoluteBounds, p as parseTextMarkdown, r as renderSmartElementToSvg, n as normalizeShapeType, h as hasEdgeFade, b as getProxiedImageUrl, d as bakeEdgeFade, i as isElement, e as isGroup, j as buildRoundedTrianglePath, A as API_URL, k as getImageProxyFetchOptions, l as getRoundedRectRadii, T as TRIANGLE_STROKE_MITER_LIMIT, m as getTrianglePoints } from "./index-khnxviCH.js";
|
|
5
5
|
import { resetPdfFontRegistry, FONT_FALLBACK_SYMBOLS, FONT_FALLBACK_MATH, FONT_FALLBACK_DEVANAGARI, embedFontWithGoogleFallback, getEmbeddedVariantsList, isFontAvailable, isFamilyEmbedded, resolveBestRegisteredVariant, getEmbeddedJsPDFFontName, resolveFontWeight, doesVariantSupportChar } from "./pdfFonts-b3_bv7F0.js";
|
|
6
6
|
async function embedFontsForSvg(pdf, svgStr) {
|
|
7
7
|
var _a;
|
|
@@ -1234,24 +1234,26 @@ async function bakeTextAnchorPositionsFromLiveSvg(svg) {
|
|
|
1234
1234
|
if (cleaned) node.setAttribute("style", cleaned);
|
|
1235
1235
|
else node.removeAttribute("style");
|
|
1236
1236
|
};
|
|
1237
|
-
const
|
|
1237
|
+
const readInheritedX = (node) => {
|
|
1238
|
+
let cur = node;
|
|
1239
|
+
while (cur) {
|
|
1240
|
+
const v = cur.getAttribute("x");
|
|
1241
|
+
if (v) {
|
|
1242
|
+
const parsed = parseFloat(v.split(/[\s,]+/)[0]);
|
|
1243
|
+
return Number.isFinite(parsed) ? parsed : NaN;
|
|
1244
|
+
}
|
|
1245
|
+
cur = cur.parentElement;
|
|
1246
|
+
}
|
|
1247
|
+
return NaN;
|
|
1248
|
+
};
|
|
1249
|
+
const bakeNode = (srcNode, liveNode, anchorOverride, refXOverride) => {
|
|
1238
1250
|
const anchor = (anchorOverride || _resolveAnchor(srcNode)).trim().toLowerCase();
|
|
1239
1251
|
if (anchor !== "middle" && anchor !== "end") return;
|
|
1240
1252
|
try {
|
|
1241
1253
|
const content = srcNode.textContent || "";
|
|
1242
1254
|
if (content.length > 0) {
|
|
1243
1255
|
const width = _measureWidthCanvas(srcNode, content);
|
|
1244
|
-
|
|
1245
|
-
let cur = srcNode;
|
|
1246
|
-
while (cur) {
|
|
1247
|
-
const v = cur.getAttribute("x");
|
|
1248
|
-
if (v) {
|
|
1249
|
-
refXAttr = v;
|
|
1250
|
-
break;
|
|
1251
|
-
}
|
|
1252
|
-
cur = cur.parentElement;
|
|
1253
|
-
}
|
|
1254
|
-
const refX = refXAttr !== null ? parseFloat(refXAttr.split(/[\s,]+/)[0]) : NaN;
|
|
1256
|
+
const refX = Number.isFinite(refXOverride) ? refXOverride : readInheritedX(srcNode);
|
|
1255
1257
|
if (width !== null && Number.isFinite(refX)) {
|
|
1256
1258
|
const newX = anchor === "middle" ? refX - width / 2 : refX - width;
|
|
1257
1259
|
srcNode.setAttribute("x", String(newX));
|
|
@@ -1278,9 +1280,15 @@ async function bakeTextAnchorPositionsFromLiveSvg(svg) {
|
|
|
1278
1280
|
if (srcTspans.length > 0) {
|
|
1279
1281
|
const parentAnchor = _resolveAnchor(srcText);
|
|
1280
1282
|
const tspanAnchors = srcTspans.map((tspan) => _resolveAnchor(tspan));
|
|
1281
|
-
|
|
1283
|
+
const parentRefX = readInheritedX(srcText);
|
|
1284
|
+
const tspanRefXs = srcTspans.map((tspan) => readInheritedX(tspan));
|
|
1282
1285
|
for (let j = 0; j < srcTspans.length; j++) {
|
|
1283
|
-
|
|
1286
|
+
const refX = Number.isFinite(tspanRefXs[j]) ? tspanRefXs[j] : parentRefX;
|
|
1287
|
+
if (liveTspans[j]) bakeNode(srcTspans[j], liveTspans[j], tspanAnchors[j] || parentAnchor, refX);
|
|
1288
|
+
}
|
|
1289
|
+
if (parentAnchor === "middle" || parentAnchor === "end") {
|
|
1290
|
+
srcText.setAttribute("text-anchor", "start");
|
|
1291
|
+
stripTextAnchorStyle(srcText);
|
|
1284
1292
|
}
|
|
1285
1293
|
} else {
|
|
1286
1294
|
bakeNode(srcText, liveText);
|
|
@@ -1827,7 +1835,7 @@ async function collectInlinedFontFaceCss() {
|
|
|
1827
1835
|
return cachedInlinedFontFaceCss;
|
|
1828
1836
|
}
|
|
1829
1837
|
async function prepareLiveCanvasSvgForPdf(rawSvg, pageWidth, pageHeight, pageKey, options) {
|
|
1830
|
-
var _a;
|
|
1838
|
+
var _a, _b;
|
|
1831
1839
|
try {
|
|
1832
1840
|
const parser = new DOMParser();
|
|
1833
1841
|
const processedSvg = inlineNestedSvgImageDataUris(rawSvg, parser);
|
|
@@ -1846,7 +1854,7 @@ async function prepareLiveCanvasSvgForPdf(rawSvg, pageWidth, pageHeight, pageKey
|
|
|
1846
1854
|
normalizeSvgViewBoxOrigin(svg);
|
|
1847
1855
|
disambiguateNestedSvgIds(svg);
|
|
1848
1856
|
expandSvgUseElements(svg, pageKey);
|
|
1849
|
-
|
|
1857
|
+
let svgToDraw = normalizeSvgExplicitColors(svg);
|
|
1850
1858
|
inlineComputedStyles(svgToDraw);
|
|
1851
1859
|
sanitizeSvgTreeForPdf(svgToDraw);
|
|
1852
1860
|
normalizeSvgGradientStopOffsets(svgToDraw);
|
|
@@ -1865,10 +1873,27 @@ async function prepareLiveCanvasSvgForPdf(rawSvg, pageWidth, pageHeight, pageKey
|
|
|
1865
1873
|
console.warn("[Vector PDF] anchor-bake pass failed (continuing):", e);
|
|
1866
1874
|
}
|
|
1867
1875
|
await rasterizeShadowMarkers(svgToDraw);
|
|
1876
|
+
try {
|
|
1877
|
+
if (svgToDraw.querySelector("g[data-pd-shadow-blur] text")) {
|
|
1878
|
+
const { convertAllTextToPath } = await import("./svgTextToPath-ws6Fh3rx.js");
|
|
1879
|
+
const outlined = await convertAllTextToPath(
|
|
1880
|
+
new XMLSerializer().serializeToString(svgToDraw),
|
|
1881
|
+
void 0,
|
|
1882
|
+
{ mode: "shadow-bound" }
|
|
1883
|
+
);
|
|
1884
|
+
const outlinedDoc = parser.parseFromString(outlined, "image/svg+xml");
|
|
1885
|
+
if (!outlinedDoc.querySelector("parsererror") && ((_a = outlinedDoc.documentElement) == null ? void 0 : _a.tagName.toLowerCase()) === "svg") {
|
|
1886
|
+
svgToDraw = outlinedDoc.documentElement;
|
|
1887
|
+
console.log("[Vector PDF][parity] shadow-bound text outlined for headless alignment");
|
|
1888
|
+
}
|
|
1889
|
+
}
|
|
1890
|
+
} catch (outlineErr) {
|
|
1891
|
+
console.warn("[Vector PDF] shadow-bound text outline failed (continuing):", outlineErr);
|
|
1892
|
+
}
|
|
1868
1893
|
await convertTextDecorationsToLines(svgToDraw);
|
|
1869
1894
|
const rewritten = rewriteSvgFontsForJsPDFWithSourceMeta(new XMLSerializer().serializeToString(svgToDraw));
|
|
1870
1895
|
const rewrittenDoc = parser.parseFromString(rewritten, "image/svg+xml");
|
|
1871
|
-
if (!rewrittenDoc.querySelector("parsererror") && ((
|
|
1896
|
+
if (!rewrittenDoc.querySelector("parsererror") && ((_b = rewrittenDoc.documentElement) == null ? void 0 : _b.tagName.toLowerCase()) === "svg") {
|
|
1872
1897
|
return rewrittenDoc.documentElement;
|
|
1873
1898
|
}
|
|
1874
1899
|
return svgToDraw;
|
|
@@ -2450,7 +2475,7 @@ async function fetchSvgAsElement(imageUrl, colorMap) {
|
|
|
2450
2475
|
async function getRecoloredSvgDataUrl(imageUrl, colorMap) {
|
|
2451
2476
|
if (!colorMap || Object.keys(colorMap).length === 0) return null;
|
|
2452
2477
|
try {
|
|
2453
|
-
const { getNormalizedSvgUrl } = await import("./index-
|
|
2478
|
+
const { getNormalizedSvgUrl } = await import("./index-khnxviCH.js").then((n) => n.$);
|
|
2454
2479
|
return await getNormalizedSvgUrl(imageUrl, colorMap);
|
|
2455
2480
|
} catch {
|
|
2456
2481
|
return null;
|
|
@@ -3231,7 +3256,7 @@ async function fetchImageAsBase64(imageUrl, opts = {}) {
|
|
|
3231
3256
|
}
|
|
3232
3257
|
let fetchUrl = imageUrl;
|
|
3233
3258
|
if (imageUrl.startsWith("http://") || imageUrl.startsWith("https://")) {
|
|
3234
|
-
const { isPrivateUrl } = await import("./index-
|
|
3259
|
+
const { isPrivateUrl } = await import("./index-khnxviCH.js").then((n) => n.$);
|
|
3235
3260
|
if (isPrivateUrl(imageUrl)) return null;
|
|
3236
3261
|
const proxyUrl = new URL(`${API_URL}/image-proxy`);
|
|
3237
3262
|
proxyUrl.searchParams.set("url", imageUrl);
|
|
@@ -5215,4 +5240,4 @@ export {
|
|
|
5215
5240
|
preparePagesForExport,
|
|
5216
5241
|
rewriteSvgFontsForJsPDFWithSourceMeta
|
|
5217
5242
|
};
|
|
5218
|
-
//# sourceMappingURL=vectorPdfExport-
|
|
5243
|
+
//# sourceMappingURL=vectorPdfExport-CDnEStQk.js.map
|