@docmentis/udoc-viewer 0.2.1 → 0.2.3

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 (52) hide show
  1. package/dist/package.json +1 -1
  2. package/dist/src/UDocClient.d.ts +113 -3
  3. package/dist/src/UDocClient.d.ts.map +1 -1
  4. package/dist/src/UDocClient.js +181 -24
  5. package/dist/src/UDocClient.js.map +1 -1
  6. package/dist/src/UDocViewer.d.ts +21 -5
  7. package/dist/src/UDocViewer.d.ts.map +1 -1
  8. package/dist/src/UDocViewer.js +45 -35
  9. package/dist/src/UDocViewer.js.map +1 -1
  10. package/dist/src/ui/viewer/components/LeftPanel.d.ts +2 -2
  11. package/dist/src/ui/viewer/components/LeftPanel.d.ts.map +1 -1
  12. package/dist/src/ui/viewer/components/LeftPanel.js +6 -6
  13. package/dist/src/ui/viewer/components/LeftPanel.js.map +1 -1
  14. package/dist/src/ui/viewer/components/Spread.d.ts +2 -2
  15. package/dist/src/ui/viewer/components/Spread.d.ts.map +1 -1
  16. package/dist/src/ui/viewer/components/Spread.js +2 -2
  17. package/dist/src/ui/viewer/components/Spread.js.map +1 -1
  18. package/dist/src/ui/viewer/components/ThumbnailPanel.d.ts +2 -2
  19. package/dist/src/ui/viewer/components/ThumbnailPanel.d.ts.map +1 -1
  20. package/dist/src/ui/viewer/components/ThumbnailPanel.js +5 -5
  21. package/dist/src/ui/viewer/components/ThumbnailPanel.js.map +1 -1
  22. package/dist/src/ui/viewer/components/Viewport.d.ts +2 -2
  23. package/dist/src/ui/viewer/components/Viewport.d.ts.map +1 -1
  24. package/dist/src/ui/viewer/components/Viewport.js +9 -9
  25. package/dist/src/ui/viewer/components/Viewport.js.map +1 -1
  26. package/dist/src/ui/viewer/effects.d.ts +2 -2
  27. package/dist/src/ui/viewer/effects.d.ts.map +1 -1
  28. package/dist/src/ui/viewer/effects.js +7 -6
  29. package/dist/src/ui/viewer/effects.js.map +1 -1
  30. package/dist/src/ui/viewer/shell.d.ts +2 -5
  31. package/dist/src/ui/viewer/shell.d.ts.map +1 -1
  32. package/dist/src/ui/viewer/shell.js +4 -6
  33. package/dist/src/ui/viewer/shell.js.map +1 -1
  34. package/dist/src/wasm/udoc.d.ts +107 -27
  35. package/dist/src/wasm/udoc.js +223 -44
  36. package/dist/src/wasm/udoc_bg.wasm +0 -0
  37. package/dist/src/wasm/udoc_bg.wasm.d.ts +6 -1
  38. package/dist/src/worker/WorkerClient.d.ts +93 -9
  39. package/dist/src/worker/WorkerClient.d.ts.map +1 -1
  40. package/dist/src/worker/WorkerClient.js +295 -15
  41. package/dist/src/worker/WorkerClient.js.map +1 -1
  42. package/dist/src/worker/index.d.ts +1 -1
  43. package/dist/src/worker/index.d.ts.map +1 -1
  44. package/dist/src/worker/worker.d.ts +94 -3
  45. package/dist/src/worker/worker.d.ts.map +1 -1
  46. package/dist/src/worker/worker.js +47 -3
  47. package/dist/src/worker/worker.js.map +1 -1
  48. package/package.json +1 -1
  49. package/dist/src/ui/viewer/rendering/RenderManager.d.ts +0 -76
  50. package/dist/src/ui/viewer/rendering/RenderManager.d.ts.map +0 -1
  51. package/dist/src/ui/viewer/rendering/RenderManager.js +0 -236
  52. package/dist/src/ui/viewer/rendering/RenderManager.js.map +0 -1
