@maxhealth.tech/prefab 0.3.22 → 0.3.24
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/CHANGELOG.md +61 -0
- package/README.md +8 -0
- package/dist/a2ui/catalog.d.ts.map +1 -1
- package/dist/a2ui/catalog.js +1 -10
- package/dist/a2ui/catalog.js.map +1 -1
- package/dist/a2ui/control.d.ts.map +1 -1
- package/dist/a2ui/control.js +1 -10
- package/dist/a2ui/control.js.map +1 -1
- package/dist/a2ui.min.js +1 -1
- package/dist/auto/chart.js +1 -1
- package/dist/auto/chart.js.map +1 -1
- package/dist/auto/comparison.js +1 -1
- package/dist/auto/comparison.js.map +1 -1
- package/dist/auto/form.d.ts +1 -1
- package/dist/auto/form.d.ts.map +1 -1
- package/dist/auto/form.js +15 -2
- package/dist/auto/form.js.map +1 -1
- package/dist/auto/index.d.ts +2 -10
- package/dist/auto/index.d.ts.map +1 -1
- package/dist/auto/index.js +5 -61
- package/dist/auto/index.js.map +1 -1
- package/dist/auto/metrics.js +1 -1
- package/dist/auto/metrics.js.map +1 -1
- package/dist/auto/progress.d.ts.map +1 -1
- package/dist/auto/progress.js +8 -7
- package/dist/auto/progress.js.map +1 -1
- package/dist/auto/status.d.ts +17 -0
- package/dist/auto/status.d.ts.map +1 -0
- package/dist/auto/status.js +79 -0
- package/dist/auto/status.js.map +1 -0
- package/dist/auto/timeline.d.ts.map +1 -1
- package/dist/auto/timeline.js +3 -14
- package/dist/auto/timeline.js.map +1 -1
- package/dist/components/form/index.d.ts +3 -2
- package/dist/components/form/index.d.ts.map +1 -1
- package/dist/components/form/index.js +8 -2
- package/dist/components/form/index.js.map +1 -1
- package/dist/components/layout/index.d.ts +7 -1
- package/dist/components/layout/index.d.ts.map +1 -1
- package/dist/components/layout/index.js +6 -2
- package/dist/components/layout/index.js.map +1 -1
- package/dist/core/guards.d.ts +2 -0
- package/dist/core/guards.d.ts.map +1 -1
- package/dist/core/guards.js +13 -1
- package/dist/core/guards.js.map +1 -1
- package/dist/core/version.d.ts +1 -1
- package/dist/core/version.js +1 -1
- package/dist/prefab.css +742 -427
- package/dist/renderer/cdn.d.ts +5 -0
- package/dist/renderer/cdn.d.ts.map +1 -0
- package/dist/renderer/cdn.js +19 -0
- package/dist/renderer/cdn.js.map +1 -0
- package/dist/renderer/components/alert.d.ts.map +1 -1
- package/dist/renderer/components/alert.js +2 -6
- package/dist/renderer/components/alert.js.map +1 -1
- package/dist/renderer/components/card.js +0 -2
- package/dist/renderer/components/card.js.map +1 -1
- package/dist/renderer/components/charts/cartesian.d.ts +2 -2
- package/dist/renderer/components/charts/cartesian.d.ts.map +1 -1
- package/dist/renderer/components/charts/cartesian.js +6 -7
- package/dist/renderer/components/charts/cartesian.js.map +1 -1
- package/dist/renderer/components/charts/helpers.d.ts +12 -2
- package/dist/renderer/components/charts/helpers.d.ts.map +1 -1
- package/dist/renderer/components/charts/helpers.js +64 -26
- package/dist/renderer/components/charts/helpers.js.map +1 -1
- package/dist/renderer/components/charts/index.d.ts.map +1 -1
- package/dist/renderer/components/charts/index.js +6 -5
- package/dist/renderer/components/charts/index.js.map +1 -1
- package/dist/renderer/components/charts/scatter.d.ts +2 -2
- package/dist/renderer/components/charts/scatter.d.ts.map +1 -1
- package/dist/renderer/components/charts/scatter.js +39 -20
- package/dist/renderer/components/charts/scatter.js.map +1 -1
- package/dist/renderer/components/choice.js +67 -39
- package/dist/renderer/components/choice.js.map +1 -1
- package/dist/renderer/components/data.d.ts.map +1 -1
- package/dist/renderer/components/data.js +42 -74
- package/dist/renderer/components/data.js.map +1 -1
- package/dist/renderer/components/form.d.ts +8 -10
- package/dist/renderer/components/form.d.ts.map +1 -1
- package/dist/renderer/components/form.js +147 -238
- package/dist/renderer/components/form.js.map +1 -1
- package/dist/renderer/components/interactive.d.ts.map +1 -1
- package/dist/renderer/components/interactive.js +115 -158
- package/dist/renderer/components/interactive.js.map +1 -1
- package/dist/renderer/components/layout.js +29 -14
- package/dist/renderer/components/layout.js.map +1 -1
- package/dist/renderer/components/media.d.ts.map +1 -1
- package/dist/renderer/components/media.js +24 -15
- package/dist/renderer/components/media.js.map +1 -1
- package/dist/renderer/components/pdf.d.ts +38 -0
- package/dist/renderer/components/pdf.d.ts.map +1 -1
- package/dist/renderer/components/pdf.js +152 -174
- package/dist/renderer/components/pdf.js.map +1 -1
- package/dist/renderer/components/table.d.ts +4 -0
- package/dist/renderer/components/table.d.ts.map +1 -1
- package/dist/renderer/components/table.js +47 -35
- package/dist/renderer/components/table.js.map +1 -1
- package/dist/renderer/icons.d.ts +5 -0
- package/dist/renderer/icons.d.ts.map +1 -0
- package/dist/renderer/icons.generated.d.ts +3 -0
- package/dist/renderer/icons.generated.d.ts.map +1 -0
- package/dist/renderer/icons.generated.js +64 -0
- package/dist/renderer/icons.generated.js.map +1 -0
- package/dist/renderer/icons.js +23 -0
- package/dist/renderer/icons.js.map +1 -0
- package/dist/renderer/index.js +7 -12
- package/dist/renderer/index.js.map +1 -1
- package/dist/renderer/theme.d.ts.map +1 -1
- package/dist/renderer/theme.js +3 -32
- package/dist/renderer/theme.js.map +1 -1
- package/dist/renderer.auto.min.js +10 -10
- package/dist/renderer.min.js +10 -10
- package/package.json +3 -1
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { registerComponent, resolveStr, el, makeDispatchCtx } from '../engine.js';
|
|
5
5
|
import { dispatchActions, fireAndForget } from '../actions.js';
|
|
6
|
-
import { optionalString } from '../../core/guards.js';
|
|
6
|
+
import { isRecord, optionalString } from '../../core/guards.js';
|
|
7
|
+
import { importFromCdn, prefersDark } from '../cdn.js';
|
|
7
8
|
import { stringifyValue } from '../../core/stringify.js';
|
|
8
9
|
export function registerMediaComponents() {
|
|
9
10
|
registerComponent('Image', renderImage);
|
|
@@ -24,7 +25,7 @@ function renderImage(node, ctx) {
|
|
|
24
25
|
img.width = Number(node.width);
|
|
25
26
|
if (node.height != null)
|
|
26
27
|
img.height = Number(node.height);
|
|
27
|
-
img.
|
|
28
|
+
img.loading = 'lazy';
|
|
28
29
|
return img;
|
|
29
30
|
}
|
|
30
31
|
function renderAudio(node, ctx) {
|
|
@@ -43,16 +44,13 @@ function renderVideo(node, ctx) {
|
|
|
43
44
|
video.width = Number(node.width);
|
|
44
45
|
if (node.height != null)
|
|
45
46
|
video.height = Number(node.height);
|
|
46
|
-
video.style.maxWidth = '100%';
|
|
47
47
|
return video;
|
|
48
48
|
}
|
|
49
49
|
function renderEmbed(node, ctx) {
|
|
50
50
|
const wrapper = el('div', 'pf-embed');
|
|
51
51
|
const iframe = document.createElement('iframe');
|
|
52
52
|
iframe.src = resolveStr(node.src, ctx);
|
|
53
|
-
iframe.style.width = '100%';
|
|
54
53
|
iframe.style.height = node.height != null ? `${String(Number(node.height))}px` : '400px';
|
|
55
|
-
iframe.style.border = 'none';
|
|
56
54
|
iframe.setAttribute('sandbox', 'allow-scripts');
|
|
57
55
|
wrapper.appendChild(iframe);
|
|
58
56
|
return wrapper;
|
|
@@ -125,9 +123,6 @@ export function matchesAccept(file, accept) {
|
|
|
125
123
|
}
|
|
126
124
|
function renderDropZone(node, ctx) {
|
|
127
125
|
const e = el('div', 'pf-dropzone');
|
|
128
|
-
e.style.padding = '32px';
|
|
129
|
-
e.style.textAlign = 'center';
|
|
130
|
-
e.style.cursor = 'pointer';
|
|
131
126
|
e.textContent = resolveStr(node.label ?? 'Drop files here', ctx);
|
|
132
127
|
// Click-to-browse, so the zone is not drag-only (and is reachable by keyboard).
|
|
133
128
|
const input = document.createElement('input');
|
|
@@ -184,17 +179,31 @@ function renderDropZone(node, ctx) {
|
|
|
184
179
|
});
|
|
185
180
|
return e;
|
|
186
181
|
}
|
|
182
|
+
const MERMAID_CDN = 'https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.esm.min.mjs';
|
|
183
|
+
let mermaidSeq = 0;
|
|
184
|
+
function isMermaidApi(value) {
|
|
185
|
+
return isRecord(value) && typeof value.initialize === 'function' && typeof value.render === 'function';
|
|
186
|
+
}
|
|
187
|
+
/** Show the diagram source right away, then swap in the SVG once mermaid.js loads from the CDN. */
|
|
187
188
|
function renderMermaid(node, ctx) {
|
|
188
189
|
const e = el('div', 'pf-mermaid');
|
|
189
190
|
e.setAttribute('data-mermaid', 'true');
|
|
190
191
|
const content = resolveStr(node.content, ctx);
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
if ('
|
|
195
|
-
e
|
|
196
|
-
|
|
197
|
-
|
|
192
|
+
const source = el('pre', 'pf-mermaid-source');
|
|
193
|
+
source.textContent = content;
|
|
194
|
+
e.appendChild(source);
|
|
195
|
+
if (content.trim() === '')
|
|
196
|
+
return e;
|
|
197
|
+
void importFromCdn(MERMAID_CDN).then(async (mod) => {
|
|
198
|
+
const api = isRecord(mod) ? mod.default : undefined;
|
|
199
|
+
if (!isMermaidApi(api))
|
|
200
|
+
return;
|
|
201
|
+
api.initialize({ startOnLoad: false, securityLevel: 'strict', theme: prefersDark(e) ? 'dark' : 'neutral', fontFamily: 'inherit' });
|
|
202
|
+
mermaidSeq += 1;
|
|
203
|
+
const { svg } = await api.render(`pf-mermaid-${String(mermaidSeq)}`, content);
|
|
204
|
+
e.innerHTML = svg;
|
|
205
|
+
e.setAttribute('data-state', 'rendered');
|
|
206
|
+
}).catch(() => { e.setAttribute('data-state', 'source'); });
|
|
198
207
|
return e;
|
|
199
208
|
}
|
|
200
209
|
//# sourceMappingURL=media.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media.js","sourceRoot":"","sources":["../../../src/renderer/components/media.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,EAAE,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAEjF,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"media.js","sourceRoot":"","sources":["../../../src/renderer/components/media.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,41 @@
|
|
|
1
1
|
/** PdfViewer renderer: lazy-loads PDF.js from the CDN and draws one page at a time to a <canvas>, with a page toolbar. */
|
|
2
|
+
/** Minimal type interface for the parts of PDF.js we use. */
|
|
3
|
+
interface PdfjsLib {
|
|
4
|
+
getDocument(src: {
|
|
5
|
+
url: string;
|
|
6
|
+
} | {
|
|
7
|
+
data: Uint8Array;
|
|
8
|
+
}): {
|
|
9
|
+
promise: Promise<PdfDocument>;
|
|
10
|
+
};
|
|
11
|
+
GlobalWorkerOptions: {
|
|
12
|
+
workerSrc: string;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
interface PdfDocument {
|
|
16
|
+
numPages: number;
|
|
17
|
+
getPage(num: number): Promise<PdfPage>;
|
|
18
|
+
}
|
|
19
|
+
interface PdfViewport {
|
|
20
|
+
width: number;
|
|
21
|
+
height: number;
|
|
22
|
+
}
|
|
23
|
+
interface PdfRenderTask {
|
|
24
|
+
promise: Promise<void>;
|
|
25
|
+
cancel(): void;
|
|
26
|
+
}
|
|
27
|
+
interface PdfPage {
|
|
28
|
+
getViewport(opts: {
|
|
29
|
+
scale: number;
|
|
30
|
+
}): PdfViewport;
|
|
31
|
+
render(opts: {
|
|
32
|
+
canvasContext: CanvasRenderingContext2D;
|
|
33
|
+
viewport: PdfViewport;
|
|
34
|
+
transform?: number[];
|
|
35
|
+
}): PdfRenderTask;
|
|
36
|
+
}
|
|
37
|
+
/** PDF.js 4 exports `GlobalWorkerOptions` as a class, so it is a function there and an object in older builds. */
|
|
38
|
+
export declare function isPdfjsLib(mod: unknown): mod is PdfjsLib;
|
|
2
39
|
export declare function registerPdfComponents(): void;
|
|
40
|
+
export {};
|
|
3
41
|
//# sourceMappingURL=pdf.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdf.d.ts","sourceRoot":"","sources":["../../../src/renderer/components/pdf.ts"],"names":[],"mappings":"AAAA,0HAA0H;
|
|
1
|
+
{"version":3,"file":"pdf.d.ts","sourceRoot":"","sources":["../../../src/renderer/components/pdf.ts"],"names":[],"mappings":"AAAA,0HAA0H;AAc1H,6DAA6D;AAC7D,UAAU,QAAQ;IAChB,WAAW,CAAC,GAAG,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,UAAU,CAAA;KAAE,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,CAAA;KAAE,CAAA;IAC3F,mBAAmB,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAA;CAC3C;AAED,UAAU,WAAW;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CACvC;AAED,UAAU,WAAW;IAAG,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AAEvD,UAAU,aAAa;IAAG,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAAC,MAAM,IAAI,IAAI,CAAA;CAAE;AAElE,UAAU,OAAO;IACf,WAAW,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,WAAW,CAAA;IACjD,MAAM,CAAC,IAAI,EAAE;QAAE,aAAa,EAAE,wBAAwB,CAAC;QAAC,QAAQ,EAAE,WAAW,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,aAAa,CAAA;CACtH;AAED,kHAAkH;AAClH,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,QAAQ,CAIxD;AAqBD,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}
|
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
/** PdfViewer renderer: lazy-loads PDF.js from the CDN and draws one page at a time to a <canvas>, with a page toolbar. */
|
|
2
2
|
import { registerComponent, resolveStr, el } from '../engine.js';
|
|
3
3
|
import { isRecord, optionalString } from '../../core/guards.js';
|
|
4
|
-
|
|
4
|
+
import { importFromCdn } from '../cdn.js';
|
|
5
5
|
const PDFJS_CDN = 'https://cdn.jsdelivr.net/npm/pdfjs-dist@4.9/build/pdf.min.mjs';
|
|
6
6
|
const PDFJS_WORKER_CDN = 'https://cdn.jsdelivr.net/npm/pdfjs-dist@4.9/build/pdf.worker.min.mjs';
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
const ZOOM_STEP = 1.25;
|
|
8
|
+
const MIN_SCALE = 0.25;
|
|
9
|
+
const MAX_SCALE = 5;
|
|
10
|
+
const CANVAS_PADDING = 32;
|
|
11
|
+
/** PDF.js 4 exports `GlobalWorkerOptions` as a class, so it is a function there and an object in older builds. */
|
|
12
|
+
export function isPdfjsLib(mod) {
|
|
13
|
+
if (!isRecord(mod) || typeof mod.getDocument !== 'function')
|
|
14
|
+
return false;
|
|
15
|
+
const options = mod.GlobalWorkerOptions;
|
|
16
|
+
return typeof options === 'function' || isRecord(options);
|
|
12
17
|
}
|
|
13
18
|
/** A finite number, or a string holding one; otherwise `fallback`. */
|
|
14
19
|
function numberProp(value, fallback) {
|
|
@@ -18,205 +23,178 @@ function numberProp(value, fallback) {
|
|
|
18
23
|
function zoomProp(value) {
|
|
19
24
|
return value === 'fit-page' || value === 'fit-width' ? value : numberProp(value, 0) || 'fit-width';
|
|
20
25
|
}
|
|
21
|
-
/** Load PDF.js on demand. Cached after first call. */
|
|
22
26
|
async function loadPdfjs() {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
if (!isPdfjsLib(mod))
|
|
29
|
-
throw new Error('PDF.js did not load');
|
|
30
|
-
const lib = mod;
|
|
31
|
-
lib.GlobalWorkerOptions.workerSrc = PDFJS_WORKER_CDN;
|
|
32
|
-
pdfjsLib = lib;
|
|
33
|
-
return lib;
|
|
34
|
-
});
|
|
35
|
-
return loadPromise;
|
|
27
|
+
const mod = await importFromCdn(PDFJS_CDN);
|
|
28
|
+
if (!isPdfjsLib(mod))
|
|
29
|
+
throw new Error('PDF.js did not load');
|
|
30
|
+
mod.GlobalWorkerOptions.workerSrc = PDFJS_WORKER_CDN;
|
|
31
|
+
return mod;
|
|
36
32
|
}
|
|
37
33
|
export function registerPdfComponents() {
|
|
38
34
|
registerComponent('PdfViewer', renderPdfViewer);
|
|
39
35
|
}
|
|
40
36
|
function renderPdfViewer(node, ctx) {
|
|
41
37
|
const wrapper = el('div', 'pf-pdf-viewer');
|
|
42
|
-
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
const
|
|
48
|
-
wrapper
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
wrapper.appendChild(loading);
|
|
64
|
-
// Boot async rendering
|
|
65
|
-
void renderPdfAsync(wrapper, loading, { src, data, initialPage, zoom, showToolbar });
|
|
66
|
-
return wrapper;
|
|
38
|
+
wrapper.style.height = `${numberProp(node.height, 600)}px`;
|
|
39
|
+
const message = el('div', 'pf-pdf-message');
|
|
40
|
+
message.setAttribute('role', 'status');
|
|
41
|
+
message.textContent = 'Loading PDF…';
|
|
42
|
+
wrapper.appendChild(message);
|
|
43
|
+
const session = { destroyed: false, cleanup: () => undefined };
|
|
44
|
+
void renderPdfAsync(wrapper, message, session, {
|
|
45
|
+
src: node.src != null ? resolveStr(node.src, ctx) : undefined,
|
|
46
|
+
data: optionalString(node.data),
|
|
47
|
+
initialPage: numberProp(node.page, 1),
|
|
48
|
+
zoom: zoomProp(node.zoom),
|
|
49
|
+
showToolbar: node.toolbar !== false,
|
|
50
|
+
});
|
|
51
|
+
return { element: wrapper, destroy: () => { session.destroyed = true; session.cleanup(); } };
|
|
52
|
+
}
|
|
53
|
+
function decodeBase64(data) {
|
|
54
|
+
const binary = atob(data);
|
|
55
|
+
const bytes = new Uint8Array(binary.length);
|
|
56
|
+
for (let i = 0; i < binary.length; i++)
|
|
57
|
+
bytes[i] = binary.charCodeAt(i);
|
|
58
|
+
return bytes;
|
|
67
59
|
}
|
|
68
|
-
async function renderPdfAsync(wrapper,
|
|
60
|
+
async function renderPdfAsync(wrapper, message, session, opts) {
|
|
69
61
|
try {
|
|
62
|
+
if (!opts.src && !opts.data)
|
|
63
|
+
throw new Error('No PDF source provided');
|
|
70
64
|
const lib = await loadPdfjs();
|
|
71
|
-
|
|
72
|
-
if (
|
|
73
|
-
docSource = { url: opts.src };
|
|
74
|
-
}
|
|
75
|
-
else if (opts.data) {
|
|
76
|
-
const binary = atob(opts.data);
|
|
77
|
-
const bytes = new Uint8Array(binary.length);
|
|
78
|
-
for (let i = 0; i < binary.length; i++)
|
|
79
|
-
bytes[i] = binary.charCodeAt(i);
|
|
80
|
-
docSource = { data: bytes };
|
|
81
|
-
}
|
|
82
|
-
else {
|
|
83
|
-
loading.textContent = 'Error: No PDF source provided';
|
|
65
|
+
const doc = await lib.getDocument(opts.src ? { url: opts.src } : { data: decodeBase64(opts.data ?? '') }).promise;
|
|
66
|
+
if (session.destroyed)
|
|
84
67
|
return;
|
|
85
|
-
|
|
86
|
-
const doc = await lib.getDocument(docSource).promise;
|
|
87
|
-
loading.remove();
|
|
88
|
-
// State
|
|
68
|
+
message.remove();
|
|
89
69
|
let currentPage = Math.max(1, Math.min(opts.initialPage, doc.numPages));
|
|
90
|
-
|
|
91
|
-
let
|
|
92
|
-
let
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
onPageChange: (p) => {
|
|
104
|
-
const n = Math.max(1, Math.min(p, doc.numPages));
|
|
105
|
-
if (n !== currentPage) {
|
|
106
|
-
currentPage = n;
|
|
107
|
-
void renderPage();
|
|
108
|
-
}
|
|
109
|
-
},
|
|
110
|
-
});
|
|
111
|
-
pageInput = toolbar.pageInput;
|
|
112
|
-
pageCount = toolbar.pageCount;
|
|
113
|
-
wrapper.insertBefore(toolbar.el, wrapper.firstChild);
|
|
114
|
-
}
|
|
115
|
-
// Canvas container (scrollable)
|
|
70
|
+
let zoom = opts.zoom;
|
|
71
|
+
let scale = 1;
|
|
72
|
+
let task;
|
|
73
|
+
let generation = 0;
|
|
74
|
+
const toolbar = opts.showToolbar
|
|
75
|
+
? buildToolbar(doc.numPages, {
|
|
76
|
+
onPage: (p) => { goTo(p); },
|
|
77
|
+
onZoom: (factor) => { zoom = clampScale(scale * factor); void renderPage(); },
|
|
78
|
+
onFit: () => { zoom = zoom === 'fit-page' ? 'fit-width' : 'fit-page'; void renderPage(); },
|
|
79
|
+
})
|
|
80
|
+
: undefined;
|
|
81
|
+
if (toolbar)
|
|
82
|
+
wrapper.appendChild(toolbar.el);
|
|
116
83
|
const canvasContainer = el('div', 'pf-pdf-canvas-container');
|
|
117
|
-
canvasContainer.style.flex = '1';
|
|
118
|
-
canvasContainer.style.overflow = 'auto';
|
|
119
|
-
canvasContainer.style.display = 'flex';
|
|
120
|
-
canvasContainer.style.justifyContent = 'center';
|
|
121
|
-
canvasContainer.style.padding = '8px';
|
|
122
|
-
wrapper.appendChild(canvasContainer);
|
|
123
84
|
const canvas = document.createElement('canvas');
|
|
124
|
-
canvas.
|
|
125
|
-
canvas.style.boxShadow = 'var(--shadow-md, 0 4px 6px -1px rgba(0,0,0,.1))';
|
|
85
|
+
canvas.className = 'pf-pdf-canvas';
|
|
126
86
|
canvasContainer.appendChild(canvas);
|
|
87
|
+
wrapper.appendChild(canvasContainer);
|
|
88
|
+
function goTo(page) {
|
|
89
|
+
const n = Math.max(1, Math.min(page, doc.numPages));
|
|
90
|
+
if (n !== currentPage) {
|
|
91
|
+
currentPage = n;
|
|
92
|
+
void renderPage();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
127
95
|
async function renderPage() {
|
|
96
|
+
generation += 1;
|
|
97
|
+
const mine = generation;
|
|
98
|
+
task?.cancel();
|
|
128
99
|
const page = await doc.getPage(currentPage);
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
const
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
const scaleW = containerWidth / baseViewport.width;
|
|
138
|
-
const scaleH = containerHeight / baseViewport.height;
|
|
139
|
-
scale = Math.min(scaleW, scaleH);
|
|
140
|
-
}
|
|
141
|
-
else {
|
|
142
|
-
scale = typeof opts.zoom === 'number' ? opts.zoom : 1;
|
|
143
|
-
}
|
|
100
|
+
if (session.destroyed || mine !== generation)
|
|
101
|
+
return;
|
|
102
|
+
const base = page.getViewport({ scale: 1 });
|
|
103
|
+
const width = Math.max(1, canvasContainer.clientWidth - CANVAS_PADDING);
|
|
104
|
+
const height = Math.max(1, canvasContainer.clientHeight - CANVAS_PADDING);
|
|
105
|
+
scale = zoom === 'fit-width' ? width / base.width
|
|
106
|
+
: zoom === 'fit-page' ? Math.min(width / base.width, height / base.height)
|
|
107
|
+
: zoom;
|
|
144
108
|
const viewport = page.getViewport({ scale });
|
|
145
|
-
|
|
146
|
-
canvas.
|
|
147
|
-
canvas.
|
|
148
|
-
canvas.style.
|
|
109
|
+
const ratio = window.devicePixelRatio || 1;
|
|
110
|
+
canvas.width = Math.floor(viewport.width * ratio);
|
|
111
|
+
canvas.height = Math.floor(viewport.height * ratio);
|
|
112
|
+
canvas.style.width = `${Math.floor(viewport.width)}px`;
|
|
113
|
+
canvas.style.height = `${Math.floor(viewport.height)}px`;
|
|
149
114
|
const canvasCtx = canvas.getContext('2d');
|
|
150
115
|
if (!canvasCtx)
|
|
151
116
|
return;
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
117
|
+
const current = page.render({ canvasContext: canvasCtx, viewport, transform: ratio !== 1 ? [ratio, 0, 0, ratio, 0, 0] : undefined });
|
|
118
|
+
task = current;
|
|
119
|
+
try {
|
|
120
|
+
await current.promise;
|
|
121
|
+
}
|
|
122
|
+
catch (err) {
|
|
123
|
+
if (mine !== generation)
|
|
124
|
+
return;
|
|
125
|
+
throw err;
|
|
126
|
+
}
|
|
127
|
+
toolbar?.update(currentPage, scale, zoom);
|
|
128
|
+
}
|
|
129
|
+
if (typeof ResizeObserver !== 'undefined') {
|
|
130
|
+
let lastWidth = 0;
|
|
131
|
+
const observer = new ResizeObserver((entries) => {
|
|
132
|
+
const w = Math.round(entries[0]?.contentRect.width ?? 0);
|
|
133
|
+
if (typeof zoom === 'number' || w === lastWidth)
|
|
134
|
+
return;
|
|
135
|
+
lastWidth = w;
|
|
136
|
+
void renderPage();
|
|
137
|
+
});
|
|
138
|
+
observer.observe(canvasContainer);
|
|
139
|
+
session.cleanup = () => { observer.disconnect(); };
|
|
158
140
|
}
|
|
159
141
|
await renderPage();
|
|
160
142
|
}
|
|
161
143
|
catch (err) {
|
|
162
|
-
|
|
163
|
-
|
|
144
|
+
message.textContent = `Could not load PDF: ${err instanceof Error ? err.message : String(err)}`;
|
|
145
|
+
message.setAttribute('data-state', 'error');
|
|
164
146
|
}
|
|
165
147
|
}
|
|
166
|
-
function
|
|
148
|
+
function clampScale(s) {
|
|
149
|
+
return Math.min(MAX_SCALE, Math.max(MIN_SCALE, s));
|
|
150
|
+
}
|
|
151
|
+
function toolbarButton(glyph, label, onClick) {
|
|
152
|
+
const btn = document.createElement('button');
|
|
153
|
+
btn.type = 'button';
|
|
154
|
+
btn.className = 'pf-pdf-btn';
|
|
155
|
+
btn.textContent = glyph;
|
|
156
|
+
btn.title = label;
|
|
157
|
+
btn.setAttribute('aria-label', label);
|
|
158
|
+
btn.addEventListener('click', onClick);
|
|
159
|
+
return btn;
|
|
160
|
+
}
|
|
161
|
+
function buildToolbar(numPages, cb) {
|
|
167
162
|
const toolbar = el('div', 'pf-pdf-toolbar');
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
toolbar.style.padding = '6px 12px';
|
|
172
|
-
toolbar.style.borderBottom = '1px solid var(--color-border-primary, #e5e7eb)';
|
|
173
|
-
toolbar.style.background = 'var(--color-background-primary, #fff)';
|
|
174
|
-
toolbar.style.flexShrink = '0';
|
|
175
|
-
toolbar.style.fontSize = '13px';
|
|
176
|
-
const prevBtn = document.createElement('button');
|
|
177
|
-
prevBtn.textContent = '‹';
|
|
178
|
-
prevBtn.title = 'Previous page';
|
|
179
|
-
prevBtn.className = 'pf-pdf-btn';
|
|
180
|
-
styleButton(prevBtn);
|
|
181
|
-
prevBtn.addEventListener('click', cb.onPrev);
|
|
182
|
-
const nextBtn = document.createElement('button');
|
|
183
|
-
nextBtn.textContent = '›';
|
|
184
|
-
nextBtn.title = 'Next page';
|
|
185
|
-
nextBtn.className = 'pf-pdf-btn';
|
|
186
|
-
styleButton(nextBtn);
|
|
187
|
-
nextBtn.addEventListener('click', cb.onNext);
|
|
163
|
+
let page = 1;
|
|
164
|
+
const prevBtn = toolbarButton('‹', 'Previous page', () => { cb.onPage(page - 1); });
|
|
165
|
+
const nextBtn = toolbarButton('›', 'Next page', () => { cb.onPage(page + 1); });
|
|
188
166
|
const pageInput = document.createElement('input');
|
|
189
|
-
pageInput.type = '
|
|
190
|
-
pageInput.
|
|
191
|
-
pageInput.
|
|
192
|
-
pageInput.
|
|
193
|
-
pageInput.style.width = '48px';
|
|
194
|
-
pageInput.style.textAlign = 'center';
|
|
195
|
-
pageInput.style.border = '1px solid var(--color-border-primary, #e5e7eb)';
|
|
196
|
-
pageInput.style.borderRadius = '4px';
|
|
197
|
-
pageInput.style.padding = '2px 4px';
|
|
198
|
-
pageInput.style.fontSize = '13px';
|
|
167
|
+
pageInput.type = 'text';
|
|
168
|
+
pageInput.inputMode = 'numeric';
|
|
169
|
+
pageInput.className = 'pf-pdf-page-input';
|
|
170
|
+
pageInput.setAttribute('aria-label', 'Page number');
|
|
199
171
|
pageInput.addEventListener('change', () => {
|
|
200
172
|
const val = parseInt(pageInput.value, 10);
|
|
201
|
-
if (
|
|
202
|
-
|
|
173
|
+
if (isNaN(val))
|
|
174
|
+
pageInput.value = String(page);
|
|
175
|
+
else
|
|
176
|
+
cb.onPage(val);
|
|
203
177
|
});
|
|
204
|
-
const pageCount =
|
|
205
|
-
pageCount.textContent = `/ ${numPages}`;
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
178
|
+
const pageCount = el('span', 'pf-pdf-page-count');
|
|
179
|
+
pageCount.textContent = `/ ${String(numPages)}`;
|
|
180
|
+
const spacer = el('span', 'pf-pdf-spacer');
|
|
181
|
+
const zoomOut = toolbarButton('−', 'Zoom out', () => { cb.onZoom(1 / ZOOM_STEP); });
|
|
182
|
+
const zoomLabel = el('span', 'pf-pdf-zoom-label');
|
|
183
|
+
const zoomIn = toolbarButton('+', 'Zoom in', () => { cb.onZoom(ZOOM_STEP); });
|
|
184
|
+
const fit = toolbarButton('⤢', 'Fit page / fit width', cb.onFit);
|
|
185
|
+
toolbar.append(prevBtn, pageInput, pageCount, nextBtn, spacer, zoomOut, zoomLabel, zoomIn, fit);
|
|
186
|
+
return {
|
|
187
|
+
el: toolbar,
|
|
188
|
+
update(current, scale, zoom) {
|
|
189
|
+
page = current;
|
|
190
|
+
pageInput.value = String(current);
|
|
191
|
+
prevBtn.disabled = current <= 1;
|
|
192
|
+
nextBtn.disabled = current >= numPages;
|
|
193
|
+
zoomLabel.textContent = `${String(Math.round(scale * 100))}%`;
|
|
194
|
+
zoomOut.disabled = scale <= MIN_SCALE;
|
|
195
|
+
zoomIn.disabled = scale >= MAX_SCALE;
|
|
196
|
+
fit.setAttribute('aria-pressed', typeof zoom === 'number' ? 'false' : 'true');
|
|
197
|
+
},
|
|
198
|
+
};
|
|
221
199
|
}
|
|
222
200
|
//# sourceMappingURL=pdf.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdf.js","sourceRoot":"","sources":["../../../src/renderer/components/pdf.ts"],"names":[],"mappings":"AAAA,0HAA0H;AAE1H,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAChE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"pdf.js","sourceRoot":"","sources":["../../../src/renderer/components/pdf.ts"],"names":[],"mappings":"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"}
|