@pixldocs/canvas-renderer 0.5.16 → 0.5.17
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 +51 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +51 -5
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -369,6 +369,8 @@ export declare class PixldocsRenderer {
|
|
|
369
369
|
renderAllById(templateId: string, formData?: Record<string, any>, options?: Omit<RenderOptions, 'pageIndex'>): Promise<RenderResult[]>;
|
|
370
370
|
private getExpectedImageCount;
|
|
371
371
|
private waitForCanvasImages;
|
|
372
|
+
private waitForCanvasScene;
|
|
373
|
+
private waitForRelevantFonts;
|
|
372
374
|
private getNormalizedGradientStops;
|
|
373
375
|
private paintPageBackground;
|
|
374
376
|
private renderPageViaPreviewCanvas;
|
package/dist/index.js
CHANGED
|
@@ -12281,6 +12281,49 @@ class PixldocsRenderer {
|
|
|
12281
12281
|
setTimeout(check, 0);
|
|
12282
12282
|
});
|
|
12283
12283
|
}
|
|
12284
|
+
waitForCanvasScene(container, config, pageIndex, maxWaitMs = 8e3, pollMs = 50) {
|
|
12285
|
+
return new Promise((resolve) => {
|
|
12286
|
+
var _a, _b;
|
|
12287
|
+
const start = Date.now();
|
|
12288
|
+
const pageHasContent = (((_b = (_a = config.pages[pageIndex]) == null ? void 0 : _a.children) == null ? void 0 : _b.length) ?? 0) > 0;
|
|
12289
|
+
const settle = () => requestAnimationFrame(() => requestAnimationFrame(() => resolve()));
|
|
12290
|
+
const check = () => {
|
|
12291
|
+
const fabricCanvas = this.getFabricCanvasFromContainer(container);
|
|
12292
|
+
const lowerCanvas = (fabricCanvas == null ? void 0 : fabricCanvas.lowerCanvasEl) || container.querySelector("canvas.lower-canvas, canvas");
|
|
12293
|
+
const objectCount = typeof (fabricCanvas == null ? void 0 : fabricCanvas.getObjects) === "function" ? fabricCanvas.getObjects().length : 0;
|
|
12294
|
+
const ready = !!lowerCanvas && (!pageHasContent || objectCount > 0);
|
|
12295
|
+
if (ready) {
|
|
12296
|
+
console.log(`[canvas-renderer][scene-wait] ready after ${Date.now() - start}ms (objects=${objectCount})`);
|
|
12297
|
+
settle();
|
|
12298
|
+
return;
|
|
12299
|
+
}
|
|
12300
|
+
if (Date.now() - start >= maxWaitMs) {
|
|
12301
|
+
console.warn(`[canvas-renderer][scene-wait-timeout] elapsed=${Date.now() - start}ms objects=${objectCount} pageHasContent=${pageHasContent}`);
|
|
12302
|
+
settle();
|
|
12303
|
+
return;
|
|
12304
|
+
}
|
|
12305
|
+
setTimeout(check, pollMs);
|
|
12306
|
+
};
|
|
12307
|
+
setTimeout(check, 0);
|
|
12308
|
+
});
|
|
12309
|
+
}
|
|
12310
|
+
async waitForRelevantFonts(config, maxWaitMs = 1800) {
|
|
12311
|
+
if (typeof document === "undefined" || !document.fonts) return;
|
|
12312
|
+
const descriptors = collectFontDescriptorsFromConfig(config);
|
|
12313
|
+
if (descriptors.length === 0) return;
|
|
12314
|
+
const loads = Promise.all(
|
|
12315
|
+
descriptors.map((descriptor) => {
|
|
12316
|
+
const stylePrefix = descriptor.style === "italic" ? "italic " : "";
|
|
12317
|
+
const spec = `${stylePrefix}${descriptor.weight} 16px "${descriptor.family}"`;
|
|
12318
|
+
return document.fonts.load(spec).catch(() => []);
|
|
12319
|
+
})
|
|
12320
|
+
).then(() => void 0);
|
|
12321
|
+
await Promise.race([
|
|
12322
|
+
loads,
|
|
12323
|
+
new Promise((resolve) => setTimeout(resolve, maxWaitMs))
|
|
12324
|
+
]);
|
|
12325
|
+
await new Promise((resolve) => requestAnimationFrame(() => requestAnimationFrame(() => resolve())));
|
|
12326
|
+
}
|
|
12284
12327
|
getNormalizedGradientStops(gradient) {
|
|
12285
12328
|
const stops = Array.isArray(gradient == null ? void 0 : gradient.stops) ? gradient.stops.map((stop) => ({
|
|
12286
12329
|
offset: Math.max(0, Math.min(1, Number((stop == null ? void 0 : stop.offset) ?? 0))),
|
|
@@ -12393,10 +12436,11 @@ class PixldocsRenderer {
|
|
|
12393
12436
|
);
|
|
12394
12437
|
return;
|
|
12395
12438
|
}
|
|
12396
|
-
|
|
12397
|
-
this.waitForCanvasImages(container, expectedImageCount).then(async () => {
|
|
12439
|
+
this.waitForCanvasScene(container, config, pageIndex).then(async () => {
|
|
12398
12440
|
try {
|
|
12399
12441
|
const fabricInstance = this.getFabricCanvasFromContainer(container);
|
|
12442
|
+
const expectedImageCount = this.getExpectedImageCount(config, pageIndex);
|
|
12443
|
+
await this.waitForCanvasImages(container, expectedImageCount);
|
|
12400
12444
|
await this.waitForStableTextMetrics(container, config);
|
|
12401
12445
|
const fabricCanvas = container.querySelector("canvas.upper-canvas, canvas");
|
|
12402
12446
|
const sourceCanvas = (fabricInstance == null ? void 0 : fabricInstance.lowerCanvasEl) || container.querySelector("canvas.lower-canvas") || fabricCanvas;
|
|
@@ -12487,8 +12531,7 @@ class PixldocsRenderer {
|
|
|
12487
12531
|
);
|
|
12488
12532
|
return;
|
|
12489
12533
|
}
|
|
12490
|
-
|
|
12491
|
-
this.waitForCanvasImages(container, expectedImageCount).then(async () => {
|
|
12534
|
+
this.waitForCanvasScene(container, config, pageIndex).then(async () => {
|
|
12492
12535
|
var _a, _b;
|
|
12493
12536
|
try {
|
|
12494
12537
|
const fabricInstance = this.getFabricCanvasFromContainer(container);
|
|
@@ -12497,6 +12540,8 @@ class PixldocsRenderer {
|
|
|
12497
12540
|
reject(new Error("No Fabric canvas instance found for SVG capture"));
|
|
12498
12541
|
return;
|
|
12499
12542
|
}
|
|
12543
|
+
const expectedImageCount = this.getExpectedImageCount(config, pageIndex);
|
|
12544
|
+
await this.waitForCanvasImages(container, expectedImageCount);
|
|
12500
12545
|
await this.waitForStableTextMetrics(container, config);
|
|
12501
12546
|
const prevVPT = fabricInstance.viewportTransform ? [...fabricInstance.viewportTransform] : void 0;
|
|
12502
12547
|
const prevSvgVPT = fabricInstance.svgViewportTransformation;
|
|
@@ -12621,7 +12666,8 @@ class PixldocsRenderer {
|
|
|
12621
12666
|
}
|
|
12622
12667
|
async waitForStableTextMetrics(container, config) {
|
|
12623
12668
|
if (typeof document !== "undefined") {
|
|
12624
|
-
|
|
12669
|
+
void ensureFontsForResolvedConfig(config);
|
|
12670
|
+
await this.waitForRelevantFonts(config);
|
|
12625
12671
|
}
|
|
12626
12672
|
const fabricInstance = this.getFabricCanvasFromContainer(container);
|
|
12627
12673
|
if (!(fabricInstance == null ? void 0 : fabricInstance.getObjects)) return;
|