@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,152 @@
1
+ // The edit session's history (E1 plan §5, ADR 0006 §4 and §7): what the interface lists of the op
2
+ // log the model keeps. The model holds the undo records; this holds a step per transaction, with
3
+ // its label, pages and time, and where the document stands among them. edit.ts moves both
4
+ // together, so the steps done are always the model's undo stack and the steps undone its redo
5
+ // stack, up to the same depth.
6
+ //
7
+ // Positions are counted from the document as opened: position p (absolute) is the state after the
8
+ // p-th step ever made. `saved` is the absolute position the last save wrote, so the semantic dirty
9
+ // state is the distance from it, even once the depth limit has dropped the steps back to it (undo
10
+ // can't reach it then, but every step since still counts). It is lost when the saved document is
11
+ // on no path from here any more: a new edit cleared the steps that led to it, or one was skipped.
12
+ import { HISTORY_DEPTH } from "../protocol.js";
13
+ /** An empty history for a document just opened, keeping `depth` steps. */
14
+ export function newSession(depth = HISTORY_DEPTH) {
15
+ return { steps: [], position: 0, dropped: 0, saved: 0, nextId: 1, depth };
16
+ }
17
+ /** The absolute position the document is at. */
18
+ const at = (session) => session.dropped + session.position;
19
+ /** What the interface reads of `session`. */
20
+ export function historyOf(session, diverged) {
21
+ return {
22
+ steps: [...session.steps],
23
+ position: session.position,
24
+ dropped: session.dropped,
25
+ unsaved: unsaved(session),
26
+ diverged,
27
+ };
28
+ }
29
+ /**
30
+ * Transactions between the document now and the saved one: the distance between their positions,
31
+ * or, with the saved document on no path from here, every step done (at least one: it differs).
32
+ */
33
+ function unsaved(session) {
34
+ if (session.saved === undefined)
35
+ return Math.max(1, session.position);
36
+ return Math.abs(at(session) - session.saved);
37
+ }
38
+ /**
39
+ * Forgets the steps undone: a new transaction cleared the model's redo stack. A save among them
40
+ * can no longer be reached.
41
+ */
42
+ export function clearRedo(session) {
43
+ session.steps.length = session.position;
44
+ if (session.saved !== undefined && session.saved > at(session))
45
+ session.saved = undefined;
46
+ }
47
+ /** Records a transaction the model committed: the steps undone go, and the oldest past the depth. */
48
+ export function record(session, label, pages, time) {
49
+ clearRedo(session);
50
+ const step = { id: session.nextId++, label, pages: [...pages], at: time };
51
+ session.steps.push(step);
52
+ session.position += 1;
53
+ while (session.steps.length > session.depth) {
54
+ session.steps.shift();
55
+ session.position -= 1;
56
+ session.dropped += 1;
57
+ }
58
+ return step;
59
+ }
60
+ /**
61
+ * Moves back over the newest done step, which the model just undid with `outcome`. A skipped
62
+ * undo restored nothing and left no redo entry: the step goes, and the document stays where it
63
+ * was, after it.
64
+ */
65
+ export function stepBack(session, outcome) {
66
+ const index = session.position - 1;
67
+ const step = session.steps[index];
68
+ if (step === undefined)
69
+ throw new Error("there is no step to undo");
70
+ if (outcome === "skipped") {
71
+ // The state before the step can't be reached any more; the one after it is where we are.
72
+ removeStep(session, index, "undo");
73
+ return { step, way: "undo", outcome };
74
+ }
75
+ session.position -= 1;
76
+ return { step: mark(session, index, "undo", outcome), way: "undo", outcome };
77
+ }
78
+ /**
79
+ * Moves forward over the oldest undone step, which the model just redid with `outcome`. A skipped
80
+ * redo left no undo entry: the step goes, and the document stays where it was, before it.
81
+ */
82
+ export function stepForward(session, outcome) {
83
+ const index = session.position;
84
+ const step = session.steps[index];
85
+ if (step === undefined)
86
+ throw new Error("there is no step to redo");
87
+ if (outcome === "skipped") {
88
+ removeStep(session, index, "redo");
89
+ return { step, way: "redo", outcome };
90
+ }
91
+ session.position += 1;
92
+ return { step: mark(session, index, "redo", outcome), way: "redo", outcome };
93
+ }
94
+ /** Marks step `index` partly restored by its `way`, or not, after an undo or redo that went `outcome`. */
95
+ function mark(session, index, way, outcome) {
96
+ const { partial: _, ...step } = session.steps[index];
97
+ const next = outcome === "partial" ? { ...step, partial: way } : step;
98
+ session.steps[index] = next;
99
+ return next;
100
+ }
101
+ /**
102
+ * Takes out step `index`, which the model no longer has. Its two states become one: after it for
103
+ * an undo that restored nothing, before it for such a redo; the other can't be reached.
104
+ */
105
+ export function removeStep(session, index, way) {
106
+ const before = session.dropped + index;
107
+ session.steps.splice(index, 1);
108
+ if (index < session.position)
109
+ session.position -= 1;
110
+ const { saved } = session;
111
+ if (saved === undefined)
112
+ return;
113
+ const lost = way === "undo" ? before : before + 1;
114
+ if (saved === lost)
115
+ session.saved = undefined;
116
+ else if (saved > before)
117
+ session.saved = saved - 1;
118
+ }
119
+ /**
120
+ * Undoes or redoes steps until `target` of them are done, calling `revert` for each move (which
121
+ * makes it in the model and says how it went); `done` collects each move as it is made, so a
122
+ * caller can take them back when one fails. A skipped redo takes its step out without moving the
123
+ * position, so the target, among the steps after it, is one lower.
124
+ */
125
+ export async function walkTo(session, target, revert, done) {
126
+ let goal = Math.max(0, Math.min(session.steps.length, Math.trunc(target)));
127
+ while (session.position !== goal) {
128
+ const way = session.position > goal ? "undo" : "redo";
129
+ const outcome = await revert(way);
130
+ done.push(way === "undo" ? stepBack(session, outcome) : stepForward(session, outcome));
131
+ if (way === "redo" && outcome === "skipped")
132
+ goal -= 1;
133
+ }
134
+ }
135
+ /** Records the document now as the one saved, for a save that writes the file. */
136
+ export function markSaved(session) {
137
+ session.saved = at(session);
138
+ }
139
+ /** A copy of `session` to go back to when a move fails half way. */
140
+ export function snapshot(session) {
141
+ return { ...session, steps: [...session.steps] };
142
+ }
143
+ /** Puts `session` back as `kept` was. */
144
+ export function restore(session, kept) {
145
+ session.steps.length = 0;
146
+ session.steps.push(...kept.steps);
147
+ session.position = kept.position;
148
+ session.dropped = kept.dropped;
149
+ session.saved = kept.saved;
150
+ session.nextId = kept.nextId;
151
+ }
152
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/worker/session.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,iGAAiG;AACjG,0FAA0F;AAC1F,8FAA8F;AAC9F,+BAA+B;AAC/B,EAAE;AACF,kGAAkG;AAClG,mGAAmG;AACnG,kGAAkG;AAClG,iGAAiG;AACjG,kGAAkG;AAElG,OAAO,EAAmC,aAAa,EAAqB,MAAM,gBAAgB,CAAC;AAkBnG,0EAA0E;AAC1E,MAAM,UAAU,UAAU,CAAC,KAAK,GAAG,aAAa;IAC9C,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;AAC5E,CAAC;AAED,gDAAgD;AAChD,MAAM,EAAE,GAAG,CAAC,OAAgB,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;AAEpE,6CAA6C;AAC7C,MAAM,UAAU,SAAS,CAAC,OAAgB,EAAE,QAAiB;IAC3D,OAAO;QACL,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;QACzB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC;QACzB,QAAQ;KACT,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,OAAO,CAAC,OAAgB;IAC/B,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IACtE,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,OAAgB;IACxC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IACxC,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC;QAAE,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC;AAC5F,CAAC;AAED,qGAAqG;AACrG,MAAM,UAAU,MAAM,CAAC,OAAgB,EAAE,KAAa,EAAE,KAAwB,EAAE,IAAY;IAC5F,SAAS,CAAC,OAAO,CAAC,CAAC;IACnB,MAAM,IAAI,GAAa,EAAE,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACpF,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;IACtB,OAAO,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;QAC5C,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;QACtB,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAKD;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAgB,EAAE,OAAgB;IACzD,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,IAAI,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IACpE,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,yFAAyF;QACzF,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACnC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IACxC,CAAC;IACD,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;IACtB,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC/E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,OAAgB,EAAE,OAAgB;IAC5D,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC;IAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,IAAI,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IACpE,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACnC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IACxC,CAAC;IACD,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;IACtB,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC/E,CAAC;AAED,0GAA0G;AAC1G,SAAS,IAAI,CAAC,OAAgB,EAAE,KAAa,EAAE,GAAoB,EAAE,OAAgB;IACnF,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAa,CAAC;IACjE,MAAM,IAAI,GAAa,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAChF,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAC5B,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,OAAgB,EAAE,KAAa,EAAE,GAAoB;IAC9E,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC;IACvC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC/B,IAAI,KAAK,GAAG,OAAO,CAAC,QAAQ;QAAE,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;IACpD,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAC1B,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO;IAChC,MAAM,IAAI,GAAG,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAClD,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC;SACzC,IAAI,KAAK,GAAG,MAAM;QAAE,OAAO,CAAC,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC;AACrD,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,OAAgB,EAChB,MAAc,EACd,MAAkD,EAClD,IAAoB;IAEpB,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3E,OAAO,OAAO,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;QACtD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QACvF,IAAI,GAAG,KAAK,MAAM,IAAI,OAAO,KAAK,SAAS;YAAE,IAAI,IAAI,CAAC,CAAC;IACzD,CAAC;AACH,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,SAAS,CAAC,OAAgB;IACxC,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;AAC9B,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,QAAQ,CAAC,OAAgB;IACvC,OAAO,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;AACnD,CAAC;AAED,yCAAyC;AACzC,MAAM,UAAU,OAAO,CAAC,OAAgB,EAAE,IAAa;IACrD,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACzB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IACjC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAC/B,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IAC3B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AAC/B,CAAC"}
@@ -1,5 +1,6 @@
1
+ import type { Reflow } from "@laminapdf/sdk";
1
2
  import type { PageGlyphs } from "../find/page.js";
