@laminapdf/viewer 0.2.0-alpha.3 → 0.2.0-alpha.5
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/README.md +102 -8
- package/dist/client.d.ts +75 -2
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +192 -32
- package/dist/client.js.map +1 -1
- package/dist/find/controller.d.ts +73 -0
- package/dist/find/controller.d.ts.map +1 -0
- package/dist/find/controller.js +227 -0
- package/dist/find/controller.js.map +1 -0
- package/dist/find/fold.d.ts +23 -0
- package/dist/find/fold.d.ts.map +1 -0
- package/dist/find/fold.js +99 -0
- package/dist/find/fold.js.map +1 -0
- package/dist/find/page.d.ts +44 -0
- package/dist/find/page.d.ts.map +1 -0
- package/dist/find/page.js +173 -0
- package/dist/find/page.js.map +1 -0
- package/dist/first-draw.d.ts +10 -0
- package/dist/first-draw.d.ts.map +1 -0
- package/dist/first-draw.js +33 -0
- package/dist/first-draw.js.map +1 -0
- package/dist/history/history.d.ts +65 -0
- package/dist/history/history.d.ts.map +1 -0
- package/dist/history/history.js +135 -0
- package/dist/history/history.js.map +1 -0
- package/dist/index.d.ts +13 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/layers/box.d.ts +10 -0
- package/dist/layers/box.d.ts.map +1 -0
- package/dist/layers/box.js +19 -0
- package/dist/layers/box.js.map +1 -0
- package/dist/layers/copy.d.ts +26 -0
- package/dist/layers/copy.d.ts.map +1 -0
- package/dist/layers/copy.js +150 -0
- package/dist/layers/copy.js.map +1 -0
- package/dist/layers/highlight-layer.d.ts +31 -0
- package/dist/layers/highlight-layer.d.ts.map +1 -0
- package/dist/layers/highlight-layer.js +95 -0
- package/dist/layers/highlight-layer.js.map +1 -0
- package/dist/layers/link-layer.d.ts +68 -0
- package/dist/layers/link-layer.d.ts.map +1 -0
- package/dist/layers/link-layer.js +279 -0
- package/dist/layers/link-layer.js.map +1 -0
- package/dist/layers/link-url.d.ts +19 -0
- package/dist/layers/link-url.d.ts.map +1 -0
- package/dist/layers/link-url.js +47 -0
- package/dist/layers/link-url.js.map +1 -0
- package/dist/layers/spans.d.ts +36 -0
- package/dist/layers/spans.d.ts.map +1 -0
- package/dist/layers/spans.js +103 -0
- package/dist/layers/spans.js.map +1 -0
- package/dist/layers/structure-layer.d.ts +15 -0
- package/dist/layers/structure-layer.d.ts.map +1 -0
- package/dist/layers/structure-layer.js +155 -0
- package/dist/layers/structure-layer.js.map +1 -0
- package/dist/layers/text-layer.d.ts +70 -0
- package/dist/layers/text-layer.d.ts.map +1 -0
- package/dist/layers/text-layer.js +576 -0
- package/dist/layers/text-layer.js.map +1 -0
- package/dist/layout/range.d.ts +3 -0
- package/dist/layout/range.d.ts.map +1 -0
- package/dist/layout/range.js +5 -0
- package/dist/layout/range.js.map +1 -0
- package/dist/network/watch.d.ts +30 -0
- package/dist/network/watch.d.ts.map +1 -0
- package/dist/network/watch.js +181 -0
- package/dist/network/watch.js.map +1 -0
- package/dist/protocol.d.ts +193 -6
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +16 -4
- package/dist/protocol.js.map +1 -1
- package/dist/render/tiles.d.ts +43 -3
- package/dist/render/tiles.d.ts.map +1 -1
- package/dist/render/tiles.js +62 -10
- package/dist/render/tiles.js.map +1 -1
- package/dist/source/http-range.d.ts +59 -0
- package/dist/source/http-range.d.ts.map +1 -0
- package/dist/source/http-range.js +284 -0
- package/dist/source/http-range.js.map +1 -0
- package/dist/source/opfs.d.ts +35 -0
- package/dist/source/opfs.d.ts.map +1 -0
- package/dist/source/opfs.js +178 -0
- package/dist/source/opfs.js.map +1 -0
- package/dist/thumbnails/strip.d.ts +37 -0
- package/dist/thumbnails/strip.d.ts.map +1 -0
- package/dist/thumbnails/strip.js +324 -0
- package/dist/thumbnails/strip.js.map +1 -0
- package/dist/view/budgets.d.ts +29 -0
- package/dist/view/budgets.d.ts.map +1 -0
- package/dist/view/budgets.js +63 -0
- package/dist/view/budgets.js.map +1 -0
- package/dist/view/touch.d.ts +71 -0
- package/dist/view/touch.d.ts.map +1 -0
- package/dist/view/touch.js +220 -0
- package/dist/view/touch.js.map +1 -0
- package/dist/view/user-select.d.ts +3 -0
- package/dist/view/user-select.d.ts.map +1 -0
- package/dist/view/user-select.js +10 -0
- package/dist/view/user-select.js.map +1 -0
- package/dist/view/viewer.d.ts +102 -1
- package/dist/view/viewer.d.ts.map +1 -1
- package/dist/view/viewer.js +660 -95
- package/dist/view/viewer.js.map +1 -1
- package/dist/worker/document.d.ts +53 -1
- package/dist/worker/document.d.ts.map +1 -1
- package/dist/worker/document.js +222 -24
- package/dist/worker/document.js.map +1 -1
- package/dist/worker/entry.d.ts +1 -1
- package/dist/worker/entry.d.ts.map +1 -1
- package/dist/worker/entry.js +2 -0
- package/dist/worker/entry.js.map +1 -1
- package/dist/worker/find.d.ts +7 -0
- package/dist/worker/find.d.ts.map +1 -0
- package/dist/worker/find.js +46 -0
- package/dist/worker/find.js.map +1 -0
- package/dist/worker/methods.d.ts.map +1 -1
- package/dist/worker/methods.js +49 -4
- package/dist/worker/methods.js.map +1 -1
- package/dist/worker/navigation.d.ts +10 -0
- package/dist/worker/navigation.d.ts.map +1 -0
- package/dist/worker/navigation.js +34 -0
- package/dist/worker/navigation.js.map +1 -0
- package/dist/worker/network.d.ts +4 -0
- package/dist/worker/network.d.ts.map +1 -0
- package/dist/worker/network.js +24 -0
- package/dist/worker/network.js.map +1 -0
- package/dist/worker/print.d.ts +14 -0
- package/dist/worker/print.d.ts.map +1 -0
- package/dist/worker/print.js +49 -0
- package/dist/worker/print.js.map +1 -0
- package/dist/worker/recent-pages.d.ts +14 -0
- package/dist/worker/recent-pages.d.ts.map +1 -0
- package/dist/worker/recent-pages.js +53 -0
- package/dist/worker/recent-pages.js.map +1 -0
- package/dist/worker/render.d.ts +5 -2
- package/dist/worker/render.d.ts.map +1 -1
- package/dist/worker/render.js +16 -6
- package/dist/worker/render.js.map +1 -1
- package/dist/worker/text.d.ts +25 -0
- package/dist/worker/text.d.ts.map +1 -0
- package/dist/worker/text.js +82 -0
- package/dist/worker/text.js.map +1 -0
- package/dist/zoom/destination.d.ts +18 -0
- package/dist/zoom/destination.d.ts.map +1 -0
- package/dist/zoom/destination.js +56 -0
- package/dist/zoom/destination.js.map +1 -0
- package/package.json +6 -5
package/dist/client.js
CHANGED
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
// fires and the caller opens again with the password.
|
|
17
17
|
import { isLaminaPdfError } from "@laminapdf/sdk";
|
|
18
18
|
import { connect, Emitter, } from "@laminapdf/sdk/worker";
|
|
19
|
+
import { FirstDraw } from "./first-draw.js";
|
|
19
20
|
import { PRIORITY, renderKey, } from "./protocol.js";
|
|
20
21
|
/** Default render timeouts (ADR 0009 §3.7), in ms. */
|
|
21
22
|
const DEFAULT_TIMEOUTS = Object.freeze({ soft: 10_000, hard: 120_000 });
|
|
@@ -25,6 +26,18 @@ function workerFactory() {
|
|
|
25
26
|
function abortError(e) {
|
|
26
27
|
return isLaminaPdfError(e, "cancelled") ? new DOMException("the call was cancelled", "AbortError") : e;
|
|
27
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* PDFium's module compiled on the page from its address, while the worker starts (compiling
|
|
31
|
+
* streams on the browser's own threads); the backend as given when it names no address, or when
|
|
32
|
+
* fetching or compiling fails, so the worker loads it as before.
|
|
33
|
+
*/
|
|
34
|
+
function compileEarly(backend) {
|
|
35
|
+
const { wasm } = backend;
|
|
36
|
+
if (backend.backend !== "pdfium" || typeof wasm !== "string" || typeof WebAssembly.compileStreaming !== "function") {
|
|
37
|
+
return Promise.resolve(backend);
|
|
38
|
+
}
|
|
39
|
+
return WebAssembly.compileStreaming(fetch(wasm, { credentials: "same-origin" })).then((module) => ({ ...backend, wasm: module }), () => backend);
|
|
40
|
+
}
|
|
28
41
|
/** One document worker and the typed RPC to it. */
|
|
29
42
|
export class ViewerClient {
|
|
30
43
|
#pdf;
|
|
@@ -34,38 +47,61 @@ export class ViewerClient {
|
|
|
34
47
|
/** What to reopen after a restart: the source and the options without the password. */
|
|
35
48
|
#reopen;
|
|
36
49
|
#document;
|
|
50
|
+
/** Opens asked for so far: each open's ticket. */
|
|
51
|
+
#opens = 0;
|
|
37
52
|
#recovering;
|
|
38
53
|
#nextRender = 1;
|
|
39
|
-
/**
|
|
40
|
-
#
|
|
54
|
+
/** The open document's gate for text and link calls (first-draw.ts); none before a document opens. */
|
|
55
|
+
#firstDraw;
|
|
56
|
+
/** Each pending render's timers, by coalescing key: started on `render-start`, paused on `render-fetching`. */
|
|
57
|
+
#timers = new Map();
|
|
41
58
|
/** The key the worker is drawing now: a render that joins it starts its timers at once. */
|
|
42
59
|
#drawing;
|
|
43
60
|
constructor(pdf, options) {
|
|
44
61
|
this.#pdf = pdf;
|
|
45
62
|
this.#backend = options.backend;
|
|
46
63
|
this.#timeouts = { ...DEFAULT_TIMEOUTS, ...options.timeouts };
|
|
47
|
-
pdf.on("event", (name, data) =>
|
|
48
|
-
if (name === "warning")
|
|
49
|
-
this.#events.emit("warning", data);
|
|
50
|
-
else if (name === "render-start") {
|
|
51
|
-
const started = data;
|
|
52
|
-
this.#drawing = started.key;
|
|
53
|
-
for (const start of this.#waiting.get(started.key) ?? [])
|
|
54
|
-
start();
|
|
55
|
-
this.#waiting.delete(started.key);
|
|
56
|
-
this.#events.emit("render-start", started);
|
|
57
|
-
}
|
|
58
|
-
});
|
|
64
|
+
pdf.on("event", (name, data) => this.#onEvent(name, data));
|
|
59
65
|
pdf.on("crashed", (reason) => {
|
|
60
66
|
this.#events.emit("crashed", { reason });
|
|
61
67
|
this.#recover(reason).catch((error) => this.#events.emit("restart-failed", { reason: reason, error }));
|
|
62
68
|
});
|
|
63
69
|
}
|
|
70
|
+
/** A worker event: forwarded, and for renders, their timers started or paused. */
|
|
71
|
+
#onEvent(name, data) {
|
|
72
|
+
if (name === "warning")
|
|
73
|
+
this.#events.emit("warning", data);
|
|
74
|
+
else if (name === "progress")
|
|
75
|
+
this.#events.emit("progress", data);
|
|
76
|
+
else if (name === "network")
|
|
77
|
+
this.#events.emit("network", data);
|
|
78
|
+
else if (name === "csp-violation")
|
|
79
|
+
this.#events.emit("csp-violation", data);
|
|
80
|
+
else if (name === "render-start") {
|
|
81
|
+
const started = data;
|
|
82
|
+
this.#drawing = started.key;
|
|
83
|
+
for (const timers of this.#timers.get(started.key) ?? [])
|
|
84
|
+
timers.start();
|
|
85
|
+
this.#events.emit("render-start", started);
|
|
86
|
+
}
|
|
87
|
+
else if (name === "render-fetching") {
|
|
88
|
+
// Fetching isn't drawing: a slow network must not count as a stuck render.
|
|
89
|
+
const { key } = data;
|
|
90
|
+
if (this.#drawing === key)
|
|
91
|
+
this.#drawing = undefined;
|
|
92
|
+
for (const timers of this.#timers.get(key) ?? [])
|
|
93
|
+
timers.pause();
|
|
94
|
+
this.#events.emit("render-fetching", { key });
|
|
95
|
+
}
|
|
96
|
+
}
|
|
64
97
|
/**
|
|
65
98
|
* Starts the document worker and loads the backend at once, so the WebAssembly downloads while
|
|
66
99
|
* the user picks a file.
|
|
67
100
|
*/
|
|
68
101
|
static async create(options) {
|
|
102
|
+
// PDFium downloads and compiles here while the worker starts and loads Lamina PDF's own
|
|
103
|
+
// module, rather than after it: the two downloads overlap.
|
|
104
|
+
const early = compileEarly(options.backend);
|
|
69
105
|
const pdf = await connect({
|
|
70
106
|
worker: options.worker ?? workerFactory,
|
|
71
107
|
// A late answer to an aborted render: its bitmap is closed, never painted.
|
|
@@ -79,7 +115,16 @@ export class ViewerClient {
|
|
|
79
115
|
});
|
|
80
116
|
const client = new ViewerClient(pdf, options);
|
|
81
117
|
try {
|
|
82
|
-
|
|
118
|
+
const backend = await early;
|
|
119
|
+
try {
|
|
120
|
+
await pdf.request("initBackend", [backend], { priority: PRIORITY.document });
|
|
121
|
+
}
|
|
122
|
+
catch (e) {
|
|
123
|
+
// A browser that can't post a compiled module to a worker: the worker loads its own.
|
|
124
|
+
if (backend === options.backend)
|
|
125
|
+
throw e;
|
|
126
|
+
await pdf.request("initBackend", [options.backend], { priority: PRIORITY.document });
|
|
127
|
+
}
|
|
83
128
|
}
|
|
84
129
|
catch (e) {
|
|
85
130
|
// Nobody will hold this client: end its worker.
|
|
@@ -97,7 +142,9 @@ export class ViewerClient {
|
|
|
97
142
|
if (this.#recovering !== undefined)
|
|
98
143
|
await this.#recovering.catch(() => { });
|
|
99
144
|
const { signal, priority, key } = options;
|
|
100
|
-
|
|
145
|
+
// Renders, and calls that name a priority (text, at `background`), queue with the tiles; other
|
|
146
|
+
// document calls run first.
|
|
147
|
+
const level = method === "render" || priority !== undefined ? PRIORITY[priority ?? "visible"] : PRIORITY.document;
|
|
101
148
|
try {
|
|
102
149
|
return (await this.#pdf.request(method, params, {
|
|
103
150
|
priority: level,
|
|
@@ -116,11 +163,30 @@ export class ViewerClient {
|
|
|
116
163
|
*/
|
|
117
164
|
async open(source, options = {}, call = {}) {
|
|
118
165
|
const { password: _, ...rest } = options;
|
|
119
|
-
const
|
|
166
|
+
const ticket = ++this.#opens;
|
|
167
|
+
let opened;
|
|
168
|
+
try {
|
|
169
|
+
opened = await this.call("openDocument", [source, options, ticket], call);
|
|
170
|
+
}
|
|
171
|
+
catch (e) {
|
|
172
|
+
// A cancel can cross the answer of an open the worker had already committed: then the
|
|
173
|
+
// cancel came too late, and this page takes the document the worker now holds.
|
|
174
|
+
const landed = call.signal?.aborted === true ? await this.#committed(ticket) : undefined;
|
|
175
|
+
if (landed === undefined)
|
|
176
|
+
throw e;
|
|
177
|
+
opened = landed;
|
|
178
|
+
}
|
|
120
179
|
this.#reopen = { source, options: rest };
|
|
121
180
|
this.#document = opened;
|
|
181
|
+
// Only once it opened: a failed open leaves the shown document's gate as it was.
|
|
182
|
+
this.#firstDraw = new FirstDraw(opened.id);
|
|
122
183
|
return opened;
|
|
123
184
|
}
|
|
185
|
+
/** The worker's document, if open `ticket` made it (the worker runs one call at a time, so it answers after that open). */
|
|
186
|
+
async #committed(ticket) {
|
|
187
|
+
const now = await this.call("currentDocument", []).catch(() => undefined);
|
|
188
|
+
return now?.ticket === ticket ? now.document : undefined;
|
|
189
|
+
}
|
|
124
190
|
/** The open document, if any. */
|
|
125
191
|
get document() {
|
|
126
192
|
return this.#document;
|
|
@@ -131,6 +197,13 @@ export class ViewerClient {
|
|
|
131
197
|
this.#document = undefined;
|
|
132
198
|
await this.call("closeDocument", []);
|
|
133
199
|
}
|
|
200
|
+
/**
|
|
201
|
+
* Every request the document worker has made, and had blocked, since it started: what its
|
|
202
|
+
* `network` and `csp-violation` events reported, including those sent before anyone listened.
|
|
203
|
+
*/
|
|
204
|
+
networkLog(options) {
|
|
205
|
+
return this.call("networkLog", [], options);
|
|
206
|
+
}
|
|
134
207
|
/** The worker's WebAssembly memory in bytes (see `WorkerMemory`), for measuring. */
|
|
135
208
|
memory(options) {
|
|
136
209
|
return this.call("memory", [], options);
|
|
@@ -139,6 +212,82 @@ export class ViewerClient {
|
|
|
139
212
|
pageInfo(index, options) {
|
|
140
213
|
return this.call("pageInfo", [index], options);
|
|
141
214
|
}
|
|
215
|
+
/**
|
|
216
|
+
* Page `index`'s text runs and glyph quads, read by Lamina PDF (needs the extract or text
|
|
217
|
+
* module, loaded by default). At `background` priority unless `options` says otherwise.
|
|
218
|
+
*/
|
|
219
|
+
async pageText(index, options = {}) {
|
|
220
|
+
await this.#firstDraw?.wait(options.signal);
|
|
221
|
+
const key = `text:${this.#document?.id ?? 0}:${index}`;
|
|
222
|
+
return this.call("pageText", [index], { priority: "background", key, ...options });
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Page `index`'s text blocks in reading order (Lamina PDF's extraction), for copy as paragraph.
|
|
226
|
+
* At `background` priority unless `options` says otherwise.
|
|
227
|
+
*/
|
|
228
|
+
async readingOrder(index, options = {}) {
|
|
229
|
+
await this.#firstDraw?.wait(options.signal);
|
|
230
|
+
const key = `order:${this.#document?.id ?? 0}:${index}`;
|
|
231
|
+
return this.call("readingOrder", [index], { priority: "background", key, ...options });
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* The matches of `query` on each of `pages`, at `background` priority unless `options` says
|
|
235
|
+
* otherwise, so renders run first. The find controller calls it a few pages at a time.
|
|
236
|
+
*/
|
|
237
|
+
find(query, find, pages, options = {}) {
|
|
238
|
+
return this.call("find", [query, find, pages], { priority: "background", ...options });
|
|
239
|
+
}
|
|
240
|
+
/** Whether the open document says it is tagged, and its structure tree when it has one. */
|
|
241
|
+
async structure(options) {
|
|
242
|
+
await this.#firstDraw?.wait(options?.signal);
|
|
243
|
+
return this.call("structure", [], options);
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* The open document for reader mode: its blocks in the structure tree's order, figures,
|
|
247
|
+
* formulas and tables as crops with their alternate text, or why its tree can't be trusted.
|
|
248
|
+
*/
|
|
249
|
+
reflow(options) {
|
|
250
|
+
return this.call("reflow", [], options);
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* The open document's outline (bookmarks): top-level items, each with its children and where
|
|
254
|
+
* it goes as a page and a page-space view; empty without one. Read when first asked for.
|
|
255
|
+
*/
|
|
256
|
+
outline(options) {
|
|
257
|
+
return this.call("outline", [], options);
|
|
258
|
+
}
|
|
259
|
+
/** Where the named destination `name` goes, or `undefined` when the document has no such name. */
|
|
260
|
+
namedDestination(name, options) {
|
|
261
|
+
return this.call("namedDestination", [name], options);
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* What a properties view shows about the open document (`@laminapdf/sdk`'s `properties()`,
|
|
265
|
+
* read in the worker). It reads every object once: ask when the view opens.
|
|
266
|
+
*/
|
|
267
|
+
properties(options) {
|
|
268
|
+
return this.call("properties", [], options);
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Page `index` drawn for printing at `print.dpi` with annotations as their print flags say, as
|
|
272
|
+
* a PNG, at `background` priority unless `options` says otherwise, so the pages in view draw first.
|
|
273
|
+
*/
|
|
274
|
+
printPage(index, print, options = {}) {
|
|
275
|
+
return this.call("printPage", [index, print], { priority: "background", ...options });
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Every byte of the open remote file as it was opened, fetched where the block cache lacks
|
|
279
|
+
* them. A local file's bytes are the page's own: it never asks.
|
|
280
|
+
*/
|
|
281
|
+
fileBytes(options) {
|
|
282
|
+
return this.call("fileBytes", [], options);
|
|
283
|
+
}
|
|
284
|
+
/** Page `index`'s links, in annotation order, each with what following it does (the link layer asks as pages mount). */
|
|
285
|
+
async pageLinks(index, options = {}) {
|
|
286
|
+
// Links read with the extract module: like the text layer, they wait for the first page drawn,
|
|
287
|
+
// and come after renders.
|
|
288
|
+
await this.#firstDraw?.wait(options.signal);
|
|
289
|
+
return this.call("pageLinks", [index], { priority: "background", ...options });
|
|
290
|
+
}
|
|
142
291
|
/**
|
|
143
292
|
* Renders `request` as an ImageBitmap (close it when done). Identical requests in flight are
|
|
144
293
|
* drawn once. An aborted render rejects with `AbortError` and never paints.
|
|
@@ -154,7 +303,12 @@ export class ViewerClient {
|
|
|
154
303
|
const key = renderKey(request, documentId);
|
|
155
304
|
let soft;
|
|
156
305
|
let hard;
|
|
306
|
+
const pause = () => {
|
|
307
|
+
clearTimeout(soft);
|
|
308
|
+
clearTimeout(hard);
|
|
309
|
+
};
|
|
157
310
|
const start = () => {
|
|
311
|
+
pause();
|
|
158
312
|
soft = setTimeout(() => this.#events.emit("render-slow", { id, page: request.page }), this.#timeouts.soft);
|
|
159
313
|
hard = setTimeout(() => {
|
|
160
314
|
if (needsPassword)
|
|
@@ -163,28 +317,32 @@ export class ViewerClient {
|
|
|
163
317
|
this.stop("hard-timeout").catch((error) => this.#events.emit("restart-failed", { reason: "hard-timeout", error }));
|
|
164
318
|
}, this.#timeouts.hard);
|
|
165
319
|
};
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
320
|
+
const timers = { start, pause };
|
|
321
|
+
let set = this.#timers.get(key);
|
|
322
|
+
if (set === undefined) {
|
|
323
|
+
set = new Set();
|
|
324
|
+
this.#timers.set(key, set);
|
|
170
325
|
}
|
|
326
|
+
set.add(timers);
|
|
171
327
|
// Joining a render already being drawn: its render-start has passed.
|
|
172
328
|
if (this.#drawing === key)
|
|
173
329
|
start();
|
|
174
|
-
else
|
|
175
|
-
waiting.add(start);
|
|
176
330
|
try {
|
|
177
|
-
|
|
331
|
+
const drawn = await this.call("render", [request, documentId], { ...options, key });
|
|
332
|
+
// A page has been drawn: text calls may queue now. (A cancelled render doesn't count: the
|
|
333
|
+
// render that replaces it would wait behind them.)
|
|
334
|
+
this.#firstDraw?.drawn(documentId);
|
|
335
|
+
return drawn;
|
|
178
336
|
}
|
|
179
337
|
finally {
|
|
180
|
-
const
|
|
181
|
-
|
|
182
|
-
if (
|
|
183
|
-
this.#
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
338
|
+
const own = this.#timers.get(key);
|
|
339
|
+
own?.delete(timers);
|
|
340
|
+
if (own?.size === 0) {
|
|
341
|
+
this.#timers.delete(key);
|
|
342
|
+
if (this.#drawing === key)
|
|
343
|
+
this.#drawing = undefined;
|
|
344
|
+
}
|
|
345
|
+
pause();
|
|
188
346
|
}
|
|
189
347
|
}
|
|
190
348
|
/**
|
|
@@ -224,6 +382,8 @@ export class ViewerClient {
|
|
|
224
382
|
this.#document = (await this.#pdf.request("openDocument", [reopen.source, reopen.options], {
|
|
225
383
|
priority: PRIORITY.document,
|
|
226
384
|
}));
|
|
385
|
+
// The restarted worker has no extract module yet: its first page goes first again.
|
|
386
|
+
this.#firstDraw = new FirstDraw(this.#document.id);
|
|
227
387
|
reopened = true;
|
|
228
388
|
}
|
|
229
389
|
}
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type { FindPageResult } from "../protocol.js";
|
|
2
|
+
import type { FindOptions } from "./fold.js";
|
|
3
|
+
import type { FindSnippet } from "./page.js";
|
|
4
|
+
/** Find's state, for the find bar (`useSyncExternalStore`). */
|
|
5
|
+
export interface FindState {
|
|
6
|
+
/** The query as typed; empty when find is idle. */
|
|
7
|
+
readonly query: string;
|
|
8
|
+
readonly options: FindOptions;
|
|
9
|
+
/** Matches found so far, in the whole document. */
|
|
10
|
+
readonly total: number;
|
|
11
|
+
/** The current match's position among them, 0-based, in document order; undefined before the first. */
|
|
12
|
+
readonly current: number | undefined;
|
|
13
|
+
/** Pages searched so far, and the document's page count. */
|
|
14
|
+
readonly searched: number;
|
|
15
|
+
readonly pageCount: number;
|
|
16
|
+
/** Every page searched. */
|
|
17
|
+
readonly done: boolean;
|
|
18
|
+
/** Pages with no text to search (scans without an OCR layer). */
|
|
19
|
+
readonly pagesWithoutText: number;
|
|
20
|
+
/** Which search the state belongs to, rising with each new query. */
|
|
21
|
+
readonly search: number;
|
|
22
|
+
}
|
|
23
|
+
/** One match, for a list of results. */
|
|
24
|
+
export interface FindResult {
|
|
25
|
+
/** Its position among every match found so far, 0-based, in document order (as `FindState.current`). */
|
|
26
|
+
readonly ordinal: number;
|
|
27
|
+
/** Its page, 0-based. */
|
|
28
|
+
readonly page: number;
|
|
29
|
+
/** The match in its line. */
|
|
30
|
+
readonly snippet: FindSnippet;
|
|
31
|
+
}
|
|
32
|
+
/** What the controller needs of the viewer and its client. */
|
|
33
|
+
export interface FindHost {
|
|
34
|
+
find(query: string, options: FindOptions, pages: readonly number[], signal: AbortSignal): Promise<readonly FindPageResult[]>;
|
|
35
|
+
pageCount(): number;
|
|
36
|
+
currentPage(): number;
|
|
37
|
+
/** Scrolls match `quads` of `page` into view (centred when it is out of view). */
|
|
38
|
+
reveal(page: number, quads: readonly number[]): void;
|
|
39
|
+
/** These pages' highlights changed. */
|
|
40
|
+
redraw(pages: Iterable<number>): void;
|
|
41
|
+
}
|
|
42
|
+
/** Find in one viewer's document. Reach it as `viewer.find`. */
|
|
43
|
+
export declare class FindController {
|
|
44
|
+
#private;
|
|
45
|
+
constructor(host: FindHost);
|
|
46
|
+
/** Find's state now (a new object after each change). */
|
|
47
|
+
getState: () => FindState;
|
|
48
|
+
/** Calls `listener` after every change of state (for `useSyncExternalStore`); returns a function that stops it. */
|
|
49
|
+
subscribe: (listener: () => void) => (() => void);
|
|
50
|
+
/** Searches for `query` with `options`, replacing any search under way. An empty query clears. */
|
|
51
|
+
find(query: string, options?: FindOptions): void;
|
|
52
|
+
/** The next match, wrapping to the first; scrolls it into view. */
|
|
53
|
+
next(): void;
|
|
54
|
+
/** The previous match, wrapping to the last; scrolls it into view. */
|
|
55
|
+
previous(): void;
|
|
56
|
+
/** Makes the match at `ordinal` (as `FindResult.ordinal`) current and scrolls it into view. */
|
|
57
|
+
goTo(ordinal: number): void;
|
|
58
|
+
/**
|
|
59
|
+
* Every match found so far, in document order. While a search runs the list grows as pages are
|
|
60
|
+
* searched; the same array comes back until find's state next changes.
|
|
61
|
+
*/
|
|
62
|
+
results(): readonly FindResult[];
|
|
63
|
+
/** Ends find: the search stops and every highlight goes. */
|
|
64
|
+
close(): void;
|
|
65
|
+
/** Page `page`'s matches, and which is current (for the highlight layer). */
|
|
66
|
+
matchesOn(page: number): {
|
|
67
|
+
matches: readonly (readonly number[])[];
|
|
68
|
+
current: number | undefined;
|
|
69
|
+
};
|
|
70
|
+
/** Stops the search and drops the results: a new document opened. */
|
|
71
|
+
reset(): void;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/find/controller.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAK7C,+DAA+D;AAC/D,MAAM,WAAW,SAAS;IACxB,mDAAmD;IACnD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,mDAAmD;IACnD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,uGAAuG;IACvG,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,4DAA4D;IAC5D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,2BAA2B;IAC3B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,iEAAiE;IACjE,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,qEAAqE;IACrE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,wCAAwC;AACxC,MAAM,WAAW,UAAU;IACzB,wGAAwG;IACxG,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,yBAAyB;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,6BAA6B;IAC7B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;CAC/B;AAED,8DAA8D;AAC9D,MAAM,WAAW,QAAQ;IACvB,IAAI,CACF,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC,CAAC;IACtC,SAAS,IAAI,MAAM,CAAC;IACpB,WAAW,IAAI,MAAM,CAAC;IACtB,kFAAkF;IAClF,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IACrD,uCAAuC;IACvC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;CACvC;AAoBD,gEAAgE;AAChE,qBAAa,cAAc;;IAYzB,YAAY,IAAI,EAAE,QAAQ,EAEzB;IAED,yDAAyD;IACzD,QAAQ,QAAO,SAAS,CAAgB;IAExC,mHAAmH;IACnH,SAAS,aAAc,MAAM,IAAI,KAAG,CAAC,MAAM,IAAI,CAAC,CAG9C;IAEF,kGAAkG;IAClG,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,IAAI,CAanD;IAED,mEAAmE;IACnE,IAAI,IAAI,IAAI,CAEX;IAED,sEAAsE;IACtE,QAAQ,IAAI,IAAI,CAEf;IAED,+FAA+F;IAC/F,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1B;IAED;;;OAGG;IACH,OAAO,IAAI,SAAS,UAAU,EAAE,CAQ/B;IAED,4DAA4D;IAC5D,KAAK,IAAI,IAAI,CAEZ;IAED,6EAA6E;IAC7E,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAKhG;IAED,qEAAqE;IACrE,KAAK,IAAI,IAAI,CAMZ;CAsHF"}
|