@design.estate/dees-catalog 6.12.0 → 7.0.0

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 (45) hide show
  1. package/.smartconfig.json +5 -1
  2. package/dist_bundle/bundle.js +24090 -1235
  3. package/dist_bundle/bundle.js.map +1 -0
  4. package/dist_bundle/chunks/U6Ua8p1giFoD1s7vrUZUdpbg/.tsbundle-artifacts.json +7 -0
  5. package/dist_bundle/chunks/U6Ua8p1giFoD1s7vrUZUdpbg/worker-KZQQYSUG.js +58301 -0
  6. package/dist_bundle/chunks/U6Ua8p1giFoD1s7vrUZUdpbg/worker-KZQQYSUG.js.map +1 -0
  7. package/dist_bundle/third-party-notices.md +190 -0
  8. package/dist_ts_web/00_commitinfo_data.js +2 -2
  9. package/dist_ts_web/elements/00group-chart/dees-chart-area/component.js +3 -3
  10. package/dist_ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.d.ts +4 -1
  11. package/dist_ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.js +29 -2
  12. package/dist_ts_web/elements/00group-harness/dees-harness-session-sidebar/dees-harness-session-sidebar.d.ts +4 -1
  13. package/dist_ts_web/elements/00group-harness/dees-harness-session-sidebar/dees-harness-session-sidebar.js +65 -8
  14. package/dist_ts_web/elements/00group-harness/interfaces.d.ts +1 -0
  15. package/dist_ts_web/elements/00group-media/dees-pdf-shared/CanvasPool.d.ts +1 -0
  16. package/dist_ts_web/elements/00group-media/dees-pdf-shared/CanvasPool.js +15 -1
  17. package/dist_ts_web/elements/00group-media/dees-pdf-shared/PdfManager.d.ts +6 -4
  18. package/dist_ts_web/elements/00group-media/dees-pdf-shared/PdfManager.js +183 -21
  19. package/dist_ts_web/elements/00group-media/dees-pdf-shared/utils.d.ts +3 -0
  20. package/dist_ts_web/elements/00group-media/dees-pdf-shared/utils.js +67 -1
  21. package/dist_ts_web/elements/00group-media/dees-pdf-viewer/component.d.ts +25 -1
  22. package/dist_ts_web/elements/00group-media/dees-pdf-viewer/component.js +693 -285
  23. package/dist_ts_web/elements/00group-media/dees-pdf-viewer/demo.js +7 -7
  24. package/dist_ts_web/elements/00group-media/dees-thumbnail-pdf/component.d.ts +20 -1
  25. package/dist_ts_web/elements/00group-media/dees-thumbnail-pdf/component.js +379 -116
  26. package/dist_ts_web/elements/00group-media/dees-thumbnail-pdf/demo.js +2 -2
  27. package/dist_ts_web/elements/00group-media/dees-thumbnail-shared/DeesThumbnailBase.d.ts +1 -0
  28. package/dist_ts_web/elements/00group-media/dees-thumbnail-shared/DeesThumbnailBase.js +7 -1
  29. package/package.json +5 -4
  30. package/readme.hints.md +26 -19
  31. package/readme.md +104 -53
  32. package/third-party-notices.md +190 -0
  33. package/ts_web/00_commitinfo_data.ts +1 -1
  34. package/ts_web/elements/00group-chart/dees-chart-area/component.ts +2 -2
  35. package/ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.ts +13 -0
  36. package/ts_web/elements/00group-harness/dees-harness-session-sidebar/dees-harness-session-sidebar.ts +51 -6
  37. package/ts_web/elements/00group-harness/interfaces.ts +2 -0
  38. package/ts_web/elements/00group-media/dees-pdf-shared/CanvasPool.ts +15 -1
  39. package/ts_web/elements/00group-media/dees-pdf-shared/PdfManager.ts +214 -24
  40. package/ts_web/elements/00group-media/dees-pdf-shared/utils.ts +77 -1
  41. package/ts_web/elements/00group-media/dees-pdf-viewer/component.ts +774 -327
  42. package/ts_web/elements/00group-media/dees-pdf-viewer/demo.ts +7 -7
  43. package/ts_web/elements/00group-media/dees-thumbnail-pdf/component.ts +427 -128
  44. package/ts_web/elements/00group-media/dees-thumbnail-pdf/demo.ts +1 -1
  45. package/ts_web/elements/00group-media/dees-thumbnail-shared/DeesThumbnailBase.ts +5 -0