2
- import type { PageTextData, StructureData } from "../protocol.js";
3
+ import type { PageTextData, ReadingBlock, StructureData } from "../protocol.js";
3
4
  /** Page `index`'s text runs and glyph quads (cached; `signal` stops a read of pending data). */
4
5
  export declare function pageText(index: number, signal: AbortSignal): Promise<PageTextData>;
5
6
  /**
@@ -12,6 +13,13 @@ export declare function pageGlyphs(index: number, signal: AbortSignal, keep?: bo
12
13
  export declare function replyText(data: PageTextData): [PageTextData, Transferable[]];
13
14
  /** Whether the document says it is tagged, and its structure tree when it has one. */
14
15
  export declare function structure(signal: AbortSignal): Promise<StructureData>;
15
- /** Forgets every page's text: the document closed. */
16
- export declare function forgetText(): void;
16
+ /** The open document for reader mode (`doc.reflow()`): blocks in the structure tree's order, or why not. */
17
+ export declare function reflow(signal: AbortSignal): Promise<Reflow>;
18
+ /**
19
+ * Page `index`'s blocks in reading order (cached). Running headers and footers stay in, as
20
+ * blocks of their own: a selection that takes them in copies them.
21
+ */
22
+ export declare function readingOrder(index: number, signal: AbortSignal): Promise<ReadingBlock[]>;
23
+ /** Forgets `pages`' text (an edit changed them), or every page's (the document closed). */
24
+ export declare function forgetText(pages?: Iterable<number>): void;
17
25
  //# sourceMappingURL=text.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/worker/text.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAe,MAAM,gBAAgB,CAAC;AAY/E,gGAAgG;AAChG,wBAAsB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAGxF;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,UAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAgCrG;AAED,mEAAmE;AACnE,wBAAgB,SAAS,CAAC,IAAI,EAAE,YAAY,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,CAAC,CAG5E;AAED,sFAAsF;AACtF,wBAAsB,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CAK3E;AAED,sDAAsD;AACtD,wBAAgB,UAAU,IAAI,IAAI,CAEjC"}
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/worker/text.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAe,MAAM,gBAAgB,CAAC;AAO7F,gGAAgG;AAChG,wBAAsB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAGxF;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,UAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAqBrG;AAED,mEAAmE;AACnE,wBAAgB,SAAS,CAAC,IAAI,EAAE,YAAY,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,CAAC,CAG5E;AAED,sFAAsF;AACtF,wBAAsB,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CAK3E;AAED,4GAA4G;AAC5G,wBAAsB,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAGjE;AAKD;;;GAGG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAW9F;AAED,2FAA2F;AAC3F,wBAAgB,UAAU,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,CAIzD"}
@@ -3,14 +3,10 @@
3
3
  // every glyph's quad in one Float32Array, which each caller gets its own copy of to transfer, so a
