ng2-pdfjs-viewer 25.0.17 → 25.0.18
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.
|
@@ -408,7 +408,6 @@ class PdfJsViewerComponent {
|
|
|
408
408
|
// #endregion
|
|
409
409
|
// #region Auto-Action Properties
|
|
410
410
|
downloadOnLoad = false;
|
|
411
|
-
enableSandbox = false;
|
|
412
411
|
printOnLoad = false;
|
|
413
412
|
rotateCW = false;
|
|
414
413
|
rotateCCW = false;
|
|
@@ -665,6 +664,10 @@ class PdfJsViewerComponent {
|
|
|
665
664
|
initialConfigQueued = false;
|
|
666
665
|
actionQueueManager = new ActionQueueManager(this._diagnosticLogs);
|
|
667
666
|
changeOriginTracker = new ChangeOriginTracker();
|
|
667
|
+
cdr;
|
|
668
|
+
constructor(cdr) {
|
|
669
|
+
this.cdr = cdr;
|
|
670
|
+
}
|
|
668
671
|
messageIdCounter = 0;
|
|
669
672
|
pendingMessages = new Map();
|
|
670
673
|
pendingChanges = [];
|
|
@@ -845,7 +848,8 @@ class PdfJsViewerComponent {
|
|
|
845
848
|
// #region Lifecycle Methods
|
|
846
849
|
ngOnInit() {
|
|
847
850
|
// Connect action queue manager to PostMessage system
|
|
848
|
-
|
|
851
|
+
// Wrap sendControlMessage to handle iframe unavailability by re-queuing actions
|
|
852
|
+
this.actionQueueManager.setPostMessageExecutor((action, payload) => this.sendControlMessageWithRequeue(action, payload));
|
|
849
853
|
// Send diagnostic logs setting to wrapper
|
|
850
854
|
this.dispatchAction("set-diagnostic-logs", this._diagnosticLogs, "initial-load");
|
|
851
855
|
// Send URL validation setting to wrapper
|
|
@@ -921,10 +925,8 @@ class PdfJsViewerComponent {
|
|
|
921
925
|
timestamp: Date.now(),
|
|
922
926
|
};
|
|
923
927
|
this.pendingMessages.set(messageId, { resolve, reject });
|
|
924
|
-
// Send message to iframe
|
|
925
|
-
if (this.
|
|
926
|
-
this.iframe.nativeElement &&
|
|
927
|
-
this.iframe.nativeElement.contentWindow) {
|
|
928
|
+
// Send message to iframe - verify accessibility (event-driven check)
|
|
929
|
+
if (this.isIframeAccessible()) {
|
|
928
930
|
this.iframe.nativeElement.contentWindow.postMessage(message, "*");
|
|
929
931
|
}
|
|
930
932
|
else {
|
|
@@ -933,6 +935,58 @@ class PdfJsViewerComponent {
|
|
|
933
935
|
}
|
|
934
936
|
});
|
|
935
937
|
}
|
|
938
|
+
// Wrapper for sendControlMessage that re-queues actions on iframe unavailability
|
|
939
|
+
// This ensures actions are retried when iframe becomes available (event-driven)
|
|
940
|
+
async sendControlMessageWithRequeue(action, payload) {
|
|
941
|
+
try {
|
|
942
|
+
return await this.sendControlMessage(action, payload);
|
|
943
|
+
}
|
|
944
|
+
catch (error) {
|
|
945
|
+
// If iframe is not available, re-queue the action for retry
|
|
946
|
+
// This handles the edge case where iframe becomes unavailable between checks
|
|
947
|
+
if (error instanceof Error && error.message === "Iframe not available") {
|
|
948
|
+
// Re-queue the action - it will be retried when processQueuedActions() is called again
|
|
949
|
+
// This happens when iframe becomes available or readiness increases
|
|
950
|
+
const requiredReadiness = this.getRequiredReadinessLevel(action);
|
|
951
|
+
const actionObj = {
|
|
952
|
+
id: `requeue-${action}-${Date.now()}`,
|
|
953
|
+
action: action,
|
|
954
|
+
payload: payload,
|
|
955
|
+
};
|
|
956
|
+
this.actionQueueManager.queueAction(actionObj, requiredReadiness);
|
|
957
|
+
// Trigger processing if iframe becomes available soon (event-driven, no polling)
|
|
958
|
+
Promise.resolve().then(() => {
|
|
959
|
+
if (this.isIframeAccessible() && this.isPostMessageReady) {
|
|
960
|
+
this.actionQueueManager.processQueuedActions();
|
|
961
|
+
}
|
|
962
|
+
});
|
|
963
|
+
// Re-throw to maintain error handling in ActionQueueManager
|
|
964
|
+
throw error;
|
|
965
|
+
}
|
|
966
|
+
// Re-throw other errors
|
|
967
|
+
throw error;
|
|
968
|
+
}
|
|
969
|
+
}
|
|
970
|
+
// Event-driven iframe accessibility check (no polling, trust-based)
|
|
971
|
+
isIframeAccessible() {
|
|
972
|
+
return !!(this.iframe &&
|
|
973
|
+
this.iframe.nativeElement &&
|
|
974
|
+
this.iframe.nativeElement.contentWindow);
|
|
975
|
+
}
|
|
976
|
+
// Process actions when PostMessage API is ready (extracted for reuse)
|
|
977
|
+
processPostMessageReadyActions() {
|
|
978
|
+
// CRITICAL FIX: Process queued actions when readiness level increases
|
|
979
|
+
if (this.actionQueueManager) {
|
|
980
|
+
this.actionQueueManager.updateReadiness(this.postMessageReadiness);
|
|
981
|
+
this.actionQueueManager.processQueuedActions();
|
|
982
|
+
}
|
|
983
|
+
// Always (re)apply initial configurations when PostMessage API is ready.
|
|
984
|
+
// This makes reloads idempotently reconfigure the viewer.
|
|
985
|
+
this.queueAllConfigurations();
|
|
986
|
+
this.initialConfigQueued = true;
|
|
987
|
+
// Apply any pending changes that occurred before PostMessage API was ready
|
|
988
|
+
this.applyPendingChanges();
|
|
989
|
+
}
|
|
936
990
|
handleControlResponse(response) {
|
|
937
991
|
const pendingMessage = this.pendingMessages.get(response.id);
|
|
938
992
|
if (pendingMessage) {
|
|
@@ -965,17 +1019,21 @@ class PdfJsViewerComponent {
|
|
|
965
1019
|
if (event.data && event.data.type === "postmessage-ready") {
|
|
966
1020
|
this.isPostMessageReady = true;
|
|
967
1021
|
this.postMessageReadiness = event.data.readiness || 0;
|
|
968
|
-
//
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
1022
|
+
// Verify iframe is accessible before processing actions (event-driven readiness check)
|
|
1023
|
+
// This prevents "Iframe not available" errors when dialog reopens quickly
|
|
1024
|
+
if (this.isIframeAccessible()) {
|
|
1025
|
+
// Iframe is ready - process actions immediately
|
|
1026
|
+
this.processPostMessageReadyActions();
|
|
1027
|
+
}
|
|
1028
|
+
else {
|
|
1029
|
+
// Iframe not accessible yet - defer to next change detection cycle (event-driven)
|
|
1030
|
+
// This handles Material Dialog lifecycle timing issues
|
|
1031
|
+
Promise.resolve().then(() => {
|
|
1032
|
+
if (this.isIframeAccessible()) {
|
|
1033
|
+
this.processPostMessageReadyActions();
|
|
1034
|
+
}
|
|
1035
|
+
});
|
|
972
1036
|
}
|
|
973
|
-
// Always (re)apply initial configurations when PostMessage API is ready.
|
|
974
|
-
// This makes reloads idempotently reconfigure the viewer.
|
|
975
|
-
this.queueAllConfigurations();
|
|
976
|
-
this.initialConfigQueued = true;
|
|
977
|
-
// Apply any pending changes that occurred before PostMessage API was ready
|
|
978
|
-
this.applyPendingChanges();
|
|
979
1037
|
return;
|
|
980
1038
|
}
|
|
981
1039
|
// Handle state change notifications from PostMessage wrapper
|
|
@@ -1000,6 +1058,8 @@ class PdfJsViewerComponent {
|
|
|
1000
1058
|
this.hasError = false;
|
|
1001
1059
|
this.currentErrorMessage = "";
|
|
1002
1060
|
}
|
|
1061
|
+
// Trigger change detection for OnPush scenarios (PostMessage runs outside Angular zone)
|
|
1062
|
+
this.cdr.markForCheck();
|
|
1003
1063
|
return;
|
|
1004
1064
|
}
|
|
1005
1065
|
// Internal error state management
|
|
@@ -1899,8 +1959,8 @@ class PdfJsViewerComponent {
|
|
|
1899
1959
|
return false;
|
|
1900
1960
|
return this.postMessageReadiness >= requiredLevel;
|
|
1901
1961
|
}
|
|
1902
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: PdfJsViewerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1903
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.6", type: PdfJsViewerComponent, isStandalone: false, selector: "ng2-pdfjs-viewer", inputs: { viewerId: "viewerId", viewerFolder: "viewerFolder", externalWindow: "externalWindow", target: "target", showSpinner: "showSpinner", downloadFileName: "downloadFileName", locale: "locale", useOnlyCssZoom: "useOnlyCssZoom", diagnosticLogs: "diagnosticLogs", showOpenFile: "showOpenFile", showAnnotations: "showAnnotations", showDownload: "showDownload", showViewBookmark: "showViewBookmark", showPrint: "showPrint", showFullScreen: "showFullScreen", showFind: "showFind", downloadOnLoad: "downloadOnLoad",
|
|
1962
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: PdfJsViewerComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
1963
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.6", type: PdfJsViewerComponent, isStandalone: false, selector: "ng2-pdfjs-viewer", inputs: { viewerId: "viewerId", viewerFolder: "viewerFolder", externalWindow: "externalWindow", target: "target", showSpinner: "showSpinner", downloadFileName: "downloadFileName", locale: "locale", useOnlyCssZoom: "useOnlyCssZoom", diagnosticLogs: "diagnosticLogs", showOpenFile: "showOpenFile", showAnnotations: "showAnnotations", showDownload: "showDownload", showViewBookmark: "showViewBookmark", showPrint: "showPrint", showFullScreen: "showFullScreen", showFind: "showFind", downloadOnLoad: "downloadOnLoad", printOnLoad: "printOnLoad", rotateCW: "rotateCW", rotateCCW: "rotateCCW", showLastPageOnLoad: "showLastPageOnLoad", namedDest: "namedDest", errorOverride: "errorOverride", errorAppend: "errorAppend", errorMessage: "errorMessage", urlValidation: "urlValidation", customSecurityTpl: "customSecurityTpl", theme: "theme", primaryColor: "primaryColor", backgroundColor: "backgroundColor", pageBorderColor: "pageBorderColor", pageSpacing: "pageSpacing", toolbarColor: "toolbarColor", textColor: "textColor", borderRadius: "borderRadius", customCSS: "customCSS", cspNonce: "cspNonce", iframeTitle: "iframeTitle", customSpinnerTpl: "customSpinnerTpl", spinnerClass: "spinnerClass", customErrorTpl: "customErrorTpl", errorClass: "errorClass", showToolbarLeft: "showToolbarLeft", showToolbarMiddle: "showToolbarMiddle", showToolbarRight: "showToolbarRight", showSecondaryToolbarToggle: "showSecondaryToolbarToggle", showSidebar: "showSidebar", showSidebarLeft: "showSidebarLeft", showSidebarRight: "showSidebarRight", toolbarDensity: "toolbarDensity", sidebarWidth: "sidebarWidth", toolbarPosition: "toolbarPosition", sidebarPosition: "sidebarPosition", responsiveBreakpoint: "responsiveBreakpoint", controlVisibility: "controlVisibility", autoActions: "autoActions", errorHandling: "errorHandling", viewerConfig: "viewerConfig", themeConfig: "themeConfig", groupVisibility: "groupVisibility", layoutConfig: "layoutConfig", startDownload: "startDownload", startPrint: "startPrint", openFile: "openFile", download: "download", print: "print", fullScreen: "fullScreen", find: "find", viewBookmark: "viewBookmark", lastPage: "lastPage", externalWindowOptions: "externalWindowOptions", iframeBorder: "iframeBorder", zoom: "zoom", rotation: "rotation", cursor: "cursor", scroll: "scroll", spread: "spread", pageMode: "pageMode", page: "page", pdfSrc: "pdfSrc" }, outputs: { onBeforePrint: "onBeforePrint", onAfterPrint: "onAfterPrint", onDocumentLoad: "onDocumentLoad", onPageChange: "onPageChange", onScaleChange: "onScaleChange", onRotationChange: "onRotationChange", onDocumentError: "onDocumentError", onDocumentInit: "onDocumentInit", onPagesInit: "onPagesInit", onPresentationModeChanged: "onPresentationModeChanged", onOpenFile: "onOpenFile", onFind: "onFind", onUpdateFindMatchesCount: "onUpdateFindMatchesCount", onMetadataLoaded: "onMetadataLoaded", onOutlineLoaded: "onOutlineLoaded", onPageRendered: "onPageRendered", onAnnotationLayerRendered: "onAnnotationLayerRendered", onBookmarkClick: "onBookmarkClick", onIdle: "onIdle", zoomChange: "zoomChange", cursorChange: "cursorChange", scrollChange: "scrollChange", spreadChange: "spreadChange", pageModeChange: "pageModeChange" }, viewQueries: [{ propertyName: "iframe", first: true, predicate: ["iframe"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: `
|
|
1904
1964
|
<div class="ng2-pdfjs-viewer-container">
|
|
1905
1965
|
<iframe
|
|
1906
1966
|
[title]="iframeTitle || 'PDF document viewer'"
|
|
@@ -2017,7 +2077,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
|
|
|
2017
2077
|
</div>
|
|
2018
2078
|
</div>
|
|
2019
2079
|
`, styles: [".ng2-pdfjs-viewer-container{position:relative;width:100%;height:100%}.ng2-pdfjs-loading-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:#fff9;-webkit-backdrop-filter:saturate(120%) blur(1px);backdrop-filter:saturate(120%) blur(1px)}.ng2-pdfjs-spinner-content{text-align:center}.ng2-pdfjs-spinner-icon{display:inline-block;width:40px;height:40px;border:4px solid #f3f3f3;border-top:4px solid #2196F3;border-radius:50%;animation:spin 1s linear infinite}.ng2-pdfjs-spinner-text{margin-top:16px;color:#666;font-size:16px}.ng2-pdfjs-error-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:#ffffffe6;-webkit-backdrop-filter:saturate(120%) blur(1px);backdrop-filter:saturate(120%) blur(1px)}.ng2-pdfjs-error-content{text-align:center;max-width:400px;padding:20px}.ng2-pdfjs-error-icon{font-size:48px;color:#f44336;margin-bottom:16px}.ng2-pdfjs-error-title{color:#333;font-size:18px;font-weight:500;margin-bottom:8px}.ng2-pdfjs-error-message{color:#666;font-size:14px;line-height:1.4}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.ng2-pdfjs-viewer-iframe{border:0}.ng2-pdfjs-viewer-iframe.has-border{border:1px solid #ccc}\n"] }]
|
|
2020
|
-
}], propDecorators: { iframe: [{
|
|
2080
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { iframe: [{
|
|
2021
2081
|
type: ViewChild,
|
|
2022
2082
|
args: ["iframe", { static: true }]
|
|
2023
2083
|
}], viewerId: [{
|
|
@@ -2092,8 +2152,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
|
|
|
2092
2152
|
type: Input
|
|
2093
2153
|
}], downloadOnLoad: [{
|
|
2094
2154
|
type: Input
|
|
2095
|
-
}], enableSandbox: [{
|
|
2096
|
-
type: Input
|
|
2097
2155
|
}], printOnLoad: [{
|
|
2098
2156
|
type: Input
|
|
2099
2157
|
}], rotateCW: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng2-pdfjs-viewer.mjs","sources":["../../src/managers/ActionQueueManager.ts","../../src/utils/PropertyTransformers.ts","../../src/utils/ComponentUtils.ts","../../src/utils/ChangeOriginTracker.ts","../../src/ng2-pdfjs-viewer.component.ts","../../src/ng2-pdfjs-viewer.module.ts","../../ng2-pdfjs-viewer.ts"],"sourcesContent":["import { ViewerAction, ActionExecutionResult } from \"../interfaces/ViewerTypes\";\r\n\r\n// Simplified Action Queue Manager - Single queue with readiness-based execution\r\nexport class ActionQueueManager {\r\n private actionQueue: Array<{ action: ViewerAction; readinessLevel: number }> =\r\n [];\r\n private executedActions: Map<string, ActionExecutionResult> = new Map();\r\n public isDocumentLoaded = false;\r\n private isPostMessageReady = false;\r\n private postMessageReadiness = 0;\r\n private diagnosticLogs = false;\r\n private postMessageExecutor?: (action: string, payload: any) => Promise<any>;\r\n\r\n constructor(diagnosticLogs = false) {\r\n this.diagnosticLogs = diagnosticLogs;\r\n }\r\n\r\n setDiagnosticLogs(enabled: boolean): void {\r\n this.diagnosticLogs = enabled;\r\n }\r\n\r\n setPostMessageReady(ready: boolean, readiness: number = 0): void {\r\n this.isPostMessageReady = ready;\r\n this.postMessageReadiness = readiness;\r\n\r\n if (ready) {\r\n this.processQueuedActions();\r\n }\r\n }\r\n\r\n updateReadiness(readiness: number): void {\r\n if (this.postMessageReadiness !== readiness) {\r\n this.postMessageReadiness = readiness;\r\n }\r\n }\r\n\r\n // Simplified queue management - single queue with readiness levels\r\n queueAction(action: ViewerAction, readinessLevel: number): void {\r\n this.actionQueue.push({ action, readinessLevel });\r\n }\r\n\r\n // Legacy methods for backward compatibility - now just delegate to main queue\r\n queueImmediateAction(action: ViewerAction): void {\r\n this.queueAction(action, 3);\r\n }\r\n\r\n queueViewerReadyAction(action: ViewerAction): void {\r\n this.queueAction(action, 4);\r\n }\r\n\r\n queueDocumentLoadedAction(action: ViewerAction): void {\r\n this.queueAction(action, 5);\r\n }\r\n\r\n queueOnDemandAction(action: ViewerAction): Promise<ActionExecutionResult> {\r\n return this.executeAction(action);\r\n }\r\n\r\n onDocumentLoaded(): void {\r\n this.isDocumentLoaded = true;\r\n this.processQueuedActions();\r\n }\r\n\r\n // Process all queued actions that now meet readiness requirements\r\n public processQueuedActions(): void {\r\n const executableActions = this.actionQueue.filter((item) => {\r\n const canExecute =\r\n this.postMessageReadiness >= item.readinessLevel &&\r\n (item.readinessLevel < 5 || this.isDocumentLoaded);\r\n\r\n return canExecute;\r\n });\r\n\r\n // Remove executable actions from queue\r\n this.actionQueue = this.actionQueue.filter((item) => {\r\n return !(\r\n this.postMessageReadiness >= item.readinessLevel &&\r\n (item.readinessLevel < 5 || this.isDocumentLoaded)\r\n );\r\n });\r\n\r\n // Execute all ready actions\r\n executableActions.forEach((item) => {\r\n this.executeAction(item.action);\r\n });\r\n }\r\n\r\n public async executeAction(\r\n action: ViewerAction,\r\n ): Promise<ActionExecutionResult> {\r\n const result: ActionExecutionResult = {\r\n actionId: action.id,\r\n success: false,\r\n timestamp: Date.now(),\r\n };\r\n\r\n try {\r\n if (action.condition && !action.condition(null)) {\r\n result.error = \"Condition not met\";\r\n this.executedActions.set(action.id, result);\r\n return result;\r\n }\r\n\r\n const success = await this.executeActionViaPostMessage(action);\r\n result.success = success;\r\n\r\n // If action has a resolver (from user interaction), call it\r\n if (action.resolver) {\r\n action.resolver(result);\r\n }\r\n } catch (error) {\r\n result.error = error instanceof Error ? error.message : String(error);\r\n if (this.diagnosticLogs) {\r\n console.error(\r\n `🔍 ActionQueueManager: Error executing action ${action.action}:`,\r\n error,\r\n );\r\n }\r\n\r\n // If action has a resolver (from user interaction), call it with error\r\n if (action.resolver) {\r\n action.resolver(result);\r\n }\r\n }\r\n\r\n this.executedActions.set(action.id, result);\r\n return result;\r\n }\r\n\r\n private async executeActionViaPostMessage(\r\n action: ViewerAction,\r\n ): Promise<boolean> {\r\n if (!this.postMessageExecutor) {\r\n throw new Error(\"PostMessage executor not set\");\r\n }\r\n\r\n await this.postMessageExecutor(action.action, action.payload);\r\n return true;\r\n }\r\n\r\n setPostMessageExecutor(\r\n executor: (action: string, payload: any) => Promise<any>,\r\n ): void {\r\n this.postMessageExecutor = executor;\r\n }\r\n\r\n getActionStatus(\r\n actionId: string,\r\n ): \"pending\" | \"executing\" | \"completed\" | \"failed\" | \"not-found\" {\r\n const result = this.executedActions.get(actionId);\r\n if (!result) {\r\n const inQueue = this.actionQueue.some(\r\n (item) => item.action.id === actionId,\r\n );\r\n return inQueue ? \"pending\" : \"not-found\";\r\n }\r\n\r\n return result.success ? \"completed\" : \"failed\";\r\n }\r\n\r\n clearQueues(): void {\r\n this.actionQueue = [];\r\n this.executedActions.clear();\r\n }\r\n\r\n getQueueStatus(): { queuedActions: number; executedActions: number } {\r\n return {\r\n queuedActions: this.actionQueue.length,\r\n executedActions: this.executedActions.size,\r\n };\r\n }\r\n}\r\n","// Property transformation utilities\r\nexport class PropertyTransformers {\r\n static transformZoom = {\r\n toViewer: (zoom: string): string => {\r\n if (!zoom) return \"auto\";\r\n\r\n // Convert common zoom values to PDF.js format\r\n const zoomMappings: { [key: string]: string } = {\r\n auto: \"auto\",\r\n \"page-fit\": \"page-fit\",\r\n \"page-width\": \"page-width\",\r\n \"page-actual\": \"page-actual\",\r\n };\r\n\r\n return zoomMappings[zoom.toLowerCase()] || zoom;\r\n },\r\n\r\n fromViewer: (viewerZoom: any): string => {\r\n if (typeof viewerZoom === \"string\") return viewerZoom;\r\n if (typeof viewerZoom === \"number\") {\r\n // Convert numeric zoom to string without % to avoid feedback loop\r\n // PDF.js accepts numeric strings like \"1.25\" directly\r\n return viewerZoom.toString();\r\n }\r\n return \"auto\";\r\n },\r\n };\r\n\r\n static transformRotation = {\r\n toViewer: (rotation: number): number => {\r\n // Normalize rotation to 0, 90, 180, 270\r\n return ((rotation % 360) + 360) % 360;\r\n },\r\n\r\n fromViewer: (viewerRotation: any): number => {\r\n return typeof viewerRotation === \"number\" ? viewerRotation : 0;\r\n },\r\n };\r\n\r\n static transformCursor = {\r\n toViewer: (cursor: string): string => {\r\n if (!cursor) return \"select\";\r\n\r\n const cursorMappings: { [key: string]: string } = {\r\n select: \"select\",\r\n hand: \"hand\",\r\n zoom: \"zoom\",\r\n };\r\n\r\n return cursorMappings[cursor.toLowerCase()] || \"select\";\r\n },\r\n\r\n fromViewer: (viewerCursor: any): string => {\r\n return typeof viewerCursor === \"string\" ? viewerCursor : \"select\";\r\n },\r\n };\r\n\r\n static transformScroll = {\r\n toViewer: (scroll: string): string => {\r\n if (!scroll) return \"vertical\";\r\n\r\n const scrollMappings: { [key: string]: string } = {\r\n vertical: \"vertical\",\r\n horizontal: \"horizontal\",\r\n wrapped: \"wrapped\",\r\n page: \"page\",\r\n };\r\n\r\n return scrollMappings[scroll.toLowerCase()] || \"vertical\";\r\n },\r\n\r\n fromViewer: (viewerScroll: any): string => {\r\n const scrollModes = [\"vertical\", \"horizontal\", \"wrapped\", \"page\"];\r\n if (typeof viewerScroll === \"number\") {\r\n return scrollModes[viewerScroll] || \"vertical\";\r\n }\r\n return typeof viewerScroll === \"string\" ? viewerScroll : \"vertical\";\r\n },\r\n };\r\n\r\n static transformSpread = {\r\n toViewer: (spread: string): string => {\r\n if (!spread) return \"none\";\r\n\r\n const spreadMappings: { [key: string]: string } = {\r\n none: \"none\",\r\n odd: \"odd\",\r\n even: \"even\",\r\n };\r\n\r\n return spreadMappings[spread.toLowerCase()] || \"none\";\r\n },\r\n\r\n fromViewer: (viewerSpread: any): string => {\r\n const spreadModes = [\"none\", \"odd\", \"even\"];\r\n if (typeof viewerSpread === \"number\") {\r\n return spreadModes[viewerSpread] || \"none\";\r\n }\r\n return typeof viewerSpread === \"string\" ? viewerSpread : \"none\";\r\n },\r\n };\r\n\r\n static transformPageMode = {\r\n toViewer: (pageMode: string): string => {\r\n if (!pageMode) return \"none\";\r\n\r\n const pageModeMapping: { [key: string]: string } = {\r\n none: \"none\",\r\n thumbs: \"thumbs\",\r\n bookmarks: \"bookmarks\",\r\n attachments: \"attachments\",\r\n };\r\n\r\n return pageModeMapping[pageMode.toLowerCase()] || \"none\";\r\n },\r\n\r\n fromViewer: (viewerPageMode: any): string => {\r\n return typeof viewerPageMode === \"string\" ? viewerPageMode : \"none\";\r\n },\r\n };\r\n}\r\n","// Common utility functions for the PDF viewer component\r\nexport class ComponentUtils {\r\n // Common PostMessage action mapping\r\n static getActionForProperty(propertyName: string): string | null {\r\n const propertyActionMap: { [key: string]: string } = {\r\n // Control visibility\r\n showOpenFile: \"show-openfile\",\r\n showDownload: \"show-download\",\r\n showPrint: \"show-print\",\r\n showFullScreen: \"show-fullscreen\",\r\n showFind: \"show-find\",\r\n showViewBookmark: \"show-bookmark\",\r\n showAnnotations: \"show-annotations\",\r\n\r\n // Mode controls\r\n cursor: \"set-cursor\",\r\n scroll: \"set-scroll\",\r\n spread: \"set-spread\",\r\n zoom: \"set-zoom\",\r\n pageMode: \"update-page-mode\",\r\n\r\n // Navigation\r\n page: \"set-page\",\r\n rotation: \"set-rotation\",\r\n namedDest: \"go-to-named-dest\",\r\n\r\n // Auto-actions\r\n downloadOnLoad: \"trigger-download\",\r\n printOnLoad: \"trigger-print\",\r\n showLastPageOnLoad: \"go-to-last-page\",\r\n rotateCW: \"trigger-rotate-cw\",\r\n rotateCCW: \"trigger-rotate-ccw\",\r\n\r\n // Error handling\r\n errorMessage: \"set-error-message\",\r\n errorOverride: \"set-error-override\",\r\n errorAppend: \"set-error-append\",\r\n\r\n // Configuration\r\n locale: \"set-locale\",\r\n useOnlyCssZoom: \"set-css-zoom\",\r\n downloadFileName: \"set-download-filename\",\r\n\r\n // Theme & Visual Customization\r\n theme: \"set-theme\",\r\n primaryColor: \"set-primary-color\",\r\n backgroundColor: \"set-background-color\",\r\n pageBorderColor: \"set-page-border-color\",\r\n pageSpacing: \"set-page-spacing\",\r\n toolbarColor: \"set-toolbar-color\",\r\n textColor: \"set-text-color\",\r\n borderRadius: \"set-border-radius\",\r\n customCSS: \"set-custom-css\",\r\n\r\n // Configuration\r\n diagnosticLogs: \"set-diagnostic-logs\",\r\n };\r\n\r\n // Toolbar/Sidebar group visibility\r\n const groupVisibilityMap: { [key: string]: string } = {\r\n showToolbarLeft: \"show-toolbar-left\",\r\n showToolbarMiddle: \"show-toolbar-middle\",\r\n showToolbarRight: \"show-toolbar-right\",\r\n showSecondaryToolbarToggle: \"show-secondary-toolbar-toggle\",\r\n showSidebar: \"show-sidebar\",\r\n showSidebarLeft: \"show-sidebar-left\",\r\n showSidebarRight: \"show-sidebar-right\",\r\n };\r\n\r\n // Layout & responsive customization\r\n const layoutMap: { [key: string]: string } = {\r\n toolbarDensity: \"set-toolbar-density\",\r\n sidebarWidth: \"set-sidebar-width\",\r\n toolbarPosition: \"set-toolbar-position\",\r\n sidebarPosition: \"set-sidebar-position\",\r\n responsiveBreakpoint: \"set-responsive-breakpoint\",\r\n };\r\n\r\n return (\r\n propertyActionMap[propertyName] ||\r\n groupVisibilityMap[propertyName] ||\r\n layoutMap[propertyName] ||\r\n null\r\n );\r\n }\r\n\r\n // Event handler cleanup utility\r\n static cleanupEventHandlers(component: any): void {\r\n // Clean up webviewerloaded handler\r\n if ((component as any)._webviewerLoadedHandler) {\r\n document.removeEventListener(\r\n \"webviewerloaded\",\r\n (component as any)._webviewerLoadedHandler,\r\n );\r\n }\r\n\r\n // Clean up PDF.js event handlers\r\n if ((component as any)._pdfEventHandlers) {\r\n const handlers = (component as any)._pdfEventHandlers;\r\n const eventBus = component.PDFViewerApplication?.eventBus;\r\n\r\n if (eventBus) {\r\n Object.keys(handlers).forEach((eventName) => {\r\n eventBus.off(eventName, handlers[eventName]);\r\n });\r\n }\r\n }\r\n }\r\n}\r\n","// Change origin tracking for two-way binding circular update prevention\r\nexport class ChangeOriginTracker {\r\n private userInitiatedChanges = new Set<string>();\r\n private programmaticChanges = new Set<string>();\r\n\r\n markUserInitiated(property: string): void {\r\n this.userInitiatedChanges.add(property);\r\n setTimeout(() => this.userInitiatedChanges.delete(property), 0);\r\n }\r\n\r\n markProgrammatic(property: string): void {\r\n this.programmaticChanges.add(property);\r\n setTimeout(() => this.programmaticChanges.delete(property), 0);\r\n }\r\n\r\n isUserInitiated(property: string): boolean {\r\n return this.userInitiatedChanges.has(property);\r\n }\r\n\r\n isProgrammatic(property: string): boolean {\r\n return this.programmaticChanges.has(property);\r\n }\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n OnInit,\r\n OnDestroy,\r\n ViewChild,\r\n EventEmitter,\r\n ElementRef,\r\n OnChanges,\r\n TemplateRef,\r\n SimpleChanges,\r\n AfterViewInit,\r\n} from \"@angular/core\";\r\n\r\n// Import extracted modules\r\nimport {\r\n ControlMessage,\r\n ControlResponse,\r\n PropertyChangeEvent,\r\n ViewerAction,\r\n ActionExecutionResult,\r\n ChangedPage,\r\n ChangedScale,\r\n ChangedRotation,\r\n ControlVisibilityConfig,\r\n GroupVisibilityConfig,\r\n LayoutConfig,\r\n ToolbarDensity,\r\n ToolbarPosition,\r\n SidebarPosition,\r\n AutoActionConfig,\r\n ErrorConfig,\r\n ViewerConfig,\r\n ThemeConfig,\r\n DocumentError,\r\n PagesInfo,\r\n PresentationMode,\r\n FindOperation,\r\n FindMatchesCount,\r\n DocumentMetadata,\r\n DocumentOutline,\r\n PageRenderInfo,\r\n // New high-value events\r\n AnnotationLayerRenderEvent,\r\n BookmarkClick,\r\n} from \"./interfaces/ViewerTypes\";\r\nimport { ActionQueueManager } from \"./managers/ActionQueueManager\";\r\nimport { PropertyTransformers } from \"./utils/PropertyTransformers\";\r\nimport { ComponentUtils } from \"./utils/ComponentUtils\";\r\nimport { ChangeOriginTracker } from \"./utils/ChangeOriginTracker\";\r\n\r\n@Component({\r\n selector: \"ng2-pdfjs-viewer\",\r\n standalone: false,\r\n styles: [\r\n `\r\n /* Main container styling */\r\n .ng2-pdfjs-viewer-container {\r\n position: relative;\r\n width: 100%;\r\n height: 100%;\r\n }\r\n\r\n /* Spinner overlay styling */\r\n .ng2-pdfjs-loading-overlay {\r\n position: absolute;\r\n inset: 0;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n background: rgba(255, 255, 255, 0.6);\r\n backdrop-filter: saturate(120%) blur(1px);\r\n }\r\n\r\n /* Default spinner content styling */\r\n .ng2-pdfjs-spinner-content {\r\n text-align: center;\r\n }\r\n\r\n .ng2-pdfjs-spinner-icon {\r\n display: inline-block;\r\n width: 40px;\r\n height: 40px;\r\n border: 4px solid #f3f3f3;\r\n border-top: 4px solid #2196F3;\r\n border-radius: 50%;\r\n animation: spin 1s linear infinite;\r\n }\r\n\r\n .ng2-pdfjs-spinner-text {\r\n margin-top: 16px;\r\n color: #666;\r\n font-size: 16px;\r\n }\r\n\r\n /* Error overlay styling */\r\n .ng2-pdfjs-error-overlay {\r\n position: absolute;\r\n inset: 0;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n background: rgba(255, 255, 255, 0.9);\r\n backdrop-filter: saturate(120%) blur(1px);\r\n }\r\n\r\n /* Default error content styling */\r\n .ng2-pdfjs-error-content {\r\n text-align: center;\r\n max-width: 400px;\r\n padding: 20px;\r\n }\r\n\r\n .ng2-pdfjs-error-icon {\r\n font-size: 48px;\r\n color: #f44336;\r\n margin-bottom: 16px;\r\n }\r\n\r\n .ng2-pdfjs-error-title {\r\n color: #333;\r\n font-size: 18px;\r\n font-weight: 500;\r\n margin-bottom: 8px;\r\n }\r\n\r\n .ng2-pdfjs-error-message {\r\n color: #666;\r\n font-size: 14px;\r\n line-height: 1.4;\r\n }\r\n\r\n /* Default spinner animation */\r\n @keyframes spin {\r\n 0% {\r\n transform: rotate(0deg);\r\n }\r\n 100% {\r\n transform: rotate(360deg);\r\n }\r\n }\r\n\r\n /* Iframe border styling */\r\n .ng2-pdfjs-viewer-iframe {\r\n border: 0;\r\n }\r\n \r\n /* Dynamic border classes */\r\n .ng2-pdfjs-viewer-iframe.has-border {\r\n border: 1px solid #ccc;\r\n }\r\n `,\r\n ],\r\n template: `\r\n <div class=\"ng2-pdfjs-viewer-container\">\r\n <iframe\r\n [title]=\"iframeTitle || 'PDF document viewer'\"\r\n [hidden]=\"externalWindow || (!externalWindow && !pdfSrc)\"\r\n sandbox=\"allow-forms allow-scripts allow-same-origin allow-modals allow-downloads\"\r\n [class]=\"getIframeClasses()\"\r\n #iframe\r\n width=\"100%\"\r\n height=\"100%\"\r\n ></iframe>\r\n \r\n <div\r\n class=\"ng2-pdfjs-loading-overlay\"\r\n *ngIf=\"showSpinner && isLoading && !externalWindow\"\r\n [ngClass]=\"spinnerClass\"\r\n >\r\n <ng-container\r\n *ngIf=\"customSpinnerTpl; else defaultSpinner\"\r\n [ngTemplateOutlet]=\"customSpinnerTpl\"\r\n ></ng-container>\r\n <ng-template #defaultSpinner>\r\n <div class=\"ng2-pdfjs-spinner-content\">\r\n <div class=\"ng2-pdfjs-spinner-icon\"></div>\r\n <div class=\"ng2-pdfjs-spinner-text\">\r\n Loading PDF...\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n <div\r\n class=\"ng2-pdfjs-error-overlay\"\r\n *ngIf=\"errorOverride && hasError && !externalWindow\"\r\n [ngClass]=\"errorClass\"\r\n >\r\n <ng-container\r\n *ngIf=\"customErrorTpl; else defaultError\"\r\n [ngTemplateOutlet]=\"customErrorTpl\"\r\n [ngTemplateOutletContext]=\"getErrorTemplateData()\"\r\n ></ng-container>\r\n <ng-template #defaultError>\r\n <div class=\"ng2-pdfjs-error-content\">\r\n <div class=\"ng2-pdfjs-error-icon\">\r\n ⚠️\r\n </div>\r\n <div class=\"ng2-pdfjs-error-title\">\r\n Error Loading PDF\r\n </div>\r\n <div class=\"ng2-pdfjs-error-message\">\r\n {{ currentErrorMessage }}\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n `,\r\n})\r\nexport class PdfJsViewerComponent\r\n implements OnInit, OnDestroy, OnChanges, AfterViewInit\r\n{\r\n // #region Component Properties\r\n @ViewChild(\"iframe\", { static: true }) iframe: ElementRef;\r\n\r\n static lastID = 0;\r\n @Input() public viewerId =\r\n `ng2-pdfjs-viewer-ID${++PdfJsViewerComponent.lastID}`;\r\n\r\n // #region Event Outputs\r\n @Output() onBeforePrint: EventEmitter<void> = new EventEmitter();\r\n @Output() onAfterPrint: EventEmitter<void> = new EventEmitter();\r\n @Output() onDocumentLoad: EventEmitter<void> = new EventEmitter();\r\n @Output() onPageChange: EventEmitter<ChangedPage> = new EventEmitter();\r\n @Output() onScaleChange: EventEmitter<ChangedScale> = new EventEmitter();\r\n @Output() onRotationChange: EventEmitter<ChangedRotation> =\r\n new EventEmitter();\r\n\r\n // New high-value events for enhanced PDF viewer functionality\r\n @Output() onDocumentError: EventEmitter<DocumentError> = new EventEmitter();\r\n @Output() onDocumentInit: EventEmitter<void> = new EventEmitter();\r\n @Output() onPagesInit: EventEmitter<PagesInfo> = new EventEmitter();\r\n @Output() onPresentationModeChanged: EventEmitter<PresentationMode> =\r\n new EventEmitter();\r\n @Output() onOpenFile: EventEmitter<void> = new EventEmitter();\r\n @Output() onFind: EventEmitter<FindOperation> = new EventEmitter();\r\n @Output() onUpdateFindMatchesCount: EventEmitter<FindMatchesCount> =\r\n new EventEmitter();\r\n @Output() onMetadataLoaded: EventEmitter<DocumentMetadata> =\r\n new EventEmitter();\r\n @Output() onOutlineLoaded: EventEmitter<DocumentOutline> = new EventEmitter();\r\n @Output() onPageRendered: EventEmitter<PageRenderInfo> = new EventEmitter();\r\n\r\n // New high-value events\r\n @Output()\r\n onAnnotationLayerRendered: EventEmitter<AnnotationLayerRenderEvent> =\r\n new EventEmitter();\r\n @Output() onBookmarkClick: EventEmitter<BookmarkClick> = new EventEmitter();\r\n @Output() onIdle: EventEmitter<void> = new EventEmitter();\r\n // #endregion\r\n\r\n // #region Basic Configuration Properties\r\n @Input() public viewerFolder: string;\r\n @Input() public externalWindow: boolean = false;\r\n @Input() public target: string = \"_blank\";\r\n @Input() public showSpinner: boolean = true;\r\n @Input() public downloadFileName: string;\r\n @Input() public locale: string;\r\n @Input() public useOnlyCssZoom: boolean = false;\r\n @Input() public set diagnosticLogs(value: boolean) {\r\n this._diagnosticLogs = value;\r\n // Update action queue manager\r\n this.actionQueueManager.setDiagnosticLogs(value);\r\n // Send to wrapper\r\n this.dispatchAction(\"set-diagnostic-logs\", value, \"property-change\");\r\n }\r\n \r\n public get diagnosticLogs(): boolean {\r\n return this._diagnosticLogs;\r\n }\r\n \r\n private _diagnosticLogs: boolean = false;\r\n // #endregion\r\n\r\n // #region Control Visibility Properties\r\n @Input() public showOpenFile: boolean = true;\r\n @Input() public showAnnotations: boolean = false;\r\n @Input() public showDownload: boolean = true;\r\n @Input() public showViewBookmark: boolean = true;\r\n @Input() public showPrint: boolean = true;\r\n @Input() public showFullScreen: boolean = true;\r\n @Input() public showFind: boolean = true;\r\n // #endregion\r\n\r\n // #region Auto-Action Properties\r\n @Input() public downloadOnLoad: boolean = false;\r\n @Input() public enableSandbox: boolean = false;\r\n @Input() public printOnLoad: boolean = false;\r\n @Input() public rotateCW: boolean = false;\r\n @Input() public rotateCCW: boolean = false;\r\n @Input() public showLastPageOnLoad: boolean = false;\r\n // #endregion\r\n\r\n // #region Navigation Properties\r\n @Input() public namedDest: string;\r\n // #endregion\r\n\r\n // #region Error Handling Properties\r\n @Input() public errorOverride: boolean = false;\r\n @Input() public errorAppend: boolean = true;\r\n @Input() public errorMessage: string;\r\n @Input() public urlValidation: boolean = true;\r\n @Input() public customSecurityTpl: TemplateRef<any>;\r\n \r\n // Security warning state\r\n public securityWarning: { message: string; originalUrl: string; currentUrl: string } | null = null;\r\n // #endregion\r\n\r\n // #region Theme & Visual Customization Properties\r\n @Input() public theme: \"light\" | \"dark\" | \"auto\" = \"auto\";\r\n @Input() public primaryColor?: string;\r\n @Input() public backgroundColor?: string;\r\n @Input() public pageBorderColor?: string;\r\n @Input() public pageSpacing?: {\r\n margin?: string;\r\n spreadMargin?: string;\r\n border?: string;\r\n };\r\n @Input() public toolbarColor?: string;\r\n @Input() public textColor?: string;\r\n @Input() public borderRadius?: string;\r\n @Input() public customCSS?: string;\r\n @Input() public cspNonce?: string;\r\n @Input() public iframeTitle?: string; // CSP nonce for customCSS (optional)\r\n // #endregion\r\n\r\n // #region Loading & Spinner Customization\r\n @Input() public customSpinnerTpl?: TemplateRef<any>;\r\n @Input() public spinnerClass?: string;\r\n // #endregion\r\n\r\n // #region Error Display Customization\r\n @Input() public customErrorTpl?: TemplateRef<any>;\r\n @Input() public errorClass?: string;\r\n // #endregion\r\n\r\n // #region Toolbar/Sidebar Group Visibility\r\n @Input() public showToolbarLeft: boolean = true;\r\n @Input() public showToolbarMiddle: boolean = true;\r\n @Input() public showToolbarRight: boolean = true;\r\n @Input() public showSecondaryToolbarToggle: boolean = true;\r\n @Input() public showSidebar: boolean = true;\r\n @Input() public showSidebarLeft: boolean = true;\r\n @Input() public showSidebarRight: boolean = true;\r\n // #endregion\r\n\r\n // #region Layout & Responsive Customization\r\n @Input() public toolbarDensity: ToolbarDensity = \"default\";\r\n @Input() public sidebarWidth?: string; // e.g., '280px'\r\n @Input() public toolbarPosition: ToolbarPosition = \"top\";\r\n @Input() public sidebarPosition: SidebarPosition = \"left\";\r\n @Input() public responsiveBreakpoint?: string | number;\r\n // #endregion\r\n\r\n // Internal loading state for overlay control\r\n public isLoading: boolean = true;\r\n private hasFirstRender: boolean = false;\r\n\r\n // Internal error state for error display\r\n public hasError: boolean = false;\r\n public currentErrorMessage: string = \"\";\r\n public errorTemplateData: any = {};\r\n\r\n // Helper method to get error template data\r\n public getErrorTemplateData(): any {\r\n return {\r\n errorMessage: this.currentErrorMessage,\r\n errorClass: this.errorClass,\r\n ...this.errorTemplateData,\r\n };\r\n }\r\n\r\n // Helper method to get iframe CSS classes\r\n public getIframeClasses(): string {\r\n const classes = ['ng2-pdfjs-viewer-iframe'];\r\n \r\n // Add border class if iframeBorder is set and not \"0\"\r\n if (this.iframeBorder && this.iframeBorder !== \"0\" && this.iframeBorder !== 0) {\r\n classes.push('has-border');\r\n }\r\n \r\n return classes.join(' ');\r\n }\r\n\r\n\r\n // Error template button actions\r\n public reloadViewer(): void {\r\n this.refresh();\r\n }\r\n\r\n public goBack(): void {\r\n if (window.history.length > 1) {\r\n window.history.back();\r\n } else {\r\n window.close();\r\n }\r\n }\r\n\r\n public closeViewer(): void {\r\n window.close();\r\n }\r\n\r\n // #region Convenience Configuration Setters\r\n @Input() public set controlVisibility(config: ControlVisibilityConfig) {\r\n if (config.download !== undefined) this.showDownload = config.download;\r\n if (config.print !== undefined) this.showPrint = config.print;\r\n if (config.find !== undefined) this.showFind = config.find;\r\n if (config.fullScreen !== undefined)\r\n this.showFullScreen = config.fullScreen;\r\n if (config.openFile !== undefined) this.showOpenFile = config.openFile;\r\n if (config.viewBookmark !== undefined)\r\n this.showViewBookmark = config.viewBookmark;\r\n if (config.annotations !== undefined)\r\n this.showAnnotations = config.annotations;\r\n }\r\n\r\n @Input() public set autoActions(config: AutoActionConfig) {\r\n if (config.downloadOnLoad !== undefined)\r\n this.downloadOnLoad = config.downloadOnLoad;\r\n if (config.printOnLoad !== undefined) this.printOnLoad = config.printOnLoad;\r\n if (config.showLastPageOnLoad !== undefined)\r\n this.showLastPageOnLoad = config.showLastPageOnLoad;\r\n if (config.rotateCW !== undefined) this.rotateCW = config.rotateCW;\r\n if (config.rotateCCW !== undefined) this.rotateCCW = config.rotateCCW;\r\n }\r\n\r\n @Input() public set errorHandling(config: ErrorConfig) {\r\n if (config.override !== undefined) this.errorOverride = config.override;\r\n if (config.append !== undefined) this.errorAppend = config.append;\r\n if (config.message !== undefined) this.errorMessage = config.message;\r\n }\r\n\r\n @Input() public set viewerConfig(config: ViewerConfig) {\r\n if (config.showSpinner !== undefined) this.showSpinner = config.showSpinner;\r\n if (config.useOnlyCssZoom !== undefined)\r\n this.useOnlyCssZoom = config.useOnlyCssZoom;\r\n if (config.diagnosticLogs !== undefined)\r\n this.diagnosticLogs = config.diagnosticLogs;\r\n if (config.locale !== undefined) this.locale = config.locale;\r\n }\r\n\r\n @Input() public set themeConfig(config: ThemeConfig) {\r\n if (config.theme !== undefined) this.theme = config.theme;\r\n if (config.primaryColor !== undefined)\r\n this.primaryColor = config.primaryColor;\r\n if (config.backgroundColor !== undefined)\r\n this.backgroundColor = config.backgroundColor;\r\n if (config.pageBorderColor !== undefined)\r\n this.pageBorderColor = config.pageBorderColor;\r\n if (config.pageSpacing !== undefined)\r\n this.pageSpacing = config.pageSpacing;\r\n if (config.toolbarColor !== undefined)\r\n this.toolbarColor = config.toolbarColor;\r\n if (config.textColor !== undefined) this.textColor = config.textColor;\r\n if (config.borderRadius !== undefined)\r\n this.borderRadius = config.borderRadius;\r\n if (config.customCSS !== undefined) this.customCSS = config.customCSS;\r\n if (config.cspNonce !== undefined) this.cspNonce = config.cspNonce;\r\n }\r\n\r\n @Input() public set groupVisibility(config: GroupVisibilityConfig) {\r\n if (config.toolbarLeft !== undefined)\r\n this.showToolbarLeft = config.toolbarLeft;\r\n if (config.toolbarMiddle !== undefined)\r\n this.showToolbarMiddle = config.toolbarMiddle;\r\n if (config.toolbarRight !== undefined)\r\n this.showToolbarRight = config.toolbarRight;\r\n if (config.secondaryToolbarToggle !== undefined)\r\n this.showSecondaryToolbarToggle = config.secondaryToolbarToggle;\r\n if (config.sidebar !== undefined) this.showSidebar = config.sidebar;\r\n if (config.sidebarLeft !== undefined)\r\n this.showSidebarLeft = config.sidebarLeft;\r\n if (config.sidebarRight !== undefined)\r\n this.showSidebarRight = config.sidebarRight;\r\n }\r\n\r\n @Input() public set layoutConfig(config: LayoutConfig) {\r\n if (config.toolbarDensity !== undefined)\r\n this.toolbarDensity = config.toolbarDensity;\r\n if (config.sidebarWidth !== undefined)\r\n this.sidebarWidth = config.sidebarWidth;\r\n if (config.toolbarPosition !== undefined)\r\n this.toolbarPosition = config.toolbarPosition;\r\n if (config.sidebarPosition !== undefined)\r\n this.sidebarPosition = config.sidebarPosition;\r\n if (config.responsiveBreakpoint !== undefined)\r\n this.responsiveBreakpoint = config.responsiveBreakpoint;\r\n }\r\n // #endregion\r\n\r\n // #region Helper function for deprecated properties\r\n private setDeprecatedProperty(\r\n oldName: string,\r\n newProperty: string,\r\n value: any,\r\n ): void {\r\n if (this.diagnosticLogs) {\r\n console.warn(\r\n `⚠️ DEPRECATED: Property \"${oldName}\" is deprecated. Use \"${newProperty}\" instead.`,\r\n );\r\n }\r\n (this as any)[newProperty] = value;\r\n }\r\n // #endregion\r\n\r\n // #region Deprecated Properties (Simplified)\r\n /** @deprecated Use `downloadOnLoad` instead. This property will be removed in a future version. */\r\n @Input() public set startDownload(value: boolean) {\r\n this.setDeprecatedProperty(\"startDownload\", \"downloadOnLoad\", value);\r\n }\r\n\r\n /** @deprecated Use `printOnLoad` instead. This property will be removed in a future version. */\r\n @Input() public set startPrint(value: boolean) {\r\n this.setDeprecatedProperty(\"startPrint\", \"printOnLoad\", value);\r\n }\r\n\r\n /** @deprecated Use `showOpenFile` instead. This property will be removed in a future version. */\r\n @Input() public set openFile(value: boolean) {\r\n this.setDeprecatedProperty(\"openFile\", \"showOpenFile\", value);\r\n }\r\n\r\n /** @deprecated Use `showDownload` instead. This property will be removed in a future version. */\r\n @Input() public set download(value: boolean) {\r\n this.setDeprecatedProperty(\"download\", \"showDownload\", value);\r\n }\r\n\r\n /** @deprecated Use `showPrint` instead. This property will be removed in a future version. */\r\n @Input() public set print(value: boolean) {\r\n this.setDeprecatedProperty(\"print\", \"showPrint\", value);\r\n }\r\n\r\n /** @deprecated Use `showFullScreen` instead. This property will be removed in a future version. */\r\n @Input() public set fullScreen(value: boolean) {\r\n this.setDeprecatedProperty(\"fullScreen\", \"showFullScreen\", value);\r\n }\r\n\r\n /** @deprecated Use `showFind` instead. This property will be removed in a future version. */\r\n @Input() public set find(value: boolean) {\r\n this.setDeprecatedProperty(\"find\", \"showFind\", value);\r\n }\r\n\r\n /** @deprecated Use `showViewBookmark` instead. This property will be removed in a future version. */\r\n @Input() public set viewBookmark(value: boolean) {\r\n this.setDeprecatedProperty(\"viewBookmark\", \"showViewBookmark\", value);\r\n }\r\n\r\n /** @deprecated Use `showLastPageOnLoad` instead. This property will be removed in a future version. */\r\n @Input() public set lastPage(value: boolean) {\r\n this.setDeprecatedProperty(\"lastPage\", \"showLastPageOnLoad\", value);\r\n }\r\n // #endregion\r\n\r\n // #region External Window Properties\r\n @Input() public externalWindowOptions: string;\r\n public viewerTab: any;\r\n // #endregion\r\n\r\n // #region Security Properties\r\n // iframe sandbox is static for security and Angular compliance\r\n // #endregion\r\n\r\n // #region iframe Properties\r\n @Input() public iframeBorder: string | number = \"0\";\r\n // #endregion\r\n\r\n // #region Private Properties\r\n private _src: string | Blob | Uint8Array;\r\n private _page: number;\r\n private isPostMessageReady = false;\r\n private postMessageReadiness = 0;\r\n private pendingInitialConfig = true;\r\n private initialConfigQueued = false;\r\n private actionQueueManager: ActionQueueManager = new ActionQueueManager(this._diagnosticLogs);\r\n private changeOriginTracker = new ChangeOriginTracker();\r\n private messageIdCounter = 0;\r\n private pendingMessages = new Map<\r\n string,\r\n { resolve: Function; reject: Function }\r\n >();\r\n private pendingChanges: SimpleChanges[] = [];\r\n private relaseUrl?: () => void;\r\n // #endregion\r\n\r\n // #region Two-Way Binding Properties\r\n // Private backing fields for two-way binding properties\r\n private _zoom: string = \"auto\";\r\n private _rotation: number = 0;\r\n private _cursor: string = \"select\";\r\n private _scroll: string = \"vertical\";\r\n private _spread: string = \"none\";\r\n private _pageMode: string = \"none\";\r\n\r\n // Two-way binding Output events\r\n @Output() zoomChange = new EventEmitter<string>();\r\n\r\n @Output() cursorChange = new EventEmitter<string>();\r\n @Output() scrollChange = new EventEmitter<string>();\r\n @Output() spreadChange = new EventEmitter<string>();\r\n @Output() pageModeChange = new EventEmitter<string>();\r\n\r\n /**\r\n * Two-way binding for zoom level\r\n * Supports: auto, page-fit, page-width, page-actual, percentage values (e.g., \"150%\")\r\n */\r\n @Input()\r\n get zoom(): string {\r\n return this._zoom;\r\n }\r\n set zoom(value: string) {\r\n const normalizedValue = PropertyTransformers.transformZoom.toViewer(value);\r\n if (this._zoom !== normalizedValue) {\r\n this.changeOriginTracker.markProgrammatic(\"zoom\");\r\n this._zoom = normalizedValue;\r\n this.applyZoomToViewer(this._zoom);\r\n this.zoomChange.emit(this._zoom);\r\n }\r\n }\r\n\r\n /**\r\n * One-way binding for document rotation\r\n * Supports: 0, 90, 180, 270 degrees\r\n */\r\n @Input()\r\n set rotation(value: number) {\r\n const normalizedValue =\r\n PropertyTransformers.transformRotation.toViewer(value);\r\n if (this._rotation !== normalizedValue) {\r\n this._rotation = normalizedValue;\r\n this.applyRotationToViewer(this._rotation);\r\n }\r\n }\r\n\r\n get rotation(): number {\r\n return this._rotation;\r\n }\r\n\r\n /**\r\n * Two-way binding for cursor mode\r\n * Supports: select, hand, zoom\r\n */\r\n @Input()\r\n get cursor(): string {\r\n return this._cursor;\r\n }\r\n set cursor(value: string) {\r\n const normalizedValue =\r\n PropertyTransformers.transformCursor.toViewer(value);\r\n if (this._cursor !== normalizedValue) {\r\n this.changeOriginTracker.markProgrammatic(\"cursor\");\r\n this._cursor = normalizedValue;\r\n this.applyCursorToViewer(this._cursor);\r\n this.cursorChange.emit(this._cursor);\r\n }\r\n }\r\n\r\n /**\r\n * Two-way binding for scroll mode\r\n * Supports: vertical, horizontal, wrapped, page\r\n */\r\n @Input()\r\n get scroll(): string {\r\n return this._scroll;\r\n }\r\n set scroll(value: string) {\r\n const normalizedValue =\r\n PropertyTransformers.transformScroll.toViewer(value);\r\n if (this._scroll !== normalizedValue) {\r\n this.changeOriginTracker.markProgrammatic(\"scroll\");\r\n this._scroll = normalizedValue;\r\n this.applyScrollToViewer(this._scroll);\r\n this.scrollChange.emit(this._scroll);\r\n }\r\n }\r\n\r\n /**\r\n * Two-way binding for spread mode\r\n * Supports: none, odd, even\r\n */\r\n @Input()\r\n get spread(): string {\r\n return this._spread;\r\n }\r\n set spread(value: string) {\r\n const normalizedValue =\r\n PropertyTransformers.transformSpread.toViewer(value);\r\n if (this._spread !== normalizedValue) {\r\n this.changeOriginTracker.markProgrammatic(\"spread\");\r\n this._spread = normalizedValue;\r\n this.applySpreadToViewer(this._spread);\r\n this.spreadChange.emit(this._spread);\r\n }\r\n }\r\n\r\n /**\r\n * Two-way binding for page mode (sidebar state)\r\n * Supports: none, thumbs, bookmarks, attachments\r\n */\r\n @Input()\r\n get pageMode(): string {\r\n return this._pageMode;\r\n }\r\n set pageMode(value: string) {\r\n const normalizedValue =\r\n PropertyTransformers.transformPageMode.toViewer(value);\r\n if (this._pageMode !== normalizedValue) {\r\n this.changeOriginTracker.markProgrammatic(\"pageMode\");\r\n this._pageMode = normalizedValue;\r\n this.applyPageModeToViewer(this._pageMode);\r\n this.pageModeChange.emit(this._pageMode);\r\n }\r\n }\r\n\r\n @Input()\r\n public set page(_page: number) {\r\n this._page = _page;\r\n if (this.PDFViewerApplication && this.PDFViewerApplication.initialized) {\r\n this.PDFViewerApplication.page = this._page;\r\n } else {\r\n if (this.diagnosticLogs) {\r\n console.warn(\r\n \"Document is not loaded yet!!!. Try to set page# after full load. Ignore this warning if you are not setting page# using '.' notation. (E.g. pdfViewer.page = 5;)\",\r\n );\r\n }\r\n }\r\n }\r\n\r\n public get page() {\r\n if (this.PDFViewerApplication && this.PDFViewerApplication.initialized) {\r\n return this.PDFViewerApplication.page;\r\n } else {\r\n if (this.diagnosticLogs) {\r\n console.warn(\r\n \"Document is not loaded yet!!!. Try to retrieve page# after full load.\",\r\n );\r\n }\r\n return this._page || 1;\r\n }\r\n }\r\n\r\n @Input()\r\n public set pdfSrc(_src: string | Blob | Uint8Array) {\r\n this._src = _src;\r\n }\r\n\r\n public get pdfSrc() {\r\n return this._src;\r\n }\r\n // #endregion\r\n\r\n // #region PDF.js Application Access Properties\r\n public get PDFViewerApplicationOptions() {\r\n let pdfViewerOptions = null;\r\n if (this.externalWindow) {\r\n if (this.viewerTab) {\r\n pdfViewerOptions = this.viewerTab.PDFViewerApplicationOptions;\r\n }\r\n } else {\r\n if (this.iframe.nativeElement.contentWindow) {\r\n pdfViewerOptions =\r\n this.iframe.nativeElement.contentWindow.PDFViewerApplicationOptions;\r\n }\r\n }\r\n return pdfViewerOptions;\r\n }\r\n\r\n public get PDFViewerApplication() {\r\n let pdfViewer = null;\r\n if (this.externalWindow) {\r\n if (this.viewerTab) {\r\n pdfViewer = this.viewerTab.PDFViewerApplication;\r\n }\r\n } else {\r\n if (this.iframe.nativeElement.contentWindow) {\r\n pdfViewer =\r\n this.iframe.nativeElement.contentWindow.PDFViewerApplication;\r\n }\r\n }\r\n if (this.diagnosticLogs) console.debug(\"PdfJsViewer: Viewer ->\", pdfViewer);\r\n return pdfViewer;\r\n }\r\n\r\n // #endregion\r\n // #endregion\r\n\r\n // #region Lifecycle Methods\r\n ngOnInit(): void { \r\n \r\n // Connect action queue manager to PostMessage system\r\n this.actionQueueManager.setPostMessageExecutor((action, payload) =>\r\n this.sendControlMessage(action, payload),\r\n );\r\n\r\n // Send diagnostic logs setting to wrapper\r\n this.dispatchAction(\"set-diagnostic-logs\", this._diagnosticLogs, \"initial-load\");\r\n \r\n // Send URL validation setting to wrapper\r\n this.dispatchAction(\"set-url-validation\", this.urlValidation, \"initial-load\");\r\n \r\n // Set up PostMessage listener\r\n this.setupMessageListener();\r\n \r\n // Note: PDF loading moved to ngAfterViewInit() to ensure iframe is ready\r\n // This prevents \"Cannot read properties of null (reading 'location')\" error\r\n // when pdfSrc is a Blob (Issue #283)\r\n\r\n // Bind events.\r\n this.bindToPdfJsEventBus();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n // Load PDF after view is initialized - trust Angular's lifecycle guarantee\r\n // that iframe.nativeElement.contentWindow is now available\r\n if (!this.externalWindow) {\r\n this.loadPdf();\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n // Handle pdfSrc changes - reload the PDF (Issue #283)\r\n // Trust Angular's change detection event to trigger reload when needed\r\n if (changes['pdfSrc'] && !changes['pdfSrc'].firstChange) {\r\n // pdfSrc changed after initialization - reload the PDF\r\n if (!this.externalWindow) {\r\n // Show spinner immediately when PDF source changes (Issue #275)\r\n this.isLoading = true;\r\n this.hasError = false;\r\n this.currentErrorMessage = \"\";\r\n \r\n // Reset configuration queuing since iframe will reload fresh\r\n this.initialConfigQueued = false;\r\n this.isPostMessageReady = false;\r\n this.loadPdf();\r\n }\r\n return; // pdfSrc change requires full reload, skip other change processing\r\n }\r\n \r\n if (this.PDFViewerApplication) {\r\n // Only apply changes if PostMessage API is ready and viewer is initialized\r\n if (this.isPostMessageReady && this.PDFViewerApplication.initialized) {\r\n this.applyChanges(changes);\r\n } else {\r\n this.pendingChanges.push(changes);\r\n }\r\n } else {\r\n this.pendingChanges.push(changes);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n // Clean up pending messages\r\n this.pendingMessages.clear();\r\n\r\n // Clean up event listeners\r\n ComponentUtils.cleanupEventHandlers(this);\r\n\r\n // Reset state flags\r\n this.initialConfigQueued = false;\r\n\r\n // Clean up URL\r\n this.relaseUrl?.();\r\n }\r\n // #endregion\r\n\r\n // #region Message Handling Methods\r\n private generateMessageId(): string {\r\n return `msg_${++this.messageIdCounter}_${Date.now()}`;\r\n }\r\n\r\n private sendControlMessage(action: string, payload: any): Promise<any> {\r\n return new Promise((resolve, reject) => {\r\n const messageId = this.generateMessageId();\r\n \r\n const message: ControlMessage = {\r\n type: \"control-update\",\r\n action,\r\n payload,\r\n id: messageId,\r\n timestamp: Date.now(),\r\n };\r\n\r\n this.pendingMessages.set(messageId, { resolve, reject });\r\n\r\n // Send message to iframe\r\n if (\r\n this.iframe &&\r\n this.iframe.nativeElement &&\r\n this.iframe.nativeElement.contentWindow\r\n ) {\r\n this.iframe.nativeElement.contentWindow.postMessage(message, \"*\");\r\n } else {\r\n this.pendingMessages.delete(messageId);\r\n reject(new Error(\"Iframe not available\"));\r\n }\r\n });\r\n }\r\n\r\n private handleControlResponse(response: ControlResponse): void {\r\n const pendingMessage = this.pendingMessages.get(response.id);\r\n if (pendingMessage) {\r\n this.pendingMessages.delete(response.id);\r\n \r\n if (response.success) {\r\n pendingMessage.resolve(response);\r\n } else {\r\n pendingMessage.reject(new Error(response.error || \"Unknown error\"));\r\n }\r\n }\r\n }\r\n\r\n private setupMessageListener(): void {\r\n window.addEventListener(\"message\", (event) => {\r\n // Handle control responses from the viewer\r\n if (event.data && event.data.type === \"control-response\") {\r\n this.handleControlResponse(event.data);\r\n return;\r\n }\r\n \r\n // Handle security warning from viewer\r\n if (event.data && event.data.type === \"ng2-pdfjs-viewer-security-warning\") {\r\n this.securityWarning = {\r\n message: event.data.message,\r\n originalUrl: event.data.originalUrl,\r\n currentUrl: event.data.currentUrl\r\n };\r\n return;\r\n }\r\n \r\n // Handle PostMessage API ready notification\r\n if (event.data && event.data.type === \"postmessage-ready\") {\r\n this.isPostMessageReady = true;\r\n\r\n this.postMessageReadiness = event.data.readiness || 0;\r\n\r\n // CRITICAL FIX: Process queued actions when readiness level increases\r\n if (this.actionQueueManager) {\r\n this.actionQueueManager.updateReadiness(this.postMessageReadiness);\r\n this.actionQueueManager.processQueuedActions();\r\n }\r\n \r\n // Always (re)apply initial configurations when PostMessage API is ready.\r\n // This makes reloads idempotently reconfigure the viewer.\r\n this.queueAllConfigurations();\r\n this.initialConfigQueued = true;\r\n \r\n // Apply any pending changes that occurred before PostMessage API was ready\r\n this.applyPendingChanges();\r\n return;\r\n }\r\n \r\n // Handle state change notifications from PostMessage wrapper\r\n if (event.data && event.data.type === \"state-change\") {\r\n this.handleStateChangeNotification(event.data);\r\n return;\r\n }\r\n\r\n // Handle event notifications from PostMessage wrapper\r\n if (event.data && event.data.type === \"event-notification\") {\r\n this.handleEventNotification(event.data);\r\n return;\r\n }\r\n });\r\n }\r\n\r\n private handleStateChangeNotification(notification: any): void {\r\n const { property, value, source } = notification;\r\n \r\n // Internal loading overlay control is system-driven and must be handled unconditionally\r\n if (property === \"loading\") {\r\n this.isLoading = !!value;\r\n // Clear error state when loading starts\r\n if (value) {\r\n this.hasError = false;\r\n this.currentErrorMessage = \"\";\r\n }\r\n return;\r\n }\r\n\r\n // Internal error state management\r\n if (property === \"error\") {\r\n this.hasError = !!value;\r\n if (value && typeof value === \"string\") {\r\n this.currentErrorMessage = value;\r\n this.errorTemplateData = this.getErrorTemplateData();\r\n }\r\n return;\r\n }\r\n\r\n // Only process user-initiated changes to avoid infinite loops\r\n if (\r\n source === \"user\" &&\r\n !this.changeOriginTracker.isProgrammatic(property)\r\n ) {\r\n this.changeOriginTracker.markUserInitiated(property);\r\n \r\n switch (property) {\r\n case \"cursor\":\r\n if (this._cursor !== value) {\r\n this._cursor =\r\n PropertyTransformers.transformCursor.fromViewer(value);\r\n this.cursorChange.emit(this._cursor);\r\n }\r\n break;\r\n \r\n case \"scroll\":\r\n if (this._scroll !== value) {\r\n this._scroll =\r\n PropertyTransformers.transformScroll.fromViewer(value);\r\n this.scrollChange.emit(this._scroll);\r\n }\r\n break;\r\n \r\n case \"spread\":\r\n if (this._spread !== value) {\r\n this._spread =\r\n PropertyTransformers.transformSpread.fromViewer(value);\r\n this.spreadChange.emit(this._spread);\r\n }\r\n break;\r\n \r\n case \"pageMode\":\r\n if (this._pageMode !== value) {\r\n this._pageMode =\r\n PropertyTransformers.transformPageMode.fromViewer(value);\r\n this.pageModeChange.emit(this._pageMode);\r\n }\r\n break;\r\n \r\n case \"zoom\":\r\n if (this._zoom !== value) {\r\n this._zoom = PropertyTransformers.transformZoom.fromViewer(value);\r\n this.zoomChange.emit(this._zoom);\r\n }\r\n break;\r\n \r\n case \"rotation\":\r\n if (this._rotation !== value) {\r\n this._rotation =\r\n PropertyTransformers.transformRotation.fromViewer(value);\r\n }\r\n break;\r\n \r\n // Note: namedDest is now a simple input property, not a two-way binding\r\n \r\n default:\r\n if (this.diagnosticLogs) {\r\n console.log(\r\n `🔍 PdfJsViewer: Unknown state change property: ${property}`,\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n private handleEventNotification(notification: any): void {\r\n const { eventName, eventData } = notification;\r\n\r\n // Emit the appropriate event based on the event name\r\n switch (eventName) {\r\n case \"documentError\":\r\n this.onDocumentError.emit(eventData);\r\n break;\r\n\r\n case \"documentInit\":\r\n this.onDocumentInit.emit();\r\n break;\r\n\r\n case \"pagesInit\":\r\n this.onPagesInit.emit(eventData);\r\n break;\r\n\r\n case \"presentationModeChanged\":\r\n this.onPresentationModeChanged.emit(eventData);\r\n break;\r\n\r\n case \"openFile\":\r\n this.onOpenFile.emit();\r\n break;\r\n\r\n case \"find\":\r\n this.onFind.emit(eventData);\r\n break;\r\n\r\n case \"updateFindMatchesCount\":\r\n this.onUpdateFindMatchesCount.emit(eventData);\r\n break;\r\n\r\n case \"metadataLoaded\":\r\n this.onMetadataLoaded.emit(eventData);\r\n break;\r\n\r\n case \"outlineLoaded\":\r\n this.onOutlineLoaded.emit(eventData);\r\n break;\r\n\r\n case \"pageRendered\":\r\n this.onPageRendered.emit(eventData);\r\n break;\r\n\r\n case \"annotationLayerRendered\":\r\n this.onAnnotationLayerRendered.emit(eventData);\r\n break;\r\n\r\n case \"bookmarkClick\":\r\n this.onBookmarkClick.emit(eventData);\r\n break;\r\n\r\n case \"idle\":\r\n this.onIdle.emit();\r\n break;\r\n\r\n default:\r\n if (this.diagnosticLogs) {\r\n console.log(\r\n `🔍 PdfJsViewer: Unknown event notification: ${eventName}`,\r\n );\r\n }\r\n }\r\n }\r\n // #endregion\r\n\r\n // #region Property Mapping and Update Methods\r\n private mapPropertyToAction(propertyName: string): string | null {\r\n return ComponentUtils.getActionForProperty(propertyName);\r\n }\r\n\r\n private updateViewerControl(propertyName: string, value: any): void {\r\n const action = this.mapPropertyToAction(propertyName);\r\n if (action) {\r\n // Use universal dispatcher instead of direct PostMessage\r\n this.dispatchAction(action, value, \"property-change\");\r\n } else {\r\n // Property is intentionally not mapped (handled via query parameters or direct API)\r\n }\r\n }\r\n\r\n private applyChanges(changes: SimpleChanges): void {\r\n Object.keys(changes).forEach((propertyName) => {\r\n const change = changes[propertyName];\r\n\r\n if (change.currentValue !== change.previousValue) {\r\n // Handle auto-actions - queue for document load, don't execute immediately\r\n const autoActions = [\r\n \"downloadOnLoad\",\r\n \"printOnLoad\",\r\n \"showLastPageOnLoad\",\r\n \"rotateCW\",\r\n \"rotateCCW\",\r\n ];\r\n if (autoActions.includes(propertyName)) {\r\n // Re-queue all configurations when auto-actions change\r\n this.initialConfigQueued = false;\r\n if (this.isPostMessageReady) {\r\n this.queueAllConfigurations();\r\n this.initialConfigQueued = true;\r\n }\r\n return;\r\n }\r\n\r\n // Use universal dispatcher for ALL actions - pure event-driven approach\r\n const action = this.mapPropertyToAction(propertyName);\r\n if (action) {\r\n this.dispatchAction(action, change.currentValue, \"property-change\");\r\n }\r\n }\r\n });\r\n }\r\n\r\n private applyPendingChanges(): void {\r\n // Only apply pending changes if PostMessage API is ready\r\n if (!this.isPostMessageReady) {\r\n return;\r\n }\r\n \r\n if (this.pendingChanges.length > 0) {\r\n this.pendingChanges.forEach((changes, index) => {\r\n this.processChangesForQueuing(changes);\r\n });\r\n this.pendingChanges = [];\r\n } else {\r\n }\r\n }\r\n\r\n private processChangesForQueuing(changes: SimpleChanges): void {\r\n Object.keys(changes).forEach((propertyName) => {\r\n const change = changes[propertyName];\r\n \r\n if (change.currentValue !== change.previousValue) {\r\n // Handle auto-actions - queue for document load, don't execute immediately\r\n const autoActions = [\r\n \"downloadOnLoad\",\r\n \"printOnLoad\",\r\n \"showLastPageOnLoad\",\r\n \"rotateCW\",\r\n \"rotateCCW\",\r\n ];\r\n if (autoActions.includes(propertyName)) {\r\n // Re-queue all configurations when auto-actions change\r\n this.initialConfigQueued = false;\r\n if (this.isPostMessageReady) {\r\n this.queueAllConfigurations();\r\n this.initialConfigQueued = true;\r\n }\r\n return;\r\n }\r\n \r\n // Use universal dispatcher for ALL actions - pure event-driven approach\r\n const action = this.mapPropertyToAction(propertyName);\r\n if (action) {\r\n this.dispatchAction(action, change.currentValue, \"property-change\");\r\n }\r\n }\r\n });\r\n }\r\n // #endregion\r\n\r\n // #region PDF.js Event Binding Methods\r\n /**\r\n * Waits for the PDF.js viewer to be ready, and binds the the event bus.\r\n */\r\n private bindToPdfJsEventBus() {\r\n // Store the event listener reference so we can remove it later\r\n const webviewerLoadedHandler = () => {\r\n if (this.diagnosticLogs)\r\n console.debug(\"PdfJsViewer: webviewerloaded event received\");\r\n\r\n // Set locale immediately when PDF.js is loaded but before it initializes\r\n // https://github.com/mozilla/pdf.js/issues/11829#issuecomment-617668679\r\n if (this.locale && this.iframe?.nativeElement?.contentWindow) {\r\n try {\r\n const iframeWindow = this.iframe.nativeElement.contentWindow;\r\n if (iframeWindow.PDFViewerApplicationOptions) {\r\n iframeWindow.PDFViewerApplicationOptions.set(\"localeProperties\", {\r\n lang: this.locale,\r\n });\r\n if (this.diagnosticLogs)\r\n console.debug(\r\n `PdfJsViewer: Locale set to ${this.locale} before initialization`,\r\n );\r\n }\r\n } catch (error) {\r\n if (this.diagnosticLogs)\r\n console.debug(\r\n \"PdfJsViewer: Could not set locale before initialization:\",\r\n error,\r\n );\r\n }\r\n }\r\n\r\n if (!this.PDFViewerApplication) {\r\n if (this.diagnosticLogs)\r\n console.debug(\r\n \"PdfJsViewer: Viewer not yet (or no longer) available, events can not yet be bound.\",\r\n );\r\n return;\r\n }\r\n\r\n // https://github.com/mozilla/pdf.js/issues/9527\r\n this.PDFViewerApplication.initializedPromise.then(() => {\r\n // All configurations are now handled via PostMessage system\r\n // No need to call configureVisibleFeatures() anymore\r\n \r\n // Apply any pending changes that occurred before initialization\r\n this.applyPendingChanges();\r\n\r\n const app = this.PDFViewerApplication;\r\n const eventBus = app.eventBus;\r\n \r\n // Store event handler references for cleanup\r\n const documentLoadedHandler = () => {\r\n if (this.diagnosticLogs)\r\n console.debug(\"PdfJsViewer: The document has now been loaded!\");\r\n this.onDocumentLoad.emit();\r\n \r\n // Queue auto-actions for this document load (not from component initialization)\r\n this.queueAutoActionsForDocumentLoad();\r\n \r\n // Execute all queued auto-actions\r\n this.actionQueueManager.onDocumentLoaded();\r\n };\r\n\r\n // Note: pagesInit event is now handled via the PostMessage wrapper event system\r\n\r\n const pagesLoadedHandler = () => {\r\n if (this.diagnosticLogs)\r\n console.debug(\"PdfJsViewer: All pages have been fully loaded!\");\r\n\r\n // Execute auto-print on pages loaded (ensures PDF is fully ready for printing)\r\n if (this.printOnLoad === true) {\r\n this.dispatchAction(\"trigger-print\", true, \"initial-load\");\r\n }\r\n };\r\n\r\n const beforePrintHandler = () => {\r\n if (this.diagnosticLogs)\r\n console.debug(\"PdfJsViewer: The document is about to be printed!\");\r\n this.onBeforePrint.emit();\r\n };\r\n\r\n const afterPrintHandler = () => {\r\n if (this.diagnosticLogs)\r\n console.debug(\"PdfJsViewer: The document has been printed!\");\r\n this.onAfterPrint.emit();\r\n };\r\n\r\n const pageChangingHandler = (event: any) => {\r\n if (this.diagnosticLogs)\r\n console.debug(\r\n \"PdfJsViewer: The page has changed:\",\r\n event.pageNumber,\r\n );\r\n \r\n // Update two-way binding for page\r\n if (\r\n this._page !== event.pageNumber &&\r\n !this.changeOriginTracker.isProgrammatic(\"page\")\r\n ) {\r\n this.changeOriginTracker.markUserInitiated(\"page\");\r\n this._page = event.pageNumber;\r\n // Note: page property uses existing setter/getter, no need to emit pageChange here\r\n }\r\n \r\n this.onPageChange.emit(event.pageNumber);\r\n };\r\n\r\n const rotationChangingHandler = (event: any) => {\r\n const newRotation: ChangedRotation = {\r\n rotation: event.pagesRotation,\r\n page: event.pageNumber,\r\n };\r\n if (this.diagnosticLogs)\r\n console.debug(\"PdfJsViewer: The rotation has changed!\", event);\r\n \r\n // Update two-way binding for rotation\r\n const normalizedRotation =\r\n PropertyTransformers.transformRotation.fromViewer(\r\n event.pagesRotation,\r\n );\r\n if (\r\n this._rotation !== normalizedRotation &&\r\n !this.changeOriginTracker.isProgrammatic(\"rotation\")\r\n ) {\r\n this.changeOriginTracker.markUserInitiated(\"rotation\");\r\n this._rotation = normalizedRotation;\r\n }\r\n \r\n this.onRotationChange.emit(newRotation);\r\n };\r\n\r\n const scaleChangingHandler = (event: any) => {\r\n const newScale: ChangedScale = event.scale;\r\n if (this.diagnosticLogs)\r\n console.debug(\r\n \"PdfJsViewer: The document has scale has changed!\",\r\n newScale,\r\n );\r\n \r\n // Update two-way binding for zoom\r\n const normalizedZoom = PropertyTransformers.transformZoom.fromViewer(\r\n event.scale,\r\n );\r\n if (\r\n this._zoom !== normalizedZoom &&\r\n !this.changeOriginTracker.isProgrammatic(\"zoom\")\r\n ) {\r\n this.changeOriginTracker.markUserInitiated(\"zoom\");\r\n this._zoom = normalizedZoom;\r\n this.zoomChange.emit(normalizedZoom);\r\n }\r\n \r\n this.onScaleChange.emit(newScale);\r\n };\r\n \r\n // Store handlers for cleanup\r\n (this as any)._pdfEventHandlers = {\r\n documentloaded: documentLoadedHandler,\r\n pagesloaded: pagesLoadedHandler,\r\n beforeprint: beforePrintHandler,\r\n afterprint: afterPrintHandler,\r\n pagechanging: pageChangingHandler,\r\n rotationchanging: rotationChangingHandler,\r\n scalechanging: scaleChangingHandler,\r\n };\r\n \r\n // Attach event listeners\r\n eventBus.on(\"documentloaded\", documentLoadedHandler);\r\n eventBus.on(\"pagesloaded\", pagesLoadedHandler);\r\n eventBus.on(\"beforeprint\", beforePrintHandler);\r\n eventBus.on(\"afterprint\", afterPrintHandler);\r\n eventBus.on(\"pagechanging\", pageChangingHandler);\r\n eventBus.on(\"rotationchanging\", rotationChangingHandler);\r\n eventBus.on(\"scalechanging\", scaleChangingHandler);\r\n });\r\n };\r\n \r\n // Store the handler reference for cleanup\r\n (this as any)._webviewerLoadedHandler = webviewerLoadedHandler;\r\n \r\n document.addEventListener(\"webviewerloaded\", webviewerLoadedHandler);\r\n }\r\n // #endregion\r\n\r\n // #region Configuration and Action Queue Methods\r\n private queueAllConfigurations(): void {\r\n // Queue control visibility configurations (immediate actions)\r\n this.queueConfiguration(\"showOpenFile\", this.showOpenFile, \"show-openfile\");\r\n this.queueConfiguration(\"showDownload\", this.showDownload, \"show-download\");\r\n this.queueConfiguration(\"showPrint\", this.showPrint, \"show-print\");\r\n this.queueConfiguration(\r\n \"showFullScreen\",\r\n this.showFullScreen,\r\n \"show-fullscreen\",\r\n );\r\n this.queueConfiguration(\"showFind\", this.showFind, \"show-find\");\r\n this.queueConfiguration(\r\n \"showViewBookmark\",\r\n this.showViewBookmark,\r\n \"show-bookmark\",\r\n );\r\n this.queueConfiguration(\r\n \"showAnnotations\",\r\n this.showAnnotations,\r\n \"show-annotations\",\r\n );\r\n\r\n // Toolbar/Sidebar group visibility\r\n this.queueConfiguration(\r\n \"showToolbarLeft\",\r\n this.showToolbarLeft,\r\n \"show-toolbar-left\",\r\n );\r\n this.queueConfiguration(\r\n \"showToolbarMiddle\",\r\n this.showToolbarMiddle,\r\n \"show-toolbar-middle\",\r\n );\r\n this.queueConfiguration(\r\n \"showToolbarRight\",\r\n this.showToolbarRight,\r\n \"show-toolbar-right\",\r\n );\r\n this.queueConfiguration(\r\n \"showSecondaryToolbarToggle\",\r\n this.showSecondaryToolbarToggle,\r\n \"show-secondary-toolbar-toggle\",\r\n );\r\n this.queueConfiguration(\"showSidebar\", this.showSidebar, \"show-sidebar\");\r\n this.queueConfiguration(\r\n \"showSidebarLeft\",\r\n this.showSidebarLeft,\r\n \"show-sidebar-left\",\r\n );\r\n this.queueConfiguration(\r\n \"showSidebarRight\",\r\n this.showSidebarRight,\r\n \"show-sidebar-right\",\r\n );\r\n\r\n // Layout customization\r\n this.queueConfiguration(\r\n \"toolbarDensity\",\r\n this.toolbarDensity,\r\n \"set-toolbar-density\",\r\n );\r\n if (this.sidebarWidth) {\r\n this.queueConfiguration(\r\n \"sidebarWidth\",\r\n this.sidebarWidth,\r\n \"set-sidebar-width\",\r\n );\r\n }\r\n this.queueConfiguration(\r\n \"toolbarPosition\",\r\n this.toolbarPosition,\r\n \"set-toolbar-position\",\r\n );\r\n this.queueConfiguration(\r\n \"sidebarPosition\",\r\n this.sidebarPosition,\r\n \"set-sidebar-position\",\r\n );\r\n if (this.responsiveBreakpoint !== undefined) {\r\n this.queueConfiguration(\r\n \"responsiveBreakpoint\",\r\n this.responsiveBreakpoint,\r\n \"set-responsive-breakpoint\",\r\n );\r\n }\r\n\r\n // Queue mode configurations (immediate actions)\r\n if (this.cursor) {\r\n this.queueConfiguration(\"cursor\", this.cursor, \"set-cursor\");\r\n }\r\n if (this.scroll) {\r\n this.queueConfiguration(\"scroll\", this.scroll, \"set-scroll\");\r\n }\r\n if (this.spread) {\r\n this.queueConfiguration(\"spread\", this.spread, \"set-spread\");\r\n }\r\n\r\n // Queue navigation configurations (immediate actions)\r\n if (this._page) {\r\n this.queueConfiguration(\"page\", this._page, \"set-page\");\r\n }\r\n if (this.zoom) {\r\n this.queueConfiguration(\"zoom\", this.zoom, \"set-zoom\");\r\n }\r\n // Note: zoom is now handled by two-way binding [(zoom)]\r\n // Queue navigation configuration if specified\r\n if (this.namedDest && this.namedDest.trim() !== \"\") {\r\n this.queueConfiguration(\"namedDest\", this.namedDest, \"go-to-named-dest\");\r\n }\r\n if (this.pageMode) {\r\n this.queueConfiguration(\"pageMode\", this.pageMode, \"update-page-mode\");\r\n }\r\n\r\n // Queue rotation configurations (immediate actions)\r\n if (this.rotateCW === true) {\r\n this.queueConfiguration(\"rotateCW\", this.rotateCW, \"trigger-rotate-cw\");\r\n }\r\n if (this.rotateCCW === true) {\r\n this.queueConfiguration(\r\n \"rotateCCW\",\r\n this.rotateCCW,\r\n \"trigger-rotate-ccw\",\r\n );\r\n }\r\n\r\n // Queue error handling configurations (non-auto-actions)\r\n if (this.errorMessage) {\r\n this.queueConfiguration(\r\n \"errorMessage\",\r\n this.errorMessage,\r\n \"set-error-message\",\r\n );\r\n }\r\n if (this.errorOverride !== undefined) {\r\n this.queueConfiguration(\r\n \"errorOverride\",\r\n this.errorOverride,\r\n \"set-error-override\",\r\n );\r\n }\r\n if (this.errorAppend !== undefined) {\r\n this.queueConfiguration(\r\n \"errorAppend\",\r\n this.errorAppend,\r\n \"set-error-append\",\r\n );\r\n }\r\n\r\n // Queue theme and visual customization configurations\r\n // Always queue theme to ensure initial styles are applied\r\n\r\n this.queueConfiguration(\"theme\", this.theme || \"auto\", \"set-theme\");\r\n\r\n if (this.primaryColor) {\r\n this.queueConfiguration(\r\n \"primaryColor\",\r\n this.primaryColor,\r\n \"set-primary-color\",\r\n );\r\n }\r\n if (this.backgroundColor) {\r\n this.queueConfiguration(\r\n \"backgroundColor\",\r\n this.backgroundColor,\r\n \"set-background-color\",\r\n );\r\n }\r\n if (this.pageBorderColor) {\r\n this.queueConfiguration(\r\n \"pageBorderColor\",\r\n this.pageBorderColor,\r\n \"set-page-border-color\",\r\n );\r\n }\r\n if (this.pageSpacing) {\r\n this.queueConfiguration(\r\n \"pageSpacing\",\r\n this.pageSpacing,\r\n \"set-page-spacing\",\r\n );\r\n }\r\n if (this.toolbarColor) {\r\n this.queueConfiguration(\r\n \"toolbarColor\",\r\n this.toolbarColor,\r\n \"set-toolbar-color\",\r\n );\r\n }\r\n if (this.textColor) {\r\n this.queueConfiguration(\"textColor\", this.textColor, \"set-text-color\");\r\n }\r\n if (this.borderRadius) {\r\n this.queueConfiguration(\r\n \"borderRadius\",\r\n this.borderRadius,\r\n \"set-border-radius\",\r\n );\r\n }\r\n if (this.customCSS) {\r\n // Pass both CSS and nonce for CSP support\r\n const payload = this.cspNonce \r\n ? { css: this.customCSS, nonce: this.cspNonce }\r\n : this.customCSS;\r\n this.queueConfiguration(\"customCSS\", payload, \"set-custom-css\");\r\n }\r\n\r\n // Queue CSS zoom configurations (immediate actions)\r\n // Note: Locale is now set via URL parameter, not PostMessage\r\n if (this.useOnlyCssZoom !== undefined) {\r\n this.queueConfiguration(\r\n \"useOnlyCssZoom\",\r\n this.useOnlyCssZoom,\r\n \"set-css-zoom\",\r\n );\r\n }\r\n\r\n // Queue event configurations (non-auto-actions)\r\n if (this.onBeforePrint) {\r\n this.queueConfiguration(\"beforePrint\", true, \"enable-before-print\");\r\n }\r\n if (this.onAfterPrint) {\r\n this.queueConfiguration(\"afterPrint\", true, \"enable-after-print\");\r\n }\r\n if (this.onDocumentLoad) {\r\n this.queueConfiguration(\"pagesLoaded\", true, \"enable-pages-loaded\");\r\n }\r\n if (this.onPageChange) {\r\n this.queueConfiguration(\"pageChange\", true, \"enable-page-change\");\r\n }\r\n\r\n // Queue new high-value event configurations\r\n if (this.onDocumentError) {\r\n this.queueConfiguration(\"documentError\", true, \"enable-document-error\");\r\n }\r\n if (this.onDocumentInit) {\r\n this.queueConfiguration(\"documentInit\", true, \"enable-document-init\");\r\n }\r\n if (this.onPagesInit) {\r\n this.queueConfiguration(\"pagesInit\", true, \"enable-pages-init\");\r\n }\r\n if (this.onPresentationModeChanged) {\r\n this.queueConfiguration(\r\n \"presentationModeChanged\",\r\n true,\r\n \"enable-presentation-mode-changed\",\r\n );\r\n }\r\n if (this.onOpenFile) {\r\n this.queueConfiguration(\"openFile\", true, \"enable-open-file\");\r\n }\r\n if (this.onFind) {\r\n this.queueConfiguration(\"find\", true, \"enable-find\");\r\n }\r\n if (this.onUpdateFindMatchesCount) {\r\n this.queueConfiguration(\r\n \"updateFindMatchesCount\",\r\n true,\r\n \"enable-update-find-matches-count\",\r\n );\r\n }\r\n if (this.onMetadataLoaded) {\r\n this.queueConfiguration(\"metadataLoaded\", true, \"enable-metadata-loaded\");\r\n }\r\n if (this.onOutlineLoaded) {\r\n this.queueConfiguration(\"outlineLoaded\", true, \"enable-outline-loaded\");\r\n }\r\n if (this.onPageRendered) {\r\n this.queueConfiguration(\"pageRendered\", true, \"enable-page-rendered\");\r\n }\r\n\r\n // New high-value events\r\n if (this.onAnnotationLayerRendered) {\r\n this.queueConfiguration(\r\n \"annotationLayerRendered\",\r\n true,\r\n \"enable-annotation-layer-rendered\",\r\n );\r\n }\r\n if (this.onBookmarkClick) {\r\n this.queueConfiguration(\"bookmarkClick\", true, \"enable-bookmark-click\");\r\n }\r\n if (this.onIdle) {\r\n this.queueConfiguration(\"idle\", true, \"enable-idle\");\r\n }\r\n\r\n // Note: Auto-actions are now queued when the document loads, not during component initialization\r\n // This ensures they use the current property values at the time of document load\r\n }\r\n\r\n private queueAutoActionsForDocumentLoad(): void {\r\n // Use universal dispatcher for auto-actions\r\n if (this.downloadOnLoad === true) {\r\n this.dispatchAction(\"trigger-download\", true, \"initial-load\");\r\n }\r\n\r\n if (this.showLastPageOnLoad === true) {\r\n this.dispatchAction(\"go-to-last-page\", true, \"initial-load\");\r\n }\r\n\r\n // Auto-print is handled in pagesLoadedHandler for timing reasons\r\n }\r\n\r\n private queueConfiguration(\r\n propertyName: string,\r\n value: any,\r\n action: string,\r\n ): void {\r\n // Use universal dispatcher for all configuration actions\r\n this.dispatchAction(action, value, \"initial-load\");\r\n }\r\n\r\n public refresh(): void {\r\n // Needs to be invoked for external window or when needs to reload pdf\r\n\r\n // Clean up existing event listeners\r\n ComponentUtils.cleanupEventHandlers(this);\r\n \r\n // Clear the action queue to ensure clean state\r\n if (this.actionQueueManager) {\r\n this.actionQueueManager.clearQueues();\r\n }\r\n \r\n // Reset PostMessage readiness state\r\n this.isPostMessageReady = false;\r\n this.postMessageReadiness = 0;\r\n this.pendingInitialConfig = true;\r\n this.initialConfigQueued = false; // Reset initial config flag\r\n \r\n // Reload the PDF - this will trigger queueAllConfigurations() when PostMessage API is ready\r\n this.loadPdf();\r\n }\r\n\r\n // Public method for external control messages\r\n public sendViewerControlMessage(action: string, payload: any): Promise<any> {\r\n return this.sendControlMessage(action, payload);\r\n }\r\n\r\n // #region Public Methods for On-Demand Actions\r\n public triggerDownload(): Promise<ActionExecutionResult> {\r\n // Use universal dispatcher for user interactions - now always returns Promise<ActionExecutionResult>\r\n return this.dispatchAction(\"trigger-download\", true, \"user-interaction\");\r\n }\r\n\r\n public triggerPrint(): Promise<ActionExecutionResult> {\r\n // Use universal dispatcher for user interactions - now always returns Promise<ActionExecutionResult>\r\n return this.dispatchAction(\"trigger-print\", true, \"user-interaction\");\r\n }\r\n\r\n public setPage(page: number): Promise<ActionExecutionResult> {\r\n // Use universal dispatcher for user interactions - now always returns Promise<ActionExecutionResult>\r\n return this.dispatchAction(\"set-page\", page, \"user-interaction\");\r\n }\r\n\r\n public setZoom(zoom: string): Promise<ActionExecutionResult> {\r\n // Use universal dispatcher for user interactions - now always returns Promise<ActionExecutionResult>\r\n return this.dispatchAction(\"set-zoom\", zoom, \"user-interaction\");\r\n }\r\n\r\n public goToLastPage(): Promise<ActionExecutionResult> {\r\n // Use universal dispatcher for user interactions - now always returns Promise<ActionExecutionResult>\r\n return this.dispatchAction(\"go-to-last-page\", true, \"user-interaction\");\r\n }\r\n\r\n public setCursor(cursor: string): Promise<ActionExecutionResult> {\r\n // Use universal dispatcher for user interactions\r\n return this.dispatchAction(\"set-cursor\", cursor, \"user-interaction\");\r\n }\r\n\r\n public setScroll(scroll: string): Promise<ActionExecutionResult> {\r\n // Use universal dispatcher for user interactions\r\n return this.dispatchAction(\"set-scroll\", scroll, \"user-interaction\");\r\n }\r\n\r\n public setSpread(spread: string): Promise<ActionExecutionResult> {\r\n // Use universal dispatcher for user interactions\r\n return this.dispatchAction(\"set-spread\", spread, \"user-interaction\");\r\n }\r\n\r\n public triggerRotation(\r\n direction: \"cw\" | \"ccw\",\r\n ): Promise<ActionExecutionResult> {\r\n // Use universal dispatcher for user interactions\r\n const action =\r\n direction === \"cw\" ? \"trigger-rotate-cw\" : \"trigger-rotate-ccw\";\r\n return this.dispatchAction(action, true, \"user-interaction\");\r\n }\r\n\r\n public goToPage(page: number): Promise<ActionExecutionResult> {\r\n // Alias for setPage for backward compatibility\r\n return this.setPage(page);\r\n }\r\n // #endregion\r\n\r\n // Action queue management methods\r\n public getActionStatus(\r\n actionId: string,\r\n ): \"pending\" | \"executing\" | \"completed\" | \"failed\" | \"not-found\" {\r\n if (!this.actionQueueManager) {\r\n return \"not-found\";\r\n }\r\n return this.actionQueueManager.getActionStatus(actionId);\r\n }\r\n\r\n public getQueueStatus(): { queuedActions: number; executedActions: number } {\r\n if (!this.actionQueueManager) {\r\n return {\r\n queuedActions: 0,\r\n executedActions: 0,\r\n };\r\n }\r\n return this.actionQueueManager.getQueueStatus();\r\n }\r\n\r\n public clearActionQueue(): void {\r\n if (this.actionQueueManager) {\r\n this.actionQueueManager.clearQueues();\r\n }\r\n }\r\n\r\n /**\r\n * Enable or disable URL validation security feature\r\n * When enabled, prevents users from modifying the file parameter in the viewer URL\r\n * @param enabled - Whether to enable URL validation (default: true)\r\n * @returns Promise<ActionExecutionResult>\r\n */\r\n public setUrlValidation(enabled: boolean = true): Promise<ActionExecutionResult> {\r\n return this.dispatchAction(\"set-url-validation\", enabled, \"user-interaction\");\r\n }\r\n\r\n /**\r\n * Dismiss the security warning\r\n */\r\n public dismissSecurityWarning(): void {\r\n this.securityWarning = null;\r\n }\r\n // #endregion\r\n\r\n // #region PDF Loading and URL Handling\r\n private loadPdf(): void {\r\n if (!this.validatePdfSource()) return;\r\n\r\n // Show spinner immediately when PDF loading starts (Issue #275)\r\n this.isLoading = true;\r\n this.hasError = false;\r\n this.currentErrorMessage = \"\";\r\n\r\n this.setupExternalWindow();\r\n const fileUrl = this.createFileUrl();\r\n const viewerUrl = this.buildViewerUrl(fileUrl);\r\n this.navigateToViewer(viewerUrl);\r\n }\r\n\r\n private validatePdfSource(): boolean {\r\n return !!this._src;\r\n }\r\n\r\n private setupExternalWindow(): void {\r\n if (!this.externalWindow) return;\r\n\r\n if (typeof this.viewerTab === \"undefined\" || this.viewerTab.closed) {\r\n this.viewerTab = window.open(\r\n \"\",\r\n this.target,\r\n this.externalWindowOptions || \"\",\r\n );\r\n if (this.viewerTab == null) {\r\n if (this.diagnosticLogs) {\r\n console.error(\r\n \"ng2-pdfjs-viewer: For 'externalWindow = true'. i.e opening in new tab to work, pop-ups should be enabled.\",\r\n );\r\n }\r\n return;\r\n }\r\n\r\n if (this.showSpinner) {\r\n this.renderLoadingSpinner();\r\n }\r\n }\r\n }\r\n\r\n private renderLoadingSpinner(): void {\r\n this.viewerTab.document.write(`\r\n <style>\r\n .loader {\r\n position: fixed;\r\n left: 40%;\r\n top: 40%;\r\n border: 16px solid #f3f3f3;\r\n border-radius: 50%;\r\n border-top: 16px solid #3498db;\r\n width: 120px;\r\n height: 120px;\r\n animation: spin 2s linear infinite;\r\n }\r\n @keyframes spin {\r\n 0% {\r\n transform: rotate(0deg);\r\n }\r\n 100% {\r\n transform: rotate(360deg);\r\n }\r\n }\r\n </style>\r\n <div class=\"loader\"></div>\r\n `);\r\n }\r\n\r\n private createFileUrl(): string {\r\n this.relaseUrl?.();\r\n\r\n if (this._src instanceof Blob) {\r\n const url = URL.createObjectURL(this._src);\r\n this.relaseUrl = () => URL.revokeObjectURL(url);\r\n return encodeURIComponent(url);\r\n } else if (this._src instanceof Uint8Array) {\r\n // Ensure BlobPart type safety by passing ArrayBuffer\r\n const arrayBuffer = (this._src as Uint8Array).buffer as ArrayBuffer;\r\n let blob = new Blob([arrayBuffer], { type: \"application/pdf\" });\r\n const url = URL.createObjectURL(blob);\r\n this.relaseUrl = () => URL.revokeObjectURL(url);\r\n return encodeURIComponent(url);\r\n } else {\r\n return this._src;\r\n }\r\n }\r\n\r\n private buildViewerUrl(fileUrl: string): string {\r\n let viewerUrl = this.getBaseViewerUrl();\r\n viewerUrl = this.addFileParameter(viewerUrl, fileUrl);\r\n viewerUrl = this.addViewerIdParameter(viewerUrl);\r\n viewerUrl = this.addUrlValidationParameter(viewerUrl);\r\n viewerUrl = this.addCacheBustingIfNeeded(viewerUrl);\r\n\r\n return viewerUrl;\r\n }\r\n\r\n private getBaseViewerUrl(): string {\r\n return this.viewerFolder\r\n ? `${this.viewerFolder}/web/viewer.html`\r\n : `assets/pdfjs/web/viewer.html`;\r\n }\r\n\r\n private addFileParameter(viewerUrl: string, fileUrl: string): string {\r\n return `${viewerUrl}?file=${fileUrl}`;\r\n }\r\n\r\n private addViewerIdParameter(viewerUrl: string): string {\r\n return typeof this.viewerId !== \"undefined\"\r\n ? `${viewerUrl}&viewerId=${this.viewerId}`\r\n : viewerUrl;\r\n }\r\n\r\n private addUrlValidationParameter(viewerUrl: string): string {\r\n const flag = this.urlValidation === false ? 0 : 1;\r\n return `${viewerUrl}&urlValidation=${flag}`;\r\n }\r\n\r\n private addCacheBustingIfNeeded(viewerUrl: string): string {\r\n if (this.isDevelopmentMode()) {\r\n const cacheBuster = Date.now();\r\n\r\n return `${viewerUrl}&_t=${cacheBuster}`;\r\n } else {\r\n return viewerUrl;\r\n }\r\n }\r\n\r\n private isDevelopmentMode(): boolean {\r\n return (\r\n window.location.hostname === \"localhost\" ||\r\n window.location.hostname === \"127.0.0.1\" ||\r\n window.location.port === \"4200\" ||\r\n window.location.href.includes(\"localhost:4200\")\r\n );\r\n }\r\n\r\n private navigateToViewer(viewerUrl: string): void {\r\n if (this.externalWindow) {\r\n this.viewerTab.location.href = viewerUrl;\r\n } else {\r\n this.iframe.nativeElement.contentWindow.location.replace(viewerUrl);\r\n }\r\n \r\n if (this.diagnosticLogs) {\r\n this.logViewerConfiguration(viewerUrl);\r\n }\r\n }\r\n\r\n private logViewerConfiguration(viewerUrl: string): void {\r\n console.debug(`PdfJsViewer: Minimal URL configuration:\r\n pdfSrc = ${this.pdfSrc}\r\n externalWindow = ${this.externalWindow}\r\n viewerFolder = ${this.viewerFolder}\r\n viewerId = ${this.viewerId}\r\n finalUrl = ${viewerUrl}\r\n \r\n All other configurations handled via PostMessage system:\r\n showOpenFile = ${this.showOpenFile}\r\n showDownload = ${this.showDownload}\r\n showViewBookmark = ${this.showViewBookmark}\r\n showPrint = ${this.showPrint}\r\n showFullScreen = ${this.showFullScreen}\r\n showFind = ${this.showFind}\r\n cursor = ${this.cursor}\r\n scroll = ${this.scroll}\r\n spread = ${this.spread}\r\n page = ${this.page}\r\n zoom = ${this.zoom}\r\n namedDest = ${this.namedDest}\r\n pageMode = ${this.pageMode}\r\n errorOverride = ${this.errorOverride}\r\n errorAppend = ${this.errorAppend}\r\n errorMessage = ${this.errorMessage}\r\n locale = ${this.locale}\r\n useOnlyCssZoom = ${this.useOnlyCssZoom}\r\n \r\n Auto-actions (handled by action queue):\r\n downloadOnLoad = ${this.downloadOnLoad}\r\n printOnLoad = ${this.printOnLoad}\r\n showLastPageOnLoad = ${this.showLastPageOnLoad}\r\n `);\r\n }\r\n // #endregion\r\n\r\n // #region Two-Way Binding Helper Methods\r\n private applyZoomToViewer(zoom: string): void {\r\n // Use universal dispatcher - it will handle readiness checking and queuing\r\n this.dispatchAction(\"set-zoom\", zoom, \"property-change\");\r\n }\r\n\r\n private applyRotationToViewer(rotation: number): void {\r\n // Use universal dispatcher - it will handle readiness checking and queuing\r\n this.dispatchAction(\"set-rotation\", rotation, \"property-change\");\r\n }\r\n\r\n private applyCursorToViewer(cursor: string): void {\r\n // Use universal dispatcher - it will handle readiness checking and queuing\r\n this.dispatchAction(\"set-cursor\", cursor, \"property-change\");\r\n }\r\n\r\n private applyScrollToViewer(scroll: string): void {\r\n // Use universal dispatcher - it will handle readiness checking and queuing\r\n this.dispatchAction(\"set-scroll\", scroll, \"property-change\");\r\n }\r\n\r\n private applySpreadToViewer(spread: string): void {\r\n // Use universal dispatcher - it will handle readiness checking and queuing\r\n this.dispatchAction(\"set-spread\", spread, \"property-change\");\r\n }\r\n\r\n private applyPageModeToViewer(pageMode: string): void {\r\n // Use universal dispatcher - it will handle readiness checking and queuing\r\n this.dispatchAction(\"update-page-mode\", pageMode, \"property-change\");\r\n }\r\n // #endregion\r\n\r\n // Universal Action Dispatcher - ALL actions go through readiness-based queuing\r\n private dispatchAction(\r\n action: string,\r\n payload: any,\r\n source:\r\n | \"initial-load\"\r\n | \"property-change\"\r\n | \"user-interaction\" = \"property-change\",\r\n ): Promise<ActionExecutionResult> {\r\n const requiredReadiness = this.getRequiredReadinessLevel(action);\r\n const actionObj: ViewerAction = {\r\n id: `${source}-${action}-${Date.now()}`,\r\n action: action,\r\n payload: payload,\r\n };\r\n\r\n // Check if we have sufficient readiness to execute immediately\r\n if (this.hasRequiredReadiness(requiredReadiness)) {\r\n return this.actionQueueManager.executeAction(actionObj);\r\n } else {\r\n // Queue action to execute when readiness is achieved\r\n this.actionQueueManager.queueAction(actionObj, requiredReadiness);\r\n\r\n // Return a promise that resolves when the action eventually executes\r\n return Promise.resolve({\r\n actionId: actionObj.id,\r\n success: true,\r\n timestamp: Date.now(),\r\n } as ActionExecutionResult);\r\n }\r\n }\r\n\r\n private getRequiredReadinessLevel(action: string): number {\r\n // Define readiness requirements for all actions\r\n const level1Actions = [\r\n \"set-theme\",\r\n \"set-primary-color\",\r\n \"set-background-color\",\r\n \"set-page-border-color\",\r\n \"set-toolbar-color\",\r\n \"set-text-color\",\r\n \"set-border-radius\",\r\n \"set-custom-css\",\r\n ];\r\n const level3Actions = [\r\n \"show-download\",\r\n \"show-print\",\r\n \"show-fullscreen\",\r\n \"show-find\",\r\n \"show-bookmark\",\r\n \"show-openfile\",\r\n \"show-annotations\",\r\n \"set-error-message\",\r\n \"set-error-override\",\r\n \"set-error-append\",\r\n \"set-css-zoom\",\r\n // DOM visibility toggles\r\n \"show-toolbar-left\",\r\n \"show-toolbar-middle\",\r\n \"show-toolbar-right\",\r\n \"show-secondary-toolbar-toggle\",\r\n \"show-sidebar\",\r\n \"show-sidebar-left\",\r\n \"show-sidebar-right\",\r\n ];\r\n const level4Actions = [\r\n \"set-cursor\",\r\n \"set-scroll\",\r\n \"set-spread\",\r\n \"set-zoom\",\r\n \"update-page-mode\",\r\n // Layout actions require components ready to measure\r\n \"set-toolbar-density\",\r\n \"set-sidebar-width\",\r\n \"set-toolbar-position\",\r\n \"set-sidebar-position\",\r\n \"set-responsive-breakpoint\",\r\n ];\r\n const level5Actions = [\r\n \"set-page\",\r\n \"set-rotation\",\r\n \"go-to-last-page\",\r\n \"go-to-named-dest\",\r\n \"trigger-download\",\r\n \"trigger-print\",\r\n \"trigger-rotate-cw\",\r\n \"trigger-rotate-ccw\",\r\n ];\r\n\r\n if (level1Actions.includes(action)) return 1; // VIEWER_LOADED - DOM access only\r\n if (level3Actions.includes(action)) return 3; // EVENTBUS_READY\r\n if (level4Actions.includes(action)) return 4; // COMPONENTS_READY\r\n if (level5Actions.includes(action)) return 5; // DOCUMENT_LOADED\r\n return 3; // Default to EVENTBUS_READY\r\n }\r\n\r\n private hasRequiredReadiness(requiredLevel: number): boolean {\r\n if (!this.isPostMessageReady) return false;\r\n if (requiredLevel === 5 && !this.actionQueueManager?.isDocumentLoaded)\r\n return false;\r\n return this.postMessageReadiness >= requiredLevel;\r\n }\r\n}\r\n","import { ModuleWithProviders, NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { PdfJsViewerComponent } from \"./ng2-pdfjs-viewer.component\";\n\n@NgModule({\n imports: [CommonModule],\n declarations: [PdfJsViewerComponent],\n exports: [PdfJsViewerComponent],\n})\nexport class PdfJsViewerModule {\n static forRoot(): ModuleWithProviders<PdfJsViewerModule> {\n return {\n ngModule: PdfJsViewerModule,\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ng2-pdfjs-viewer.mjs","sources":["../../src/managers/ActionQueueManager.ts","../../src/utils/PropertyTransformers.ts","../../src/utils/ComponentUtils.ts","../../src/utils/ChangeOriginTracker.ts","../../src/ng2-pdfjs-viewer.component.ts","../../src/ng2-pdfjs-viewer.module.ts","../../ng2-pdfjs-viewer.ts"],"sourcesContent":["import { ViewerAction, ActionExecutionResult } from \"../interfaces/ViewerTypes\";\r\n\r\n// Simplified Action Queue Manager - Single queue with readiness-based execution\r\nexport class ActionQueueManager {\r\n private actionQueue: Array<{ action: ViewerAction; readinessLevel: number }> =\r\n [];\r\n private executedActions: Map<string, ActionExecutionResult> = new Map();\r\n public isDocumentLoaded = false;\r\n private isPostMessageReady = false;\r\n private postMessageReadiness = 0;\r\n private diagnosticLogs = false;\r\n private postMessageExecutor?: (action: string, payload: any) => Promise<any>;\r\n\r\n constructor(diagnosticLogs = false) {\r\n this.diagnosticLogs = diagnosticLogs;\r\n }\r\n\r\n setDiagnosticLogs(enabled: boolean): void {\r\n this.diagnosticLogs = enabled;\r\n }\r\n\r\n setPostMessageReady(ready: boolean, readiness: number = 0): void {\r\n this.isPostMessageReady = ready;\r\n this.postMessageReadiness = readiness;\r\n\r\n if (ready) {\r\n this.processQueuedActions();\r\n }\r\n }\r\n\r\n updateReadiness(readiness: number): void {\r\n if (this.postMessageReadiness !== readiness) {\r\n this.postMessageReadiness = readiness;\r\n }\r\n }\r\n\r\n // Simplified queue management - single queue with readiness levels\r\n queueAction(action: ViewerAction, readinessLevel: number): void {\r\n this.actionQueue.push({ action, readinessLevel });\r\n }\r\n\r\n // Legacy methods for backward compatibility - now just delegate to main queue\r\n queueImmediateAction(action: ViewerAction): void {\r\n this.queueAction(action, 3);\r\n }\r\n\r\n queueViewerReadyAction(action: ViewerAction): void {\r\n this.queueAction(action, 4);\r\n }\r\n\r\n queueDocumentLoadedAction(action: ViewerAction): void {\r\n this.queueAction(action, 5);\r\n }\r\n\r\n queueOnDemandAction(action: ViewerAction): Promise<ActionExecutionResult> {\r\n return this.executeAction(action);\r\n }\r\n\r\n onDocumentLoaded(): void {\r\n this.isDocumentLoaded = true;\r\n this.processQueuedActions();\r\n }\r\n\r\n // Process all queued actions that now meet readiness requirements\r\n public processQueuedActions(): void {\r\n const executableActions = this.actionQueue.filter((item) => {\r\n const canExecute =\r\n this.postMessageReadiness >= item.readinessLevel &&\r\n (item.readinessLevel < 5 || this.isDocumentLoaded);\r\n\r\n return canExecute;\r\n });\r\n\r\n // Remove executable actions from queue\r\n this.actionQueue = this.actionQueue.filter((item) => {\r\n return !(\r\n this.postMessageReadiness >= item.readinessLevel &&\r\n (item.readinessLevel < 5 || this.isDocumentLoaded)\r\n );\r\n });\r\n\r\n // Execute all ready actions\r\n executableActions.forEach((item) => {\r\n this.executeAction(item.action);\r\n });\r\n }\r\n\r\n public async executeAction(\r\n action: ViewerAction,\r\n ): Promise<ActionExecutionResult> {\r\n const result: ActionExecutionResult = {\r\n actionId: action.id,\r\n success: false,\r\n timestamp: Date.now(),\r\n };\r\n\r\n try {\r\n if (action.condition && !action.condition(null)) {\r\n result.error = \"Condition not met\";\r\n this.executedActions.set(action.id, result);\r\n return result;\r\n }\r\n\r\n const success = await this.executeActionViaPostMessage(action);\r\n result.success = success;\r\n\r\n // If action has a resolver (from user interaction), call it\r\n if (action.resolver) {\r\n action.resolver(result);\r\n }\r\n } catch (error) {\r\n result.error = error instanceof Error ? error.message : String(error);\r\n if (this.diagnosticLogs) {\r\n console.error(\r\n `🔍 ActionQueueManager: Error executing action ${action.action}:`,\r\n error,\r\n );\r\n }\r\n\r\n // If action has a resolver (from user interaction), call it with error\r\n if (action.resolver) {\r\n action.resolver(result);\r\n }\r\n }\r\n\r\n this.executedActions.set(action.id, result);\r\n return result;\r\n }\r\n\r\n private async executeActionViaPostMessage(\r\n action: ViewerAction,\r\n ): Promise<boolean> {\r\n if (!this.postMessageExecutor) {\r\n throw new Error(\"PostMessage executor not set\");\r\n }\r\n\r\n await this.postMessageExecutor(action.action, action.payload);\r\n return true;\r\n }\r\n\r\n setPostMessageExecutor(\r\n executor: (action: string, payload: any) => Promise<any>,\r\n ): void {\r\n this.postMessageExecutor = executor;\r\n }\r\n\r\n getActionStatus(\r\n actionId: string,\r\n ): \"pending\" | \"executing\" | \"completed\" | \"failed\" | \"not-found\" {\r\n const result = this.executedActions.get(actionId);\r\n if (!result) {\r\n const inQueue = this.actionQueue.some(\r\n (item) => item.action.id === actionId,\r\n );\r\n return inQueue ? \"pending\" : \"not-found\";\r\n }\r\n\r\n return result.success ? \"completed\" : \"failed\";\r\n }\r\n\r\n clearQueues(): void {\r\n this.actionQueue = [];\r\n this.executedActions.clear();\r\n }\r\n\r\n getQueueStatus(): { queuedActions: number; executedActions: number } {\r\n return {\r\n queuedActions: this.actionQueue.length,\r\n executedActions: this.executedActions.size,\r\n };\r\n }\r\n}\r\n","// Property transformation utilities\r\nexport class PropertyTransformers {\r\n static transformZoom = {\r\n toViewer: (zoom: string): string => {\r\n if (!zoom) return \"auto\";\r\n\r\n // Convert common zoom values to PDF.js format\r\n const zoomMappings: { [key: string]: string } = {\r\n auto: \"auto\",\r\n \"page-fit\": \"page-fit\",\r\n \"page-width\": \"page-width\",\r\n \"page-actual\": \"page-actual\",\r\n };\r\n\r\n return zoomMappings[zoom.toLowerCase()] || zoom;\r\n },\r\n\r\n fromViewer: (viewerZoom: any): string => {\r\n if (typeof viewerZoom === \"string\") return viewerZoom;\r\n if (typeof viewerZoom === \"number\") {\r\n // Convert numeric zoom to string without % to avoid feedback loop\r\n // PDF.js accepts numeric strings like \"1.25\" directly\r\n return viewerZoom.toString();\r\n }\r\n return \"auto\";\r\n },\r\n };\r\n\r\n static transformRotation = {\r\n toViewer: (rotation: number): number => {\r\n // Normalize rotation to 0, 90, 180, 270\r\n return ((rotation % 360) + 360) % 360;\r\n },\r\n\r\n fromViewer: (viewerRotation: any): number => {\r\n return typeof viewerRotation === \"number\" ? viewerRotation : 0;\r\n },\r\n };\r\n\r\n static transformCursor = {\r\n toViewer: (cursor: string): string => {\r\n if (!cursor) return \"select\";\r\n\r\n const cursorMappings: { [key: string]: string } = {\r\n select: \"select\",\r\n hand: \"hand\",\r\n zoom: \"zoom\",\r\n };\r\n\r\n return cursorMappings[cursor.toLowerCase()] || \"select\";\r\n },\r\n\r\n fromViewer: (viewerCursor: any): string => {\r\n return typeof viewerCursor === \"string\" ? viewerCursor : \"select\";\r\n },\r\n };\r\n\r\n static transformScroll = {\r\n toViewer: (scroll: string): string => {\r\n if (!scroll) return \"vertical\";\r\n\r\n const scrollMappings: { [key: string]: string } = {\r\n vertical: \"vertical\",\r\n horizontal: \"horizontal\",\r\n wrapped: \"wrapped\",\r\n page: \"page\",\r\n };\r\n\r\n return scrollMappings[scroll.toLowerCase()] || \"vertical\";\r\n },\r\n\r\n fromViewer: (viewerScroll: any): string => {\r\n const scrollModes = [\"vertical\", \"horizontal\", \"wrapped\", \"page\"];\r\n if (typeof viewerScroll === \"number\") {\r\n return scrollModes[viewerScroll] || \"vertical\";\r\n }\r\n return typeof viewerScroll === \"string\" ? viewerScroll : \"vertical\";\r\n },\r\n };\r\n\r\n static transformSpread = {\r\n toViewer: (spread: string): string => {\r\n if (!spread) return \"none\";\r\n\r\n const spreadMappings: { [key: string]: string } = {\r\n none: \"none\",\r\n odd: \"odd\",\r\n even: \"even\",\r\n };\r\n\r\n return spreadMappings[spread.toLowerCase()] || \"none\";\r\n },\r\n\r\n fromViewer: (viewerSpread: any): string => {\r\n const spreadModes = [\"none\", \"odd\", \"even\"];\r\n if (typeof viewerSpread === \"number\") {\r\n return spreadModes[viewerSpread] || \"none\";\r\n }\r\n return typeof viewerSpread === \"string\" ? viewerSpread : \"none\";\r\n },\r\n };\r\n\r\n static transformPageMode = {\r\n toViewer: (pageMode: string): string => {\r\n if (!pageMode) return \"none\";\r\n\r\n const pageModeMapping: { [key: string]: string } = {\r\n none: \"none\",\r\n thumbs: \"thumbs\",\r\n bookmarks: \"bookmarks\",\r\n attachments: \"attachments\",\r\n };\r\n\r\n return pageModeMapping[pageMode.toLowerCase()] || \"none\";\r\n },\r\n\r\n fromViewer: (viewerPageMode: any): string => {\r\n return typeof viewerPageMode === \"string\" ? viewerPageMode : \"none\";\r\n },\r\n };\r\n}\r\n","// Common utility functions for the PDF viewer component\r\nexport class ComponentUtils {\r\n // Common PostMessage action mapping\r\n static getActionForProperty(propertyName: string): string | null {\r\n const propertyActionMap: { [key: string]: string } = {\r\n // Control visibility\r\n showOpenFile: \"show-openfile\",\r\n showDownload: \"show-download\",\r\n showPrint: \"show-print\",\r\n showFullScreen: \"show-fullscreen\",\r\n showFind: \"show-find\",\r\n showViewBookmark: \"show-bookmark\",\r\n showAnnotations: \"show-annotations\",\r\n\r\n // Mode controls\r\n cursor: \"set-cursor\",\r\n scroll: \"set-scroll\",\r\n spread: \"set-spread\",\r\n zoom: \"set-zoom\",\r\n pageMode: \"update-page-mode\",\r\n\r\n // Navigation\r\n page: \"set-page\",\r\n rotation: \"set-rotation\",\r\n namedDest: \"go-to-named-dest\",\r\n\r\n // Auto-actions\r\n downloadOnLoad: \"trigger-download\",\r\n printOnLoad: \"trigger-print\",\r\n showLastPageOnLoad: \"go-to-last-page\",\r\n rotateCW: \"trigger-rotate-cw\",\r\n rotateCCW: \"trigger-rotate-ccw\",\r\n\r\n // Error handling\r\n errorMessage: \"set-error-message\",\r\n errorOverride: \"set-error-override\",\r\n errorAppend: \"set-error-append\",\r\n\r\n // Configuration\r\n locale: \"set-locale\",\r\n useOnlyCssZoom: \"set-css-zoom\",\r\n downloadFileName: \"set-download-filename\",\r\n\r\n // Theme & Visual Customization\r\n theme: \"set-theme\",\r\n primaryColor: \"set-primary-color\",\r\n backgroundColor: \"set-background-color\",\r\n pageBorderColor: \"set-page-border-color\",\r\n pageSpacing: \"set-page-spacing\",\r\n toolbarColor: \"set-toolbar-color\",\r\n textColor: \"set-text-color\",\r\n borderRadius: \"set-border-radius\",\r\n customCSS: \"set-custom-css\",\r\n\r\n // Configuration\r\n diagnosticLogs: \"set-diagnostic-logs\",\r\n };\r\n\r\n // Toolbar/Sidebar group visibility\r\n const groupVisibilityMap: { [key: string]: string } = {\r\n showToolbarLeft: \"show-toolbar-left\",\r\n showToolbarMiddle: \"show-toolbar-middle\",\r\n showToolbarRight: \"show-toolbar-right\",\r\n showSecondaryToolbarToggle: \"show-secondary-toolbar-toggle\",\r\n showSidebar: \"show-sidebar\",\r\n showSidebarLeft: \"show-sidebar-left\",\r\n showSidebarRight: \"show-sidebar-right\",\r\n };\r\n\r\n // Layout & responsive customization\r\n const layoutMap: { [key: string]: string } = {\r\n toolbarDensity: \"set-toolbar-density\",\r\n sidebarWidth: \"set-sidebar-width\",\r\n toolbarPosition: \"set-toolbar-position\",\r\n sidebarPosition: \"set-sidebar-position\",\r\n responsiveBreakpoint: \"set-responsive-breakpoint\",\r\n };\r\n\r\n return (\r\n propertyActionMap[propertyName] ||\r\n groupVisibilityMap[propertyName] ||\r\n layoutMap[propertyName] ||\r\n null\r\n );\r\n }\r\n\r\n // Event handler cleanup utility\r\n static cleanupEventHandlers(component: any): void {\r\n // Clean up webviewerloaded handler\r\n if ((component as any)._webviewerLoadedHandler) {\r\n document.removeEventListener(\r\n \"webviewerloaded\",\r\n (component as any)._webviewerLoadedHandler,\r\n );\r\n }\r\n\r\n // Clean up PDF.js event handlers\r\n if ((component as any)._pdfEventHandlers) {\r\n const handlers = (component as any)._pdfEventHandlers;\r\n const eventBus = component.PDFViewerApplication?.eventBus;\r\n\r\n if (eventBus) {\r\n Object.keys(handlers).forEach((eventName) => {\r\n eventBus.off(eventName, handlers[eventName]);\r\n });\r\n }\r\n }\r\n }\r\n}\r\n","// Change origin tracking for two-way binding circular update prevention\r\nexport class ChangeOriginTracker {\r\n private userInitiatedChanges = new Set<string>();\r\n private programmaticChanges = new Set<string>();\r\n\r\n markUserInitiated(property: string): void {\r\n this.userInitiatedChanges.add(property);\r\n setTimeout(() => this.userInitiatedChanges.delete(property), 0);\r\n }\r\n\r\n markProgrammatic(property: string): void {\r\n this.programmaticChanges.add(property);\r\n setTimeout(() => this.programmaticChanges.delete(property), 0);\r\n }\r\n\r\n isUserInitiated(property: string): boolean {\r\n return this.userInitiatedChanges.has(property);\r\n }\r\n\r\n isProgrammatic(property: string): boolean {\r\n return this.programmaticChanges.has(property);\r\n }\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n OnInit,\r\n OnDestroy,\r\n ViewChild,\r\n EventEmitter,\r\n ElementRef,\r\n OnChanges,\r\n TemplateRef,\r\n SimpleChanges,\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n} from \"@angular/core\";\r\n\r\n// Import extracted modules\r\nimport {\r\n ControlMessage,\r\n ControlResponse,\r\n PropertyChangeEvent,\r\n ViewerAction,\r\n ActionExecutionResult,\r\n ChangedPage,\r\n ChangedScale,\r\n ChangedRotation,\r\n ControlVisibilityConfig,\r\n GroupVisibilityConfig,\r\n LayoutConfig,\r\n ToolbarDensity,\r\n ToolbarPosition,\r\n SidebarPosition,\r\n AutoActionConfig,\r\n ErrorConfig,\r\n ViewerConfig,\r\n ThemeConfig,\r\n DocumentError,\r\n PagesInfo,\r\n PresentationMode,\r\n FindOperation,\r\n FindMatchesCount,\r\n DocumentMetadata,\r\n DocumentOutline,\r\n PageRenderInfo,\r\n // New high-value events\r\n AnnotationLayerRenderEvent,\r\n BookmarkClick,\r\n} from \"./interfaces/ViewerTypes\";\r\nimport { ActionQueueManager } from \"./managers/ActionQueueManager\";\r\nimport { PropertyTransformers } from \"./utils/PropertyTransformers\";\r\nimport { ComponentUtils } from \"./utils/ComponentUtils\";\r\nimport { ChangeOriginTracker } from \"./utils/ChangeOriginTracker\";\r\n\r\n@Component({\r\n selector: \"ng2-pdfjs-viewer\",\r\n standalone: false,\r\n styles: [\r\n `\r\n /* Main container styling */\r\n .ng2-pdfjs-viewer-container {\r\n position: relative;\r\n width: 100%;\r\n height: 100%;\r\n }\r\n\r\n /* Spinner overlay styling */\r\n .ng2-pdfjs-loading-overlay {\r\n position: absolute;\r\n inset: 0;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n background: rgba(255, 255, 255, 0.6);\r\n backdrop-filter: saturate(120%) blur(1px);\r\n }\r\n\r\n /* Default spinner content styling */\r\n .ng2-pdfjs-spinner-content {\r\n text-align: center;\r\n }\r\n\r\n .ng2-pdfjs-spinner-icon {\r\n display: inline-block;\r\n width: 40px;\r\n height: 40px;\r\n border: 4px solid #f3f3f3;\r\n border-top: 4px solid #2196F3;\r\n border-radius: 50%;\r\n animation: spin 1s linear infinite;\r\n }\r\n\r\n .ng2-pdfjs-spinner-text {\r\n margin-top: 16px;\r\n color: #666;\r\n font-size: 16px;\r\n }\r\n\r\n /* Error overlay styling */\r\n .ng2-pdfjs-error-overlay {\r\n position: absolute;\r\n inset: 0;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n background: rgba(255, 255, 255, 0.9);\r\n backdrop-filter: saturate(120%) blur(1px);\r\n }\r\n\r\n /* Default error content styling */\r\n .ng2-pdfjs-error-content {\r\n text-align: center;\r\n max-width: 400px;\r\n padding: 20px;\r\n }\r\n\r\n .ng2-pdfjs-error-icon {\r\n font-size: 48px;\r\n color: #f44336;\r\n margin-bottom: 16px;\r\n }\r\n\r\n .ng2-pdfjs-error-title {\r\n color: #333;\r\n font-size: 18px;\r\n font-weight: 500;\r\n margin-bottom: 8px;\r\n }\r\n\r\n .ng2-pdfjs-error-message {\r\n color: #666;\r\n font-size: 14px;\r\n line-height: 1.4;\r\n }\r\n\r\n /* Default spinner animation */\r\n @keyframes spin {\r\n 0% {\r\n transform: rotate(0deg);\r\n }\r\n 100% {\r\n transform: rotate(360deg);\r\n }\r\n }\r\n\r\n /* Iframe border styling */\r\n .ng2-pdfjs-viewer-iframe {\r\n border: 0;\r\n }\r\n \r\n /* Dynamic border classes */\r\n .ng2-pdfjs-viewer-iframe.has-border {\r\n border: 1px solid #ccc;\r\n }\r\n `,\r\n ],\r\n template: `\r\n <div class=\"ng2-pdfjs-viewer-container\">\r\n <iframe\r\n [title]=\"iframeTitle || 'PDF document viewer'\"\r\n [hidden]=\"externalWindow || (!externalWindow && !pdfSrc)\"\r\n sandbox=\"allow-forms allow-scripts allow-same-origin allow-modals allow-downloads\"\r\n [class]=\"getIframeClasses()\"\r\n #iframe\r\n width=\"100%\"\r\n height=\"100%\"\r\n ></iframe>\r\n \r\n <div\r\n class=\"ng2-pdfjs-loading-overlay\"\r\n *ngIf=\"showSpinner && isLoading && !externalWindow\"\r\n [ngClass]=\"spinnerClass\"\r\n >\r\n <ng-container\r\n *ngIf=\"customSpinnerTpl; else defaultSpinner\"\r\n [ngTemplateOutlet]=\"customSpinnerTpl\"\r\n ></ng-container>\r\n <ng-template #defaultSpinner>\r\n <div class=\"ng2-pdfjs-spinner-content\">\r\n <div class=\"ng2-pdfjs-spinner-icon\"></div>\r\n <div class=\"ng2-pdfjs-spinner-text\">\r\n Loading PDF...\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n <div\r\n class=\"ng2-pdfjs-error-overlay\"\r\n *ngIf=\"errorOverride && hasError && !externalWindow\"\r\n [ngClass]=\"errorClass\"\r\n >\r\n <ng-container\r\n *ngIf=\"customErrorTpl; else defaultError\"\r\n [ngTemplateOutlet]=\"customErrorTpl\"\r\n [ngTemplateOutletContext]=\"getErrorTemplateData()\"\r\n ></ng-container>\r\n <ng-template #defaultError>\r\n <div class=\"ng2-pdfjs-error-content\">\r\n <div class=\"ng2-pdfjs-error-icon\">\r\n ⚠️\r\n </div>\r\n <div class=\"ng2-pdfjs-error-title\">\r\n Error Loading PDF\r\n </div>\r\n <div class=\"ng2-pdfjs-error-message\">\r\n {{ currentErrorMessage }}\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n `,\r\n})\r\nexport class PdfJsViewerComponent\r\n implements OnInit, OnDestroy, OnChanges, AfterViewInit\r\n{\r\n // #region Component Properties\r\n @ViewChild(\"iframe\", { static: true }) iframe: ElementRef;\r\n\r\n static lastID = 0;\r\n @Input() public viewerId =\r\n `ng2-pdfjs-viewer-ID${++PdfJsViewerComponent.lastID}`;\r\n\r\n // #region Event Outputs\r\n @Output() onBeforePrint: EventEmitter<void> = new EventEmitter();\r\n @Output() onAfterPrint: EventEmitter<void> = new EventEmitter();\r\n @Output() onDocumentLoad: EventEmitter<void> = new EventEmitter();\r\n @Output() onPageChange: EventEmitter<ChangedPage> = new EventEmitter();\r\n @Output() onScaleChange: EventEmitter<ChangedScale> = new EventEmitter();\r\n @Output() onRotationChange: EventEmitter<ChangedRotation> =\r\n new EventEmitter();\r\n\r\n // New high-value events for enhanced PDF viewer functionality\r\n @Output() onDocumentError: EventEmitter<DocumentError> = new EventEmitter();\r\n @Output() onDocumentInit: EventEmitter<void> = new EventEmitter();\r\n @Output() onPagesInit: EventEmitter<PagesInfo> = new EventEmitter();\r\n @Output() onPresentationModeChanged: EventEmitter<PresentationMode> =\r\n new EventEmitter();\r\n @Output() onOpenFile: EventEmitter<void> = new EventEmitter();\r\n @Output() onFind: EventEmitter<FindOperation> = new EventEmitter();\r\n @Output() onUpdateFindMatchesCount: EventEmitter<FindMatchesCount> =\r\n new EventEmitter();\r\n @Output() onMetadataLoaded: EventEmitter<DocumentMetadata> =\r\n new EventEmitter();\r\n @Output() onOutlineLoaded: EventEmitter<DocumentOutline> = new EventEmitter();\r\n @Output() onPageRendered: EventEmitter<PageRenderInfo> = new EventEmitter();\r\n\r\n // New high-value events\r\n @Output()\r\n onAnnotationLayerRendered: EventEmitter<AnnotationLayerRenderEvent> =\r\n new EventEmitter();\r\n @Output() onBookmarkClick: EventEmitter<BookmarkClick> = new EventEmitter();\r\n @Output() onIdle: EventEmitter<void> = new EventEmitter();\r\n // #endregion\r\n\r\n // #region Basic Configuration Properties\r\n @Input() public viewerFolder: string;\r\n @Input() public externalWindow: boolean = false;\r\n @Input() public target: string = \"_blank\";\r\n @Input() public showSpinner: boolean = true;\r\n @Input() public downloadFileName: string;\r\n @Input() public locale: string;\r\n @Input() public useOnlyCssZoom: boolean = false;\r\n @Input() public set diagnosticLogs(value: boolean) {\r\n this._diagnosticLogs = value;\r\n // Update action queue manager\r\n this.actionQueueManager.setDiagnosticLogs(value);\r\n // Send to wrapper\r\n this.dispatchAction(\"set-diagnostic-logs\", value, \"property-change\");\r\n }\r\n \r\n public get diagnosticLogs(): boolean {\r\n return this._diagnosticLogs;\r\n }\r\n \r\n private _diagnosticLogs: boolean = false;\r\n // #endregion\r\n\r\n // #region Control Visibility Properties\r\n @Input() public showOpenFile: boolean = true;\r\n @Input() public showAnnotations: boolean = false;\r\n @Input() public showDownload: boolean = true;\r\n @Input() public showViewBookmark: boolean = true;\r\n @Input() public showPrint: boolean = true;\r\n @Input() public showFullScreen: boolean = true;\r\n @Input() public showFind: boolean = true;\r\n // #endregion\r\n\r\n // #region Auto-Action Properties\r\n @Input() public downloadOnLoad: boolean = false;\r\n @Input() public printOnLoad: boolean = false;\r\n @Input() public rotateCW: boolean = false;\r\n @Input() public rotateCCW: boolean = false;\r\n @Input() public showLastPageOnLoad: boolean = false;\r\n // #endregion\r\n\r\n // #region Navigation Properties\r\n @Input() public namedDest: string;\r\n // #endregion\r\n\r\n // #region Error Handling Properties\r\n @Input() public errorOverride: boolean = false;\r\n @Input() public errorAppend: boolean = true;\r\n @Input() public errorMessage: string;\r\n @Input() public urlValidation: boolean = true;\r\n @Input() public customSecurityTpl: TemplateRef<any>;\r\n \r\n // Security warning state\r\n public securityWarning: { message: string; originalUrl: string; currentUrl: string } | null = null;\r\n // #endregion\r\n\r\n // #region Theme & Visual Customization Properties\r\n @Input() public theme: \"light\" | \"dark\" | \"auto\" = \"auto\";\r\n @Input() public primaryColor?: string;\r\n @Input() public backgroundColor?: string;\r\n @Input() public pageBorderColor?: string;\r\n @Input() public pageSpacing?: {\r\n margin?: string;\r\n spreadMargin?: string;\r\n border?: string;\r\n };\r\n @Input() public toolbarColor?: string;\r\n @Input() public textColor?: string;\r\n @Input() public borderRadius?: string;\r\n @Input() public customCSS?: string;\r\n @Input() public cspNonce?: string;\r\n @Input() public iframeTitle?: string; // CSP nonce for customCSS (optional)\r\n // #endregion\r\n\r\n // #region Loading & Spinner Customization\r\n @Input() public customSpinnerTpl?: TemplateRef<any>;\r\n @Input() public spinnerClass?: string;\r\n // #endregion\r\n\r\n // #region Error Display Customization\r\n @Input() public customErrorTpl?: TemplateRef<any>;\r\n @Input() public errorClass?: string;\r\n // #endregion\r\n\r\n // #region Toolbar/Sidebar Group Visibility\r\n @Input() public showToolbarLeft: boolean = true;\r\n @Input() public showToolbarMiddle: boolean = true;\r\n @Input() public showToolbarRight: boolean = true;\r\n @Input() public showSecondaryToolbarToggle: boolean = true;\r\n @Input() public showSidebar: boolean = true;\r\n @Input() public showSidebarLeft: boolean = true;\r\n @Input() public showSidebarRight: boolean = true;\r\n // #endregion\r\n\r\n // #region Layout & Responsive Customization\r\n @Input() public toolbarDensity: ToolbarDensity = \"default\";\r\n @Input() public sidebarWidth?: string; // e.g., '280px'\r\n @Input() public toolbarPosition: ToolbarPosition = \"top\";\r\n @Input() public sidebarPosition: SidebarPosition = \"left\";\r\n @Input() public responsiveBreakpoint?: string | number;\r\n // #endregion\r\n\r\n // Internal loading state for overlay control\r\n public isLoading: boolean = true;\r\n private hasFirstRender: boolean = false;\r\n\r\n // Internal error state for error display\r\n public hasError: boolean = false;\r\n public currentErrorMessage: string = \"\";\r\n public errorTemplateData: any = {};\r\n\r\n // Helper method to get error template data\r\n public getErrorTemplateData(): any {\r\n return {\r\n errorMessage: this.currentErrorMessage,\r\n errorClass: this.errorClass,\r\n ...this.errorTemplateData,\r\n };\r\n }\r\n\r\n // Helper method to get iframe CSS classes\r\n public getIframeClasses(): string {\r\n const classes = ['ng2-pdfjs-viewer-iframe'];\r\n \r\n // Add border class if iframeBorder is set and not \"0\"\r\n if (this.iframeBorder && this.iframeBorder !== \"0\" && this.iframeBorder !== 0) {\r\n classes.push('has-border');\r\n }\r\n \r\n return classes.join(' ');\r\n }\r\n\r\n\r\n // Error template button actions\r\n public reloadViewer(): void {\r\n this.refresh();\r\n }\r\n\r\n public goBack(): void {\r\n if (window.history.length > 1) {\r\n window.history.back();\r\n } else {\r\n window.close();\r\n }\r\n }\r\n\r\n public closeViewer(): void {\r\n window.close();\r\n }\r\n\r\n // #region Convenience Configuration Setters\r\n @Input() public set controlVisibility(config: ControlVisibilityConfig) {\r\n if (config.download !== undefined) this.showDownload = config.download;\r\n if (config.print !== undefined) this.showPrint = config.print;\r\n if (config.find !== undefined) this.showFind = config.find;\r\n if (config.fullScreen !== undefined)\r\n this.showFullScreen = config.fullScreen;\r\n if (config.openFile !== undefined) this.showOpenFile = config.openFile;\r\n if (config.viewBookmark !== undefined)\r\n this.showViewBookmark = config.viewBookmark;\r\n if (config.annotations !== undefined)\r\n this.showAnnotations = config.annotations;\r\n }\r\n\r\n @Input() public set autoActions(config: AutoActionConfig) {\r\n if (config.downloadOnLoad !== undefined)\r\n this.downloadOnLoad = config.downloadOnLoad;\r\n if (config.printOnLoad !== undefined) this.printOnLoad = config.printOnLoad;\r\n if (config.showLastPageOnLoad !== undefined)\r\n this.showLastPageOnLoad = config.showLastPageOnLoad;\r\n if (config.rotateCW !== undefined) this.rotateCW = config.rotateCW;\r\n if (config.rotateCCW !== undefined) this.rotateCCW = config.rotateCCW;\r\n }\r\n\r\n @Input() public set errorHandling(config: ErrorConfig) {\r\n if (config.override !== undefined) this.errorOverride = config.override;\r\n if (config.append !== undefined) this.errorAppend = config.append;\r\n if (config.message !== undefined) this.errorMessage = config.message;\r\n }\r\n\r\n @Input() public set viewerConfig(config: ViewerConfig) {\r\n if (config.showSpinner !== undefined) this.showSpinner = config.showSpinner;\r\n if (config.useOnlyCssZoom !== undefined)\r\n this.useOnlyCssZoom = config.useOnlyCssZoom;\r\n if (config.diagnosticLogs !== undefined)\r\n this.diagnosticLogs = config.diagnosticLogs;\r\n if (config.locale !== undefined) this.locale = config.locale;\r\n }\r\n\r\n @Input() public set themeConfig(config: ThemeConfig) {\r\n if (config.theme !== undefined) this.theme = config.theme;\r\n if (config.primaryColor !== undefined)\r\n this.primaryColor = config.primaryColor;\r\n if (config.backgroundColor !== undefined)\r\n this.backgroundColor = config.backgroundColor;\r\n if (config.pageBorderColor !== undefined)\r\n this.pageBorderColor = config.pageBorderColor;\r\n if (config.pageSpacing !== undefined)\r\n this.pageSpacing = config.pageSpacing;\r\n if (config.toolbarColor !== undefined)\r\n this.toolbarColor = config.toolbarColor;\r\n if (config.textColor !== undefined) this.textColor = config.textColor;\r\n if (config.borderRadius !== undefined)\r\n this.borderRadius = config.borderRadius;\r\n if (config.customCSS !== undefined) this.customCSS = config.customCSS;\r\n if (config.cspNonce !== undefined) this.cspNonce = config.cspNonce;\r\n }\r\n\r\n @Input() public set groupVisibility(config: GroupVisibilityConfig) {\r\n if (config.toolbarLeft !== undefined)\r\n this.showToolbarLeft = config.toolbarLeft;\r\n if (config.toolbarMiddle !== undefined)\r\n this.showToolbarMiddle = config.toolbarMiddle;\r\n if (config.toolbarRight !== undefined)\r\n this.showToolbarRight = config.toolbarRight;\r\n if (config.secondaryToolbarToggle !== undefined)\r\n this.showSecondaryToolbarToggle = config.secondaryToolbarToggle;\r\n if (config.sidebar !== undefined) this.showSidebar = config.sidebar;\r\n if (config.sidebarLeft !== undefined)\r\n this.showSidebarLeft = config.sidebarLeft;\r\n if (config.sidebarRight !== undefined)\r\n this.showSidebarRight = config.sidebarRight;\r\n }\r\n\r\n @Input() public set layoutConfig(config: LayoutConfig) {\r\n if (config.toolbarDensity !== undefined)\r\n this.toolbarDensity = config.toolbarDensity;\r\n if (config.sidebarWidth !== undefined)\r\n this.sidebarWidth = config.sidebarWidth;\r\n if (config.toolbarPosition !== undefined)\r\n this.toolbarPosition = config.toolbarPosition;\r\n if (config.sidebarPosition !== undefined)\r\n this.sidebarPosition = config.sidebarPosition;\r\n if (config.responsiveBreakpoint !== undefined)\r\n this.responsiveBreakpoint = config.responsiveBreakpoint;\r\n }\r\n // #endregion\r\n\r\n // #region Helper function for deprecated properties\r\n private setDeprecatedProperty(\r\n oldName: string,\r\n newProperty: string,\r\n value: any,\r\n ): void {\r\n if (this.diagnosticLogs) {\r\n console.warn(\r\n `⚠️ DEPRECATED: Property \"${oldName}\" is deprecated. Use \"${newProperty}\" instead.`,\r\n );\r\n }\r\n (this as any)[newProperty] = value;\r\n }\r\n // #endregion\r\n\r\n // #region Deprecated Properties (Simplified)\r\n /** @deprecated Use `downloadOnLoad` instead. This property will be removed in a future version. */\r\n @Input() public set startDownload(value: boolean) {\r\n this.setDeprecatedProperty(\"startDownload\", \"downloadOnLoad\", value);\r\n }\r\n\r\n /** @deprecated Use `printOnLoad` instead. This property will be removed in a future version. */\r\n @Input() public set startPrint(value: boolean) {\r\n this.setDeprecatedProperty(\"startPrint\", \"printOnLoad\", value);\r\n }\r\n\r\n /** @deprecated Use `showOpenFile` instead. This property will be removed in a future version. */\r\n @Input() public set openFile(value: boolean) {\r\n this.setDeprecatedProperty(\"openFile\", \"showOpenFile\", value);\r\n }\r\n\r\n /** @deprecated Use `showDownload` instead. This property will be removed in a future version. */\r\n @Input() public set download(value: boolean) {\r\n this.setDeprecatedProperty(\"download\", \"showDownload\", value);\r\n }\r\n\r\n /** @deprecated Use `showPrint` instead. This property will be removed in a future version. */\r\n @Input() public set print(value: boolean) {\r\n this.setDeprecatedProperty(\"print\", \"showPrint\", value);\r\n }\r\n\r\n /** @deprecated Use `showFullScreen` instead. This property will be removed in a future version. */\r\n @Input() public set fullScreen(value: boolean) {\r\n this.setDeprecatedProperty(\"fullScreen\", \"showFullScreen\", value);\r\n }\r\n\r\n /** @deprecated Use `showFind` instead. This property will be removed in a future version. */\r\n @Input() public set find(value: boolean) {\r\n this.setDeprecatedProperty(\"find\", \"showFind\", value);\r\n }\r\n\r\n /** @deprecated Use `showViewBookmark` instead. This property will be removed in a future version. */\r\n @Input() public set viewBookmark(value: boolean) {\r\n this.setDeprecatedProperty(\"viewBookmark\", \"showViewBookmark\", value);\r\n }\r\n\r\n /** @deprecated Use `showLastPageOnLoad` instead. This property will be removed in a future version. */\r\n @Input() public set lastPage(value: boolean) {\r\n this.setDeprecatedProperty(\"lastPage\", \"showLastPageOnLoad\", value);\r\n }\r\n // #endregion\r\n\r\n // #region External Window Properties\r\n @Input() public externalWindowOptions: string;\r\n public viewerTab: any;\r\n // #endregion\r\n\r\n // #region Security Properties\r\n // iframe sandbox is static for security and Angular compliance\r\n // #endregion\r\n\r\n // #region iframe Properties\r\n @Input() public iframeBorder: string | number = \"0\";\r\n // #endregion\r\n\r\n // #region Private Properties\r\n private _src: string | Blob | Uint8Array;\r\n private _page: number;\r\n private isPostMessageReady = false;\r\n private postMessageReadiness = 0;\r\n private pendingInitialConfig = true;\r\n private initialConfigQueued = false;\r\n private actionQueueManager: ActionQueueManager = new ActionQueueManager(this._diagnosticLogs);\r\n private changeOriginTracker = new ChangeOriginTracker();\r\n private cdr: ChangeDetectorRef;\r\n\r\n constructor(cdr: ChangeDetectorRef) {\r\n this.cdr = cdr;\r\n }\r\n private messageIdCounter = 0;\r\n private pendingMessages = new Map<\r\n string,\r\n { resolve: Function; reject: Function }\r\n >();\r\n private pendingChanges: SimpleChanges[] = [];\r\n private relaseUrl?: () => void;\r\n // #endregion\r\n\r\n // #region Two-Way Binding Properties\r\n // Private backing fields for two-way binding properties\r\n private _zoom: string = \"auto\";\r\n private _rotation: number = 0;\r\n private _cursor: string = \"select\";\r\n private _scroll: string = \"vertical\";\r\n private _spread: string = \"none\";\r\n private _pageMode: string = \"none\";\r\n\r\n // Two-way binding Output events\r\n @Output() zoomChange = new EventEmitter<string>();\r\n\r\n @Output() cursorChange = new EventEmitter<string>();\r\n @Output() scrollChange = new EventEmitter<string>();\r\n @Output() spreadChange = new EventEmitter<string>();\r\n @Output() pageModeChange = new EventEmitter<string>();\r\n\r\n /**\r\n * Two-way binding for zoom level\r\n * Supports: auto, page-fit, page-width, page-actual, percentage values (e.g., \"150%\")\r\n */\r\n @Input()\r\n get zoom(): string {\r\n return this._zoom;\r\n }\r\n set zoom(value: string) {\r\n const normalizedValue = PropertyTransformers.transformZoom.toViewer(value);\r\n if (this._zoom !== normalizedValue) {\r\n this.changeOriginTracker.markProgrammatic(\"zoom\");\r\n this._zoom = normalizedValue;\r\n this.applyZoomToViewer(this._zoom);\r\n this.zoomChange.emit(this._zoom);\r\n }\r\n }\r\n\r\n /**\r\n * One-way binding for document rotation\r\n * Supports: 0, 90, 180, 270 degrees\r\n */\r\n @Input()\r\n set rotation(value: number) {\r\n const normalizedValue =\r\n PropertyTransformers.transformRotation.toViewer(value);\r\n if (this._rotation !== normalizedValue) {\r\n this._rotation = normalizedValue;\r\n this.applyRotationToViewer(this._rotation);\r\n }\r\n }\r\n\r\n get rotation(): number {\r\n return this._rotation;\r\n }\r\n\r\n /**\r\n * Two-way binding for cursor mode\r\n * Supports: select, hand, zoom\r\n */\r\n @Input()\r\n get cursor(): string {\r\n return this._cursor;\r\n }\r\n set cursor(value: string) {\r\n const normalizedValue =\r\n PropertyTransformers.transformCursor.toViewer(value);\r\n if (this._cursor !== normalizedValue) {\r\n this.changeOriginTracker.markProgrammatic(\"cursor\");\r\n this._cursor = normalizedValue;\r\n this.applyCursorToViewer(this._cursor);\r\n this.cursorChange.emit(this._cursor);\r\n }\r\n }\r\n\r\n /**\r\n * Two-way binding for scroll mode\r\n * Supports: vertical, horizontal, wrapped, page\r\n */\r\n @Input()\r\n get scroll(): string {\r\n return this._scroll;\r\n }\r\n set scroll(value: string) {\r\n const normalizedValue =\r\n PropertyTransformers.transformScroll.toViewer(value);\r\n if (this._scroll !== normalizedValue) {\r\n this.changeOriginTracker.markProgrammatic(\"scroll\");\r\n this._scroll = normalizedValue;\r\n this.applyScrollToViewer(this._scroll);\r\n this.scrollChange.emit(this._scroll);\r\n }\r\n }\r\n\r\n /**\r\n * Two-way binding for spread mode\r\n * Supports: none, odd, even\r\n */\r\n @Input()\r\n get spread(): string {\r\n return this._spread;\r\n }\r\n set spread(value: string) {\r\n const normalizedValue =\r\n PropertyTransformers.transformSpread.toViewer(value);\r\n if (this._spread !== normalizedValue) {\r\n this.changeOriginTracker.markProgrammatic(\"spread\");\r\n this._spread = normalizedValue;\r\n this.applySpreadToViewer(this._spread);\r\n this.spreadChange.emit(this._spread);\r\n }\r\n }\r\n\r\n /**\r\n * Two-way binding for page mode (sidebar state)\r\n * Supports: none, thumbs, bookmarks, attachments\r\n */\r\n @Input()\r\n get pageMode(): string {\r\n return this._pageMode;\r\n }\r\n set pageMode(value: string) {\r\n const normalizedValue =\r\n PropertyTransformers.transformPageMode.toViewer(value);\r\n if (this._pageMode !== normalizedValue) {\r\n this.changeOriginTracker.markProgrammatic(\"pageMode\");\r\n this._pageMode = normalizedValue;\r\n this.applyPageModeToViewer(this._pageMode);\r\n this.pageModeChange.emit(this._pageMode);\r\n }\r\n }\r\n\r\n @Input()\r\n public set page(_page: number) {\r\n this._page = _page;\r\n if (this.PDFViewerApplication && this.PDFViewerApplication.initialized) {\r\n this.PDFViewerApplication.page = this._page;\r\n } else {\r\n if (this.diagnosticLogs) {\r\n console.warn(\r\n \"Document is not loaded yet!!!. Try to set page# after full load. Ignore this warning if you are not setting page# using '.' notation. (E.g. pdfViewer.page = 5;)\",\r\n );\r\n }\r\n }\r\n }\r\n\r\n public get page() {\r\n if (this.PDFViewerApplication && this.PDFViewerApplication.initialized) {\r\n return this.PDFViewerApplication.page;\r\n } else {\r\n if (this.diagnosticLogs) {\r\n console.warn(\r\n \"Document is not loaded yet!!!. Try to retrieve page# after full load.\",\r\n );\r\n }\r\n return this._page || 1;\r\n }\r\n }\r\n\r\n @Input()\r\n public set pdfSrc(_src: string | Blob | Uint8Array) {\r\n this._src = _src;\r\n }\r\n\r\n public get pdfSrc() {\r\n return this._src;\r\n }\r\n // #endregion\r\n\r\n // #region PDF.js Application Access Properties\r\n public get PDFViewerApplicationOptions() {\r\n let pdfViewerOptions = null;\r\n if (this.externalWindow) {\r\n if (this.viewerTab) {\r\n pdfViewerOptions = this.viewerTab.PDFViewerApplicationOptions;\r\n }\r\n } else {\r\n if (this.iframe.nativeElement.contentWindow) {\r\n pdfViewerOptions =\r\n this.iframe.nativeElement.contentWindow.PDFViewerApplicationOptions;\r\n }\r\n }\r\n return pdfViewerOptions;\r\n }\r\n\r\n public get PDFViewerApplication() {\r\n let pdfViewer = null;\r\n if (this.externalWindow) {\r\n if (this.viewerTab) {\r\n pdfViewer = this.viewerTab.PDFViewerApplication;\r\n }\r\n } else {\r\n if (this.iframe.nativeElement.contentWindow) {\r\n pdfViewer =\r\n this.iframe.nativeElement.contentWindow.PDFViewerApplication;\r\n }\r\n }\r\n if (this.diagnosticLogs) console.debug(\"PdfJsViewer: Viewer ->\", pdfViewer);\r\n return pdfViewer;\r\n }\r\n\r\n // #endregion\r\n // #endregion\r\n\r\n // #region Lifecycle Methods\r\n ngOnInit(): void { \r\n \r\n // Connect action queue manager to PostMessage system\r\n // Wrap sendControlMessage to handle iframe unavailability by re-queuing actions\r\n this.actionQueueManager.setPostMessageExecutor((action, payload) =>\r\n this.sendControlMessageWithRequeue(action, payload),\r\n );\r\n\r\n // Send diagnostic logs setting to wrapper\r\n this.dispatchAction(\"set-diagnostic-logs\", this._diagnosticLogs, \"initial-load\");\r\n \r\n // Send URL validation setting to wrapper\r\n this.dispatchAction(\"set-url-validation\", this.urlValidation, \"initial-load\");\r\n \r\n // Set up PostMessage listener\r\n this.setupMessageListener();\r\n \r\n // Note: PDF loading moved to ngAfterViewInit() to ensure iframe is ready\r\n // This prevents \"Cannot read properties of null (reading 'location')\" error\r\n // when pdfSrc is a Blob (Issue #283)\r\n\r\n // Bind events.\r\n this.bindToPdfJsEventBus();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n // Load PDF after view is initialized - trust Angular's lifecycle guarantee\r\n // that iframe.nativeElement.contentWindow is now available\r\n if (!this.externalWindow) {\r\n this.loadPdf();\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n // Handle pdfSrc changes - reload the PDF (Issue #283)\r\n // Trust Angular's change detection event to trigger reload when needed\r\n if (changes['pdfSrc'] && !changes['pdfSrc'].firstChange) {\r\n // pdfSrc changed after initialization - reload the PDF\r\n if (!this.externalWindow) {\r\n // Show spinner immediately when PDF source changes (Issue #275)\r\n this.isLoading = true;\r\n this.hasError = false;\r\n this.currentErrorMessage = \"\";\r\n \r\n // Reset configuration queuing since iframe will reload fresh\r\n this.initialConfigQueued = false;\r\n this.isPostMessageReady = false;\r\n this.loadPdf();\r\n }\r\n return; // pdfSrc change requires full reload, skip other change processing\r\n }\r\n \r\n if (this.PDFViewerApplication) {\r\n // Only apply changes if PostMessage API is ready and viewer is initialized\r\n if (this.isPostMessageReady && this.PDFViewerApplication.initialized) {\r\n this.applyChanges(changes);\r\n } else {\r\n this.pendingChanges.push(changes);\r\n }\r\n } else {\r\n this.pendingChanges.push(changes);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n // Clean up pending messages\r\n this.pendingMessages.clear();\r\n\r\n // Clean up event listeners\r\n ComponentUtils.cleanupEventHandlers(this);\r\n\r\n // Reset state flags\r\n this.initialConfigQueued = false;\r\n\r\n // Clean up URL\r\n this.relaseUrl?.();\r\n }\r\n // #endregion\r\n\r\n // #region Message Handling Methods\r\n private generateMessageId(): string {\r\n return `msg_${++this.messageIdCounter}_${Date.now()}`;\r\n }\r\n\r\n private sendControlMessage(action: string, payload: any): Promise<any> {\r\n return new Promise((resolve, reject) => {\r\n const messageId = this.generateMessageId();\r\n \r\n const message: ControlMessage = {\r\n type: \"control-update\",\r\n action,\r\n payload,\r\n id: messageId,\r\n timestamp: Date.now(),\r\n };\r\n\r\n this.pendingMessages.set(messageId, { resolve, reject });\r\n\r\n // Send message to iframe - verify accessibility (event-driven check)\r\n if (this.isIframeAccessible()) {\r\n this.iframe.nativeElement.contentWindow.postMessage(message, \"*\");\r\n } else {\r\n this.pendingMessages.delete(messageId);\r\n reject(new Error(\"Iframe not available\"));\r\n }\r\n });\r\n }\r\n\r\n // Wrapper for sendControlMessage that re-queues actions on iframe unavailability\r\n // This ensures actions are retried when iframe becomes available (event-driven)\r\n private async sendControlMessageWithRequeue(action: string, payload: any): Promise<any> {\r\n try {\r\n return await this.sendControlMessage(action, payload);\r\n } catch (error) {\r\n // If iframe is not available, re-queue the action for retry\r\n // This handles the edge case where iframe becomes unavailable between checks\r\n if (error instanceof Error && error.message === \"Iframe not available\") {\r\n // Re-queue the action - it will be retried when processQueuedActions() is called again\r\n // This happens when iframe becomes available or readiness increases\r\n const requiredReadiness = this.getRequiredReadinessLevel(action);\r\n const actionObj: ViewerAction = {\r\n id: `requeue-${action}-${Date.now()}`,\r\n action: action,\r\n payload: payload,\r\n };\r\n this.actionQueueManager.queueAction(actionObj, requiredReadiness);\r\n \r\n // Trigger processing if iframe becomes available soon (event-driven, no polling)\r\n Promise.resolve().then(() => {\r\n if (this.isIframeAccessible() && this.isPostMessageReady) {\r\n this.actionQueueManager.processQueuedActions();\r\n }\r\n });\r\n \r\n // Re-throw to maintain error handling in ActionQueueManager\r\n throw error;\r\n }\r\n // Re-throw other errors\r\n throw error;\r\n }\r\n }\r\n\r\n // Event-driven iframe accessibility check (no polling, trust-based)\r\n private isIframeAccessible(): boolean {\r\n return !!(\r\n this.iframe &&\r\n this.iframe.nativeElement &&\r\n this.iframe.nativeElement.contentWindow\r\n );\r\n }\r\n\r\n // Process actions when PostMessage API is ready (extracted for reuse)\r\n private processPostMessageReadyActions(): void {\r\n // CRITICAL FIX: Process queued actions when readiness level increases\r\n if (this.actionQueueManager) {\r\n this.actionQueueManager.updateReadiness(this.postMessageReadiness);\r\n this.actionQueueManager.processQueuedActions();\r\n }\r\n \r\n // Always (re)apply initial configurations when PostMessage API is ready.\r\n // This makes reloads idempotently reconfigure the viewer.\r\n this.queueAllConfigurations();\r\n this.initialConfigQueued = true;\r\n \r\n // Apply any pending changes that occurred before PostMessage API was ready\r\n this.applyPendingChanges();\r\n }\r\n\r\n private handleControlResponse(response: ControlResponse): void {\r\n const pendingMessage = this.pendingMessages.get(response.id);\r\n if (pendingMessage) {\r\n this.pendingMessages.delete(response.id);\r\n \r\n if (response.success) {\r\n pendingMessage.resolve(response);\r\n } else {\r\n pendingMessage.reject(new Error(response.error || \"Unknown error\"));\r\n }\r\n }\r\n }\r\n\r\n private setupMessageListener(): void {\r\n window.addEventListener(\"message\", (event) => {\r\n // Handle control responses from the viewer\r\n if (event.data && event.data.type === \"control-response\") {\r\n this.handleControlResponse(event.data);\r\n return;\r\n }\r\n \r\n // Handle security warning from viewer\r\n if (event.data && event.data.type === \"ng2-pdfjs-viewer-security-warning\") {\r\n this.securityWarning = {\r\n message: event.data.message,\r\n originalUrl: event.data.originalUrl,\r\n currentUrl: event.data.currentUrl\r\n };\r\n return;\r\n }\r\n \r\n // Handle PostMessage API ready notification\r\n if (event.data && event.data.type === \"postmessage-ready\") {\r\n this.isPostMessageReady = true;\r\n\r\n this.postMessageReadiness = event.data.readiness || 0;\r\n\r\n // Verify iframe is accessible before processing actions (event-driven readiness check)\r\n // This prevents \"Iframe not available\" errors when dialog reopens quickly\r\n if (this.isIframeAccessible()) {\r\n // Iframe is ready - process actions immediately\r\n this.processPostMessageReadyActions();\r\n } else {\r\n // Iframe not accessible yet - defer to next change detection cycle (event-driven)\r\n // This handles Material Dialog lifecycle timing issues\r\n Promise.resolve().then(() => {\r\n if (this.isIframeAccessible()) {\r\n this.processPostMessageReadyActions();\r\n }\r\n });\r\n }\r\n return;\r\n }\r\n \r\n // Handle state change notifications from PostMessage wrapper\r\n if (event.data && event.data.type === \"state-change\") {\r\n this.handleStateChangeNotification(event.data);\r\n return;\r\n }\r\n\r\n // Handle event notifications from PostMessage wrapper\r\n if (event.data && event.data.type === \"event-notification\") {\r\n this.handleEventNotification(event.data);\r\n return;\r\n }\r\n });\r\n }\r\n\r\n private handleStateChangeNotification(notification: any): void {\r\n const { property, value, source } = notification;\r\n \r\n // Internal loading overlay control is system-driven and must be handled unconditionally\r\n if (property === \"loading\") {\r\n this.isLoading = !!value;\r\n // Clear error state when loading starts\r\n if (value) {\r\n this.hasError = false;\r\n this.currentErrorMessage = \"\";\r\n }\r\n // Trigger change detection for OnPush scenarios (PostMessage runs outside Angular zone)\r\n this.cdr.markForCheck();\r\n return;\r\n }\r\n\r\n // Internal error state management\r\n if (property === \"error\") {\r\n this.hasError = !!value;\r\n if (value && typeof value === \"string\") {\r\n this.currentErrorMessage = value;\r\n this.errorTemplateData = this.getErrorTemplateData();\r\n }\r\n return;\r\n }\r\n\r\n // Only process user-initiated changes to avoid infinite loops\r\n if (\r\n source === \"user\" &&\r\n !this.changeOriginTracker.isProgrammatic(property)\r\n ) {\r\n this.changeOriginTracker.markUserInitiated(property);\r\n \r\n switch (property) {\r\n case \"cursor\":\r\n if (this._cursor !== value) {\r\n this._cursor =\r\n PropertyTransformers.transformCursor.fromViewer(value);\r\n this.cursorChange.emit(this._cursor);\r\n }\r\n break;\r\n \r\n case \"scroll\":\r\n if (this._scroll !== value) {\r\n this._scroll =\r\n PropertyTransformers.transformScroll.fromViewer(value);\r\n this.scrollChange.emit(this._scroll);\r\n }\r\n break;\r\n \r\n case \"spread\":\r\n if (this._spread !== value) {\r\n this._spread =\r\n PropertyTransformers.transformSpread.fromViewer(value);\r\n this.spreadChange.emit(this._spread);\r\n }\r\n break;\r\n \r\n case \"pageMode\":\r\n if (this._pageMode !== value) {\r\n this._pageMode =\r\n PropertyTransformers.transformPageMode.fromViewer(value);\r\n this.pageModeChange.emit(this._pageMode);\r\n }\r\n break;\r\n \r\n case \"zoom\":\r\n if (this._zoom !== value) {\r\n this._zoom = PropertyTransformers.transformZoom.fromViewer(value);\r\n this.zoomChange.emit(this._zoom);\r\n }\r\n break;\r\n \r\n case \"rotation\":\r\n if (this._rotation !== value) {\r\n this._rotation =\r\n PropertyTransformers.transformRotation.fromViewer(value);\r\n }\r\n break;\r\n \r\n // Note: namedDest is now a simple input property, not a two-way binding\r\n \r\n default:\r\n if (this.diagnosticLogs) {\r\n console.log(\r\n `🔍 PdfJsViewer: Unknown state change property: ${property}`,\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n private handleEventNotification(notification: any): void {\r\n const { eventName, eventData } = notification;\r\n\r\n // Emit the appropriate event based on the event name\r\n switch (eventName) {\r\n case \"documentError\":\r\n this.onDocumentError.emit(eventData);\r\n break;\r\n\r\n case \"documentInit\":\r\n this.onDocumentInit.emit();\r\n break;\r\n\r\n case \"pagesInit\":\r\n this.onPagesInit.emit(eventData);\r\n break;\r\n\r\n case \"presentationModeChanged\":\r\n this.onPresentationModeChanged.emit(eventData);\r\n break;\r\n\r\n case \"openFile\":\r\n this.onOpenFile.emit();\r\n break;\r\n\r\n case \"find\":\r\n this.onFind.emit(eventData);\r\n break;\r\n\r\n case \"updateFindMatchesCount\":\r\n this.onUpdateFindMatchesCount.emit(eventData);\r\n break;\r\n\r\n case \"metadataLoaded\":\r\n this.onMetadataLoaded.emit(eventData);\r\n break;\r\n\r\n case \"outlineLoaded\":\r\n this.onOutlineLoaded.emit(eventData);\r\n break;\r\n\r\n case \"pageRendered\":\r\n this.onPageRendered.emit(eventData);\r\n break;\r\n\r\n case \"annotationLayerRendered\":\r\n this.onAnnotationLayerRendered.emit(eventData);\r\n break;\r\n\r\n case \"bookmarkClick\":\r\n this.onBookmarkClick.emit(eventData);\r\n break;\r\n\r\n case \"idle\":\r\n this.onIdle.emit();\r\n break;\r\n\r\n default:\r\n if (this.diagnosticLogs) {\r\n console.log(\r\n `🔍 PdfJsViewer: Unknown event notification: ${eventName}`,\r\n );\r\n }\r\n }\r\n }\r\n // #endregion\r\n\r\n // #region Property Mapping and Update Methods\r\n private mapPropertyToAction(propertyName: string): string | null {\r\n return ComponentUtils.getActionForProperty(propertyName);\r\n }\r\n\r\n private updateViewerControl(propertyName: string, value: any): void {\r\n const action = this.mapPropertyToAction(propertyName);\r\n if (action) {\r\n // Use universal dispatcher instead of direct PostMessage\r\n this.dispatchAction(action, value, \"property-change\");\r\n } else {\r\n // Property is intentionally not mapped (handled via query parameters or direct API)\r\n }\r\n }\r\n\r\n private applyChanges(changes: SimpleChanges): void {\r\n Object.keys(changes).forEach((propertyName) => {\r\n const change = changes[propertyName];\r\n\r\n if (change.currentValue !== change.previousValue) {\r\n // Handle auto-actions - queue for document load, don't execute immediately\r\n const autoActions = [\r\n \"downloadOnLoad\",\r\n \"printOnLoad\",\r\n \"showLastPageOnLoad\",\r\n \"rotateCW\",\r\n \"rotateCCW\",\r\n ];\r\n if (autoActions.includes(propertyName)) {\r\n // Re-queue all configurations when auto-actions change\r\n this.initialConfigQueued = false;\r\n if (this.isPostMessageReady) {\r\n this.queueAllConfigurations();\r\n this.initialConfigQueued = true;\r\n }\r\n return;\r\n }\r\n\r\n // Use universal dispatcher for ALL actions - pure event-driven approach\r\n const action = this.mapPropertyToAction(propertyName);\r\n if (action) {\r\n this.dispatchAction(action, change.currentValue, \"property-change\");\r\n }\r\n }\r\n });\r\n }\r\n\r\n private applyPendingChanges(): void {\r\n // Only apply pending changes if PostMessage API is ready\r\n if (!this.isPostMessageReady) {\r\n return;\r\n }\r\n \r\n if (this.pendingChanges.length > 0) {\r\n this.pendingChanges.forEach((changes, index) => {\r\n this.processChangesForQueuing(changes);\r\n });\r\n this.pendingChanges = [];\r\n } else {\r\n }\r\n }\r\n\r\n private processChangesForQueuing(changes: SimpleChanges): void {\r\n Object.keys(changes).forEach((propertyName) => {\r\n const change = changes[propertyName];\r\n \r\n if (change.currentValue !== change.previousValue) {\r\n // Handle auto-actions - queue for document load, don't execute immediately\r\n const autoActions = [\r\n \"downloadOnLoad\",\r\n \"printOnLoad\",\r\n \"showLastPageOnLoad\",\r\n \"rotateCW\",\r\n \"rotateCCW\",\r\n ];\r\n if (autoActions.includes(propertyName)) {\r\n // Re-queue all configurations when auto-actions change\r\n this.initialConfigQueued = false;\r\n if (this.isPostMessageReady) {\r\n this.queueAllConfigurations();\r\n this.initialConfigQueued = true;\r\n }\r\n return;\r\n }\r\n \r\n // Use universal dispatcher for ALL actions - pure event-driven approach\r\n const action = this.mapPropertyToAction(propertyName);\r\n if (action) {\r\n this.dispatchAction(action, change.currentValue, \"property-change\");\r\n }\r\n }\r\n });\r\n }\r\n // #endregion\r\n\r\n // #region PDF.js Event Binding Methods\r\n /**\r\n * Waits for the PDF.js viewer to be ready, and binds the the event bus.\r\n */\r\n private bindToPdfJsEventBus() {\r\n // Store the event listener reference so we can remove it later\r\n const webviewerLoadedHandler = () => {\r\n if (this.diagnosticLogs)\r\n console.debug(\"PdfJsViewer: webviewerloaded event received\");\r\n\r\n // Set locale immediately when PDF.js is loaded but before it initializes\r\n // https://github.com/mozilla/pdf.js/issues/11829#issuecomment-617668679\r\n if (this.locale && this.iframe?.nativeElement?.contentWindow) {\r\n try {\r\n const iframeWindow = this.iframe.nativeElement.contentWindow;\r\n if (iframeWindow.PDFViewerApplicationOptions) {\r\n iframeWindow.PDFViewerApplicationOptions.set(\"localeProperties\", {\r\n lang: this.locale,\r\n });\r\n if (this.diagnosticLogs)\r\n console.debug(\r\n `PdfJsViewer: Locale set to ${this.locale} before initialization`,\r\n );\r\n }\r\n } catch (error) {\r\n if (this.diagnosticLogs)\r\n console.debug(\r\n \"PdfJsViewer: Could not set locale before initialization:\",\r\n error,\r\n );\r\n }\r\n }\r\n\r\n if (!this.PDFViewerApplication) {\r\n if (this.diagnosticLogs)\r\n console.debug(\r\n \"PdfJsViewer: Viewer not yet (or no longer) available, events can not yet be bound.\",\r\n );\r\n return;\r\n }\r\n\r\n // https://github.com/mozilla/pdf.js/issues/9527\r\n this.PDFViewerApplication.initializedPromise.then(() => {\r\n // All configurations are now handled via PostMessage system\r\n // No need to call configureVisibleFeatures() anymore\r\n \r\n // Apply any pending changes that occurred before initialization\r\n this.applyPendingChanges();\r\n\r\n const app = this.PDFViewerApplication;\r\n const eventBus = app.eventBus;\r\n \r\n // Store event handler references for cleanup\r\n const documentLoadedHandler = () => {\r\n if (this.diagnosticLogs)\r\n console.debug(\"PdfJsViewer: The document has now been loaded!\");\r\n this.onDocumentLoad.emit();\r\n \r\n // Queue auto-actions for this document load (not from component initialization)\r\n this.queueAutoActionsForDocumentLoad();\r\n \r\n // Execute all queued auto-actions\r\n this.actionQueueManager.onDocumentLoaded();\r\n };\r\n\r\n // Note: pagesInit event is now handled via the PostMessage wrapper event system\r\n\r\n const pagesLoadedHandler = () => {\r\n if (this.diagnosticLogs)\r\n console.debug(\"PdfJsViewer: All pages have been fully loaded!\");\r\n\r\n // Execute auto-print on pages loaded (ensures PDF is fully ready for printing)\r\n if (this.printOnLoad === true) {\r\n this.dispatchAction(\"trigger-print\", true, \"initial-load\");\r\n }\r\n };\r\n\r\n const beforePrintHandler = () => {\r\n if (this.diagnosticLogs)\r\n console.debug(\"PdfJsViewer: The document is about to be printed!\");\r\n this.onBeforePrint.emit();\r\n };\r\n\r\n const afterPrintHandler = () => {\r\n if (this.diagnosticLogs)\r\n console.debug(\"PdfJsViewer: The document has been printed!\");\r\n this.onAfterPrint.emit();\r\n };\r\n\r\n const pageChangingHandler = (event: any) => {\r\n if (this.diagnosticLogs)\r\n console.debug(\r\n \"PdfJsViewer: The page has changed:\",\r\n event.pageNumber,\r\n );\r\n \r\n // Update two-way binding for page\r\n if (\r\n this._page !== event.pageNumber &&\r\n !this.changeOriginTracker.isProgrammatic(\"page\")\r\n ) {\r\n this.changeOriginTracker.markUserInitiated(\"page\");\r\n this._page = event.pageNumber;\r\n // Note: page property uses existing setter/getter, no need to emit pageChange here\r\n }\r\n \r\n this.onPageChange.emit(event.pageNumber);\r\n };\r\n\r\n const rotationChangingHandler = (event: any) => {\r\n const newRotation: ChangedRotation = {\r\n rotation: event.pagesRotation,\r\n page: event.pageNumber,\r\n };\r\n if (this.diagnosticLogs)\r\n console.debug(\"PdfJsViewer: The rotation has changed!\", event);\r\n \r\n // Update two-way binding for rotation\r\n const normalizedRotation =\r\n PropertyTransformers.transformRotation.fromViewer(\r\n event.pagesRotation,\r\n );\r\n if (\r\n this._rotation !== normalizedRotation &&\r\n !this.changeOriginTracker.isProgrammatic(\"rotation\")\r\n ) {\r\n this.changeOriginTracker.markUserInitiated(\"rotation\");\r\n this._rotation = normalizedRotation;\r\n }\r\n \r\n this.onRotationChange.emit(newRotation);\r\n };\r\n\r\n const scaleChangingHandler = (event: any) => {\r\n const newScale: ChangedScale = event.scale;\r\n if (this.diagnosticLogs)\r\n console.debug(\r\n \"PdfJsViewer: The document has scale has changed!\",\r\n newScale,\r\n );\r\n \r\n // Update two-way binding for zoom\r\n const normalizedZoom = PropertyTransformers.transformZoom.fromViewer(\r\n event.scale,\r\n );\r\n if (\r\n this._zoom !== normalizedZoom &&\r\n !this.changeOriginTracker.isProgrammatic(\"zoom\")\r\n ) {\r\n this.changeOriginTracker.markUserInitiated(\"zoom\");\r\n this._zoom = normalizedZoom;\r\n this.zoomChange.emit(normalizedZoom);\r\n }\r\n \r\n this.onScaleChange.emit(newScale);\r\n };\r\n \r\n // Store handlers for cleanup\r\n (this as any)._pdfEventHandlers = {\r\n documentloaded: documentLoadedHandler,\r\n pagesloaded: pagesLoadedHandler,\r\n beforeprint: beforePrintHandler,\r\n afterprint: afterPrintHandler,\r\n pagechanging: pageChangingHandler,\r\n rotationchanging: rotationChangingHandler,\r\n scalechanging: scaleChangingHandler,\r\n };\r\n \r\n // Attach event listeners\r\n eventBus.on(\"documentloaded\", documentLoadedHandler);\r\n eventBus.on(\"pagesloaded\", pagesLoadedHandler);\r\n eventBus.on(\"beforeprint\", beforePrintHandler);\r\n eventBus.on(\"afterprint\", afterPrintHandler);\r\n eventBus.on(\"pagechanging\", pageChangingHandler);\r\n eventBus.on(\"rotationchanging\", rotationChangingHandler);\r\n eventBus.on(\"scalechanging\", scaleChangingHandler);\r\n });\r\n };\r\n \r\n // Store the handler reference for cleanup\r\n (this as any)._webviewerLoadedHandler = webviewerLoadedHandler;\r\n \r\n document.addEventListener(\"webviewerloaded\", webviewerLoadedHandler);\r\n }\r\n // #endregion\r\n\r\n // #region Configuration and Action Queue Methods\r\n private queueAllConfigurations(): void {\r\n // Queue control visibility configurations (immediate actions)\r\n this.queueConfiguration(\"showOpenFile\", this.showOpenFile, \"show-openfile\");\r\n this.queueConfiguration(\"showDownload\", this.showDownload, \"show-download\");\r\n this.queueConfiguration(\"showPrint\", this.showPrint, \"show-print\");\r\n this.queueConfiguration(\r\n \"showFullScreen\",\r\n this.showFullScreen,\r\n \"show-fullscreen\",\r\n );\r\n this.queueConfiguration(\"showFind\", this.showFind, \"show-find\");\r\n this.queueConfiguration(\r\n \"showViewBookmark\",\r\n this.showViewBookmark,\r\n \"show-bookmark\",\r\n );\r\n this.queueConfiguration(\r\n \"showAnnotations\",\r\n this.showAnnotations,\r\n \"show-annotations\",\r\n );\r\n\r\n // Toolbar/Sidebar group visibility\r\n this.queueConfiguration(\r\n \"showToolbarLeft\",\r\n this.showToolbarLeft,\r\n \"show-toolbar-left\",\r\n );\r\n this.queueConfiguration(\r\n \"showToolbarMiddle\",\r\n this.showToolbarMiddle,\r\n \"show-toolbar-middle\",\r\n );\r\n this.queueConfiguration(\r\n \"showToolbarRight\",\r\n this.showToolbarRight,\r\n \"show-toolbar-right\",\r\n );\r\n this.queueConfiguration(\r\n \"showSecondaryToolbarToggle\",\r\n this.showSecondaryToolbarToggle,\r\n \"show-secondary-toolbar-toggle\",\r\n );\r\n this.queueConfiguration(\"showSidebar\", this.showSidebar, \"show-sidebar\");\r\n this.queueConfiguration(\r\n \"showSidebarLeft\",\r\n this.showSidebarLeft,\r\n \"show-sidebar-left\",\r\n );\r\n this.queueConfiguration(\r\n \"showSidebarRight\",\r\n this.showSidebarRight,\r\n \"show-sidebar-right\",\r\n );\r\n\r\n // Layout customization\r\n this.queueConfiguration(\r\n \"toolbarDensity\",\r\n this.toolbarDensity,\r\n \"set-toolbar-density\",\r\n );\r\n if (this.sidebarWidth) {\r\n this.queueConfiguration(\r\n \"sidebarWidth\",\r\n this.sidebarWidth,\r\n \"set-sidebar-width\",\r\n );\r\n }\r\n this.queueConfiguration(\r\n \"toolbarPosition\",\r\n this.toolbarPosition,\r\n \"set-toolbar-position\",\r\n );\r\n this.queueConfiguration(\r\n \"sidebarPosition\",\r\n this.sidebarPosition,\r\n \"set-sidebar-position\",\r\n );\r\n if (this.responsiveBreakpoint !== undefined) {\r\n this.queueConfiguration(\r\n \"responsiveBreakpoint\",\r\n this.responsiveBreakpoint,\r\n \"set-responsive-breakpoint\",\r\n );\r\n }\r\n\r\n // Queue mode configurations (immediate actions)\r\n if (this.cursor) {\r\n this.queueConfiguration(\"cursor\", this.cursor, \"set-cursor\");\r\n }\r\n if (this.scroll) {\r\n this.queueConfiguration(\"scroll\", this.scroll, \"set-scroll\");\r\n }\r\n if (this.spread) {\r\n this.queueConfiguration(\"spread\", this.spread, \"set-spread\");\r\n }\r\n\r\n // Queue navigation configurations (immediate actions)\r\n if (this._page) {\r\n this.queueConfiguration(\"page\", this._page, \"set-page\");\r\n }\r\n if (this.zoom) {\r\n this.queueConfiguration(\"zoom\", this.zoom, \"set-zoom\");\r\n }\r\n // Note: zoom is now handled by two-way binding [(zoom)]\r\n // Queue navigation configuration if specified\r\n if (this.namedDest && this.namedDest.trim() !== \"\") {\r\n this.queueConfiguration(\"namedDest\", this.namedDest, \"go-to-named-dest\");\r\n }\r\n if (this.pageMode) {\r\n this.queueConfiguration(\"pageMode\", this.pageMode, \"update-page-mode\");\r\n }\r\n\r\n // Queue rotation configurations (immediate actions)\r\n if (this.rotateCW === true) {\r\n this.queueConfiguration(\"rotateCW\", this.rotateCW, \"trigger-rotate-cw\");\r\n }\r\n if (this.rotateCCW === true) {\r\n this.queueConfiguration(\r\n \"rotateCCW\",\r\n this.rotateCCW,\r\n \"trigger-rotate-ccw\",\r\n );\r\n }\r\n\r\n // Queue error handling configurations (non-auto-actions)\r\n if (this.errorMessage) {\r\n this.queueConfiguration(\r\n \"errorMessage\",\r\n this.errorMessage,\r\n \"set-error-message\",\r\n );\r\n }\r\n if (this.errorOverride !== undefined) {\r\n this.queueConfiguration(\r\n \"errorOverride\",\r\n this.errorOverride,\r\n \"set-error-override\",\r\n );\r\n }\r\n if (this.errorAppend !== undefined) {\r\n this.queueConfiguration(\r\n \"errorAppend\",\r\n this.errorAppend,\r\n \"set-error-append\",\r\n );\r\n }\r\n\r\n // Queue theme and visual customization configurations\r\n // Always queue theme to ensure initial styles are applied\r\n\r\n this.queueConfiguration(\"theme\", this.theme || \"auto\", \"set-theme\");\r\n\r\n if (this.primaryColor) {\r\n this.queueConfiguration(\r\n \"primaryColor\",\r\n this.primaryColor,\r\n \"set-primary-color\",\r\n );\r\n }\r\n if (this.backgroundColor) {\r\n this.queueConfiguration(\r\n \"backgroundColor\",\r\n this.backgroundColor,\r\n \"set-background-color\",\r\n );\r\n }\r\n if (this.pageBorderColor) {\r\n this.queueConfiguration(\r\n \"pageBorderColor\",\r\n this.pageBorderColor,\r\n \"set-page-border-color\",\r\n );\r\n }\r\n if (this.pageSpacing) {\r\n this.queueConfiguration(\r\n \"pageSpacing\",\r\n this.pageSpacing,\r\n \"set-page-spacing\",\r\n );\r\n }\r\n if (this.toolbarColor) {\r\n this.queueConfiguration(\r\n \"toolbarColor\",\r\n this.toolbarColor,\r\n \"set-toolbar-color\",\r\n );\r\n }\r\n if (this.textColor) {\r\n this.queueConfiguration(\"textColor\", this.textColor, \"set-text-color\");\r\n }\r\n if (this.borderRadius) {\r\n this.queueConfiguration(\r\n \"borderRadius\",\r\n this.borderRadius,\r\n \"set-border-radius\",\r\n );\r\n }\r\n if (this.customCSS) {\r\n // Pass both CSS and nonce for CSP support\r\n const payload = this.cspNonce \r\n ? { css: this.customCSS, nonce: this.cspNonce }\r\n : this.customCSS;\r\n this.queueConfiguration(\"customCSS\", payload, \"set-custom-css\");\r\n }\r\n\r\n // Queue CSS zoom configurations (immediate actions)\r\n // Note: Locale is now set via URL parameter, not PostMessage\r\n if (this.useOnlyCssZoom !== undefined) {\r\n this.queueConfiguration(\r\n \"useOnlyCssZoom\",\r\n this.useOnlyCssZoom,\r\n \"set-css-zoom\",\r\n );\r\n }\r\n\r\n // Queue event configurations (non-auto-actions)\r\n if (this.onBeforePrint) {\r\n this.queueConfiguration(\"beforePrint\", true, \"enable-before-print\");\r\n }\r\n if (this.onAfterPrint) {\r\n this.queueConfiguration(\"afterPrint\", true, \"enable-after-print\");\r\n }\r\n if (this.onDocumentLoad) {\r\n this.queueConfiguration(\"pagesLoaded\", true, \"enable-pages-loaded\");\r\n }\r\n if (this.onPageChange) {\r\n this.queueConfiguration(\"pageChange\", true, \"enable-page-change\");\r\n }\r\n\r\n // Queue new high-value event configurations\r\n if (this.onDocumentError) {\r\n this.queueConfiguration(\"documentError\", true, \"enable-document-error\");\r\n }\r\n if (this.onDocumentInit) {\r\n this.queueConfiguration(\"documentInit\", true, \"enable-document-init\");\r\n }\r\n if (this.onPagesInit) {\r\n this.queueConfiguration(\"pagesInit\", true, \"enable-pages-init\");\r\n }\r\n if (this.onPresentationModeChanged) {\r\n this.queueConfiguration(\r\n \"presentationModeChanged\",\r\n true,\r\n \"enable-presentation-mode-changed\",\r\n );\r\n }\r\n if (this.onOpenFile) {\r\n this.queueConfiguration(\"openFile\", true, \"enable-open-file\");\r\n }\r\n if (this.onFind) {\r\n this.queueConfiguration(\"find\", true, \"enable-find\");\r\n }\r\n if (this.onUpdateFindMatchesCount) {\r\n this.queueConfiguration(\r\n \"updateFindMatchesCount\",\r\n true,\r\n \"enable-update-find-matches-count\",\r\n );\r\n }\r\n if (this.onMetadataLoaded) {\r\n this.queueConfiguration(\"metadataLoaded\", true, \"enable-metadata-loaded\");\r\n }\r\n if (this.onOutlineLoaded) {\r\n this.queueConfiguration(\"outlineLoaded\", true, \"enable-outline-loaded\");\r\n }\r\n if (this.onPageRendered) {\r\n this.queueConfiguration(\"pageRendered\", true, \"enable-page-rendered\");\r\n }\r\n\r\n // New high-value events\r\n if (this.onAnnotationLayerRendered) {\r\n this.queueConfiguration(\r\n \"annotationLayerRendered\",\r\n true,\r\n \"enable-annotation-layer-rendered\",\r\n );\r\n }\r\n if (this.onBookmarkClick) {\r\n this.queueConfiguration(\"bookmarkClick\", true, \"enable-bookmark-click\");\r\n }\r\n if (this.onIdle) {\r\n this.queueConfiguration(\"idle\", true, \"enable-idle\");\r\n }\r\n\r\n // Note: Auto-actions are now queued when the document loads, not during component initialization\r\n // This ensures they use the current property values at the time of document load\r\n }\r\n\r\n private queueAutoActionsForDocumentLoad(): void {\r\n // Use universal dispatcher for auto-actions\r\n if (this.downloadOnLoad === true) {\r\n this.dispatchAction(\"trigger-download\", true, \"initial-load\");\r\n }\r\n\r\n if (this.showLastPageOnLoad === true) {\r\n this.dispatchAction(\"go-to-last-page\", true, \"initial-load\");\r\n }\r\n\r\n // Auto-print is handled in pagesLoadedHandler for timing reasons\r\n }\r\n\r\n private queueConfiguration(\r\n propertyName: string,\r\n value: any,\r\n action: string,\r\n ): void {\r\n // Use universal dispatcher for all configuration actions\r\n this.dispatchAction(action, value, \"initial-load\");\r\n }\r\n\r\n public refresh(): void {\r\n // Needs to be invoked for external window or when needs to reload pdf\r\n\r\n // Clean up existing event listeners\r\n ComponentUtils.cleanupEventHandlers(this);\r\n \r\n // Clear the action queue to ensure clean state\r\n if (this.actionQueueManager) {\r\n this.actionQueueManager.clearQueues();\r\n }\r\n \r\n // Reset PostMessage readiness state\r\n this.isPostMessageReady = false;\r\n this.postMessageReadiness = 0;\r\n this.pendingInitialConfig = true;\r\n this.initialConfigQueued = false; // Reset initial config flag\r\n \r\n // Reload the PDF - this will trigger queueAllConfigurations() when PostMessage API is ready\r\n this.loadPdf();\r\n }\r\n\r\n // Public method for external control messages\r\n public sendViewerControlMessage(action: string, payload: any): Promise<any> {\r\n return this.sendControlMessage(action, payload);\r\n }\r\n\r\n // #region Public Methods for On-Demand Actions\r\n public triggerDownload(): Promise<ActionExecutionResult> {\r\n // Use universal dispatcher for user interactions - now always returns Promise<ActionExecutionResult>\r\n return this.dispatchAction(\"trigger-download\", true, \"user-interaction\");\r\n }\r\n\r\n public triggerPrint(): Promise<ActionExecutionResult> {\r\n // Use universal dispatcher for user interactions - now always returns Promise<ActionExecutionResult>\r\n return this.dispatchAction(\"trigger-print\", true, \"user-interaction\");\r\n }\r\n\r\n public setPage(page: number): Promise<ActionExecutionResult> {\r\n // Use universal dispatcher for user interactions - now always returns Promise<ActionExecutionResult>\r\n return this.dispatchAction(\"set-page\", page, \"user-interaction\");\r\n }\r\n\r\n public setZoom(zoom: string): Promise<ActionExecutionResult> {\r\n // Use universal dispatcher for user interactions - now always returns Promise<ActionExecutionResult>\r\n return this.dispatchAction(\"set-zoom\", zoom, \"user-interaction\");\r\n }\r\n\r\n public goToLastPage(): Promise<ActionExecutionResult> {\r\n // Use universal dispatcher for user interactions - now always returns Promise<ActionExecutionResult>\r\n return this.dispatchAction(\"go-to-last-page\", true, \"user-interaction\");\r\n }\r\n\r\n public setCursor(cursor: string): Promise<ActionExecutionResult> {\r\n // Use universal dispatcher for user interactions\r\n return this.dispatchAction(\"set-cursor\", cursor, \"user-interaction\");\r\n }\r\n\r\n public setScroll(scroll: string): Promise<ActionExecutionResult> {\r\n // Use universal dispatcher for user interactions\r\n return this.dispatchAction(\"set-scroll\", scroll, \"user-interaction\");\r\n }\r\n\r\n public setSpread(spread: string): Promise<ActionExecutionResult> {\r\n // Use universal dispatcher for user interactions\r\n return this.dispatchAction(\"set-spread\", spread, \"user-interaction\");\r\n }\r\n\r\n public triggerRotation(\r\n direction: \"cw\" | \"ccw\",\r\n ): Promise<ActionExecutionResult> {\r\n // Use universal dispatcher for user interactions\r\n const action =\r\n direction === \"cw\" ? \"trigger-rotate-cw\" : \"trigger-rotate-ccw\";\r\n return this.dispatchAction(action, true, \"user-interaction\");\r\n }\r\n\r\n public goToPage(page: number): Promise<ActionExecutionResult> {\r\n // Alias for setPage for backward compatibility\r\n return this.setPage(page);\r\n }\r\n // #endregion\r\n\r\n // Action queue management methods\r\n public getActionStatus(\r\n actionId: string,\r\n ): \"pending\" | \"executing\" | \"completed\" | \"failed\" | \"not-found\" {\r\n if (!this.actionQueueManager) {\r\n return \"not-found\";\r\n }\r\n return this.actionQueueManager.getActionStatus(actionId);\r\n }\r\n\r\n public getQueueStatus(): { queuedActions: number; executedActions: number } {\r\n if (!this.actionQueueManager) {\r\n return {\r\n queuedActions: 0,\r\n executedActions: 0,\r\n };\r\n }\r\n return this.actionQueueManager.getQueueStatus();\r\n }\r\n\r\n public clearActionQueue(): void {\r\n if (this.actionQueueManager) {\r\n this.actionQueueManager.clearQueues();\r\n }\r\n }\r\n\r\n /**\r\n * Enable or disable URL validation security feature\r\n * When enabled, prevents users from modifying the file parameter in the viewer URL\r\n * @param enabled - Whether to enable URL validation (default: true)\r\n * @returns Promise<ActionExecutionResult>\r\n */\r\n public setUrlValidation(enabled: boolean = true): Promise<ActionExecutionResult> {\r\n return this.dispatchAction(\"set-url-validation\", enabled, \"user-interaction\");\r\n }\r\n\r\n /**\r\n * Dismiss the security warning\r\n */\r\n public dismissSecurityWarning(): void {\r\n this.securityWarning = null;\r\n }\r\n // #endregion\r\n\r\n // #region PDF Loading and URL Handling\r\n private loadPdf(): void {\r\n if (!this.validatePdfSource()) return;\r\n\r\n // Show spinner immediately when PDF loading starts (Issue #275)\r\n this.isLoading = true;\r\n this.hasError = false;\r\n this.currentErrorMessage = \"\";\r\n\r\n this.setupExternalWindow();\r\n const fileUrl = this.createFileUrl();\r\n const viewerUrl = this.buildViewerUrl(fileUrl);\r\n this.navigateToViewer(viewerUrl);\r\n }\r\n\r\n private validatePdfSource(): boolean {\r\n return !!this._src;\r\n }\r\n\r\n private setupExternalWindow(): void {\r\n if (!this.externalWindow) return;\r\n\r\n if (typeof this.viewerTab === \"undefined\" || this.viewerTab.closed) {\r\n this.viewerTab = window.open(\r\n \"\",\r\n this.target,\r\n this.externalWindowOptions || \"\",\r\n );\r\n if (this.viewerTab == null) {\r\n if (this.diagnosticLogs) {\r\n console.error(\r\n \"ng2-pdfjs-viewer: For 'externalWindow = true'. i.e opening in new tab to work, pop-ups should be enabled.\",\r\n );\r\n }\r\n return;\r\n }\r\n\r\n if (this.showSpinner) {\r\n this.renderLoadingSpinner();\r\n }\r\n }\r\n }\r\n\r\n private renderLoadingSpinner(): void {\r\n this.viewerTab.document.write(`\r\n <style>\r\n .loader {\r\n position: fixed;\r\n left: 40%;\r\n top: 40%;\r\n border: 16px solid #f3f3f3;\r\n border-radius: 50%;\r\n border-top: 16px solid #3498db;\r\n width: 120px;\r\n height: 120px;\r\n animation: spin 2s linear infinite;\r\n }\r\n @keyframes spin {\r\n 0% {\r\n transform: rotate(0deg);\r\n }\r\n 100% {\r\n transform: rotate(360deg);\r\n }\r\n }\r\n </style>\r\n <div class=\"loader\"></div>\r\n `);\r\n }\r\n\r\n private createFileUrl(): string {\r\n this.relaseUrl?.();\r\n\r\n if (this._src instanceof Blob) {\r\n const url = URL.createObjectURL(this._src);\r\n this.relaseUrl = () => URL.revokeObjectURL(url);\r\n return encodeURIComponent(url);\r\n } else if (this._src instanceof Uint8Array) {\r\n // Ensure BlobPart type safety by passing ArrayBuffer\r\n const arrayBuffer = (this._src as Uint8Array).buffer as ArrayBuffer;\r\n let blob = new Blob([arrayBuffer], { type: \"application/pdf\" });\r\n const url = URL.createObjectURL(blob);\r\n this.relaseUrl = () => URL.revokeObjectURL(url);\r\n return encodeURIComponent(url);\r\n } else {\r\n return this._src;\r\n }\r\n }\r\n\r\n private buildViewerUrl(fileUrl: string): string {\r\n let viewerUrl = this.getBaseViewerUrl();\r\n viewerUrl = this.addFileParameter(viewerUrl, fileUrl);\r\n viewerUrl = this.addViewerIdParameter(viewerUrl);\r\n viewerUrl = this.addUrlValidationParameter(viewerUrl);\r\n viewerUrl = this.addCacheBustingIfNeeded(viewerUrl);\r\n\r\n return viewerUrl;\r\n }\r\n\r\n private getBaseViewerUrl(): string {\r\n return this.viewerFolder\r\n ? `${this.viewerFolder}/web/viewer.html`\r\n : `assets/pdfjs/web/viewer.html`;\r\n }\r\n\r\n private addFileParameter(viewerUrl: string, fileUrl: string): string {\r\n return `${viewerUrl}?file=${fileUrl}`;\r\n }\r\n\r\n private addViewerIdParameter(viewerUrl: string): string {\r\n return typeof this.viewerId !== \"undefined\"\r\n ? `${viewerUrl}&viewerId=${this.viewerId}`\r\n : viewerUrl;\r\n }\r\n\r\n private addUrlValidationParameter(viewerUrl: string): string {\r\n const flag = this.urlValidation === false ? 0 : 1;\r\n return `${viewerUrl}&urlValidation=${flag}`;\r\n }\r\n\r\n private addCacheBustingIfNeeded(viewerUrl: string): string {\r\n if (this.isDevelopmentMode()) {\r\n const cacheBuster = Date.now();\r\n\r\n return `${viewerUrl}&_t=${cacheBuster}`;\r\n } else {\r\n return viewerUrl;\r\n }\r\n }\r\n\r\n private isDevelopmentMode(): boolean {\r\n return (\r\n window.location.hostname === \"localhost\" ||\r\n window.location.hostname === \"127.0.0.1\" ||\r\n window.location.port === \"4200\" ||\r\n window.location.href.includes(\"localhost:4200\")\r\n );\r\n }\r\n\r\n private navigateToViewer(viewerUrl: string): void {\r\n if (this.externalWindow) {\r\n this.viewerTab.location.href = viewerUrl;\r\n } else {\r\n this.iframe.nativeElement.contentWindow.location.replace(viewerUrl);\r\n }\r\n \r\n if (this.diagnosticLogs) {\r\n this.logViewerConfiguration(viewerUrl);\r\n }\r\n }\r\n\r\n private logViewerConfiguration(viewerUrl: string): void {\r\n console.debug(`PdfJsViewer: Minimal URL configuration:\r\n pdfSrc = ${this.pdfSrc}\r\n externalWindow = ${this.externalWindow}\r\n viewerFolder = ${this.viewerFolder}\r\n viewerId = ${this.viewerId}\r\n finalUrl = ${viewerUrl}\r\n \r\n All other configurations handled via PostMessage system:\r\n showOpenFile = ${this.showOpenFile}\r\n showDownload = ${this.showDownload}\r\n showViewBookmark = ${this.showViewBookmark}\r\n showPrint = ${this.showPrint}\r\n showFullScreen = ${this.showFullScreen}\r\n showFind = ${this.showFind}\r\n cursor = ${this.cursor}\r\n scroll = ${this.scroll}\r\n spread = ${this.spread}\r\n page = ${this.page}\r\n zoom = ${this.zoom}\r\n namedDest = ${this.namedDest}\r\n pageMode = ${this.pageMode}\r\n errorOverride = ${this.errorOverride}\r\n errorAppend = ${this.errorAppend}\r\n errorMessage = ${this.errorMessage}\r\n locale = ${this.locale}\r\n useOnlyCssZoom = ${this.useOnlyCssZoom}\r\n \r\n Auto-actions (handled by action queue):\r\n downloadOnLoad = ${this.downloadOnLoad}\r\n printOnLoad = ${this.printOnLoad}\r\n showLastPageOnLoad = ${this.showLastPageOnLoad}\r\n `);\r\n }\r\n // #endregion\r\n\r\n // #region Two-Way Binding Helper Methods\r\n private applyZoomToViewer(zoom: string): void {\r\n // Use universal dispatcher - it will handle readiness checking and queuing\r\n this.dispatchAction(\"set-zoom\", zoom, \"property-change\");\r\n }\r\n\r\n private applyRotationToViewer(rotation: number): void {\r\n // Use universal dispatcher - it will handle readiness checking and queuing\r\n this.dispatchAction(\"set-rotation\", rotation, \"property-change\");\r\n }\r\n\r\n private applyCursorToViewer(cursor: string): void {\r\n // Use universal dispatcher - it will handle readiness checking and queuing\r\n this.dispatchAction(\"set-cursor\", cursor, \"property-change\");\r\n }\r\n\r\n private applyScrollToViewer(scroll: string): void {\r\n // Use universal dispatcher - it will handle readiness checking and queuing\r\n this.dispatchAction(\"set-scroll\", scroll, \"property-change\");\r\n }\r\n\r\n private applySpreadToViewer(spread: string): void {\r\n // Use universal dispatcher - it will handle readiness checking and queuing\r\n this.dispatchAction(\"set-spread\", spread, \"property-change\");\r\n }\r\n\r\n private applyPageModeToViewer(pageMode: string): void {\r\n // Use universal dispatcher - it will handle readiness checking and queuing\r\n this.dispatchAction(\"update-page-mode\", pageMode, \"property-change\");\r\n }\r\n // #endregion\r\n\r\n // Universal Action Dispatcher - ALL actions go through readiness-based queuing\r\n private dispatchAction(\r\n action: string,\r\n payload: any,\r\n source:\r\n | \"initial-load\"\r\n | \"property-change\"\r\n | \"user-interaction\" = \"property-change\",\r\n ): Promise<ActionExecutionResult> {\r\n const requiredReadiness = this.getRequiredReadinessLevel(action);\r\n const actionObj: ViewerAction = {\r\n id: `${source}-${action}-${Date.now()}`,\r\n action: action,\r\n payload: payload,\r\n };\r\n\r\n // Check if we have sufficient readiness to execute immediately\r\n if (this.hasRequiredReadiness(requiredReadiness)) {\r\n return this.actionQueueManager.executeAction(actionObj);\r\n } else {\r\n // Queue action to execute when readiness is achieved\r\n this.actionQueueManager.queueAction(actionObj, requiredReadiness);\r\n\r\n // Return a promise that resolves when the action eventually executes\r\n return Promise.resolve({\r\n actionId: actionObj.id,\r\n success: true,\r\n timestamp: Date.now(),\r\n } as ActionExecutionResult);\r\n }\r\n }\r\n\r\n private getRequiredReadinessLevel(action: string): number {\r\n // Define readiness requirements for all actions\r\n const level1Actions = [\r\n \"set-theme\",\r\n \"set-primary-color\",\r\n \"set-background-color\",\r\n \"set-page-border-color\",\r\n \"set-toolbar-color\",\r\n \"set-text-color\",\r\n \"set-border-radius\",\r\n \"set-custom-css\",\r\n ];\r\n const level3Actions = [\r\n \"show-download\",\r\n \"show-print\",\r\n \"show-fullscreen\",\r\n \"show-find\",\r\n \"show-bookmark\",\r\n \"show-openfile\",\r\n \"show-annotations\",\r\n \"set-error-message\",\r\n \"set-error-override\",\r\n \"set-error-append\",\r\n \"set-css-zoom\",\r\n // DOM visibility toggles\r\n \"show-toolbar-left\",\r\n \"show-toolbar-middle\",\r\n \"show-toolbar-right\",\r\n \"show-secondary-toolbar-toggle\",\r\n \"show-sidebar\",\r\n \"show-sidebar-left\",\r\n \"show-sidebar-right\",\r\n ];\r\n const level4Actions = [\r\n \"set-cursor\",\r\n \"set-scroll\",\r\n \"set-spread\",\r\n \"set-zoom\",\r\n \"update-page-mode\",\r\n // Layout actions require components ready to measure\r\n \"set-toolbar-density\",\r\n \"set-sidebar-width\",\r\n \"set-toolbar-position\",\r\n \"set-sidebar-position\",\r\n \"set-responsive-breakpoint\",\r\n ];\r\n const level5Actions = [\r\n \"set-page\",\r\n \"set-rotation\",\r\n \"go-to-last-page\",\r\n \"go-to-named-dest\",\r\n \"trigger-download\",\r\n \"trigger-print\",\r\n \"trigger-rotate-cw\",\r\n \"trigger-rotate-ccw\",\r\n ];\r\n\r\n if (level1Actions.includes(action)) return 1; // VIEWER_LOADED - DOM access only\r\n if (level3Actions.includes(action)) return 3; // EVENTBUS_READY\r\n if (level4Actions.includes(action)) return 4; // COMPONENTS_READY\r\n if (level5Actions.includes(action)) return 5; // DOCUMENT_LOADED\r\n return 3; // Default to EVENTBUS_READY\r\n }\r\n\r\n private hasRequiredReadiness(requiredLevel: number): boolean {\r\n if (!this.isPostMessageReady) return false;\r\n if (requiredLevel === 5 && !this.actionQueueManager?.isDocumentLoaded)\r\n return false;\r\n return this.postMessageReadiness >= requiredLevel;\r\n }\r\n}\r\n","import { ModuleWithProviders, NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { PdfJsViewerComponent } from \"./ng2-pdfjs-viewer.component\";\n\n@NgModule({\n imports: [CommonModule],\n declarations: [PdfJsViewerComponent],\n exports: [PdfJsViewerComponent],\n})\nexport class PdfJsViewerModule {\n static forRoot(): ModuleWithProviders<PdfJsViewerModule> {\n return {\n ngModule: PdfJsViewerModule,\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { OnInit, OnDestroy, OnChanges, AfterViewInit, ElementRef, EventEmitter, TemplateRef, SimpleChanges, ModuleWithProviders } from '@angular/core';
|
|
2
|
+
import { OnInit, OnDestroy, OnChanges, AfterViewInit, ElementRef, EventEmitter, TemplateRef, ChangeDetectorRef, SimpleChanges, ModuleWithProviders } from '@angular/core';
|
|
3
3
|
import * as i2 from '@angular/common';
|
|
4
4
|
|
|
5
5
|
interface ActionExecutionResult {
|
|
@@ -180,7 +180,6 @@ declare class PdfJsViewerComponent implements OnInit, OnDestroy, OnChanges, Afte
|
|
|
180
180
|
showFullScreen: boolean;
|
|
181
181
|
showFind: boolean;
|
|
182
182
|
downloadOnLoad: boolean;
|
|
183
|
-
enableSandbox: boolean;
|
|
184
183
|
printOnLoad: boolean;
|
|
185
184
|
rotateCW: boolean;
|
|
186
185
|
rotateCCW: boolean;
|
|
@@ -274,6 +273,8 @@ declare class PdfJsViewerComponent implements OnInit, OnDestroy, OnChanges, Afte
|
|
|
274
273
|
private initialConfigQueued;
|
|
275
274
|
private actionQueueManager;
|
|
276
275
|
private changeOriginTracker;
|
|
276
|
+
private cdr;
|
|
277
|
+
constructor(cdr: ChangeDetectorRef);
|
|
277
278
|
private messageIdCounter;
|
|
278
279
|
private pendingMessages;
|
|
279
280
|
private pendingChanges;
|
|
@@ -337,6 +338,9 @@ declare class PdfJsViewerComponent implements OnInit, OnDestroy, OnChanges, Afte
|
|
|
337
338
|
ngOnDestroy(): void;
|
|
338
339
|
private generateMessageId;
|
|
339
340
|
private sendControlMessage;
|
|
341
|
+
private sendControlMessageWithRequeue;
|
|
342
|
+
private isIframeAccessible;
|
|
343
|
+
private processPostMessageReadyActions;
|
|
340
344
|
private handleControlResponse;
|
|
341
345
|
private setupMessageListener;
|
|
342
346
|
private handleStateChangeNotification;
|
|
@@ -406,7 +410,7 @@ declare class PdfJsViewerComponent implements OnInit, OnDestroy, OnChanges, Afte
|
|
|
406
410
|
private getRequiredReadinessLevel;
|
|
407
411
|
private hasRequiredReadiness;
|
|
408
412
|
static ɵfac: i0.ɵɵFactoryDeclaration<PdfJsViewerComponent, never>;
|
|
409
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<PdfJsViewerComponent, "ng2-pdfjs-viewer", never, { "viewerId": { "alias": "viewerId"; "required": false; }; "viewerFolder": { "alias": "viewerFolder"; "required": false; }; "externalWindow": { "alias": "externalWindow"; "required": false; }; "target": { "alias": "target"; "required": false; }; "showSpinner": { "alias": "showSpinner"; "required": false; }; "downloadFileName": { "alias": "downloadFileName"; "required": false; }; "locale": { "alias": "locale"; "required": false; }; "useOnlyCssZoom": { "alias": "useOnlyCssZoom"; "required": false; }; "diagnosticLogs": { "alias": "diagnosticLogs"; "required": false; }; "showOpenFile": { "alias": "showOpenFile"; "required": false; }; "showAnnotations": { "alias": "showAnnotations"; "required": false; }; "showDownload": { "alias": "showDownload"; "required": false; }; "showViewBookmark": { "alias": "showViewBookmark"; "required": false; }; "showPrint": { "alias": "showPrint"; "required": false; }; "showFullScreen": { "alias": "showFullScreen"; "required": false; }; "showFind": { "alias": "showFind"; "required": false; }; "downloadOnLoad": { "alias": "downloadOnLoad"; "required": false; }; "
|
|
413
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PdfJsViewerComponent, "ng2-pdfjs-viewer", never, { "viewerId": { "alias": "viewerId"; "required": false; }; "viewerFolder": { "alias": "viewerFolder"; "required": false; }; "externalWindow": { "alias": "externalWindow"; "required": false; }; "target": { "alias": "target"; "required": false; }; "showSpinner": { "alias": "showSpinner"; "required": false; }; "downloadFileName": { "alias": "downloadFileName"; "required": false; }; "locale": { "alias": "locale"; "required": false; }; "useOnlyCssZoom": { "alias": "useOnlyCssZoom"; "required": false; }; "diagnosticLogs": { "alias": "diagnosticLogs"; "required": false; }; "showOpenFile": { "alias": "showOpenFile"; "required": false; }; "showAnnotations": { "alias": "showAnnotations"; "required": false; }; "showDownload": { "alias": "showDownload"; "required": false; }; "showViewBookmark": { "alias": "showViewBookmark"; "required": false; }; "showPrint": { "alias": "showPrint"; "required": false; }; "showFullScreen": { "alias": "showFullScreen"; "required": false; }; "showFind": { "alias": "showFind"; "required": false; }; "downloadOnLoad": { "alias": "downloadOnLoad"; "required": false; }; "printOnLoad": { "alias": "printOnLoad"; "required": false; }; "rotateCW": { "alias": "rotateCW"; "required": false; }; "rotateCCW": { "alias": "rotateCCW"; "required": false; }; "showLastPageOnLoad": { "alias": "showLastPageOnLoad"; "required": false; }; "namedDest": { "alias": "namedDest"; "required": false; }; "errorOverride": { "alias": "errorOverride"; "required": false; }; "errorAppend": { "alias": "errorAppend"; "required": false; }; "errorMessage": { "alias": "errorMessage"; "required": false; }; "urlValidation": { "alias": "urlValidation"; "required": false; }; "customSecurityTpl": { "alias": "customSecurityTpl"; "required": false; }; "theme": { "alias": "theme"; "required": false; }; "primaryColor": { "alias": "primaryColor"; "required": false; }; "backgroundColor": { "alias": "backgroundColor"; "required": false; }; "pageBorderColor": { "alias": "pageBorderColor"; "required": false; }; "pageSpacing": { "alias": "pageSpacing"; "required": false; }; "toolbarColor": { "alias": "toolbarColor"; "required": false; }; "textColor": { "alias": "textColor"; "required": false; }; "borderRadius": { "alias": "borderRadius"; "required": false; }; "customCSS": { "alias": "customCSS"; "required": false; }; "cspNonce": { "alias": "cspNonce"; "required": false; }; "iframeTitle": { "alias": "iframeTitle"; "required": false; }; "customSpinnerTpl": { "alias": "customSpinnerTpl"; "required": false; }; "spinnerClass": { "alias": "spinnerClass"; "required": false; }; "customErrorTpl": { "alias": "customErrorTpl"; "required": false; }; "errorClass": { "alias": "errorClass"; "required": false; }; "showToolbarLeft": { "alias": "showToolbarLeft"; "required": false; }; "showToolbarMiddle": { "alias": "showToolbarMiddle"; "required": false; }; "showToolbarRight": { "alias": "showToolbarRight"; "required": false; }; "showSecondaryToolbarToggle": { "alias": "showSecondaryToolbarToggle"; "required": false; }; "showSidebar": { "alias": "showSidebar"; "required": false; }; "showSidebarLeft": { "alias": "showSidebarLeft"; "required": false; }; "showSidebarRight": { "alias": "showSidebarRight"; "required": false; }; "toolbarDensity": { "alias": "toolbarDensity"; "required": false; }; "sidebarWidth": { "alias": "sidebarWidth"; "required": false; }; "toolbarPosition": { "alias": "toolbarPosition"; "required": false; }; "sidebarPosition": { "alias": "sidebarPosition"; "required": false; }; "responsiveBreakpoint": { "alias": "responsiveBreakpoint"; "required": false; }; "controlVisibility": { "alias": "controlVisibility"; "required": false; }; "autoActions": { "alias": "autoActions"; "required": false; }; "errorHandling": { "alias": "errorHandling"; "required": false; }; "viewerConfig": { "alias": "viewerConfig"; "required": false; }; "themeConfig": { "alias": "themeConfig"; "required": false; }; "groupVisibility": { "alias": "groupVisibility"; "required": false; }; "layoutConfig": { "alias": "layoutConfig"; "required": false; }; "startDownload": { "alias": "startDownload"; "required": false; }; "startPrint": { "alias": "startPrint"; "required": false; }; "openFile": { "alias": "openFile"; "required": false; }; "download": { "alias": "download"; "required": false; }; "print": { "alias": "print"; "required": false; }; "fullScreen": { "alias": "fullScreen"; "required": false; }; "find": { "alias": "find"; "required": false; }; "viewBookmark": { "alias": "viewBookmark"; "required": false; }; "lastPage": { "alias": "lastPage"; "required": false; }; "externalWindowOptions": { "alias": "externalWindowOptions"; "required": false; }; "iframeBorder": { "alias": "iframeBorder"; "required": false; }; "zoom": { "alias": "zoom"; "required": false; }; "rotation": { "alias": "rotation"; "required": false; }; "cursor": { "alias": "cursor"; "required": false; }; "scroll": { "alias": "scroll"; "required": false; }; "spread": { "alias": "spread"; "required": false; }; "pageMode": { "alias": "pageMode"; "required": false; }; "page": { "alias": "page"; "required": false; }; "pdfSrc": { "alias": "pdfSrc"; "required": false; }; }, { "onBeforePrint": "onBeforePrint"; "onAfterPrint": "onAfterPrint"; "onDocumentLoad": "onDocumentLoad"; "onPageChange": "onPageChange"; "onScaleChange": "onScaleChange"; "onRotationChange": "onRotationChange"; "onDocumentError": "onDocumentError"; "onDocumentInit": "onDocumentInit"; "onPagesInit": "onPagesInit"; "onPresentationModeChanged": "onPresentationModeChanged"; "onOpenFile": "onOpenFile"; "onFind": "onFind"; "onUpdateFindMatchesCount": "onUpdateFindMatchesCount"; "onMetadataLoaded": "onMetadataLoaded"; "onOutlineLoaded": "onOutlineLoaded"; "onPageRendered": "onPageRendered"; "onAnnotationLayerRendered": "onAnnotationLayerRendered"; "onBookmarkClick": "onBookmarkClick"; "onIdle": "onIdle"; "zoomChange": "zoomChange"; "cursorChange": "cursorChange"; "scrollChange": "scrollChange"; "spreadChange": "spreadChange"; "pageModeChange": "pageModeChange"; }, never, never, false, never>;
|
|
410
414
|
}
|
|
411
415
|
|
|
412
416
|
declare class PdfJsViewerModule {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ng2-pdfjs-viewer",
|
|
3
|
-
"version": "25.0.
|
|
3
|
+
"version": "25.0.18",
|
|
4
4
|
"description": "The most comprehensive Angular PDF viewer powered by Mozilla PDF.js. 7M+ downloads, mobile-first, production-ready with complete rewrite in v25.x",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Aneesh Goapalakrishnan",
|
|
@@ -552,6 +552,14 @@
|
|
|
552
552
|
// Set up error event listeners immediately (before document loads)
|
|
553
553
|
setupErrorEventListeners();
|
|
554
554
|
|
|
555
|
+
// Loading state integration for overlay control
|
|
556
|
+
// MUST be set up early (before document loading begins) to catch documentinit/pagesinit events
|
|
557
|
+
// Event-driven only; idempotent notifications, no flags or polling
|
|
558
|
+
app.eventBus.on('documentinit', () => sendStateChangeNotification('loading', true, 'system'));
|
|
559
|
+
app.eventBus.on('pagesinit', () => sendStateChangeNotification('loading', true, 'system'));
|
|
560
|
+
app.eventBus.on('pagerendered', () => sendStateChangeNotification('loading', false, 'system'));
|
|
561
|
+
app.eventBus.on('pagesloaded', () => sendStateChangeNotification('loading', false, 'system'));
|
|
562
|
+
|
|
555
563
|
// Listen for document loaded event
|
|
556
564
|
app.eventBus.on('documentloaded', () => {
|
|
557
565
|
setReadiness(ViewerReadiness.DOCUMENT_LOADED);
|
|
@@ -1786,12 +1794,8 @@
|
|
|
1786
1794
|
}
|
|
1787
1795
|
});
|
|
1788
1796
|
|
|
1789
|
-
// Loading state
|
|
1790
|
-
//
|
|
1791
|
-
app.eventBus.on('documentinit', () => sendStateChangeNotification('loading', true, 'system'));
|
|
1792
|
-
app.eventBus.on('pagesinit', () => sendStateChangeNotification('loading', true, 'system'));
|
|
1793
|
-
app.eventBus.on('pagerendered', () => sendStateChangeNotification('loading', false, 'system'));
|
|
1794
|
-
app.eventBus.on('pagesloaded', () => sendStateChangeNotification('loading', false, 'system'));
|
|
1797
|
+
// Note: Loading state listeners are now set up earlier in setupReadinessEventListeners()
|
|
1798
|
+
// to ensure they catch documentinit/pagesinit events that fire before documentloaded
|
|
1795
1799
|
|
|
1796
1800
|
// New high-value events
|
|
1797
1801
|
|