@@ -37,9 +37,10 @@ import { DeesThumbnailBase } from '../dees-thumbnail-shared/DeesThumbnailBase.js
37
37
  import { thumbnailBaseStyles } from '../dees-thumbnail-shared/styles.js';
38
38
  import { PdfManager } from '../dees-pdf-shared/PdfManager.js';
39
39
  import { CanvasPool } from '../dees-pdf-shared/CanvasPool.js';
40
- import { PerformanceMonitor, throttle, formatFileSize } from '../dees-pdf-shared/utils.js';
40
+ import { throttle, formatFileSize, raceWithAbort, settlePromisesWithin, waitForAnimationFrame, } from '../dees-pdf-shared/utils.js';
41
41
  import { tilePdfStyles } from './styles.js';
42
42
  import { demo as demoFunc } from './demo.js';
43
+ const pipelineSettlementGraceMs = 2_500;
43
44
  let DeesThumbnailPdf = (() => {
44
45
  let _classDecorators = [customElement('dees-thumbnail-pdf')];
45
46
  let _classDescriptor;
@@ -114,8 +115,21 @@ let DeesThumbnailPdf = (() => {
114
115
  get fileSize() { return this.#fileSize_accessor_storage; }
115
116
  set fileSize(value) { this.#fileSize_accessor_storage = value; }
116
117
  renderPagesTask = (__runInitializers(this, _fileSize_extraInitializers), null);
118
+ renderPagesRequestPromise = null;
119
+ currentPageRenderTask = null;
117
120
  renderPagesQueued = false;
118
- pdfDocument;
121
+ renderQueueEpoch = 0;
122
+ pdfDocument = null;
123
+ pdfLoadPromise = null;
124
+ loadAbortController = null;
125
+ loadOperation = null;
126
+ loadGeneration = 0;
127
+ connectionEpoch = 0;
128
+ cleanupPromise = null;
129
+ renderFailurePromise = null;
130
+ renderAdmissionOpen = false;
131
+ renderGeneration = 0;
132
+ documentUsePipelines = new Set();
119
133
  canvases = [];
120
134
  resizeObserver;
121
135
  stackElement = null;
@@ -160,8 +174,8 @@ let DeesThumbnailPdf = (() => {
160
174
  };
161
175
  }
162
176
  onBecameVisible() {
163
- if (!this.rendered && this.pdfUrl) {
164
- this.loadAndRenderPreview();
177
+ if (this.isConnected && !this.rendered && this.pdfUrl) {
178
+ void this.schedulePdfLoad(this.connectionEpoch);
165
179
  }
166
180
  }
167
181
  onTileMouseEnter() {
@@ -171,7 +185,6 @@ let DeesThumbnailPdf = (() => {
171
185
  this.isHovering = false;
172
186
  if (this.currentPreviewPage !== 1) {
173
187
  this.currentPreviewPage = 1;
174
- void this.scheduleRenderPages();
175
188
  }
176
189
  }
177
190
  onTileMouseMove(e) {
@@ -184,144 +197,328 @@ let DeesThumbnailPdf = (() => {
184
197
  const newPage = Math.ceil(percentage * this.pageCount) || 1;
185
198
  if (newPage !== this.currentPreviewPage) {
186
199
  this.currentPreviewPage = newPage;
187
- void this.scheduleRenderPages();
188
200
  }
189
201
  }
190
202
  async connectedCallback() {
203
+ const connectionEpoch = ++this.connectionEpoch;
191
204
  await super.connectedCallback();
192
205
  await this.updateComplete;
206
+ if (!this.isConnected || connectionEpoch !== this.connectionEpoch)
207
+ return;
193
208
  this.cacheElements();
194
209
  this.setupResizeObserver();
210
+ if (this.pdfUrl
211
+ && this.isVisible) {
212
+ const operationKey = `${connectionEpoch}:${this.pdfUrl}`;
213
+ if (this.loadOperation?.key === operationKey) {
214
+ await this.loadOperation.promise;
215
+ }
216
+ else if (connectionEpoch > 1 || !this.pdfDocument) {
217
+ await this.schedulePdfLoad(connectionEpoch);
218
+ }
219
+ }
195
220
  }
196
221
  async disconnectedCallback() {
222
+ this.connectionEpoch += 1;
223
+ this.loadGeneration += 1;
224
+ this.renderAdmissionOpen = false;
225
+ this.loadAbortController?.abort();
226
+ const cleanupPromise = this.cleanup();
197
227
  await super.disconnectedCallback();
198
- this.cleanup();
199
- this.resizeObserver?.disconnect();
200
- this.resizeObserver = undefined;
228
+ await cleanupPromise;
229
+ }
230
+ schedulePdfLoad(connectionEpochArg) {
231
+ const url = this.pdfUrl;
232
+ const key = `${connectionEpochArg}:${url}`;
233
+ if (this.loadOperation?.key === key) {
234
+ return this.loadOperation.promise;
235
+ }
236
+ const generation = ++this.loadGeneration;
237
+ const operation = {
238
+ key,
239
+ promise: Promise.resolve(),
240
+ };
241
+ operation.promise = this.performPdfLoad(generation, connectionEpochArg, url)
242
+ .finally(() => {
243
+ if (this.loadOperation === operation) {
244
+ this.loadOperation = null;
245
+ }
246
+ });
247
+ this.loadOperation = operation;
248
+ return operation.promise;
249
+ }
250
+ isCurrentLoad(generationArg, connectionEpochArg, urlArg) {
251
+ return this.isConnected
252
+ && generationArg === this.loadGeneration
253
+ && connectionEpochArg === this.connectionEpoch
254
+ && urlArg === this.pdfUrl;
201
255
  }
202
- async loadAndRenderPreview() {
203
- if (this.rendered || this.loading)
256
+ async performPdfLoad(generationArg, connectionEpochArg, urlArg) {
257
+ await this.cleanup();
258
+ if (!this.isCurrentLoad(generationArg, connectionEpochArg, urlArg)
259
+ || !urlArg
260
+ || !this.isVisible)
204
261
  return;
205
262
  this.loading = true;
206
263
  this.error = false;
207
- PerformanceMonitor.mark(`preview-load-${this.pdfUrl}`);
264
+ const loadStartedAt = performance.now();
265
+ const abortController = new AbortController();
266
+ this.loadAbortController = abortController;
267
+ const { signal } = abortController;
208
268
  try {
209
- this.pdfDocument = await PdfManager.loadDocument(this.pdfUrl);
210
- this.pageCount = this.pdfDocument.numPages;
211
- this.currentPreviewPage = 1;
269
+ const pdfLoadPromise = PdfManager.loadDocument(urlArg, signal);
270
+ this.pdfLoadPromise = pdfLoadPromise;
271
+ let pdfDocument;
212
272
  try {
213
- const downloadInfo = await this.pdfDocument.getDownloadInfo();
214
- this.fileSize = downloadInfo.length;
273
+ pdfDocument = await pdfLoadPromise;
215
274
  }
216
- catch {
217
- // File size unavailable — not critical
275
+ finally {
276
+ if (this.pdfLoadPromise === pdfLoadPromise) {
277
+ this.pdfLoadPromise = null;
278
+ }
279
+ }
280
+ if (!this.isCurrentLoad(generationArg, connectionEpochArg, urlArg) || signal.aborted) {
281
+ await PdfManager.releaseDocument(pdfDocument);
282
+ return;
283
+ }
284
+ this.pdfDocument = pdfDocument;
285
+ this.renderAdmissionOpen = true;
286
+ const documentUsePipeline = (async () => {
287
+ this.pageCount = pdfDocument.numPages;
288
+ this.currentPreviewPage = 1;
289
+ try {
290
+ const downloadInfo = await raceWithAbort(pdfDocument.getDownloadInfo(), signal);
291
+ if (!this.isCurrentLoad(generationArg, connectionEpochArg, urlArg))
292
+ return;
293
+ this.fileSize = downloadInfo.length;
294
+ }
295
+ catch {
296
+ if (!this.isCurrentLoad(generationArg, connectionEpochArg, urlArg))
297
+ return;
298
+ }
299
+ this.loadedPdfUrl = urlArg;
300
+ this.loading = false;
301
+ await this.updateComplete;
302
+ if (!this.isCurrentLoad(generationArg, connectionEpochArg, urlArg))
303
+ return;
304
+ this.cacheElements();
305
+ this.setupResizeObserver();
306
+ await this.scheduleRenderPages();
307
+ if (!this.isCurrentLoad(generationArg, connectionEpochArg, urlArg))
308
+ return;
309
+ this.rendered = true;
310
+ const duration = performance.now() - loadStartedAt;
311
+ console.log(`PDF tile rendered in ${duration}ms`);
312
+ })();
313
+ this.documentUsePipelines.add(documentUsePipeline);
314
+ try {
315
+ await documentUsePipeline;
316
+ }
317
+ finally {
318
+ this.documentUsePipelines.delete(documentUsePipeline);
218
319
  }
219
- this.loadedPdfUrl = this.pdfUrl;
220
- this.loading = false;
221
- await this.updateComplete;
222
- this.cacheElements();
223
- await this.scheduleRenderPages();
224
- this.rendered = true;
225
- const duration = PerformanceMonitor.measure(`preview-render-${this.pdfUrl}`, `preview-load-${this.pdfUrl}`);
226
- console.log(`PDF tile rendered in ${duration}ms`);
227
320
  }
228
321
  catch (error) {
229
- console.error('Failed to load PDF tile:', error);
230
- this.error = true;
231
- this.loading = false;
322
+ if (this.isCurrentLoad(generationArg, connectionEpochArg, urlArg) && !signal.aborted) {
323
+ await this.handleDocumentFailure(error, generationArg, connectionEpochArg, urlArg, this.pdfDocument);
324
+ }
325
+ }
326
+ }
327
+ requestRenderPages() {
328
+ const requestPromise = this.scheduleRenderPages();
329
+ if (this.renderPagesRequestPromise === requestPromise)
330
+ return;
331
+ this.renderPagesRequestPromise = requestPromise;
332
+ const generation = this.loadGeneration;
333
+ const connectionEpoch = this.connectionEpoch;
334
+ const url = this.pdfUrl;
335
+ const pdfDocument = this.pdfDocument;
336
+ void requestPromise.catch(async (error) => {
337
+ await this.handleDocumentFailure(error, generation, connectionEpoch, url, pdfDocument);
338
+ }).finally(() => {
339
+ if (this.renderPagesRequestPromise === requestPromise) {
340
+ this.renderPagesRequestPromise = null;
341
+ }
342
+ }).catch(() => { });
343
+ }
344
+ handleDocumentFailure(errorArg, generationArg, connectionEpochArg, urlArg, pdfDocumentArg) {
345
+ if (errorArg instanceof Error
346
+ && ['AbortError', 'AbortException', 'RenderingCancelledException'].includes(errorArg.name)) {
347
+ return Promise.resolve();
348
+ }
349
+ if (!this.isCurrentLoad(generationArg, connectionEpochArg, urlArg)
350
+ || (pdfDocumentArg && pdfDocumentArg !== this.pdfDocument)) {
351
+ return Promise.resolve();
232
352
  }
353
+ if (this.renderFailurePromise)
354
+ return this.renderFailurePromise;
355
+ this.renderAdmissionOpen = false;
356
+ this.loadAbortController?.abort();
357
+ console.error('Failed to load or render PDF thumbnail:', errorArg);
358
+ const failurePromise = (async () => {
359
+ await this.cleanup();
360
+ if (this.isConnected
361
+ && generationArg === this.loadGeneration
362
+ && connectionEpochArg === this.connectionEpoch
363
+ && urlArg === this.pdfUrl) {
364
+ this.error = true;
365
+ this.loading = false;
366
+ }
367
+ })();
368
+ this.renderFailurePromise = failurePromise;
369
+ void failurePromise.finally(() => {
370
+ if (this.renderFailurePromise === failurePromise) {
371
+ this.renderFailurePromise = null;
372
+ }
373
+ }).catch(() => { });
374
+ return failurePromise;
233
375
  }
234
376
  scheduleRenderPages() {
235
- if (!this.pdfDocument) {
377
+ if (!this.renderAdmissionOpen || !this.pdfDocument) {
236
378
  return Promise.resolve();
237
379
  }
238
380
  if (this.renderPagesTask) {
381
+ this.renderGeneration += 1;
239
382
  this.renderPagesQueued = true;
240
- return this.renderPagesTask;
241
- }
242
- this.renderPagesTask = (async () => {
243
383
  try {
244
- await this.performRenderPages();
384
+ this.currentPageRenderTask?.cancel();
245
385
  }
246
- catch (error) {
247
- console.error('Failed to render PDF tile pages:', error);
386
+ catch {
387
+ // The active task remains part of the render queue settlement.
248
388
  }
249
- })().finally(() => {
250
- this.renderPagesTask = null;
251
- if (this.renderPagesQueued) {
389
+ return this.renderPagesTask;
390
+ }
391
+ this.renderGeneration += 1;
392
+ const renderQueueEpoch = ++this.renderQueueEpoch;
393
+ const renderPagesTask = (async () => {
394
+ do {
395
+ if (renderQueueEpoch !== this.renderQueueEpoch)
396
+ return;
252
397
  this.renderPagesQueued = false;
253
- void this.scheduleRenderPages();
398
+ const renderGeneration = this.renderGeneration;
399
+ await this.performRenderPages(renderGeneration);
400
+ } while (renderQueueEpoch === this.renderQueueEpoch
401
+ && this.renderPagesQueued
402
+ && this.renderAdmissionOpen
403
+ && this.pdfDocument);
404
+ })();
405
+ this.renderPagesTask = renderPagesTask;
406
+ void renderPagesTask.finally(() => {
407
+ if (this.renderPagesTask === renderPagesTask) {
408
+ this.renderPagesTask = null;
254
409
  }
255
- });
256
- return this.renderPagesTask;
410
+ }).catch(() => { });
411
+ return renderPagesTask;
257
412
  }
258
- async performRenderPages() {
259
- if (!this.pdfDocument)
413
+ async performRenderPages(renderGenerationArg) {
414
+ const pdfDocument = this.pdfDocument;
415
+ const signal = this.loadAbortController?.signal;
416
+ if (!this.renderAdmissionOpen || !pdfDocument || !signal)
417
+ return;
418
+ const isCurrentRender = () => (this.isConnected
419
+ && this.renderAdmissionOpen
420
+ && !signal.aborted
421
+ && renderGenerationArg === this.renderGeneration
422
+ && pdfDocument === this.pdfDocument);
423
+ await waitForAnimationFrame();
424
+ if (!isCurrentRender())
260
425
  return;
261
- await new Promise(resolve => requestAnimationFrame(resolve));
262
426
  const canvas = this.shadowRoot?.querySelector('.preview-canvas');
263
427
  if (!canvas)
264
- return;
428
+ throw new Error('PDF thumbnail preview canvas is unavailable');
265
429
  this.clearCanvases();
266
430
  this.cacheElements();
267
431
  const { availableWidth, availableHeight } = this.getAvailableSize();
432
+ let pooledCanvas;
433
+ let pooledCanvasRenderSettled = true;
268
434
  try {
269
435
  const pageNum = this.currentPreviewPage;
270
- const page = await this.pdfDocument.getPage(pageNum);
271
- const initialViewport = page.getViewport({ scale: 1 });
272
- const aspectRatio = initialViewport.height / initialViewport.width;
273
- const a4PortraitRatio = 1.414;
274
- const a4LandscapeRatio = 0.707;
275
- const letterPortraitRatio = 1.294;
276
- const letterLandscapeRatio = 0.773;
277
- const tolerance = 0.05;
278
- const isA4Portrait = Math.abs(aspectRatio - a4PortraitRatio) < (a4PortraitRatio * tolerance);
279
- const isA4Landscape = Math.abs(aspectRatio - a4LandscapeRatio) < (a4LandscapeRatio * tolerance);
280
- const isLetterPortrait = Math.abs(aspectRatio - letterPortraitRatio) < (letterPortraitRatio * tolerance);
281
- const isLetterLandscape = Math.abs(aspectRatio - letterLandscapeRatio) < (letterLandscapeRatio * tolerance);
282
- this.isA4Format = isA4Portrait || isA4Landscape || isLetterPortrait || isLetterLandscape;
283
- const adjustedWidth = this.isA4Format ? availableWidth : availableWidth - 24;
284
- const adjustedHeight = this.isA4Format ? availableHeight : availableHeight - 24;
285
- const scaleX = adjustedWidth > 0 ? adjustedWidth / initialViewport.width : 0;
286
- const scaleY = adjustedHeight > 0 ? adjustedHeight / initialViewport.height : 0;
287
- const baseScale = Math.min(scaleX || 0.5, scaleY || scaleX || 0.5);
288
- const renderScale = Math.min(baseScale * 2, 3.0);
289
- if (!Number.isFinite(renderScale) || renderScale <= 0) {
290
- page.cleanup?.();
291
- return;
292
- }
293
- const viewport = page.getViewport({ scale: renderScale });
294
- const pooledCanvas = CanvasPool.acquire(viewport.width, viewport.height);
295
- this.canvases.push(pooledCanvas);
296
- const renderContext = {
297
- canvasContext: pooledCanvas.ctx,
298
- viewport: viewport,
299
- };
300
- await page.render(renderContext).promise;
301
- canvas.width = viewport.width;
302
- canvas.height = viewport.height;
303
- const displayWidth = adjustedWidth;
304
- const displayHeight = (viewport.height / viewport.width) * adjustedWidth;
305
- if (displayHeight > adjustedHeight) {
306
- const altDisplayHeight = adjustedHeight;
307
- const altDisplayWidth = (viewport.width / viewport.height) * adjustedHeight;
308
- canvas.style.width = `${altDisplayWidth}px`;
309
- canvas.style.height = `${altDisplayHeight}px`;
310
- }
311
- else {
312
- canvas.style.width = `${displayWidth}px`;
313
- canvas.style.height = `${displayHeight}px`;
314
- }
315
- const ctx = canvas.getContext('2d');
316
- if (ctx) {
436
+ const page = await raceWithAbort(pdfDocument.getPage(pageNum), signal);
437
+ try {
438
+ if (!isCurrentRender())
439
+ return;
440
+ const initialViewport = page.getViewport({ scale: 1 });
441
+ const aspectRatio = initialViewport.height / initialViewport.width;
442
+ const a4PortraitRatio = 1.414;
443
+ const a4LandscapeRatio = 0.707;
444
+ const letterPortraitRatio = 1.294;
445
+ const letterLandscapeRatio = 0.773;
446
+ const tolerance = 0.05;
447
+ const isA4Portrait = Math.abs(aspectRatio - a4PortraitRatio) < (a4PortraitRatio * tolerance);
448
+ const isA4Landscape = Math.abs(aspectRatio - a4LandscapeRatio) < (a4LandscapeRatio * tolerance);
449
+ const isLetterPortrait = Math.abs(aspectRatio - letterPortraitRatio) < (letterPortraitRatio * tolerance);
450
+ const isLetterLandscape = Math.abs(aspectRatio - letterLandscapeRatio) < (letterLandscapeRatio * tolerance);
451
+ this.isA4Format = isA4Portrait || isA4Landscape || isLetterPortrait || isLetterLandscape;
452
+ const adjustedWidth = this.isA4Format ? availableWidth : availableWidth - 24;
453
+ const adjustedHeight = this.isA4Format ? availableHeight : availableHeight - 24;
454
+ const scaleX = adjustedWidth > 0 ? adjustedWidth / initialViewport.width : 0;
455
+ const scaleY = adjustedHeight > 0 ? adjustedHeight / initialViewport.height : 0;
456
+ const baseScale = Math.min(scaleX || 0.5, scaleY || scaleX || 0.5);
457
+ const renderScale = Math.min(baseScale * 2, 3.0);
458
+ if (!Number.isFinite(renderScale) || renderScale <= 0) {
459
+ throw new Error('PDF thumbnail render scale is invalid');
460
+ }
461
+ const viewport = page.getViewport({ scale: renderScale });
462
+ pooledCanvas = CanvasPool.acquire(viewport.width, viewport.height);
463
+ this.canvases.push(pooledCanvas);
464
+ const renderTask = page.render({
465
+ canvasContext: pooledCanvas.ctx,
466
+ viewport,
467
+ });
468
+ this.currentPageRenderTask = renderTask;
469
+ pooledCanvasRenderSettled = false;
470
+ const trackedRenderPromise = renderTask.promise.finally(() => {
471
+ pooledCanvasRenderSettled = true;
472
+ });
473
+ try {
474
+ await raceWithAbort(trackedRenderPromise, signal);
475
+ }
476
+ finally {
477
+ if (this.currentPageRenderTask === renderTask) {
478
+ this.currentPageRenderTask = null;
479
+ }
480
+ }
481
+ if (!isCurrentRender())
482
+ return;
483
+ canvas.width = viewport.width;
484
+ canvas.height = viewport.height;
485
+ const displayWidth = adjustedWidth;
486
+ const displayHeight = (viewport.height / viewport.width) * adjustedWidth;
487
+ if (displayHeight > adjustedHeight) {
488
+ const altDisplayHeight = adjustedHeight;
489
+ const altDisplayWidth = (viewport.width / viewport.height) * adjustedHeight;
490
+ canvas.style.width = `${altDisplayWidth}px`;
491
+ canvas.style.height = `${altDisplayHeight}px`;
492
+ }
493
+ else {
494
+ canvas.style.width = `${displayWidth}px`;
495
+ canvas.style.height = `${displayHeight}px`;
496
+ }
497
+ const ctx = canvas.getContext('2d');
498
+ if (!ctx)
499
+ throw new Error('PDF thumbnail preview context is unavailable');
317
500
  ctx.imageSmoothingEnabled = true;
318
501
  ctx.imageSmoothingQuality = 'high';
319
502
  ctx.drawImage(pooledCanvas.canvas, 0, 0);
320
503
  }
321
- page.cleanup();
504
+ finally {
505
+ page.cleanup();
506
+ }
322
507
  }
323
508
  catch (error) {
324
- console.error(`Failed to render page ${this.currentPreviewPage}:`, error);
509
+ if (error instanceof Error
510
+ && ['AbortError', 'AbortException', 'RenderingCancelledException'].includes(error.name)) {
511
+ return;
512
+ }
513
+ throw error;
514
+ }
515
+ finally {
516
+ if (pooledCanvas && pooledCanvasRenderSettled) {
517
+ const canvasIndex = this.canvases.indexOf(pooledCanvas);
518
+ if (canvasIndex >= 0)
519
+ this.canvases.splice(canvasIndex, 1);
520
+ CanvasPool.release(pooledCanvas);
521
+ }
325
522
  }
326
523
  }
327
524
  clearCanvases() {
@@ -330,13 +527,86 @@ let DeesThumbnailPdf = (() => {
330
527
  }
331
528
  this.canvases = [];
332
529
  }
530
+ discardCanvases() {
531
+ for (const pooledCanvas of this.canvases) {
532
+ CanvasPool.discard(pooledCanvas);
533
+ }
534
+ this.canvases = [];
535
+ }
333
536
  cleanup() {
334
- this.clearCanvases();
335
- if (this.pdfDocument) {
336
- PdfManager.releaseDocument(this.loadedPdfUrl ?? this.pdfUrl);
337
- this.pdfDocument = null;
537
+ if (this.cleanupPromise) {
538
+ return this.cleanupPromise;
338
539
  }
540
+ const cleanupPromise = this.performCleanup();
541
+ this.cleanupPromise = cleanupPromise;
542
+ void cleanupPromise.finally(() => {
543
+ if (this.cleanupPromise === cleanupPromise) {
544
+ this.cleanupPromise = null;
545
+ }
546
+ }).catch(() => { });
547
+ return cleanupPromise;
548
+ }
549
+ async performCleanup() {
550
+ this.renderAdmissionOpen = false;
551
+ this.renderGeneration += 1;
552
+ this.renderQueueEpoch += 1;
553
+ this.resizeObserver?.disconnect();
554
+ this.resizeObserver = undefined;
555
+ const abortController = this.loadAbortController;
556
+ this.loadAbortController = null;
557
+ abortController?.abort();
558
+ const loadOperation = this.loadOperation;
559
+ const pdfLoadPromise = this.pdfLoadPromise;
560
+ const renderPagesTask = this.renderPagesTask;
561
+ const currentPageRenderTask = this.currentPageRenderTask;
562
+ const documentUsePipelines = [...this.documentUsePipelines];
339
563
  this.renderPagesQueued = false;
564
+ try {
565
+ currentPageRenderTask?.cancel();
566
+ }
567
+ catch {
568
+ // The tracked render promise still participates in settlement below.
569
+ }
570
+ const pdfDocument = this.pdfDocument;
571
+ this.pdfDocument = null;
572
+ const releasePromise = pdfDocument
573
+ ? PdfManager.releaseDocument(pdfDocument).catch((error) => {
574
+ console.error('Failed to release PDF tile document:', error);
575
+ })
576
+ : null;
577
+ const pipelinesSettled = await settlePromisesWithin([
578
+ ...(pdfLoadPromise ? [pdfLoadPromise] : []),
579
+ ...documentUsePipelines,
580
+ ...(renderPagesTask ? [renderPagesTask] : []),
581
+ ...(currentPageRenderTask ? [currentPageRenderTask.promise] : []),
582
+ ...(releasePromise ? [releasePromise] : []),
583
+ ], pipelineSettlementGraceMs);
584
+ if (this.pdfLoadPromise === pdfLoadPromise) {
585
+ this.pdfLoadPromise = null;
586
+ }
587
+ if (this.loadOperation === loadOperation) {
588
+ this.loadOperation = null;
589
+ }
590
+ if (this.renderPagesTask === renderPagesTask) {
591
+ this.renderPagesTask = null;
592
+ }
593
+ if (this.currentPageRenderTask === currentPageRenderTask) {
594
+ this.currentPageRenderTask = null;
595
+ }
596
+ this.documentUsePipelines.clear();
597
+ if (pipelinesSettled) {
598
+ this.clearCanvases();
599
+ }
600
+ else {
601
+ this.discardCanvases();
602
+ }
603
+ const previewCanvas = this.shadowRoot?.querySelector('.preview-canvas');
604
+ if (previewCanvas) {
605
+ previewCanvas.width = 0;
606
+ previewCanvas.height = 0;
607
+ previewCanvas.style.removeProperty('width');
608
+ previewCanvas.style.removeProperty('height');
609
+ }
340
610
  this.pageCount = 0;
341
611
  this.currentPreviewPage = 1;
342
612
  this.isHovering = false;
@@ -346,24 +616,17 @@ let DeesThumbnailPdf = (() => {
346
616
  this.rendered = false;
347
617
  this.loading = false;
348
618
  this.error = false;
619
+ this.fileSize = 0;
349
620
  }
350
621
  async updated(changedProperties) {
351
622
  super.updated(changedProperties);
352
- if (changedProperties.has('pdfUrl') && this.pdfUrl) {
353
- const previousUrl = changedProperties.get('pdfUrl');
354
- if (previousUrl) {
355
- PdfManager.releaseDocument(previousUrl);
356
- }
357
- this.cleanup();
358
- this.rendered = false;
359
- this.currentPreviewPage = 1;
360
- const rect = this.getBoundingClientRect();
361
- if (rect.top < window.innerHeight && rect.bottom > 0) {
362
- this.loadAndRenderPreview();
363
- }
623
+ if (changedProperties.has('pdfUrl') && this.isConnected) {
624
+ await this.schedulePdfLoad(this.connectionEpoch);
364
625
  }
365
- if (changedProperties.has('currentPreviewPage') && this.rendered) {
366
- await this.scheduleRenderPages();
626
+ if (changedProperties.has('currentPreviewPage')
627
+ && this.renderAdmissionOpen
628
+ && this.rendered) {
629
+ this.requestRenderPages();
367
630
  }
368
631
  }
369
632
  getContextMenuItems() {
@@ -424,7 +687,7 @@ let DeesThumbnailPdf = (() => {
424
687
  return;
425
688
  this.resizeObserver = new ResizeObserver(() => {
426
689
  if (this.rendered && this.pdfDocument && !this.loading) {
427
- void this.scheduleRenderPages();
690
+ this.requestRenderPages();
428
691
  }
429
692
  });
430
693
  this.resizeObserver.observe(this);
@@ -448,4 +711,4 @@ let DeesThumbnailPdf = (() => {
448
711
  return DeesThumbnailPdf = _classThis;
449
712
  })();
450
713
  export { DeesThumbnailPdf };
451
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbWVkaWEvZGVlcy10aHVtYm5haWwtcGRmL2NvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBdUMsTUFBTSw2QkFBNkIsQ0FBQztBQUN4SCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNsRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBcUIsTUFBTSxrQ0FBa0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLElBQUksSUFBSSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7SUFTaEMsZ0JBQWdCOzRCQUQ1QixhQUFhLENBQUMsb0JBQW9CLENBQUM7Ozs7c0JBQ0UsaUJBQWlCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2dDQUF6QixTQUFRLFdBQWlCOzs7O2tDQUtwRCxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7OENBRzFCLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztxQ0FHMUIsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO29DQUcxQixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7c0NBRzNCLFFB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
714
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbWVkaWEvZGVlcy10aHVtYm5haWwtcGRmL2NvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBdUMsTUFBTSw2QkFBNkIsQ0FBQztBQUV4SCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNsRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBcUIsTUFBTSxrQ0FBa0MsQ0FBQztBQUNqRixPQUFPLEVBQ0wsUUFBUSxFQUNSLGNBQWMsRUFDZCxhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLHFCQUFxQixHQUN0QixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLElBQUksSUFBSSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFhN0MsTUFBTSx5QkFBeUIsR0FBRyxLQUFLLENBQUM7SUFHM0IsZ0JBQWdCOzRCQUQ1QixhQUFhLENBQUMsb0JBQW9CLENBQUM7Ozs7c0JBQ0UsaUJBQWlCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2dDQUF6QixTQUFRLFdBQWlCOzs7O2tDQUtwRCxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7OENBRzFCLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztxQ0FHMUIsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFD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