4
4
  // page of thousands of glyphs is three objects, not thousands. The last pages read are kept, since
5
5
  // a page scrolled back into view asks again.
6
- import { current, textModel } from "./document.js";
7
- /** How many pages' text stay cached (a screenful of pages and the margin, at most zoom). */
8
- const CACHED_PAGES = 24;
9
- /**
10
- * The cache, by document ID and page: another document never reads one's pages, and the oldest
11
- * go. Each page keeps its glyphs' text too, for find; only the runs and quads reach the page.
12
- */
13
- const cache = new Map();
6
+ import { textModel } from "./document.js";
7
+ import { CACHED_PAGES, RecentPages } from "./recent-pages.js";
8
+ /** The last pages' text. Each keeps its glyphs' text too, for find; only the runs and quads reach the page. */
9
+ const cache = new RecentPages(CACHED_PAGES);
14
10
  /** Page `index`'s text runs and glyph quads (cached; `signal` stops a read of pending data). */
15
11
  export async function pageText(index, signal) {
16
12
  const { runs, quads } = await pageGlyphs(index, signal);
@@ -22,15 +18,9 @@ export async function pageText(index, signal) {
22
18
  * the pages in view.
23
19
  */
24
20
  export async function pageGlyphs(index, signal, keep = true) {
25
- const { id } = current();
26
- const key = `${id}:${index}`;
27
- const cached = cache.get(key);
28
- if (cached !== undefined) {
29
- // Most recently used last, so the oldest goes first.
30
- cache.delete(key);
31
- cache.set(key, cached);
21
+ const cached = cache.get(index);
22
+ if (cached !== undefined)
32
23
  return cached;
33
- }
34
24
  signal.throwIfAborted();
35
25
  const model = await textModel(signal);
36
26
  const text = await model.ensure(() => model.page(index).text(), { signal });
@@ -48,12 +38,7 @@ export async function pageGlyphs(index, signal, keep = true) {
48
38
  const data = { runs, quads, glyphText, glyphOffsets };
49
39
  if (!keep)
50
40
  return data;
51
- cache.set(key, data);
52
- for (const old of cache.keys()) {
53
- if (cache.size <= CACHED_PAGES)
54
- break;
55
- cache.delete(old);
56
- }
41
+ cache.set(index, data);
57
42
  return data;
58
43
  }
59
44
  /** One caller's answer: its own copy of the quads, transferred. */
@@ -68,8 +53,31 @@ export async function structure(signal) {
68
53
  const tree = await model.ensure(() => model.structureTree(), { signal });
69
54
  return tree === undefined ? { tagged } : { tagged, tree };
70
55
  }
71
- /** Forgets every page's text: the document closed. */
72
- export function forgetText() {
73
- cache.clear();
56
+ /** The open document for reader mode (`doc.reflow()`): blocks in the structure tree's order, or why not. */
57
+ export async function reflow(signal) {
58
+ const model = await textModel(signal);
59
+ return model.ensure(() => model.reflow(), { signal });
60
+ }
61
+ /** The reading-order blocks of the last pages a selection reached. */
62
+ const blocks = new RecentPages(CACHED_PAGES);
63
+ /**
64
+ * Page `index`'s blocks in reading order (cached). Running headers and footers stay in, as
65
+ * blocks of their own: a selection that takes them in copies them.
66
+ */
67
+ export async function readingOrder(index, signal) {
68
+ const cached = blocks.get(index);
69
+ if (cached !== undefined)
70
+ return cached;
71
+ const model = await textModel(signal);
72
+ const extraction = await model.ensure(() => model.extract({ format: "json", pages: [index], drop: { furniture: false } }), { signal });
73
+ const found = extraction.blocks.map((b) => ({ bbox: b.bbox, type: b.type }));
74
+ blocks.set(index, found);
75
+ return found;
76
+ }
77
+ /** Forgets `pages`' text (an edit changed them), or every page's (the document closed). */
78
+ export function forgetText(pages) {
79
+ const list = pages === undefined ? undefined : [...pages];
80
+ cache.forget(list);
81
+ blocks.forget(list);
74
82
  }
75
83
  //# sourceMappingURL=text.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/worker/text.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/worker/text.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@laminapdf/viewer",
3
- "version": "0.2.0-alpha.4",
3
+ "version": "0.2.0-alpha.6",
4
4
  "description": "The web reader's framework-free viewer core (ADR 0009). Part 1 (C3a): one document worker per document, hosting @laminapdf/sdk and a RenderBackend, behind a typed RPC that extends @laminapdf/sdk/worker with priorities, coalescing, cancellation, timeouts and restart.",
5
5
  "license": "MIT OR Apache-2.0",
6
6
  "homepage": "https://laminapdf.com",
@@ -31,19 +31,19 @@
31
31
  "./package.json": "./package.json"
32
32
  },
33
33
  "dependencies": {
34
- "@laminapdf/render": "0.2.0-alpha.4",
35
- "@laminapdf/sdk": "0.2.0-alpha.4",
36
- "@laminapdf/render-hayro": "0.2.0-alpha.4",
37
- "@laminapdf/render-pdfium": "0.2.0-alpha.4"
34
+ "@laminapdf/render": "0.2.0-alpha.6",
35
+ "@laminapdf/render-hayro": "0.2.0-alpha.6",
36
+ "@laminapdf/sdk": "0.2.0-alpha.6",
37
+ "@laminapdf/render-pdfium": "0.2.0-alpha.6"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@embedpdf/pdfium": "2.15.1",
41
- "@types/node": "26.6.5",
42
- "@vitest/browser-playwright": "5.0.5",
41
+ "@types/node": "26.6.6",
42
+ "@vitest/browser-playwright": "5.1.0",
43
43
  "playwright": "1.64.1",
44
44
  "typescript": "7.0.2",
45
45
  "vite": "8.3.5",
46
- "vitest": "5.0.5",
46
+ "vitest": "5.1.0",
47
47
  "@laminapdf/test-utils": "0.0.0"
48
48
  },
49
49
  "publishConfig": {
@@ -53,6 +53,7 @@
53
53
  "build:wasm": "pnpm --filter @laminapdf/render --filter @laminapdf/render-pdfium run build && pnpm --filter @laminapdf/render-hayro run build:wasm && tsc -p tsconfig.build.json",
54
54
  "typecheck:wasm": "pnpm --filter @laminapdf/render --filter @laminapdf/render-pdfium run build && pnpm --filter @laminapdf/render-hayro run build:wasm && tsc -p tsconfig.build.json && tsc --noEmit -p tsconfig.json",
55
55
  "perf": "node perf/run.ts",
56
+ "perf:gate": "node perf/gate.ts",
56
57
  "test:wasm": "pnpm --filter @laminapdf/render --filter @laminapdf/render-pdfium run build && pnpm --filter @laminapdf/render-hayro run build:wasm && tsc -p tsconfig.build.json && tsc --noEmit -p tsconfig.json && vitest run -c vitest.node.config.ts"
57
58
  }
58
59
  }