{"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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"}