ng2-pdfjs-viewer 26.2.0 → 26.3.1
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.
- package/LICENSE +1 -31
- package/README.md +2 -3
- package/fesm2022/ng2-pdfjs-viewer.mjs +40 -14
- package/package.json +2 -2
- package/pdfjs/web/ng2-customization.css +8 -0
- package/pdfjs/web/postmessage-wrapper.js +1 -1
package/LICENSE
CHANGED
|
@@ -1,33 +1,3 @@
|
|
|
1
|
-
# Apache License, Version 2.0 with Commons Clause License Condition v 1.0
|
|
2
|
-
|
|
3
|
-
===============================================================================
|
|
4
|
-
|
|
5
|
-
COMMONS CLAUSE LICENSE CONDITION
|
|
6
|
-
|
|
7
|
-
The Software is provided to you by the Licensor under the License, as defined
|
|
8
|
-
below, subject to the following condition.
|
|
9
|
-
|
|
10
|
-
Without limiting other conditions in the License, the grant of rights under
|
|
11
|
-
the License will not include, and the License does not grant to you, the right
|
|
12
|
-
to Sell the Software. For purposes of the foregoing, "Sell" means practicing
|
|
13
|
-
any or all of the rights granted to you under the License to provide to third
|
|
14
|
-
parties, for a fee or other consideration (including without limitation fees
|
|
15
|
-
for hosting or consulting/ support services related to the Software), a product
|
|
16
|
-
or service whose value derives, entirely or substantially, from the Software.
|
|
17
|
-
Any license notice or attribution required by the License must also include
|
|
18
|
-
this Commons Clause License Condition notice.
|
|
19
|
-
|
|
20
|
-
Software: ng2-pdfjs-viewer
|
|
21
|
-
Copyright (c) 2018-2025 Aneesh Goapalakrishnan
|
|
22
|
-
Licensor: Aneesh Goapalakrishnan <codehippie1@gmail.com>
|
|
23
|
-
|
|
24
|
-
This software is dual-licensed under the Apache License 2.0 and the Commons
|
|
25
|
-
Clause License Condition. The Commons Clause modifies the Apache License 2.0
|
|
26
|
-
to prevent commercial competitors from selling products or services that are
|
|
27
|
-
substantially derived from this software.
|
|
28
|
-
|
|
29
|
-
===============================================================================
|
|
30
|
-
|
|
31
1
|
Apache License
|
|
32
2
|
Version 2.0, January 2004
|
|
33
3
|
http://www.apache.org/licenses/
|
|
@@ -216,7 +186,7 @@ substantially derived from this software.
|
|
|
216
186
|
same "printed page" as the copyright notice for easier
|
|
217
187
|
identification within third-party archives.
|
|
218
188
|
|
|
219
|
-
Copyright 2018-
|
|
189
|
+
Copyright 2018-2026 Aneesh Goapalakrishnan
|
|
220
190
|
|
|
221
191
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
222
192
|
you may not use this file except in compliance with the License.
|
package/README.md
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
[](https://github.com/intbot/ng2-pdfjs-viewer/security/code-scanning)
|
|
15
15
|
[](https://angular.dev)
|
|
16
16
|
[](https://github.com/mozilla/pdf.js)
|
|
17
|
-
[](https://github.com/intbot/ng2-pdfjs-viewer/blob/master/LICENSE)
|
|
18
18
|
[](https://github.com/intbot/ng2-pdfjs-viewer)
|
|
19
19
|
[](https://stackblitz.com/github/intbot/ng2-pdfjs-viewer/tree/master/examples/quickstart)
|
|
20
20
|
[](https://codesandbox.io/p/sandbox/github/intbot/ng2-pdfjs-viewer/tree/master/examples/quickstart)
|
|
@@ -240,8 +240,7 @@ Using it somewhere that won't show up in public code — an internal tool, a hos
|
|
|
240
240
|
|
|
241
241
|
## 📄 License
|
|
242
242
|
|
|
243
|
-
[Apache-2.0
|
|
244
|
-
Clause restricts selling the software itself as a hosted/commercial product.
|
|
243
|
+
[Apache-2.0](https://github.com/intbot/ng2-pdfjs-viewer/blob/master/LICENSE). Use, modify, self-host, or ship it inside a commercial product — the Apache 2.0 grant is perpetual, irrevocable, and carries an express patent license.
|
|
245
244
|
|
|
246
245
|
## 🙏 Acknowledgments
|
|
247
246
|
|
|
@@ -150,6 +150,32 @@ class ActionQueueManager {
|
|
|
150
150
|
}
|
|
151
151
|
|
|
152
152
|
// Property normalization between component inputs and PDF.js viewer values
|
|
153
|
+
// Mode/name lists shared by the to- and from-viewer transforms. PDF.js encodes
|
|
154
|
+
// scroll and spread modes as integer enums, so for those the array index is the
|
|
155
|
+
// enum value and the order here doubles as the numeric->name map (keep it in
|
|
156
|
+
// sync with PDF.js). Declaring each list once keeps the input whitelist and the
|
|
157
|
+
// index map from drifting apart, and hoisting them to module scope avoids
|
|
158
|
+
// re-allocating the array on every viewer state-sync event.
|
|
159
|
+
const ZOOM_NAMES = [
|
|
160
|
+
"auto",
|
|
161
|
+
"page-fit",
|
|
162
|
+
"page-width",
|
|
163
|
+
"page-actual",
|
|
164
|
+
];
|
|
165
|
+
const CURSOR_MODES = ["select", "hand", "zoom"];
|
|
166
|
+
const SCROLL_MODES = [
|
|
167
|
+
"vertical",
|
|
168
|
+
"horizontal",
|
|
169
|
+
"wrapped",
|
|
170
|
+
"page",
|
|
171
|
+
];
|
|
172
|
+
const SPREAD_MODES = ["none", "odd", "even"];
|
|
173
|
+
const PAGE_MODES = [
|
|
174
|
+
"none",
|
|
175
|
+
"thumbs",
|
|
176
|
+
"bookmarks",
|
|
177
|
+
"attachments",
|
|
178
|
+
];
|
|
153
179
|
// Lowercase + whitelist with fallback
|
|
154
180
|
const pick = (value, allowed, fallback) => {
|
|
155
181
|
const v = value ? value.toLowerCase() : "";
|
|
@@ -162,9 +188,7 @@ class PropertyTransformers {
|
|
|
162
188
|
return "auto";
|
|
163
189
|
const v = zoom.toLowerCase();
|
|
164
190
|
// Named zooms normalize to lowercase; numeric strings pass through
|
|
165
|
-
return
|
|
166
|
-
? v
|
|
167
|
-
: zoom;
|
|
191
|
+
return ZOOM_NAMES.includes(v) ? v : zoom;
|
|
168
192
|
},
|
|
169
193
|
fromViewer: (viewerZoom) => {
|
|
170
194
|
if (typeof viewerZoom === "string")
|
|
@@ -180,31 +204,29 @@ class PropertyTransformers {
|
|
|
180
204
|
fromViewer: (viewerRotation) => typeof viewerRotation === "number" ? viewerRotation : 0,
|
|
181
205
|
};
|
|
182
206
|
static transformCursor = {
|
|
183
|
-
toViewer: (cursor) => pick(cursor,
|
|
207
|
+
toViewer: (cursor) => pick(cursor, CURSOR_MODES, "select"),
|
|
184
208
|
fromViewer: (viewerCursor) => typeof viewerCursor === "string" ? viewerCursor : "select",
|
|
185
209
|
};
|
|
186
210
|
static transformScroll = {
|
|
187
|
-
toViewer: (scroll) => pick(scroll,
|
|
211
|
+
toViewer: (scroll) => pick(scroll, SCROLL_MODES, "vertical"),
|
|
188
212
|
fromViewer: (viewerScroll) => {
|
|
189
|
-
const modes = ["vertical", "horizontal", "wrapped", "page"];
|
|
190
213
|
if (typeof viewerScroll === "number") {
|
|
191
|
-
return
|
|
214
|
+
return SCROLL_MODES[viewerScroll] || "vertical";
|
|
192
215
|
}
|
|
193
216
|
return typeof viewerScroll === "string" ? viewerScroll : "vertical";
|
|
194
217
|
},
|
|
195
218
|
};
|
|
196
219
|
static transformSpread = {
|
|
197
|
-
toViewer: (spread) => pick(spread,
|
|
220
|
+
toViewer: (spread) => pick(spread, SPREAD_MODES, "none"),
|
|
198
221
|
fromViewer: (viewerSpread) => {
|
|
199
|
-
const modes = ["none", "odd", "even"];
|
|
200
222
|
if (typeof viewerSpread === "number") {
|
|
201
|
-
return
|
|
223
|
+
return SPREAD_MODES[viewerSpread] || "none";
|
|
202
224
|
}
|
|
203
225
|
return typeof viewerSpread === "string" ? viewerSpread : "none";
|
|
204
226
|
},
|
|
205
227
|
};
|
|
206
228
|
static transformPageMode = {
|
|
207
|
-
toViewer: (pageMode) => pick(pageMode,
|
|
229
|
+
toViewer: (pageMode) => pick(pageMode, PAGE_MODES, "none"),
|
|
208
230
|
fromViewer: (viewerPageMode) => typeof viewerPageMode === "string" ? viewerPageMode : "none",
|
|
209
231
|
};
|
|
210
232
|
}
|
|
@@ -1992,11 +2014,15 @@ class PdfJsViewerComponent {
|
|
|
1992
2014
|
// Embedded views for pageOverlayTpl, keyed by page number. Views are
|
|
1993
2015
|
// attached to ApplicationRef so bindings inside stay live.
|
|
1994
2016
|
overlayViews = new Map();
|
|
1995
|
-
mountPageOverlay(pageNumber) {
|
|
2017
|
+
mountPageOverlay(pageNumber, knownPageEl) {
|
|
1996
2018
|
if (!this.pageOverlayTpl || this.externalWindow)
|
|
1997
2019
|
return;
|
|
1998
2020
|
const doc = this.iframe?.nativeElement?.contentDocument;
|
|
1999
|
-
|
|
2021
|
+
// Callers iterating already-rendered pages pass the element they hold, so
|
|
2022
|
+
// we skip re-finding it by selector (saves one DOM query per page on large
|
|
2023
|
+
// documents); the per-page render path passes nothing and looks it up.
|
|
2024
|
+
const pageEl = knownPageEl ??
|
|
2025
|
+
doc?.querySelector(`.pdfViewer .page[data-page-number="${pageNumber}"]`);
|
|
2000
2026
|
if (!pageEl || pageEl.querySelector(":scope > .ng2-page-overlay")) {
|
|
2001
2027
|
return;
|
|
2002
2028
|
}
|
|
@@ -2038,7 +2064,7 @@ class PdfJsViewerComponent {
|
|
|
2038
2064
|
.forEach((el) => {
|
|
2039
2065
|
const pageNumber = Number(el.getAttribute("data-page-number"));
|
|
2040
2066
|
if (pageNumber > 0) {
|
|
2041
|
-
this.mountPageOverlay(pageNumber);
|
|
2067
|
+
this.mountPageOverlay(pageNumber, el);
|
|
2042
2068
|
}
|
|
2043
2069
|
});
|
|
2044
2070
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ng2-pdfjs-viewer",
|
|
3
|
-
"version": "26.
|
|
3
|
+
"version": "26.3.1",
|
|
4
4
|
"description": "The most comprehensive Angular PDF viewer, powered by Mozilla PDF.js 6 — view, annotate, sign, fill forms, search, and read aloud from one component. 8.3M+ downloads, mobile-first, production-ready.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Aneesh Goapalakrishnan",
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"accessibility",
|
|
55
55
|
"open-source"
|
|
56
56
|
],
|
|
57
|
-
"license": "Apache-2.0
|
|
57
|
+
"license": "Apache-2.0",
|
|
58
58
|
"readme": "README.md",
|
|
59
59
|
"exports": {
|
|
60
60
|
"./package.json": {
|
|
@@ -110,6 +110,14 @@ body #outerContainer.sidebar-right.viewsManagerOpen #loadingBar {
|
|
|
110
110
|
pointer-events: none !important;
|
|
111
111
|
}
|
|
112
112
|
|
|
113
|
+
/* A toolbar button forced hidden by [controlVisibility]. Uses our own class,
|
|
114
|
+
not PDF.js's `hidden`, so that PDF.js re-asserting `hidden` on document load
|
|
115
|
+
(the print button via its `printingallowed` handler - Issue #373, seen with
|
|
116
|
+
fast Blob loads) can't bring a hidden button back. */
|
|
117
|
+
.ng2-btn-hidden {
|
|
118
|
+
display: none !important;
|
|
119
|
+
}
|
|
120
|
+
|
|
113
121
|
/* Whole toolbar hidden (custom host toolbars) - viewer reclaims the height */
|
|
114
122
|
#outerContainer.ng2-toolbar-hidden #toolbarContainer {
|
|
115
123
|
display: none !important;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(){"use strict";const e="/";let t=null,n=!0;try{const e=new URLSearchParams(window.location.search),o=e.get("urlValidation");if(null!==o){const e=String(o).toLowerCase();n=!("0"===e||"false"===e||"off"===e)}t=e.get("file")}catch(e){}function o(){if(!n||!t)return!0;return new URLSearchParams(window.location.search).get("file")===t||(p(`Security warning: ${o="Unauthorized file access detected. The file URL has been tampered with."}`,"warn"),window.parent&&window.parent!==window&&window.parent.postMessage({type:"ng2-pdfjs-viewer-security-warning",message:o,originalUrl:t,currentUrl:new URLSearchParams(window.location.search).get("file")},e),!1);var o}window.addEventListener("hashchange",o),window.addEventListener("popstate",o);const r=new Set(["enableSignatureEditor","enableComment","enableXfa","enableScripting","enablePermissions","enableAutoLinking","enableHighlightFloatingButton","forcePageColors","pageColorsBackground","pageColorsForeground","highlightEditorColors","defaultZoomValue","viewOnLoad","sidebarViewOnLoad","scrollModeOnLoad","spreadModeOnLoad","cursorToolOnLoad","printResolution","maxCanvasPixels","textLayerMode","disablePageLabels","ignoreDestinationZoom","historyUpdateUrl","disableHistory","enableMerge","enableSplitMerge","enableUpdatedAddImage"]);let a=!1;function i(){if(!a&&"undefined"!=typeof PDFViewerApplicationOptions){a=!0;try{const e=new URLSearchParams(window.location.search).get("pjsOptions");if(!e)return;const t=JSON.parse(e);for(const e of Object.keys(t)){const n=t[e],o=["string","number","boolean"].includes(typeof n);r.has(e)&&o?PDFViewerApplicationOptions.set(e,n):p(`Ignoring pjsOptions key outside allowlist: ${e}`,"warn")}}catch(e){p(`Failed to apply init-time options: ${e.message}`,"error")}}}const s=e=>{e.detail&&e.detail.source&&e.detail.source!==window||(i(),F(),k())};document.addEventListener("webviewerloaded",s);try{window.parent!==window&&window.parent.document&&(window.parent.document.addEventListener("webviewerloaded",s),window.addEventListener("pagehide",()=>{try{window.parent.document.removeEventListener("webviewerloaded",s)}catch(e){}}))}catch(e){}document.addEventListener("DOMContentLoaded",()=>{"undefined"!=typeof PDFViewerApplication&&(i(),F(),k())});const c={activeZoomCommand:!1,markZoomCommandStart(){this.activeZoomCommand=!0},markZoomCommandEnd(){this.activeZoomCommand=!1},isZoomCommandActive(){return this.activeZoomCommand}},d={NOT_LOADED:0,VIEWER_LOADED:1,VIEWER_INITIALIZED:2,EVENTBUS_READY:3,COMPONENTS_READY:4,DOCUMENT_LOADED:5};let l=d.NOT_LOADED,u=!1;function p(e,t="info"){if(!u)return;const n=(new Date).toISOString(),o="[PostMessage]";switch(t){case"error":console.error(`${o} ${n} ERROR: ${e}`);break;case"warn":console.warn(`${o} ${n} WARN: ${e}`);break;default:console.log(`${o} ${n} INFO: ${e}`)}}function g(e,t,n){const o=document.getElementById(e),r=t?document.getElementById(t):null;o&&o.classList.toggle("hidden",!n),r&&r.classList.toggle("hidden",!n)}function m(e,t){const n=document.getElementById(e);n?n.classList.toggle("hidden",!t):p(`Element not found for visibility toggle: ${e}`,"warn")}function f(e,t){const n=document.getElementById(e);n?n.classList.toggle("ng2-hidden-section",!t):p(`Toolbar section not found for visibility toggle: ${e}`,"warn")}function w(t){t<=l||(p(`Readiness state changed: ${l} → ${t}`),l=t,l>=d.EVENTBUS_READY&&function(){P||(P=!0,window.addEventListener("message",D),window.Ng2PdfJsViewerAPI={updateControl:M,getState:b,isReady:()=>l>=d.EVENTBUS_READY,getReadiness:()=>l},function(){const e=PDFViewerApplication;if(!e||!e.eventBus)return;if(function(){if(se)return;const e=PDFViewerApplication;if(!e||!e.eventBus)return void p("Cannot setup error listeners: EventBus not available","warn");e.eventBus.on("documenterror",e=>{p(`🔴 DOCUMENT ERROR EVENT FIRED: ${e.message}`,"error"),h("loading",!1,"system");if(h("error",e.message||"An error occurred while loading the PDF.","system"),oe.documentError){p(`Document error event received: ${e.message}`);v("documentError",{message:e.message||"Unknown document error",source:e.source?"PDFViewerApplication":"unknown",name:e.name||"DocumentError"})}}),e.eventBus.on("loaderror",e=>{p(`🔴 LOAD ERROR EVENT FIRED: ${e.message}`,"error"),h("loading",!1,"system")}),e.eventBus.on("error",e=>{p(`🔴 GENERIC ERROR EVENT FIRED: ${e.message}`,"error"),h("loading",!1,"system")}),se=!0,p("Error event listeners set up successfully","info")}(),e.eventBus.on("documentinit",()=>h("loading",!0,"system")),e.eventBus.on("pagesinit",()=>h("loading",!0,"system")),e.eventBus.on("pagerendered",()=>h("loading",!1,"system")),e.eventBus.on("pagesloaded",()=>h("loading",!1,"system")),e.eventBus.on("documentloaded",()=>{w(d.DOCUMENT_LOADED),function(){if(ce)return;window.addEventListener("error",e=>{p(`🔴 GLOBAL ERROR: ${e.message}`,"error"),h("loading",!1,"system")}),window.addEventListener("unhandledrejection",e=>{p(`🔴 UNHANDLED PROMISE REJECTION: ${e.reason}`,"error"),h("loading",!1,"system")}),ce=!0;const e=PDFViewerApplication;if(!e||!e.eventBus)return void p("Cannot setup bidirectional listeners: EventBus not available","warn");e.eventBus&&(e.eventBus.on("scalechanging",t=>{if(c.isZoomCommandActive())return void p("Skipping zoom notification - programmatic change from our command");let n,o=!1;t.presetValue&&"string"==typeof t.presetValue?(o=!0,n=t.presetValue):"number"!=typeof t.scale||t.presetValue||(p("Assuming user-initiated scale change (mouse wheel, etc.)"),o=!0,n=function(e,t){if("string"==typeof e)return e;if(t?.pdfViewer){const n=t.pdfViewer;if(["page-fit","page-width","page-actual","auto"].includes(n.currentScaleValue))return n.currentScaleValue;const o={.5:"0.5",.75:"0.75",1:"1",1.25:"1.25",1.5:"1.5",2:"2",3:"3",4:"4"};for(const[t,n]of Object.entries(o))if(Math.abs(e-parseFloat(t))<.01)return n}return"number"==typeof e?`${Math.round(100*e)}%`:"auto"}(t.scale,e)),o?h("zoom",n,"user"):p("Skipping zoom notification - not identified as user-initiated")}),e.eventBus.on("switchscrollmode",e=>{const t={0:"vertical",1:"horizontal",2:"wrapped",3:"page"}[e.mode]||"vertical";p(`Scroll mode changed via event to: ${t}`),h("scroll",t,"user")}),e.eventBus.on("switchspreadmode",e=>{const t={0:"none",1:"odd",2:"even"}[e.mode]||"none";p(`Spread mode changed via event to: ${t}`),h("spread",t,"user")}),e.eventBus.on("switchcursortool",e=>{const t={0:"select",1:"hand",2:"zoom"}[e.tool]||"select";p(`Cursor changed via event to: ${t}`),h("cursor",t,"user")}),e.eventBus.on("sidebarviewchanged",e=>{const t={0:"none",1:"thumbs",2:"bookmarks",3:"attachments",4:"layers"}[e.view]||"none";p(`Page mode changed via event to: ${t}`),h("pageMode",t,"user")}),e.eventBus.on("rotationchanging",e=>{p(`Rotation changed via event to: ${e.pagesRotation}`),h("rotation",e.pagesRotation,"user")}),e.eventBus.on("documentinit",e=>{oe.documentInit&&v("documentInit",null)}),e.eventBus.on("pagesinit",t=>{if(oe.pagesInit){v("pagesInit",{pagesCount:e.pagesCount||0})}}),e.eventBus.on("presentationmodechanged",e=>{if(oe.presentationModeChanged){v("presentationModeChanged",{active:3===e.state,switchInProgress:2===e.state})}}),e.eventBus.on("fileinputchange",e=>{oe.openFile&&v("openFile",null)}),e.eventBus.on("find",e=>{if(oe.find){v("find",{query:e.query||"",phraseSearch:!1,caseSensitive:e.caseSensitive||!1,entireWord:e.entireWord||!1,highlightAll:e.highlightAll||!1,findPrevious:e.findPrevious||!1})}}),e.eventBus.on("updatefindmatchescount",e=>{if(oe.updateFindMatchesCount){v("updateFindMatchesCount",{current:e.matchesCount?.current||0,total:e.matchesCount?.total||0})}}),e.eventBus.on("metadataloaded",t=>{if(oe.metadataLoaded){const t=e.documentInfo;v("metadataLoaded",{title:t?.Title,author:t?.Author,subject:t?.Subject,keywords:t?.Keywords,creator:t?.Creator,producer:t?.Producer,creationDate:t?.CreationDate,modificationDate:t?.ModDate,pdfFormatVersion:t?.PDFFormatVersion,isLinearized:t?.IsLinearized,isAcroFormPresent:t?.IsAcroFormPresent,isXFAPresent:t?.IsXFAPresent,isCollectionPresent:t?.IsCollectionPresent})}}),e.eventBus.on("outlineloaded",e=>{if(oe.outlineLoaded){v("outlineLoaded",{items:[],hasOutline:(e.outlineCount||0)>0})}}),e.eventBus.on("pagerendered",e=>{if(oe.pageRendered){v("pageRendered",{pageNumber:e.pageNumber||1,timestamp:Date.now()})}}),e.eventBus.on("sidebarviewchanged",e=>{if(oe.sidebarViewChanged){v("sidebarViewChanged",{view:{0:"none",1:"thumbs",2:"outline",3:"attachments",4:"layers"}[e.view]||"unknown"})}}),e.eventBus.on("layersloaded",e=>{oe.layersChanged&&v("layersChanged",{reason:"loaded",layersCount:e.layersCount||0})}),e.eventBus.on("optionalcontentconfigchanged",()=>{oe.layersChanged&&v("layersChanged",{reason:"changed"})}),e.eventBus.on("namedaction",e=>{oe.namedAction&&v("namedAction",{action:e.action||""})}),e.eventBus.on("documentproperties",()=>{oe.documentProperties&&v("documentProperties",{})}),e.eventBus.on("annotationlayerrendered",e=>{if(oe.annotationLayerRendered){v("annotationLayerRendered",{pageNumber:e.pageNumber||1,error:e.error||null,timestamp:Date.now()})}}),e.eventBus.on("documentloaded",ge));!function(e){oe.idle&&fe();he(e)}(e)}()}),e.eventBus.on("pagesloaded",()=>{l<d.COMPONENTS_READY&&w(d.COMPONENTS_READY)}),function(){document.addEventListener("change",J,!0),document.addEventListener("input",J,!0)}(),e.eventBus.on("pagesedited",t=>{v("pagesEdited",{operation:t&&(t.type||t.operation)||"edit",pagesCount:e.pagesCount})}),e.eventBus.on("pagerendered",e=>{K&&e&&e.source&&e.source.div&&X(e.source.div)}),!window._ng2PrintWrapped){window._ng2PrintWrapped=!0;const e=window.print.bind(window);window.print=function(){G.blockPrint?p("Printing blocked by content protection","warn"):e()}}e.eventBus.on("editingstateschanged",e=>{const t=e&&e.details||e||{};v("annotationEditorStateChange",{isEditing:!0===t.isEditing,isEmpty:!0===t.isEmpty,hasSomethingToUndo:!0===t.hasSomethingToUndo,hasSomethingToRedo:!0===t.hasSomethingToRedo,hasSelectedEditor:!0===t.hasSelectedEditor})}),e.eventBus.on("switchannotationeditormode",e=>{v("annotationEditorModeChange",{mode:{"-1":"disable",0:"none",3:"freetext",9:"highlight",13:"stamp",15:"ink",101:"signature",102:"comment"}[String(e.mode)]??"none"})});try{const t=e.passwordPrompt;if(t&&"function"==typeof t.open&&!t._ng2OpenPatched){const e=t.open.bind(t);t.open=function(...t){return h("loading",!1,"system"),v("passwordPrompt",{}),e(...t)},t._ng2OpenPatched=!0}}catch(e){}}());window.parent.postMessage({type:"postmessage-ready",timestamp:Date.now(),readiness:l},e)}())}function h(t,n,o="user"){try{const r={type:"state-change",property:t,value:n,source:o,timestamp:Date.now()};window.parent.postMessage(r,e)}catch(e){p(`Failed to send state change notification: ${e.message}`,"error")}}function v(t,n){try{const o={type:"event-notification",eventName:t,eventData:n,timestamp:Date.now()};window.parent.postMessage(o,e)}catch(e){p(`Failed to send event notification: ${e.message}`,"error")}}function y(t,n){t&&window.parent&&window.parent.postMessage({type:"control-response",id:t,...n,timestamp:Date.now()},e)}function b(){const e=PDFViewerApplication;return e?{ready:e.initialized,page:e.page,pagesCount:e.pagesCount,currentScale:e.pdfViewer?e.pdfViewer.currentScale:null,currentScaleValue:e.pdfViewer?e.pdfViewer.currentScaleValue:null,pagesRotation:e.pdfViewer?e.pdfViewer.pagesRotation:null,scrollMode:e.pdfViewer?e.pdfViewer.scrollMode:null,spreadMode:e.pdfViewer?e.pdfViewer.spreadMode:null}:{ready:!1}}const E={updateModeViaEventBus:function(e,t,n,o){const r=PDFViewerApplication;if(r?.eventBus)try{const a=n["string"==typeof t?t.toUpperCase():t];void 0!==a?r.eventBus.dispatch(e,{mode:a}):p(`Unknown ${o} mode: ${t}`,"warn")}catch(e){p(`Error updating ${o} mode: ${e.message}`,"error")}else p("EventBus not available for mode update","error")}};function k(){const e=PDFViewerApplication;e?(w(d.VIEWER_LOADED),e.initializedPromise?e.initializedPromise.then(()=>{w(d.VIEWER_INITIALIZED),e.eventBus&&"function"==typeof e.eventBus.dispatch&&(w(d.EVENTBUS_READY),e.pdfViewer&&e.pdfCursorTools&&w(d.COMPONENTS_READY))}).catch(e=>{p(`PDFViewerApplication initialization failed: ${e.message}`,"error")}):e.initialized&&(w(d.VIEWER_INITIALIZED),e.eventBus&&"function"==typeof e.eventBus.dispatch&&(w(d.EVENTBUS_READY),e.pdfViewer&&e.pdfCursorTools&&w(d.COMPONENTS_READY)))):w(d.NOT_LOADED)}let P=!1;function D(e){if(e.source!==window.parent||!e.data)return;const{type:t,action:n,payload:o,id:r}=e.data;if("host-response"===t){const t=C.get(e.data.requestId);return void(t&&(C.delete(e.data.requestId),e.data.error?t.reject(new Error(e.data.error)):t.resolve(e.data.data)))}if("control-update"===t)try{const e=M(n,o);Promise.resolve(e).then(e=>y(r,void 0!==e?{success:!0,action:n,data:e}:{success:!0,action:n,payload:o}),e=>{const t=`Error processing ${n}: ${e.message}`;p(t,"error"),y(r,{success:!1,error:t})})}catch(e){const t=`Error processing ${n}: ${e.message}`;p(t,"error"),y(r,{success:!1,error:t})}}let V=!1,A=0;const C=new Map;function B(t,n){return new Promise((o,r)=>{const a="host-"+ ++A;C.set(a,{resolve:o,reject:r}),window.parent.postMessage({type:"host-request",requestId:a,action:t,payload:n,timestamp:Date.now()},e),setTimeout(()=>{C.delete(a)&&r(new Error("Host request timed out: "+t))},1e4)})}let S=0;let L=!1;function F(){if(L)return;const e="undefined"!=typeof PDFViewerApplication?PDFViewerApplication:null,t=e&&e.externalServices;if(!t||"function"!=typeof t.createSignatureStorage)return;L=!0;const n=t.createSignatureStorage.bind(t);t.createSignatureStorage=(e,t)=>{const o=n(e,t);return{async getAll(){if(!V)return o.getAll();try{const e=await B("signature-storage-get-all",null);return new Map(Object.entries(e||{}))}catch(e){return p("signatureStorage getAll failed: "+e.message,"warn"),new Map}},async size(){return V?(await this.getAll()).size:o.size()},async isFull(){return V?await this.size()>=5:o.isFull()},async create(e){if(!V)return o.create(e);try{if(await this.isFull())return null;const t=function(){if("undefined"!=typeof crypto&&crypto.randomUUID)return crypto.randomUUID();if("undefined"!=typeof crypto&&crypto.getRandomValues){const e=crypto.getRandomValues(new Uint8Array(8));let t="";for(let n=0;n<e.length;n++)t+=e[n].toString(16).padStart(2,"0");return"sig-"+t}return"sig-"+Date.now().toString(36)+"-"+(++S).toString(36)}();return await B("signature-storage-save",{uuid:t,data:e}),t}catch(e){return p("signatureStorage save failed: "+e.message,"warn"),null}},async delete(e){if(!V)return o.delete(e);try{return await B("signature-storage-delete",{uuid:e}),!0}catch(e){return p("signatureStorage delete failed: "+e.message,"warn"),!1}}}}}function I(e){let t=0;try{for(const n of e){const e=n&&n[1];e&&!0===e.isClone&&"function"!=typeof e.serialize&&t++}}catch(e){}return t}function O(e){const t=[e[4],e[5]];for(let n=6;n+5<e.length;n+=6)t.push(e[n+4],e[n+5]);return t}function R(e){const t={};for(const n of Object.keys(e))"__proto__"!==n&&"constructor"!==n&&"prototype"!==n&&(t[n]=e[n]);return!0===t.isSignature&&!t.paths&&Array.isArray(t.lines)&&(t.paths={lines:t.lines,points:t.lines.map(O)}),t}function M(e,t){const o=PDFViewerApplication;var r;if(o)try{switch(e){case"show-download":g("downloadButton","secondaryDownload",t);break;case"show-print":g("printButton","secondaryPrint",t);break;case"show-fullscreen":g("presentationMode",null,t);break;case"show-find":g("viewFindButton",null,t);break;case"show-bookmark":g("viewBookmark",null,t);break;case"show-openfile":g("openFile","secondaryOpenFile",t);break;case"show-annotations":!function(e){const t=PDFViewerApplication;try{const n=e?0:-1;t?.eventBus&&t?.pdfViewer?.pdfDocument&&t.pdfViewer.annotationEditorMode!==n&&t.eventBus.dispatch("switchannotationeditormode",{source:null,mode:n})}catch(e){}m("editorModeButtons",e),m("editorModeSeparator",e)}(t);break;case"set-toolbar-density":{const e=document.getElementById("toolbarContainer");if(e){e.classList.remove("density-default","density-compact","density-comfortable");const n="string"==typeof t?t:"default";e.classList.add(`density-${n}`)}break}case"set-sidebar-width":{const e=document.getElementById("outerContainer");e&&"string"==typeof t&&""!==t.trim()&&e.style.setProperty("--ng2-sidebar-width",t);break}case"set-toolbar-position":{const e=document.getElementById("outerContainer");e&&(e.classList.remove("toolbar-bottom"),"bottom"===t&&e.classList.add("toolbar-bottom"));break}case"set-sidebar-position":{const e=document.getElementById("outerContainer");e&&(e.classList.remove("sidebar-right"),"right"===t&&e.classList.add("sidebar-right"));break}case"set-responsive-breakpoint":{const e="number"==typeof t?`${t}px`:`${t}`,n=document.getElementById("outerContainer");n&&e&&n.style.setProperty("--ng2-responsive-breakpoint",e);break}case"show-toolbar-left":f("toolbarViewerLeft",t);break;case"show-toolbar-middle":f("toolbarViewerMiddle",t);break;case"show-toolbar-right":f("toolbarViewerRight",t);break;case"show-secondary-toolbar-toggle":m("secondaryToolbarToggle",t);break;case"show-sidebar":m("viewsManager",t),m("viewsManagerToggleButton",t);break;case"show-sidebar-left":m("viewsManagerSelector",t);break;case"show-sidebar-right":m("viewsManagerCurrentOutlineButton",t);break;case"set-zoom":!function(e){const t=PDFViewerApplication;if(!t||!t.pdfViewer||!t.eventBus)return void p("PDFViewerApplication, pdfViewer, or eventBus not ready for zoom update","warn");if(!t.isInitialViewSet&&"undefined"!=typeof PDFViewerApplicationOptions)try{return void PDFViewerApplicationOptions.set("defaultZoomValue",String(e))}catch(e){}c.markZoomCommandStart();try{if(["auto","page-actual","page-fit","page-width","page-height"].includes(e))return void t.eventBus.dispatch("scalechanged",{source:t.toolbar,value:e});const n=Number(e);if(!isNaN(n)&&n>0)return void t.eventBus.dispatch("scalechanged",{source:t.toolbar,value:e});p(`Invalid zoom value: ${e}`,"warn")}finally{c.markZoomCommandEnd()}}(t);break;case"set-cursor":!function(e){const t=PDFViewerApplication;try{const n=e?e.toUpperCase():"SELECT";let o=0;switch(n){case"HAND":case"H":o=1;break;case"SELECT":case"S":o=0;break;case"ZOOM":case"Z":o=2;break;default:p(`Unknown cursor tool: ${n}, defaulting to SELECT`,"warn"),o=0}t.eventBus&&"function"==typeof t.eventBus.dispatch?t.eventBus.dispatch("switchcursortool",{tool:o}):p("EventBus not available for cursor update","warn")}catch(e){p(`Error updating cursor: ${e.message}`,"error")}}(t);break;case"set-scroll":E.updateModeViaEventBus("switchscrollmode",t,{VERTICAL:0,V:0,HORIZONTAL:1,H:1,WRAPPED:2,W:2,PAGE:3,P:3},"scroll mode");break;case"set-spread":E.updateModeViaEventBus("switchspreadmode",t,{NONE:0,N:0,ODD:1,O:1,EVEN:2,E:2},"spread mode");break;case"set-page":const a=parseInt(t,10);a>0&&a<=PDFViewerApplication.pagesCount?PDFViewerApplication.isInitialViewSet?PDFViewerApplication.page=a:PDFViewerApplication.initialBookmark=`page=${a}`:p(`Invalid page number: ${t}`,"warn");break;case"set-rotation":const i=parseInt(t,10);[0,90,180,270].includes(i)?PDFViewerApplication.pdfViewer.pagesRotation=i:p(`Invalid rotation: ${t}`,"warn");break;case"go-to-last-page":if(!0===t){const e=PDFViewerApplication.pagesCount;PDFViewerApplication.page=e}break;case"go-to-named-dest":if(!t||"string"!=typeof t||""===t.trim()){p(`Skipping invalid named destination: "${t}"`);break}PDFViewerApplication.pdfLinkService.goToDestination(t);break;case"update-page-mode":const s=t?t.toLowerCase():"none";PDFViewerApplication.eventBus.dispatch("pagemode",{mode:s});break;case"set-download-filename":!function(e){try{if(e&&PDFViewerApplication){const t=e.endsWith(".pdf")?e:`${e}.pdf`;PDFViewerApplication._contentDispositionFilename=t}else p("Cannot set download filename - invalid filename or PDFViewerApplication not available","warn")}catch(e){p(`Error setting download filename: ${e.message}`,"error")}}(t);break;case"trigger-download":!0===t&&PDFViewerApplication.eventBus.dispatch("download");break;case"trigger-print":!0===t&&PDFViewerApplication.eventBus.dispatch("print");break;case"trigger-rotate-cw":!0===t&&PDFViewerApplication.eventBus.dispatch("rotatecw");break;case"trigger-rotate-ccw":!0===t&&PDFViewerApplication.eventBus.dispatch("rotateccw");break;case"set-external-link-target":{const e={none:0,self:1,blank:2,parent:3,top:4},n="string"==typeof t?t.toLowerCase():"blank";n in e&&PDFViewerApplication.pdfLinkService?PDFViewerApplication.pdfLinkService.externalLinkTarget=e[n]:p(`Invalid external link target: ${t}`,"warn");break}case"set-remember-last-view":"undefined"!=typeof PDFViewerApplicationOptions&&PDFViewerApplicationOptions.set("viewOnLoad",!1===t?1:0);break;case"set-css-zoom":!function(e){try{"undefined"!=typeof PDFViewerApplicationOptions&&PDFViewerApplicationOptions&&(null===ne&&(ne=PDFViewerApplicationOptions.get("maxCanvasPixels")),PDFViewerApplicationOptions.set("maxCanvasPixels",!0===e?0:ne))}catch(e){p(`Error setting CSS zoom: ${e.message}`,"error")}}(t);break;case"set-theme":!function(e){re=e||"light";const t=document.body;if(t){if(t.classList.remove("ng2-theme-light","ng2-theme-dark","ng2-theme-auto","ng2-theme-dark-active","ng2-theme-light-active"),t.classList.add(`ng2-theme-${re}`),"auto"===re){const e=window.matchMedia("(prefers-color-scheme: dark)").matches?"ng2-theme-dark-active":"ng2-theme-light-active";if(t.classList.add(e),!window.ng2ThemeMediaListener){const e=window.matchMedia("(prefers-color-scheme: dark)");e.addListener(e=>{if("auto"===re){t.classList.remove("ng2-theme-dark-active","ng2-theme-light-active");const n=e.matches?"ng2-theme-dark-active":"ng2-theme-light-active";t.classList.add(n)}}),window.ng2ThemeMediaListener=e}}t.offsetHeight}}(t);break;case"set-primary-color":ie("--ng2-primary-color",t);break;case"set-background-color":!function(e){ie("--ng2-background-color",e)}(t);break;case"set-page-border-color":!function(e){ie("--ng2-page-border-color",e)}(t);break;case"set-page-spacing":t&&function(e,t,n){void 0!==e&&ie("--page-margin",e);void 0!==t&&ie("--spreadHorizontalWrapped-margin-LR",t);void 0!==n&&ie("--page-border",n)}(t.margin,t.spreadMargin,t.border);break;case"set-toolbar-color":!function(e){ie("--ng2-toolbar-color",e)}(t);break;case"set-text-color":!function(e){ie("--ng2-text-color",e)}(t);break;case"set-border-radius":ie("--ng2-border-radius",t);break;case"set-custom-css":"string"==typeof t?ae(t,null):t&&"object"==typeof t&&ae(t.css,t.nonce);break;case"set-diagnostic-logs":u=t;break;case"set-url-validation":n=!0===t,p("URL validation "+(n?"enabled":"disabled"));break;case"set-annotation-editor-mode":{const e={disable:-1,none:0,freetext:3,highlight:9,stamp:13,ink:15,signature:101,comment:102},n="string"==typeof t?t.toLowerCase():"none";if(!(n in e))throw new Error(`Invalid annotation editor mode: ${t}`);o.eventBus.dispatch("switchannotationeditormode",{source:null,mode:e[n]});break}case"set-highlight-editor-colors":"string"==typeof t&&""!==t.trim()&&"undefined"!=typeof PDFViewerApplicationOptions&&PDFViewerApplicationOptions.set("highlightEditorColors",t);break;case"get-annotations":{const e=o.pdfDocument&&o.pdfDocument.annotationStorage;if(!e)throw new Error("No document loaded");const t=e.serializable,n=(t&&t.map?Array.from(t.map.values()):[]).filter(e=>e&&"number"==typeof e.pageIndex);return JSON.parse(JSON.stringify(n,(e,t)=>{if(!("object"==typeof t&&null!==t&&"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap))return ArrayBuffer.isView(t)?Array.from(t):t}))}case"set-signature-storage":V=!0===t;break;case"set-annotations":if(!o.pdfDocument)throw new Error("No document loaded");return function(e){const t=PDFViewerApplication,n=t.pdfDocument.annotationStorage,o=t.pdfViewer&&t.pdfViewer._layerProperties,r=o&&o.annotationEditorUIManager;if(!r||"function"!=typeof r.getId||"function"!=typeof r.findClonesForPage)throw new Error("Annotation editor is not initialized - cannot restore annotations");const a=new Set,i=I(n);let s=0,c=0;for(const o of e){if(!o||!Number.isInteger(o.pageIndex)||o.pageIndex<0||o.pageIndex>=t.pagesCount){c++;continue}const e=R(o),i=r.getId();n.setValue(i,Object.assign(e,{id:i,isCopy:!0,isClone:!0})),a.add(e.pageIndex),s++}const d=[];for(const e of a){const n=t.pdfViewer.getPageView(e),o=n&&n.annotationEditorLayer,a=o&&o.annotationEditorLayer;a&&a.div&&d.push(Promise.resolve(r.findClonesForPage(a)).then(()=>{a.div.hidden=a.isEmpty}).catch(()=>{}))}return Promise.all(d).then(()=>{const e=Math.max(0,I(n)-i);return{restored:Math.max(0,s-e),pending:e,rejected:c}})}(Array.isArray(t)?t:[]);case"save-document":if(!o.pdfDocument)throw new Error("No document loaded");return o.pdfDocument.saveDocument().then(e=>({bytes:e,filename:o._contentDispositionFilename||"document.pdf"}));case"show-toolbar":{const e=document.getElementById("outerContainer");e&&e.classList.toggle("ng2-toolbar-hidden",!1===t);break}case"get-document-text":return N(t||{});case"read-aloud":return function(e){const t=window.speechSynthesis;if(!t)return Promise.reject(new Error("Speech synthesis not supported in this browser"));const n=e.command||"start";switch(n){case"start":t.cancel(),t.resume(),$.active=!0,$.session++,$.rate="number"==typeof e.rate?e.rate:1;q(Math.max(1,e.fromPage||PDFViewerApplication.page||1),$.session);break;case"pause":t.pause(),T("paused");break;case"resume":t.resume(),T("reading");break;case"stop":$.active=!1,$.session++,t.cancel(),t.resume(),x(),T("stopped");break;default:return Promise.reject(new Error(`Unknown read-aloud command: ${n}`))}return Promise.resolve({status:n,page:$.page})}(t||{});case"get-form-data":return W();case"set-form-data":return Z(t||{});case"set-form-field":if(!t||"string"!=typeof t.name)throw new Error("set-form-field requires { name, value }");return Z({[t.name]:t.value});case"set-content-protection":!function(e){G.blockPrint=!0===e.blockPrint,G.blockDownload=!0===e.blockDownload;const t=document.getElementById("viewerContainer");t&&t.classList.toggle("ng2-no-text-select",!0===e.disableTextSelection)}(t||{});break;case"set-watermark":K=(r=t)&&"string"==typeof r.text&&""!==r.text.trim()?r:null,document.querySelectorAll(".ng2-watermark").forEach(e=>e.remove()),K&&document.querySelectorAll(".pdfViewer .page").forEach(e=>X(e));break;case"search":return function(e){const t=PDFViewerApplication;if(!t.pdfDocument)return Promise.reject(new Error("No document loaded"));const n="string"==typeof e?{query:e}:e||{};if(!n.query||"string"==typeof n.query&&""===n.query.trim())return Promise.reject(new Error("Search query is required"));return Q={source:null,type:"",query:n.query,caseSensitive:!0===n.caseSensitive,entireWord:!0===n.entireWord,highlightAll:!1!==n.highlightAll,matchDiacritics:!0===n.matchDiacritics,findPrevious:!1},ee(Q)}(t);case"search-next":return te(!1);case"search-previous":return te(!0);case"clear-search":o.eventBus.dispatch("findbarclose",{source:null}),Q=null;break;case"configure":{const e=[];for(const n of Array.isArray(t)?t:[])try{M(n.action,n.payload)}catch(t){e.push(n.action)}if(e.length>0)throw new Error(`configure failed for: ${e.join(", ")}`);break}default:if(e.startsWith("enable-")){const n=e.slice(7).replace(/-([a-z])/g,(e,t)=>t.toUpperCase());if(n in oe){oe[n]=!0===t,"idle"===n&&(!0===t?fe():me());break}}e.startsWith("set-error-")||p(`Unknown action: ${e}`,"warn")}}catch(t){throw p(`Error in updateControl for action ${e}: ${t.message}`,"error"),t}else p("PDFViewerApplication not available","error")}function N(e){const t=PDFViewerApplication.pdfDocument;if(!t)return Promise.reject(new Error("No document loaded"));const n=Math.max(1,e.from||1),o=Math.min(t.numPages,e.to||t.numPages),r=[];for(let e=n;e<=o;e++)r.push(t.getPage(e).then(t=>t.getTextContent().then(t=>({page:e,text:t.items.map(e=>e.str).join(" ").replace(/\s+/g," ").trim()}))));return Promise.all(r)}const $={active:!1,page:0,rate:1,highlighted:[],session:0};function T(e,t){v("readAloudStateChange",{status:e,page:$.page,sentence:t||void 0})}function x(){for(const e of $.highlighted)e.classList.remove("ng2-tts-current");$.highlighted=[]}function U(e){const t=PDFViewerApplication,n=t.pdfViewer&&t.pdfViewer.getPageView(e-1),o=n&&n.textLayer;return o&&o.div||null}const _=/[^.!?]+[.!?]+["')\]]*\s*|[^.!?]+$/g;function j(e){return $.active&&$.session===e}function z(e,t,n,o){if(!j(o))return;if(n>=t.length)return x(),void q(e+1,o);const r=t[n];x();for(const e of r.els)e.classList.add("ng2-tts-current");$.highlighted=r.els.slice();const a=new SpeechSynthesisUtterance(r.text);a.rate=$.rate,a.onend=()=>{j(o)&&z(e,t,n+1,o)},a.onerror=e=>{const t=e&&e.error;j(o)&&"interrupted"!==t&&"canceled"!==t&&($.active=!1,x(),T("error"))},T("reading",r.text),window.speechSynthesis.speak(a)}function q(e,t){const n=PDFViewerApplication;if(j(t)){if(!n.pdfDocument||e>n.pagesCount)return $.active=!1,x(),void T("finished");$.page=e,n.page!==e&&(n.page=e),function(e,t){const n=U(e);return n&&n.childNodes.length>0?Promise.resolve(n):new Promise(n=>{const o=PDFViewerApplication;let r=!1;const a=()=>{r||(r=!0,o.eventBus.off("textlayerrendered",i),n(U(e)))},i=t=>{t&&t.pageNumber===e&&a()};o.eventBus.on("textlayerrendered",i),setTimeout(a,t)})}(e,1500).then(n=>{if(j(t)){if(n){const o=function(e){let t="";const n=[];for(const o of e){const e=t.length;t+=o.textContent,n.push({start:e,end:t.length,el:o}),t+=" "}const o=[];let r;for(;null!==(r=_.exec(t));){const e=r[0].replace(/\s+/g," ").trim();if(!e)continue;const t=r.index,a=r.index+r[0].length,i=[];for(const e of n)e.start<a&&e.end>t&&i.push(e.el);o.push({text:e,els:i})}return o}(function(e){const t=[];return e.querySelectorAll("span").forEach(e=>{if(e.firstElementChild)return;const n=e.textContent;n&&""!==n.trim()&&t.push(e)}),t}(n));return 0===o.length?void q(e+1,t):void z(e,o,0,t)}N({from:e,to:e}).then(n=>{if(!j(t))return;const o=n[0]&&n[0].text;if(!o)return void q(e+1,t);const r=function(e){const t=[];let n;for(;null!==(n=_.exec(e));){const e=n[0].replace(/\s+/g," ").trim();e&&t.push({text:e,els:[]})}return t}(o);0!==r.length?z(e,r,0,t):q(e+1,t)}).catch(()=>{j(t)&&($.active=!1,x(),T("error"))})}})}}function W(){const e=PDFViewerApplication;return e.pdfDocument?e.pdfDocument.getFieldObjects().then(t=>{const n=e.pdfDocument.annotationStorage,o={};for(const e of Object.keys(t||{}))for(const r of t[e]){let t=r.value;try{const e=n.getRawValue(r.id);e&&void 0!==e.value&&(t=e.value)}catch(e){}o[e]=void 0===t?null:t}return o}):Promise.reject(new Error("No document loaded"))}function Z(e){const t=PDFViewerApplication;return t.pdfDocument?t.pdfDocument.getFieldObjects().then(n=>{if(!n)throw new Error("Document has no form fields");const o=t.pdfDocument.annotationStorage,r=[];let a=0;for(const t of Object.keys(e)){const i=n[t];if(i){for(const n of i)H(o,n,e[t]);a++}else r.push(t)}return r.length>0&&p(`Unknown form fields ignored: ${r.join(", ")}`,"warn"),{applied:a,unknown:r}}):Promise.reject(new Error("No document loaded"))}function H(e,t,n){const o=document.querySelector(`[data-annotation-id="${t.id}"]`),r=o&&o.querySelector("input, textarea, select");if("checkbox"===t.type){const o=!0===n||"true"===n||"string"==typeof n&&"false"!==n&&n===t.exportValues;r&&"checkbox"===r.type?(r.checked=o,r.dispatchEvent(new Event("change",{bubbles:!0}))):e.setValue(t.id,{value:o})}else if("radiobutton"===t.type){const o=n===t.exportValues;r&&"radio"===r.type?o&&(r.checked=!0,r.dispatchEvent(new Event("change",{bubbles:!0}))):e.setValue(t.id,{value:o})}else r?(r.value=null==n?"":String(n),r.dispatchEvent(new Event("input",{bubbles:!0})),r.dispatchEvent(new Event("change",{bubbles:!0}))):e.setValue(t.id,{value:null==n?"":String(n)})}let Y=null;function J(e){const t=e.target;t&&t.closest&&t.closest(".annotationLayer")&&(clearTimeout(Y),Y=setTimeout(()=>{W().then(e=>h("formData",e,"user"),()=>{})},150))}const G={blockPrint:!1,blockDownload:!1};window.addEventListener("keydown",function(e){if(!e.ctrlKey&&!e.metaKey)return;const t=(e.key||"").toLowerCase();(G.blockPrint&&"p"===t||G.blockDownload&&"s"===t)&&(e.preventDefault(),e.stopPropagation())},!0);let K=null;function X(e){if(!K||e.querySelector(".ng2-watermark"))return;const t=document.createElement("div");t.className="ng2-watermark";const n=document.createElement("span");n.textContent=K.text,K.color&&t.style.setProperty("--ng2-watermark-color",K.color),void 0!==K.opacity&&t.style.setProperty("--ng2-watermark-opacity",String(K.opacity)),K.fontSize&&t.style.setProperty("--ng2-watermark-font-size",K.fontSize),void 0!==K.rotation&&t.style.setProperty("--ng2-watermark-rotation",`${K.rotation}deg`),t.appendChild(n),e.appendChild(t)}let Q=null;function ee(e){const t=PDFViewerApplication;return new Promise((n,o)=>{let r=!1,a=null;const i=()=>{t.eventBus.off("updatefindcontrolstate",c),t.eventBus.off("updatefindmatchescount",c),clearTimeout(a),clearTimeout(d)},s=()=>{r||(r=!0,i(),n(function(){const e=PDFViewerApplication.findController,t=e&&e.pageMatches?e.pageMatches.map(e=>e?e.length:0):[],n=[];for(let e=0;e<t.length;e++)t[e]>0&&n.push(e+1);const o=e&&e.selected?e.selected:null;return{total:t.reduce((e,t)=>e+t,0),current:o&&o.pageIdx>=0?{page:o.pageIdx+1,matchIndex:o.matchIdx}:null,matchesPerPage:t,pagesWithMatches:n}}()))},c=()=>{clearTimeout(a),a=setTimeout(s,300)},d=setTimeout(s,1e4);t.eventBus.on("updatefindcontrolstate",c),t.eventBus.on("updatefindmatchescount",c),a=setTimeout(s,900);try{t.eventBus.dispatch("find",e)}catch(e){r=!0,i(),o(e)}})}function te(e){if(!Q)return Promise.reject(new Error("No active search - call search() first"));return ee(Object.assign({},Q,{type:"again",findPrevious:!0===e}))}let ne=null;const oe={beforePrint:!1,afterPrint:!1,pagesLoaded:!1,pageChange:!1,documentError:!0,documentInit:!1,pagesInit:!1,presentationModeChanged:!1,openFile:!1,find:!1,updateFindMatchesCount:!1,metadataLoaded:!1,outlineLoaded:!1,pageRendered:!1,annotationLayerRendered:!1,bookmarkClick:!1,idle:!1,sidebarViewChanged:!1,layersChanged:!1,namedAction:!1,documentProperties:!1};let re="light";function ae(e,t){const n=document.getElementById("ng2-custom-css");if(n&&n.remove(),e){const n=document.createElement("style");n.id="ng2-custom-css",n.textContent=e,t&&n.setAttribute("nonce",t),document.head.appendChild(n)}}function ie(e,t){t?(document.documentElement.style.setProperty(e,t),document.body.style.setProperty(e,t)):(document.documentElement.style.removeProperty(e),document.body.style.removeProperty(e))}let se=!1;let ce=!1;let de=null,le=!1,ue=[];const pe=3e4;function ge(){de&&(clearTimeout(de),de=null),oe.idle&&(de=setTimeout(()=>{v("idle",null)},pe))}function me(){de&&(clearTimeout(de),de=null),ue.forEach(({element:e,event:t,handler:n,options:o})=>{e.removeEventListener(t,n,o)}),ue=[],le=!1,p("Idle detection cleanup completed")}function fe(){if(le)return void p("Idle detection already setup, skipping");le=!0;const e=(e,t,n,o)=>{e.addEventListener(t,n,o),ue.push({element:e,event:t,handler:n,options:o})};e(document,"mousemove",ge,{passive:!0}),e(document,"mousedown",ge,{passive:!0}),e(document,"click",ge,{passive:!0}),e(document,"keydown",ge,{passive:!0}),e(document,"keypress",ge,{passive:!0}),e(document,"scroll",ge,{passive:!0}),e(document,"wheel",ge,{passive:!0}),e(document,"touchstart",ge,{passive:!0}),e(document,"touchmove",ge,{passive:!0}),ge();e(window,"beforeunload",()=>{me()},{passive:!0})}let we=!1;function he(e){if(we)p("Bookmark click interception already setup, skipping");else if(e&&e.pdfOutlineViewer&&e.pdfOutlineViewer._bindLink){const t=e.pdfOutlineViewer._bindLink;e.pdfOutlineViewer._bindLink=function(e,n){if(t.call(this,e,n),oe.bookmarkClick){const t=e.onclick;e.onclick=function(o){const r={title:e.textContent?.trim()||"Unknown",dest:n.dest||null,action:n.action||void 0,url:n.url||void 0,pageNumber:void 0,isCurrentItem:e.classList.contains("currentTreeItem")};return p(`Bookmark clicked: ${r.title}`),v("bookmarkClick",r),!!t&&t.call(this,o)}}},we=!0}else if(e&&e.eventBus){const t=()=>{we||he(e)};e.eventBus.on("outlineloaded",t),p("Bookmark click interception deferred until outline loads")}else p("Unable to setup bookmark click interception - event bus not available","warn")}window.addEventListener("load",()=>{l===d.NOT_LOADED&&"undefined"!=typeof PDFViewerApplication&&k()})}();
|
|
1
|
+
!function(){"use strict";const e="/";let t=null,n=!0;try{const e=new URLSearchParams(window.location.search),o=e.get("urlValidation");if(null!==o){const e=String(o).toLowerCase();n=!("0"===e||"false"===e||"off"===e)}t=e.get("file")}catch(e){}function o(){if(!n||!t)return!0;return new URLSearchParams(window.location.search).get("file")===t||(p(`Security warning: ${o="Unauthorized file access detected. The file URL has been tampered with."}`,"warn"),window.parent&&window.parent!==window&&window.parent.postMessage({type:"ng2-pdfjs-viewer-security-warning",message:o,originalUrl:t,currentUrl:new URLSearchParams(window.location.search).get("file")},e),!1);var o}window.addEventListener("hashchange",o),window.addEventListener("popstate",o);const r=new Set(["enableSignatureEditor","enableComment","enableXfa","enableScripting","enablePermissions","enableAutoLinking","enableHighlightFloatingButton","forcePageColors","pageColorsBackground","pageColorsForeground","highlightEditorColors","defaultZoomValue","viewOnLoad","sidebarViewOnLoad","scrollModeOnLoad","spreadModeOnLoad","cursorToolOnLoad","printResolution","maxCanvasPixels","textLayerMode","disablePageLabels","ignoreDestinationZoom","historyUpdateUrl","disableHistory","enableMerge","enableSplitMerge","enableUpdatedAddImage"]);let a=!1;function i(){if(!a&&"undefined"!=typeof PDFViewerApplicationOptions){a=!0;try{const e=new URLSearchParams(window.location.search).get("pjsOptions");if(!e)return;const t=JSON.parse(e);for(const e of Object.keys(t)){const n=t[e],o=["string","number","boolean"].includes(typeof n);r.has(e)&&o?PDFViewerApplicationOptions.set(e,n):p(`Ignoring pjsOptions key outside allowlist: ${e}`,"warn")}}catch(e){p(`Failed to apply init-time options: ${e.message}`,"error")}}}const s=e=>{e.detail&&e.detail.source&&e.detail.source!==window||(i(),F(),k())};document.addEventListener("webviewerloaded",s);try{window.parent!==window&&window.parent.document&&(window.parent.document.addEventListener("webviewerloaded",s),window.addEventListener("pagehide",()=>{try{window.parent.document.removeEventListener("webviewerloaded",s)}catch(e){}}))}catch(e){}document.addEventListener("DOMContentLoaded",()=>{"undefined"!=typeof PDFViewerApplication&&(i(),F(),k())});const c={activeZoomCommand:!1,markZoomCommandStart(){this.activeZoomCommand=!0},markZoomCommandEnd(){this.activeZoomCommand=!1},isZoomCommandActive(){return this.activeZoomCommand}},d={NOT_LOADED:0,VIEWER_LOADED:1,VIEWER_INITIALIZED:2,EVENTBUS_READY:3,COMPONENTS_READY:4,DOCUMENT_LOADED:5};let l=d.NOT_LOADED,u=!1;function p(e,t="info"){if(!u)return;const n=(new Date).toISOString(),o="[PostMessage]";switch(t){case"error":console.error(`${o} ${n} ERROR: ${e}`);break;case"warn":console.warn(`${o} ${n} WARN: ${e}`);break;default:console.log(`${o} ${n} INFO: ${e}`)}}function g(e,t,n){const o=t?[e,t]:[e];for(const e of o){const t=document.getElementById(e);t&&(t.classList.toggle("hidden",!n),t.classList.toggle("ng2-btn-hidden",!n))}}function m(e,t){const n=document.getElementById(e);n?n.classList.toggle("hidden",!t):p(`Element not found for visibility toggle: ${e}`,"warn")}function f(e,t){const n=document.getElementById(e);n?n.classList.toggle("ng2-hidden-section",!t):p(`Toolbar section not found for visibility toggle: ${e}`,"warn")}function w(t){t<=l||(p(`Readiness state changed: ${l} → ${t}`),l=t,l>=d.EVENTBUS_READY&&function(){P||(P=!0,window.addEventListener("message",D),window.Ng2PdfJsViewerAPI={updateControl:M,getState:b,isReady:()=>l>=d.EVENTBUS_READY,getReadiness:()=>l},function(){const e=PDFViewerApplication;if(!e||!e.eventBus)return;if(function(){if(se)return;const e=PDFViewerApplication;if(!e||!e.eventBus)return void p("Cannot setup error listeners: EventBus not available","warn");e.eventBus.on("documenterror",e=>{p(`🔴 DOCUMENT ERROR EVENT FIRED: ${e.message}`,"error"),h("loading",!1,"system");if(h("error",e.message||"An error occurred while loading the PDF.","system"),oe.documentError){p(`Document error event received: ${e.message}`);v("documentError",{message:e.message||"Unknown document error",source:e.source?"PDFViewerApplication":"unknown",name:e.name||"DocumentError"})}}),e.eventBus.on("loaderror",e=>{p(`🔴 LOAD ERROR EVENT FIRED: ${e.message}`,"error"),h("loading",!1,"system")}),e.eventBus.on("error",e=>{p(`🔴 GENERIC ERROR EVENT FIRED: ${e.message}`,"error"),h("loading",!1,"system")}),se=!0,p("Error event listeners set up successfully","info")}(),e.eventBus.on("documentinit",()=>h("loading",!0,"system")),e.eventBus.on("pagesinit",()=>h("loading",!0,"system")),e.eventBus.on("pagerendered",()=>h("loading",!1,"system")),e.eventBus.on("pagesloaded",()=>h("loading",!1,"system")),e.eventBus.on("documentloaded",()=>{w(d.DOCUMENT_LOADED),function(){if(ce)return;window.addEventListener("error",e=>{p(`🔴 GLOBAL ERROR: ${e.message}`,"error"),h("loading",!1,"system")}),window.addEventListener("unhandledrejection",e=>{p(`🔴 UNHANDLED PROMISE REJECTION: ${e.reason}`,"error"),h("loading",!1,"system")}),ce=!0;const e=PDFViewerApplication;if(!e||!e.eventBus)return void p("Cannot setup bidirectional listeners: EventBus not available","warn");e.eventBus&&(e.eventBus.on("scalechanging",t=>{if(c.isZoomCommandActive())return void p("Skipping zoom notification - programmatic change from our command");let n,o=!1;t.presetValue&&"string"==typeof t.presetValue?(o=!0,n=t.presetValue):"number"!=typeof t.scale||t.presetValue||(p("Assuming user-initiated scale change (mouse wheel, etc.)"),o=!0,n=function(e,t){if("string"==typeof e)return e;if(t?.pdfViewer){const n=t.pdfViewer;if(["page-fit","page-width","page-actual","auto"].includes(n.currentScaleValue))return n.currentScaleValue;const o={.5:"0.5",.75:"0.75",1:"1",1.25:"1.25",1.5:"1.5",2:"2",3:"3",4:"4"};for(const[t,n]of Object.entries(o))if(Math.abs(e-parseFloat(t))<.01)return n}return"number"==typeof e?`${Math.round(100*e)}%`:"auto"}(t.scale,e)),o?h("zoom",n,"user"):p("Skipping zoom notification - not identified as user-initiated")}),e.eventBus.on("switchscrollmode",e=>{const t={0:"vertical",1:"horizontal",2:"wrapped",3:"page"}[e.mode]||"vertical";p(`Scroll mode changed via event to: ${t}`),h("scroll",t,"user")}),e.eventBus.on("switchspreadmode",e=>{const t={0:"none",1:"odd",2:"even"}[e.mode]||"none";p(`Spread mode changed via event to: ${t}`),h("spread",t,"user")}),e.eventBus.on("switchcursortool",e=>{const t={0:"select",1:"hand",2:"zoom"}[e.tool]||"select";p(`Cursor changed via event to: ${t}`),h("cursor",t,"user")}),e.eventBus.on("sidebarviewchanged",e=>{const t={0:"none",1:"thumbs",2:"bookmarks",3:"attachments",4:"layers"}[e.view]||"none";p(`Page mode changed via event to: ${t}`),h("pageMode",t,"user")}),e.eventBus.on("rotationchanging",e=>{p(`Rotation changed via event to: ${e.pagesRotation}`),h("rotation",e.pagesRotation,"user")}),e.eventBus.on("documentinit",e=>{oe.documentInit&&v("documentInit",null)}),e.eventBus.on("pagesinit",t=>{if(oe.pagesInit){v("pagesInit",{pagesCount:e.pagesCount||0})}}),e.eventBus.on("presentationmodechanged",e=>{if(oe.presentationModeChanged){v("presentationModeChanged",{active:3===e.state,switchInProgress:2===e.state})}}),e.eventBus.on("fileinputchange",e=>{oe.openFile&&v("openFile",null)}),e.eventBus.on("find",e=>{if(oe.find){v("find",{query:e.query||"",phraseSearch:!1,caseSensitive:e.caseSensitive||!1,entireWord:e.entireWord||!1,highlightAll:e.highlightAll||!1,findPrevious:e.findPrevious||!1})}}),e.eventBus.on("updatefindmatchescount",e=>{if(oe.updateFindMatchesCount){v("updateFindMatchesCount",{current:e.matchesCount?.current||0,total:e.matchesCount?.total||0})}}),e.eventBus.on("metadataloaded",t=>{if(oe.metadataLoaded){const t=e.documentInfo;v("metadataLoaded",{title:t?.Title,author:t?.Author,subject:t?.Subject,keywords:t?.Keywords,creator:t?.Creator,producer:t?.Producer,creationDate:t?.CreationDate,modificationDate:t?.ModDate,pdfFormatVersion:t?.PDFFormatVersion,isLinearized:t?.IsLinearized,isAcroFormPresent:t?.IsAcroFormPresent,isXFAPresent:t?.IsXFAPresent,isCollectionPresent:t?.IsCollectionPresent})}}),e.eventBus.on("outlineloaded",e=>{if(oe.outlineLoaded){v("outlineLoaded",{items:[],hasOutline:(e.outlineCount||0)>0})}}),e.eventBus.on("pagerendered",e=>{if(oe.pageRendered){v("pageRendered",{pageNumber:e.pageNumber||1,timestamp:Date.now()})}}),e.eventBus.on("sidebarviewchanged",e=>{if(oe.sidebarViewChanged){v("sidebarViewChanged",{view:{0:"none",1:"thumbs",2:"outline",3:"attachments",4:"layers"}[e.view]||"unknown"})}}),e.eventBus.on("layersloaded",e=>{oe.layersChanged&&v("layersChanged",{reason:"loaded",layersCount:e.layersCount||0})}),e.eventBus.on("optionalcontentconfigchanged",()=>{oe.layersChanged&&v("layersChanged",{reason:"changed"})}),e.eventBus.on("namedaction",e=>{oe.namedAction&&v("namedAction",{action:e.action||""})}),e.eventBus.on("documentproperties",()=>{oe.documentProperties&&v("documentProperties",{})}),e.eventBus.on("annotationlayerrendered",e=>{if(oe.annotationLayerRendered){v("annotationLayerRendered",{pageNumber:e.pageNumber||1,error:e.error||null,timestamp:Date.now()})}}),e.eventBus.on("documentloaded",ge));!function(e){oe.idle&&fe();he(e)}(e)}()}),e.eventBus.on("pagesloaded",()=>{l<d.COMPONENTS_READY&&w(d.COMPONENTS_READY)}),function(){document.addEventListener("change",J,!0),document.addEventListener("input",J,!0)}(),e.eventBus.on("pagesedited",t=>{v("pagesEdited",{operation:t&&(t.type||t.operation)||"edit",pagesCount:e.pagesCount})}),e.eventBus.on("pagerendered",e=>{K&&e&&e.source&&e.source.div&&X(e.source.div)}),!window._ng2PrintWrapped){window._ng2PrintWrapped=!0;const e=window.print.bind(window);window.print=function(){G.blockPrint?p("Printing blocked by content protection","warn"):e()}}e.eventBus.on("editingstateschanged",e=>{const t=e&&e.details||e||{};v("annotationEditorStateChange",{isEditing:!0===t.isEditing,isEmpty:!0===t.isEmpty,hasSomethingToUndo:!0===t.hasSomethingToUndo,hasSomethingToRedo:!0===t.hasSomethingToRedo,hasSelectedEditor:!0===t.hasSelectedEditor})}),e.eventBus.on("switchannotationeditormode",e=>{v("annotationEditorModeChange",{mode:{"-1":"disable",0:"none",3:"freetext",9:"highlight",13:"stamp",15:"ink",101:"signature",102:"comment"}[String(e.mode)]??"none"})});try{const t=e.passwordPrompt;if(t&&"function"==typeof t.open&&!t._ng2OpenPatched){const e=t.open.bind(t);t.open=function(...t){return h("loading",!1,"system"),v("passwordPrompt",{}),e(...t)},t._ng2OpenPatched=!0}}catch(e){}}());window.parent.postMessage({type:"postmessage-ready",timestamp:Date.now(),readiness:l},e)}())}function h(t,n,o="user"){try{const r={type:"state-change",property:t,value:n,source:o,timestamp:Date.now()};window.parent.postMessage(r,e)}catch(e){p(`Failed to send state change notification: ${e.message}`,"error")}}function v(t,n){try{const o={type:"event-notification",eventName:t,eventData:n,timestamp:Date.now()};window.parent.postMessage(o,e)}catch(e){p(`Failed to send event notification: ${e.message}`,"error")}}function y(t,n){t&&window.parent&&window.parent.postMessage({type:"control-response",id:t,...n,timestamp:Date.now()},e)}function b(){const e=PDFViewerApplication;return e?{ready:e.initialized,page:e.page,pagesCount:e.pagesCount,currentScale:e.pdfViewer?e.pdfViewer.currentScale:null,currentScaleValue:e.pdfViewer?e.pdfViewer.currentScaleValue:null,pagesRotation:e.pdfViewer?e.pdfViewer.pagesRotation:null,scrollMode:e.pdfViewer?e.pdfViewer.scrollMode:null,spreadMode:e.pdfViewer?e.pdfViewer.spreadMode:null}:{ready:!1}}const E={updateModeViaEventBus:function(e,t,n,o){const r=PDFViewerApplication;if(r?.eventBus)try{const a=n["string"==typeof t?t.toUpperCase():t];void 0!==a?r.eventBus.dispatch(e,{mode:a}):p(`Unknown ${o} mode: ${t}`,"warn")}catch(e){p(`Error updating ${o} mode: ${e.message}`,"error")}else p("EventBus not available for mode update","error")}};function k(){const e=PDFViewerApplication;e?(w(d.VIEWER_LOADED),e.initializedPromise?e.initializedPromise.then(()=>{w(d.VIEWER_INITIALIZED),e.eventBus&&"function"==typeof e.eventBus.dispatch&&(w(d.EVENTBUS_READY),e.pdfViewer&&e.pdfCursorTools&&w(d.COMPONENTS_READY))}).catch(e=>{p(`PDFViewerApplication initialization failed: ${e.message}`,"error")}):e.initialized&&(w(d.VIEWER_INITIALIZED),e.eventBus&&"function"==typeof e.eventBus.dispatch&&(w(d.EVENTBUS_READY),e.pdfViewer&&e.pdfCursorTools&&w(d.COMPONENTS_READY)))):w(d.NOT_LOADED)}let P=!1;function D(e){if(e.source!==window.parent||!e.data)return;const{type:t,action:n,payload:o,id:r}=e.data;if("host-response"===t){const t=C.get(e.data.requestId);return void(t&&(C.delete(e.data.requestId),e.data.error?t.reject(new Error(e.data.error)):t.resolve(e.data.data)))}if("control-update"===t)try{const e=M(n,o);Promise.resolve(e).then(e=>y(r,void 0!==e?{success:!0,action:n,data:e}:{success:!0,action:n,payload:o}),e=>{const t=`Error processing ${n}: ${e.message}`;p(t,"error"),y(r,{success:!1,error:t})})}catch(e){const t=`Error processing ${n}: ${e.message}`;p(t,"error"),y(r,{success:!1,error:t})}}let V=!1,A=0;const C=new Map;function B(t,n){return new Promise((o,r)=>{const a="host-"+ ++A;C.set(a,{resolve:o,reject:r}),window.parent.postMessage({type:"host-request",requestId:a,action:t,payload:n,timestamp:Date.now()},e),setTimeout(()=>{C.delete(a)&&r(new Error("Host request timed out: "+t))},1e4)})}let S=0;let L=!1;function F(){if(L)return;const e="undefined"!=typeof PDFViewerApplication?PDFViewerApplication:null,t=e&&e.externalServices;if(!t||"function"!=typeof t.createSignatureStorage)return;L=!0;const n=t.createSignatureStorage.bind(t);t.createSignatureStorage=(e,t)=>{const o=n(e,t);return{async getAll(){if(!V)return o.getAll();try{const e=await B("signature-storage-get-all",null);return new Map(Object.entries(e||{}))}catch(e){return p("signatureStorage getAll failed: "+e.message,"warn"),new Map}},async size(){return V?(await this.getAll()).size:o.size()},async isFull(){return V?await this.size()>=5:o.isFull()},async create(e){if(!V)return o.create(e);try{if(await this.isFull())return null;const t=function(){if("undefined"!=typeof crypto&&crypto.randomUUID)return crypto.randomUUID();if("undefined"!=typeof crypto&&crypto.getRandomValues){const e=crypto.getRandomValues(new Uint8Array(8));let t="";for(let n=0;n<e.length;n++)t+=e[n].toString(16).padStart(2,"0");return"sig-"+t}return"sig-"+Date.now().toString(36)+"-"+(++S).toString(36)}();return await B("signature-storage-save",{uuid:t,data:e}),t}catch(e){return p("signatureStorage save failed: "+e.message,"warn"),null}},async delete(e){if(!V)return o.delete(e);try{return await B("signature-storage-delete",{uuid:e}),!0}catch(e){return p("signatureStorage delete failed: "+e.message,"warn"),!1}}}}}function I(e){let t=0;try{for(const n of e){const e=n&&n[1];e&&!0===e.isClone&&"function"!=typeof e.serialize&&t++}}catch(e){}return t}function O(e){const t=[e[4],e[5]];for(let n=6;n+5<e.length;n+=6)t.push(e[n+4],e[n+5]);return t}function R(e){const t={};for(const n of Object.keys(e))"__proto__"!==n&&"constructor"!==n&&"prototype"!==n&&(t[n]=e[n]);return!0===t.isSignature&&!t.paths&&Array.isArray(t.lines)&&(t.paths={lines:t.lines,points:t.lines.map(O)}),t}function M(e,t){const o=PDFViewerApplication;var r;if(o)try{switch(e){case"show-download":g("downloadButton","secondaryDownload",t);break;case"show-print":g("printButton","secondaryPrint",t);break;case"show-fullscreen":g("presentationMode",null,t);break;case"show-find":g("viewFindButton",null,t);break;case"show-bookmark":g("viewBookmark",null,t);break;case"show-openfile":g("openFile","secondaryOpenFile",t);break;case"show-annotations":!function(e){const t=PDFViewerApplication;try{const n=e?0:-1;t?.eventBus&&t?.pdfViewer?.pdfDocument&&t.pdfViewer.annotationEditorMode!==n&&t.eventBus.dispatch("switchannotationeditormode",{source:null,mode:n})}catch(e){}m("editorModeButtons",e),m("editorModeSeparator",e)}(t);break;case"set-toolbar-density":{const e=document.getElementById("toolbarContainer");if(e){e.classList.remove("density-default","density-compact","density-comfortable");const n="string"==typeof t?t:"default";e.classList.add(`density-${n}`)}break}case"set-sidebar-width":{const e=document.getElementById("outerContainer");e&&"string"==typeof t&&""!==t.trim()&&e.style.setProperty("--ng2-sidebar-width",t);break}case"set-toolbar-position":{const e=document.getElementById("outerContainer");e&&(e.classList.remove("toolbar-bottom"),"bottom"===t&&e.classList.add("toolbar-bottom"));break}case"set-sidebar-position":{const e=document.getElementById("outerContainer");e&&(e.classList.remove("sidebar-right"),"right"===t&&e.classList.add("sidebar-right"));break}case"set-responsive-breakpoint":{const e="number"==typeof t?`${t}px`:`${t}`,n=document.getElementById("outerContainer");n&&e&&n.style.setProperty("--ng2-responsive-breakpoint",e);break}case"show-toolbar-left":f("toolbarViewerLeft",t);break;case"show-toolbar-middle":f("toolbarViewerMiddle",t);break;case"show-toolbar-right":f("toolbarViewerRight",t);break;case"show-secondary-toolbar-toggle":m("secondaryToolbarToggle",t);break;case"show-sidebar":m("viewsManager",t),m("viewsManagerToggleButton",t);break;case"show-sidebar-left":m("viewsManagerSelector",t);break;case"show-sidebar-right":m("viewsManagerCurrentOutlineButton",t);break;case"set-zoom":!function(e){const t=PDFViewerApplication;if(!t||!t.pdfViewer||!t.eventBus)return void p("PDFViewerApplication, pdfViewer, or eventBus not ready for zoom update","warn");if(!t.isInitialViewSet&&"undefined"!=typeof PDFViewerApplicationOptions)try{return void PDFViewerApplicationOptions.set("defaultZoomValue",String(e))}catch(e){}c.markZoomCommandStart();try{if(["auto","page-actual","page-fit","page-width","page-height"].includes(e))return void t.eventBus.dispatch("scalechanged",{source:t.toolbar,value:e});const n=Number(e);if(!isNaN(n)&&n>0)return void t.eventBus.dispatch("scalechanged",{source:t.toolbar,value:e});p(`Invalid zoom value: ${e}`,"warn")}finally{c.markZoomCommandEnd()}}(t);break;case"set-cursor":!function(e){const t=PDFViewerApplication;try{const n=e?e.toUpperCase():"SELECT";let o=0;switch(n){case"HAND":case"H":o=1;break;case"SELECT":case"S":o=0;break;case"ZOOM":case"Z":o=2;break;default:p(`Unknown cursor tool: ${n}, defaulting to SELECT`,"warn"),o=0}t.eventBus&&"function"==typeof t.eventBus.dispatch?t.eventBus.dispatch("switchcursortool",{tool:o}):p("EventBus not available for cursor update","warn")}catch(e){p(`Error updating cursor: ${e.message}`,"error")}}(t);break;case"set-scroll":E.updateModeViaEventBus("switchscrollmode",t,{VERTICAL:0,V:0,HORIZONTAL:1,H:1,WRAPPED:2,W:2,PAGE:3,P:3},"scroll mode");break;case"set-spread":E.updateModeViaEventBus("switchspreadmode",t,{NONE:0,N:0,ODD:1,O:1,EVEN:2,E:2},"spread mode");break;case"set-page":const a=parseInt(t,10);a>0&&a<=PDFViewerApplication.pagesCount?PDFViewerApplication.isInitialViewSet?PDFViewerApplication.page=a:PDFViewerApplication.initialBookmark=`page=${a}`:p(`Invalid page number: ${t}`,"warn");break;case"set-rotation":const i=parseInt(t,10);[0,90,180,270].includes(i)?PDFViewerApplication.pdfViewer.pagesRotation=i:p(`Invalid rotation: ${t}`,"warn");break;case"go-to-last-page":if(!0===t){const e=PDFViewerApplication.pagesCount;PDFViewerApplication.page=e}break;case"go-to-named-dest":if(!t||"string"!=typeof t||""===t.trim()){p(`Skipping invalid named destination: "${t}"`);break}PDFViewerApplication.pdfLinkService.goToDestination(t);break;case"update-page-mode":const s=t?t.toLowerCase():"none";PDFViewerApplication.eventBus.dispatch("pagemode",{mode:s});break;case"set-download-filename":!function(e){try{if(e&&PDFViewerApplication){const t=e.endsWith(".pdf")?e:`${e}.pdf`;PDFViewerApplication._contentDispositionFilename=t}else p("Cannot set download filename - invalid filename or PDFViewerApplication not available","warn")}catch(e){p(`Error setting download filename: ${e.message}`,"error")}}(t);break;case"trigger-download":!0===t&&PDFViewerApplication.eventBus.dispatch("download");break;case"trigger-print":!0===t&&PDFViewerApplication.eventBus.dispatch("print");break;case"trigger-rotate-cw":!0===t&&PDFViewerApplication.eventBus.dispatch("rotatecw");break;case"trigger-rotate-ccw":!0===t&&PDFViewerApplication.eventBus.dispatch("rotateccw");break;case"set-external-link-target":{const e={none:0,self:1,blank:2,parent:3,top:4},n="string"==typeof t?t.toLowerCase():"blank";n in e&&PDFViewerApplication.pdfLinkService?PDFViewerApplication.pdfLinkService.externalLinkTarget=e[n]:p(`Invalid external link target: ${t}`,"warn");break}case"set-remember-last-view":"undefined"!=typeof PDFViewerApplicationOptions&&PDFViewerApplicationOptions.set("viewOnLoad",!1===t?1:0);break;case"set-css-zoom":!function(e){try{"undefined"!=typeof PDFViewerApplicationOptions&&PDFViewerApplicationOptions&&(null===ne&&(ne=PDFViewerApplicationOptions.get("maxCanvasPixels")),PDFViewerApplicationOptions.set("maxCanvasPixels",!0===e?0:ne))}catch(e){p(`Error setting CSS zoom: ${e.message}`,"error")}}(t);break;case"set-theme":!function(e){re=e||"light";const t=document.body;if(t){if(t.classList.remove("ng2-theme-light","ng2-theme-dark","ng2-theme-auto","ng2-theme-dark-active","ng2-theme-light-active"),t.classList.add(`ng2-theme-${re}`),"auto"===re){const e=window.matchMedia("(prefers-color-scheme: dark)").matches?"ng2-theme-dark-active":"ng2-theme-light-active";if(t.classList.add(e),!window.ng2ThemeMediaListener){const e=window.matchMedia("(prefers-color-scheme: dark)");e.addListener(e=>{if("auto"===re){t.classList.remove("ng2-theme-dark-active","ng2-theme-light-active");const n=e.matches?"ng2-theme-dark-active":"ng2-theme-light-active";t.classList.add(n)}}),window.ng2ThemeMediaListener=e}}t.offsetHeight}}(t);break;case"set-primary-color":ie("--ng2-primary-color",t);break;case"set-background-color":!function(e){ie("--ng2-background-color",e)}(t);break;case"set-page-border-color":!function(e){ie("--ng2-page-border-color",e)}(t);break;case"set-page-spacing":t&&function(e,t,n){void 0!==e&&ie("--page-margin",e);void 0!==t&&ie("--spreadHorizontalWrapped-margin-LR",t);void 0!==n&&ie("--page-border",n)}(t.margin,t.spreadMargin,t.border);break;case"set-toolbar-color":!function(e){ie("--ng2-toolbar-color",e)}(t);break;case"set-text-color":!function(e){ie("--ng2-text-color",e)}(t);break;case"set-border-radius":ie("--ng2-border-radius",t);break;case"set-custom-css":"string"==typeof t?ae(t,null):t&&"object"==typeof t&&ae(t.css,t.nonce);break;case"set-diagnostic-logs":u=t;break;case"set-url-validation":n=!0===t,p("URL validation "+(n?"enabled":"disabled"));break;case"set-annotation-editor-mode":{const e={disable:-1,none:0,freetext:3,highlight:9,stamp:13,ink:15,signature:101,comment:102},n="string"==typeof t?t.toLowerCase():"none";if(!(n in e))throw new Error(`Invalid annotation editor mode: ${t}`);o.eventBus.dispatch("switchannotationeditormode",{source:null,mode:e[n]});break}case"set-highlight-editor-colors":"string"==typeof t&&""!==t.trim()&&"undefined"!=typeof PDFViewerApplicationOptions&&PDFViewerApplicationOptions.set("highlightEditorColors",t);break;case"get-annotations":{const e=o.pdfDocument&&o.pdfDocument.annotationStorage;if(!e)throw new Error("No document loaded");const t=e.serializable,n=(t&&t.map?Array.from(t.map.values()):[]).filter(e=>e&&"number"==typeof e.pageIndex);return JSON.parse(JSON.stringify(n,(e,t)=>{if(!("object"==typeof t&&null!==t&&"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap))return ArrayBuffer.isView(t)?Array.from(t):t}))}case"set-signature-storage":V=!0===t;break;case"set-annotations":if(!o.pdfDocument)throw new Error("No document loaded");return function(e){const t=PDFViewerApplication,n=t.pdfDocument.annotationStorage,o=t.pdfViewer&&t.pdfViewer._layerProperties,r=o&&o.annotationEditorUIManager;if(!r||"function"!=typeof r.getId||"function"!=typeof r.findClonesForPage)throw new Error("Annotation editor is not initialized - cannot restore annotations");const a=new Set,i=I(n);let s=0,c=0;for(const o of e){if(!o||!Number.isInteger(o.pageIndex)||o.pageIndex<0||o.pageIndex>=t.pagesCount){c++;continue}const e=R(o),i=r.getId();n.setValue(i,Object.assign(e,{id:i,isCopy:!0,isClone:!0})),a.add(e.pageIndex),s++}const d=[];for(const e of a){const n=t.pdfViewer.getPageView(e),o=n&&n.annotationEditorLayer,a=o&&o.annotationEditorLayer;a&&a.div&&d.push(Promise.resolve(r.findClonesForPage(a)).then(()=>{a.div.hidden=a.isEmpty}).catch(()=>{}))}return Promise.all(d).then(()=>{const e=Math.max(0,I(n)-i);return{restored:Math.max(0,s-e),pending:e,rejected:c}})}(Array.isArray(t)?t:[]);case"save-document":if(!o.pdfDocument)throw new Error("No document loaded");return o.pdfDocument.saveDocument().then(e=>({bytes:e,filename:o._contentDispositionFilename||"document.pdf"}));case"show-toolbar":{const e=document.getElementById("outerContainer");e&&e.classList.toggle("ng2-toolbar-hidden",!1===t);break}case"get-document-text":return N(t||{});case"read-aloud":return function(e){const t=window.speechSynthesis;if(!t)return Promise.reject(new Error("Speech synthesis not supported in this browser"));const n=e.command||"start";switch(n){case"start":t.cancel(),t.resume(),$.active=!0,$.session++,$.rate="number"==typeof e.rate?e.rate:1;q(Math.max(1,e.fromPage||PDFViewerApplication.page||1),$.session);break;case"pause":t.pause(),T("paused");break;case"resume":t.resume(),T("reading");break;case"stop":$.active=!1,$.session++,t.cancel(),t.resume(),x(),T("stopped");break;default:return Promise.reject(new Error(`Unknown read-aloud command: ${n}`))}return Promise.resolve({status:n,page:$.page})}(t||{});case"get-form-data":return W();case"set-form-data":return Z(t||{});case"set-form-field":if(!t||"string"!=typeof t.name)throw new Error("set-form-field requires { name, value }");return Z({[t.name]:t.value});case"set-content-protection":!function(e){G.blockPrint=!0===e.blockPrint,G.blockDownload=!0===e.blockDownload;const t=document.getElementById("viewerContainer");t&&t.classList.toggle("ng2-no-text-select",!0===e.disableTextSelection)}(t||{});break;case"set-watermark":K=(r=t)&&"string"==typeof r.text&&""!==r.text.trim()?r:null,document.querySelectorAll(".ng2-watermark").forEach(e=>e.remove()),K&&document.querySelectorAll(".pdfViewer .page").forEach(e=>X(e));break;case"search":return function(e){const t=PDFViewerApplication;if(!t.pdfDocument)return Promise.reject(new Error("No document loaded"));const n="string"==typeof e?{query:e}:e||{};if(!n.query||"string"==typeof n.query&&""===n.query.trim())return Promise.reject(new Error("Search query is required"));return Q={source:null,type:"",query:n.query,caseSensitive:!0===n.caseSensitive,entireWord:!0===n.entireWord,highlightAll:!1!==n.highlightAll,matchDiacritics:!0===n.matchDiacritics,findPrevious:!1},ee(Q)}(t);case"search-next":return te(!1);case"search-previous":return te(!0);case"clear-search":o.eventBus.dispatch("findbarclose",{source:null}),Q=null;break;case"configure":{const e=[];for(const n of Array.isArray(t)?t:[])try{M(n.action,n.payload)}catch(t){e.push(n.action)}if(e.length>0)throw new Error(`configure failed for: ${e.join(", ")}`);break}default:if(e.startsWith("enable-")){const n=e.slice(7).replace(/-([a-z])/g,(e,t)=>t.toUpperCase());if(n in oe){oe[n]=!0===t,"idle"===n&&(!0===t?fe():me());break}}e.startsWith("set-error-")||p(`Unknown action: ${e}`,"warn")}}catch(t){throw p(`Error in updateControl for action ${e}: ${t.message}`,"error"),t}else p("PDFViewerApplication not available","error")}function N(e){const t=PDFViewerApplication.pdfDocument;if(!t)return Promise.reject(new Error("No document loaded"));const n=Math.max(1,e.from||1),o=Math.min(t.numPages,e.to||t.numPages),r=[];for(let e=n;e<=o;e++)r.push(t.getPage(e).then(t=>t.getTextContent().then(t=>({page:e,text:t.items.map(e=>e.str).join(" ").replace(/\s+/g," ").trim()}))));return Promise.all(r)}const $={active:!1,page:0,rate:1,highlighted:[],session:0};function T(e,t){v("readAloudStateChange",{status:e,page:$.page,sentence:t||void 0})}function x(){for(const e of $.highlighted)e.classList.remove("ng2-tts-current");$.highlighted=[]}function U(e){const t=PDFViewerApplication,n=t.pdfViewer&&t.pdfViewer.getPageView(e-1),o=n&&n.textLayer;return o&&o.div||null}const _=/[^.!?]+[.!?]+["')\]]*\s*|[^.!?]+$/g;function j(e){return $.active&&$.session===e}function z(e,t,n,o){if(!j(o))return;if(n>=t.length)return x(),void q(e+1,o);const r=t[n];x();for(const e of r.els)e.classList.add("ng2-tts-current");$.highlighted=r.els.slice();const a=new SpeechSynthesisUtterance(r.text);a.rate=$.rate,a.onend=()=>{j(o)&&z(e,t,n+1,o)},a.onerror=e=>{const t=e&&e.error;j(o)&&"interrupted"!==t&&"canceled"!==t&&($.active=!1,x(),T("error"))},T("reading",r.text),window.speechSynthesis.speak(a)}function q(e,t){const n=PDFViewerApplication;if(j(t)){if(!n.pdfDocument||e>n.pagesCount)return $.active=!1,x(),void T("finished");$.page=e,n.page!==e&&(n.page=e),function(e,t){const n=U(e);return n&&n.childNodes.length>0?Promise.resolve(n):new Promise(n=>{const o=PDFViewerApplication;let r=!1;const a=()=>{r||(r=!0,o.eventBus.off("textlayerrendered",i),n(U(e)))},i=t=>{t&&t.pageNumber===e&&a()};o.eventBus.on("textlayerrendered",i),setTimeout(a,t)})}(e,1500).then(n=>{if(j(t)){if(n){const o=function(e){let t="";const n=[];for(const o of e){const e=t.length;t+=o.textContent,n.push({start:e,end:t.length,el:o}),t+=" "}const o=[];let r;for(;null!==(r=_.exec(t));){const e=r[0].replace(/\s+/g," ").trim();if(!e)continue;const t=r.index,a=r.index+r[0].length,i=[];for(const e of n)e.start<a&&e.end>t&&i.push(e.el);o.push({text:e,els:i})}return o}(function(e){const t=[];return e.querySelectorAll("span").forEach(e=>{if(e.firstElementChild)return;const n=e.textContent;n&&""!==n.trim()&&t.push(e)}),t}(n));return 0===o.length?void q(e+1,t):void z(e,o,0,t)}N({from:e,to:e}).then(n=>{if(!j(t))return;const o=n[0]&&n[0].text;if(!o)return void q(e+1,t);const r=function(e){const t=[];let n;for(;null!==(n=_.exec(e));){const e=n[0].replace(/\s+/g," ").trim();e&&t.push({text:e,els:[]})}return t}(o);0!==r.length?z(e,r,0,t):q(e+1,t)}).catch(()=>{j(t)&&($.active=!1,x(),T("error"))})}})}}function W(){const e=PDFViewerApplication;return e.pdfDocument?e.pdfDocument.getFieldObjects().then(t=>{const n=e.pdfDocument.annotationStorage,o={};for(const e of Object.keys(t||{}))for(const r of t[e]){let t=r.value;try{const e=n.getRawValue(r.id);e&&void 0!==e.value&&(t=e.value)}catch(e){}o[e]=void 0===t?null:t}return o}):Promise.reject(new Error("No document loaded"))}function Z(e){const t=PDFViewerApplication;return t.pdfDocument?t.pdfDocument.getFieldObjects().then(n=>{if(!n)throw new Error("Document has no form fields");const o=t.pdfDocument.annotationStorage,r=[];let a=0;for(const t of Object.keys(e)){const i=n[t];if(i){for(const n of i)H(o,n,e[t]);a++}else r.push(t)}return r.length>0&&p(`Unknown form fields ignored: ${r.join(", ")}`,"warn"),{applied:a,unknown:r}}):Promise.reject(new Error("No document loaded"))}function H(e,t,n){const o=document.querySelector(`[data-annotation-id="${t.id}"]`),r=o&&o.querySelector("input, textarea, select");if("checkbox"===t.type){const o=!0===n||"true"===n||"string"==typeof n&&"false"!==n&&n===t.exportValues;r&&"checkbox"===r.type?(r.checked=o,r.dispatchEvent(new Event("change",{bubbles:!0}))):e.setValue(t.id,{value:o})}else if("radiobutton"===t.type){const o=n===t.exportValues;r&&"radio"===r.type?o&&(r.checked=!0,r.dispatchEvent(new Event("change",{bubbles:!0}))):e.setValue(t.id,{value:o})}else r?(r.value=null==n?"":String(n),r.dispatchEvent(new Event("input",{bubbles:!0})),r.dispatchEvent(new Event("change",{bubbles:!0}))):e.setValue(t.id,{value:null==n?"":String(n)})}let Y=null;function J(e){const t=e.target;t&&t.closest&&t.closest(".annotationLayer")&&(clearTimeout(Y),Y=setTimeout(()=>{W().then(e=>h("formData",e,"user"),()=>{})},150))}const G={blockPrint:!1,blockDownload:!1};window.addEventListener("keydown",function(e){if(!e.ctrlKey&&!e.metaKey)return;const t=(e.key||"").toLowerCase();(G.blockPrint&&"p"===t||G.blockDownload&&"s"===t)&&(e.preventDefault(),e.stopPropagation())},!0);let K=null;function X(e){if(!K||e.querySelector(".ng2-watermark"))return;const t=document.createElement("div");t.className="ng2-watermark";const n=document.createElement("span");n.textContent=K.text,K.color&&t.style.setProperty("--ng2-watermark-color",K.color),void 0!==K.opacity&&t.style.setProperty("--ng2-watermark-opacity",String(K.opacity)),K.fontSize&&t.style.setProperty("--ng2-watermark-font-size",K.fontSize),void 0!==K.rotation&&t.style.setProperty("--ng2-watermark-rotation",`${K.rotation}deg`),t.appendChild(n),e.appendChild(t)}let Q=null;function ee(e){const t=PDFViewerApplication;return new Promise((n,o)=>{let r=!1,a=null;const i=()=>{t.eventBus.off("updatefindcontrolstate",c),t.eventBus.off("updatefindmatchescount",c),clearTimeout(a),clearTimeout(d)},s=()=>{r||(r=!0,i(),n(function(){const e=PDFViewerApplication.findController,t=e&&e.pageMatches?e.pageMatches.map(e=>e?e.length:0):[],n=[];for(let e=0;e<t.length;e++)t[e]>0&&n.push(e+1);const o=e&&e.selected?e.selected:null;return{total:t.reduce((e,t)=>e+t,0),current:o&&o.pageIdx>=0?{page:o.pageIdx+1,matchIndex:o.matchIdx}:null,matchesPerPage:t,pagesWithMatches:n}}()))},c=()=>{clearTimeout(a),a=setTimeout(s,300)},d=setTimeout(s,1e4);t.eventBus.on("updatefindcontrolstate",c),t.eventBus.on("updatefindmatchescount",c),a=setTimeout(s,900);try{t.eventBus.dispatch("find",e)}catch(e){r=!0,i(),o(e)}})}function te(e){if(!Q)return Promise.reject(new Error("No active search - call search() first"));return ee(Object.assign({},Q,{type:"again",findPrevious:!0===e}))}let ne=null;const oe={beforePrint:!1,afterPrint:!1,pagesLoaded:!1,pageChange:!1,documentError:!0,documentInit:!1,pagesInit:!1,presentationModeChanged:!1,openFile:!1,find:!1,updateFindMatchesCount:!1,metadataLoaded:!1,outlineLoaded:!1,pageRendered:!1,annotationLayerRendered:!1,bookmarkClick:!1,idle:!1,sidebarViewChanged:!1,layersChanged:!1,namedAction:!1,documentProperties:!1};let re="light";function ae(e,t){const n=document.getElementById("ng2-custom-css");if(n&&n.remove(),e){const n=document.createElement("style");n.id="ng2-custom-css",n.textContent=e,t&&n.setAttribute("nonce",t),document.head.appendChild(n)}}function ie(e,t){t?(document.documentElement.style.setProperty(e,t),document.body.style.setProperty(e,t)):(document.documentElement.style.removeProperty(e),document.body.style.removeProperty(e))}let se=!1;let ce=!1;let de=null,le=!1,ue=[];const pe=3e4;function ge(){de&&(clearTimeout(de),de=null),oe.idle&&(de=setTimeout(()=>{v("idle",null)},pe))}function me(){de&&(clearTimeout(de),de=null),ue.forEach(({element:e,event:t,handler:n,options:o})=>{e.removeEventListener(t,n,o)}),ue=[],le=!1,p("Idle detection cleanup completed")}function fe(){if(le)return void p("Idle detection already setup, skipping");le=!0;const e=(e,t,n,o)=>{e.addEventListener(t,n,o),ue.push({element:e,event:t,handler:n,options:o})};e(document,"mousemove",ge,{passive:!0}),e(document,"mousedown",ge,{passive:!0}),e(document,"click",ge,{passive:!0}),e(document,"keydown",ge,{passive:!0}),e(document,"keypress",ge,{passive:!0}),e(document,"scroll",ge,{passive:!0}),e(document,"wheel",ge,{passive:!0}),e(document,"touchstart",ge,{passive:!0}),e(document,"touchmove",ge,{passive:!0}),ge();e(window,"beforeunload",()=>{me()},{passive:!0})}let we=!1;function he(e){if(we)p("Bookmark click interception already setup, skipping");else if(e&&e.pdfOutlineViewer&&e.pdfOutlineViewer._bindLink){const t=e.pdfOutlineViewer._bindLink;e.pdfOutlineViewer._bindLink=function(e,n){if(t.call(this,e,n),oe.bookmarkClick){const t=e.onclick;e.onclick=function(o){const r={title:e.textContent?.trim()||"Unknown",dest:n.dest||null,action:n.action||void 0,url:n.url||void 0,pageNumber:void 0,isCurrentItem:e.classList.contains("currentTreeItem")};return p(`Bookmark clicked: ${r.title}`),v("bookmarkClick",r),!!t&&t.call(this,o)}}},we=!0}else if(e&&e.eventBus){const t=()=>{we||he(e)};e.eventBus.on("outlineloaded",t),p("Bookmark click interception deferred until outline loads")}else p("Unable to setup bookmark click interception - event bus not available","warn")}window.addEventListener("load",()=>{l===d.NOT_LOADED&&"undefined"!=typeof PDFViewerApplication&&k()})}();
|