@pixldocs/canvas-renderer 0.5.57 → 0.5.58
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.cjs +60 -6
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +23 -0
- package/dist/index.js +60 -6
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -12263,6 +12263,46 @@ async function ensureFontsForResolvedConfig(config) {
|
|
|
12263
12263
|
});
|
|
12264
12264
|
}
|
|
12265
12265
|
}
|
|
12266
|
+
function configHasAutoShrinkText$1(config) {
|
|
12267
|
+
var _a;
|
|
12268
|
+
if (!((_a = config == null ? void 0 : config.pages) == null ? void 0 : _a.length)) return false;
|
|
12269
|
+
const walk = (nodes) => {
|
|
12270
|
+
for (const node of nodes || []) {
|
|
12271
|
+
if (!node) continue;
|
|
12272
|
+
if (node.type === "text" && node.overflowPolicy === "auto-shrink") return true;
|
|
12273
|
+
if (Array.isArray(node.children) && node.children.length && walk(node.children)) return true;
|
|
12274
|
+
}
|
|
12275
|
+
return false;
|
|
12276
|
+
};
|
|
12277
|
+
for (const page of config.pages) {
|
|
12278
|
+
if (walk(page.children || [])) return true;
|
|
12279
|
+
}
|
|
12280
|
+
return false;
|
|
12281
|
+
}
|
|
12282
|
+
async function awaitFontsForConfig(config, maxWaitMs) {
|
|
12283
|
+
if (typeof document === "undefined" || !document.fonts) return;
|
|
12284
|
+
void ensureFontsForResolvedConfig(config);
|
|
12285
|
+
const descriptors = collectFontDescriptorsFromConfig(config);
|
|
12286
|
+
if (descriptors.length === 0) return;
|
|
12287
|
+
const loads = Promise.all(
|
|
12288
|
+
descriptors.map((d) => {
|
|
12289
|
+
const stylePrefix = d.style === "italic" ? "italic " : "";
|
|
12290
|
+
const spec = `${stylePrefix}${d.weight} 16px "${d.family}"`;
|
|
12291
|
+
return document.fonts.load(spec).catch(() => []);
|
|
12292
|
+
})
|
|
12293
|
+
).then(() => void 0);
|
|
12294
|
+
await Promise.race([
|
|
12295
|
+
loads,
|
|
12296
|
+
new Promise((resolve) => setTimeout(resolve, maxWaitMs))
|
|
12297
|
+
]);
|
|
12298
|
+
await Promise.race([
|
|
12299
|
+
document.fonts.ready.catch(() => void 0).then(() => void 0),
|
|
12300
|
+
new Promise((r) => setTimeout(r, Math.min(500, maxWaitMs)))
|
|
12301
|
+
]);
|
|
12302
|
+
await new Promise(
|
|
12303
|
+
(resolve) => requestAnimationFrame(() => requestAnimationFrame(() => resolve()))
|
|
12304
|
+
);
|
|
12305
|
+
}
|
|
12266
12306
|
const PREVIEW_DEBUG_PREFIX = "[canvas-renderer][preview-debug]";
|
|
12267
12307
|
function countUnderlinedNodes(config) {
|
|
12268
12308
|
var _a;
|
|
@@ -12348,15 +12388,17 @@ function PixldocsPreview(props) {
|
|
|
12348
12388
|
underlinedNodes: countUnderlinedNodes(resolved.config)
|
|
12349
12389
|
});
|
|
12350
12390
|
setResolvedConfig(resolved.config);
|
|
12351
|
-
|
|
12391
|
+
const hasAutoShrink = configHasAutoShrinkText$1(resolved.config);
|
|
12392
|
+
const waitMs = hasAutoShrink ? 4e3 : 1800;
|
|
12393
|
+
awaitFontsForConfig(resolved.config, waitMs).then(() => {
|
|
12352
12394
|
if (!cancelled) {
|
|
12353
|
-
console.log(PREVIEW_DEBUG_PREFIX, "resolve-mode fonts
|
|
12395
|
+
console.log(PREVIEW_DEBUG_PREFIX, "resolve-mode fonts settled", { hasAutoShrink, waitMs });
|
|
12354
12396
|
setFontsReady(true);
|
|
12355
12397
|
setIsLoading(false);
|
|
12356
12398
|
}
|
|
12357
12399
|
}).catch((err) => {
|
|
12358
12400
|
if (!cancelled) {
|
|
12359
|
-
console.warn(PREVIEW_DEBUG_PREFIX, "resolve-mode
|
|
12401
|
+
console.warn(PREVIEW_DEBUG_PREFIX, "resolve-mode font wait failed", err);
|
|
12360
12402
|
setFontsReady(true);
|
|
12361
12403
|
setIsLoading(false);
|
|
12362
12404
|
}
|
|
@@ -12425,16 +12467,26 @@ function PixldocsPreview(props) {
|
|
|
12425
12467
|
setFontsReady(false);
|
|
12426
12468
|
setCanvasSettled(false);
|
|
12427
12469
|
setStabilizationPass(0);
|
|
12428
|
-
|
|
12429
|
-
|
|
12470
|
+
let cancelled = false;
|
|
12471
|
+
const hasAutoShrink = configHasAutoShrinkText$1(config);
|
|
12472
|
+
const waitMs = hasAutoShrink ? 4e3 : 1800;
|
|
12473
|
+
awaitFontsForConfig(config, waitMs).then(() => {
|
|
12474
|
+
if (cancelled) return;
|
|
12475
|
+
console.log(PREVIEW_DEBUG_PREFIX, "config-mode fonts settled", {
|
|
12430
12476
|
pageIndex,
|
|
12477
|
+
hasAutoShrink,
|
|
12478
|
+
waitMs,
|
|
12431
12479
|
underlinedNodes: countUnderlinedNodes(config)
|
|
12432
12480
|
});
|
|
12433
12481
|
setFontsReady(true);
|
|
12434
12482
|
}).catch((err) => {
|
|
12435
|
-
|
|
12483
|
+
if (cancelled) return;
|
|
12484
|
+
console.warn(PREVIEW_DEBUG_PREFIX, "config-mode font wait failed", err);
|
|
12436
12485
|
setFontsReady(true);
|
|
12437
12486
|
});
|
|
12487
|
+
return () => {
|
|
12488
|
+
cancelled = true;
|
|
12489
|
+
};
|
|
12438
12490
|
}, [isResolveMode, config]);
|
|
12439
12491
|
const handleCanvasReady = react.useCallback(() => {
|
|
12440
12492
|
if (stabilizationPass === 0) {
|
|
@@ -15642,9 +15694,11 @@ exports.PixldocsPreview = PixldocsPreview;
|
|
|
15642
15694
|
exports.PixldocsRenderer = PixldocsRenderer;
|
|
15643
15695
|
exports.applyThemeToConfig = applyThemeToConfig;
|
|
15644
15696
|
exports.assemblePdfFromSvgs = assemblePdfFromSvgs;
|
|
15697
|
+
exports.awaitFontsForConfig = awaitFontsForConfig;
|
|
15645
15698
|
exports.collectFontDescriptorsFromConfig = collectFontDescriptorsFromConfig;
|
|
15646
15699
|
exports.collectFontsFromConfig = collectFontsFromConfig;
|
|
15647
15700
|
exports.collectImageUrls = collectImageUrls;
|
|
15701
|
+
exports.configHasAutoShrinkText = configHasAutoShrinkText$1;
|
|
15648
15702
|
exports.embedFont = embedFont;
|
|
15649
15703
|
exports.embedFontsForConfig = embedFontsForConfig;
|
|
15650
15704
|
exports.embedFontsInPdf = embedFontsInPdf;
|