@@ -1,76 +0,0 @@
1
- /**
2
- * RenderManager - Handles render queue and cache for document pages.
3
- *
4
- * Responsibilities:
5
- * - Priority queue with boost-based ordering
6
- * - Deduplication (same page/scale only rendered once)
7
- * - Cache with LRU eviction
8
- * - In-flight request tracking
9
- *
10
- * Priority scheme:
11
- * - Base priority: page=100, thumbnail=50
12
- * - boost() promotes target page and nearby pages above current max priority
13
- */
14
- export type RenderType = "page" | "thumbnail";
15
- export interface RenderRequest {
16
- docId: string;
17
- page: number;
18
- type: RenderType;
19
- scale: number;
20
- }
21
- export interface RenderResult {
22
- bitmap: ImageBitmap;
23
- width: number;
24
- height: number;
25
- }
26
- export interface RenderAdapter {
27
- render(docId: string, page: number, scale: number): Promise<ImageBitmap>;
28
- }
29
- export interface RenderManagerOptions {
30
- /** Max cache entries before LRU eviction (default: 100) */
31
- maxCacheSize?: number;
32
- /** Max concurrent render requests (default: 2) */
33
- maxConcurrent?: number;
34
- }
35
- export declare class RenderManager {
36
- private adapter;
37
- private cache;
38
- private queue;
39
- private inFlight;
40
- private maxCacheSize;
41
- private maxConcurrent;
42
- private activeCount;
43
- constructor(adapter: RenderAdapter, options?: RenderManagerOptions);
44
- /**
45
- * Request a render. Returns cached result if available,
46
- * otherwise queues the request.
47
- */
48
- request(req: RenderRequest): Promise<RenderResult>;
49
- /**
50
- * Get a cached result without queuing a render.
51
- */
52
- get(docId: string, page: number, type: RenderType, scale: number): RenderResult | null;
53
- /**
54
- * Cancel pending requests matching criteria.
55
- * Does not cancel in-flight requests.
56
- */
57
- cancel(docId?: string, page?: number, type?: RenderType): void;
58
- /**
59
- * Invalidate cache entries. Call when document or zoom changes.
60
- */
61
- invalidate(docId?: string): void;
62
- /**
63
- * Boost priority for the target page and nearby pages.
64
- * Target page gets highest priority, nearby pages get slightly lower.
65
- */
66
- boost(docId: string, page: number): void;
67
- /**
68
- * Clean up resources.
69
- */
70
- destroy(): void;
71
- private processQueue;
72
- private doRender;
73
- private addToCache;
74
- private evictLRU;
75
- }
76
- //# sourceMappingURL=RenderManager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RenderManager.d.ts","sourceRoot":"","sources":["../../../../../src/ui/viewer/rendering/RenderManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,WAAW,CAAC;AAE9C,MAAM,WAAW,aAAa;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IACzB,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC1B,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CAC5E;AAsBD,MAAM,WAAW,oBAAoB;IACjC,2DAA2D;IAC3D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kDAAkD;IAClD,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,aAAa;IACtB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,QAAQ,CAA4C;IAC5D,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,WAAW,CAAK;gBAEZ,OAAO,EAAE,aAAa,EAAE,OAAO,GAAE,oBAAyB;IAMtE;;;OAGG;IACH,OAAO,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAqClD;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAUtF;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI;IAc9D;;OAEG;IACH,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAkBhC;;;OAGG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IA2BxC;;OAEG;IACH,OAAO,IAAI,IAAI;YAcD,YAAY;YAmCZ,QAAQ;IAoBtB,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,QAAQ;CAmBnB"}
@@ -1,236 +0,0 @@
1
- /**
2
- * RenderManager - Handles render queue and cache for document pages.
3
- *
4
- * Responsibilities:
5
- * - Priority queue with boost-based ordering
6
- * - Deduplication (same page/scale only rendered once)
7
- * - Cache with LRU eviction
8
- * - In-flight request tracking
9
- *
10
- * Priority scheme:
11
- * - Base priority: page=100, thumbnail=50
12
- * - boost() promotes target page and nearby pages above current max priority
13
- */
14
- function makeKey(docId, page, type, scale) {
15
- return `${docId}:${page}:${type}:${scale}`;
16
- }
17
- /** Base priority by render type (page renders are more important than thumbnails) */
18
- function getBasePriority(type) {
19
- return type === "page" ? 100 : 50;
20
- }
21
- export class RenderManager {
22
- adapter;
23
- cache = new Map();
24
- queue = [];
25
- inFlight = new Map();
26
- maxCacheSize;
27
- maxConcurrent;
28
- activeCount = 0;
29
- constructor(adapter, options = {}) {
30
- this.adapter = adapter;
31
- this.maxCacheSize = options.maxCacheSize ?? 100;
32
- this.maxConcurrent = options.maxConcurrent ?? 2;
33
- }
34
- /**
35
- * Request a render. Returns cached result if available,
36
- * otherwise queues the request.
37
- */
38
- request(req) {
39
- const key = makeKey(req.docId, req.page, req.type, req.scale);
40
- // Check cache first
41
- const cached = this.cache.get(key);
42
- if (cached) {
43
- cached.lastAccess = Date.now();
44
- return Promise.resolve(cached.result);
45
- }
46
- // Check if already in-flight
47
- const existing = this.inFlight.get(key);
48
- if (existing) {
49
- return existing;
50
- }
51
- // Queue the request
52
- return new Promise((resolve, reject) => {
53
- const queuedReq = {
54
- ...req,
55
- priority: getBasePriority(req.type),
56
- resolve,
57
- reject
58
- };
59
- // Insert sorted by priority (highest first)
60
- const insertIndex = this.queue.findIndex(q => q.priority < queuedReq.priority);
61
- if (insertIndex === -1) {
62
- this.queue.push(queuedReq);
63
- }
64
- else {
65
- this.queue.splice(insertIndex, 0, queuedReq);
66
- }
67
- this.processQueue();
68
- });
69
- }
70
- /**
71
- * Get a cached result without queuing a render.
72
- */
73
- get(docId, page, type, scale) {
74
- const key = makeKey(docId, page, type, scale);
75
- const cached = this.cache.get(key);
76
- if (cached) {
77
- cached.lastAccess = Date.now();
78
- return cached.result;
79
- }
80
- return null;
81
- }
82
- /**
83
- * Cancel pending requests matching criteria.
84
- * Does not cancel in-flight requests.
85
- */
86
- cancel(docId, page, type) {
87
- this.queue = this.queue.filter(req => {
88
- const match = (docId === undefined || req.docId === docId) &&
89
- (page === undefined || req.page === page) &&
90
- (type === undefined || req.type === type);
91
- if (match) {
92
- req.reject(new Error("Request cancelled"));
93
- }
94
- return !match;
95
- });
96
- }
97
- /**
98
- * Invalidate cache entries. Call when document or zoom changes.
99
- */
100
- invalidate(docId) {
101
- if (docId === undefined) {
102
- // Clear all
103
- for (const entry of this.cache.values()) {
104
- entry.result.bitmap.close();
105
- }
106
- this.cache.clear();
107
- }
108
- else {
109
- // Clear for specific doc
110
- for (const [key, entry] of this.cache) {
111
- if (key.startsWith(docId + ":")) {
112
- entry.result.bitmap.close();
113
- this.cache.delete(key);
114
- }
115
- }
116
- }
117
- }
118
- /**
119
- * Boost priority for the target page and nearby pages.
120
- * Target page gets highest priority, nearby pages get slightly lower.
121
- */
122
- boost(docId, page) {
123
- if (this.queue.length === 0)
124
- return;
125
- // Find highest priority in queue
126
- let maxPriority = 0;
127
- for (const req of this.queue) {
128
- if (req.priority > maxPriority) {
129
- maxPriority = req.priority;
130
- }
131
- }
132
- const boostBase = maxPriority + 10;
133
- // Boost matching pages within a wider distance to cover more nearby renders.
134
- for (const req of this.queue) {
135
- if (req.docId === docId) {
136
- const distance = Math.abs(req.page - page);
137
- if (distance <= 4) {
138
- req.priority = boostBase - distance;
139
- }
140
- }
141
- }
142
- // Re-sort queue by new priorities
143
- this.queue.sort((a, b) => b.priority - a.priority);
144
- }
145
- /**
146
- * Clean up resources.
147
- */
148
- destroy() {
149
- // Cancel all pending
150
- for (const req of this.queue) {
151
- req.reject(new Error("RenderManager destroyed"));
152
- }
153
- this.queue = [];
154
- // Close all cached bitmaps
155
- for (const entry of this.cache.values()) {
156
- entry.result.bitmap.close();
157
- }
158
- this.cache.clear();
159
- }
160
- async processQueue() {
161
- while (this.activeCount < this.maxConcurrent && this.queue.length > 0) {
162
- const req = this.queue.shift();
163
- if (!req)
164
- break;
165
- const key = makeKey(req.docId, req.page, req.type, req.scale);
166
- // Double-check cache (might have been filled while queued)
167
- const cached = this.cache.get(key);
168
- if (cached) {
169
- cached.lastAccess = Date.now();
170
- req.resolve(cached.result);
171
- continue;
172
- }
173
- // Check if in-flight (might have been started by another request)
174
- const existing = this.inFlight.get(key);
175
- if (existing) {
176
- existing.then(req.resolve, req.reject);
177
- continue;
178
- }
179
- // Start the render
180
- this.activeCount++;
181
- const promise = this.doRender(req, key);
182
- this.inFlight.set(key, promise);
183
- promise.finally(() => {
184
- this.activeCount--;
185
- this.inFlight.delete(key);
186
- this.processQueue();
187
- });
188
- }
189
- }
190
- async doRender(req, key) {
191
- try {
192
- const bitmap = await this.adapter.render(req.docId, req.page, req.scale);
193
- const result = {
194
- bitmap,
195
- width: bitmap.width,
196
- height: bitmap.height
197
- };
198
- // Add to cache
199
- this.addToCache(key, result);
200
- req.resolve(result);
201
- return result;
202
- }
203
- catch (error) {
204
- req.reject(error instanceof Error ? error : new Error(String(error)));
205
- throw error;
206
- }
207
- }
208
- addToCache(key, result) {
209
- // Evict if at capacity
210
- while (this.cache.size >= this.maxCacheSize) {
211
- this.evictLRU();
212
- }
213
- this.cache.set(key, {
214
- result,
215
- lastAccess: Date.now()
216
- });
217
- }
218
- evictLRU() {
219
- let oldest = null;
220
- let oldestTime = Infinity;
221
- for (const [key, entry] of this.cache) {
222
- if (entry.lastAccess < oldestTime) {
223
- oldestTime = entry.lastAccess;
224
- oldest = key;
225
- }
226
- }
227
- if (oldest) {
228
- const entry = this.cache.get(oldest);
229
- if (entry) {
230
- entry.result.bitmap.close();
231
- }
232
- this.cache.delete(oldest);
233
- }
234
- }
235
- }
236
- //# sourceMappingURL=RenderManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RenderManager.js","sourceRoot":"","sources":["../../../../../src/ui/viewer/rendering/RenderManager.ts"],"names":[],"mappings":"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"}