ngx-doc-viewer 21.0.6 → 22.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-doc-viewer.mjs","sources":["../../../../packages/ngx-doc-viewer/src/lib/document-viewer.component.ts","../../../../packages/ngx-doc-viewer/src/lib/document-viewer.component.html","../../../../packages/ngx-doc-viewer/src/lib/document-viewer.module.ts","../../../../packages/ngx-doc-viewer/src/ngx-doc-viewer.ts"],"sourcesContent":["import {\n Component,\n Input,\n NgZone,\n OnDestroy,\n OnChanges,\n SimpleChanges,\n Output,\n ViewChildren,\n QueryList,\n ElementRef,\n ChangeDetectorRef,\n ContentChild,\n TemplateRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\nimport { EventEmitter } from '@angular/core';\nimport {\n getDocxToHtml,\n getViewerDetails,\n googleCheckSubscription,\n iframeIsLoaded,\n isLocalFile,\n replaceLocalUrl,\n IFrameReloader,\n ViewerRecoveryConfig,\n ViewerRecoveryController,\n} from 'docviewhelper';\n\n \nexport type viewerType = 'google' | 'office' | 'mammoth' | 'pdf' | 'url';\ntype ViewerRenderPhase = 'idle' | 'loading' | 'ready' | 'error';\ninterface ViewerTemplateContext {\n $implicit: ViewerStateContext;\n state: ViewerStateContext;\n}\nexport interface ViewerStateContext {\n viewer: viewerType;\n url: string;\n phase: ViewerRenderPhase;\n errorText: string;\n retry: () => void;\n actionUrl: string;\n}\n@Component({\n selector: 'ngx-doc-viewer',\n standalone: true,\n imports: [CommonModule],\n templateUrl: 'document-viewer.component.html',\n styles: [\n `\n :host {\n display: block;\n }\n .container {\n width: 100%;\n height: 100%;\n position: relative;\n }\n .inline-document-shell {\n width: 100%;\n height: 100%;\n overflow: auto;\n background:\n linear-gradient(180deg, #eef2f7 0%, #f8fafc 100%);\n padding: 24px;\n }\n .inline-document-page {\n max-width: 900px;\n min-height: 100%;\n margin: 0 auto;\n background: #fff;\n border: 1px solid #dbe4f0;\n border-radius: 18px;\n box-shadow:\n 0 18px 40px -24px rgba(15, 23, 42, 0.3),\n 0 6px 18px -10px rgba(15, 23, 42, 0.18);\n padding: 40px 48px;\n }\n .inline-document-page,\n .inline-document-page * {\n box-sizing: border-box;\n }\n .inline-document-page {\n color: #1e293b;\n font-family:\n Georgia, Cambria, 'Times New Roman', Times, serif;\n font-size: 18px;\n line-height: 1.7;\n }\n .inline-document-page p,\n .inline-document-page ul,\n .inline-document-page ol,\n .inline-document-page blockquote,\n .inline-document-page table {\n margin: 0 0 1.1em;\n }\n .inline-document-page h1,\n .inline-document-page h2,\n .inline-document-page h3,\n .inline-document-page h4,\n .inline-document-page h5,\n .inline-document-page h6 {\n margin: 1.4em 0 0.65em;\n color: #0f172a;\n line-height: 1.25;\n }\n .inline-document-page h1:first-child,\n .inline-document-page h2:first-child,\n .inline-document-page h3:first-child,\n .inline-document-page p:first-child {\n margin-top: 0;\n }\n .inline-document-page table {\n width: 100%;\n border-collapse: collapse;\n }\n .inline-document-page td,\n .inline-document-page th {\n padding: 6px 10px;\n vertical-align: top;\n }\n .inline-document-page img {\n max-width: 100%;\n height: auto;\n }\n .inline-document-page hr {\n border: 0;\n border-top: 1px solid #dbe4f0;\n margin: 1.5em 0;\n }\n .loading-overlay {\n position: absolute;\n inset: 0;\n z-index: 1001;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(255, 255, 255, 0.88);\n color: #475569;\n font-size: 14px;\n font-weight: 600;\n letter-spacing: 0.02em;\n text-align: center;\n padding: 16px;\n }\n .error-overlay {\n position: absolute;\n inset: 0;\n z-index: 1001;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(255, 255, 255, 0.94);\n color: #991b1b;\n font-size: 14px;\n font-weight: 600;\n letter-spacing: 0.02em;\n text-align: center;\n padding: 16px;\n }\n .overlay-popout-google {\n width: 40px;\n height: 40px;\n right: 26px;\n top: 11.5px;\n position: absolute;\n z-index: 1000;\n }\n .overlay-popout-office {\n width: 100px;\n height: 20px;\n right: 0;\n bottom: 0;\n position: absolute;\n z-index: 1000;\n }\n .office-reload-btn {\n position: absolute;\n top: 8px;\n right: 8px;\n z-index: 1001;\n width: 32px;\n height: 32px;\n border-radius: 50%;\n border: 1px solid rgba(0, 0, 0, 0.12);\n background: rgba(255, 255, 255, 0.85);\n color: #475569;\n font-size: 16px;\n line-height: 1;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0.5;\n transition: opacity 0.15s;\n padding: 0;\n }\n .office-reload-btn:hover {\n opacity: 1;\n }\n .overlay-full {\n width: 100%;\n height: 100%;\n right: 0;\n top: 0;\n position: absolute;\n z-index: 1000;\n }\n iframe {\n width: 100%;\n height: 100%;\n }\n @media (max-width: 768px) {\n .inline-document-shell {\n padding: 12px;\n }\n .inline-document-page {\n border-radius: 12px;\n padding: 22px 18px;\n }\n }\n `,\n ],\n})\nexport class NgxDocViewerComponent\n implements OnChanges, OnDestroy\n{\n @Output() loaded: EventEmitter<void> = new EventEmitter();\n @Output() loading: EventEmitter<ViewerStateContext> = new EventEmitter();\n @Output() error: EventEmitter<ViewerStateContext> = new EventEmitter();\n @Output() phaseChange: EventEmitter<ViewerStateContext> = new EventEmitter();\n @Input() url = '';\n @Input() queryParams = '';\n @Input() viewerUrl = '';\n @Input() googleCheckInterval = 3000;\n @Input() googleMaxChecks = 5;\n @Input() googleFinalRetryDelay = 0;\n @Input() disableContent: 'none' | 'all' | 'popout' | 'popout-hide' = 'none';\n @Input() googleCheckContentLoaded = true;\n @Input() viewer: viewerType = 'google';\n @Input() overrideLocalhost = '';\n @Input() loadingText = 'Loading document...';\n @Input() errorTextOverride = '';\n @Input() retryButtonText = 'Retry';\n @Input() officeAutoRetry = false;\n @Input() officeRetryDelay = 3000;\n @Input() officeReloadButtonText = '↻';\n @Input() officeReloadButtonTitle = 'Reload document';\n @Input() secondaryActionText = '';\n @Input() secondaryActionMode: 'open' | 'download' = 'open';\n @ContentChild('loadingContent', { read: TemplateRef })\n loadingTemplate?: TemplateRef<unknown>;\n @ContentChild('errorContent', { read: TemplateRef })\n errorTemplate?: TemplateRef<unknown>;\n @ContentChild('errorActions', { read: TemplateRef })\n errorActionsTemplate?: TemplateRef<unknown>;\n @ContentChild('officeReloadContent', { read: TemplateRef })\n officeReloadTemplate?: TemplateRef<unknown>;\n @ViewChildren('iframe') iframes?: QueryList<ElementRef> = undefined;\n\n public fullUrl?: SafeResourceUrl = undefined;\n public externalViewer = false;\n public docHtml = '';\n public configuredViewer: viewerType = 'google';\n public showIframe = true;\n public renderPhase: ViewerRenderPhase = 'idle';\n public errorText = '';\n public failedUrl = '';\n public retryNonce = 0;\n public loadingTemplateContext: ViewerTemplateContext = this.createTemplateContext();\n public errorTemplateContext: ViewerTemplateContext = this.createTemplateContext();\n private checkIFrameSubscription?: IFrameReloader = undefined;\n private loadVersion = 0;\n private recovery?: ViewerRecoveryController = undefined;\n private lastEmittedPhase?: ViewerRenderPhase = undefined;\n\n constructor(\n private domSanitizer: DomSanitizer,\n private ngZone: NgZone,\n private cdr: ChangeDetectorRef,\n ) {}\n\n ngOnDestroy(): void {\n this.recovery?.dispose();\n if (this.checkIFrameSubscription) {\n this.checkIFrameSubscription.unsubscribe();\n }\n }\n\n async ngOnChanges(changes: SimpleChanges): Promise<void> {\n if (\n changes &&\n changes['retryNonce'] &&\n changes['retryNonce'].firstChange\n ) {\n return;\n }\n if (\n changes &&\n changes['viewer'] &&\n (changes['viewer'].firstChange ||\n changes['viewer'].currentValue !== changes['viewer'].previousValue)\n ) {\n if (\n this.viewer !== 'google' &&\n this.viewer !== 'office' &&\n this.viewer !== 'mammoth' &&\n this.viewer !== 'pdf' &&\n this.viewer !== 'url'\n ) {\n console.error(\n `Unsupported viewer: '${this.viewer}'. Supported viewers: google, office, mammoth and pdf`,\n );\n }\n this.configuredViewer = this.viewer;\n this.updateTemplateContexts();\n }\n\n if (\n (changes['url'] &&\n changes['url'].currentValue !== changes['url'].previousValue) ||\n (changes['viewer'] &&\n changes['viewer'].currentValue !== changes['viewer'].previousValue) ||\n (changes['viewerUrl'] &&\n changes['viewerUrl'].currentValue !==\n changes['viewerUrl'].previousValue)\n ) {\n let viewerDetails = getViewerDetails(\n this.url,\n this.configuredViewer,\n this.queryParams,\n this.viewerUrl,\n );\n const loadVersion = ++this.loadVersion;\n const recovery = this.ensureRecovery();\n recovery.clearTimers();\n this.externalViewer = viewerDetails.externalViewer;\n if (\n viewerDetails.externalViewer &&\n this.overrideLocalhost &&\n isLocalFile(this.url)\n ) {\n const newUrl = replaceLocalUrl(this.url, this.overrideLocalhost);\n viewerDetails = getViewerDetails(\n newUrl,\n this.configuredViewer,\n this.queryParams,\n this.viewerUrl,\n );\n }\n recovery.trackSource(viewerDetails.url);\n this.docHtml = '';\n this.errorText = '';\n this.failedUrl = this.url;\n this.updateTemplateContexts();\n if (this.checkIFrameSubscription) {\n this.checkIFrameSubscription.unsubscribe();\n }\n if (!this.url) {\n this.fullUrl = undefined;\n this.showIframe = false;\n this.externalViewer = false;\n this.setRenderPhase('idle');\n this.updateTemplateContexts();\n } else if (\n viewerDetails.externalViewer ||\n this.configuredViewer === 'url' ||\n this.configuredViewer === 'pdf'\n ) {\n this.setRenderPhase('loading');\n const iframeUrl = this.domSanitizer.bypassSecurityTrustResourceUrl(\n viewerDetails.url,\n );\n this.fullUrl = undefined;\n this.showIframe = false;\n this.cdr.detectChanges();\n this.fullUrl = iframeUrl;\n this.showIframe = true;\n this.updateTemplateContexts();\n const plan = recovery.beginExternalLoad(\n () => loadVersion === this.loadVersion,\n );\n this.cdr.detectChanges();\n if (plan.modes.includes('google-probe')) {\n this.scheduleGoogleProbe();\n }\n } else if (this.configuredViewer === 'mammoth') {\n this.setRenderPhase('loading');\n this.externalViewer = false;\n this.fullUrl = undefined;\n this.showIframe = false;\n try {\n const docHtml = await getDocxToHtml(this.url);\n if (loadVersion !== this.loadVersion) {\n return;\n }\n this.ngZone.run(() => {\n this.docHtml = docHtml;\n this.setRenderPhase('ready');\n this.updateTemplateContexts();\n this.cdr.detectChanges();\n });\n } catch (error) {\n if (loadVersion !== this.loadVersion) {\n return;\n }\n this.ngZone.run(() => {\n this.errorText =\n error instanceof Error ? error.message : 'Unable to load document.';\n this.setRenderPhase('error');\n this.updateTemplateContexts();\n this.cdr.detectChanges();\n });\n }\n }\n }\n }\n\n retryLoad() {\n this.retryNonce += 1;\n const retryVersion = ++this.loadVersion;\n const recovery = this.ensureRecovery();\n recovery.clearTimers();\n this.errorText = '';\n this.setRenderPhase(this.url ? 'loading' : 'idle');\n this.updateTemplateContexts();\n\n if (!this.url) {\n return;\n }\n\n if (this.configuredViewer === 'mammoth') {\n this.docHtml = '';\n void this.reloadMammoth(retryVersion);\n return;\n }\n\n if (\n this.configuredViewer === 'google' ||\n this.configuredViewer === 'office' ||\n this.configuredViewer === 'url' ||\n this.configuredViewer === 'pdf'\n ) {\n const details = getViewerDetails(\n this.url,\n this.configuredViewer,\n this.queryParams,\n this.viewerUrl,\n );\n const finalUrl =\n details.externalViewer && this.overrideLocalhost && isLocalFile(this.url)\n ? getViewerDetails(\n replaceLocalUrl(this.url, this.overrideLocalhost),\n this.configuredViewer,\n this.queryParams,\n this.viewerUrl,\n ).url\n : details.url;\n\n this.fullUrl = undefined;\n this.showIframe = false;\n this.cdr.detectChanges();\n this.fullUrl =\n this.domSanitizer.bypassSecurityTrustResourceUrl(finalUrl);\n this.showIframe = true;\n const plan = recovery.beginExternalLoad(\n () => retryVersion === this.loadVersion,\n );\n if (plan.modes.includes('google-probe')) {\n this.scheduleGoogleProbe();\n }\n this.updateTemplateContexts();\n this.cdr.detectChanges();\n }\n }\n\n private reloadIframe(iframe: HTMLIFrameElement) {\n this.checkIFrameSubscription = googleCheckSubscription();\n this.checkIFrameSubscription.subscribe(\n iframe,\n this.googleCheckInterval,\n this.googleMaxChecks,\n );\n }\n\n private ensureRecovery(): ViewerRecoveryController {\n if (!this.recovery) {\n this.recovery = new ViewerRecoveryController(this.buildRecoveryConfig(), {\n triggerRetry: () => this.ngZone.run(() => this.retryLoad()),\n reportTimeout: () =>\n this.ngZone.run(() => {\n if (this.renderPhase !== 'loading') {\n return;\n }\n this.errorText = `The ${this.configuredViewer} viewer did not finish loading in time.`;\n this.setRenderPhase('error');\n this.updateTemplateContexts();\n this.cdr.detectChanges();\n }),\n });\n }\n this.recovery.configure(this.buildRecoveryConfig());\n return this.recovery;\n }\n\n private buildRecoveryConfig(): ViewerRecoveryConfig {\n return {\n viewer: this.configuredViewer,\n googleCheckContentLoaded: this.googleCheckContentLoaded,\n googleCheckInterval: this.googleCheckInterval,\n googleMaxChecks: this.googleMaxChecks,\n googleFinalRetryDelay: this.googleFinalRetryDelay,\n officeAutoRetry: this.officeAutoRetry,\n officeRetryDelay: this.officeRetryDelay,\n };\n }\n\n private scheduleGoogleProbe() {\n // see:\n // https://stackoverflow.com/questions/40414039/google-docs-viewer-returning-204-responses-no-longer-working-alternatives\n // hack to reload iframe if it's not loaded.\n this.ngZone.runOutsideAngular(() => {\n window.setTimeout(() => {\n const iframe = this.iframes?.first?.nativeElement as HTMLIFrameElement;\n if (iframe) {\n this.reloadIframe(iframe);\n }\n }, 0);\n });\n }\n\n iframeLoaded() {\n const iframe = this.iframes?.first?.nativeElement as HTMLIFrameElement;\n if (iframe && iframeIsLoaded(iframe)) {\n this.recovery?.notifyLoaded();\n this.setRenderPhase('ready');\n this.updateTemplateContexts();\n this.loaded.emit(undefined);\n if (this.checkIFrameSubscription) {\n this.checkIFrameSubscription.unsubscribe();\n }\n }\n }\n\n objectLoaded() {\n this.recovery?.notifyLoaded();\n this.setRenderPhase('ready');\n this.updateTemplateContexts();\n }\n\n private async reloadMammoth(loadVersion: number) {\n this.externalViewer = false;\n this.fullUrl = undefined;\n this.showIframe = false;\n try {\n const docHtml = await getDocxToHtml(this.url);\n if (loadVersion !== this.loadVersion) {\n return;\n }\n this.ngZone.run(() => {\n this.docHtml = docHtml;\n this.setRenderPhase('ready');\n this.updateTemplateContexts();\n this.cdr.detectChanges();\n });\n } catch (error) {\n if (loadVersion !== this.loadVersion) {\n return;\n }\n this.ngZone.run(() => {\n this.errorText =\n error instanceof Error ? error.message : 'Unable to load document.';\n this.setRenderPhase('error');\n this.updateTemplateContexts();\n this.cdr.detectChanges();\n });\n }\n }\n\n get displayedErrorText() {\n return this.errorTextOverride || this.errorText || 'Unable to load document.';\n }\n\n private updateTemplateContexts() {\n const state = this.createStateContext();\n this.loadingTemplateContext = { $implicit: state, state };\n this.errorTemplateContext = { $implicit: state, state };\n }\n\n private createTemplateContext(): ViewerTemplateContext {\n const state = this.createStateContext();\n return { $implicit: state, state };\n }\n\n private createStateContext(): ViewerStateContext {\n return {\n viewer: this.configuredViewer,\n url: this.failedUrl || this.url,\n phase: this.renderPhase,\n errorText: this.displayedErrorText,\n retry: () => this.retryLoad(),\n actionUrl: this.failedUrl || this.url,\n };\n }\n\n private setRenderPhase(phase: ViewerRenderPhase) {\n this.renderPhase = phase;\n this.emitLifecycleIfNeeded();\n }\n\n private emitLifecycleIfNeeded() {\n if (this.lastEmittedPhase === this.renderPhase) {\n return;\n }\n this.lastEmittedPhase = this.renderPhase;\n const state = this.createStateContext();\n this.phaseChange.emit(state);\n if (this.renderPhase === 'loading') {\n this.loading.emit(state);\n }\n if (this.renderPhase === 'error') {\n this.error.emit(state);\n }\n }\n}\n","<div class=\"container\">\n <div *ngIf=\"renderPhase === 'loading'\" class=\"loading-overlay\">\n <ng-container *ngIf=\"loadingTemplate; else defaultLoadingTemplate\">\n <ng-container *ngTemplateOutlet=\"loadingTemplate; context: loadingTemplateContext\"></ng-container>\n </ng-container>\n <ng-template #defaultLoadingTemplate>{{ loadingText }}</ng-template>\n </div>\n <div *ngIf=\"renderPhase === 'error'\" class=\"error-overlay\">\n <ng-container *ngIf=\"errorTemplate; else defaultErrorTemplate\">\n <ng-container *ngTemplateOutlet=\"errorTemplate; context: errorTemplateContext\"></ng-container>\n </ng-container>\n <ng-template #defaultErrorTemplate>\n <div>\n <div>{{ displayedErrorText }}</div>\n <div *ngIf=\"configuredViewer\" style=\"margin-top: 8px; color: #475569;\">\n Viewer: {{ configuredViewer }}\n </div>\n <div *ngIf=\"failedUrl\" style=\"margin-top: 4px; color: #64748b; font-size: 12px; word-break: break-word;\">\n {{ failedUrl }}\n </div>\n <ng-container *ngIf=\"errorActionsTemplate; else defaultErrorActions\">\n <ng-container *ngTemplateOutlet=\"errorActionsTemplate; context: errorTemplateContext\"></ng-container>\n </ng-container>\n <ng-template #defaultErrorActions>\n <div style=\"margin-top: 14px; display: flex; gap: 8px; justify-content: center; flex-wrap: wrap;\">\n <button\n type=\"button\"\n (click)=\"retryLoad()\"\n style=\"border: 1px solid #fecaca; background: #fff; color: #991b1b; border-radius: 999px; padding: 8px 14px; font: inherit; cursor: pointer;\"\n >\n {{ retryButtonText }}\n </button>\n <a\n *ngIf=\"secondaryActionText && failedUrl\"\n [href]=\"failedUrl\"\n [attr.target]=\"secondaryActionMode === 'open' ? '_blank' : null\"\n [attr.rel]=\"secondaryActionMode === 'open' ? 'noreferrer' : null\"\n [attr.download]=\"secondaryActionMode === 'download' ? '' : null\"\n style=\"border: 1px solid #cbd5e1; background: #fff; color: #334155; border-radius: 999px; padding: 8px 14px; text-decoration: none; font: inherit;\"\n >\n {{ secondaryActionText }}\n </a>\n </div>\n </ng-template>\n </div>\n </ng-template>\n </div>\n\n <ng-container *ngIf=\"!externalViewer\">\n <div *ngIf=\"configuredViewer !== 'pdf'\" class=\"inline-document-shell\">\n <div class=\"inline-document-page\" [innerHTML]=\"docHtml\"></div>\n </div>\n <object\n (load)=\"objectLoaded()\"\n *ngIf=\"fullUrl && configuredViewer === 'pdf'\"\n [data]=\"fullUrl\"\n type=\"application/pdf\"\n width=\"100%\"\n height=\"100%\"\n >\n <p>\n Your browser does not support PDFs.\n <a [href]=\"fullUrl\">Download the PDF</a>.\n </p>\n </object>\n </ng-container>\n\n <button\n *ngIf=\"configuredViewer === 'office' && renderPhase === 'ready'\"\n class=\"office-reload-btn\"\n type=\"button\"\n [attr.title]=\"officeReloadButtonTitle\"\n (click)=\"retryLoad()\"\n >\n <ng-container *ngIf=\"officeReloadTemplate; else defaultOfficeReloadTemplate\">\n <ng-container *ngTemplateOutlet=\"officeReloadTemplate; context: errorTemplateContext\"></ng-container>\n </ng-container>\n <ng-template #defaultOfficeReloadTemplate>{{ officeReloadButtonText }}</ng-template>\n </button>\n\n <ng-container *ngIf=\"externalViewer\">\n <iframe\n (load)=\"iframeLoaded()\"\n *ngIf=\"fullUrl && showIframe && disableContent === 'none'\"\n #iframe\n id=\"iframe-doc-viewer\"\n frameBorder=\"0\"\n allow=\"clipboard-read; clipboard-write\"\n [src]=\"fullUrl\"\n ></iframe>\n <div class=\"container\" *ngIf=\"disableContent !== 'none'\">\n <div\n [class.overlay-full]=\"disableContent === 'all'\"\n [class.overlay-popout-google]=\"\n configuredViewer === 'google' &&\n (disableContent === 'popout' || disableContent === 'popout-hide')\n \"\n [class.overlay-popout-office]=\"\n configuredViewer === 'office' &&\n (disableContent === 'popout' || disableContent === 'popout-hide')\n \"\n [style.background-color]=\"\n disableContent === 'popout-hide' ? '#fff' : 'transparent'\n \"\n ></div>\n <iframe\n (load)=\"iframeLoaded()\"\n *ngIf=\"fullUrl && showIframe\"\n #iframe\n id=\"iframe\"\n frameBorder=\"0\"\n allow=\"clipboard-read; clipboard-write\"\n [src]=\"fullUrl\"\n ></iframe>\n </div>\n </ng-container>\n</div>\n","import { NgxDocViewerComponent } from './document-viewer.component';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule, NgxDocViewerComponent],\n exports: [NgxDocViewerComponent],\n})\nexport class NgxDocViewerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngx-doc-viewer.mjs","names":[],"sources":["../../../../packages/ngx-doc-viewer/src/lib/document-viewer.component.ts","../../../../packages/ngx-doc-viewer/src/lib/document-viewer.component.html","../../../../packages/ngx-doc-viewer/src/lib/document-viewer.module.ts"],"sourcesContent":["import {\n AfterRenderRef,\n Component,\n ElementRef,\n Injector,\n NgZone,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n TemplateRef,\n afterNextRender,\n computed,\n contentChild,\n inject,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\nimport {\n DisableContent,\n IFrameReloader,\n ViewerRecoveryConfig,\n ViewerRecoveryController,\n ViewerRenderPhase,\n ViewerType,\n getDisableContentOverlay,\n getDocxToHtml,\n googleCheckSubscription,\n iframeIsLoaded,\n resolveViewerDetails,\n} from 'docviewhelper';\n\n/** @deprecated Use `ViewerType` instead. */\nexport type viewerType = ViewerType;\ninterface ViewerTemplateContext {\n $implicit: ViewerStateContext;\n state: ViewerStateContext;\n}\nexport interface ViewerStateContext {\n viewer: ViewerType;\n url: string;\n phase: ViewerRenderPhase;\n errorText: string;\n retry: () => void;\n actionUrl: string;\n}\n\nconst SUPPORTED_VIEWERS: ViewerType[] = ['google', 'office', 'mammoth', 'pdf', 'url'];\n// Inputs that change which document is shown; any of them starts a new load.\nconst SOURCE_INPUTS = ['url', 'viewer', 'viewerUrl', 'queryParams', 'overrideLocalhost'];\n\n@Component({\n selector: 'ngx-doc-viewer',\n standalone: true,\n imports: [NgTemplateOutlet],\n templateUrl: 'document-viewer.component.html',\n styles: [\n `\n :host {\n display: block;\n }\n .container {\n width: 100%;\n height: 100%;\n position: relative;\n }\n .inline-document-shell {\n width: 100%;\n height: 100%;\n overflow: auto;\n background:\n linear-gradient(180deg, #eef2f7 0%, #f8fafc 100%);\n padding: 24px;\n }\n .inline-document-page {\n max-width: 900px;\n min-height: 100%;\n margin: 0 auto;\n background: #fff;\n border: 1px solid #dbe4f0;\n border-radius: 18px;\n box-shadow:\n 0 18px 40px -24px rgba(15, 23, 42, 0.3),\n 0 6px 18px -10px rgba(15, 23, 42, 0.18);\n padding: 40px 48px;\n }\n .inline-document-page,\n .inline-document-page * {\n box-sizing: border-box;\n }\n .inline-document-page {\n color: #1e293b;\n font-family:\n Georgia, Cambria, 'Times New Roman', Times, serif;\n font-size: 18px;\n line-height: 1.7;\n }\n .inline-document-page p,\n .inline-document-page ul,\n .inline-document-page ol,\n .inline-document-page blockquote,\n .inline-document-page table {\n margin: 0 0 1.1em;\n }\n .inline-document-page h1,\n .inline-document-page h2,\n .inline-document-page h3,\n .inline-document-page h4,\n .inline-document-page h5,\n .inline-document-page h6 {\n margin: 1.4em 0 0.65em;\n color: #0f172a;\n line-height: 1.25;\n }\n .inline-document-page h1:first-child,\n .inline-document-page h2:first-child,\n .inline-document-page h3:first-child,\n .inline-document-page p:first-child {\n margin-top: 0;\n }\n .inline-document-page table {\n width: 100%;\n border-collapse: collapse;\n }\n .inline-document-page td,\n .inline-document-page th {\n padding: 6px 10px;\n vertical-align: top;\n }\n .inline-document-page img {\n max-width: 100%;\n height: auto;\n }\n .inline-document-page hr {\n border: 0;\n border-top: 1px solid #dbe4f0;\n margin: 1.5em 0;\n }\n .loading-overlay {\n position: absolute;\n inset: 0;\n z-index: 1001;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(255, 255, 255, 0.88);\n color: #475569;\n font-size: 14px;\n font-weight: 600;\n letter-spacing: 0.02em;\n text-align: center;\n padding: 16px;\n }\n .error-overlay {\n position: absolute;\n inset: 0;\n z-index: 1001;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(255, 255, 255, 0.94);\n color: #991b1b;\n font-size: 14px;\n font-weight: 600;\n letter-spacing: 0.02em;\n text-align: center;\n padding: 16px;\n }\n .error-viewer {\n margin-top: 8px;\n color: #475569;\n }\n .error-url {\n margin-top: 4px;\n color: #64748b;\n font-size: 12px;\n word-break: break-word;\n }\n .error-actions {\n margin-top: 14px;\n display: flex;\n gap: 8px;\n justify-content: center;\n flex-wrap: wrap;\n }\n .retry-btn {\n border: 1px solid #fecaca;\n background: #fff;\n color: #991b1b;\n border-radius: 999px;\n padding: 8px 14px;\n font: inherit;\n cursor: pointer;\n }\n .secondary-action-btn {\n border: 1px solid #cbd5e1;\n background: #fff;\n color: #334155;\n border-radius: 999px;\n padding: 8px 14px;\n text-decoration: none;\n font: inherit;\n }\n .overlay {\n position: absolute;\n z-index: 1000;\n }\n .overlay-popout-google {\n width: 40px;\n height: 40px;\n right: 26px;\n top: 11.5px;\n }\n .overlay-popout-office {\n width: 100px;\n height: 20px;\n right: 0;\n bottom: 0;\n }\n .overlay-full {\n width: 100%;\n height: 100%;\n right: 0;\n top: 0;\n }\n .office-reload-btn {\n position: absolute;\n top: 8px;\n right: 8px;\n z-index: 1001;\n width: 32px;\n height: 32px;\n border-radius: 50%;\n border: 1px solid rgba(0, 0, 0, 0.12);\n background: rgba(255, 255, 255, 0.85);\n color: #475569;\n font-size: 16px;\n line-height: 1;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0.5;\n transition: opacity 0.15s;\n padding: 0;\n }\n .office-reload-btn:hover {\n opacity: 1;\n }\n iframe,\n object {\n display: block;\n width: 100%;\n height: 100%;\n }\n @media (max-width: 768px) {\n .inline-document-shell {\n padding: 12px;\n }\n .inline-document-page {\n border-radius: 12px;\n padding: 22px 18px;\n }\n }\n `,\n ],\n})\nexport class NgxDocViewerComponent implements OnChanges, OnDestroy {\n private readonly domSanitizer = inject(DomSanitizer);\n private readonly ngZone = inject(NgZone);\n private readonly injector = inject(Injector);\n\n readonly loaded = output<void>();\n readonly loading = output<ViewerStateContext>();\n // eslint-disable-next-line @angular-eslint/no-output-native -- public API since v21\n readonly error = output<ViewerStateContext>();\n readonly phaseChange = output<ViewerStateContext>();\n\n readonly url = input('');\n readonly queryParams = input('');\n readonly viewerUrl = input('');\n readonly googleCheckInterval = input(3000);\n readonly googleMaxChecks = input(5);\n readonly googleFinalRetryDelay = input(0);\n readonly disableContent = input<DisableContent>('none');\n readonly googleCheckContentLoaded = input(true);\n readonly viewer = input<ViewerType>('google');\n readonly overrideLocalhost = input('');\n readonly loadingText = input('Loading document...');\n readonly errorTextOverride = input('');\n readonly retryButtonText = input('Retry');\n readonly officeAutoRetry = input(false);\n readonly officeRetryDelay = input(3000);\n readonly officeReloadButtonText = input('↻');\n readonly officeReloadButtonTitle = input('Reload document');\n readonly secondaryActionText = input('');\n readonly secondaryActionMode = input<'open' | 'download'>('open');\n\n readonly loadingTemplate = contentChild('loadingContent', { read: TemplateRef });\n readonly errorTemplate = contentChild('errorContent', { read: TemplateRef });\n readonly errorActionsTemplate = contentChild('errorActions', { read: TemplateRef });\n readonly officeReloadTemplate = contentChild('officeReloadContent', {\n read: TemplateRef,\n });\n private readonly iframe = viewChild<ElementRef<HTMLIFrameElement>>('iframe');\n\n readonly renderPhase = signal<ViewerRenderPhase>('idle');\n readonly externalViewer = signal(false);\n readonly fullUrl = signal<SafeResourceUrl | undefined>(undefined);\n readonly docHtml = signal('');\n readonly errorText = signal('');\n readonly sourceUrl = signal('');\n // A new key per load remounts the iframe/object so it loads (and fires load) again.\n private readonly loadKey = signal(0);\n readonly loadKeys = computed(() => (this.fullUrl() ? [this.loadKey()] : []));\n readonly displayedErrorText = computed(\n () => this.errorTextOverride() || this.errorText() || 'Unable to load document.',\n );\n readonly overlayClass = computed(() => {\n const overlay = getDisableContentOverlay(this.viewer(), this.disableContent());\n return overlay ? `overlay overlay-${overlay}` : undefined;\n });\n readonly templateContext = computed<ViewerTemplateContext>(() => {\n const state: ViewerStateContext = {\n viewer: this.viewer(),\n url: this.sourceUrl() || this.url(),\n phase: this.renderPhase(),\n errorText: this.displayedErrorText(),\n retry: () => this.retryLoad(),\n actionUrl: this.sourceUrl() || this.url(),\n };\n return { $implicit: state, state };\n });\n\n private checkIFrameSubscription?: IFrameReloader = undefined;\n private googleProbe?: AfterRenderRef = undefined;\n private recovery?: ViewerRecoveryController = undefined;\n private lastEmittedPhase?: ViewerRenderPhase = undefined;\n\n ngOnDestroy(): void {\n this.recovery?.dispose();\n this.stopGoogleProbe();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['viewer'] && !SUPPORTED_VIEWERS.includes(this.viewer())) {\n console.error(\n `Unsupported viewer: '${this.viewer()}'. Supported viewers: ${SUPPORTED_VIEWERS.join(', ')}`,\n );\n }\n if (\n SOURCE_INPUTS.some(\n (name) =>\n changes[name] &&\n changes[name].currentValue !== changes[name].previousValue,\n )\n ) {\n this.load();\n }\n }\n\n retryLoad() {\n this.load();\n }\n\n iframeLoaded() {\n const iframe = this.iframe()?.nativeElement;\n if (iframe && iframeIsLoaded(iframe)) {\n this.recovery?.notifyLoaded();\n this.checkIFrameSubscription?.unsubscribe();\n this.setRenderPhase('ready');\n }\n }\n\n objectLoaded() {\n this.recovery?.notifyLoaded();\n this.setRenderPhase('ready');\n }\n\n private load() {\n const loadKey = this.loadKey() + 1;\n const isActive = () => loadKey === this.loadKey();\n this.loadKey.set(loadKey);\n const recovery = this.ensureRecovery();\n this.stopGoogleProbe();\n\n const url = this.url();\n const viewer = this.viewer();\n const details = resolveViewerDetails({\n url,\n viewer,\n queryParams: this.queryParams(),\n viewerUrl: this.viewerUrl(),\n overrideLocalhost: this.overrideLocalhost(),\n });\n recovery.trackSource(details.url);\n this.externalViewer.set(!!url && details.externalViewer);\n this.fullUrl.set(undefined);\n this.docHtml.set('');\n this.errorText.set('');\n this.sourceUrl.set(url);\n\n if (!url) {\n recovery.clearTimers();\n this.setRenderPhase('idle');\n return;\n }\n this.setRenderPhase('loading');\n\n if (viewer === 'mammoth') {\n recovery.beginInlineLoad(isActive);\n getDocxToHtml(details.url).then(\n (html) => {\n if (!isActive()) {\n return;\n }\n recovery.notifyLoaded();\n this.docHtml.set(html);\n this.setRenderPhase('ready');\n },\n (error) => {\n if (!isActive()) {\n return;\n }\n recovery.clearTimers();\n this.errorText.set(\n error instanceof Error ? error.message : 'Unable to load document.',\n );\n this.setRenderPhase('error');\n },\n );\n return;\n }\n\n this.fullUrl.set(this.domSanitizer.bypassSecurityTrustResourceUrl(details.url));\n const plan = recovery.beginExternalLoad(isActive);\n if (plan.modes.includes('google-probe')) {\n this.startGoogleProbe(isActive);\n }\n }\n\n private ensureRecovery(): ViewerRecoveryController {\n if (!this.recovery) {\n this.recovery = new ViewerRecoveryController(this.buildRecoveryConfig(), {\n triggerRetry: () => this.retryLoad(),\n reportTimeout: () => {\n if (this.renderPhase() !== 'loading') {\n return;\n }\n this.errorText.set(\n `The ${this.viewer()} viewer did not finish loading in time.`,\n );\n this.setRenderPhase('error');\n },\n });\n }\n this.recovery.configure(this.buildRecoveryConfig());\n return this.recovery;\n }\n\n private buildRecoveryConfig(): ViewerRecoveryConfig {\n return {\n viewer: this.viewer(),\n googleCheckContentLoaded: this.googleCheckContentLoaded(),\n googleCheckInterval: this.googleCheckInterval(),\n googleMaxChecks: this.googleMaxChecks(),\n googleFinalRetryDelay: this.googleFinalRetryDelay(),\n officeAutoRetry: this.officeAutoRetry(),\n officeRetryDelay: this.officeRetryDelay(),\n };\n }\n\n // Google sometimes answers with an empty 204 page; reload the iframe until the\n // viewer shows up. Starts once the iframe for this load has been rendered.\n // see: https://stackoverflow.com/questions/40414039/google-docs-viewer-returning-204-responses-no-longer-working-alternatives\n private startGoogleProbe(isActive: () => boolean) {\n this.googleProbe = afterNextRender(\n () => {\n this.googleProbe = undefined;\n const iframe = this.iframe()?.nativeElement;\n if (!isActive() || !iframe) {\n return;\n }\n this.checkIFrameSubscription = googleCheckSubscription();\n this.ngZone.runOutsideAngular(() =>\n this.checkIFrameSubscription?.subscribe(\n iframe,\n this.googleCheckInterval(),\n this.googleMaxChecks(),\n ),\n );\n },\n { injector: this.injector },\n );\n }\n\n private stopGoogleProbe() {\n this.googleProbe?.destroy();\n this.googleProbe = undefined;\n this.checkIFrameSubscription?.unsubscribe();\n this.checkIFrameSubscription = undefined;\n }\n\n private setRenderPhase(phase: ViewerRenderPhase) {\n this.renderPhase.set(phase);\n if (this.lastEmittedPhase === phase) {\n return;\n }\n this.lastEmittedPhase = phase;\n const { state } = this.templateContext();\n this.phaseChange.emit(state);\n if (phase === 'loading') {\n this.loading.emit(state);\n }\n if (phase === 'error') {\n this.error.emit(state);\n }\n if (phase === 'ready') {\n this.loaded.emit();\n }\n }\n}\n","<div class=\"container\">\n @if (renderPhase() === 'loading') {\n <div class=\"loading-overlay\">\n @if (loadingTemplate(); as template) {\n <ng-container *ngTemplateOutlet=\"template; context: templateContext()\" />\n } @else {\n {{ loadingText() }}\n }\n </div>\n }\n @if (renderPhase() === 'error') {\n <div class=\"error-overlay\">\n @if (errorTemplate(); as template) {\n <ng-container *ngTemplateOutlet=\"template; context: templateContext()\" />\n } @else {\n <div>\n <div>{{ displayedErrorText() }}</div>\n <div class=\"error-viewer\">Viewer: {{ viewer() }}</div>\n @if (sourceUrl()) {\n <div class=\"error-url\">{{ sourceUrl() }}</div>\n }\n @if (errorActionsTemplate(); as template) {\n <ng-container *ngTemplateOutlet=\"template; context: templateContext()\" />\n } @else {\n <div class=\"error-actions\">\n <button type=\"button\" class=\"retry-btn\" (click)=\"retryLoad()\">\n {{ retryButtonText() }}\n </button>\n @if (secondaryActionText() && sourceUrl()) {\n <a\n class=\"secondary-action-btn\"\n [href]=\"sourceUrl()\"\n [attr.target]=\"secondaryActionMode() === 'open' ? '_blank' : null\"\n [attr.rel]=\"secondaryActionMode() === 'open' ? 'noreferrer' : null\"\n [attr.download]=\"secondaryActionMode() === 'download' ? '' : null\"\n >\n {{ secondaryActionText() }}\n </a>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n\n @if (externalViewer()) {\n @for (key of loadKeys(); track key) {\n <iframe\n #iframe\n class=\"ngx-doc-viewer-iframe\"\n title=\"Document viewer\"\n frameBorder=\"0\"\n allow=\"clipboard-read; clipboard-write\"\n [src]=\"fullUrl()\"\n (load)=\"iframeLoaded()\"\n ></iframe>\n }\n @if (overlayClass(); as overlay) {\n <div\n [class]=\"overlay\"\n [style.background-color]=\"disableContent() === 'popout-hide' ? '#fff' : 'transparent'\"\n ></div>\n }\n } @else if (viewer() === 'pdf') {\n @for (key of loadKeys(); track key) {\n <object\n class=\"ngx-doc-viewer-object\"\n type=\"application/pdf\"\n width=\"100%\"\n height=\"100%\"\n [data]=\"fullUrl()\"\n (load)=\"objectLoaded()\"\n >\n <p>\n Your browser does not support PDFs.\n <a [href]=\"fullUrl()\">Download the PDF</a>.\n </p>\n </object>\n }\n } @else {\n <div class=\"inline-document-shell\">\n <div class=\"inline-document-page\" [innerHTML]=\"docHtml()\"></div>\n </div>\n }\n\n @if (viewer() === 'office' && renderPhase() === 'ready') {\n <button\n class=\"office-reload-btn\"\n type=\"button\"\n [attr.title]=\"officeReloadButtonTitle()\"\n (click)=\"retryLoad()\"\n >\n @if (officeReloadTemplate(); as template) {\n <ng-container *ngTemplateOutlet=\"template; context: templateContext()\" />\n } @else {\n {{ officeReloadButtonText() }}\n }\n </button>\n }\n</div>\n","import { NgxDocViewerComponent } from './document-viewer.component';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule, NgxDocViewerComponent],\n exports: [NgxDocViewerComponent],\n})\nexport class NgxDocViewerModule {}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-doc-viewer",
3
- "version": "21.0.6",
3
+ "version": "22.0.0",
4
4
  "private": false,
5
5
  "license": "MIT",
6
6
  "description": "Angular document viewer.",
@@ -21,9 +21,9 @@
21
21
  ],
22
22
  "homepage": "https://github.com/Marcelh1983/document-viewer/tree/main/packages/ngx-doc-viewer",
23
23
  "peerDependencies": {
24
- "@angular/core": ">= 15.0.0",
25
- "@angular/platform-browser": ">= 15.0.0",
26
- "@angular/common": ">= 15.0.0"
24
+ "@angular/core": ">= 17.3.0",
25
+ "@angular/platform-browser": ">= 17.3.0",
26
+ "@angular/common": ">= 17.3.0"
27
27
  },
28
28
  "main": "./fesm2022/ngx-doc-viewer.mjs",
29
29
  "module": "./fesm2022/ngx-doc-viewer.mjs",
@@ -35,6 +35,6 @@
35
35
  }
36
36
  },
