@laminapdf/viewer 0.2.0-alpha.4 → 0.2.0-alpha.6

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.
Files changed (127) hide show
  1. package/README.md +79 -10
  2. package/dist/client.d.ts +60 -2
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +241 -22
  5. package/dist/client.js.map +1 -1
  6. package/dist/edit/session.d.ts +91 -0
  7. package/dist/edit/session.d.ts.map +1 -0
  8. package/dist/edit/session.js +179 -0
  9. package/dist/edit/session.js.map +1 -0
  10. package/dist/edit-log.d.ts +32 -0
  11. package/dist/edit-log.d.ts.map +1 -0
  12. package/dist/edit-log.js +74 -0
  13. package/dist/edit-log.js.map +1 -0
  14. package/dist/find/controller.d.ts +6 -0
  15. package/dist/find/controller.d.ts.map +1 -1
  16. package/dist/find/controller.js +69 -2
  17. package/dist/find/controller.js.map +1 -1
  18. package/dist/first-draw.d.ts +10 -0
  19. package/dist/first-draw.d.ts.map +1 -0
  20. package/dist/first-draw.js +33 -0
  21. package/dist/first-draw.js.map +1 -0
  22. package/dist/history/history.d.ts +74 -0
  23. package/dist/history/history.d.ts.map +1 -0
  24. package/dist/history/history.js +135 -0
  25. package/dist/history/history.js.map +1 -0
  26. package/dist/index.d.ts +11 -3
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +4 -0
  29. package/dist/index.js.map +1 -1
  30. package/dist/layers/copy.d.ts +26 -0
  31. package/dist/layers/copy.d.ts.map +1 -0
  32. package/dist/layers/copy.js +150 -0
  33. package/dist/layers/copy.js.map +1 -0
  34. package/dist/layers/link-layer.d.ts +101 -0
  35. package/dist/layers/link-layer.d.ts.map +1 -0
  36. package/dist/layers/link-layer.js +527 -0
  37. package/dist/layers/link-layer.js.map +1 -0
  38. package/dist/layers/link-preview.d.ts +77 -0
  39. package/dist/layers/link-preview.d.ts.map +1 -0
  40. package/dist/layers/link-preview.js +202 -0
  41. package/dist/layers/link-preview.js.map +1 -0
  42. package/dist/layers/link-url.d.ts +19 -0
  43. package/dist/layers/link-url.d.ts.map +1 -0
  44. package/dist/layers/link-url.js +47 -0
  45. package/dist/layers/link-url.js.map +1 -0
  46. package/dist/layers/spans.d.ts +0 -6
  47. package/dist/layers/spans.d.ts.map +1 -1
  48. package/dist/layers/spans.js +2 -20
  49. package/dist/layers/spans.js.map +1 -1
  50. package/dist/layers/structure-layer.d.ts.map +1 -1
  51. package/dist/layers/structure-layer.js +3 -0
  52. package/dist/layers/structure-layer.js.map +1 -1
  53. package/dist/layers/text-layer.d.ts +27 -6
  54. package/dist/layers/text-layer.d.ts.map +1 -1
  55. package/dist/layers/text-layer.js +310 -28
  56. package/dist/layers/text-layer.js.map +1 -1
  57. package/dist/layout/page-layout.d.ts +7 -0
  58. package/dist/layout/page-layout.d.ts.map +1 -1
  59. package/dist/layout/page-layout.js +15 -0
  60. package/dist/layout/page-layout.js.map +1 -1
  61. package/dist/protocol.d.ts +197 -5
  62. package/dist/protocol.d.ts.map +1 -1
  63. package/dist/protocol.js +33 -6
  64. package/dist/protocol.js.map +1 -1
  65. package/dist/source/opfs.d.ts +35 -0
  66. package/dist/source/opfs.d.ts.map +1 -0
  67. package/dist/source/opfs.js +178 -0
  68. package/dist/source/opfs.js.map +1 -0
  69. package/dist/thumbnails/strip.d.ts +1 -1
  70. package/dist/thumbnails/strip.d.ts.map +1 -1
  71. package/dist/thumbnails/strip.js +48 -4
  72. package/dist/thumbnails/strip.js.map +1 -1
  73. package/dist/view/previews.d.ts +47 -0
  74. package/dist/view/previews.d.ts.map +1 -0
  75. package/dist/view/previews.js +97 -0
  76. package/dist/view/previews.js.map +1 -0
  77. package/dist/view/user-select.d.ts +3 -0
  78. package/dist/view/user-select.d.ts.map +1 -0
  79. package/dist/view/user-select.js +10 -0
  80. package/dist/view/user-select.js.map +1 -0
  81. package/dist/view/viewer.d.ts +143 -5
  82. package/dist/view/viewer.d.ts.map +1 -1
  83. package/dist/view/viewer.js +590 -50
  84. package/dist/view/viewer.js.map +1 -1
  85. package/dist/worker/document.d.ts +66 -6
  86. package/dist/worker/document.d.ts.map +1 -1
  87. package/dist/worker/document.js +139 -23
  88. package/dist/worker/document.js.map +1 -1
  89. package/dist/worker/edit.d.ts +35 -0
  90. package/dist/worker/edit.d.ts.map +1 -0
  91. package/dist/worker/edit.js +305 -0
  92. package/dist/worker/edit.js.map +1 -0
  93. package/dist/worker/find.d.ts +2 -2
  94. package/dist/worker/find.d.ts.map +1 -1
  95. package/dist/worker/find.js +8 -21
  96. package/dist/worker/find.js.map +1 -1
  97. package/dist/worker/fingerprint.d.ts +10 -0
  98. package/dist/worker/fingerprint.d.ts.map +1 -0
  99. package/dist/worker/fingerprint.js +42 -0
  100. package/dist/worker/fingerprint.js.map +1 -0
  101. package/dist/worker/methods.d.ts.map +1 -1
  102. package/dist/worker/methods.js +42 -4
  103. package/dist/worker/methods.js.map +1 -1
  104. package/dist/worker/navigation.d.ts +5 -1
  105. package/dist/worker/navigation.d.ts.map +1 -1
  106. package/dist/worker/navigation.js +22 -4
  107. package/dist/worker/navigation.js.map +1 -1
  108. package/dist/worker/print.d.ts +14 -0
  109. package/dist/worker/print.d.ts.map +1 -0
  110. package/dist/worker/print.js +49 -0
  111. package/dist/worker/print.js.map +1 -0
  112. package/dist/worker/recent-pages.d.ts +16 -0
  113. package/dist/worker/recent-pages.d.ts.map +1 -0
  114. package/dist/worker/recent-pages.js +68 -0
  115. package/dist/worker/recent-pages.js.map +1 -0
  116. package/dist/worker/render.d.ts.map +1 -1
  117. package/dist/worker/render.js +5 -2
  118. package/dist/worker/render.js.map +1 -1
  119. package/dist/worker/session.d.ts +59 -0
  120. package/dist/worker/session.d.ts.map +1 -0
  121. package/dist/worker/session.js +152 -0
  122. package/dist/worker/session.js.map +1 -0
  123. package/dist/worker/text.d.ts +11 -3
  124. package/dist/worker/text.d.ts.map +1 -1
  125. package/dist/worker/text.js +33 -25
  126. package/dist/worker/text.js.map +1 -1
  127. package/package.json +9 -8
