@pixldocs/canvas-renderer 0.5.148 → 0.5.149

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.
@@ -3,7 +3,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jspdf = require("jspdf");
4
4
  const svg2pdf_js = require("svg2pdf.js");
5
5
  const fabric = require("fabric");
6
- const index = require("./index-Bt1m9Esp.cjs");
6
+ const index = require("./index-C6IaOn7u.cjs");
7
7
  const pdfFonts = require("./pdfFonts-BTEVnYX8.cjs");
8
8
  function _interopNamespaceDefault(e) {
9
9
  const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
@@ -1253,24 +1253,26 @@ async function bakeTextAnchorPositionsFromLiveSvg(svg) {
1253
1253
  if (cleaned) node.setAttribute("style", cleaned);
1254
1254
  else node.removeAttribute("style");
1255
1255
  };
1256
- const bakeNode = (srcNode, liveNode, anchorOverride) => {
1256
+ const readInheritedX = (node) => {
1257
+ let cur = node;
1258
+ while (cur) {
1259
+ const v = cur.getAttribute("x");
1260
+ if (v) {
1261
+ const parsed = parseFloat(v.split(/[\s,]+/)[0]);
1262
+ return Number.isFinite(parsed) ? parsed : NaN;
1263
+ }
1264
+ cur = cur.parentElement;
1265
+ }
1266
+ return NaN;
1267
+ };
1268
+ const bakeNode = (srcNode, liveNode, anchorOverride, refXOverride) => {
1257
1269
  const anchor = (anchorOverride || _resolveAnchor(srcNode)).trim().toLowerCase();
1258
1270
  if (anchor !== "middle" && anchor !== "end") return;
1259
1271
  try {
1260
1272
  const content = srcNode.textContent || "";
1261
1273
  if (content.length > 0) {
1262
1274
  const width = _measureWidthCanvas(srcNode, content);
1263
- let refXAttr = null;
1264
- let cur = srcNode;
1265
- while (cur) {
1266
- const v = cur.getAttribute("x");
1267
- if (v) {
1268
- refXAttr = v;
1269
- break;
1270
- }
1271
- cur = cur.parentElement;
1272
- }
1273
- const refX = refXAttr !== null ? parseFloat(refXAttr.split(/[\s,]+/)[0]) : NaN;
1275
+ const refX = Number.isFinite(refXOverride) ? refXOverride : readInheritedX(srcNode);
1274
1276
  if (width !== null && Number.isFinite(refX)) {
1275
1277
  const newX = anchor === "middle" ? refX - width / 2 : refX - width;
1276
1278
  srcNode.setAttribute("x", String(newX));
@@ -1297,9 +1299,15 @@ async function bakeTextAnchorPositionsFromLiveSvg(svg) {
1297
1299
  if (srcTspans.length > 0) {
1298
1300
  const parentAnchor = _resolveAnchor(srcText);
1299
1301
  const tspanAnchors = srcTspans.map((tspan) => _resolveAnchor(tspan));
1300
- bakeNode(srcText, liveText, parentAnchor);
1302
+ const parentRefX = readInheritedX(srcText);
1303
+ const tspanRefXs = srcTspans.map((tspan) => readInheritedX(tspan));
1301
1304
  for (let j = 0; j < srcTspans.length; j++) {
1302
- if (liveTspans[j]) bakeNode(srcTspans[j], liveTspans[j], tspanAnchors[j]);
1305
+ const refX = Number.isFinite(tspanRefXs[j]) ? tspanRefXs[j] : parentRefX;
1306
+ if (liveTspans[j]) bakeNode(srcTspans[j], liveTspans[j], tspanAnchors[j] || parentAnchor, refX);
1307
+ }
1308
+ if (parentAnchor === "middle" || parentAnchor === "end") {
1309
+ srcText.setAttribute("text-anchor", "start");
1310
+ stripTextAnchorStyle(srcText);
1303
1311
  }
1304
1312
  } else {
1305
1313
  bakeNode(srcText, liveText);
@@ -2469,7 +2477,7 @@ async function fetchSvgAsElement(imageUrl, colorMap) {
2469
2477
  async function getRecoloredSvgDataUrl(imageUrl, colorMap) {
2470
2478
  if (!colorMap || Object.keys(colorMap).length === 0) return null;
2471
2479
  try {
2472
- const { getNormalizedSvgUrl } = await Promise.resolve().then(() => require("./index-Bt1m9Esp.cjs")).then((n) => n.canvasImageLoader);
2480
+ const { getNormalizedSvgUrl } = await Promise.resolve().then(() => require("./index-C6IaOn7u.cjs")).then((n) => n.canvasImageLoader);
2473
2481
  return await getNormalizedSvgUrl(imageUrl, colorMap);
2474
2482
  } catch {
2475
2483
  return null;
@@ -3250,7 +3258,7 @@ async function fetchImageAsBase64(imageUrl, opts = {}) {
3250
3258
  }
3251
3259
  let fetchUrl = imageUrl;
3252
3260
  if (imageUrl.startsWith("http://") || imageUrl.startsWith("https://")) {
3253
- const { isPrivateUrl } = await Promise.resolve().then(() => require("./index-Bt1m9Esp.cjs")).then((n) => n.canvasImageLoader);
3261
+ const { isPrivateUrl } = await Promise.resolve().then(() => require("./index-C6IaOn7u.cjs")).then((n) => n.canvasImageLoader);
3254
3262
  if (isPrivateUrl(imageUrl)) return null;
3255
3263
  const proxyUrl = new URL(`${index.API_URL}/image-proxy`);
3256
3264
  proxyUrl.searchParams.set("url", imageUrl);
@@ -5232,4 +5240,4 @@ exports.exportMultiPagePdf = exportMultiPagePdf;
5232
5240
  exports.logTextMeasurementDiagnostic = logTextMeasurementDiagnostic;
5233
5241
  exports.preparePagesForExport = preparePagesForExport;
5234
5242
  exports.rewriteSvgFontsForJsPDFWithSourceMeta = rewriteSvgFontsForJsPDFWithSourceMeta;
5235
- //# sourceMappingURL=vectorPdfExport-JGntLQJQ.cjs.map
5243
+ //# sourceMappingURL=vectorPdfExport-FwEcQIPB.cjs.map