UNPKG

ngx-doc-viewer

Version:
1 lines 44.1 kB
{"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 getViewerRecoveryPlan,\n googleCheckSubscription,\n iframeIsLoaded,\n isLocalFile,\n replaceLocalUrl,\n IFrameReloader,\n} from 'docviewhelper';\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\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 externalLoadTimeoutId?: number = undefined;\n private googleFinalRetryTimeoutId?: number = undefined;\n private googleFinalRetriedSourceKey?: string = undefined;\n private currentGoogleSourceKey?: string = undefined;\n private officeRetryTimeoutId?: number = undefined;\n private officeAutoRetriedSourceKey?: string = undefined;\n private currentOfficeSourceKey?: string = 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.clearExternalLoadTimeout();\n this.clearGoogleFinalRetry();\n this.clearOfficeRetry();\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 this.clearExternalLoadTimeout();\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 const officeSourceKey =\n this.configuredViewer === 'office' ? viewerDetails.url : undefined;\n if (officeSourceKey !== this.currentOfficeSourceKey) {\n this.officeAutoRetriedSourceKey = undefined;\n }\n this.currentOfficeSourceKey = officeSourceKey;\n const googleSourceKey =\n this.configuredViewer === 'google' ? viewerDetails.url : undefined;\n if (googleSourceKey !== this.currentGoogleSourceKey) {\n this.googleFinalRetriedSourceKey = undefined;\n }\n this.currentGoogleSourceKey = googleSourceKey;\n this.docHtml = '';\n this.errorText = '';\n this.failedUrl = this.url;\n this.clearGoogleFinalRetry();\n this.clearOfficeRetry();\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 this.scheduleExternalLoadTimeout(loadVersion);\n this.cdr.detectChanges();\n this.scheduleViewerRecovery();\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 this.clearExternalLoadTimeout();\n this.clearGoogleFinalRetry();\n this.clearOfficeRetry();\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 this.scheduleExternalLoadTimeout(retryVersion);\n this.scheduleViewerRecovery();\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 scheduleViewerRecovery() {\n const recoveryPlan = getViewerRecoveryPlan({\n viewer: this.configuredViewer,\n googleCheckContentLoaded: this.googleCheckContentLoaded,\n googleFinalRetryDelay: this.googleFinalRetryDelay,\n officeAutoRetry: this.officeAutoRetry,\n });\n for (const mode of recoveryPlan.modes) {\n if (mode === 'google-probe') {\n this.scheduleGoogleRecovery();\n }\n if (mode === 'google-final-retry') {\n continue;\n }\n if (mode === 'office-auto-retry') {\n this.scheduleOfficeRetry();\n }\n }\n }\n\n private scheduleGoogleRecovery() {\n if (\n this.configuredViewer !== 'google' ||\n !this.googleCheckContentLoaded\n ) {\n return;\n }\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.clearExternalLoadTimeout();\n this.clearGoogleFinalRetry();\n this.clearOfficeRetry();\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.clearExternalLoadTimeout();\n this.clearGoogleFinalRetry();\n this.clearOfficeRetry();\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 private scheduleExternalLoadTimeout(loadVersion: number) {\n this.clearExternalLoadTimeout();\n const timeoutMs =\n this.configuredViewer === 'google'\n ? Math.max(this.googleCheckInterval * this.googleMaxChecks + 2000, 15000)\n : 15000;\n this.externalLoadTimeoutId = window.setTimeout(() => {\n if (loadVersion !== this.loadVersion || this.renderPhase !== 'loading') {\n return;\n }\n if (this.scheduleGoogleFinalRetry()) {\n return;\n }\n this.ngZone.run(() => {\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 }, timeoutMs);\n }\n\n private clearExternalLoadTimeout() {\n if (this.externalLoadTimeoutId) {\n window.clearTimeout(this.externalLoadTimeoutId);\n this.externalLoadTimeoutId = undefined;\n }\n }\n\n private clearGoogleFinalRetry() {\n if (this.googleFinalRetryTimeoutId) {\n window.clearTimeout(this.googleFinalRetryTimeoutId);\n this.googleFinalRetryTimeoutId = undefined;\n }\n }\n\n private clearOfficeRetry() {\n if (this.officeRetryTimeoutId) {\n window.clearTimeout(this.officeRetryTimeoutId);\n this.officeRetryTimeoutId = undefined;\n }\n }\n\n private scheduleOfficeRetry() {\n if (\n this.configuredViewer !== 'office' ||\n !this.officeAutoRetry ||\n !this.currentOfficeSourceKey ||\n this.officeAutoRetriedSourceKey === this.currentOfficeSourceKey\n ) {\n return;\n }\n this.clearOfficeRetry();\n this.officeRetryTimeoutId = window.setTimeout(() => {\n if (\n !this.currentOfficeSourceKey ||\n this.officeAutoRetriedSourceKey === this.currentOfficeSourceKey\n ) {\n return;\n }\n this.officeAutoRetriedSourceKey = this.currentOfficeSourceKey;\n this.ngZone.run(() => this.retryLoad());\n }, this.officeRetryDelay);\n }\n\n private scheduleGoogleFinalRetry() {\n const recoveryPlan = getViewerRecoveryPlan({\n viewer: this.configuredViewer,\n googleCheckContentLoaded: this.googleCheckContentLoaded,\n googleFinalRetryDelay: this.googleFinalRetryDelay,\n officeAutoRetry: this.officeAutoRetry,\n });\n if (\n !recoveryPlan.modes.includes('google-final-retry') ||\n !this.currentGoogleSourceKey ||\n this.googleFinalRetriedSourceKey === this.currentGoogleSourceKey\n ) {\n return false;\n }\n this.clearGoogleFinalRetry();\n this.googleFinalRetryTimeoutId = window.setTimeout(() => {\n if (\n !this.currentGoogleSourceKey ||\n this.googleFinalRetriedSourceKey === this.currentGoogleSourceKey\n ) {\n return;\n }\n this.googleFinalRetriedSourceKey = this.currentGoogleSourceKey;\n this.ngZone.run(() => this.retryLoad());\n }, this.googleFinalRetryDelay);\n return true;\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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"}