@@ -0,0 +1,179 @@
1
+ // The edit session as the page sees it (E1 plan §5): a store of the open document's history, which
2
+ // the worker holds, and the calls that change it. Calls run one after another in the order they
3
+ // were made, so three quick presses of Undo undo three steps; each redraws the pages it touched
4
+ // before the next starts. The store's state is what an interface reads: the steps, whether a call
5
+ // is running, why editing is blocked, and the last undo or redo that restored only part of a step,
6
+ // which stays until the next edit (a toast is never the only place it shows).
7
+ import { EMPTY_HISTORY, } from "../protocol.js";
8
+ const CLOSED = {
9
+ history: EMPTY_HISTORY,
10
+ busy: false,
11
+ blocked: "no-document",
12
+ notice: undefined,
13
+ lastMs: undefined,
14
+ };
15
+ /**
16
+ * A session with no document, which can do nothing: what an interface reads while none is open,
17
+ * in place of a store of its own.
18
+ */
19
+ export const CLOSED_SESSION = {
20
+ /** The closed state: no steps, nothing unsaved, edits blocked. */
21
+ getState: () => CLOSED,
22
+ /** Never calls `listener`: a closed session doesn't change. */
23
+ subscribe: (_listener) => () => undefined,
24
+ /** Does nothing. */
25
+ undo: () => Promise.resolve(undefined),
26
+ /** Does nothing. */
27
+ redo: () => Promise.resolve(undefined),
28
+ /** Does nothing. */
29
+ goTo: (_position) => Promise.resolve(undefined),
30
+ };
31
+ /** The open document's edit session (`viewer.edits`). */
32
+ export class EditSession {
33
+ #host;
34
+ #listeners = new Set();
35
+ #reverted = new Set();
36
+ #failed = new Set();
37
+ #state = CLOSED;
38
+ /** The calls waiting, the newest last: each starts when the one before it settles. */
39
+ #queue = Promise.resolve();
40
+ #waiting = 0;
41
+ /** Counts documents, so an answer for one since replaced changes nothing. */
42
+ #turn = 0;
43
+ #now;
44
+ constructor(host, now = () => performance.now()) {
45
+ this.#host = host;
46
+ this.#now = now;
47
+ }
48
+ /** The session now: its history, whether a call is running, and why edits are blocked, if they are. */
49
+ getState = () => this.#state;
50
+ /** Calls `listener` whenever the state changes; returns the function that stops it. */
51
+ subscribe = (listener) => {
52
+ this.#listeners.add(listener);
53
+ return () => this.#listeners.delete(listener);
54
+ };
55
+ /** Calls `listener` after each undo or redo, with what it did; returns the function that stops it. */
56
+ onReverted(listener) {
57
+ this.#reverted.add(listener);
58
+ return () => this.#reverted.delete(listener);
59
+ }
60
+ /**
61
+ * Calls `listener` when a call fails (the edit, undo, redo or move changed nothing); returns the
62
+ * function that stops it. The call's promise rejects too.
63
+ */
64
+ onFailed(listener) {
65
+ this.#failed.add(listener);
66
+ return () => this.#failed.delete(listener);
67
+ }
68
+ /** Starts over for `document` (undefined: none is open). */
69
+ reset(document) {
70
+ this.#turn += 1;
71
+ this.#set({
72
+ history: EMPTY_HISTORY,
73
+ blocked: document === undefined ? "no-document" : document.encrypted ? "encrypted" : undefined,
74
+ notice: undefined,
75
+ lastMs: undefined,
76
+ });
77
+ }
78
+ /**
79
+ * Takes a history the worker gave outside a call of this session: a restarted worker's replay,
80
+ * or an empty one when the edits were lost.
81
+ */
82
+ follow(history) {
83
+ this.#set({ history, ...(history.diverged ? { blocked: "diverged" } : {}) });
84
+ }
85
+ /** Applies `ops` as one step named `label` ("Rotate page 5"). Rejects as the edit failed. */
86
+ apply(ops, label) {
87
+ return this.#run(() => this.#host.applyEdit(ops, { label }), true, { call: "apply", label });
88
+ }
89
+ /** Undoes the newest done step; resolves undefined when there was none. */
90
+ undo() {
91
+ return this.#run(() => (this.#state.history.position > 0 ? this.#host.undoEdit() : undefined), false, {
92
+ call: "undo",
93
+ });
94
+ }
95
+ /** Redoes the oldest undone step; resolves undefined when there was none. */
96
+ redo() {
97
+ // Read once the calls before it are done: an undo queued just before makes a step to redo.
98
+ return this.#run(() => {
99
+ const { history } = this.#state;
100
+ return history.position < history.steps.length ? this.#host.redoEdit() : undefined;
101
+ }, false, { call: "redo" });
102
+ }
103
+ /** Undoes or redoes steps until `position` of them are done, in one call. */
104
+ goTo(position) {
105
+ return this.#run(() => (position === this.#state.history.position ? undefined : this.#host.goToStep(position)), false, { call: "goTo" });
106
+ }
107
+ /**
108
+ * Runs `call` after the calls before it, unless editing is blocked by then; takes its history.
109
+ * An edit (`clears`) drops the last partial undo's notice.
110
+ */
111
+ #run(call, clears, what) {
112
+ const turn = this.#turn;
113
+ this.#waiting += 1;
114
+ this.#set({ busy: true });
115
+ const run = this.#queue.then(async () => {
116
+ const { blocked } = this.#state;
117
+ if (turn !== this.#turn)
118
+ throw new Error("the document was closed");
119
+ if (blocked !== undefined)
120
+ throw new Error(`the document can't be edited: ${blocked}`);
121
+ const started = this.#now();
122
+ try {
123
+ const result = await call();
124
+ if (result !== undefined && turn === this.#turn)
125
+ this.#took(result, clears, this.#now() - started);
126
+ return result;
127
+ }
128
+ catch (error) {
129
+ await this.#failedCall(turn, { ...what, error });
130
+ throw error;
131
+ }
132
+ });
133
+ const settled = run.finally(() => {
134
+ this.#waiting -= 1;
135
+ if (this.#waiting === 0)
136
+ this.#set({ busy: false });
137
+ });
138
+ this.#queue = settled.catch(() => undefined);
139
+ return run;
140
+ }
141
+ /** After a failed call: the worker's history read again, and the failure told to the listeners. */
142
+ async #failedCall(turn, failure) {
143
+ await this.#reread(turn);
144
+ if (turn !== this.#turn)
145
+ return;
146
+ for (const listener of [...this.#failed])
147
+ listener(failure);
148
+ }
149
+ /** Reads the worker's history after a failed call; a document that diverged blocks editing. */
150
+ async #reread(turn) {
151
+ try {
152
+ const history = await this.#host.editHistory();
153
+ if (turn === this.#turn)
154
+ this.follow(history);
155
+ }
156
+ catch {
157
+ // The document went (closed, or the worker restarted): its own reset or replay follows.
158
+ }
159
+ }
160
+ #took(result, clears, ms) {
161
+ const reverted = result.reverted ?? [];
162
+ const notice = [...reverted].reverse().find((step) => step.outcome !== "applied");
163
+ this.#set({
164
+ history: result.history,
165
+ lastMs: ms,
166
+ ...(clears ? { notice: undefined } : notice === undefined ? {} : { notice }),
167
+ ...(result.history.diverged ? { blocked: "diverged" } : {}),
168
+ });
169
+ if (reverted.length > 0)
170
+ for (const listener of [...this.#reverted])
171
+ listener(reverted);
172
+ }
173
+ #set(next) {
174
+ this.#state = { ...this.#state, ...next };
175
+ for (const listener of [...this.#listeners])
176
+ listener();
177
+ }
178
+ }
179
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/edit/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type { Op } from "@laminapdf/sdk";
2
+ import { type EditHistory, type EditResult, type ReplayedStep } from "./protocol.js";
3
+ /** The steps of the open document's edit session and how many of them are undone. */
4
+ export declare class EditLog {
5
+ #private;
6
+ /** The history the worker last answered. */
7
+ get history(): EditHistory;
8
+ /** Whether there is anything a new worker would lose. */
9
+ get empty(): boolean;
10
+ /** Forgets everything: a document opened, closed, or its edits lost. */
11
+ reset(): void;
12
+ /**
13
+ * Takes the worker's answer to a call: an edit's `ops` under the step it made, the oldest steps
14
+ * the depth limit dropped kept apart (they are still part of the document, so a replay needs
15
+ * them), and the steps the answer no longer lists forgotten.
16
+ */
17
+ take(result: EditResult, edit?: {
18
+ readonly ops: readonly Op[];
19
+ readonly label: string;
20
+ }): void;
21
+ /**
22
+ * What a new worker replays: every step, then how many of the newest to undo; undefined when
23
+ * the replay couldn't reproduce the document (a partial or skipped undo or redo).
24
+ */
25
+ replay(): {
26
+ readonly steps: readonly ReplayedStep[];
27
+ readonly undone: number;
28
+ } | undefined;
29
+ /** Takes a new worker's answer to the replay: its steps have new IDs, in the same order. */
30
+ replayed(result: EditResult): void;
31
+ }
32
+ //# sourceMappingURL=edit-log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit-log.d.ts","sourceRoot":"","sources":["../src/edit-log.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAiB,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAOpG,qFAAqF;AACrF,qBAAa,OAAO;;IAalB,4CAA4C;IAC5C,IAAI,OAAO,IAAI,WAAW,CAEzB;IAED,yDAAyD;IACzD,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,wEAAwE;IACxE,KAAK,IAAI,IAAI,CAKZ;IAED;;;;OAIG;IACH,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAY7F;IAED;;;OAGG;IACH,MAAM,IAAI;QAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAOzF;IAED,4FAA4F;IAC5F,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAIjC;CACF"}
@@ -0,0 +1,74 @@
1
+ // What the page keeps of an edit session so a restarted worker can take it back (ViewerClient's
2
+ // restart): the ops of every step still in the document, with their labels and times, and the
3
+ // history the worker last answered. The worker holds the session itself; this copy only ever
4
+ // replays it into a new worker, which applies the steps again and undoes the undone ones.
5
+ import { EMPTY_HISTORY } from "./protocol.js";
6
+ /** The steps of the open document's edit session and how many of them are undone. */
7
+ export class EditLog {
8
+ /** The steps the depth limit dropped from the history, oldest first: still part of the document. */
9
+ #dropped = [];
10
+ /** The history's steps, oldest first. */
11
+ #steps = [];
12
+ #history = EMPTY_HISTORY;
13
+ /**
14
+ * Whether applying the steps again reproduces the document: not once an undo or redo restored
15
+ * only part of a step, or nothing (a later change kept its value), since the replay can't
16
+ * recreate the change that made it so.
17
+ */
18
+ #replayable = true;
19
+ /** The history the worker last answered. */
20
+ get history() {
21
+ return this.#history;
22
+ }
23
+ /** Whether there is anything a new worker would lose. */
24
+ get empty() {
25
+ return this.#dropped.length === 0 && this.#steps.length === 0;
26
+ }
27
+ /** Forgets everything: a document opened, closed, or its edits lost. */
28
+ reset() {
29
+ this.#dropped = [];
30
+ this.#steps = [];
31
+ this.#history = EMPTY_HISTORY;
32
+ this.#replayable = true;
33
+ }
34
+ /**
35
+ * Takes the worker's answer to a call: an edit's `ops` under the step it made, the oldest steps
36
+ * the depth limit dropped kept apart (they are still part of the document, so a replay needs
37
+ * them), and the steps the answer no longer lists forgotten.
38
+ */
39
+ take(result, edit) {
40
+ if (result.reverted?.some((step) => step.outcome !== "applied"))
41
+ this.#replayable = false;
42
+ const { steps, dropped } = result.history;
43
+ const newest = steps.at(-1);
44
+ if (edit !== undefined && newest !== undefined && !this.#steps.some((s) => s.id === newest.id)) {
45
+ this.#steps.push({ id: newest.id, ops: edit.ops, label: newest.label, at: newest.at });
46
+ }
47
+ const newlyDropped = Math.max(0, dropped - this.#history.dropped);
48
+ for (const { ops, label, at } of this.#steps.splice(0, newlyDropped))
49
+ this.#dropped.push({ ops, label, at });
50
+ const kept = new Set(steps.map((s) => s.id));
51
+ this.#steps = this.#steps.filter((s) => kept.has(s.id));
52
+ this.#history = result.history;
53
+ }
54
+ /**
55
+ * What a new worker replays: every step, then how many of the newest to undo; undefined when
56
+ * the replay couldn't reproduce the document (a partial or skipped undo or redo).
57
+ */
58
+ replay() {
59
+ if (!this.#replayable)
60
+ return undefined;
61
+ const { steps, position } = this.#history;
62
+ return {
63
+ steps: [...this.#dropped, ...this.#steps.map(({ ops, label, at }) => ({ ops, label, at }))],
64
+ undone: steps.length - position,
65
+ };
66
+ }
67
+ /** Takes a new worker's answer to the replay: its steps have new IDs, in the same order. */
68
+ replayed(result) {
69
+ const ids = result.history.steps.map((s) => s.id);
70
+ this.#steps = this.#steps.map((step, i) => ({ ...step, id: ids[i] ?? step.id }));
71
+ this.#history = result.history;
72
+ }
73
+ }
74
+ //# sourceMappingURL=edit-log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit-log.js","sourceRoot":"","sources":["../src/edit-log.ts"],"names":[],"mappings":"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"}
@@ -67,6 +67,12 @@ export declare class FindController {
67
67
  matches: readonly (readonly number[])[];
68
68
  current: number | undefined;
69
69
  };
70
+ /**
71
+ * Searches `pages` again for the query (an edit changed their text, or turned them), replacing
72
+ * their matches without moving the view. While a search runs, they are searched again once it
73
+ * ends, since it may have read them before the edit.
74
+ */
75
+ refresh(pages: readonly number[]): void;
70
76
  /** Stops the search and drops the results: a new document opened. */
71
77
  reset(): void;
72
78
  }
@@ -1 +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"}
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;;IAczB,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,CAcnD;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;;;;OAIG;IACH,OAAO,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CActC;IAED,qEAAqE;IACrE,KAAK,IAAI,IAAI,CAOZ;CA0JF"}
@@ -30,6 +30,8 @@ export class FindController {
30
30
  #current;
31
31
  #abort;
32
32
  #start = 0;
33
+ /** Pages an edit changed while a search ran: searched again once it ends. */
34
+ #stale = new Set();
33
35
  constructor(host) {
34
36
  this.#host = host;
35
37
  }
@@ -43,6 +45,7 @@ export class FindController {
43
45
  /** Searches for `query` with `options`, replacing any search under way. An empty query clears. */
44
46
  find(query, options = {}) {
45
47
  this.#stop();
48
+ this.#stale.clear();
46
49
  const search = this.#state.search + 1;
47
50
  const cleared = [...this.#byPage.keys()];
48
51
  this.#byPage = new Map();
@@ -95,9 +98,33 @@ export class FindController {
95
98
  current: this.#current?.page === page ? this.#current.index : undefined,
96
99
  };
97
100
  }
101
+ /**
102
+ * Searches `pages` again for the query (an edit changed their text, or turned them), replacing
103
+ * their matches without moving the view. While a search runs, they are searched again once it
104
+ * ends, since it may have read them before the edit.
105
+ */
106
+ refresh(pages) {
107
+ const { query, options, search, done } = this.#state;
108
+ if (query.trim() === "" || pages.length === 0)
109
+ return;
110
+ if (!done) {
111
+ for (const page of pages)
112
+ this.#stale.add(page);
113
+ return;
114
+ }
115
+ this.#host
116
+ .find(query, options, pages, new AbortController().signal)
117
+ .then((results) => {
118
+ // A new query or close() since: these results are for a search that's gone.
119
+ if (this.#state.search === search)
120
+ this.#replace(results);
121
+ })
122
+ .catch((error) => reportError(error));
123
+ }
98
124
  /** Stops the search and drops the results: a new document opened. */
99
125
  reset() {
100
126
  this.#stop();
127
+ this.#stale.clear();
101
128
  this.#byPage = new Map();
102
129
  this.#snippets = new Map();
103
130
  this.#current = undefined;
@@ -131,8 +158,12 @@ export class FindController {
131
158
  return;
132
159
  this.#take(results, search);
133
160
  }
134
- if (this.#state.search === search)
135
- this.#set({ done: true });
161
+ if (this.#state.search !== search)
162
+ return;
163
+ this.#set({ done: true });
164
+ const stale = [...this.#stale];
165
+ this.#stale.clear();
166
+ this.refresh(stale);
136
167
  }
137
168
  /** Adds one call's results: the count, the first match to show, the pages to paint. */
138
169
  #take(results, search) {
@@ -169,6 +200,42 @@ export class FindController {
169
200
  if (first)
170
201
  this.#reveal();
171
202
  }
203
+ /** Replaces the matches of the pages in `results`, keeping the current match where it can. */
204
+ #replace(results) {
205
+ for (const { page, matches, snippets } of results) {
206
+ if (matches.length === 0) {
207
+ this.#byPage.delete(page);
208
+ this.#snippets.delete(page);
209
+ }
210
+ else {
211
+ this.#byPage.set(page, matches);
212
+ this.#snippets.set(page, snippets);
213
+ }
214
+ }
215
+ let total = 0;
216
+ for (const matches of this.#byPage.values())
217
+ total += matches.length;
218
+ this.#current = this.#kept(this.#current);
219
+ this.#set({ total, current: this.#current === undefined ? undefined : this.#ordinal(this.#current) });
220
+ // The pages searched again, and the page the current match moved to.
221
+ const painted = new Set(results.map((r) => r.page));
222
+ if (this.#current !== undefined)
223
+ painted.add(this.#current.page);
224
+ this.#host.redraw(painted);
225
+ }
226
+ /** `place`, or where it moves when its match is gone: the last left on its page, else the next page's first. */
227
+ #kept(place) {
228
+ if (place === undefined)
229
+ return undefined;
230
+ const left = this.#byPage.get(place.page)?.length ?? 0;
231
+ if (place.index < left)
232
+ return place;
233
+ if (left > 0)
234
+ return { page: place.page, index: left - 1 };
235
+ const pages = [...this.#byPage.keys()].sort((a, b) => a - b);
236
+ const next = pages.find((p) => p > place.page) ?? pages[0];
237
+ return next === undefined ? undefined : { page: next, index: 0 };
238
+ }
172
239
  /** `place`'s position among every match found so far, in document order. */
173
240
  #ordinal(place) {
174
241
  let before = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"controller.js","sourceRoot":"","sources":["../../src/find/controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"controller.js","sourceRoot":"","sources":["../../src/find/controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /** Open once document `id`'s first render answers, or after `wait` ms, whichever comes first. */
2
+ export declare class FirstDraw {
3
+ #private;
4
+ constructor(id: number, wait?: number);
5
+ /** A render of document `id` answered: a render of an earlier document doesn't count. */
6
+ drawn(id: number): void;
7
+ /** Resolves once the gate is open; rejects with `signal`'s reason if it was aborted meanwhile. */
8
+ wait(signal?: AbortSignal): Promise<void>;
9
+ }
10
+ //# sourceMappingURL=first-draw.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"first-draw.d.ts","sourceRoot":"","sources":["../src/first-draw.ts"],"names":[],"mappings":"AAOA,iGAAiG;AACjG,qBAAa,SAAS;;IAMpB,YAAY,EAAE,EAAE,MAAM,EAAE,IAAI,SAAkB,EAO7C;IAED,yFAAyF;IACzF,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAItB;IAED,kGAAkG;IAC5F,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAG9C;CACF"}
@@ -0,0 +1,33 @@
1
+ // The text calls' gate for one open document. The document worker runs one call at a time, so a
2
+ // text or link call that waits for the extract module to download would hold the first page's
3
+ // render behind it: those calls wait here until the document's first page is drawn.
4
+ /** How long text calls wait for the open document's first render before going ahead anyway, in ms. */
5
+ const FIRST_DRAW_WAIT = 2000;
6
+ /** Open once document `id`'s first render answers, or after `wait` ms, whichever comes first. */
7
+ export class FirstDraw {
8
+ #id;
9
+ #opened;
10
+ #open = () => undefined;
11
+ #timer;
12
+ constructor(id, wait = FIRST_DRAW_WAIT) {
13
+ this.#id = id;
14
+ this.#opened = new Promise((resolve) => {
15
+ this.#open = resolve;
16
+ });
17
+ // One timer per open: a caller that never renders waits once, not on every call.
18
+ this.#timer = setTimeout(() => this.#open(), wait);
19
+ }
20
+ /** A render of document `id` answered: a render of an earlier document doesn't count. */
21
+ drawn(id) {
22
+ if (id !== this.#id)
23
+ return;
24
+ clearTimeout(this.#timer);
25
+ this.#open();
26
+ }
27
+ /** Resolves once the gate is open; rejects with `signal`'s reason if it was aborted meanwhile. */
28
+ async wait(signal) {
29
+ await this.#opened;
30
+ signal?.throwIfAborted();
31
+ }
32
+ }
33
+ //# sourceMappingURL=first-draw.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"first-draw.js","sourceRoot":"","sources":["../src/first-draw.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAChG,8FAA8F;AAC9F,oFAAoF;AAEpF,sGAAsG;AACtG,MAAM,eAAe,GAAG,IAAI,CAAC;AAE7B,iGAAiG;AACjG,MAAM,OAAO,SAAS;IACX,GAAG,CAAS;IACZ,OAAO,CAAgB;IAChC,KAAK,GAAe,GAAG,EAAE,CAAC,SAAS,CAAC;IAC3B,MAAM,CAAgC;IAE/C,YAAY,EAAU,EAAE,IAAI,GAAG,eAAe;QAC5C,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAC3C,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;QACvB,CAAC,CAAC,CAAC;QACH,iFAAiF;QACjF,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;IACrD,CAAC;IAED,yFAAyF;IACzF,KAAK,CAAC,EAAU;QACd,IAAI,EAAE,KAAK,IAAI,CAAC,GAAG;YAAE,OAAO;QAC5B,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED,kGAAkG;IAClG,KAAK,CAAC,IAAI,CAAC,MAAoB;QAC7B,MAAM,IAAI,CAAC,OAAO,CAAC;QACnB,MAAM,EAAE,cAAc,EAAE,CAAC;IAC3B,CAAC;CACF"}
@@ -0,0 +1,74 @@
1
+ import type { Rotation } from "../layout/page-layout.js";
2
+ import type { DocumentPoint, Zoom } from "../zoom/zoom.js";
3
+ /** A place in the document: the point at the viewport's top-left, and the zoom. */
4
+ export interface HistoryPlace {
5
+ readonly point: DocumentPoint;
6
+ readonly zoom: Zoom;
7
+ }
8
+ /**
9
+ * Where a reader stopped: a history place and the view's rotation, kept by an app so the document
10
+ * reopens there (`Viewer.viewPosition`, `Viewer.restore`). Rotation is the view's, not a jump's,
11
+ * so history entries leave it out.
12
+ */
13
+ export interface ViewPosition extends HistoryPlace {
14
+ readonly rotation: Rotation;
15
+ }
16
+ /** One entry: a place and the id it keeps while it is in the history. */
17
+ export interface HistoryEntry extends HistoryPlace {
18
+ readonly id: number;
19
+ }
20
+ /** What the history shows: whether Back and Forward go anywhere, and the pages they go to. */
21
+ export interface HistoryState {
22
+ /** The entry the view is at. */
23
+ readonly current: HistoryEntry | undefined;
24
+ /** Where Back goes, when it goes anywhere. */
25
+ readonly back: HistoryEntry | undefined;
26
+ /** Where Forward goes, when it goes anywhere. */
27
+ readonly forward: HistoryEntry | undefined;
28
+ }
29
+ /** What the history reads and moves of its viewer. */
30
+ export interface HistoryHost {
31
+ /** Where the view is now; `undefined` without a document. */
32
+ place(): HistoryPlace | undefined;
33
+ /** Puts the view at `place`. */
34
+ show(place: HistoryPlace): void;
35
+ }
36
+ /** The history's options. */
37
+ export interface NavigationHistoryOptions {
38
+ /** The most entries kept; the oldest go first (default 100). */
39
+ readonly max?: number;
40
+ }
41
+ /** One viewer's back and forward history. */
42
+ export declare class NavigationHistory {
43
+ #private;
44
+ constructor(host: HistoryHost, options?: NavigationHistoryOptions);
45
+ /** What Back and Forward do now (a new object after each change). */
46
+ getState(): HistoryState;
47
+ /** Calls `listener` after every change (for `useSyncExternalStore`). */
48
+ subscribe(listener: () => void): () => void;
49
+ /**
50
+ * Calls `listener` when an entry is added: by a jump (`replaced` false), or as the first entry
51
+ * of a document (`replaced` true, as `history.replaceState` would). Back, Forward and `goTo`
52
+ * add nothing, so they never call it.
53
+ */
54
+ onEntry(listener: (entry: HistoryEntry, replaced: boolean) => void): () => void;
55
+ /** Forgets every entry: a new document starts a history of its own. */
56
+ reset(): void;
57
+ /**
58
+ * Runs `go` (which moves the view) as a jump: where the view was is kept for Back, and where it
59
+ * lands is the new current entry, with nothing left for Forward. Landing where it was adds
60
+ * nothing.
61
+ */
62
+ jump(go: () => void): void;
63
+ /** Goes back one entry; `false` when there is none. */
64
+ back(): boolean;
65
+ /** Goes forward one entry; `false` when there is none. */
66
+ forward(): boolean;
67
+ /**
68
+ * Goes to the entry `id` (Back or Forward, by the browser's history or the app's own): the
69
+ * view moves there and the entries stay. `false` when that entry is gone (pushed out, or from
70
+ * another document).
71
+ */
72
+ goTo(id: number): boolean;
73
+ }
74
+ //# sourceMappingURL=history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/history/history.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAE3D,mFAAmF;AACnF,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;CACrB;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAa,SAAQ,YAAY;IAChD,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAC7B;AAED,yEAAyE;AACzE,MAAM,WAAW,YAAa,SAAQ,YAAY;IAChD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAED,8FAA8F;AAC9F,MAAM,WAAW,YAAY;IAC3B,gCAAgC;IAChC,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,SAAS,CAAC;IAC3C,8CAA8C;IAC9C,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,CAAC;IACxC,iDAAiD;IACjD,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,SAAS,CAAC;CAC5C;AAED,sDAAsD;AACtD,MAAM,WAAW,WAAW;IAC1B,6DAA6D;IAC7D,KAAK,IAAI,YAAY,GAAG,SAAS,CAAC;IAClC,gCAAgC;IAChC,IAAI,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;CACjC;AAED,6BAA6B;AAC7B,MAAM,WAAW,wBAAwB;IACvC,gEAAgE;IAChE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AAQD,6CAA6C;AAC7C,qBAAa,iBAAiB;;IAU5B,YAAY,IAAI,EAAE,WAAW,EAAE,OAAO,GAAE,wBAA6B,EAGpE;IAED,qEAAqE;IACrE,QAAQ,IAAI,YAAY,CAEvB;IAED,wEAAwE;IACxE,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAG1C;IAED;;;;OAIG;IACH,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI,CAG9E;IAED,uEAAuE;IACvE,KAAK,IAAI,IAAI,CAIZ;IAED;;;;OAIG;IACH,IAAI,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAYzB;IAED,uDAAuD;IACvD,IAAI,IAAI,OAAO,CAGd;IAED,0DAA0D;IAC1D,OAAO,IAAI,OAAO,CAGjB;IAED;;;;OAIG;IACH,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAWxB;CAiCF"}