37
37
  "dependencies": {
38
- "docviewhelper": "0.1.6"
38
+ "docviewhelper": "0.2.0"
39
39
  }
40
40
  }
@@ -1,96 +1,187 @@
1
- import * as i0 from '@angular/core';
2
- import { OnChanges, OnDestroy, EventEmitter, TemplateRef, QueryList, ElementRef, NgZone, ChangeDetectorRef, SimpleChanges } from '@angular/core';
3
- import * as i1 from '@angular/common';
4
- import { SafeResourceUrl, DomSanitizer } from '@angular/platform-browser';
5
- export * from 'docviewhelper';
6
-
7
- type viewerType = 'google' | 'office' | 'mammoth' | 'pdf' | 'url';
8
- type ViewerRenderPhase = 'idle' | 'loading' | 'ready' | 'error';
1
+ import * as i0 from "@angular/core";
2
+ import { OnChanges, OnDestroy, SimpleChanges, TemplateRef } from "@angular/core";
3
+ import * as i1 from "@angular/common";
4
+ import { SafeResourceUrl } from "@angular/platform-browser";
5
+ import { DisableContent, ViewerRenderPhase, ViewerType } from "docviewhelper";
6
+ export * from "docviewhelper";
7
+ /** @deprecated Use `ViewerType` instead. */
8
+ export type viewerType = ViewerType;
9
9
  interface ViewerTemplateContext {
10
- $implicit: ViewerStateContext;
11
- state: ViewerStateContext;
10
+ $implicit: ViewerStateContext;
11
+ state: ViewerStateContext;
12
12
  }
