@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
@@ -33,11 +33,14 @@ var __runInitializers = (this && this.__runInitializers) || function (thisArg, i
33
33
  return useValue ? value : void 0;
34
34
  };
35
35
  import { DeesElement, property, html, customElement, directives } from '@design.estate/dees-element';
36
+ import { TextLayer, } from 'pdfjs-dist';
36
37
  import { PdfManager } from '../dees-pdf-shared/PdfManager.js';
38
+ import { raceWithAbort, settlePromisesWithin, waitForAnimationFrame, } from '../dees-pdf-shared/utils.js';
37
39
  import { viewerStyles } from './styles.js';
38
40
  import { demo as demoFunc } from './demo.js';
39
41
  import '../../00group-utility/dees-icon/dees-icon.js';
40
42
  import '../../00group-layout/dees-tile/dees-tile.js';
43
+ const pipelineSettlementGraceMs = 2_500;
41
44
  let DeesPdfViewer = (() => {
42
45
  let _classDecorators = [customElement('dees-pdf-viewer')];
43
46
  let _classDescriptor;
@@ -167,19 +170,38 @@ let DeesPdfViewer = (() => {
167
170
  #pdfFileSize_accessor_storage = (__runInitializers(this, _pageData_extraInitializers), __runInitializers(this, _pdfFileSize_initializers, 0));
168
171
  get pdfFileSize() { return this.#pdfFileSize_accessor_storage; }
169
172
  set pdfFileSize(value) { this.#pdfFileSize_accessor_storage = value; }
170
- pdfDocument = __runInitializers(this, _pdfFileSize_extraInitializers);
173
+ pdfDocument = (__runInitializers(this, _pdfFileSize_extraInitializers), null);
174
+ pdfLoadPromise = null;
175
+ loadOperation = null;
176
+ loadGeneration = 0;
177
+ connectionEpoch = 0;
178
+ cleanupPromise = null;
179
+ renderAdmissionOpen = false;
180
+ renderGeneration = 0;
171
181
  renderState = 'idle';
172
182
  renderAbortController = null;
173
183
  pageRendering = false;
174
184
  pageNumPending = null;
175
185
  currentRenderTask = null;
176
186
  currentRenderPromise = null;
177
- thumbnailRenderTasks = [];
187
+ thumbnailRenderTasks = new Set();
188
+ thumbnailRenderPromise = null;
189
+ thumbnailRenderGeneration = 0;
190
+ thumbnailRenderQueued = false;
191
+ thumbnailRenderQueueEpoch = 0;
178
192
  pageRenderTasks = new Map();
193
+ pageRenderPipelines = new Set();
194
+ documentUsePipelines = new Set();
195
+ rerenderPromise = null;
196
+ rerenderQueued = false;
197
+ rerenderQueueEpoch = 0;
198
+ rerenderRecoveryTimeout;
179
199
  textLayerRenderTasks = new Map();
200
+ textSelectionCleanupFunctions = new Map();
180
201
  canvas;
181
202
  ctx;
182
203
  viewerMain = null;
204
+ wheelEventTarget = null;
183
205
  resizeObserver;
184
206
  intersectionObserver;
185
207
  scrollThrottleTimeout;
@@ -363,51 +385,75 @@ let DeesPdfViewer = (() => {
363
385
  `;
364
386
  }
365
387
  async connectedCallback() {
388
+ const connectionEpoch = ++this.connectionEpoch;
366
389
  await super.connectedCallback();
367
390
  await this.updateComplete;
391
+ if (!this.isConnected || connectionEpoch !== this.connectionEpoch)
392
+ return;
368
393
  this.ensureViewerRefs();
369
- // Generate a unique document ID for this connection
370
- if (this.pdfUrl) {
371
- this.documentId = `${this.pdfUrl}-${Date.now()}-${Math.random()}`;
372
- await this.loadPdf();
394
+ const operationKey = `${connectionEpoch}:${this.pdfUrl}`;
395
+ if (this.loadOperation?.key === operationKey) {
396
+ await this.loadOperation.promise;
397
+ }
398
+ else if (connectionEpoch > 1 || !this.pdfDocument) {
399
+ await this.schedulePdfLoad(connectionEpoch);
373
400
  }
374
401
  }
375
402
  async disconnectedCallback() {
403
+ this.connectionEpoch += 1;
404
+ this.loadGeneration += 1;
405
+ this.renderAdmissionOpen = false;
406
+ this.renderAbortController?.abort();
407
+ const cleanupPromise = this.cleanupDocument();
376
408
  await super.disconnectedCallback();
377
- this.resizeObserver?.disconnect();
378
- this.resizeObserver = undefined;
379
- this.intersectionObserver?.disconnect();
380
- this.intersectionObserver = undefined;
381
- // Clear scroll timeout
382
- if (this.scrollThrottleTimeout) {
383
- clearTimeout(this.scrollThrottleTimeout);
384
- this.scrollThrottleTimeout = undefined;
385
- }
386
- // Mark as disposed and clean up
409
+ await cleanupPromise;
387
410
  this.renderState = 'disposed';
388
- await this.cleanupDocument();
389
- // Clear all references
390
411
  this.canvas = undefined;
391
412
  this.ctx = undefined;
392
413
  }
393
414
  async updated(changedProperties) {
394
415
  super.updated(changedProperties);
395
- if (changedProperties.has('pdfUrl') && this.pdfUrl) {
396
- const previousUrl = changedProperties.get('pdfUrl');
397
- if (previousUrl) {
398
- PdfManager.releaseDocument(previousUrl);
416
+ if (changedProperties.has('pdfUrl') && this.isConnected) {
417
+ await this.schedulePdfLoad(this.connectionEpoch);
418
+ }
419
+ if (changedProperties.has('showSidebar') && !this.showSidebar) {
420
+ this.thumbnailRenderGeneration += 1;
421
+ this.thumbnailRenderQueued = false;
422
+ for (const task of this.thumbnailRenderTasks) {
423
+ try {
424
+ task.cancel();
425
+ }
426
+ catch {
427
+ // The scheduler still owns each task promise until it settles.
428
+ }
399
429
  }
400
- // Generate new document ID for new URL
401
- this.documentId = `${this.pdfUrl}-${Date.now()}-${Math.random()}`;
402
- await this.loadPdf();
403
430
  }
404
431
  // Re-render thumbnails when sidebar becomes visible and document is loaded
405
- if (changedProperties.has('showSidebar') && this.showSidebar && this.pdfDocument) {
406
- // Use requestAnimationFrame to ensure DOM is ready
407
- await new Promise(resolve => requestAnimationFrame(resolve));
432
+ if (changedProperties.has('showSidebar')
433
+ && this.showSidebar
434
+ && this.renderAdmissionOpen
435
+ && this.pdfDocument) {
436
+ const connectionEpoch = this.connectionEpoch;
437
+ const loadGeneration = this.loadGeneration;
438
+ const pdfDocument = this.pdfDocument;
439
+ await waitForAnimationFrame();
440
+ if (!this.isConnected
441
+ || connectionEpoch !== this.connectionEpoch
442
+ || loadGeneration !== this.loadGeneration
443
+ || pdfDocument !== this.pdfDocument
444
+ || !this.renderAdmissionOpen
445
+ || !this.showSidebar)
446
+ return;
408
447
  // Force re-render of thumbnails by resetting their rendered state
409
448
  this.thumbnailData.forEach(thumb => thumb.rendered = false);
410
449
  await this.renderThumbnails();
450
+ if (!this.isConnected
451
+ || connectionEpoch !== this.connectionEpoch
452
+ || loadGeneration !== this.loadGeneration
453
+ || pdfDocument !== this.pdfDocument
454
+ || !this.renderAdmissionOpen
455
+ || !this.showSidebar)
456
+ return;
411
457
  // Re-setup intersection observer for lazy loading of pages
412
458
  this.setupIntersectionObserver();
413
459
  // Scroll to active thumbnail after rendering
@@ -421,74 +467,144 @@ let DeesPdfViewer = (() => {
421
467
  return `${(bytes / 1024).toFixed(1)} KB`;
422
468
  return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
423
469
  }
424
- async loadPdf() {
470
+ schedulePdfLoad(connectionEpochArg, renderRecoveryStateArg) {
471
+ const url = this.pdfUrl;
472
+ const baseKey = `${connectionEpochArg}:${url}`;
473
+ if (!renderRecoveryStateArg && this.loadOperation?.key === baseKey) {
474
+ return this.loadOperation.promise;
475
+ }
476
+ const generation = ++this.loadGeneration;
477
+ const key = renderRecoveryStateArg
478
+ ? `${baseKey}:render-recovery:${generation}`
479
+ : baseKey;
480
+ const operation = {
481
+ key,
482
+ promise: Promise.resolve(),
483
+ };
484
+ operation.promise = this.performPdfLoad(generation, connectionEpochArg, url, renderRecoveryStateArg)
485
+ .finally(() => {
486
+ if (this.loadOperation === operation) {
487
+ this.loadOperation = null;
488
+ }
489
+ });
490
+ this.loadOperation = operation;
491
+ return operation.promise;
492
+ }
493
+ isCurrentLoad(generationArg, connectionEpochArg, urlArg) {
494
+ return this.isConnected
495
+ && generationArg === this.loadGeneration
496
+ && connectionEpochArg === this.connectionEpoch
497
+ && urlArg === this.pdfUrl;
498
+ }
499
+ async performPdfLoad(generationArg, connectionEpochArg, urlArg, renderRecoveryStateArg) {
500
+ await this.cleanupDocument();
501
+ if (!this.isCurrentLoad(generationArg, connectionEpochArg, urlArg)) {
502
+ return;
503
+ }
504
+ if (!urlArg) {
505
+ this.loading = false;
506
+ this.renderState = 'idle';
507
+ return;
508
+ }
425
509
  this.loading = true;
426
510
  this.renderState = 'loading';
511
+ const abortController = new AbortController();
512
+ this.renderAbortController = abortController;
513
+ const { signal } = abortController;
427
514
  try {
428
- await this.cleanupDocument();
429
- // Create new abort controller for this load operation
430
- this.renderAbortController = new AbortController();
431
- const signal = this.renderAbortController.signal;
432
- this.pdfDocument = await PdfManager.loadDocument(this.pdfUrl);
433
- if (signal.aborted)
434
- return;
435
- this.totalPages = this.pdfDocument.numPages;
436
- this.currentPage = this.initialPage;
437
- this.resolveInitialViewportMode();
438
- // Get file size
515
+ const pdfLoadPromise = PdfManager.loadDocument(urlArg, signal);
516
+ this.pdfLoadPromise = pdfLoadPromise;
517
+ let pdfDocument;
439
518
  try {
440
- const data = await this.pdfDocument.getData();
441
- this.pdfFileSize = data.length;
519
+ pdfDocument = await pdfLoadPromise;
442
520
  }
443
- catch (e) {
444
- this.pdfFileSize = 0;
521
+ finally {
522
+ if (this.pdfLoadPromise === pdfLoadPromise) {
523
+ this.pdfLoadPromise = null;
524
+ }
445
525
  }
446
- // Initialize thumbnail and page data arrays
447
- this.thumbnailData = Array.from({ length: this.totalPages }, (_, i) => ({
448
- page: i + 1,
449
- rendered: false
450
- }));
451
- this.pageData = Array.from({ length: this.totalPages }, (_, i) => ({
452
- page: i + 1,
453
- rendered: false,
454
- rendering: false,
455
- textLayerRendered: false,
456
- }));
457
- // Set loading to false to render the pages
458
- this.loading = false;
459
- await this.updateComplete;
460
- this.ensureViewerRefs();
461
- this.setupIntersectionObserver();
462
- // Wait for next frame to ensure DOM is ready
463
- await new Promise(resolve => requestAnimationFrame(resolve));
464
- if (signal.aborted)
465
- return;
466
- this.renderState = 'rendering-main';
467
- // Render initial visible pages
468
- await this.renderVisiblePages();
469
- if (signal.aborted)
526
+ if (!this.isCurrentLoad(generationArg, connectionEpochArg, urlArg) || signal.aborted) {
527
+ await PdfManager.releaseDocument(pdfDocument);
470
528
  return;
471
- // Scroll to initial page
472
- if (this.initialPage > 1) {
473
- await this.scrollToPage(this.initialPage, false);
474
529
  }
475
- if (this.showSidebar) {
476
- // Ensure sidebar is in DOM after loading = false
530
+ this.pdfDocument = pdfDocument;
531
+ this.renderAdmissionOpen = true;
532
+ this.documentId = `${urlArg}-${generationArg}`;
533
+ const documentUsePipeline = (async () => {
534
+ this.totalPages = pdfDocument.numPages;
535
+ if (renderRecoveryStateArg) {
536
+ this.currentPage = Math.min(Math.max(renderRecoveryStateArg.currentPage, 1), this.totalPages);
537
+ this.currentZoom = renderRecoveryStateArg.currentZoom;
538
+ this.viewportMode = renderRecoveryStateArg.viewportMode;
539
+ }
540
+ else {
541
+ this.currentPage = this.initialPage;
542
+ this.resolveInitialViewportMode();
543
+ }
544
+ try {
545
+ const data = await raceWithAbort(pdfDocument.getData(), signal);
546
+ if (!this.isCurrentLoad(generationArg, connectionEpochArg, urlArg))
547
+ return;
548
+ this.pdfFileSize = data.length;
549
+ }
550
+ catch {
551
+ if (!this.isCurrentLoad(generationArg, connectionEpochArg, urlArg))
552
+ return;
553
+ this.pdfFileSize = 0;
554
+ }
555
+ this.thumbnailData = Array.from({ length: this.totalPages }, (_, i) => ({
556
+ page: i + 1,
557
+ rendered: false
558
+ }));
559
+ this.pageData = Array.from({ length: this.totalPages }, (_, i) => ({
560
+ page: i + 1,
561
+ rendered: false,
562
+ rendering: false,
563
+ textLayerRendered: false,
564
+ }));
565
+ this.loading = false;
477
566
  await this.updateComplete;
478
- // Wait for next frame to ensure DOM is fully ready
479
- await new Promise(resolve => requestAnimationFrame(resolve));
480
- if (signal.aborted)
567
+ if (!this.isCurrentLoad(generationArg, connectionEpochArg, urlArg))
568
+ return;
569
+ this.ensureViewerRefs();
570
+ this.setupIntersectionObserver();
571
+ await waitForAnimationFrame(signal);
572
+ if (!this.isCurrentLoad(generationArg, connectionEpochArg, urlArg) || signal.aborted)
481
573
  return;
482
- await this.renderThumbnails();
483
- if (signal.aborted)
574
+ this.renderState = 'rendering-main';
575
+ await this.renderVisiblePages();
576
+ if (!this.isCurrentLoad(generationArg, connectionEpochArg, urlArg) || signal.aborted)
484
577
  return;
578
+ if (this.currentPage > 1) {
579
+ await this.scrollToPage(this.currentPage, false);
580
+ }
581
+ if (this.showSidebar) {
582
+ await this.updateComplete;
583
+ await waitForAnimationFrame(signal);
584
+ if (!this.isCurrentLoad(generationArg, connectionEpochArg, urlArg) || signal.aborted)
585
+ return;
586
+ await this.renderThumbnails();
587
+ if (!this.isCurrentLoad(generationArg, connectionEpochArg, urlArg) || signal.aborted)
588
+ return;
589
+ }
590
+ if (this.isCurrentLoad(generationArg, connectionEpochArg, urlArg)) {
591
+ this.renderState = 'rendered';
592
+ }
593
+ })();
594
+ this.documentUsePipelines.add(documentUsePipeline);
595
+ try {
596
+ await documentUsePipeline;
597
+ }
598
+ finally {
599
+ this.documentUsePipelines.delete(documentUsePipeline);
485
600
  }
486
- this.renderState = 'rendered';
487
601
  }
488
602
  catch (error) {
489
- console.error('Error loading PDF:', error);
490
- this.loading = false;
491
- this.renderState = 'error';
603
+ if (this.isCurrentLoad(generationArg, connectionEpochArg, urlArg) && !signal.aborted) {
604
+ console.error('Error loading PDF:', error);
605
+ this.loading = false;
606
+ this.renderState = 'error';
607
+ }
492
608
  }
493
609
  }
494
610
  setupIntersectionObserver() {
@@ -536,82 +652,141 @@ let DeesPdfViewer = (() => {
536
652
  }
537
653
  }
538
654
  }
539
- async renderPageIfNeeded(pageNum) {
655
+ renderPageIfNeeded(pageNum) {
540
656
  const pageInfo = this.pageData.find(p => p.page === pageNum);
541
- if (!pageInfo || pageInfo.rendered || pageInfo.rendering)
542
- return;
657
+ const pdfDocument = this.pdfDocument;
658
+ const signal = this.renderAbortController?.signal;
659
+ if (!this.renderAdmissionOpen
660
+ || !pdfDocument
661
+ || !signal
662
+ || !pageInfo
663
+ || pageInfo.rendered
664
+ || pageInfo.rendering)
665
+ return Promise.resolve();
666
+ const renderGeneration = this.renderGeneration;
667
+ const isCurrentRender = () => (this.isConnected
668
+ && this.renderAdmissionOpen
669
+ && !signal.aborted
670
+ && renderGeneration === this.renderGeneration
671
+ && pdfDocument === this.pdfDocument);
543
672
  pageInfo.rendering = true;
544
- try {
545
- const canvas = this.shadowRoot?.querySelector(`.page-canvas[data-page="${pageNum}"]`);
546
- if (!canvas) {
673
+ const renderPipeline = (async () => {
674
+ let page;
675
+ let renderTask;
676
+ try {
677
+ const canvas = this.shadowRoot?.querySelector(`.page-canvas[data-page="${pageNum}"]`);
678
+ if (!canvas) {
679
+ pageInfo.rendering = false;
680
+ return;
681
+ }
682
+ page = await raceWithAbort(pdfDocument.getPage(pageNum), signal);
683
+ if (!isCurrentRender())
684
+ return;
685
+ const viewport = this.computeViewport(page);
686
+ // Set canvas dimensions with device pixel ratio for sharp rendering
687
+ const dpr = window.devicePixelRatio || 1;
688
+ canvas.width = Math.floor(viewport.width * dpr);
689
+ canvas.height = Math.floor(viewport.height * dpr);
690
+ canvas.style.width = `${viewport.width}px`;
691
+ canvas.style.height = `${viewport.height}px`;
692
+ const ctx = canvas.getContext('2d');
693
+ if (!ctx) {
694
+ pageInfo.rendering = false;
695
+ return;
696
+ }
697
+ // Scale context for high-DPI displays
698
+ ctx.scale(dpr, dpr);
699
+ const renderContext = {
700
+ canvasContext: ctx,
701
+ viewport: viewport,
702
+ };
703
+ renderTask = page.render(renderContext);
704
+ this.pageRenderTasks.set(pageNum, renderTask);
705
+ await raceWithAbort(renderTask.promise, signal);
706
+ if (!isCurrentRender())
707
+ return;
708
+ pageInfo.rendered = true;
547
709
  pageInfo.rendering = false;
548
- return;
710
+ if (this.pageRenderTasks.get(pageNum) === renderTask) {
711
+ this.pageRenderTasks.delete(pageNum);
712
+ }
713
+ // Render text layer for selection
714
+ await this.renderTextLayer(pageNum, renderGeneration, pdfDocument, signal);
715
+ if (!isCurrentRender())
716
+ return;
717
+ // Update page data to reflect rendered state
718
+ this.requestUpdate('pageData');
549
719
  }
550
- const page = await this.pdfDocument.getPage(pageNum);
551
- const viewport = this.computeViewport(page);
552
- // Set canvas dimensions with device pixel ratio for sharp rendering
553
- const dpr = window.devicePixelRatio || 1;
554
- canvas.width = Math.floor(viewport.width * dpr);
555
- canvas.height = Math.floor(viewport.height * dpr);
556
- canvas.style.width = `${viewport.width}px`;
557
- canvas.style.height = `${viewport.height}px`;
558
- const ctx = canvas.getContext('2d');
559
- if (!ctx) {
560
- page.cleanup?.();
561
- pageInfo.rendering = false;
562
- return;
720
+ catch (error) {
721
+ if (!(error instanceof Error)
722
+ || !['AbortError', 'AbortException', 'RenderingCancelledException'].includes(error.name)) {
723
+ console.error(`Error rendering page ${pageNum}:`, error);
724
+ }
725
+ if (renderGeneration === this.renderGeneration) {
726
+ pageInfo.rendering = false;
727
+ }
563
728
  }
564
- // Scale context for high-DPI displays
565
- ctx.scale(dpr, dpr);
566
- const renderContext = {
567
- canvasContext: ctx,
568
- viewport: viewport,
569
- };
570
- const renderTask = page.render(renderContext);
571
- this.pageRenderTasks.set(pageNum, renderTask);
572
- await renderTask.promise;
573
- page.cleanup?.();
574
- pageInfo.rendered = true;
575
- pageInfo.rendering = false;
576
- this.pageRenderTasks.delete(pageNum);
577
- // Render text layer for selection
578
- await this.renderTextLayer(pageNum);
579
- // Update page data to reflect rendered state
580
- this.requestUpdate('pageData');
581
- }
582
- catch (error) {
583
- if (error?.name !== 'RenderingCancelledException') {
584
- console.error(`Error rendering page ${pageNum}:`, error);
729
+ finally {
730
+ if (renderTask && this.pageRenderTasks.get(pageNum) === renderTask) {
731
+ this.pageRenderTasks.delete(pageNum);
732
+ }
733
+ page?.cleanup();
585
734
  }
586
- pageInfo.rendering = false;
587
- this.pageRenderTasks.delete(pageNum);
588
- }
735
+ })();
736
+ this.pageRenderPipelines.add(renderPipeline);
737
+ void renderPipeline.finally(() => {
738
+ this.pageRenderPipelines.delete(renderPipeline);
739
+ }).catch(() => { });
740
+ return renderPipeline;
589
741
  }
590
- async renderTextLayer(pageNum) {
742
+ async renderTextLayer(pageNum, renderGenerationArg, pdfDocumentArg, signalArg) {
591
743
  const pageInfo = this.pageData.find(p => p.page === pageNum);
592
- if (!pageInfo || pageInfo.textLayerRendered)
744
+ if (renderGenerationArg !== this.renderGeneration
745
+ || signalArg.aborted
746
+ || pdfDocumentArg !== this.pdfDocument
747
+ || !pageInfo
748
+ || pageInfo.textLayerRendered)
593
749
  return;
750
+ let page;
751
+ let renderTask;
594
752
  try {
595
753
  const textLayerDiv = this.shadowRoot?.querySelector(`.text-layer[data-page="${pageNum}"]`);
596
754
  if (!textLayerDiv)
597
755
  return;
756
+ this.textSelectionCleanupFunctions.get(pageNum)?.();
757
+ this.textSelectionCleanupFunctions.delete(pageNum);
598
758
  textLayerDiv.innerHTML = '';
599
- const page = await this.pdfDocument.getPage(pageNum);
600
- const textContent = await page.getTextContent();
759
+ page = await raceWithAbort(pdfDocumentArg.getPage(pageNum), signalArg);
760
+ if (renderGenerationArg !== this.renderGeneration
761
+ || signalArg.aborted
762
+ || pdfDocumentArg !== this.pdfDocument)
763
+ return;
764
+ const textContent = await raceWithAbort(page.getTextContent(), signalArg);
765
+ if (renderGenerationArg !== this.renderGeneration
766
+ || signalArg.aborted
767
+ || pdfDocumentArg !== this.pdfDocument)
768
+ return;
601
769
  const viewport = this.computeViewport(page);
602
- // @ts-ignore - Dynamic import of pdfjs
603
- const pdfjs = await import('https://cdn.jsdelivr.net/npm/pdfjs-dist@4.0.379/+esm');
604
770
  textLayerDiv.style.width = `${viewport.width}px`;
605
771
  textLayerDiv.style.height = `${viewport.height}px`;
606
772
  // Set the scale factor CSS variable - required by PDF.js text layer
607
773
  textLayerDiv.style.setProperty('--scale-factor', String(viewport.scale));
608
- const textLayerRenderTask = pdfjs.renderTextLayer({
774
+ const textLayer = new TextLayer({
609
775
  textContentSource: textContent,
610
776
  container: textLayerDiv,
611
777
  viewport: viewport,
612
778
  });
613
- this.textLayerRenderTasks.set(pageNum, textLayerRenderTask);
614
- await textLayerRenderTask.promise;
779
+ const textLayerRenderPromise = textLayer.render();
780
+ renderTask = {
781
+ textLayer,
782
+ promise: textLayerRenderPromise,
783
+ };
784
+ this.textLayerRenderTasks.set(pageNum, renderTask);
785
+ await raceWithAbort(textLayerRenderPromise, signalArg);
786
+ if (renderGenerationArg !== this.renderGeneration
787
+ || signalArg.aborted
788
+ || pdfDocumentArg !== this.pdfDocument)
789
+ return;
615
790
  // Add endOfContent for selection boundary
616
791
  const endOfContent = document.createElement('div');
617
792
  endOfContent.className = 'endOfContent';
@@ -666,7 +841,7 @@ let DeesPdfViewer = (() => {
666
841
  }
667
842
  }
668
843
  };
669
- textLayerDiv.addEventListener('mousedown', (e) => {
844
+ const handleMouseDown = (e) => {
670
845
  if (e.button !== 0)
671
846
  return;
672
847
  const pos = getTextPositionFromPoint(e.clientX, e.clientY);
@@ -684,16 +859,26 @@ let DeesPdfViewer = (() => {
684
859
  document.addEventListener('mousemove', handleMouseMove);
685
860
  document.addEventListener('mouseup', handleMouseUp);
686
861
  }
862
+ };
863
+ textLayerDiv.addEventListener('mousedown', handleMouseDown);
864
+ this.textSelectionCleanupFunctions.set(pageNum, () => {
865
+ textLayerDiv.removeEventListener('mousedown', handleMouseDown);
866
+ document.removeEventListener('mouseup', handleMouseUp);
867
+ document.removeEventListener('mousemove', handleMouseMove);
687
868
  });
688
869
  pageInfo.textLayerRendered = true;
689
- page.cleanup?.();
690
- this.textLayerRenderTasks.delete(pageNum);
691
870
  }
692
871
  catch (error) {
693
- if (error?.name !== 'RenderingCancelledException') {
872
+ if (!(error instanceof Error)
873
+ || !['AbortError', 'AbortException', 'RenderingCancelledException'].includes(error.name)) {
694
874
  console.error(`Error rendering text layer for page ${pageNum}:`, error);
695
875
  }
696
- this.textLayerRenderTasks.delete(pageNum);
876
+ }
877
+ finally {
878
+ if (renderTask && this.textLayerRenderTasks.get(pageNum) === renderTask) {
879
+ this.textLayerRenderTasks.delete(pageNum);
880
+ }
881
+ page?.cleanup();
697
882
  }
698
883
  }
699
884
  handleScroll = () => {
@@ -787,20 +972,63 @@ let DeesPdfViewer = (() => {
787
972
  await this.renderPageIfNeeded(pageNum);
788
973
  }
789
974
  }
790
- async renderThumbnails() {
791
- // Check if document is loaded
792
- if (!this.pdfDocument) {
975
+ renderThumbnails() {
976
+ if (!this.renderAdmissionOpen || !this.showSidebar || !this.pdfDocument) {
977
+ return Promise.resolve();
978
+ }
979
+ if (this.thumbnailRenderPromise) {
980
+ this.thumbnailRenderGeneration += 1;
981
+ this.thumbnailRenderQueued = true;
982
+ for (const task of this.thumbnailRenderTasks) {
983
+ try {
984
+ task.cancel();
985
+ }
986
+ catch {
987
+ // The active queue iteration still awaits the task promise.
988
+ }
989
+ }
990
+ return this.thumbnailRenderPromise;
991
+ }
992
+ this.thumbnailRenderGeneration += 1;
993
+ const thumbnailRenderQueueEpoch = ++this.thumbnailRenderQueueEpoch;
994
+ const renderPromise = (async () => {
995
+ do {
996
+ if (thumbnailRenderQueueEpoch !== this.thumbnailRenderQueueEpoch)
997
+ return;
998
+ this.thumbnailRenderQueued = false;
999
+ const renderGeneration = this.thumbnailRenderGeneration;
1000
+ await this.performRenderThumbnails(renderGeneration);
1001
+ } while (thumbnailRenderQueueEpoch === this.thumbnailRenderQueueEpoch
1002
+ && this.thumbnailRenderQueued
1003
+ && this.renderAdmissionOpen
1004
+ && this.showSidebar
1005
+ && this.pdfDocument);
1006
+ })();
1007
+ this.thumbnailRenderPromise = renderPromise;
1008
+ void renderPromise.finally(() => {
1009
+ if (this.thumbnailRenderPromise === renderPromise) {
1010
+ this.thumbnailRenderPromise = null;
1011
+ }
1012
+ }).catch(() => { });
1013
+ return renderPromise;
1014
+ }
1015
+ async performRenderThumbnails(renderGenerationArg) {
1016
+ const pdfDocument = this.pdfDocument;
1017
+ if (!this.renderAdmissionOpen || !this.showSidebar || !pdfDocument) {
793
1018
  return;
794
1019
  }
1020
+ const isCurrentRender = () => (this.isConnected
1021
+ && this.renderAdmissionOpen
1022
+ && this.showSidebar
1023
+ && renderGenerationArg === this.thumbnailRenderGeneration
1024
+ && pdfDocument === this.pdfDocument);
795
1025
  // Check if already rendered
796
1026
  if (this.thumbnailData.length > 0 && this.thumbnailData.every(t => t.rendered)) {
797
1027
  return;
798
1028
  }
799
- // Check abort signal
800
- if (this.renderAbortController?.signal.aborted) {
801
- return;
802
- }
803
1029
  const signal = this.renderAbortController?.signal;
1030
+ if (!signal || signal.aborted)
1031
+ return;
804
1032
  this.renderState = 'rendering-thumbs';
805
1033
  // Cancel any existing thumbnail render tasks
806
1034
  for (const task of this.thumbnailRenderTasks) {
@@ -811,12 +1039,15 @@ let DeesPdfViewer = (() => {
811
1039
  // Ignore cancellation errors
812
1040
  }
813
1041
  }
814
- this.thumbnailRenderTasks = [];
815
1042
  try {
816
1043
  await this.updateComplete;
1044
+ if (!isCurrentRender())
1045
+ return;
817
1046
  const thumbnails = this.shadowRoot?.querySelectorAll('.thumbnail');
818
1047
  const thumbnailCanvases = this.shadowRoot?.querySelectorAll('.thumbnail-canvas');
819
1048
  const sidebarContent = this.shadowRoot?.querySelector('.sidebar-content');
1049
+ if (!sidebarContent)
1050
+ return;
820
1051
  // Get the actual available width for thumbnails (sidebar width minus padding)
821
1052
  const sidebarStyles = window.getComputedStyle(sidebarContent);
822
1053
  const sidebarPadding = parseFloat(sidebarStyles.paddingLeft) + parseFloat(sidebarStyles.paddingRight);
@@ -829,60 +1060,63 @@ let DeesPdfViewer = (() => {
829
1060
  }
830
1061
  }
831
1062
  for (let i = 0; i < thumbnailCanvases.length; i++) {
832
- if (signal?.aborted)
1063
+ if (signal?.aborted || !isCurrentRender())
833
1064
  return;
834
1065
  const canvas = thumbnailCanvases[i];
835
1066
  const thumbnail = thumbnails[i];
836
1067
  const pageNum = parseInt(canvas.dataset.page || '1');
837
- const page = await this.pdfDocument.getPage(pageNum);
838
- // Get the page's natural dimensions
839
- const initialViewport = page.getViewport({ scale: 1 });
840
- // Calculate scale to fit within the max thumbnail width
841
- const scale = maxThumbnailWidth / initialViewport.width;
842
- const viewport = page.getViewport({ scale });
843
- // Set canvas dimensions with device pixel ratio for sharp thumbnails
844
- const dpr = window.devicePixelRatio || 1;
845
- canvas.width = Math.floor(viewport.width * dpr);
846
- canvas.height = Math.floor(viewport.height * dpr);
847
- // Set the display size via style to ensure proper display
848
- canvas.style.width = `${viewport.width}px`;
849
- canvas.style.height = `${viewport.height}px`;
850
- // Set the actual thumbnail container height
851
- thumbnail.style.height = `${viewport.height}px`;
852
- thumbnail.style.minHeight = `${viewport.height}px`;
853
- const context = canvas.getContext('2d');
854
- if (!context) {
855
- page.cleanup?.();
856
- continue;
1068
+ const page = await raceWithAbort(pdfDocument.getPage(pageNum), signal);
1069
+ try {
1070
+ if (!isCurrentRender())
1071
+ return;
1072
+ const initialViewport = page.getViewport({ scale: 1 });
1073
+ const scale = maxThumbnailWidth / initialViewport.width;
1074
+ const viewport = page.getViewport({ scale });
1075
+ const dpr = window.devicePixelRatio || 1;
1076
+ canvas.width = Math.floor(viewport.width * dpr);
1077
+ canvas.height = Math.floor(viewport.height * dpr);
1078
+ canvas.style.width = `${viewport.width}px`;
1079
+ canvas.style.height = `${viewport.height}px`;
1080
+ thumbnail.style.height = `${viewport.height}px`;
1081
+ thumbnail.style.minHeight = `${viewport.height}px`;
1082
+ const context = canvas.getContext('2d');
1083
+ if (!context)
1084
+ continue;
1085
+ context.scale(dpr, dpr);
1086
+ const renderTask = page.render({
1087
+ canvasContext: context,
1088
+ viewport,
1089
+ });
1090
+ this.thumbnailRenderTasks.add(renderTask);
1091
+ try {
1092
+ await raceWithAbort(renderTask.promise, signal);
1093
+ }
1094
+ finally {
1095
+ this.thumbnailRenderTasks.delete(renderTask);
1096
+ }
1097
+ if (!isCurrentRender())
1098
+ return;
1099
+ const thumbData = this.thumbnailData.find(t => t.page === pageNum);
1100
+ if (thumbData) {
1101
+ thumbData.rendered = true;
1102
+ }
857
1103
  }
858
- // Scale context for high-DPI displays
859
- context.scale(dpr, dpr);
860
- const renderContext = {
861
- canvasContext: context,
862
- viewport: viewport,
863
- };
864
- const renderTask = page.render(renderContext);
865
- this.thumbnailRenderTasks.push(renderTask);
866
- await renderTask.promise;
867
- page.cleanup?.();
868
- // Mark this thumbnail as rendered
869
- const thumbData = this.thumbnailData.find(t => t.page === pageNum);
870
- if (thumbData) {
871
- thumbData.rendered = true;
1104
+ finally {
1105
+ page.cleanup();
872
1106
  }
873
1107
  }
874
1108
  // Trigger update to reflect rendered state
875
- this.requestUpdate('thumbnailData');
1109
+ if (isCurrentRender()) {
1110
+ this.requestUpdate('thumbnailData');
1111
+ }
876
1112
  }
877
1113
  catch (error) {
878
1114
  // Only log non-cancellation errors
879
- if (error?.name !== 'RenderingCancelledException') {
1115
+ if (!(error instanceof Error)
1116
+ || !['AbortError', 'AbortException', 'RenderingCancelledException'].includes(error.name)) {
880
1117
  console.error('Error rendering thumbnails:', error);
881
1118
  }
882
1119
  }
883
- finally {
884
- this.thumbnailRenderTasks = [];
885
- }
886
1120
  }
887
1121
  previousPage() {
888
1122
  if (this.currentPage > 1) {
@@ -934,6 +1168,7 @@ let DeesPdfViewer = (() => {
934
1168
  this.reRenderAllPages();
935
1169
  }
936
1170
  reRenderAllPages() {
1171
+ this.renderGeneration += 1;
937
1172
  // Clear all rendered pages to force re-render with new zoom
938
1173
  this.pageData.forEach(page => {
939
1174
  page.rendered = false;
@@ -953,47 +1188,128 @@ let DeesPdfViewer = (() => {
953
1188
  // Cancel text layer render tasks
954
1189
  this.textLayerRenderTasks.forEach(task => {
955
1190
  try {
956
- task.cancel?.();
1191
+ task.textLayer.cancel();
957
1192
  }
958
1193
  catch (error) {
959
1194
  // Ignore cancellation errors
960
1195
  }
961
1196
  });
962
1197
  this.textLayerRenderTasks.clear();
1198
+ for (const cleanup of this.textSelectionCleanupFunctions.values()) {
1199
+ cleanup();
1200
+ }
1201
+ this.textSelectionCleanupFunctions.clear();
963
1202
  // Request update to re-render pages
964
1203
  this.requestUpdate();
965
- // Render visible pages after update
966
- this.updateComplete.then(() => {
967
- this.renderVisiblePages();
968
- });
1204
+ this.rerenderQueued = true;
1205
+ if (this.rerenderPromise)
1206
+ return;
1207
+ const rerenderQueueEpoch = ++this.rerenderQueueEpoch;
1208
+ const rerenderPromise = (async () => {
1209
+ while (rerenderQueueEpoch === this.rerenderQueueEpoch
1210
+ && this.rerenderQueued
1211
+ && this.renderAdmissionOpen
1212
+ && this.isConnected) {
1213
+ this.rerenderQueued = false;
1214
+ const renderGeneration = this.renderGeneration;
1215
+ const priorRenderPipelines = [...this.pageRenderPipelines];
1216
+ const pipelinesSettled = await settlePromisesWithin(priorRenderPipelines, pipelineSettlementGraceMs);
1217
+ if (!pipelinesSettled) {
1218
+ if (!this.rerenderRecoveryTimeout) {
1219
+ const connectionEpoch = this.connectionEpoch;
1220
+ const loadGeneration = this.loadGeneration;
1221
+ const url = this.pdfUrl;
1222
+ this.rerenderRecoveryTimeout = window.setTimeout(() => {
1223
+ this.rerenderRecoveryTimeout = undefined;
1224
+ if (rerenderQueueEpoch !== this.rerenderQueueEpoch
1225
+ || connectionEpoch !== this.connectionEpoch
1226
+ || loadGeneration !== this.loadGeneration
1227
+ || url !== this.pdfUrl
1228
+ || !this.renderAdmissionOpen
1229
+ || !this.isConnected)
1230
+ return;
1231
+ void this.schedulePdfLoad(connectionEpoch, {
1232
+ currentPage: this.currentPage,
1233
+ currentZoom: this.currentZoom,
1234
+ viewportMode: this.viewportMode,
1235
+ });
1236
+ }, 0);
1237
+ }
1238
+ return;
1239
+ }
1240
+ await this.updateComplete;
1241
+ if (rerenderQueueEpoch === this.rerenderQueueEpoch
1242
+ && renderGeneration === this.renderGeneration
1243
+ && !this.rerenderQueued
1244
+ && this.renderAdmissionOpen
1245
+ && this.isConnected) {
1246
+ await this.renderVisiblePages();
1247
+ }
1248
+ }
1249
+ })();
1250
+ this.rerenderPromise = rerenderPromise;
1251
+ void rerenderPromise.finally(() => {
1252
+ if (this.rerenderPromise === rerenderPromise) {
1253
+ this.rerenderPromise = null;
1254
+ }
1255
+ }).catch(() => { });
969
1256
  }
970
1257
  async downloadPdf() {
971
- if (!this.pdfDocument)
1258
+ const pdfDocument = this.pdfDocument;
1259
+ const signal = this.renderAbortController?.signal;
1260
+ if (!pdfDocument || !signal)
972
1261
  return;
1262
+ const generation = this.loadGeneration;
1263
+ const connectionEpoch = this.connectionEpoch;
1264
+ const url = this.pdfUrl;
1265
+ let ownedBlobUrl;
973
1266
  try {
974
1267
  // Get raw PDF data from the loaded document
975
- const data = await this.pdfDocument.getData();
976
- const blob = new Blob([data.buffer], { type: 'application/pdf' });
977
- const blobUrl = URL.createObjectURL(blob);
1268
+ const data = await raceWithAbort(pdfDocument.getData(), signal);
1269
+ if (!this.isCurrentLoad(generation, connectionEpoch, url)
1270
+ || signal.aborted
1271
+ || pdfDocument !== this.pdfDocument)
1272
+ return;
1273
+ const blob = new Blob([new Uint8Array(data)], { type: 'application/pdf' });
1274
+ ownedBlobUrl = URL.createObjectURL(blob);
978
1275
  const link = document.createElement('a');
979
- link.href = blobUrl;
980
- link.download = this.pdfUrl ? this.pdfUrl.split('/').pop() || 'document.pdf' : 'document.pdf';
1276
+ link.href = ownedBlobUrl;
1277
+ link.download = url ? url.split('/').pop() || 'document.pdf' : 'document.pdf';
981
1278
  link.click();
982
1279
  // Clean up blob URL after short delay
983
- setTimeout(() => URL.revokeObjectURL(blobUrl), 1000);
1280
+ const scheduledBlobUrl = ownedBlobUrl;
1281
+ setTimeout(() => URL.revokeObjectURL(scheduledBlobUrl), 1000);
1282
+ ownedBlobUrl = undefined;
984
1283
  }
985
1284
  catch (error) {
986
- console.error('Error downloading PDF:', error);
1285
+ if (!(error instanceof Error) || error.name !== 'AbortError') {
1286
+ console.error('Error downloading PDF:', error);
1287
+ }
1288
+ }
1289
+ finally {
1290
+ if (ownedBlobUrl)
1291
+ URL.revokeObjectURL(ownedBlobUrl);
987
1292
  }
988
1293
  }
989
1294
  async printPdf() {
990
- if (!this.pdfDocument)
1295
+ const pdfDocument = this.pdfDocument;
1296
+ const signal = this.renderAbortController?.signal;
1297
+ if (!pdfDocument || !signal)
991
1298
  return;
1299
+ const generation = this.loadGeneration;
1300
+ const connectionEpoch = this.connectionEpoch;
1301
+ const url = this.pdfUrl;
1302
+ let ownedPdfUrl;
1303
+ let ownedHtmlUrl;
992
1304
  try {
993
1305
  // Get raw PDF data from the loaded document
994
- const data = await this.pdfDocument.getData();
995
- const blob = new Blob([data.buffer], { type: 'application/pdf' });
996
- const pdfUrl = URL.createObjectURL(blob);
1306
+ const data = await raceWithAbort(pdfDocument.getData(), signal);
1307
+ if (!this.isCurrentLoad(generation, connectionEpoch, url)
1308
+ || signal.aborted
1309
+ || pdfDocument !== this.pdfDocument)
1310
+ return;
1311
+ const blob = new Blob([new Uint8Array(data)], { type: 'application/pdf' });
1312
+ ownedPdfUrl = URL.createObjectURL(blob);
997
1313
  // Create an HTML wrapper page that embeds the PDF and handles print/close
998
1314
  // This gives us control over the afterprint event (direct PDF URLs don't support it)
999
1315
  const htmlContent = `
@@ -1011,7 +1327,7 @@ let DeesPdfViewer = (() => {
1011
1327
  </style>
1012
1328
  </head>
1013
1329
  <body>
1014
- <iframe src="${pdfUrl}" type="application/pdf"></iframe>
1330
+ <iframe src="${ownedPdfUrl}" type="application/pdf"></iframe>
1015
1331
  <script>
1016
1332
  window.onload = function() {
1017
1333
  setTimeout(function() {
@@ -1029,33 +1345,54 @@ let DeesPdfViewer = (() => {
1029
1345
  </html>
1030
1346
  `;
1031
1347
  const htmlBlob = new Blob([htmlContent], { type: 'text/html' });
1032
- const htmlUrl = URL.createObjectURL(htmlBlob);
1033
- const printWindow = window.open(htmlUrl, '_blank', 'width=800,height=600');
1348
+ ownedHtmlUrl = URL.createObjectURL(htmlBlob);
1349
+ const printWindow = window.open(ownedHtmlUrl, '_blank', 'width=800,height=600');
1034
1350
  if (printWindow) {
1351
+ const scheduledPdfUrl = ownedPdfUrl;
1352
+ const scheduledHtmlUrl = ownedHtmlUrl;
1353
+ let urlsRevoked = false;
1354
+ const revokeUrls = () => {
1355
+ if (urlsRevoked)
1356
+ return;
1357
+ urlsRevoked = true;
1358
+ URL.revokeObjectURL(scheduledPdfUrl);
1359
+ URL.revokeObjectURL(scheduledHtmlUrl);
1360
+ };
1035
1361
  // Cleanup blob URLs when window closes
1036
1362
  const checkClosed = setInterval(() => {
1037
1363
  if (printWindow.closed) {
1038
1364
  clearInterval(checkClosed);
1039
- URL.revokeObjectURL(pdfUrl);
1040
- URL.revokeObjectURL(htmlUrl);
1365
+ revokeUrls();
1041
1366
  }
1042
1367
  }, 500);
1043
1368
  // Safety cleanup after 2 minutes
1044
1369
  setTimeout(() => {
1045
1370
  clearInterval(checkClosed);
1046
- URL.revokeObjectURL(pdfUrl);
1047
- URL.revokeObjectURL(htmlUrl);
1371
+ revokeUrls();
1048
1372
  }, 120000);
1373
+ ownedPdfUrl = undefined;
1374
+ ownedHtmlUrl = undefined;
1049
1375
  }
1050
1376
  else {
1051
1377
  // Popup blocked - fall back to direct navigation
1052
- window.open(pdfUrl, '_blank');
1053
- setTimeout(() => URL.revokeObjectURL(pdfUrl), 60000);
1054
- URL.revokeObjectURL(htmlUrl);
1378
+ window.open(ownedPdfUrl, '_blank');
1379
+ const scheduledPdfUrl = ownedPdfUrl;
1380
+ setTimeout(() => URL.revokeObjectURL(scheduledPdfUrl), 60000);
1381
+ ownedPdfUrl = undefined;
1382
+ URL.revokeObjectURL(ownedHtmlUrl);
1383
+ ownedHtmlUrl = undefined;
1055
1384
  }
1056
1385
  }
1057
1386
  catch (error) {
1058
- console.error('Error printing PDF:', error);
1387
+ if (!(error instanceof Error) || error.name !== 'AbortError') {
1388
+ console.error('Error printing PDF:', error);
1389
+ }
1390
+ }
1391
+ finally {
1392
+ if (ownedPdfUrl)
1393
+ URL.revokeObjectURL(ownedPdfUrl);
1394
+ if (ownedHtmlUrl)
1395
+ URL.revokeObjectURL(ownedHtmlUrl);
1059
1396
  }
1060
1397
  }
1061
1398
  /**
@@ -1097,6 +1434,23 @@ let DeesPdfViewer = (() => {
1097
1434
  get canZoomOut() {
1098
1435
  return this.viewportMode !== 'custom' || this.currentZoom > this.MANUAL_MIN_ZOOM;
1099
1436
  }
1437
+ handleViewerWheel = (eventArg) => {
1438
+ const element = eventArg.currentTarget;
1439
+ const scrollTop = element.scrollTop;
1440
+ const scrollHeight = element.scrollHeight;
1441
+ const clientHeight = element.clientHeight;
1442
+ const isAtTop = scrollTop === 0;
1443
+ const isAtBottom = Math.abs(scrollTop + clientHeight - scrollHeight) < 1;
1444
+ if ((eventArg.deltaY < 0 && !isAtTop)
1445
+ || (eventArg.deltaY > 0 && !isAtBottom)) {
1446
+ eventArg.stopPropagation();
1447
+ }
1448
+ else if ((eventArg.deltaY < 0 && isAtTop)
1449
+ || (eventArg.deltaY > 0 && isAtBottom)) {
1450
+ eventArg.preventDefault();
1451
+ eventArg.stopPropagation();
1452
+ }
1453
+ };
1100
1454
  ensureViewerRefs() {
1101
1455
  if (!this.viewerMain) {
1102
1456
  this.viewerMain = this.shadowRoot?.querySelector('.viewer-main');
@@ -1111,26 +1465,11 @@ let DeesPdfViewer = (() => {
1111
1465
  });
1112
1466
  this.resizeObserver.observe(this.viewerMain);
1113
1467
  this.measureViewportDimensions();
1114
- // Prevent scroll propagation to parent when scrolling inside viewer
1115
- this.viewerMain.addEventListener('wheel', (e) => {
1116
- const element = e.currentTarget;
1117
- const scrollTop = element.scrollTop;
1118
- const scrollHeight = element.scrollHeight;
1119
- const clientHeight = element.clientHeight;
1120
- const deltaY = e.deltaY;
1121
- // Check if we're at the boundaries
1122
- const isAtTop = scrollTop === 0;
1123
- const isAtBottom = Math.abs(scrollTop + clientHeight - scrollHeight) < 1;
1124
- // Prevent propagation if we're scrolling within bounds
1125
- if ((deltaY < 0 && !isAtTop) || (deltaY > 0 && !isAtBottom)) {
1126
- e.stopPropagation();
1127
- }
1128
- else if ((deltaY < 0 && isAtTop) || (deltaY > 0 && isAtBottom)) {
1129
- // Prevent default and propagation when at boundaries
1130
- e.preventDefault();
1131
- e.stopPropagation();
1132
- }
1133
- }, { passive: false });
1468
+ }
1469
+ if (this.viewerMain && this.wheelEventTarget !== this.viewerMain) {
1470
+ this.wheelEventTarget?.removeEventListener('wheel', this.handleViewerWheel);
1471
+ this.wheelEventTarget = this.viewerMain;
1472
+ this.wheelEventTarget.addEventListener('wheel', this.handleViewerWheel, { passive: false });
1134
1473
  }
1135
1474
  }
1136
1475
  measureViewportDimensions() {
@@ -1204,77 +1543,146 @@ let DeesPdfViewer = (() => {
1204
1543
  const max = clampToManualRange ? this.MANUAL_MAX_ZOOM : this.ABSOLUTE_MAX_ZOOM;
1205
1544
  return Math.min(Math.max(value, min), max);
1206
1545
  }
1207
- async cleanupDocument() {
1208
- // Abort any ongoing render operations
1209
- if (this.renderAbortController) {
1210
- this.renderAbortController.abort();
1211
- this.renderAbortController = null;
1212
- }
1213
- // Wait for any existing render to complete
1214
- if (this.currentRenderPromise) {
1215
- try {
1216
- await this.currentRenderPromise;
1217
- }
1218
- catch (error) {
1219
- // Ignore errors
1546
+ cleanupDocument() {
1547
+ if (this.cleanupPromise) {
1548
+ return this.cleanupPromise;
1549
+ }
1550
+ const cleanupPromise = this.performDocumentCleanup();
1551
+ this.cleanupPromise = cleanupPromise;
1552
+ void cleanupPromise.finally(() => {
1553
+ if (this.cleanupPromise === cleanupPromise) {
1554
+ this.cleanupPromise = null;
1220
1555
  }
1221
- this.currentRenderPromise = null;
1556
+ }).catch(() => { });
1557
+ return cleanupPromise;
1558
+ }
1559
+ async performDocumentCleanup() {
1560
+ this.renderAdmissionOpen = false;
1561
+ this.renderGeneration += 1;
1562
+ this.rerenderQueueEpoch += 1;
1563
+ this.thumbnailRenderGeneration += 1;
1564
+ this.thumbnailRenderQueueEpoch += 1;
1565
+ this.thumbnailRenderQueued = false;
1566
+ if (this.rerenderRecoveryTimeout) {
1567
+ clearTimeout(this.rerenderRecoveryTimeout);
1568
+ this.rerenderRecoveryTimeout = undefined;
1222
1569
  }
1223
- // Clear the render task reference
1224
- this.currentRenderTask = null;
1225
- // Cancel any page render tasks
1226
- this.pageRenderTasks.forEach(task => {
1570
+ this.intersectionObserver?.disconnect();
1571
+ this.intersectionObserver = undefined;
1572
+ this.resizeObserver?.disconnect();
1573
+ this.resizeObserver = undefined;
1574
+ this.wheelEventTarget?.removeEventListener('wheel', this.handleViewerWheel);
1575
+ this.wheelEventTarget = null;
1576
+ if (this.scrollThrottleTimeout) {
1577
+ clearTimeout(this.scrollThrottleTimeout);
1578
+ this.scrollThrottleTimeout = undefined;
1579
+ }
1580
+ const abortController = this.renderAbortController;
1581
+ this.renderAbortController = null;
1582
+ abortController?.abort();
1583
+ const loadOperation = this.loadOperation;
1584
+ const pdfLoadPromise = this.pdfLoadPromise;
1585
+ const pageRenderTasks = [...this.pageRenderTasks.values()];
1586
+ const textLayerRenderTasks = [...this.textLayerRenderTasks.values()];
1587
+ const thumbnailRenderTasks = [...this.thumbnailRenderTasks];
1588
+ const pageRenderPipelines = [...this.pageRenderPipelines];
1589
+ const documentUsePipelines = [...this.documentUsePipelines];
1590
+ const rerenderPromise = this.rerenderPromise;
1591
+ this.rerenderQueued = false;
1592
+ const thumbnailRenderPromise = this.thumbnailRenderPromise;
1593
+ const currentRenderPromise = this.currentRenderPromise;
1594
+ for (const cleanup of this.textSelectionCleanupFunctions.values()) {
1595
+ cleanup();
1596
+ }
1597
+ this.textSelectionCleanupFunctions.clear();
1598
+ for (const task of pageRenderTasks) {
1227
1599
  try {
1228
1600
  task.cancel();
1229
1601
  }
1230
- catch (error) {
1231
- // Ignore cancellation errors
1602
+ catch {
1603
+ // The tracked task promise still participates in settlement below.
1232
1604
  }
1233
- });
1234
- this.pageRenderTasks.clear();
1235
- // Cancel text layer render tasks
1236
- this.textLayerRenderTasks.forEach(task => {
1605
+ }
1606
+ for (const task of textLayerRenderTasks) {
1237
1607
  try {
1238
- task.cancel?.();
1608
+ task.textLayer.cancel();
1239
1609
  }
1240
- catch (error) {
1241
- // Ignore cancellation errors
1610
+ catch {
1611
+ // The tracked task promise still participates in settlement below.
1242
1612
  }
1243
- });
1244
- this.textLayerRenderTasks.clear();
1245
- // Cancel any thumbnail render tasks
1246
- for (const task of (this.thumbnailRenderTasks || [])) {
1613
+ }
1614
+ for (const task of thumbnailRenderTasks) {
1247
1615
  try {
1248
1616
  task.cancel();
1249
1617
  }
1250
- catch (error) {
1251
- // Ignore cancellation errors
1618
+ catch {
1619
+ // The tracked task promise still participates in settlement below.
1252
1620
  }
1253
1621
  }
1254
- this.thumbnailRenderTasks = [];
1255
- // Reset all state flags
1622
+ const renderCanvases = this.shadowRoot?.querySelectorAll('.page-canvas, .thumbnail-canvas');
1623
+ renderCanvases?.forEach((canvasArg) => {
1624
+ canvasArg.width = 0;
1625
+ canvasArg.height = 0;
1626
+ canvasArg.style.removeProperty('width');
1627
+ canvasArg.style.removeProperty('height');
1628
+ });
1629
+ const pdfDocument = this.pdfDocument;
1630
+ this.pdfDocument = null;
1631
+ const releasePromise = pdfDocument
1632
+ ? PdfManager.releaseDocument(pdfDocument).catch((error) => {
1633
+ console.error('Error destroying PDF document:', error);
1634
+ })
1635
+ : null;
1636
+ await settlePromisesWithin([
1637
+ ...(pdfLoadPromise ? [pdfLoadPromise] : []),
1638
+ ...(currentRenderPromise ? [currentRenderPromise] : []),
1639
+ ...documentUsePipelines,
1640
+ ...(rerenderPromise ? [rerenderPromise] : []),
1641
+ ...pageRenderPipelines,
1642
+ ...(thumbnailRenderPromise ? [thumbnailRenderPromise] : []),
1643
+ ...pageRenderTasks.map((task) => task.promise),
1644
+ ...textLayerRenderTasks.map((task) => task.promise),
1645
+ ...thumbnailRenderTasks.map((task) => task.promise),
1646
+ ...(releasePromise ? [releasePromise] : []),
1647
+ ], pipelineSettlementGraceMs);
1648
+ for (const cleanup of this.textSelectionCleanupFunctions.values()) {
1649
+ cleanup();
1650
+ }
1651
+ this.textSelectionCleanupFunctions.clear();
1652
+ if (this.pdfLoadPromise === pdfLoadPromise) {
1653
+ this.pdfLoadPromise = null;
1654
+ }
1655
+ if (this.loadOperation === loadOperation) {
1656
+ this.loadOperation = null;
1657
+ }
1658
+ this.currentRenderPromise = null;
1659
+ this.currentRenderTask = null;
1660
+ this.pageRenderTasks.clear();
1661
+ this.pageRenderPipelines.clear();
1662
+ this.documentUsePipelines.clear();
1663
+ if (this.rerenderPromise === rerenderPromise) {
1664
+ this.rerenderPromise = null;
1665
+ }
1666
+ this.textLayerRenderTasks.clear();
1667
+ for (const task of thumbnailRenderTasks) {
1668
+ this.thumbnailRenderTasks.delete(task);
1669
+ }
1670
+ if (this.thumbnailRenderPromise === thumbnailRenderPromise) {
1671
+ this.thumbnailRenderPromise = null;
1672
+ }
1673
+ this.loading = false;
1256
1674
  this.renderState = 'idle';
1257
1675
  this.pageRendering = false;
1258
1676
  this.pageNumPending = null;
1259
1677
  this.thumbnailData = [];
1260
1678
  this.pageData = [];
1261
1679
  this.documentId = '';
1262
- // Clear canvas content
1680
+ this.totalPages = 1;
1681
+ this.currentPage = 1;
1682
+ this.pdfFileSize = 0;
1263
1683
  if (this.canvas && this.ctx) {
1264
1684
  this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);
1265
1685
  }
1266
- // Destroy the document to free memory
1267
- if (this.pdfDocument) {
1268
- try {
1269
- this.pdfDocument.destroy();
1270
- }
1271
- catch (error) {
1272
- console.error('Error destroying PDF document:', error);
1273
- }
1274
- }
1275
- // Finally null the document reference
1276
- this.pdfDocument = null;
1277
- // Request update to reflect state changes
1278
1686
  this.requestUpdate();
1279
1687
  }
1280
1688
  static {
@@ -1284,4 +1692,4 @@ let DeesPdfViewer = (() => {
1284
1692
  return DeesPdfViewer = _classThis;
1285
1693
  })();
1286
1694
  export { DeesPdfViewer };
1287
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbWVkaWEvZGVlcy1wZGYtdmlld2VyL2NvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBdUIsVUFBVSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDM0MsT0FBTyxFQUFFLElBQUksSUFBSSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDN0MsT0FBTyw4Q0FBOEMsQ0FBQztBQUN0RCxPQUFPLDZDQUE2QyxDQUFDO0lBV3hDLGFBQWE7NEJBRHpCLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQzs7OztzQkFDRSxXQUFXOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzZCQUFuQixTQUFRLFdBQVc7Ozs7a0NBSzNDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQzt1Q0FHMUIsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO3VDQUcxQixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7dUNBRzFCLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQzt1Q0FHM0IsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDOzJDQUczQixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7dUNBRzFCLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FB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
1695
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbWVkaWEvZGVlcy1wZGYtdmlld2VyL2NvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBdUIsVUFBVSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUgsT0FBTyxFQUNMLFNBQVMsR0FJVixNQUFNLFlBQVksQ0FBQztBQUNwQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDOUQsT0FBTyxFQUNMLGFBQWEsRUFDYixvQkFBb0IsRUFDcEIscUJBQXFCLEdBQ3RCLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMzQyxPQUFPLEVBQUUsSUFBSSxJQUFJLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM3QyxPQUFPLDhDQUE4QyxDQUFDO0FBQ3RELE9BQU8sNkNBQTZDLENBQUM7QUFxQnJELE1BQU0seUJBQXlCLEdBQUcsS0FBSyxDQUFDO0lBUTNCLGFBQWE7NEJBRHpCLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQzs7OztzQkFDRSxXQUFXOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzZCQUFuQixTQUFRLFdBQVc7Ozs7a0NBSzNDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQzt1Q0FHMUIsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO3VDQUcxQixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7dUNBRzFCLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUs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