13
- interface ViewerStateContext {
14
- viewer: viewerType;
15
- url: string;
16
- phase: ViewerRenderPhase;
17
- errorText: string;
18
- retry: () => void;
19
- actionUrl: string;
13
+ export interface ViewerStateContext {
14
+ viewer: ViewerType;
15
+ url: string;
16
+ phase: ViewerRenderPhase;
17
+ errorText: string;
18
+ retry: () => void;
19
+ actionUrl: string;
20
20
  }
21
- declare class NgxDocViewerComponent implements OnChanges, OnDestroy {
22
- private domSanitizer;
23
- private ngZone;
24
- private cdr;
25
- loaded: EventEmitter<void>;
26
- loading: EventEmitter<ViewerStateContext>;
27
- error: EventEmitter<ViewerStateContext>;
28
- phaseChange: EventEmitter<ViewerStateContext>;
29
- url: string;
30
- queryParams: string;
31
- viewerUrl: string;
32
- googleCheckInterval: number;
33
- googleMaxChecks: number;
34
- googleFinalRetryDelay: number;
35
- disableContent: 'none' | 'all' | 'popout' | 'popout-hide';
36
- googleCheckContentLoaded: boolean;
37
- viewer: viewerType;
38
- overrideLocalhost: string;
39
- loadingText: string;
40
- errorTextOverride: string;
41
- retryButtonText: string;
42
- officeAutoRetry: boolean;
43
- officeRetryDelay: number;
44
- officeReloadButtonText: string;
45
- officeReloadButtonTitle: string;
46
- secondaryActionText: string;
47
- secondaryActionMode: 'open' | 'download';
48
- loadingTemplate?: TemplateRef<unknown>;
49
- errorTemplate?: TemplateRef<unknown>;
50
- errorActionsTemplate?: TemplateRef<unknown>;
51
- officeReloadTemplate?: TemplateRef<unknown>;
52
- iframes?: QueryList<ElementRef>;
53
- fullUrl?: SafeResourceUrl;
54
- externalViewer: boolean;
55
- docHtml: string;
56
- configuredViewer: viewerType;
57
- showIframe: boolean;
58
- renderPhase: ViewerRenderPhase;
59
- errorText: string;
60
- failedUrl: string;
61
- retryNonce: number;
62
- loadingTemplateContext: ViewerTemplateContext;
63
- errorTemplateContext: ViewerTemplateContext;
64
- private checkIFrameSubscription?;
65
- private loadVersion;
66
- private recovery?;
67
- private lastEmittedPhase?;
68
- constructor(domSanitizer: DomSanitizer, ngZone: NgZone, cdr: ChangeDetectorRef);
69
- ngOnDestroy(): void;
70
- ngOnChanges(changes: SimpleChanges): Promise<void>;
71
- retryLoad(): void;
72
- private reloadIframe;
73
- private ensureRecovery;
74
- private buildRecoveryConfig;
75
- private scheduleGoogleProbe;
76
- iframeLoaded(): void;
77
- objectLoaded(): void;
78
- private reloadMammoth;
79
- get displayedErrorText(): string;
80
- private updateTemplateContexts;
81
- private createTemplateContext;
82
- private createStateContext;
83
- private setRenderPhase;
84
- private emitLifecycleIfNeeded;
85
- static ɵfac: i0.ɵɵFactoryDeclaration<NgxDocViewerComponent, never>;
86
- static ɵcmp: i0.ɵɵComponentDeclaration<NgxDocViewerComponent, "ngx-doc-viewer", never, { "url": { "alias": "url"; "required": false; }; "queryParams": { "alias": "queryParams"; "required": false; }; "viewerUrl": { "alias": "viewerUrl"; "required": false; }; "googleCheckInterval": { "alias": "googleCheckInterval"; "required": false; }; "googleMaxChecks": { "alias": "googleMaxChecks"; "required": false; }; "googleFinalRetryDelay": { "alias": "googleFinalRetryDelay"; "required": false; }; "disableContent": { "alias": "disableContent"; "required": false; }; "googleCheckContentLoaded": { "alias": "googleCheckContentLoaded"; "required": false; }; "viewer": { "alias": "viewer"; "required": false; }; "overrideLocalhost": { "alias": "overrideLocalhost"; "required": false; }; "loadingText": { "alias": "loadingText"; "required": false; }; "errorTextOverride": { "alias": "errorTextOverride"; "required": false; }; "retryButtonText": { "alias": "retryButtonText"; "required": false; }; "officeAutoRetry": { "alias": "officeAutoRetry"; "required": false; }; "officeRetryDelay": { "alias": "officeRetryDelay"; "required": false; }; "officeReloadButtonText": { "alias": "officeReloadButtonText"; "required": false; }; "officeReloadButtonTitle": { "alias": "officeReloadButtonTitle"; "required": false; }; "secondaryActionText": { "alias": "secondaryActionText"; "required": false; }; "secondaryActionMode": { "alias": "secondaryActionMode"; "required": false; }; }, { "loaded": "loaded"; "loading": "loading"; "error": "error"; "phaseChange": "phaseChange"; }, ["loadingTemplate", "errorTemplate", "errorActionsTemplate", "officeReloadTemplate"], never, true, never>;
21
+ export declare class NgxDocViewerComponent implements OnChanges, OnDestroy {
22
+ private readonly domSanitizer;
23
+ private readonly ngZone;
24
+ private readonly injector;
25
+ readonly loaded: import("@angular/core").OutputEmitterRef<void>;
26
+ readonly loading: import("@angular/core").OutputEmitterRef<ViewerStateContext>;
27
+ readonly error: import("@angular/core").OutputEmitterRef<ViewerStateContext>;
28
+ readonly phaseChange: import("@angular/core").OutputEmitterRef<ViewerStateContext>;
29
+ readonly url: import("@angular/core").InputSignal<string>;
30
+ readonly queryParams: import("@angular/core").InputSignal<string>;
31
+ readonly viewerUrl: import("@angular/core").InputSignal<string>;
32
+ readonly googleCheckInterval: import("@angular/core").InputSignal<number>;
33
+ readonly googleMaxChecks: import("@angular/core").InputSignal<number>;
34
+ readonly googleFinalRetryDelay: import("@angular/core").InputSignal<number>;
35
+ readonly disableContent: import("@angular/core").InputSignal<DisableContent>;
36
+ readonly googleCheckContentLoaded: import("@angular/core").InputSignal<boolean>;
37
+ readonly viewer: import("@angular/core").InputSignal<ViewerType>;
38
+ readonly overrideLocalhost: import("@angular/core").InputSignal<string>;
39
+ readonly loadingText: import("@angular/core").InputSignal<string>;
40
+ readonly errorTextOverride: import("@angular/core").InputSignal<string>;
41
+ readonly retryButtonText: import("@angular/core").InputSignal<string>;
42
+ readonly officeAutoRetry: import("@angular/core").InputSignal<boolean>;
43
+ readonly officeRetryDelay: import("@angular/core").InputSignal<number>;
44
+ readonly officeReloadButtonText: import("@angular/core").InputSignal<string>;
45
+ readonly officeReloadButtonTitle: import("@angular/core").InputSignal<string>;
46
+ readonly secondaryActionText: import("@angular/core").InputSignal<string>;
47
+ readonly secondaryActionMode: import("@angular/core").InputSignal<"open" | "download">;
48
+ readonly loadingTemplate: import("@angular/core").Signal<TemplateRef<any> | undefined>;
49
+ readonly errorTemplate: import("@angular/core").Signal<TemplateRef<any> | undefined>;
50
+ readonly errorActionsTemplate: import("@angular/core").Signal<TemplateRef<any> | undefined>;
51
+ readonly officeReloadTemplate: import("@angular/core").Signal<TemplateRef<any> | undefined>;
52
+ private readonly iframe;
53
+ readonly renderPhase: import("@angular/core").WritableSignal<ViewerRenderPhase>;
54
+ readonly externalViewer: import("@angular/core").WritableSignal<boolean>;
55
+ readonly fullUrl: import("@angular/core").WritableSignal<SafeResourceUrl | undefined>;
56
+ readonly docHtml: import("@angular/core").WritableSignal<string>;
57
+ readonly errorText: import("@angular/core").WritableSignal<string>;
58
+ readonly sourceUrl: import("@angular/core").WritableSignal<string>;
59
+ private readonly loadKey;
60
+ readonly loadKeys: import("@angular/core").Signal<number[]>;
61
+ readonly displayedErrorText: import("@angular/core").Signal<string>;
62
+ readonly overlayClass: import("@angular/core").Signal<string | undefined>;
63
+ readonly templateContext: import("@angular/core").Signal<ViewerTemplateContext>;
64
+ private checkIFrameSubscription?;
65
+ private googleProbe?;
66
+ private recovery?;
67
+ private lastEmittedPhase?;
68
+ ngOnDestroy(): void;
69
+ ngOnChanges(changes: SimpleChanges): void;
70
+ retryLoad(): void;
71
+ iframeLoaded(): void;
72
+ objectLoaded(): void;
73
+ private load;
74
+ private ensureRecovery;
75
+ private buildRecoveryConfig;
76
+ private startGoogleProbe;
77
+ private stopGoogleProbe;
78
+ private setRenderPhase;
79
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgxDocViewerComponent, never>;
80
+ static ɵcmp: i0.ɵɵComponentDeclaration<NgxDocViewerComponent, "ngx-doc-viewer", never, {
81
+ "url": {
82
+ "alias": "url";
83
+ "required": false;
84
+ "isSignal": true;
85
+ };
86
+ "queryParams": {
87
+ "alias": "queryParams";
88
+ "required": false;
89
+ "isSignal": true;
90
+ };
91
+ "viewerUrl": {
92
+ "alias": "viewerUrl";
93
+ "required": false;
94
+ "isSignal": true;
95
+ };
96
+ "googleCheckInterval": {
97
+ "alias": "googleCheckInterval";
98
+ "required": false;
99
+ "isSignal": true;
100
+ };
101
+ "googleMaxChecks": {
102
+ "alias": "googleMaxChecks";
103
+ "required": false;
104
+ "isSignal": true;
105
+ };
106
+ "googleFinalRetryDelay": {
107
+ "alias": "googleFinalRetryDelay";
108
+ "required": false;
109
+ "isSignal": true;
110
+ };
111
+ "disableContent": {
112
+ "alias": "disableContent";
113
+ "required": false;
114
+ "isSignal": true;
115
+ };
116
+ "googleCheckContentLoaded": {
117
+ "alias": "googleCheckContentLoaded";
118
+ "required": false;
119
+ "isSignal": true;
120
+ };
121
+ "viewer": {
122
+ "alias": "viewer";
123
+ "required": false;
124
+ "isSignal": true;
125
+ };
126
+ "overrideLocalhost": {
127
+ "alias": "overrideLocalhost";
128
+ "required": false;
129
+ "isSignal": true;
130
+ };
131
+ "loadingText": {
132
+ "alias": "loadingText";
133
+ "required": false;
134
+ "isSignal": true;
135
+ };
136
+ "errorTextOverride": {
137
+ "alias": "errorTextOverride";
138
+ "required": false;
139
+ "isSignal": true;
140
+ };
141
+ "retryButtonText": {
142
+ "alias": "retryButtonText";
143
+ "required": false;
144
+ "isSignal": true;
145
+ };
146
+ "officeAutoRetry": {
147
+ "alias": "officeAutoRetry";
148
+ "required": false;
149
+ "isSignal": true;
150
+ };
151
+ "officeRetryDelay": {
152
+ "alias": "officeRetryDelay";
153
+ "required": false;
154
+ "isSignal": true;
155
+ };
156
+ "officeReloadButtonText": {
157
+ "alias": "officeReloadButtonText";
158
+ "required": false;
159
+ "isSignal": true;
160
+ };
161
+ "officeReloadButtonTitle": {
162
+ "alias": "officeReloadButtonTitle";
163
+ "required": false;
164
+ "isSignal": true;
165
+ };
166
+ "secondaryActionText": {
167
+ "alias": "secondaryActionText";
168
+ "required": false;
169
+ "isSignal": true;
170
+ };
171
+ "secondaryActionMode": {
172
+ "alias": "secondaryActionMode";
173
+ "required": false;
174
+ "isSignal": true;
175
+ };
176
+ }, {
177
+ "loaded": "loaded";
178
+ "loading": "loading";
179
+ "error": "error";
180
+ "phaseChange": "phaseChange";
181
+ }, ["loadingTemplate", "errorTemplate", "errorActionsTemplate", "officeReloadTemplate"], never, true, never>;
87
182
  }
88
-
89
- declare class NgxDocViewerModule {
90
- static ɵfac: i0.ɵɵFactoryDeclaration<NgxDocViewerModule, never>;
91
- static ɵmod: i0.ɵɵNgModuleDeclaration<NgxDocViewerModule, never, [typeof i1.CommonModule, typeof NgxDocViewerComponent], [typeof NgxDocViewerComponent]>;
92
- static ɵinj: i0.ɵɵInjectorDeclaration<NgxDocViewerModule>;
93
- }
94
-
95
- export { NgxDocViewerComponent, NgxDocViewerModule };
96
- export type { ViewerStateContext, viewerType };
183
+ export declare class NgxDocViewerModule {
184
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgxDocViewerModule, never>;
185
+ static ɵmod: i0.ɵɵNgModuleDeclaration<NgxDocViewerModule, never, [typeof i1.CommonModule, typeof NgxDocViewerComponent], [typeof NgxDocViewerComponent]>;
186
+ static ɵinj: i0.ɵɵInjectorDeclaration<NgxDocViewerModule>;
187
+ }