{"version":3,"file":"yuuvis-media-viewer.mjs","sources":["../../../../libs/media-viewer/src/lib/components/abstract/abstract.viewer.component.ts","../../../../libs/media-viewer/src/lib/components/audio/audio.component.ts","../../../../libs/media-viewer/src/lib/components/video/video.component.ts","../../../../libs/media-viewer/src/lib/components/error/error.component.ts","../../../../libs/media-viewer/src/lib/helper/progress.component.ts","../../../../libs/media-viewer/src/lib/components/image/image.component.ts","../../../../libs/media-viewer/src/lib/components/image/image.component.html","../../../../libs/media-viewer/src/lib/components/mail/attachment-carousel/attachment-carousel.component.ts","../../../../libs/media-viewer/src/lib/components/mail/attachment-carousel/attachment-carousel.component.html","../../../../libs/media-viewer/src/lib/services/default-mediatype.mapper.ts","../../../../libs/media-viewer/src/lib/services/media-viewer.service.ts","../../../../libs/media-viewer/src/lib/components/mail/attachment-preview/attachment-preview.component.ts","../../../../libs/media-viewer/src/lib/components/mail/services/msg-parser.service.ts","../../../../libs/media-viewer/src/lib/components/mail/services/eml-parser.service.ts","../../../../libs/media-viewer/src/lib/components/mail/mail.component.ts","../../../../libs/media-viewer/src/lib/components/mail/mail.component.html","../../../../libs/media-viewer/src/lib/services/monaco-loader.service.ts","../../../../libs/media-viewer/src/lib/components/monaco-direct/monaco-language-mapper.ts","../../../../libs/media-viewer/src/lib/components/monaco-direct/monaco-direct.component.ts","../../../../libs/media-viewer/src/lib/components/monaco-direct/monaco-direct.component.html","../../../../libs/media-viewer/src/lib/components/text/text.component.ts","../../../../libs/media-viewer/src/lib/components/pdf/pdf-viewer/utils/event-bus.utils.ts","../../../../libs/media-viewer/src/lib/components/pdf/pdf-viewer/utils/pdfjs-setup.ts","../../../../libs/media-viewer/src/lib/components/pdf/pdf-viewer/config/pdf-viewer.config.ts","../../../../libs/media-viewer/src/lib/components/pdf/pdf-viewer/pdf-viewer.component.ts","../../../../libs/media-viewer/src/lib/components/pdf/services/pdf-keyboard-shortcuts.service.ts","../../../../libs/media-viewer/src/lib/components/pdf/services/pdf-security.service.ts","../../../../libs/media-viewer/src/lib/components/pdf/toolbar/paging/paging.component.ts","../../../../libs/media-viewer/src/lib/components/pdf/toolbar/rotate/rotate.component.ts","../../../../libs/media-viewer/src/lib/components/pdf/toolbar/search/search.component.ts","../../../../libs/media-viewer/src/lib/components/pdf/toolbar/search/search.component.html","../../../../libs/media-viewer/src/lib/components/pdf/pipe/zoom.display.pipe.ts","../../../../libs/media-viewer/src/lib/components/pdf/toolbar/zoom/zoom.component.ts","../../../../libs/media-viewer/src/lib/components/pdf/toolbar/zoom/zoom.component.html","../../../../libs/media-viewer/src/lib/components/pdf/toolbar/toolbar/toolbar.component.ts","../../../../libs/media-viewer/src/lib/components/pdf/toolbar/toolbar/toolbar.component.html","../../../../libs/media-viewer/src/lib/components/pdf/pdf.component.ts","../../../../libs/media-viewer/src/lib/components/pdf/pdf.component.html","../../../../libs/media-viewer/src/lib/components/pdf/pdf-viewer/config/index.ts","../../../../libs/media-viewer/src/lib/pipes/save.url.pipe.ts","../../../../libs/media-viewer/src/lib/token/environment.data.token.ts","../../../../libs/media-viewer/src/lib/services/media-viewer.providers.ts","../../../../libs/media-viewer/src/lib/components/office/internal.office.message.events.ts","../../../../libs/media-viewer/src/lib/components/office/office.message.events.ts","../../../../libs/media-viewer/src/lib/components/office/office.component.ts","../../../../libs/media-viewer/src/lib/components/open-office/open.office.component.ts","../../../../libs/media-viewer/src/lib/components/e-invoice/services/xml-processor.ts","../../../../libs/media-viewer/src/lib/components/e-invoice/e-invoice.component.ts","../../../../libs/media-viewer/src/lib/directives/viewer.directive.ts","../../../../libs/media-viewer/src/lib/container/component/default/media-viewer.component.ts","../../../../libs/media-viewer/src/index.ts","../../../../libs/media-viewer/src/yuuvis-media-viewer.ts"],"sourcesContent":["import { Component, computed, input, Signal } from '@angular/core';\n\n@Component({\n  selector: 'yuv-abstract',\n  imports: [],\n  template: ``\n})\nexport abstract class AbstractViewerComponent<T extends Record<string, any> = any> {\n  type = input<string>();\n  id = input.required<string>();\n  metadata = input<T>();\n  src = input.required<string>();\n\n  theme: Signal<'dark' | 'light'> = computed(() => {\n    const data = this.metadata();\n    return data?.['theme'] ?? 'light';\n  });\n\n  user = computed(() => {\n    const data = this.metadata();\n    return data?.['user'];\n  });\n}\n","import { ChangeDetectionStrategy, Component, ElementRef, HostListener, afterNextRender, computed, inject, viewChild } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { AudioMetadata } from '../../models/viewer.interfaces';\nimport { AbstractViewerComponent } from '../abstract/abstract.viewer.component';\n\n@Component({\n  selector: 'yuv-audio',\n  imports: [],\n  template: ` @if(mode() !== 'off'){\n    <canvas #canvas></canvas>\n    }\n    <audio #audio controls name=\"audio-media\">\n      <source [src]=\"imageSrc()\" [type]=\"type()\" />\n    </audio>`,\n  styles: `\n    :host {\n      --visulisationHeight: 50px;\n      &.yuv-audio {\n        height: calc(100% - var(--visulisationHeight));\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        flex-direction: column;\n      }\n    }\n\n    audio {\n      width: 50%;\n      outline: none;\n    }\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: 'yuv-audio',\n    '[style]': 'visulisationHeight',\n    '(window:resize)': 'onWindowResize()'\n  }\n})\nexport class AudioComponent extends AbstractViewerComponent<AudioMetadata> {\n  readonly #sanitizer = inject(DomSanitizer);\n\n  #WIDTH = 500; // computed(() => ((this.#viewerService.width() || 500) * 50) / 100);\n  readonly #HEIGHT: number = 250;\n\n  imageSrc = computed(() => {\n    const src = this.src();\n    return src.startsWith('data:') ? src : `${src}?${Date.now()}`;\n  });\n  get visulisationHeight() {\n    return this.#sanitizer.bypassSecurityTrustStyle(`--visulisationHeight: ${this.#HEIGHT}px;`);\n  }\n\n  // TODO: ContainerQuery\n  onWindowResize() {\n    this.#WIDTH = (window.innerWidth * 50) / 100;\n  }\n\n  canvasEle = viewChild.required<ElementRef<HTMLCanvasElement>>('canvas');\n  audioEle = viewChild.required<ElementRef<HTMLAudioElement>>('audio');\n  ctx = computed(() => this.canvasEle().nativeElement.getContext('2d'));\n\n  mode = computed(() => this.metadata()?.mode ?? 'frequency');\n\n  canvasReadyEffect = afterNextRender({\n    write: () => {\n      if (this.canvasEle() && this.audioEle() && this.ctx()) {\n        this.canvasEle().nativeElement.width = this.#WIDTH;\n        this.canvasEle().nativeElement.height = this.#HEIGHT;\n        this.audioEle().nativeElement.setAttribute('style', `width:${this.#WIDTH + 50}px`);\n        this.mode() !== 'off' && this.#getaudio();\n      }\n    }\n  });\n\n  analyser: AnalyserNode | null = null;\n  bufferLength = 0;\n\n  async #getaudio() {\n    const stream = await this.audioEle()?.nativeElement;\n    const audioCtx = new AudioContext();\n    this.analyser = audioCtx.createAnalyser();\n\n    const audioSource = audioCtx.createMediaElementSource(stream);\n    audioSource.connect(audioCtx.destination);\n    audioSource.connect(this.analyser);\n\n    this.analyser.fftSize = 2 ** 8;\n    this.analyser.smoothingTimeConstant = 0.5;\n    this.analyser.maxDecibels = -30;\n    this.analyser.minDecibels = -100;\n    this.analyser.smoothingTimeConstant = 0.1;\n\n    this.bufferLength = this.analyser.frequencyBinCount;\n    const data = new Uint8Array(this.bufferLength);\n    this.mode() === 'oscilloscope' ? this.#drawTimeData(data) : this.#drawFrequencyData(data);\n  }\n\n  #drawTimeData(timeData: Uint8Array<ArrayBuffer>) {\n    this.analyser && this.analyser.getByteTimeDomainData(timeData);\n    const ctx = this.ctx();\n    if (ctx) {\n      ctx.clearRect(0, 0, this.#WIDTH, this.#HEIGHT);\n      ctx.lineWidth = 3;\n      ctx.strokeStyle = 'hotpink';\n      ctx.beginPath();\n      const sliceWidth = (this.#WIDTH * 1.0) / this.bufferLength;\n      let x = 0;\n      timeData.forEach((d, i) => {\n        const v = d / 128.0;\n        const y = (v * this.#HEIGHT) / 2;\n        i === 0 ? ctx.moveTo(x, y) : ctx.lineTo(x, y);\n\n        x += sliceWidth;\n      });\n      ctx.stroke();\n      requestAnimationFrame(() => this.#drawTimeData(timeData));\n    }\n  }\n\n  #drawFrequencyData(frequencyData: Uint8Array<ArrayBuffer>) {\n    this.analyser && this.analyser.getByteFrequencyData(frequencyData);\n    const ctx = this.ctx();\n    if (ctx !== null) {\n      ctx.clearRect(0, 0, this.#WIDTH, this.#HEIGHT);\n      const barWidth = (this.#WIDTH / this.bufferLength) * 2.5;\n      let x = 0;\n\n      frequencyData.forEach((d) => {\n        const percent = d / 255;\n        const [h, s, l] = [360 / (360 * percent) - 0.5, 0.8, 0.6];\n        const barHeight = (this.#HEIGHT * percent) / 2;\n        const [r, g, b] = this.#hslToRgb(h, s, l);\n        ctx.fillStyle = `rgb(${r},${g},${b})`;\n        ctx.fillRect(x, this.#HEIGHT - barHeight, barWidth, barHeight);\n        x += barWidth + 1;\n      });\n      ctx.stroke();\n      requestAnimationFrame(() => this.#drawFrequencyData(frequencyData));\n    }\n  }\n\n  #hslToRgb(h: number, s: number, l: number): number[] {\n    let r;\n    let g;\n    let b;\n\n    if (s == 0) {\n      r = g = b = l; // achromatic\n    } else {\n      const hue2rgb = function hue2rgb(p: number, q: number, t: number) {\n        if (t < 0) t += 1;\n        if (t > 1) t -= 1;\n        if (t < 1 / 6) return p + (q - p) * 6 * t;\n        if (t < 1 / 2) return q;\n        if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n        return p;\n      };\n\n      const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n      const p = 2 * l - q;\n      r = hue2rgb(p, q, h + 1 / 3);\n      g = hue2rgb(p, q, h);\n      b = hue2rgb(p, q, h - 1 / 3);\n    }\n\n    return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];\n  }\n}\n","\nimport { ChangeDetectionStrategy, Component, ElementRef, computed, viewChild } from '@angular/core';\nimport { VideoMetadata } from '../../models/viewer.interfaces';\nimport { AbstractViewerComponent } from '../abstract/abstract.viewer.component';\n\n@Component({\n    selector: 'yuv-video',\n    imports: [],\n    template: `<video\n    #video\n    id=\"video\"\n    controls\n    name=\"media\"\n    [attr.disablepictureinpicture]=\"metadata()?.disablePictureInPicture ? '' : null\">\n    <source [src]=\"imageSrc()\" [type]=\"type()\" />\n  </video>`,\n    styles: `\n    :host {\n      height: 100%;\n      display: flex;\n      justify-content: center;\n      align-items: center;\n    }\n    video {\n      height: 80%;\n      width: 80%;\n      outline: none;\n    }\n  `,\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class VideoComponent extends AbstractViewerComponent<VideoMetadata> {\n  videoEle = viewChild.required<ElementRef<HTMLVideoElement>>('video');\n\n  imageSrc = computed(() => {\n    const src = this.src();\n    return src.startsWith('data:') ? src : `${src}?${Date.now()}`;\n  });\n\n  isPipSupported = computed(() => {\n    return typeof document !== 'undefined' && !!document.pictureInPictureEnabled && !this.metadata()?.disablePictureInPicture;\n  });\n\n  enterPictureInPicture(): Promise<PictureInPictureWindow> {\n    if (!this.isPipSupported()) {\n      return Promise.reject(new Error('Picture-in-Picture is not supported in this context.'));\n    }\n    return this.videoEle().nativeElement.requestPictureInPicture();\n  }\n\n  exitPictureInPicture(): Promise<void> {\n    if (typeof document === 'undefined' || document.pictureInPictureElement !== this.videoEle().nativeElement) {\n      return Promise.resolve();\n    }\n    return document.exitPictureInPicture();\n  }\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { AbstractViewerComponent } from '../abstract/abstract.viewer.component';\n\n@Component({\n  selector: 'yuv-error',\n  imports: [],\n  template: `<div class=\"error_wrapper\">\n    @if (errorHandler().error === 'authorized') {\n    <div class=\"icon authorized\">\n      <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n        <path d=\"M0 0h24v24H0z\" fill=\"none\" />\n        <path d=\"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z\" />\n      </svg>\n    </div>\n    } @else if (errorHandler().error === 'supported') {\n    <div class=\"icon supported\">\n      <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n        <path d=\"M0 0h24v24H0z\" fill=\"none\" />\n        <path\n          d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8 0-1.85.63-3.55 1.69-4.9L16.9 18.31C15.55 19.37 13.85 20 12 20zm6.31-3.1L7.1 5.69C8.45 4.63 10.15 4 12 4c4.42 0 8 3.58 8 8 0 1.85-.63 3.55-1.69 4.9z\"\n        />\n      </svg>\n    </div>\n    } @else if (errorHandler().error === 'notFound') {\n    <div class=\"icon found\">\n      <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 48 48\">\n        <path\n          d=\"M29 4H14.6c-.8 0-1.5.2-2 .6l27.2 27.2v-17L29 4zm-.7 11.6V7.8l7.8 7.8h-7.8zM43.4 40.8l-2.5 2.5-3.5-3.5c-.4.1-.8.2-1.2.2H14.6c-2 0-3.6-1.6-3.6-3.6V13.5L5.9 8.4l2.5-2.5L11 8.4l28.7 28.7 3.1 3.1.6.6z\"\n        />\n      </svg>\n    </div>\n    } @if (errorHandler().download) {\n    <pre class=\"error_text\">{{ errorHandler().message }}</pre>\n    <a type=\"download\" [download]=\"metadata()?.name\" class=\"error_link\" [href]=\"errorHandler().download?.link\" [title]=\"errorHandler().download?.message\">\n      <pre class=\"error_text\">{{ errorHandler().download?.message }}</pre>\n    </a>\n    } @else {\n    <pre class=\"error_text\">{{ errorHandler().message }}</pre>\n    }\n  </div>`,\n  styles: `\n    :host {\n      display: flex;\n      flex-flow: column;\n      justify-content: center;\n      align-items: center;\n      height: 100%;\n    }\n\n    .error_wrapper {\n      display: flex;\n      flex-flow: column;\n      align-items: center;\n      justify-content: center;\n    }\n\n    .icon svg {\n      width: 100px;\n      height: 100px;\n      opacity: 0.1;\n    }\n\n    .error_text {\n      color: var(--ymv-text-color-subtle, #5b5e65);\n      opacity: 0.5;\n      font-size: 16px;\n      padding: 0 20px;\n      text-align: center;\n      margin: 0;\n      white-space: normal;\n    }\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ErrorComponent extends AbstractViewerComponent {\n  readonly translate = inject(TranslateService);\n  //TODO: add propper error handling\n  error = input<'supported' | 'notFound' | 'authorized'>('supported');\n  errorMessage = input<string>('yuv.media.viewer.content.not.autherized');\n  errorHandler = computed(() => {\n    const error = this.error();\n    const errorMessage = this.errorMessage();\n    const metadata = this.metadata();\n    const src = this.src();\n\n    let message = this.translate.instant(errorMessage);\n    message = message.startsWith('!missing key:') ? this.translate.instant('yuv.media.viewer.content.not.autherized') : message;\n    return {\n      error,\n      message,\n      ...(error !== 'notFound' && src\n        ? {\n            download: {\n              link: src,\n              message: this.translate.instant('yuv.media.viewer.download.content', { name: metadata?.name })\n            }\n          }\n        : {})\n    };\n  });\n}\n","import { ChangeDetectionStrategy, Component, ElementRef, inject, OnDestroy, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'yuv-progress',\n  imports: [],\n  template: ` <label>\n    <span class=\"sr-only\">Loading progress</span>\n    <div #loadingContainer indeterminate class=\"loading-container\" role=\"progressbar\" aria-valuemin=\"0\" aria-valuemax=\"100\">\n      <div class=\"loading-bar\"></div></div\n  ></label>`,\n  styles: `\n\n    label {\n      display: grid;\n      place-items: center;\n    }\n\n    .sr-only {\n      clip: rect(1px, 1px, 1px, 1px);\n      clip-path: inset(50%);\n      height: 1px;\n      width: 1px;\n      margin: -1px;\n      overflow: hidden;\n      padding: 0;\n      position: absolute;\n    }\n    /* Container for the loading bar */\n    .loading-container {\n      width: 100%;\n      background-color: var(--ymv-primary,#13629d);\n      border-radius: 5px;\n      overflow: hidden;\n      height: calc(1rem * 0.2);\n      position: relative;\n    }\n\n    /* Loading bar itself */\n    .loading-bar {\n      width: 0%;\n      height: 100%;\n      background-color: var(--ymv-success,#006b54);\n      transition: width 1s ease-in-out;\n    }\n\n    /* Indeterminate animation */\n    .loading-container[indeterminate] .loading-bar {\n      width: 100%;\n      position: absolute;\n      animation: indeterminate 1.5s infinite linear;\n    }\n\n    /* Keyframes for indeterminate animation */\n    @keyframes indeterminate {\n      0% {\n        left: -100%;\n        width: 100%;\n      }\n      50% {\n        left: 25%;\n        width: 50%;\n      }\n      100% {\n        left: 100%;\n        width: 0%;\n      }\n    }\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    ['aria-busy']: 'true',\n    id: 'loading-zone'\n  }\n})\nexport class ProgressComponent implements OnInit, OnDestroy {\n  #hostElement = inject(ElementRef);\n\n  ngOnInit(): void {\n    this.#hostElement.nativeElement.setAttribute('aria-busy', 'true');\n  }\n\n  ngOnDestroy(): void {\n    this.#hostElement.nativeElement.removeAttribute('aria-busy');\n  }\n}\n","import { afterNextRender, ChangeDetectionStrategy, Component, computed, effect, ElementRef, inject, signal, viewChild, viewChildren } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ProgressComponent } from '../../helper/progress.component';\nimport { ImageMetadata } from '../../models/viewer.interfaces';\nimport { AbstractViewerComponent } from '../abstract/abstract.viewer.component';\nimport { ActionButton } from './image.interface';\n\n@Component({\n  selector: 'yuv-image',\n  imports: [ProgressComponent],\n  templateUrl: `./image.component.html`,\n  styleUrl: `./image.component.scss`,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    '(click)': 'onHostKeyDown($event)',\n    '(document:keydown)': 'keyDown($event)'\n  }\n})\nexport class ImageComponent extends AbstractViewerComponent<ImageMetadata> {\n  readonly #sanitizer = inject(DomSanitizer);\n  readonly translate = inject(TranslateService);\n\n  image = viewChild.required<ElementRef<HTMLImageElement>>('image');\n  actionButton = viewChildren<ElementRef<HTMLButtonElement>>('actionButton');\n\n  imageSrc = computed(() => {\n    const src = this.src();\n    return src.startsWith('data:') || src.includes('/slide') ? src : `${src}?${Date.now()}`;\n  });\n\n  zoom = signal<number>(1);\n  startX = signal<number>(0);\n  startY = signal<number>(0);\n  rotation = signal<number>(0);\n  initialX = signal<number>(0);\n  initialY = signal<number>(0);\n\n  isLoading = signal<boolean>(true);\n  isDragging = signal<boolean>(false);\n  isImageFocused = signal<boolean>(false);\n\n  actionButtons = signal<ActionButton[]>([\n    {\n      className: 'left',\n      icon: this.#sanitizer.bypassSecurityTrustHtml('&#8631;'),\n      clickAction: () => this.rotate(1),\n      ariaLabel: this.translate.instant('yuv.media.viewer.image.actions.rotate.left'),\n      keyAction: (event: KeyboardEvent, index: number) => this.navigate(event, index)\n    },\n    {\n      className: 'right',\n      icon: this.#sanitizer.bypassSecurityTrustHtml('&#8630;'),\n      clickAction: () => this.rotate(-1),\n      ariaLabel: this.translate.instant('yuv.media.viewer.image.actions.rotate.right'),\n      keyAction: (event: KeyboardEvent, index: number) => this.navigate(event, index)\n    },\n    {\n      className: 'in',\n      icon: this.#sanitizer.bypassSecurityTrustHtml('&#43;'),\n      clickAction: () => this.zoomIn(),\n      ariaLabel: this.translate.instant('yuv.media.viewer.image.actions.enlarge'),\n      keyAction: (event: KeyboardEvent, index: number) => this.navigate(event, index)\n    },\n    {\n      className: 'out',\n      icon: this.#sanitizer.bypassSecurityTrustHtml('&#8722;'),\n      clickAction: () => this.zoomOut(),\n      ariaLabel: this.translate.instant('yuv.media.viewer.image.actions.reduce'),\n      keyAction: (event: KeyboardEvent, index: number) => this.navigate(event, index)\n    }\n  ]);\n\n  #imageIsLoadedEffect = effect(() => {\n    const img = this.image().nativeElement;\n    img.onload = () => this.isLoading.set(false);\n    img.onerror = () => this.isLoading.set(false);\n  });\n\n  #updateTransformEffect = effect(() => (this.image().nativeElement.style.transform = `rotate(${this.rotation()}deg) scale(${this.zoom()})`));\n\n  #updateAfterDragEffect = effect(() => {\n    this.image().nativeElement.style.transform = `translate(${this.initialX()}px, ${this.initialY()}px) rotate(${this.rotation()}deg) scale(${this.zoom()})`;\n  });\n\n  #afterNextRenderEffect = afterNextRender({\n    read: () => {\n      this.image().nativeElement.addEventListener('focus', () => this.isImageFocused.set(true));\n      this.image().nativeElement.addEventListener('blur', () => this.isImageFocused.set(false));\n    }\n  });\n\n  keyDown(event: KeyboardEvent) {\n    if (this.isImageFocused()) {\n      if (event.ctrlKey && event.key.startsWith('Arrow')) {\n        this.fakeDrag(event.key);\n        return;\n      }\n      if (event.key.startsWith('Arrow')) {\n        this.keybordAction(event.key);\n        return;\n      }\n    }\n  }\n\n  onHostKeyDown(event: MouseEvent) {\n    event.preventDefault();\n    if (!this.isImageFocused() && !this.actionButton().some((button) => document.activeElement === button.nativeElement)) {\n      this.image().nativeElement.focus();\n    }\n  }\n\n  navigate(event: KeyboardEvent, index: number) {\n    const buttonArray = this.actionButton();\n    if (event.key === 'ArrowUp') {\n      const prevIndex = (index - 1 + buttonArray.length) % buttonArray.length;\n      buttonArray[prevIndex].nativeElement.focus();\n    } else if (event.key === 'ArrowDown') {\n      const nextIndex = (index + 1) % buttonArray.length;\n      buttonArray[nextIndex].nativeElement.focus();\n    }\n  }\n\n  reset(): void {\n    this.rotation.set(0);\n    this.zoom.set(1);\n    this.startX.set(0);\n    this.startY.set(0);\n    this.initialX.set(0);\n    this.initialY.set(0);\n  }\n\n  rotate(dir: number): void {\n    this.rotation.update((value) => value - 90 * dir);\n  }\n\n  zoomIn(): void {\n    this.zoom.update((scale) => scale * 1.2);\n  }\n\n  zoomOut(): void {\n    this.zoom.update((scale) => scale / 1.2);\n  }\n\n  fakeDrag(key: string): void {\n    switch (key) {\n      case 'ArrowLeft':\n        this.initialX.update((x) => x - 10);\n        break;\n      case 'ArrowRight':\n        this.initialX.update((x) => x + 10);\n        break;\n      case 'ArrowUp':\n        this.initialY.update((y) => y - 10);\n        break;\n      case 'ArrowDown':\n        this.initialY.update((y) => y + 10);\n        break;\n    }\n  }\n\n  keybordAction(key: string): void {\n    switch (key) {\n      case 'ArrowLeft':\n        this.rotate(1);\n        break;\n      case 'ArrowRight':\n        this.rotate(-1);\n        break;\n      case 'ArrowUp':\n        this.zoomIn();\n        break;\n      case 'ArrowDown':\n        this.zoomOut();\n        break;\n    }\n  }\n\n  startDrag(event: MouseEvent | TouchEvent): void {\n    event.preventDefault();\n    this.isDragging.set(true);\n    const clientX = event instanceof MouseEvent ? event.clientX : event.touches[0].clientX;\n    const clientY = event instanceof MouseEvent ? event.clientY : event.touches[0].clientY;\n    this.startX.set(clientX - this.initialX());\n    this.startY.set(clientY - this.initialY());\n    this.image().nativeElement.style.cursor = 'grabbing';\n  }\n\n  drag(event: MouseEvent | TouchEvent): void {\n    if (this.isDragging()) {\n      event.preventDefault();\n      const clientX = event instanceof MouseEvent ? event.clientX : event.touches[0].clientX;\n      const clientY = event instanceof MouseEvent ? event.clientY : event.touches[0].clientY;\n      this.initialX.set(clientX - this.startX());\n      this.initialY.set(clientY - this.startY());\n    }\n  }\n\n  endDrag(): void {\n    this.isDragging.set(false);\n    this.image().nativeElement.style.cursor = 'grab';\n  }\n\n  onKeyDown($event: KeyboardEvent) {\n    // console.log($event);\n  }\n\n  onScroll(event: WheelEvent): void {\n    const delta = event.deltaY;\n    delta > 0 ? this.zoomOut() : this.zoomIn();\n  }\n}\n","@if (isLoading()) {\n<yuv-progress />\n}\n<div class=\"image_wrapper\">\n  <div class=\"image-container\">\n    <img\n      #image\n      tabindex=\"0\"\n      [src]=\"imageSrc()\"\n      alt=\"Image Viewer\"\n      (dblclick)=\"reset()\"\n      (mousedown)=\"startDrag($event)\"\n      (mousemove)=\"drag($event)\"\n      (mouseup)=\"endDrag()\"\n      (mouseleave)=\"endDrag()\"\n      (touchstart)=\"startDrag($event)\"\n      (touchmove)=\"drag($event)\"\n      (touchend)=\"endDrag()\"\n      (wheel)=\"onScroll($event)\"\n    />\n  </div>\n  @if (!metadata()?.disableMenu) {\n  <div class=\"preview_actions\">\n    <div class=\"actions\">\n      @for (actionButton of actionButtons(); track $index) {\n      <button\n        #actionButton\n        [className]=\"actionButton.className\"\n        (click)=\"actionButton.clickAction()\"\n        [attr.aria-label]=\"actionButton.ariaLabel\"\n        title=\"{{ actionButton.ariaLabel }}\"\n        (keydown)=\"actionButton.keyAction($event, $index)\"\n        [innerHTML]=\"actionButton.icon\"\n      ></button>\n      }\n    </div>\n  </div>\n  }\n</div>\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  DestroyRef,\n  ElementRef,\n  inject,\n  input,\n  output,\n  signal,\n  viewChild,\n  afterNextRender\n} from '@angular/core';\nimport { EmlAttachment } from '../model';\n\ninterface DisplayItem {\n  trackId: string;\n  attachment: EmlAttachment;\n  isClone: boolean;\n}\n\n@Component({\n  selector: 'yuv-attachment-carousel',\n  templateUrl: './attachment-carousel.component.html',\n  styleUrl: './attachment-carousel.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AttachmentCarouselComponent implements AfterViewInit {\n  attachments = input.required<EmlAttachment[]>();\n  infinite = input(false);\n  attachmentClick = output<EmlAttachment>();\n\n  readonly needsCarousel = signal(false);\n\n  readonly displayItems = computed<DisplayItem[]>(() => {\n    const items = this.attachments();\n    if (!this.needsCarousel() || !this.infinite()) {\n      return items.map((att, i) => ({ trackId: `real-${i}`, attachment: att, isClone: false }));\n    }\n    const clonesBefore: DisplayItem[] = items.map((att, i) => ({ trackId: `clone-before-${i}`, attachment: att, isClone: true }));\n    const real: DisplayItem[] = items.map((att, i) => ({ trackId: `real-${i}`, attachment: att, isClone: false }));\n    const clonesAfter: DisplayItem[] = items.map((att, i) => ({ trackId: `clone-after-${i}`, attachment: att, isClone: true }));\n    return [...clonesBefore, ...real, ...clonesAfter];\n  });\n\n  readonly scrollContainer = viewChild.required<ElementRef<HTMLElement>>('scrollContainer');\n  readonly startSentinel = viewChild<ElementRef<HTMLElement>>('startSentinel');\n  readonly endSentinel = viewChild<ElementRef<HTMLElement>>('endSentinel');\n\n  readonly #destroyRef = inject(DestroyRef);\n  #observer: IntersectionObserver | null = null;\n  #resizeObserver: ResizeObserver | null = null;\n  #isRepositioning = false;\n\n  // Drag state\n  #isDragging = false;\n  #dragStartX = 0;\n  #dragScrollLeft = 0;\n  #hasDragged = false;\n\n  constructor() {\n    afterNextRender(() => this.#checkOverflow());\n\n    this.#destroyRef.onDestroy(() => {\n      this.#observer?.disconnect();\n      this.#resizeObserver?.disconnect();\n    });\n  }\n\n  ngAfterViewInit(): void {\n    const el = this.scrollContainer().nativeElement;\n    this.#resizeObserver = new ResizeObserver(() => this.#checkOverflow());\n    this.#resizeObserver.observe(el);\n  }\n\n  #checkOverflow(): void {\n    const el = this.scrollContainer().nativeElement;\n    const overflows = el.scrollWidth > el.clientWidth + 1;\n    const was = this.needsCarousel();\n\n    if (overflows && !was) {\n      this.needsCarousel.set(true);\n      if (this.infinite()) {\n        // Wait for clones to render, then setup\n        requestAnimationFrame(() => {\n          this.#scrollToRealStart();\n          this.#setupIntersectionObserver();\n        });\n      }\n    } else if (!overflows && was) {\n      this.needsCarousel.set(false);\n      this.#observer?.disconnect();\n      this.#observer = null;\n    }\n  }\n\n  #scrollToRealStart(): void {\n    const el = this.scrollContainer().nativeElement;\n    const realWidth = this.#getRealSectionWidth();\n    el.style.scrollSnapType = 'none';\n    el.style.scrollBehavior = 'auto';\n    el.scrollLeft = realWidth;\n    el.style.scrollBehavior = '';\n    el.style.scrollSnapType = '';\n  }\n\n  #getRealSectionWidth(): number {\n    const el = this.scrollContainer().nativeElement;\n    const items = this.attachments();\n    const chips = el.querySelectorAll('.attachment-chip');\n    // Real items are in the middle third\n    const startIdx = items.length;\n    const endIdx = startIdx + items.length;\n    if (chips.length < endIdx) return 0;\n\n    const firstReal = chips[startIdx] as HTMLElement;\n    const lastReal = chips[endIdx - 1] as HTMLElement;\n    return lastReal.offsetLeft + lastReal.offsetWidth - firstReal.offsetLeft;\n  }\n\n  #setupIntersectionObserver(): void {\n    this.#observer?.disconnect();\n\n    const root = this.scrollContainer().nativeElement;\n    this.#observer = new IntersectionObserver((entries) => this.#onSentinelIntersection(entries), { root, threshold: 0 });\n\n    const start = this.startSentinel()?.nativeElement;\n    const end = this.endSentinel()?.nativeElement;\n    if (start) this.#observer.observe(start);\n    if (end) this.#observer.observe(end);\n  }\n\n  #onSentinelIntersection(entries: IntersectionObserverEntry[]): void {\n    if (this.#isRepositioning) return;\n\n    for (const entry of entries) {\n      if (!entry.isIntersecting) continue;\n\n      const el = this.scrollContainer().nativeElement;\n      const realWidth = this.#getRealSectionWidth();\n      if (realWidth === 0) continue;\n\n      this.#isRepositioning = true;\n      this.#observer?.disconnect();\n\n      el.style.scrollSnapType = 'none';\n      el.style.scrollBehavior = 'auto';\n\n      const startEl = this.startSentinel()?.nativeElement;\n      if (entry.target === startEl) {\n        // Scrolled into the prepended clones → jump forward\n        el.scrollLeft += realWidth;\n      } else {\n        // Scrolled into the appended clones → jump backward\n        el.scrollLeft -= realWidth;\n      }\n\n      el.style.scrollBehavior = '';\n      el.style.scrollSnapType = '';\n\n      // Re-setup observer after reposition\n      requestAnimationFrame(() => {\n        this.#isRepositioning = false;\n        this.#setupIntersectionObserver();\n      });\n    }\n  }\n\n  protected onScroll(): void {\n    // Intentionally left for future scroll-state tracking if needed\n  }\n\n  protected onMouseDown(event: MouseEvent): void {\n    // Only handle primary button\n    if (event.button !== 0) return;\n    const el = this.scrollContainer().nativeElement;\n    this.#isDragging = true;\n    this.#hasDragged = false;\n    this.#dragStartX = event.clientX;\n    this.#dragScrollLeft = el.scrollLeft;\n    el.style.scrollBehavior = 'auto';\n    el.style.cursor = 'grabbing';\n    el.style.userSelect = 'none';\n  }\n\n  protected onMouseMove(event: MouseEvent): void {\n    if (!this.#isDragging) return;\n    const dx = event.clientX - this.#dragStartX;\n    if (Math.abs(dx) > 3) {\n      this.#hasDragged = true;\n    }\n    this.scrollContainer().nativeElement.scrollLeft = this.#dragScrollLeft - dx;\n  }\n\n  protected onMouseUp(): void {\n    if (!this.#isDragging) return;\n    const el = this.scrollContainer().nativeElement;\n    this.#isDragging = false;\n    el.style.scrollBehavior = '';\n    el.style.cursor = '';\n    el.style.userSelect = '';\n  }\n\n  protected onChipClick(event: MouseEvent, attachment: EmlAttachment): void {\n    // Suppress click if user was dragging\n    if (this.#hasDragged) {\n      event.preventDefault();\n      return;\n    }\n    this.attachmentClick.emit(attachment);\n  }\n\n  protected scroll(direction: 'left' | 'right'): void {\n    const el = this.scrollContainer().nativeElement;\n    const scrollAmount = el.clientWidth * 0.8;\n    el.scrollBy({\n      left: direction === 'left' ? -scrollAmount : scrollAmount,\n      behavior: 'smooth'\n    });\n  }\n\n  protected formatSize(bytes: number): string {\n    if (bytes < 1024) return `${bytes} B`;\n    if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n    return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n  }\n}\n","<div class=\"carousel-wrapper\">\n  @if (needsCarousel()) {\n  <button class=\"carousel-arrow carousel-arrow--left\" (click)=\"scroll('left')\" aria-label=\"Scroll left\">\n    <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n      <path d=\"M15 18l-6-6 6-6\" />\n    </svg>\n  </button>\n  }\n\n  <div class=\"carousel-track\" #scrollContainer\n       (scroll)=\"onScroll()\"\n       (mousedown)=\"onMouseDown($event)\"\n       (mousemove)=\"onMouseMove($event)\"\n       (mouseup)=\"onMouseUp()\"\n       (mouseleave)=\"onMouseUp()\">\n    @if (needsCarousel() && infinite()) {\n    <div class=\"sentinel\" #startSentinel></div>\n    }\n\n    @for (item of displayItems(); track item.trackId) {\n    <button class=\"attachment-chip\"\n            [attr.aria-hidden]=\"item.isClone || null\"\n            [tabindex]=\"item.isClone ? -1 : 0\"\n            (click)=\"onChipClick($event, item.attachment)\"\n            [title]=\"item.attachment.filename\">\n      <svg class=\"att-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n        <path d=\"m21.44 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l8.57-8.57A4 4 0 1 1 18 8.84l-8.59 8.57a2 2 0 0 1-2.83-2.83l8.49-8.48\" />\n      </svg>\n      <span class=\"att-name\">{{ item.attachment.filename }}</span>\n      <span class=\"att-size\">{{ formatSize(item.attachment.size) }}</span>\n    </button>\n    }\n\n    @if (needsCarousel() && infinite()) {\n    <div class=\"sentinel\" #endSentinel></div>\n    }\n  </div>\n\n  @if (needsCarousel()) {\n  <button class=\"carousel-arrow carousel-arrow--right\" (click)=\"scroll('right')\" aria-label=\"Scroll right\">\n    <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n      <path d=\"M9 18l6-6-6-6\" />\n    </svg>\n  </button>\n  }\n</div>\n","import { Type } from '@angular/core';\n\nexport type Viewer = { mimeType: string[]; type: KeyTypes };\n\nexport type KeyTypes = 'VIDEO' | 'TEXT' | 'EMAIL' | 'ERROR' | 'IMAGE' | 'MONACO' | 'MONACO_DIRECT' | 'PDF' | 'OFFICE' | 'OPENOFFICE'| Uppercase<string>;\n\nexport type TypedComponents = {\n  [K in KeyTypes]: { [key in K]: Type<any> };\n}[KeyTypes];\n\nexport const defaultViewers: Array<Viewer> = [\n  {\n    mimeType: [\n      'application/json',\n      'text/javascript',\n      'application/javascript',\n      'application/xml',\n      'text/typescript',\n      'text/xml',\n      'text/html',\n      'text/plain',\n      'text/java',\n      'text/markdown',\n      'text/x-web-markdown',\n      'text/x-markdown'\n    ],\n    type: 'MONACO_DIRECT'\n  },\n  {\n    mimeType: ['audio/mp3', 'audio/webm', 'audio/ogg', 'audio/mpeg'],\n    type: 'AUDIO'\n  },\n  {\n    mimeType: ['video/mp4', 'video/webm', 'video/ogg', 'application/ogg'],\n    type: 'VIDEO'\n  },\n  {\n    // TODO: add 'image/tiff' once backend supports it\n    mimeType: ['image/tiff', 'image/jpeg', 'image/png', 'image/apng', 'image/gif', 'image/svg+xml', 'image/webp'],\n    type: 'IMAGE'\n  },\n  {\n    mimeType: ['message/rfc822', 'application/vnd.ms-outlook'],\n    type: 'EMAIL'\n  },\n  {\n    mimeType: ['application/pdf'],\n    type: 'PDF'\n  },\n  {\n    mimeType: [\n      'application/msword',\n      'application/vnd.ms-excel',\n      'application/vnd.ms-powerpoint',\n      'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n      'application/vnd.openxmlformats-officedocument.wordprocessingml.template',\n      'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n      'application/vnd.openxmlformats-officedocument.spreadsheetml.template',\n      'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n      'application/vnd.openxmlformats-officedocument.presentationml.template',\n      'application/vnd.openxmlformats-officedocument.presentationml.slideshow',\n      'application/vnd.ms-word.document.macroEnabled.12',\n      'application/vnd.ms-word.template.macroEnabled.12',\n      'application/vnd.ms-excel.sheet.macroEnabled.12',\n      'application/vnd.ms-excel.template.macroEnabled.12',\n      'application/vnd.ms-excel.addin.macroEnabled.12',\n      'application/vnd.ms-excel.sheet.binary.macroEnabled.12',\n      'application/vnd.ms-powerpoint.addin.macroEnabled.12',\n      'application/vnd.ms-powerpoint.presentation.macroEnabled.12',\n      'application/vnd.ms-powerpoint.template.macroEnabled.12',\n      'application/vnd.ms-powerpoint.slideshow.macroEnabled.12'\n    ],\n    type: 'OFFICE'\n  },\n  {\n    mimeType: ['application/vnd.oasis.opendocument.text', 'application/vnd.oasis.opendocument.presentation', 'application/vnd.oasis.opendocument.spreadsheet'],\n    type: 'OPENOFFICE'\n  },\n  {\n    mimeType: ['application/x-os-invoice-xml'],\n    type: 'XRECHNUNG'\n  },\n  {\n    mimeType: [],\n    // errro:true,\n    type: 'ERROR'\n  }\n];\n","import { Injectable, signal, Type } from '@angular/core';\nimport { componentsMapper } from '../directives/viewer.directive';\nimport { defaultViewers, KeyTypes, TypedComponents, Viewer } from './default-mediatype.mapper';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class MediaViewerService {\n  defaultViewers = signal(defaultViewers);\n  defaultComponents = signal(componentsMapper);\n\n  #viewerWidth = signal<number>(0);\n  #viewerHeight = signal<number>(0);\n\n  width = this.#viewerWidth.asReadonly();\n  height = this.#viewerHeight.asReadonly();\n\n  /** Returns the viewer type key for a given MIME type, falling back to `'ERROR'` if no match is found. */\n  getComponentType(type: string): KeyTypes {\n    const viewer = this.defaultViewers().find((v) => v.mimeType.map((type) => type.toLowerCase()).includes(type.toLowerCase()));\n    return viewer ? viewer.type : 'ERROR';\n  }\n\n  /**\n   * Adds one or more custom viewer mappings to the viewer list.\n   * Any MIME types present in the incoming viewer(s) are first removed from existing entries\n   * so that the new mapping takes precedence without duplicates.\n   * Empty entries are pruned, except for the `ERROR` fallback entry.\n   */\n  setViewers(customViewer: Viewer | Viewer[]) {\n    const incoming = Array.isArray(customViewer) ? customViewer : [customViewer];\n    const newMimeTypes = new Set(incoming.flatMap((v) => v.mimeType.map((m) => m.toLowerCase())));\n\n    this.defaultViewers.update((viewers) => [\n      ...viewers\n        .map((v) => ({ ...v, mimeType: v.mimeType.filter((m) => !newMimeTypes.has(m.toLowerCase())) }))\n        .filter((v) => v.mimeType.length > 0 || v.type === 'ERROR'),\n      ...incoming\n    ]);\n  }\n\n  /** Resets the viewer list to the original default mappings. */\n  resetViewers() {\n    this.defaultViewers.update(() => defaultViewers);\n  }\n\n  /** Registers one or more custom viewer components, keyed by their viewer type. */\n  setCustomViewer(components: TypedComponents | TypedComponents[]) {\n    (Array.isArray(components) ? components : [components]).forEach((component) => this.defaultComponents.update((comp) => ({ ...comp, ...component })));\n  }\n\n  /**\n   * Convenience method to register both a MIME-type mapping and its corresponding component in one call.\n   * Equivalent to calling `setViewers()` followed by `setCustomViewer()`.\n   */\n  extendViewer<T = undefined>(customViewer: Viewer, component: Type<T>) {\n    this.setViewers(customViewer);\n    this.setCustomViewer([{ [customViewer.type]: component }]);\n  }\n\n  /** Stores the current viewer container dimensions used for layout calculations. */\n  setViewerSeize(width: number, height: number) {\n    this.#viewerHeight.set(height);\n    this.#viewerWidth.set(width);\n  }\n\n  /** Extracts and returns the lowercase file extension from a filename, or an empty string if none is found. */\n  fileExtension(fileName: string | null): string {\n    if (!fileName) return '';\n    const extensionPattern = /\\.([a-zA-Z0-9]+)$/;\n    const match = fileName.match(extensionPattern);\n    return match ? match[1].toLowerCase() : '';\n  }\n\n  /** Resolves the hostname for Office viewer URLs, using the configured Office path when running on localhost. */\n  #getHostName(officeEnv: { path: string; reloadOffset: number }): string {\n    const { hostname, protocol } = window.location;\n    return hostname !== 'localhost' ? protocol + hostname : officeEnv ? officeEnv.path : '';\n  }\n\n  // TODO: find better way to get the path\n  /** Builds the full content URL for a DMS object, optionally targeting a specific version. */\n  srcPath(id: string, officeEnv: { path: string; reloadOffset: number }, version: number | undefined) {\n    const base = this.#getHostName(officeEnv) || window.location.origin;\n    const segments = ['api', 'dms', 'objects', encodeURIComponent(id)];\n    version != null && segments.push('versions', String(version));\n    segments.push('contents', 'file');\n    const path = '/' + segments.join('/');\n    return new URL(path, base.endsWith('/') ? base : base + '/').toString();\n  }\n}\n","import { AfterViewInit, ChangeDetectionStrategy, Component, ComponentRef, ViewChild, ViewContainerRef, inject } from '@angular/core';\nimport { DIALOG_DATA, DialogRef } from '@angular/cdk/dialog';\nimport { EmlAttachment } from '../model';\nimport { MediaViewerService } from '../../../services/media-viewer.service';\n\n@Component({\n  selector: 'yuv-attachment-preview',\n  template: `\n    <div class=\"preview-backdrop\" (click)=\"close()\"></div>\n    <div class=\"preview-panel\">\n      <div class=\"preview-header\">\n        <span class=\"preview-title\" [title]=\"data.filename\">{{ data.filename }}</span>\n        <div class=\"preview-actions\">\n          <button class=\"preview-btn\" (click)=\"download()\" aria-label=\"Download\">\n            <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n              <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n              <polyline points=\"7 10 12 15 17 10\" />\n              <line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\" />\n            </svg>\n          </button>\n          <button class=\"preview-btn\" (click)=\"close()\" aria-label=\"Close\">\n            <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n              <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n              <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n            </svg>\n          </button>\n        </div>\n      </div>\n      <div class=\"preview-body\">\n        <ng-container #viewerHost />\n      </div>\n    </div>\n  `,\n  styles: [\n    `\n      :host {\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        position: fixed;\n        inset: 0;\n        z-index: 1000;\n      }\n\n      .preview-backdrop {\n        position: absolute;\n        inset: 0;\n        background: rgba(0, 0, 0, 0.6);\n      }\n\n      .preview-panel {\n        position: relative;\n        display: flex;\n        flex-direction: column;\n        width: 90vw;\n        height: 85vh;\n        max-width: 1200px;\n        background: var(--ymv-surface-container, #fff);\n        border-radius: var(--ymv-corner-m, 8px);\n        overflow: hidden;\n        box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);\n      }\n\n      .preview-header {\n        display: flex;\n        align-items: center;\n        justify-content: space-between;\n        padding: 12px 16px;\n        border-bottom: 1px solid var(--ymv-outline-variant, #e0e0e0);\n        gap: 12px;\n      }\n\n      .preview-title {\n        font: var(--ymv-font-body, 14px/1.4 sans-serif);\n        font-weight: 600;\n        color: var(--ymv-text-color, #1a1a1a);\n        overflow: hidden;\n        text-overflow: ellipsis;\n        white-space: nowrap;\n        min-width: 0;\n      }\n\n      .preview-actions {\n        display: flex;\n        gap: 4px;\n        flex-shrink: 0;\n      }\n\n      .preview-btn {\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        width: 32px;\n        height: 32px;\n        border: none;\n        border-radius: var(--ymv-corner-s, 4px);\n        background: transparent;\n        color: var(--ymv-text-color, #1a1a1a);\n        cursor: pointer;\n        transition: background 0.15s;\n\n        svg {\n          width: 18px;\n          height: 18px;\n        }\n\n        &:hover {\n          background: var(--ymv-hover-background, rgba(0, 0, 0, 0.08));\n        }\n      }\n\n      .preview-body {\n        flex: 1;\n        overflow: auto;\n        min-height: 0;\n      }\n\n      .preview-body yuv-media-viewer {\n        display: block;\n        width: 100%;\n        height: 100%;\n      }\n    `\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AttachmentPreviewComponent implements AfterViewInit {\n  readonly #dialogRef = inject(DialogRef);\n  readonly #mediaViewerService = inject(MediaViewerService);\n  readonly data: EmlAttachment = inject(DIALOG_DATA);\n\n  @ViewChild('viewerHost', { read: ViewContainerRef }) viewerHost!: ViewContainerRef;\n\n  async ngAfterViewInit(): Promise<void> {\n    const viewerType = this.#mediaViewerService.getComponentType(this.data.contentType);\n\n    const { YuvMediaViewerComponent } = await import('../../../container/component/default/media-viewer.component');\n    const ref: ComponentRef<any> = this.viewerHost.createComponent(YuvMediaViewerComponent);\n    ref.setInput('id', this.data.filename);\n    ref.setInput('type', viewerType === 'OFFICE' ? 'error' : this.data.contentType);\n    ref.setInput('src', this.data.dataUrl);\n  }\n\n  close(): void {\n    this.#dialogRef.close();\n  }\n\n  download(): void {\n    const a = document.createElement('a');\n    a.href = this.data.dataUrl;\n    a.download = this.data.filename;\n    a.click();\n  }\n}\n","import { Injectable } from '@angular/core';\nimport type { MsgReader, FieldsData } from '@kenjiuno/msgreader-web-ng';\nimport { EmlAttachment, EmlHeaders, ParsedEml } from '../model';\n\n@Injectable({ providedIn: 'root' })\nexport class MsgParserService {\n  #modulePromise?: Promise<typeof import('@kenjiuno/msgreader-web-ng')>;\n\n  async parse(buffer: ArrayBuffer): Promise<ParsedEml> {\n    this.#modulePromise ??= import('@kenjiuno/msgreader-web-ng');\n    const msgReaderModule = (await this.#modulePromise) as unknown as {\n      default?: new (buffer: ArrayBuffer) => MsgReader;\n      MsgReader?: new (buffer: ArrayBuffer) => MsgReader;\n    };\n    const MsgReaderCtor = msgReaderModule.default ?? msgReaderModule.MsgReader;\n    if (!MsgReaderCtor) {\n      throw new Error('Unable to resolve MsgReader constructor');\n    }\n    const reader = new MsgReaderCtor(buffer);\n    const msg = reader.getFileData();\n\n    return {\n      headers: this.extractHeaders(msg),\n      textBody: msg.body ?? null,\n      htmlBody: this.extractHtml(msg),\n      attachments: this.extractAttachments(reader, msg)\n    };\n  }\n\n  private extractHeaders(msg: FieldsData): EmlHeaders {\n    return {\n      from: this.formatAddress(msg.senderName, msg.senderSmtpAddress ?? msg.senderEmail),\n      to: this.formatRecipients(msg, 'to'),\n      cc: this.formatRecipients(msg, 'cc'),\n      bcc: this.formatRecipients(msg, 'bcc'),\n      subject: msg.subject ?? '',\n      date: msg.clientSubmitTime ?? msg.messageDeliveryTime ?? msg.creationTime ?? '',\n      replyTo: '',\n      messageId: ''\n    };\n  }\n\n  private extractHtml(msg: FieldsData): string | null {\n    if (msg.bodyHtml) return msg.bodyHtml;\n    if (msg.html) {\n      try {\n        return new TextDecoder('utf-8').decode(msg.html);\n      } catch {\n        return null;\n      }\n    }\n    return null;\n  }\n\n  private formatAddress(name?: string, email?: string): string {\n    if (name && email) return `${name} <${email}>`;\n    return name ?? email ?? '';\n  }\n\n  private formatRecipients(msg: FieldsData, type: 'to' | 'cc' | 'bcc'): string {\n    return (msg.recipients ?? [])\n      .filter((r: any) => r.recipType === type)\n      .map((r: any) => this.formatAddress(r.name, r.smtpAddress ?? r.email))\n      .join(', ');\n  }\n\n  private extractAttachments(reader: MsgReader, msg: FieldsData): EmlAttachment[] {\n    return (msg.attachments ?? [])\n      .filter((att: any) => !att.attachmentHidden)\n      .map((att: any) => {\n        const data = reader.getAttachment(att);\n        const bytes = data.content;\n        const mimeType = this.guessMimeType(att.fileName ?? att.fileNameShort ?? '');\n        const base64 = this.bytesToBase64(bytes);\n        const contentId = att.pidContentId || undefined;\n        return {\n          filename: att.fileName ?? att.fileNameShort ?? 'attachment',\n          contentType: mimeType,\n          size: bytes.length,\n          dataUrl: `data:${mimeType};base64,${base64}`,\n          contentId\n        };\n      });\n  }\n\n  private bytesToBase64(bytes: Uint8Array): string {\n    let binary = '';\n    bytes.forEach((b) => (binary += String.fromCharCode(b)));\n    return btoa(binary);\n  }\n\n  private guessMimeType(filename: string): string {\n    const ext = filename.split('.').pop()?.toLowerCase() ?? '';\n    const map: Record<string, string> = {\n      pdf: 'application/pdf',\n      png: 'image/png',\n      jpg: 'image/jpeg',\n      jpeg: 'image/jpeg',\n      gif: 'image/gif',\n      svg: 'image/svg+xml',\n      webp: 'image/webp',\n      txt: 'text/plain',\n      html: 'text/html',\n      htm: 'text/html',\n      xml: 'application/xml',\n      json: 'application/json',\n      zip: 'application/zip',\n      doc: 'application/msword',\n      docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n      xls: 'application/vnd.ms-excel',\n      xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n      ppt: 'application/vnd.ms-powerpoint',\n      pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n      msg: 'application/vnd.ms-outlook',\n      odt: 'application/vnd.oasis.opendocument.text',\n      odp: 'application/vnd.oasis.opendocument.presentation',\n      ods: 'application/vnd.oasis.opendocument.spreadsheet',\n      eml: 'message/rfc822'\n    };\n    return map[ext] ?? 'application/octet-stream';\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { ParsedEml, EmlHeaders } from '../model';\n\n@Injectable({ providedIn: 'root' })\nexport class EmlParserService {\n  parse(raw: string): ParsedEml {\n    const { headerSection, bodySection } = this.splitHeadersBody(raw);\n    const headers = this.parseHeaders(headerSection);\n    const result: ParsedEml = {\n      headers: this.extractCommonHeaders(headers),\n      textBody: null,\n      htmlBody: null,\n      attachments: []\n    };\n\n    const contentType = headers.get('content-type') ?? 'text/plain';\n    const transferEncoding = (headers.get('content-transfer-encoding') ?? '').toLowerCase();\n    this.processPart(bodySection, contentType, transferEncoding, headers, result);\n\n    return result;\n  }\n\n  private splitHeadersBody(text: string): { headerSection: string; bodySection: string } {\n    const match = text.match(/\\r?\\n\\r?\\n/);\n    if (!match || match.index === undefined) return { headerSection: text, bodySection: '' };\n    return {\n      headerSection: text.slice(0, match.index),\n      bodySection: text.slice(match.index + match[0].length)\n    };\n  }\n\n  private parseHeaders(headerSection: string): Map<string, string> {\n    const unfolded = headerSection.replace(/\\r?\\n[ \\t]+/g, ' ');\n    const map = new Map<string, string>();\n    for (const line of unfolded.split(/\\r?\\n/)) {\n      const colonIdx = line.indexOf(':');\n      if (colonIdx > 0) {\n        const key = line.slice(0, colonIdx).toLowerCase().trim();\n        const value = line.slice(colonIdx + 1).trim();\n        if (!map.has(key)) map.set(key, value);\n      }\n    }\n    return map;\n  }\n\n  private extractCommonHeaders(headers: Map<string, string>): EmlHeaders {\n    return {\n      from: this.decodeHeader(headers.get('from') ?? ''),\n      to: this.decodeHeader(headers.get('to') ?? ''),\n      cc: this.decodeHeader(headers.get('cc') ?? ''),\n      bcc: this.decodeHeader(headers.get('bcc') ?? ''),\n      subject: this.decodeHeader(headers.get('subject') ?? ''),\n      date: headers.get('date') ?? '',\n      replyTo: this.decodeHeader(headers.get('reply-to') ?? ''),\n      messageId: headers.get('message-id') ?? ''\n    };\n  }\n\n  private processPart(body: string, contentType: string, transferEncoding: string, headers: Map<string, string>, result: ParsedEml): void {\n    const ctLower = contentType.toLowerCase();\n    const disposition = headers.get('content-disposition') ?? '';\n    const dispositionLower = disposition.toLowerCase();\n    const isAttachment =\n      dispositionLower.startsWith('attachment') ||\n      (dispositionLower.startsWith('inline') && !!this.getParam(disposition, 'filename')) ||\n      (!!this.getParam(contentType, 'name') && !ctLower.startsWith('text/'));\n\n    if (ctLower.startsWith('multipart/')) {\n      const boundary = this.getParam(contentType, 'boundary');\n      if (boundary) {\n        for (const part of this.splitMultipart(body, boundary)) {\n          const { headerSection, bodySection } = this.splitHeadersBody(part);\n          const partHeaders = this.parseHeaders(headerSection);\n          const partCt = partHeaders.get('content-type') ?? 'text/plain';\n          const partEnc = (partHeaders.get('content-transfer-encoding') ?? '').toLowerCase();\n          this.processPart(bodySection, partCt, partEnc, partHeaders, result);\n        }\n      }\n    } else if (isAttachment) {\n      const filename = this.getParam(disposition, 'filename') ?? this.getParam(contentType, 'name') ?? 'attachment';\n      const mimeType = ctLower.split(';')[0].trim();\n      const base64Data =\n        transferEncoding === 'base64'\n          ? body.replace(/\\s/g, '')\n          : this.bytesToBase64(transferEncoding === 'quoted-printable' ? this.decodeQuotedPrintableToBytes(body) : new TextEncoder().encode(body));\n      const contentId = headers.get('content-id')?.replace(/^<|>$/g, '') || undefined;\n      result.attachments.push({\n        filename: this.decodeHeader(filename),\n        contentType: mimeType,\n        size: Math.round(base64Data.length * 0.75),\n        dataUrl: `data:${mimeType};base64,${base64Data}`,\n        contentId\n      });\n    } else if (ctLower.startsWith('text/html')) {\n      if (!result.htmlBody) {\n        const charset = this.getParam(contentType, 'charset') ?? 'utf-8';\n        result.htmlBody = this.decodeBody(body, transferEncoding, charset);\n      }\n    } else if (ctLower.startsWith('text/plain')) {\n      if (!result.textBody) {\n        const charset = this.getParam(contentType, 'charset') ?? 'utf-8';\n        result.textBody = this.decodeBody(body, transferEncoding, charset);\n      }\n    }\n  }\n\n  private splitMultipart(body: string, boundary: string): string[] {\n    const delimiter = '--' + boundary;\n    const closingDelimiter = delimiter + '--';\n    const parts: string[] = [];\n    const lines = body.split(/\\r?\\n/);\n    let current: string[] = [];\n    let inPart = false;\n\n    for (const line of lines) {\n      if (line.trimEnd() === closingDelimiter) {\n        if (inPart && current.length) parts.push(current.join('\\n'));\n        break;\n      } else if (line.trimEnd() === delimiter) {\n        if (inPart && current.length) parts.push(current.join('\\n'));\n        current = [];\n        inPart = true;\n      } else if (inPart) {\n        current.push(line);\n      }\n    }\n\n    // Handle missing closing delimiter\n    if (inPart && current.length) parts.push(current.join('\\n'));\n\n    return parts;\n  }\n\n  private decodeBody(body: string, encoding: string, charset = 'utf-8'): string {\n    const decode = (bytes: Uint8Array): string => {\n      try {\n        return new TextDecoder(charset).decode(bytes);\n      } catch {\n        return new TextDecoder('utf-8').decode(bytes);\n      }\n    };\n\n    switch (encoding) {\n      case 'base64':\n        return decode(this.base64ToBytes(body.replace(/\\s/g, '')));\n      case 'quoted-printable':\n        return decode(this.decodeQuotedPrintableToBytes(body));\n      default:\n        return body;\n    }\n  }\n\n  /** Decodes a quoted-printable string to raw bytes (preserving multi-byte sequences). */\n  private decodeQuotedPrintableToBytes(body: string): Uint8Array {\n    const normalized = body.replace(/=\\r?\\n/g, ''); // remove soft line breaks\n    const result: number[] = [];\n    let i = 0;\n    while (i < normalized.length) {\n      if (normalized[i] === '=' && i + 2 < normalized.length) {\n        const hex = normalized.slice(i + 1, i + 3);\n        if (/^[0-9A-Fa-f]{2}$/.test(hex)) {\n          result.push(parseInt(hex, 16));\n          i += 3;\n          continue;\n        }\n      }\n      result.push(normalized.charCodeAt(i) & 0xff);\n      i++;\n    }\n    return new Uint8Array(result);\n  }\n\n  private base64ToBytes(b64: string): Uint8Array {\n    const binary = atob(b64);\n    const bytes = new Uint8Array(binary.length);\n    for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);\n    return bytes;\n  }\n\n  private bytesToBase64(bytes: Uint8Array): string {\n    let binary = '';\n    bytes.forEach((b) => (binary += String.fromCharCode(b)));\n    return btoa(binary);\n  }\n\n  private getParam(value: string, param: string): string | null {\n    const escaped = param.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n    const regex = new RegExp('(?:^|;)\\\\s*' + escaped + '\\\\s*=\\\\s*(?:\"((?:[^\"\\\\\\\\]|\\\\\\\\.)*)\"|([^;\\\\s]*))', 'i');\n    const match = value.match(regex);\n    if (!match) return null;\n    return match[1] !== undefined ? match[1].replace(/\\\\(.)/g, '$1') : match[2];\n  }\n\n  decodeHeader(value: string): string {\n    return value.replace(/=\\?([^?]+)\\?([BbQq])\\?([^?]*)\\?=/g, (_, charset, encoding, text) => {\n      try {\n        let bytes: Uint8Array;\n        if (encoding.toUpperCase() === 'B') {\n          bytes = this.base64ToBytes(text);\n        } else {\n          const qDecoded = text.replace(/_/g, ' ').replace(/=([0-9A-Fa-f]{2})/g, (_m: string, hex: string) => String.fromCharCode(parseInt(hex, 16)));\n          bytes = new Uint8Array(qDecoded.length);\n          for (let i = 0; i < qDecoded.length; i++) bytes[i] = qDecoded.charCodeAt(i) & 0xff;\n        }\n        return new TextDecoder(charset).decode(bytes);\n      } catch {\n        return value;\n      }\n    });\n  }\n}\n","import { Dialog } from '@angular/cdk/dialog';\nimport { HttpClient } from '@angular/common/http';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, output, signal } from '@angular/core';\nimport { rxResource } from '@angular/core/rxjs-interop';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { map, of } from 'rxjs';\nimport { ProgressComponent } from '../../helper/progress.component';\nimport { EmailMetadata } from '../../models';\nimport { AbstractViewerComponent } from '../abstract/abstract.viewer.component';\nimport { AttachmentCarouselComponent } from './attachment-carousel/attachment-carousel.component';\nimport { AttachmentPreviewComponent } from './attachment-preview/attachment-preview.component';\nimport { EmlAttachment, ParsedEml } from './model';\nimport { EmlParserService, MsgParserService } from './services';\n\n@Component({\n  selector: 'yuv-mail',\n  imports: [ProgressComponent, TranslatePipe, AttachmentCarouselComponent],\n  templateUrl: './mail.component.html',\n  styleUrl: './mail.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MailComponent extends AbstractViewerComponent<EmailMetadata> {\n  readonly #parser = inject(EmlParserService);\n  readonly #msgParser = inject(MsgParserService);\n  readonly #sanitizer = inject(DomSanitizer);\n  readonly #http = inject(HttpClient);\n  readonly #dialog = inject(Dialog);\n  busyChange = output<boolean>();\n\n  protected readonly parsedEmail = signal<ParsedEml | null>(null);\n  protected readonly activeTab = signal<'html' | 'text'>('html');\n  // protected readonly isDragging = signal(false);\n\n  protected readonly fileAttachments = computed(() => {\n    const email = this.parsedEmail();\n    return email?.attachments.filter((a) => !a.contentId) ?? [];\n  });\n\n  protected readonly safeSrcdoc = computed<SafeHtml | null>(() => {\n    const email = this.parsedEmail();\n    if (!email?.htmlBody) return null;\n    let html = this.#replaceCidReferences(email.htmlBody, email.attachments);\n    html = this.#injectBaseTarget(html);\n    return this.#sanitizer.bypassSecurityTrustHtml(html);\n  });\n\n  protected readonly hasHtmlBody = computed(() => !!this.parsedEmail()?.htmlBody);\n  protected readonly hasTextBody = computed(() => !!this.parsedEmail()?.textBody);\n\n  #fileResource = rxResource<File | undefined, string | undefined>({\n    params: this.id,\n    stream: ({ params }) => {\n      if (!params) return of(undefined);\n      const uri = `/dms/objects/${params}/contents/file`;\n\n      return this.#http.get(`${this.src()}`, { responseType: 'blob', observe: 'response' }).pipe(\n        map((response) => {\n          const blob = response.body!;\n          const disposition = response.headers.get('Content-Disposition');\n          const fileName = disposition?.match(/filename\\*?=(?:UTF-8''|\")?([^\";\\n]+)\"?/i)?.[1] ?? 'download';\n          return new File([blob], decodeURIComponent(fileName), {\n            type: blob.type\n          });\n        })\n      );\n    }\n  });\n\n  file = this.#fileResource.value;\n  fileLoading = this.#fileResource.isLoading;\n\n  #fileEffect = effect(() => {\n    const file = this.file();\n    file ? this.#loadFile(file) : this.clear();\n  });\n\n  #fileLoadingEffect = effect(() => {\n    const fileLoading = this.fileLoading();\n    this.busyChange.emit(fileLoading);\n  });\n\n  constructor() {\n    super();\n\n    effect(() => {\n      const email = this.parsedEmail();\n      if (email?.htmlBody) this.activeTab.set('html');\n      else if (email?.textBody) this.activeTab.set('text');\n    });\n  }\n\n  protected onFileSelected(event: Event): void {\n    const input = event.target as HTMLInputElement;\n    const file = input.files?.[0];\n    if (file) this.#loadFile(file);\n    input.value = '';\n  }\n\n  #loadFile(file: File): void {\n    const reader = new FileReader();\n    if (file.name.toLowerCase().endsWith('.msg')) {\n      reader.onload = async (e) => {\n        const buffer = e.target?.result as ArrayBuffer;\n        this.parsedEmail.set(await this.#msgParser.parse(buffer));\n      };\n      reader.readAsArrayBuffer(file);\n    } else {\n      reader.onload = (e) => {\n        const content = e.target?.result as string;\n        this.parsedEmail.set(this.#parser.parse(content));\n      };\n      reader.readAsText(file, 'utf-8');\n    }\n  }\n\n  /** Replaces cid: references in HTML with the matching attachment's data URL. */\n  #replaceCidReferences(html: string, attachments: EmlAttachment[]): string {\n    const cidMap = new Map(attachments.filter((a) => a.contentId).map((a) => [a.contentId!, a.dataUrl]));\n    if (!cidMap.size) return html;\n    return html.replace(/(?:cid:)([^\"'\\s)]+)/gi, (match, cid) => cidMap.get(cid) ?? match);\n  }\n\n  /** Ensures all links in the email open in a new tab. */\n  #injectBaseTarget(html: string): string {\n    if (/<base\\b/i.test(html)) return html;\n    const tag = '<base target=\"_blank\" rel=\"noopener\">';\n    const headMatch = html.match(/<head[^>]*>/i);\n    if (headMatch) return html.replace(headMatch[0], headMatch[0] + tag);\n    return tag + html;\n  }\n\n  protected clear(): void {\n    this.parsedEmail.set(null);\n  }\n\n  protected openAttachment(attachment: EmlAttachment): void {\n    this.#dialog.open(AttachmentPreviewComponent, {\n      data: attachment,\n      hasBackdrop: false\n    });\n  }\n\n  protected formatDate(dateStr: string): string {\n    if (!dateStr) return '';\n    try {\n      return new Date(dateStr).toLocaleString();\n    } catch {\n      return dateStr;\n    }\n  }\n}\n","@if (fileLoading()) {\n<yuv-progress />\n\n} @let pMail = parsedEmail(); @if (pMail) {\n\n<div class=\"email-view\">\n  <div class=\"email-header\">\n    <div class=\"email-meta\">\n      @if (pMail.headers.from) {\n      <div class=\"meta-row\">\n        <span class=\"meta-label\">{{ 'yuv.media.viewer.mails.viewer.from' | translate }}</span>\n        <span class=\"meta-value\">{{ pMail.headers.from }}</span>\n      </div>\n      } @if (pMail.headers.to) {\n      <div class=\"meta-row\">\n        <span class=\"meta-label\">{{ 'yuv.media.viewer.mails.viewer.to' | translate }}</span>\n        <span class=\"meta-value\">{{ pMail.headers.to }}</span>\n      </div>\n      } @if (pMail.headers.cc) {\n      <div class=\"meta-row\">\n        <span class=\"meta-label\">{{ 'yuv.media.viewer.mails.viewer.cc' | translate }}</span>\n        <span class=\"meta-value\">{{ pMail.headers.cc }}</span>\n      </div>\n      } @if (pMail.headers.bcc) {\n      <div class=\"meta-row\">\n        <span class=\"meta-label\">{{ 'yuv.media.viewer.mails.viewer.bcc' | translate }}</span>\n        <span class=\"meta-value\">{{ pMail.headers.bcc }}</span>\n      </div>\n      } @if (pMail.headers.date) {\n      <div class=\"meta-row\">\n        <span class=\"meta-label\">{{ 'yuv.media.viewer.mails.viewer.date' | translate }}</span>\n        <span class=\"meta-value\">{{ formatDate(pMail.headers.date) }}</span>\n      </div>\n      }\n    </div>\n  </div>\n\n  @if (fileAttachments().length > 0) {\n  <div class=\"attachments\">\n    <p class=\"attachments-label\">{{ 'yuv.media.viewer.mails.viewer.attachments' | translate }} ({{ fileAttachments().length }})</p>\n    <yuv-attachment-carousel [attachments]=\"fileAttachments()\" (attachmentClick)=\"openAttachment($event)\" />\n  </div>\n  }\n\n  <div class=\"email-body\">\n    @if (hasHtmlBody() && hasTextBody()) {\n    <div class=\"body-tabs\">\n      <button class=\"tab-btn\" [class.active]=\"activeTab() === 'html'\" (click)=\"activeTab.set('html')\">\n        {{ 'yuv.media.viewer.mails.viewer.tab.html' | translate }}\n      </button>\n      <button class=\"tab-btn\" [class.active]=\"activeTab() === 'text'\" (click)=\"activeTab.set('text')\">\n        {{ 'yuv.media.viewer.mails.viewer.tab.text' | translate }}\n      </button>\n    </div>\n    } @if (activeTab() === \"html\" && safeSrcdoc()) {\n    <iframe [srcdoc]=\"safeSrcdoc()!\" sandbox=\"allow-same-origin allow-popups allow-popups-to-escape-sandbox\" class=\"html-frame\" title=\"Email body\"></iframe>\n    } @else if (pMail.textBody) {\n    <pre class=\"text-body\">{{ pMail.textBody }}</pre>\n    } @else {\n    <p class=\"no-body\">\n      {{ 'yuv.media.viewer.mails.viewer.noBody' | translate }}\n    </p>\n    }\n  </div>\n</div>\n}\n","import { Injectable, signal } from '@angular/core';\nimport type * as monaco from 'monaco-editor';\n\ninterface MonacoLoaderState {\n  status: 'idle' | 'loading' | 'loaded' | 'error';\n  error?: string;\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class MonacoLoaderService {\n  #state = signal<MonacoLoaderState>({ status: 'idle' });\n  #monacoPromise: Promise<typeof monaco> | null = null;\n\n  state = this.#state.asReadonly();\n\n  /**\n   * Loads Monaco editor AMD loader and initializes the environment.\n   * Returns a Promise that resolves with the global monaco object.\n   */\n  loadMonaco(): Promise<typeof monaco> {\n    // If already loaded or loading, return existing promise\n    if (this.#monacoPromise) {\n      return this.#monacoPromise;\n    }\n\n    // Check if Monaco is already loaded globally\n    if (typeof (window as any).monaco !== 'undefined') {\n      this.#state.set({ status: 'loaded' });\n      return Promise.resolve((window as any).monaco);\n    }\n\n    this.#state.set({ status: 'loading' });\n\n    this.#monacoPromise = new Promise((resolve, reject) => {\n      // Configure AMD loader environment\n      (window as any).MonacoEnvironment = {\n        getWorkerUrl: (_workerId: string, label: string) => {\n          const workerPaths: Record<string, string> = {\n            json: '/assets/monaco/min/vs/language/json/json.worker.js',\n            css: '/assets/monaco/min/vs/language/css/css.worker.js',\n            html: '/assets/monaco/min/vs/language/html/html.worker.js',\n            typescript: '/assets/monaco/min/vs/language/typescript/ts.worker.js',\n            javascript: '/assets/monaco/min/vs/language/typescript/ts.worker.js',\n            editorWorkerService: '/assets/monaco/min/vs/editor/editor.worker.js'\n          };\n\n          return workerPaths[label] || workerPaths['editorWorkerService'];\n        }\n      };\n\n      // Inject AMD loader script\n      const loaderScript = document.createElement('script');\n      loaderScript.src = '/assets/monaco/min/vs/loader.js';\n      loaderScript.async = true;\n\n      loaderScript.onload = () => {\n        // Use AMD require to load Monaco\n        (window as any).require.config({\n          paths: { vs: '/assets/monaco/min/vs' }\n        });\n\n        (window as any).require(['vs/editor/editor.main'], () => {\n          const monacoInstance = (window as any).monaco as typeof monaco;\n          this.#state.set({ status: 'loaded' });\n          resolve(monacoInstance);\n        });\n      };\n\n      loaderScript.onerror = () => {\n        const error = 'Failed to load Monaco editor';\n        this.#state.set({ status: 'error', error });\n        reject(new Error(error));\n      };\n\n      document.head.appendChild(loaderScript);\n    });\n\n    return this.#monacoPromise;\n  }\n\n  /**\n   * Configure JSON schema for IntelliSense\n   */\n  configureJsonSchema(uri: string, schema: any, fileMatch?: string[]): void {\n    this.loadMonaco().then((monacoInstance) => {\n      monacoInstance.languages.json.jsonDefaults.setDiagnosticsOptions({\n        validate: true,\n        schemas: [\n          {\n            uri,\n            fileMatch: fileMatch || ['*'],\n            schema\n          }\n        ]\n      });\n    });\n  }\n\n  /**\n   * Configure TypeScript compiler options\n   */\n  configureTypeScript(options: any): void {\n    this.loadMonaco().then((monacoInstance) => {\n      monacoInstance.languages.typescript.typescriptDefaults.setCompilerOptions({\n        target: monacoInstance.languages.typescript.ScriptTarget.ES2020,\n        allowNonTsExtensions: true,\n        moduleResolution: monacoInstance.languages.typescript.ModuleResolutionKind.NodeJs,\n        module: monacoInstance.languages.typescript.ModuleKind.CommonJS,\n        noEmit: true,\n        esModuleInterop: true,\n        ...options\n      });\n    });\n  }\n}\n","/**\n * Maps MIME types to Monaco editor language identifiers\n */\nexport const mimeTypeToMonacoLanguage = (mimeType: string): string => {\n  const mimeMap: Record<string, string> = {\n    'application/json': 'json',\n    'text/javascript': 'javascript',\n    'application/javascript': 'javascript',\n    'text/typescript': 'typescript',\n    'application/typescript': 'typescript',\n    'text/xml': 'xml',\n    'application/xml': 'xml',\n    'text/html': 'html',\n    'text/css': 'css',\n    'text/scss': 'scss',\n    'text/less': 'less',\n    'text/markdown': 'markdown',\n    'text/x-markdown': 'markdown',\n    'text/x-web-markdown': 'markdown',\n    'application/x-yaml': 'yaml',\n    'text/yaml': 'yaml',\n    'text/x-python': 'python',\n    'text/java': 'java',\n    'text/x-java': 'java',\n    'text/x-csharp': 'csharp',\n    'text/x-go': 'go',\n    'text/x-rust': 'rust',\n    'text/plain': 'plaintext'\n  };\n\n  return mimeMap[mimeType.toLowerCase()] || 'plaintext';\n};\n","import { AfterViewInit, ChangeDetectionStrategy, Component, computed, DestroyRef, effect, ElementRef, inject, OnDestroy, signal, viewChild } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { catchError, forkJoin, of } from 'rxjs';\n\nimport type * as monaco from 'monaco-editor';\nimport { AbstractViewerComponent } from '../abstract/abstract.viewer.component';\nimport { MonacoLoaderService } from '../../services/monaco-loader.service';\nimport { MonacoDirectMetadata } from './monaco-direct.metadata';\nimport { mimeTypeToMonacoLanguage } from './monaco-language-mapper';\n\n@Component({\n  selector: 'yuv-monaco-direct',\n  imports: [],\n  templateUrl: './monaco-direct.component.html',\n  styleUrl: './monaco-direct.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MonacoDirectComponent extends AbstractViewerComponent<MonacoDirectMetadata> implements AfterViewInit, OnDestroy {\n  readonly #http = inject(HttpClient);\n  readonly #destroyRef = inject(DestroyRef);\n  readonly #monacoLoader = inject(MonacoLoaderService);\n  readonly #hostRef = inject(ElementRef<HTMLElement>);\n\n  // View references\n  editorContainer = viewChild.required<ElementRef<HTMLDivElement>>('editorContainer');\n\n  // State signals\n  #content = signal<string>('');\n  #originalContent = signal<string>('');\n  #isLoading = signal<boolean>(true);\n  #error = signal<string | null>(null);\n\n  // Public readonly signals\n  content = this.#content.asReadonly();\n  originalContent = this.#originalContent.asReadonly();\n  isLoading = this.#isLoading.asReadonly();\n  error = this.#error.asReadonly();\n\n  // Computed signals\n  isDiffMode = computed(() => this.metadata()?.diff?.enabled ?? false);\n\n  language = computed(() => {\n    const type = this.type();\n    return type ? mimeTypeToMonacoLanguage(type) : 'plaintext';\n  });\n\n  monacoTheme = computed(() => {\n    const theme = this.theme();\n    return theme === 'dark' ? 'vs-dark' : 'vs-light';\n  });\n\n  editorOptions = computed(() => {\n    const metadata = this.metadata();\n    const baseOptions = {\n      language: this.language(),\n      theme: this.monacoTheme(),\n      readOnly: true,\n      automaticLayout: true,\n      scrollBeyondLastLine: false,\n      minimap: { enabled: false },\n      ...metadata?.editorOptions\n    };\n    return baseOptions;\n  });\n\n  // Editor instance (not a signal - Monaco editor is mutable)\n  #editor: monaco.editor.IStandaloneCodeEditor | monaco.editor.IStandaloneDiffEditor | null = null;\n  #editorInitialized = signal<boolean>(false);\n  #resizeObserver?: ResizeObserver;\n\n  constructor() {\n    super();\n\n    // Effect to load content when src changes\n    effect(() => {\n      const src = this.src();\n      const isDiff = this.isDiffMode();\n\n      if (src) {\n        this.#loadContent(src, isDiff);\n      }\n    });\n\n    // Effect to configure IntelliSense when metadata changes\n    effect(() => {\n      const metadata = this.metadata();\n      if (metadata?.jsonSchema) {\n        this.#monacoLoader.configureJsonSchema(metadata.jsonSchema.uri, metadata.jsonSchema.schema, metadata.jsonSchema.fileMatch);\n      }\n      if (metadata?.typescript) {\n        this.#monacoLoader.configureTypeScript(metadata.typescript.compilerOptions);\n      }\n    });\n\n    // Effect to update standard editor when content or options change\n    effect(() => {\n      const content = this.#content();\n      const options = this.editorOptions();\n      const initialized = this.#editorInitialized();\n\n      if (initialized && this.#editor && !this.isDiffMode()) {\n        const standardEditor = this.#editor as monaco.editor.IStandaloneCodeEditor;\n        standardEditor.setValue(content);\n        standardEditor.updateOptions(options);\n      }\n    });\n\n    // Effect to update diff editor when content changes\n    effect(() => {\n      const original = this.#originalContent();\n      const modified = this.#content();\n      const initialized = this.#editorInitialized();\n\n      if (initialized && this.#editor && this.isDiffMode()) {\n        const diffEditor = this.#editor as monaco.editor.IStandaloneDiffEditor;\n        const monacoGlobal = (window as any).monaco as typeof monaco;\n\n        const originalModel = monacoGlobal.editor.createModel(original, this.language());\n        const modifiedModel = monacoGlobal.editor.createModel(modified, this.language());\n\n        diffEditor.setModel({\n          original: originalModel,\n          modified: modifiedModel\n        });\n      }\n    });\n  }\n\n  ngAfterViewInit(): void {\n    // Initialize Monaco after view is ready\n    this.#initializeEditor();\n  }\n\n  ngOnDestroy(): void {\n    // Dispose editor properly\n    this.#disposeEditor();\n  }\n\n  async #initializeEditor(): Promise<void> {\n    try {\n      const monacoInstance = await this.#monacoLoader.loadMonaco();\n      const container = this.editorContainer().nativeElement;\n\n      if (this.isDiffMode()) {\n        this.#createDiffEditor(monacoInstance, container);\n      } else {\n        this.#createStandardEditor(monacoInstance, container);\n      }\n\n      this.#observeContainerSize();\n\n      // Signal that editor is initialized - this will trigger the effects in the constructor\n      this.#editorInitialized.set(true);\n    } catch (error) {\n      this.#error.set('Failed to initialize Monaco editor');\n      this.#isLoading.set(false);\n      console.error('Monaco initialization error:', error);\n    }\n  }\n\n  #createStandardEditor(monacoInstance: typeof monaco, container: HTMLElement): void {\n    this.#editor = monacoInstance.editor.create(container, {\n      value: this.#content(),\n      ...this.editorOptions()\n    });\n  }\n\n  #createDiffEditor(monacoInstance: typeof monaco, container: HTMLElement): void {\n    this.#editor = monacoInstance.editor.createDiffEditor(container, {\n      ...this.editorOptions(),\n      renderSideBySide: true,\n      originalEditable: false\n    });\n  }\n\n  #loadContent(src: string, isDiff: boolean): void {\n    this.#isLoading.set(true);\n    this.#error.set(null);\n\n    const headers = new HttpHeaders().set('Content-Type', 'text/plain; charset=utf-8');\n\n    if (isDiff) {\n      const metadata = this.metadata();\n      const originalSrc = metadata?.diff?.originalSrc;\n\n      if (!originalSrc) {\n        this.#error.set('Diff mode requires originalSrc in metadata');\n        this.#isLoading.set(false);\n        return;\n      }\n\n      forkJoin({\n        original: this.#http.get(originalSrc, { headers, responseType: 'text' }).pipe(\n          catchError((err) => {\n            console.error('Error loading original content:', err);\n            return of('Error loading original content');\n          })\n        ),\n        modified: this.#http.get(src, { headers, responseType: 'text' }).pipe(\n          catchError((err) => {\n            console.error('Error loading modified content:', err);\n            return of('Error loading modified content');\n          })\n        )\n      })\n        .pipe(takeUntilDestroyed(this.#destroyRef))\n        .subscribe({\n          next: ({ original, modified }) => {\n            this.#originalContent.set(original);\n            this.#content.set(modified);\n            this.#isLoading.set(false);\n          },\n          error: (err) => {\n            this.#error.set('Failed to load content for diff');\n            this.#isLoading.set(false);\n            console.error('Diff content loading error:', err);\n          }\n        });\n    } else {\n      this.#http\n        .get(src, { headers, responseType: 'text' })\n        .pipe(\n          takeUntilDestroyed(this.#destroyRef),\n          catchError((err) => {\n            console.error('Error loading content:', err);\n            return of('Error loading content');\n          })\n        )\n        .subscribe({\n          next: (content) => {\n            this.#content.set(content);\n            this.#isLoading.set(false);\n          },\n          error: (err) => {\n            this.#error.set('Failed to load content');\n            this.#isLoading.set(false);\n            console.error('Content loading error:', err);\n          }\n        });\n    }\n  }\n\n  #observeContainerSize(): void {\n    if (this.#resizeObserver) return;\n\n    this.#resizeObserver = new ResizeObserver(() => {\n      this.#editor?.layout();\n    });\n    this.#resizeObserver.observe(this.#hostRef.nativeElement);\n  }\n\n  #disposeEditor(): void {\n    this.#resizeObserver?.disconnect();\n    this.#resizeObserver = undefined;\n    if (this.#editor) {\n      this.#editor.dispose();\n      this.#editor = null;\n      this.#editorInitialized.set(false);\n    }\n  }\n}\n","<div class=\"monaco-direct-wrapper\">\n  @if (isLoading()) {\n    <div class=\"loading-spinner\">\n      <div class=\"spinner\"></div>\n      <p>Loading editor...</p>\n    </div>\n  }\n\n  @if (error()) {\n    <div class=\"error-message\">\n      <p>{{ error() }}</p>\n    </div>\n  }\n\n  <div #editorContainer class=\"monaco-editor-container\" [class.hidden]=\"isLoading() || error()\"></div>\n</div>\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { ChangeDetectionStrategy, Component, computed, DestroyRef, inject, signal } from '@angular/core';\nimport { rxResource, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { SafeResourceUrl } from '@angular/platform-browser';\nimport { catchError } from 'rxjs';\nimport { AbstractViewerComponent } from '../abstract/abstract.viewer.component';\nimport { MonacoDirectMetadata } from '../monaco-direct/monaco-direct.metadata';\nimport { MonacoDirectComponent } from '../monaco-direct/monaco-direct.component';\n\n@Component({\n  selector: 'yuv-text',\n  imports: [MonacoDirectComponent],\n  template: `<yuv-monaco-direct [id]=\"id()\" [src]=\"src()\" [type]=\"type()\" [metadata]=\"metadata()\" />`,\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TextComponent extends AbstractViewerComponent<MonacoDirectMetadata> {\n  readonly #http = inject(HttpClient);\n  readonly #destroyRef = inject(DestroyRef);\n\n  // TODO: Remove this when the contentUrlBlob is no longer needed\n  contentUrlBlob = signal<SafeResourceUrl>('');\n\n  editorOptions = computed(() => {\n    const language = this.type() || 'text';\n    const theme = this.theme() === 'dark' ? 'vs-dark' : 'vs-light';\n    return { language, theme };\n  });\n\n  #contentResource = rxResource({\n    params: () => ({ src: this.src() }),\n    stream: ({ params }) => {\n      const headers = new HttpHeaders().set('Content-Type', 'text/plain; charset=utf-8');\n      return this.#http.get(params.src, { headers, responseType: 'text' }).pipe(\n        takeUntilDestroyed(this.#destroyRef),\n        catchError(() => 'Error loading content')\n      );\n    }\n  });\n\n  content = computed(() => {\n    const content = this.#contentResource.value();\n    if (typeof content === 'string') {\n      return content;\n    } else {\n      return 'Error loading content';\n    }\n  });\n}\n","import { fromEvent } from 'rxjs';\nimport { DestroyRef } from '@angular/core';\nimport type { EventBus } from 'pdfjs-dist/web/pdf_viewer.mjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n// interface EventBus {\n//   on(eventName: string, listener: Function): void;\n//   off(eventName: string, listener: Function): void;\n//   _listeners: any;\n//   dispatch(eventName: string, data: Object): void;\n//   _on(eventName: any, listener: any, options?: null): void;\n//   _off(eventName: any, listener: any, options?: null): void;\n// }\n\nexport function createEventBus(pdfJsViewer: any, destroyRef: DestroyRef) {\n  const globalEventBus: EventBus = new pdfJsViewer.EventBus();\n  attachDOMEventsToEventBus(globalEventBus, destroyRef);\n  return globalEventBus;\n}\n\nfunction attachDOMEventsToEventBus(eventBus: EventBus, destroyRef: DestroyRef): void {\n  fromEvent(eventBus, 'documentload')\n    .pipe(takeUntilDestroyed(destroyRef))\n    .subscribe(() => {\n      const event = document.createEvent('CustomEvent');\n      event.initCustomEvent('documentload', true, true, {});\n      window.dispatchEvent(event);\n    });\n\n  fromEvent(eventBus, 'pagerendered')\n    .pipe(takeUntilDestroyed(destroyRef))\n    .subscribe(({ pageNumber, cssTransform, source }: any) => {\n      const event = document.createEvent('CustomEvent');\n      event.initCustomEvent('pagerendered', true, true, {\n        pageNumber,\n        cssTransform\n      });\n      source.div.dispatchEvent(event);\n    });\n\n  fromEvent(eventBus, 'textlayerrendered')\n    .pipe(takeUntilDestroyed(destroyRef))\n    .subscribe(({ pageNumber, source }: any) => {\n      const event = document.createEvent('CustomEvent');\n      event.initCustomEvent('textlayerrendered', true, true, { pageNumber });\n      source.textLayerDiv?.dispatchEvent(event);\n    });\n\n  fromEvent(eventBus, 'pagechanging')\n    .pipe(takeUntilDestroyed(destroyRef))\n    .subscribe(({ pageNumber, source }: any) => {\n      const event = document.createEvent('UIEvents') as any;\n      event.initEvent('pagechanging', true, true);\n      /* tslint:disable:no-string-literal */\n      event['pageNumber'] = pageNumber;\n      source.container.dispatchEvent(event);\n    });\n\n  fromEvent(eventBus, 'pagesinit')\n    .pipe(takeUntilDestroyed(destroyRef))\n    .subscribe(({ source }: any) => {\n      const event = document.createEvent('CustomEvent');\n      event.initCustomEvent('pagesinit', true, true, null);\n      source.container.dispatchEvent(event);\n    });\n\n  fromEvent(eventBus, 'pagesloaded')\n    .pipe(takeUntilDestroyed(destroyRef))\n    .subscribe(({ pagesCount, source }: any) => {\n      const event = document.createEvent('CustomEvent');\n      event.initCustomEvent('pagesloaded', true, true, { pagesCount });\n      source.container.dispatchEvent(event);\n    });\n\n  fromEvent(eventBus, 'scalechange')\n    .pipe(takeUntilDestroyed(destroyRef))\n    .subscribe(({ scale, presetValue, source }: any) => {\n      const event = document.createEvent('UIEvents') as any;\n      event.initEvent('scalechange', true, true);\n      /* tslint:disable:no-string-literal */\n      event['scale'] = scale;\n      /* tslint:disable:no-string-literal */\n      event['presetValue'] = presetValue;\n      source.container.dispatchEvent(event);\n    });\n\n  fromEvent(eventBus, 'updateviewarea')\n    .pipe(takeUntilDestroyed(destroyRef))\n    .subscribe(({ location, source }: any) => {\n      const event = document.createEvent('UIEvents') as any;\n      event.initEvent('updateviewarea', true, true);\n      event['location'] = location;\n      source.container.dispatchEvent(event);\n    });\n\n  fromEvent(eventBus, 'find')\n    .pipe(takeUntilDestroyed(destroyRef))\n    .subscribe(({ source, type, query, phraseSearch, caseSensitive, highlightAll, findPrevious }: any) => {\n      if (source === window) {\n        return; // event comes from FirefoxCom, no need to replicate\n      }\n      const event = document.createEvent('CustomEvent');\n      event.initCustomEvent('find' + type, true, true, {\n        query,\n        phraseSearch,\n        caseSensitive,\n        highlightAll,\n        findPrevious\n      });\n      window.dispatchEvent(event);\n    });\n\n  fromEvent(eventBus, 'attachmentsloaded')\n    .pipe(takeUntilDestroyed(destroyRef))\n    .subscribe(({ attachmentsCount, source }: any) => {\n      const event = document.createEvent('CustomEvent');\n      event.initCustomEvent('attachmentsloaded', true, true, {\n        attachmentsCount\n      });\n      source.container.dispatchEvent(event);\n    });\n\n  fromEvent(eventBus, 'sidebarviewchanged')\n    .pipe(takeUntilDestroyed(destroyRef))\n    .subscribe(({ view, source }: any) => {\n      const event = document.createEvent('CustomEvent');\n      event.initCustomEvent('sidebarviewchanged', true, true, { view });\n      source.outerContainer.dispatchEvent(event);\n    });\n\n  fromEvent(eventBus, 'pagemode')\n    .pipe(takeUntilDestroyed(destroyRef))\n    .subscribe(({ mode, source }: any) => {\n      const event = document.createEvent('CustomEvent');\n      event.initCustomEvent('pagemode', true, true, { mode });\n      source.pdfViewer.container.dispatchEvent(event);\n    });\n\n  fromEvent(eventBus, 'namedaction')\n    .pipe(takeUntilDestroyed(destroyRef))\n    .subscribe(({ action, source }: any) => {\n      const event = document.createEvent('CustomEvent');\n      event.initCustomEvent('namedaction', true, true, { action });\n      source.pdfViewer.container.dispatchEvent(event);\n    });\n\n  fromEvent(eventBus, 'presentationmodechanged')\n    .pipe(takeUntilDestroyed(destroyRef))\n    .subscribe(({ active, switchInProgress }: any) => {\n      const event = document.createEvent('CustomEvent');\n      event.initCustomEvent('presentationmodechanged', true, true, {\n        active,\n        switchInProgress\n      });\n      window.dispatchEvent(event);\n    });\n\n  fromEvent(eventBus, 'outlineloaded')\n    .pipe(takeUntilDestroyed(destroyRef))\n    .subscribe(({ outlineCount, source }: any) => {\n      const event = document.createEvent('CustomEvent');\n      event.initCustomEvent('outlineloaded', true, true, { outlineCount });\n      source.container.dispatchEvent(event);\n    });\n}\n","// src/app/pdfjs-setup.ts\nimport * as pdfjsLib from 'pdfjs-dist';\n// import pdfjsWorker from 'pdfjs-dist/build/pdf.worker?worker';\n\n// (pdfjsLib.GlobalWorkerOptions as any).workerSrc = pdfjsWorker;\n\nexport const getDocument = pdfjsLib.getDocument;\n// export const GlobalWorkerOptions = pdfjsLib.GlobalWorkerOptions;\n","import { InjectionToken } from '@angular/core';\n\n/**\n * Configuration options for PDF viewer\n */\nexport interface PdfViewerConfig {\n  /**\n   * Path to the PDF.js worker file\n   * Required for CSP compliance - should point to a local worker file\n   * @example '/assets/pdf.worker.min.mjs'\n   * @example 'https://your-cdn.com/pdf.worker.min.mjs'\n   */\n  workerSrc?: string;\n\n  /**\n   * Path to the cMaps directory\n   * Required for rendering PDFs with CJK (Chinese, Japanese, Korean) characters\n   * @example '/assets/cmaps/'\n   */\n  cMapUrl?: string;\n\n  /**\n   * Whether to pack cMaps data\n   * @default false\n   */\n  cMapPacked?: boolean;\n\n  /**\n   * Standard font data URL\n   * Required for PDFs that use standard fonts\n   * @example '/assets/standard_fonts/'\n   */\n  standardFontDataUrl?: string;\n\n  /**\n   * Whether to use only CSS zoom (no canvas scaling)\n   * Can improve performance but may reduce quality\n   * @default false\n   */\n  useOnlyCssZoom?: boolean;\n\n  /**\n   * Maximum image size in pixels\n   * Larger images will be downscaled\n   * @default -1 (no limit)\n   */\n  maxImageSize?: number;\n\n  /**\n   * Whether to disable auto-fetch of fonts\n   * Set to true for strict CSP environments\n   * @default false\n   */\n  disableFontFace?: boolean;\n\n  /**\n   * Whether to disable streaming of PDF data\n   * May be required in some CSP environments\n   * @default false\n   */\n  disableStream?: boolean;\n\n  /**\n   * Whether to disable range requests\n   * May be required in some CSP environments\n   * @default false\n   */\n  disableRange?: boolean;\n}\n\n/**\n * Default PDF viewer configuration\n */\nexport const DEFAULT_PDF_VIEWER_CONFIG: PdfViewerConfig = {\n  cMapPacked: true,\n  useOnlyCssZoom: false,\n  maxImageSize: -1,\n  disableFontFace: false,\n  disableStream: false,\n  disableRange: false\n};\n\n/**\n * Injection token for PDF viewer configuration\n */\nexport const PDF_VIEWER_CONFIG = new InjectionToken<PdfViewerConfig>(\n  'PDF_VIEWER_CONFIG',\n  {\n    providedIn: 'root',\n    factory: () => DEFAULT_PDF_VIEWER_CONFIG\n  }\n);\n\n/**\n * Provides PDF viewer configuration\n * Use this in your app config or module providers\n *\n * @example\n * ```typescript\n * export const appConfig: ApplicationConfig = {\n *   providers: [\n *     providePdfViewerConfig({\n *       workerSrc: '/assets/pdf.worker.min.mjs',\n *       cMapUrl: '/assets/cmaps/',\n *       cMapPacked: true\n *     })\n *   ]\n * };\n * ```\n */\nexport function providePdfViewerConfig(config: PdfViewerConfig) {\n  return {\n    provide: PDF_VIEWER_CONFIG,\n    useValue: { ...DEFAULT_PDF_VIEWER_CONFIG, ...config }\n  };\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @angular-eslint/no-input-rename */\n/* eslint-disable @angular-eslint/no-output-rename */\nimport {\n  AfterViewChecked,\n  Component,\n  DestroyRef,\n  ElementRef,\n  inject,\n  input,\n  model,\n  NgZone,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  output,\n  SimpleChanges,\n  viewChild\n} from '@angular/core';\n/* @vite-ignore */\nimport * as PDFJS from 'pdfjs-dist';\n/* @vite-ignore */\nimport { GlobalWorkerOptions, PDFDocumentLoadingTask, PDFDocumentProxy, PDFPageProxy } from 'pdfjs-dist';\n/* @vite-ignore */\nimport * as PDFJSViewer from 'pdfjs-dist/web/pdf_viewer.mjs';\nimport { debounceTime, filter, from, fromEvent, Subject, takeUntil, tap } from 'rxjs';\nimport { createEventBus } from './utils/event-bus.utils';\nimport { PDFProgressData, PDFSource, PDFViewerOptions, ZoomScale } from './utils/typings';\nimport { getDocument } from './utils/pdfjs-setup';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { PDF_VIEWER_CONFIG, PdfViewerConfig } from './config/pdf-viewer.config';\n\nfunction isSSR() {\n  return typeof window === 'undefined';\n}\n\nfunction assign(obj: any, prop: string, value: any) {\n  obj[prop] = value;\n}\n\nif (!isSSR()) {\n  // assign(PDFJS, 'verbosity', VerbosityLevel.INFOS);\n  // PDFJS.setVerbosityLevel(VerbosityLevel.INFOS); // or WARNINGS, ERRORS\n}\n\n// @ts-expect-error This does not exist outside of polyfill which this is doing\nif (typeof Promise.withResolvers === 'undefined' && window) {\n  // @ts-expect-error This does not exist outside of polyfill which this is doing\n  window.Promise.withResolvers = () => {\n    let resolve;\n    let reject;\n    const promise = new Promise((res, rej) => {\n      resolve = res;\n      reject = rej;\n    });\n    return { promise, resolve, reject };\n  };\n}\n\nexport enum RenderTextMode {\n  DISABLED,\n  ENABLED,\n  ENHANCED\n}\n\n@Component({\n  selector: 'pdf-viewer',\n  template: `\n    <div #pdfViewerContainer class=\"pdf-viewer-container\">\n      <div class=\"pdfViewer\"></div>\n    </div>\n  `,\n  styleUrls: ['./pdf-viewer.component.scss']\n})\nexport class PdfViewerComponent implements OnChanges, OnInit, OnDestroy, AfterViewChecked {\n  #element = inject<ElementRef<HTMLElement>>(ElementRef);\n  #ngZone = inject<NgZone>(NgZone);\n  #destroyRef = inject<DestroyRef>(DestroyRef);\n  #config = inject<PdfViewerConfig>(PDF_VIEWER_CONFIG);\n\n  static CSS_UNITS = 96.0 / 72.0;\n  static BORDER_WIDTH = 9;\n\n  pdfViewerContainer = viewChild.required<ElementRef<HTMLDivElement>>('pdfViewerContainer');\n\n  public eventBus!: PDFJSViewer.EventBus;\n  public pdfLinkService!: PDFJSViewer.PDFLinkService;\n  public pdfFindController!: PDFJSViewer.PDFFindController;\n  public pdfViewer!: PDFJSViewer.PDFViewer | PDFJSViewer.PDFSinglePageViewer;\n\n  #isVisible = false;\n\n  #cMapsUrl = typeof PDFJS !== 'undefined' ? `https://unpkg.com/pdfjs-dist@${(PDFJS as any).version}/cmaps/` : null;\n  #imageResourcesPath = typeof PDFJS !== 'undefined' ? `https://unpkg.com/pdfjs-dist@${(PDFJS as any).version}/web/images/` : undefined;\n\n  #pdf: PDFDocumentProxy | undefined;\n  #page = 1;\n\n  #lastLoaded!: string | Uint8Array | PDFSource | null;\n  #latestScrolledPage!: number;\n\n  #pageScrollTimeout: number | null = null;\n  #isInitialized = false;\n  #loadingTask?: PDFDocumentLoadingTask | null;\n\n  afterLoadComplete = output<PDFDocumentProxy>({ alias: 'after-load-complete' });\n  pageRendered = output<CustomEvent>({ alias: 'page-rendered' });\n  pageInitialized = output<CustomEvent>({ alias: 'pages-initialized' });\n  textLayerRendered = output<CustomEvent>({ alias: 'text-layer-rendered' });\n  pdfError = output<any>({ alias: 'pdfError' });\n  pdfProgress = output<PDFProgressData>({ alias: 'pdf-progress' });\n  pageChangeing = output<number>();\n  src = input.required<string | Uint8Array | PDFSource>();\n\n  cMapsUrl = input<string | null>(this.#cMapsUrl, { alias: 'c-maps-url' });\n\n  page = model<number | string | any>({\n    get: () => 1,\n    set: (value: number | string | any) => {\n      value = parseInt(value, 10) || 1;\n      const originalPage = value;\n      if (this.#pdf) {\n        value = this.#getValidPageNumber(value);\n      }\n      if (originalPage !== value) {\n        this.pageChangeing.emit(value);\n      }\n    }\n  });\n\n  renderText = input<boolean>(true, { alias: 'render-text' });\n  renderTextMode = input<RenderTextMode>(RenderTextMode.ENHANCED, { alias: 'render-text-mode' });\n  originalSize = input<boolean>(true, { alias: 'original-size' });\n  showAll = input<boolean>(true, { alias: 'show-all' });\n  stickToPage = input<boolean>(false, { alias: 'stick-to-page' });\n\n  zoom = input<number>(1, { alias: 'zoom' });\n  zoomScale = input<ZoomScale>('page-width', { alias: 'zoom-scale' });\n\n  rotation = input<number, number>(0, {\n    transform: (value: number) => {\n      if (!(typeof value === 'number' && value % 90 === 0)) {\n        console.warn('Invalid pages rotation angle.');\n        return 0;\n      }\n      return value;\n    }\n  });\n\n  externalLinkTarget = input<string>('blank', { alias: 'external-link-target' });\n  autoresize = input<boolean>(true);\n  fitTopage = input<boolean>(false, { alias: 'fit-to-page' });\n  showBorders = input<boolean>(false, { alias: 'show-borders' });\n\n  static getLinkTarget(type: string) {\n    switch (type) {\n      case 'blank':\n        return (PDFJSViewer as any).LinkTarget.BLANK;\n      case 'none':\n        return (PDFJSViewer as any).LinkTarget.NONE;\n      case 'self':\n        return (PDFJSViewer as any).LinkTarget.SELF;\n      case 'parent':\n        return (PDFJSViewer as any).LinkTarget.PARENT;\n      case 'top':\n        return (PDFJSViewer as any).LinkTarget.TOP;\n    }\n\n    return null;\n  }\n\n  constructor() {\n    if (isSSR()) {\n      return;\n    }\n\n    // Configure PDF.js worker source\n    let pdfWorkerSrc: string;\n\n    const pdfJsVersion: string = (PDFJS as any).version;\n\n    // Priority order:\n    // 1. Configuration provided via providePdfViewerConfig()\n    // 2. Version-specific window property (for backward compatibility)\n    // 3. Generic window property (for backward compatibility)\n    // 4. CDN fallback\n    if (this.#config.workerSrc) {\n      pdfWorkerSrc = this.#config.workerSrc;\n    } else {\n      const versionSpecificPdfWorkerUrl: string = (window as any)[`pdfWorkerSrc${pdfJsVersion}`];\n      if (versionSpecificPdfWorkerUrl) {\n        pdfWorkerSrc = versionSpecificPdfWorkerUrl;\n      } else if ('pdfWorkerSrc' in window && typeof (window as any).pdfWorkerSrc === 'string' && (window as any).pdfWorkerSrc) {\n        pdfWorkerSrc = (window as any).pdfWorkerSrc;\n      } else {\n        pdfWorkerSrc = `https://cdn.jsdelivr.net/npm/pdfjs-dist@${pdfJsVersion}/legacy/build/pdf.worker.min.mjs`;\n      }\n    }\n\n    (PDFJS.GlobalWorkerOptions as any).workerSrc = pdfWorkerSrc;\n\n    // Configure cMaps (for CJK character support)\n    if (this.#config.cMapUrl) {\n      (PDFJS.GlobalWorkerOptions as any).cMapUrl = this.#config.cMapUrl;\n      (PDFJS.GlobalWorkerOptions as any).cMapPacked = this.#config.cMapPacked ?? true;\n    }\n\n    // Configure standard fonts\n    if (this.#config.standardFontDataUrl) {\n      (PDFJS.GlobalWorkerOptions as any).standardFontDataUrl = this.#config.standardFontDataUrl;\n    }\n  }\n\n  ngAfterViewChecked(): void {\n    if (this.#isInitialized) {\n      return;\n    }\n\n    const offset = this.pdfViewerContainer().nativeElement.offsetParent;\n\n    if (this.#isVisible === true && offset == null) {\n      this.#isVisible = false;\n      return;\n    }\n\n    if (this.#isVisible === false && offset != null) {\n      this.#isVisible = true;\n\n      setTimeout(() => {\n        this.#initialize();\n        this.ngOnChanges({ src: this.src() } as any);\n      });\n    }\n  }\n\n  ngOnInit() {\n    this.#initialize();\n    this.#setupResizeListener();\n    this.#setupCopyHandler();\n  }\n\n  ngOnDestroy() {\n    this.#clear();\n    this.#loadingTask = null;\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (isSSR() || !this.#isVisible) {\n      return;\n    }\n\n    if ('src' in changes) {\n      this.#loadPDF();\n    } else if (this.#pdf) {\n      if ('renderText' in changes || 'showAll' in changes) {\n        this.#setupViewer();\n        this.#resetPdfDocument();\n      }\n      if ('page' in changes) {\n        const { page } = changes;\n        if (page.currentValue === this.#latestScrolledPage) {\n          return;\n        }\n\n        const pageNumber = typeof this.page() === 'string' ? parseInt(this.page() as string, 10) : (this.page() as number);\n        // New form of page changing: The viewer will now jump to the specified page when it is changed.\n        // This behavior is introduced by using the PDFSinglePageViewer\n        this.pdfViewer.scrollPageIntoView({ pageNumber });\n      }\n\n      this.#update();\n    }\n  }\n\n  #updateSize() {\n    from(this.#pdf!.getPage(this.pdfViewer.currentPageNumber))\n      .pipe(takeUntilDestroyed(this.#destroyRef))\n      .subscribe({\n        next: (page: PDFPageProxy) => {\n          const rotation = this.rotation() + page.rotate;\n          const viewportWidth =\n            page.getViewport({\n              scale: this.zoom(),\n              rotation\n            }).width * PdfViewerComponent.CSS_UNITS;\n          let scale = this.zoom();\n          let stickToPage = true;\n\n          // Scale the document when it shouldn't be in original size or doesn't fit into the viewport\n          if (!this.originalSize() || (this.fitTopage() && viewportWidth > this.pdfViewerContainer().nativeElement.clientWidth)) {\n            const viewPort = page.getViewport({ scale: 1, rotation });\n            scale = this.#getScale(viewPort.width, viewPort.height);\n            stickToPage = !this.stickToPage();\n          }\n\n          this.pdfViewer.currentScale = scale;\n          if (stickToPage) this.pdfViewer.scrollPageIntoView({ pageNumber: page.pageNumber, ignoreDestinationZoom: true });\n        }\n      });\n  }\n\n  #clear() {\n    if (this.#loadingTask && !this.#loadingTask.destroyed) {\n      this.#loadingTask.destroy();\n    }\n\n    if (this.#pdf) {\n      this.#latestScrolledPage = 0;\n      this.#pdf.destroy();\n      this.#pdf = undefined;\n    }\n\n    this.pdfViewer && this.pdfViewer.setDocument(null as any);\n    this.pdfLinkService && this.pdfLinkService.setDocument(null, null);\n    this.pdfFindController && this.pdfFindController.setDocument(null as any);\n  }\n\n  #getPDFLinkServiceConfig() {\n    const linkTarget = PdfViewerComponent.getLinkTarget(this.externalLinkTarget());\n\n    if (linkTarget) {\n      return { externalLinkTarget: linkTarget };\n    }\n\n    return {};\n  }\n\n  #initEventBus() {\n    this.eventBus = createEventBus(PDFJSViewer, this.#destroyRef);\n\n    fromEvent<CustomEvent>(this.eventBus, 'pagerendered')\n      .pipe(\n        takeUntilDestroyed(this.#destroyRef),\n        tap((event) => this.pageRendered.emit(event))\n      )\n      .subscribe();\n\n    fromEvent<CustomEvent>(this.eventBus, 'pagesinit')\n      .pipe(\n        takeUntilDestroyed(this.#destroyRef),\n        tap((event) => this.pageInitialized.emit(event))\n      )\n      .subscribe();\n\n    fromEvent(this.eventBus, 'pagechanging')\n      .pipe(takeUntilDestroyed(this.#destroyRef))\n      .subscribe({\n        next: ({ pageNumber }: any) => {\n          this.#pageScrollTimeout && clearTimeout(this.#pageScrollTimeout);\n\n          this.#latestScrolledPage = pageNumber;\n          this.pageChangeing.emit(pageNumber);\n          this.#pageScrollTimeout = window.setTimeout(() => {\n            this.#latestScrolledPage = pageNumber;\n          }, 100);\n        }\n      });\n\n    fromEvent<CustomEvent>(this.eventBus, 'textlayerrendered')\n      .pipe(\n        takeUntilDestroyed(this.#destroyRef),\n        tap((event) => {\n          this.textLayerRendered.emit(event);\n          // Set up copy handling for the newly rendered text layer\n          this.#setupTextLayerCopyForPage((event as any).detail?.pageNumber);\n        })\n      )\n      .subscribe();\n  }\n\n  #initPDFServices() {\n    this.pdfLinkService = new PDFJSViewer.PDFLinkService({\n      eventBus: this.eventBus,\n      ...this.#getPDFLinkServiceConfig()\n    });\n    this.pdfFindController = new PDFJSViewer.PDFFindController({\n      eventBus: this.eventBus,\n      linkService: this.pdfLinkService\n    });\n  }\n\n  #getPDFOptions(): PDFViewerOptions {\n    return {\n      eventBus: this.eventBus,\n      container: this.#element.nativeElement.querySelector('div')!,\n      removePageBorders: !this.showBorders(),\n      linkService: this.pdfLinkService,\n      textLayerMode: this.renderText() ? this.renderTextMode() : RenderTextMode.DISABLED,\n      findController: this.pdfFindController,\n      l10n: new PDFJSViewer.GenericL10n('en'),\n      imageResourcesPath: this.#imageResourcesPath,\n      annotationEditorMode: PDFJS.AnnotationEditorType.DISABLE\n    };\n  }\n\n  #setupViewer() {\n    if (this.pdfViewer) {\n      this.pdfViewer.setDocument(null as any);\n    }\n\n    // assign(PDFJS, 'disableTextLayer', !this._renderText);\n\n    this.#initPDFServices();\n\n    if (this.showAll()) {\n      this.pdfViewer = new PDFJSViewer.PDFViewer(this.#getPDFOptions());\n    } else {\n      this.pdfViewer = new PDFJSViewer.PDFSinglePageViewer(this.#getPDFOptions());\n    }\n    this.pdfLinkService.setViewer(this.pdfViewer);\n\n    this.pdfViewer._currentPageNumber = this.page();\n  }\n\n  #getValidPageNumber(page: number): number {\n    if (page < 1) {\n      return 1;\n    }\n\n    if (page > this.#pdf!.numPages) {\n      return this.#pdf!.numPages;\n    }\n\n    return page;\n  }\n\n  #getDocumentParams() {\n    const srcType = typeof this.src();\n    const cMapsUrl = this.cMapsUrl() || this.#config.cMapUrl;\n\n    // Build params with CSP-compliant configuration\n    const params: any = {\n      enableXfa: true,\n      isEvalSupported: false // Security: Disable eval() - CVE-2024-4367\n    };\n\n    // Apply cMaps configuration (for CJK character support)\n    if (cMapsUrl) {\n      params.cMapUrl = cMapsUrl;\n      params.cMapPacked = this.#config.cMapPacked ?? true;\n    }\n\n    // Apply standard fonts configuration\n    if (this.#config.standardFontDataUrl) {\n      params.standardFontDataUrl = this.#config.standardFontDataUrl;\n    }\n\n    // Apply CSP-related configuration\n    if (this.#config.disableFontFace !== undefined) {\n      params.disableFontFace = this.#config.disableFontFace;\n    }\n\n    if (this.#config.disableStream !== undefined) {\n      params.disableStream = this.#config.disableStream;\n    }\n\n    if (this.#config.disableRange !== undefined) {\n      params.disableRange = this.#config.disableRange;\n    }\n\n    if (this.#config.maxImageSize !== undefined && this.#config.maxImageSize > 0) {\n      params.maxImageSize = this.#config.maxImageSize;\n    }\n\n    if (this.#config.useOnlyCssZoom !== undefined) {\n      params.useOnlyCssZoom = this.#config.useOnlyCssZoom;\n    }\n\n    // Apply source configuration\n    if (srcType === 'string') {\n      params.url = this.src();\n    } else if (srcType === 'object') {\n      if ((this.src() as any).byteLength !== undefined) {\n        params.data = this.src();\n      } else {\n        Object.assign(params, this.src());\n      }\n    } else {\n      return this.src();\n    }\n\n    return params;\n  }\n\n  #loadPDF() {\n    if (!this.src()) {\n      return;\n    }\n\n    if (this.#lastLoaded === this.src()) {\n      this.#update();\n      return;\n    }\n\n    this.#clear();\n\n    this.#setupViewer();\n\n    this.#loadingTask = getDocument(this.#getDocumentParams());\n\n    this.#loadingTask!.onProgress = (progressData: PDFProgressData) => {\n      this.pdfProgress.emit(progressData);\n    };\n\n    const src = this.src();\n\n    from(this.#loadingTask!.promise as Promise<PDFDocumentProxy>)\n      .pipe(takeUntilDestroyed(this.#destroyRef))\n      .subscribe({\n        next: (pdf) => {\n          this.#pdf = pdf;\n          this.#lastLoaded = src;\n\n          this.afterLoadComplete.emit(pdf);\n          this.#resetPdfDocument();\n\n          this.#update();\n        },\n        error: (error) => {\n          this.#lastLoaded = null;\n          this.pdfError.emit(error);\n        }\n      });\n  }\n\n  #update() {\n    this.page.set(this.page());\n\n    this.#render();\n  }\n\n  #render() {\n    this.page.set(this.#getValidPageNumber(this.page()));\n\n    if (this.rotation() !== 0 || this.pdfViewer.pagesRotation !== this.rotation()) {\n      // wait until at least the first page is available.\n      this.pdfViewer.firstPagePromise?.then(() => (this.pdfViewer.pagesRotation = this.rotation()));\n    }\n\n    if (this.stickToPage()) {\n      setTimeout(() => {\n        this.pdfViewer.currentPageNumber = this.page();\n      });\n    }\n\n    if (!this.pdfViewer._pages?.length) {\n      // the first time we wait until pages init\n      const sub = this.pageInitialized.subscribe(() => {\n        this.#updateSize();\n        sub.unsubscribe();\n      });\n    } else {\n      this.#updateSize();\n    }\n  }\n\n  #getScale(viewportWidth: number, viewportHeight: number) {\n    const borderSize = this.showBorders() ? 2 * PdfViewerComponent.BORDER_WIDTH : 0;\n    const pdfContainerWidth = this.pdfViewerContainer().nativeElement.clientWidth - borderSize;\n    const pdfContainerHeight = this.pdfViewerContainer().nativeElement.clientHeight - borderSize;\n\n    if (pdfContainerHeight === 0 || viewportHeight === 0 || pdfContainerWidth === 0 || viewportWidth === 0) {\n      return 1;\n    }\n\n    let ratio = 1;\n    switch (this.zoomScale()) {\n      case 'page-fit':\n        ratio = Math.min(pdfContainerHeight / viewportHeight, pdfContainerWidth / viewportWidth);\n        break;\n      case 'page-height':\n        ratio = pdfContainerHeight / viewportHeight;\n        break;\n      case 'page-width':\n      default:\n        ratio = pdfContainerWidth / viewportWidth;\n        break;\n    }\n\n    return (this.zoom() * ratio) / PdfViewerComponent.CSS_UNITS;\n  }\n\n  #resetPdfDocument() {\n    this.pdfLinkService.setDocument(this.#pdf, null);\n    this.pdfFindController.setDocument(this.#pdf!);\n    this.pdfViewer.setDocument(this.#pdf!);\n  }\n\n  #initialize(): void {\n    if (isSSR() || !this.#isVisible) {\n      return;\n    }\n\n    this.#isInitialized = true;\n    this.#initEventBus();\n    this.#setupViewer();\n  }\n\n  #setupResizeListener(): void {\n    if (isSSR()) {\n      return;\n    }\n\n    this.#ngZone.runOutsideAngular(() => {\n      fromEvent(window, 'resize')\n        .pipe(\n          debounceTime(100),\n          filter(() => this.autoresize() && !!this.#pdf),\n          takeUntilDestroyed(this.#destroyRef)\n        )\n        .subscribe(() => {\n          this.#updateSize();\n        });\n    });\n  }\n\n  #setupCopyHandler(): void {\n    if (isSSR()) {\n      return;\n    }\n\n    this.#ngZone.runOutsideAngular(() => {\n      // Handle keyboard copy (Ctrl+C)\n      fromEvent<KeyboardEvent>(document, 'keydown')\n        .pipe(\n          takeUntilDestroyed(this.#destroyRef),\n          filter((event) => (event.ctrlKey || event.metaKey) && event.key === 'c'),\n          filter(() => this.#isViewerFocused()),\n          tap((event) => this.#handleCopy(event))\n        )\n        .subscribe();\n\n      // Setup text layer copy handlers after PDF is loaded\n      this.afterLoadComplete.subscribe(() => {\n        this.#setupTextLayerCopyHandlers();\n        this.#setupTextLayerCopyForPage(); // Setup for all existing text layers\n      });\n    });\n  }\n\n  #setupTextLayerCopyHandlers(): void {\n    // Wait a bit for text layers to be rendered\n    setTimeout(() => {\n      const container = this.pdfViewerContainer().nativeElement;\n\n      // Also handle copy events on the container level\n      fromEvent<ClipboardEvent>(container, 'copy')\n        .pipe(takeUntilDestroyed(this.#destroyRef))\n        .subscribe((event) => {\n          const selection = window.getSelection();\n          if (selection && selection.toString().trim()) {\n            const selectedText = selection.toString();\n            if (event.clipboardData) {\n              event.clipboardData.setData('text/plain', selectedText);\n              event.preventDefault();\n            }\n          }\n        });\n    }, 500);\n  }\n\n  #setupTextLayerCopyForPage(pageNumber?: number): void {\n    setTimeout(() => {\n      const container = this.pdfViewerContainer().nativeElement;\n      let textLayers: NodeListOf<Element>;\n\n      textLayers = pageNumber ? container.querySelectorAll(`[data-page-number=\"${pageNumber}\"] .textLayer`) : container.querySelectorAll('.textLayer');\n\n      textLayers.forEach((textLayer) => {\n        const htmlTextLayer = textLayer as HTMLElement;\n\n        // Remove any existing listeners to avoid duplicates\n        const existingListener = (htmlTextLayer as any)._copyListener;\n        if (existingListener) {\n          htmlTextLayer.removeEventListener('copy', existingListener);\n        }\n\n        // Add copy event listener\n        const copyListener = (event: ClipboardEvent) => {\n          const selection = window.getSelection();\n          if (selection && selection.toString().trim()) {\n            const selectedText = selection.toString();\n            if (event.clipboardData) {\n              event.clipboardData.setData('text/plain', selectedText);\n              event.preventDefault();\n            }\n          }\n        };\n\n        htmlTextLayer.addEventListener('copy', copyListener);\n        (htmlTextLayer as any)._copyListener = copyListener;\n\n        // Ensure the text layer can receive events\n        htmlTextLayer.setAttribute('tabindex', '-1');\n        htmlTextLayer.style.pointerEvents = 'auto';\n      });\n    }, 100);\n  }\n\n  #isViewerFocused(): boolean {\n    const container = this.pdfViewerContainer().nativeElement;\n    return container.contains(document.activeElement) || container === document.activeElement;\n  }\n\n  #handleCopy(event: Event): void {\n    try {\n      const selection = window.getSelection();\n      if (selection && selection.toString().trim()) {\n        const selectedText = selection.toString();\n\n        if (event instanceof ClipboardEvent && event.clipboardData) {\n          event.clipboardData.setData('text/plain', selectedText);\n          event.preventDefault();\n          return;\n        }\n\n        navigator.clipboard && window.isSecureContext\n          ? navigator.clipboard.writeText(selectedText).catch(() => this.#fallbackCopy(selectedText, event))\n          : this.#fallbackCopy(selectedText, event);\n      }\n    } catch (error) {\n      console.warn('Copy operation failed:', error);\n    }\n  }\n\n  #fallbackCopy(text: string, event: Event): void {\n    // Create a temporary textarea element\n    const textarea = document.createElement('textarea');\n    textarea.value = text;\n    textarea.style.position = 'fixed';\n    textarea.style.left = '-999999px';\n    textarea.style.top = '-999999px';\n    document.body.appendChild(textarea);\n\n    try {\n      textarea.focus();\n      textarea.select();\n      document.execCommand('copy');\n    } catch (err) {\n      console.warn('Fallback copy failed:', err);\n    } finally {\n      document.body.removeChild(textarea);\n    }\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\nexport interface KeyboardShortcut {\n  key: string;\n  action: string;\n  ctrlKey?: boolean;\n  shiftKey?: boolean;\n  altKey?: boolean;\n  metaKey?: boolean;\n}\n\nexport interface ShortcutAction {\n  action: string;\n  event: KeyboardEvent;\n}\n\n@Injectable()\nexport class PdfKeyboardShortcutsService {\n  /**\n   * Observable stream of shortcut actions\n   */\n  action$ = new Subject<ShortcutAction>();\n\n  /**\n   * Default keyboard shortcuts configuration\n   */\n  private shortcuts: KeyboardShortcut[] = [\n    { key: 'f', action: 'focusSearch', ctrlKey: true },\n    { key: 'PageUp', action: 'previousPage' },\n    { key: 'PageDown', action: 'nextPage' },\n    { key: '+', action: 'zoomIn', ctrlKey: true },\n    { key: '=', action: 'zoomIn', ctrlKey: true }, // Also handle Ctrl+= (same key as +)\n    { key: '-', action: 'zoomOut', ctrlKey: true },\n    { key: '0', action: 'resetZoom', ctrlKey: true },\n    { key: 'Home', action: 'firstPage' },\n    { key: 'End', action: 'lastPage' },\n    { key: 'F3', action: 'searchNext' },\n    { key: 'F3', action: 'searchPrevious', shiftKey: true },\n    { key: 'Escape', action: 'clearSearch' },\n    { key: 'ArrowUp', action: 'scrollUp' },\n    { key: 'ArrowDown', action: 'scrollDown' },\n    { key: 'ArrowLeft', action: 'scrollLeft' },\n    { key: 'ArrowRight', action: 'scrollRight' },\n    { key: ' ', action: 'scrollPageDown' }, // Space bar\n    { key: ' ', action: 'scrollPageUp', shiftKey: true } // Shift+Space\n  ];\n\n  /**\n   * Handle keyboard events and dispatch actions\n   * @param event Keyboard event\n   * @returns true if shortcut was handled, false otherwise\n   */\n  handleKeyboardEvent(event: KeyboardEvent): boolean {\n    // Find matching shortcut\n    const shortcut = this.shortcuts.find(s => this.matchesShortcut(s, event));\n\n    if (shortcut) {\n      this.action$.next({\n        action: shortcut.action,\n        event\n      });\n      return true;\n    }\n\n    return false;\n  }\n\n  /**\n   * Check if keyboard event matches a shortcut\n   */\n  private matchesShortcut(shortcut: KeyboardShortcut, event: KeyboardEvent): boolean {\n    // Key must match (case-insensitive for letters)\n    const keyMatches =\n      event.key.toLowerCase() === shortcut.key.toLowerCase() ||\n      event.key === shortcut.key;\n\n    if (!keyMatches) return false;\n\n    // Check modifier keys (ctrl, shift, alt, meta/cmd)\n    const ctrlMatches = (shortcut.ctrlKey || shortcut.metaKey)\n      ? (event.ctrlKey || event.metaKey)\n      : !event.ctrlKey && !event.metaKey;\n\n    const shiftMatches = shortcut.shiftKey\n      ? event.shiftKey\n      : !event.shiftKey;\n\n    const altMatches = shortcut.altKey\n      ? event.altKey\n      : !event.altKey;\n\n    return ctrlMatches && shiftMatches && altMatches;\n  }\n\n  /**\n   * Check if a specific shortcut is enabled\n   */\n  isShortcutEnabled(action: string): boolean {\n    return this.shortcuts.some(s => s.action === action);\n  }\n\n  /**\n   * Set custom shortcuts (replaces default shortcuts)\n   */\n  setShortcuts(customShortcuts: KeyboardShortcut[]): void {\n    this.shortcuts = customShortcuts;\n  }\n\n  /**\n   * Add a custom shortcut\n   */\n  addShortcut(shortcut: KeyboardShortcut): void {\n    this.shortcuts.push(shortcut);\n  }\n\n  /**\n   * Remove a shortcut by action\n   */\n  removeShortcut(action: string): void {\n    this.shortcuts = this.shortcuts.filter(s => s.action !== action);\n  }\n\n  /**\n   * Get all configured shortcuts\n   */\n  getShortcuts(): KeyboardShortcut[] {\n    return [...this.shortcuts];\n  }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\n\n/**\n * Security configuration for PDF viewer\n */\nexport interface PdfSecurityConfig {\n  /**\n   * List of allowed URL protocols\n   * @default ['http:', 'https:', 'blob:', 'data:']\n   */\n  allowedProtocols?: string[];\n\n  /**\n   * List of allowed domains for PDF loading\n   * If specified, only PDFs from these domains will be loaded\n   * @example ['example.com', 'cdn.example.com']\n   */\n  allowedDomains?: string[];\n\n  /**\n   * Whether to allow data URLs\n   * @default true\n   */\n  allowDataUrls?: boolean;\n\n  /**\n   * Whether to allow blob URLs\n   * @default true\n   */\n  allowBlobUrls?: boolean;\n\n  /**\n   * Maximum PDF file size in bytes\n   * @default -1 (no limit)\n   */\n  maxFileSize?: number;\n}\n\n/**\n * Service for validating and sanitizing PDF sources\n * Prevents XSS attacks and ensures safe PDF loading\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class PdfSecurityService {\n  #sanitizer = inject(DomSanitizer);\n\n  private readonly DEFAULT_ALLOWED_PROTOCOLS = ['http:', 'https:', 'blob:', 'data:'];\n  private config: PdfSecurityConfig = {\n    allowedProtocols: this.DEFAULT_ALLOWED_PROTOCOLS,\n    allowDataUrls: true,\n    allowBlobUrls: true,\n    maxFileSize: -1\n  };\n\n  /**\n   * Configure security settings\n   */\n  configure(config: PdfSecurityConfig): void {\n    this.config = { ...this.config, ...config };\n  }\n\n  /**\n   * Validate a URL for PDF loading\n   * @param url URL to validate\n   * @returns true if URL is safe, false otherwise\n   */\n  validateUrl(url: string): boolean {\n    if (!url || typeof url !== 'string') {\n      return false;\n    }\n\n    try {\n      // Check for potential XSS patterns\n      if (this.#containsXssPatterns(url)) {\n        console.warn('[PdfSecurityService] Blocked URL with potential XSS pattern:', url);\n        return false;\n      }\n\n      // Parse URL\n      const parsedUrl = new URL(url, window.location.href);\n\n      // Validate protocol\n      const protocol = parsedUrl.protocol;\n      const allowedProtocols = this.config.allowedProtocols || this.DEFAULT_ALLOWED_PROTOCOLS;\n\n      // Handle special protocols\n      if (protocol === 'data:') {\n        if (!this.config.allowDataUrls) {\n          console.warn('[PdfSecurityService] Data URLs are disabled');\n          return false;\n        }\n        // Validate data URL format\n        return this.#validateDataUrl(url);\n      }\n\n      if (protocol === 'blob:') {\n        if (!this.config.allowBlobUrls) {\n          console.warn('[PdfSecurityService] Blob URLs are disabled');\n          return false;\n        }\n        return true;\n      }\n\n      // Check protocol\n      if (!allowedProtocols.includes(protocol)) {\n        console.warn('[PdfSecurityService] Blocked URL with disallowed protocol:', protocol);\n        return false;\n      }\n\n      // Check domain allowlist if configured\n      if (this.config.allowedDomains && this.config.allowedDomains.length > 0) {\n        const hostname = parsedUrl.hostname.toLowerCase();\n        const isAllowed = this.config.allowedDomains.some(domain =>\n          hostname === domain.toLowerCase() || hostname.endsWith(`.${domain.toLowerCase()}`)\n        );\n\n        if (!isAllowed) {\n          console.warn('[PdfSecurityService] Blocked URL from disallowed domain:', hostname);\n          return false;\n        }\n      }\n\n      return true;\n    } catch (error) {\n      console.error('[PdfSecurityService] Error validating URL:', error);\n      return false;\n    }\n  }\n\n  /**\n   * Sanitize a URL for safe use\n   * @param url URL to sanitize\n   * @returns Sanitized URL or null if invalid\n   */\n  sanitizeUrl(url: string): SafeResourceUrl | null {\n    if (!this.validateUrl(url)) {\n      return null;\n    }\n\n    try {\n      return this.#sanitizer.sanitize(1 /* SecurityContext.URL */, url) as any;\n    } catch (error) {\n      console.error('[PdfSecurityService] Error sanitizing URL:', error);\n      return null;\n    }\n  }\n\n  /**\n   * Validate PDF source (URL, Blob, or ArrayBuffer)\n   * @param source PDF source to validate\n   * @returns true if source is valid, false otherwise\n   */\n  validateSource(source: any): boolean {\n    if (!source) {\n      return false;\n    }\n\n    // String URL\n    if (typeof source === 'string') {\n      return this.validateUrl(source);\n    }\n\n    // ArrayBuffer or TypedArray\n    if (source instanceof ArrayBuffer || ArrayBuffer.isView(source)) {\n      const byteLength = source instanceof ArrayBuffer ? source.byteLength : source.byteLength;\n\n      if (this.config.maxFileSize && this.config.maxFileSize > 0) {\n        if (byteLength > this.config.maxFileSize) {\n          console.warn('[PdfSecurityService] PDF exceeds maximum file size:', byteLength);\n          return false;\n        }\n      }\n\n      return true;\n    }\n\n    // Blob\n    if (source instanceof Blob) {\n      if (this.config.maxFileSize && this.config.maxFileSize > 0) {\n        if (source.size > this.config.maxFileSize) {\n          console.warn('[PdfSecurityService] PDF Blob exceeds maximum file size:', source.size);\n          return false;\n        }\n      }\n\n      return true;\n    }\n\n    // PDF source object with URL property\n    if (typeof source === 'object' && source.url) {\n      return this.validateUrl(source.url);\n    }\n\n    // Unknown source type\n    console.warn('[PdfSecurityService] Unknown PDF source type:', typeof source);\n    return false;\n  }\n\n  /**\n   * Check for potential XSS patterns in URL\n   */\n  #containsXssPatterns(url: string): boolean {\n    const xssPatterns = [\n      /<script/i,\n      /javascript:/i,\n      /vbscript:/i,\n      /on\\w+\\s*=/i, // Event handlers like onclick=\n      /<iframe/i,\n      /<embed/i,\n      /<object/i\n    ];\n\n    return xssPatterns.some(pattern => pattern.test(url));\n  }\n\n  /**\n   * Validate data URL format\n   */\n  #validateDataUrl(url: string): boolean {\n    // Data URLs should start with data: followed by MIME type\n    const dataUrlPattern = /^data:([a-zA-Z0-9]+\\/[a-zA-Z0-9\\-\\+\\.]+)(;base64)?,/;\n    const match = url.match(dataUrlPattern);\n\n    if (!match) {\n      console.warn('[PdfSecurityService] Invalid data URL format');\n      return false;\n    }\n\n    const mimeType = match[1];\n\n    // Only allow PDF MIME types in data URLs\n    const allowedMimeTypes = ['application/pdf', 'application/octet-stream'];\n    if (!allowedMimeTypes.includes(mimeType.toLowerCase())) {\n      console.warn('[PdfSecurityService] Invalid MIME type in data URL:', mimeType);\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Get current security configuration\n   */\n  getConfig(): Readonly<PdfSecurityConfig> {\n    return { ...this.config };\n  }\n}\n","import { ChangeDetectionStrategy, Component, effect, input, linkedSignal, output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\n\n@Component({\n  selector: 'yuv-pdf-toolbar-paging',\n  imports: [FormsModule, TranslatePipe],\n  template: ` <div class=\"btn-groub\">\n      <button\n        [disabled]=\"workingPage() <= 1\"\n        (click)=\"incrementPage('first')\"\n        type=\"button\"\n        [attr.aria-label]=\"'yuv.media.viewer.pdf.toolbar.pagination.first.page' | translate\"\n        title=\"{{ 'yuv.media.viewer.pdf.toolbar.pagination.first.page' | translate }}\"\n      >\n        <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#5f6368\" aria-hidden=\"true\" focusable=\"false\">\n          <path d=\"M240-240v-480h80v480h-80Zm440 0L440-480l240-240 56 56-184 184 184 184-56 56Z\" />\n        </svg>\n      </button>\n      <button\n        [disabled]=\"workingPage() <= 1\"\n        (click)=\"incrementPage(-1)\"\n        type=\"button\"\n        [attr.aria-label]=\"'yuv.media.viewer.pdf.toolbar.pagination.previous.page' | translate\"\n        title=\"{{ 'yuv.media.viewer.pdf.toolbar.pagination.previous.page' | translate }}\"\n      >\n        <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#5f6368\" aria-hidden=\"true\" focusable=\"false\">\n          <path d=\"M560-240 320-480l240-240 56 56-184 184 184 184-56 56Z\" />\n        </svg>\n      </button>\n    </div>\n    <input\n      type=\"number\"\n      name=\"page\"\n      inputmode=\"numeric\"\n      min=\"1\"\n      [attr.max]=\"totalPages()\"\n      [attr.placeholder]=\"'yuv.media.viewer.pdf.toolbar.pagination.page.input' | translate\"\n      [ngModel]=\"workingPage()\"\n      (ngModelChange)=\"onPageChange($event)\"\n      pattern=\"^[1-9][0-9]*$\"\n      [attr.aria-label]=\"'yuv.media.viewer.pdf.toolbar.pagination.page.input' | translate\"\n    />\n    @if (!hideTotalPages()) {\n      <span class=\"total-pages-count\">{{ 'yuv.media.viewer.pdf.toolbar.pagination.of' | translate: { total: totalPages() } }}</span>\n    }\n    <div class=\"btn-groub\">\n      <button\n        [disabled]=\"workingPage() >= totalPages()\"\n        (click)=\"incrementPage(1)\"\n        type=\"button\"\n        [attr.aria-label]=\"'yuv.media.viewer.pdf.toolbar.pagination.next.page' | translate\"\n        title=\"{{ 'yuv.media.viewer.pdf.toolbar.pagination.next.page' | translate }}\"\n      >\n        <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#5f6368\" aria-hidden=\"true\" focusable=\"false\">\n          <path d=\"M504-480 320-664l56-56 240 240-240 240-56-56 184-184Z\" />\n        </svg>\n      </button>\n      <button\n        [disabled]=\"workingPage() >= totalPages()\"\n        (click)=\"incrementPage('last')\"\n        type=\"button\"\n        [attr.aria-label]=\"'yuv.media.viewer.pdf.toolbar.pagination.last.page' | translate\"\n        title=\"{{ 'yuv.media.viewer.pdf.toolbar.pagination.last.page' | translate }}\"\n      >\n        <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#5f6368\" aria-hidden=\"true\" focusable=\"false\">\n          <path d=\"m280-240-56-56 184-184-184-184 56-56 240 240-240 240Zm360 0v-480h80v480h-80Z\" />\n        </svg>\n      </button>\n    </div>`,\n  styleUrls: [`./paging.component.scss`],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: 'yuv-pdf-toolbar-paging'\n  }\n})\nexport class PagingComponent {\n  page = input<number>(1);\n  totalPages = input<number>(0);\n  hideTotalPages = input<boolean>(false);\n\n  workingPage = linkedSignal({\n    source: this.page,\n    computation: (page) => {\n      return page;\n    }\n  });\n\n  pageChange = output<number>();\n\n  #pageChangeEffect = effect(() => {\n    this.pageChange.emit(this.workingPage());\n  });\n\n  onPageChange(value: number) {\n    value > this.totalPages() ? this.workingPage.set(this.totalPages()) : this.workingPage.set(value);\n  }\n\n  incrementPage(amount: number | 'first' | 'last') {\n    if (amount === 'first') {\n      this.workingPage.set(1);\n      return;\n    } else if (amount === 'last') {\n      this.workingPage.set(this.totalPages());\n      return;\n    } else {\n      this.workingPage.update((page) => page + amount);\n    }\n  }\n}\n","import { ChangeDetectionStrategy, Component, effect, input, output, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\n\n@Component({\n  selector: 'yuv-pdf-toolbar-rotate',\n  imports: [FormsModule, TranslatePipe],\n  template: `\n    <div class=\"btn-groub\">\n      <button\n        (click)=\"rotate(90)\"\n        type=\"button\"\n        [attr.aria-label]=\"'yuv.media.viewer.pdf.toolbar.rotate.right' | translate\"\n        title=\"{{ 'yuv.media.viewer.pdf.toolbar.rotate.right' | translate }}\"\n      >\n        <svg\n          xmlns=\"http://www.w3.org/2000/svg\"\n          width=\"20\"\n          height=\"20\"\n          viewBox=\"0 0 24 24\"\n          fill=\"none\"\n          stroke=\"currentColor\"\n          stroke-width=\"2\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n          aria-hidden=\"true\"\n          focusable=\"false\"\n        >\n          <polyline points=\"23 4 23 10 17 10\"></polyline>\n          <path d=\"M20.49 15a9 9 0 1 1-2.12-9.36L23 10\"></path>\n        </svg>\n      </button>\n      @if (stacked()) {\n      <span class=\"rotate-label\" aria-hidden=\"true\">{{ 'yuv.media.viewer.pdf.toolbar.rotate.right' | translate }}</span>\n      }\n    </div>\n    <!-- <input type=\"number\" name=\"rotation\" placeholder=\"Rotation\" [ngModel]=\"rotation()\" disabled /> -->\n    <div class=\"btn-groub\">\n      <button\n        (click)=\"rotate(-90)\"\n        type=\"button\"\n        [attr.aria-label]=\"'yuv.media.viewer.pdf.toolbar.rotate.left' | translate\"\n        title=\"{{ 'yuv.media.viewer.pdf.toolbar.rotate.left' | translate }}\"\n      >\n        <svg\n          xmlns=\"http://www.w3.org/2000/svg\"\n          width=\"20\"\n          height=\"20\"\n          viewBox=\"0 0 24 24\"\n          fill=\"none\"\n          stroke=\"currentColor\"\n          stroke-width=\"2\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n          transform=\"scale(-1,1)\"\n          aria-hidden=\"true\"\n          focusable=\"false\"\n        >\n          <polyline points=\"23 4 23 10 17 10\"></polyline>\n          <path d=\"M20.49 15a9 9 0 1 1-2.12-9.36L23 10\"></path>\n        </svg>\n      </button>\n      @if (stacked()) {\n      <span class=\"rotate-label\" aria-hidden=\"true\">{{ 'yuv.media.viewer.pdf.toolbar.rotate.left' | translate }}</span>\n      }\n    </div>\n  `,\n  host: {\n    class: 'yuv-pdf-toolbar-rotation',\n    '[class.stacked]': 'stacked()'\n  },\n  styleUrls: ['./rotate.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class RotateComponent {\n  rotation = signal(0);\n  stacked = input<boolean>(false);\n\n  rotationChange = output<number>();\n\n  #rotationEffect = effect(() => this.rotationChange.emit(this.rotation()));\n\n  rotate(angle: number) {\n    this.rotation.update((r) => {\n      let newRotation = (r + angle) % 360;\n      if (newRotation < 0) {\n        newRotation += 360;\n      }\n      this.rotationChange.emit(newRotation);\n      return newRotation;\n    });\n  }\n}\n","import { ChangeDetectionStrategy, Component, computed, ElementRef, model, output, viewChild } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\n\nexport interface SearchOptions {\n  query: string;\n  caseSensitive: boolean;\n  wholeWord: boolean;\n  highlightAll: boolean;\n  matchDiacritics: boolean;\n  matchAnyWord: boolean;\n  regex: boolean;\n  findPrevious: boolean;\n}\n\n@Component({\n  selector: 'yuv-pdf-toolbar-search',\n  imports: [TranslateModule],\n  templateUrl: './search.component.html',\n  styleUrls: ['./search.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: 'yuv-pdf-toolbar-search',\n    role: 'search'\n  }\n})\nexport class SearchComponent {\n  // Two-way bound so state survives overlay close/reopen (CDK destroys the view).\n  pdfQuery = model<string>('');\n  caseSensitive = model<boolean>(false);\n  wholeWord = model<boolean>(false);\n  highlightAll = model<boolean>(true);\n  matchDiacritics = model<boolean>(false);\n  matchAnyWord = model<boolean>(false);\n  regex = model<boolean>(false);\n  searchResultCount = model<number | null>(null);\n  currentMatchIndex = model<number>(0);\n\n  searchQueryChange = output<SearchOptions>();\n  closed = output<void>();\n\n  searchInput = viewChild<ElementRef<HTMLInputElement>>('searchInput');\n\n  hasResults = computed(() => {\n    const count = this.searchResultCount();\n    return count !== null && count > 0;\n  });\n\n  clearSearch(): void {\n    this.pdfQuery.set('');\n    this.searchResultCount.set(null);\n    this.currentMatchIndex.set(0);\n    this.searchQueryChange.emit(this.#buildOptions('', false));\n    this.focusInput();\n  }\n\n  searchQueryChanged(eventOrValue: Event | string): void {\n    const value = typeof eventOrValue === 'string' ? eventOrValue : ((eventOrValue.target as HTMLInputElement | null)?.value ?? '');\n    this.pdfQuery.set(value);\n    if (!value) {\n      this.searchResultCount.set(null);\n      this.currentMatchIndex.set(0);\n    }\n    this.searchQueryChange.emit(this.#buildOptions(value, false));\n  }\n\n  searchNext(): void {\n    if (!this.hasResults()) return;\n    this.searchQueryChange.emit(this.#buildOptions(this.pdfQuery(), false));\n  }\n\n  searchPrevious(): void {\n    if (!this.hasResults()) return;\n    this.searchQueryChange.emit(this.#buildOptions(this.pdfQuery(), true));\n  }\n\n  toggleCaseSensitive(): void {\n    this.caseSensitive.update((v) => !v);\n    this.#reemit();\n  }\n\n  toggleWholeWord(): void {\n    this.wholeWord.update((v) => !v);\n    this.#reemit();\n  }\n\n  toggleHighlightAll(): void {\n    this.highlightAll.update((v) => !v);\n    this.#reemit();\n  }\n\n  toggleMatchDiacritics(): void {\n    this.matchDiacritics.update((v) => !v);\n    this.#reemit();\n  }\n\n  toggleMatchAnyWord(): void {\n    this.matchAnyWord.update((v) => !v);\n    this.#reemit();\n  }\n\n  toggleRegex(): void {\n    this.regex.update((v) => !v);\n    this.#reemit();\n  }\n\n  focusInput(): void {\n    this.searchInput()?.nativeElement.focus();\n  }\n\n  closePopout(): void {\n    this.closed.emit();\n  }\n\n  closeAndReset(): void {\n    this.pdfQuery.set('');\n    this.caseSensitive.set(false);\n    this.wholeWord.set(false);\n    this.highlightAll.set(true);\n    this.matchDiacritics.set(false);\n    this.matchAnyWord.set(false);\n    this.regex.set(false);\n    this.searchResultCount.set(null);\n    this.currentMatchIndex.set(0);\n    this.searchQueryChange.emit(this.#buildOptions('', false));\n    this.closed.emit();\n  }\n\n  #reemit(): void {\n    const q = this.pdfQuery();\n    if (q) this.searchQueryChange.emit(this.#buildOptions(q, false));\n  }\n\n  #buildOptions(query: string, findPrevious: boolean): SearchOptions {\n    return {\n      query,\n      caseSensitive: this.caseSensitive(),\n      wholeWord: this.wholeWord(),\n      highlightAll: this.highlightAll(),\n      matchDiacritics: this.matchDiacritics(),\n      matchAnyWord: this.matchAnyWord(),\n      regex: this.regex(),\n      findPrevious\n    };\n  }\n}\n","<div class=\"search-row\">\n  <div class=\"search-input-wrapper\">\n    <input\n      #searchInput\n      class=\"pdf-query-input\"\n      type=\"text\"\n      name=\"search\"\n      autocomplete=\"off\"\n      [placeholder]=\"'yuv.media.viewer.pdf.search.placeholder' | translate\"\n      [value]=\"pdfQuery()\"\n      (input)=\"searchQueryChanged($event)\"\n      (keyup.enter)=\"searchNext()\"\n      (keyup.escape)=\"closePopout()\"\n      [attr.aria-label]=\"'yuv.media.viewer.pdf.search.placeholder' | translate\"\n    />\n    @if (pdfQuery()) {\n    <button\n      class=\"clear-btn\"\n      type=\"button\"\n      (click)=\"clearSearch()\"\n      [attr.aria-label]=\"'yuv.media.viewer.pdf.search.clear' | translate\"\n      [title]=\"'yuv.media.viewer.pdf.search.clear' | translate\"\n    >\n      &times;\n    </button>\n    }\n  </div>\n\n  <div class=\"search-navigation\">\n    <button\n      class=\"nav-btn\"\n      type=\"button\"\n      (click)=\"searchPrevious()\"\n      [disabled]=\"!hasResults()\"\n      [attr.aria-label]=\"'yuv.media.viewer.pdf.search.previous' | translate\"\n      [title]=\"'yuv.media.viewer.pdf.search.previous' | translate\"\n    >\n      <svg\n        xmlns=\"http://www.w3.org/2000/svg\"\n        width=\"16\"\n        height=\"16\"\n        viewBox=\"0 0 24 24\"\n        fill=\"none\"\n        stroke=\"currentColor\"\n        stroke-width=\"2\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n        aria-hidden=\"true\"\n        focusable=\"false\"\n      >\n        <polyline points=\"15 18 9 12 15 6\"></polyline>\n      </svg>\n    </button>\n    <button\n      class=\"nav-btn\"\n      type=\"button\"\n      (click)=\"searchNext()\"\n      [disabled]=\"!hasResults()\"\n      [attr.aria-label]=\"'yuv.media.viewer.pdf.search.next' | translate\"\n      [title]=\"'yuv.media.viewer.pdf.search.next' | translate\"\n    >\n      <svg\n        xmlns=\"http://www.w3.org/2000/svg\"\n        width=\"16\"\n        height=\"16\"\n        viewBox=\"0 0 24 24\"\n        fill=\"none\"\n        stroke=\"currentColor\"\n        stroke-width=\"2\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n        aria-hidden=\"true\"\n        focusable=\"false\"\n      >\n        <polyline points=\"9 18 15 12 9 6\"></polyline>\n      </svg>\n    </button>\n  </div>\n\n  <button\n    class=\"close-btn\"\n    type=\"button\"\n    (click)=\"closeAndReset()\"\n    [attr.aria-label]=\"'yuv.media.viewer.pdf.search.close' | translate\"\n    [title]=\"'yuv.media.viewer.pdf.search.close' | translate\"\n  >\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=\"16\"\n      height=\"16\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      stroke-width=\"2\"\n      stroke-linecap=\"round\"\n      stroke-linejoin=\"round\"\n      aria-hidden=\"true\"\n      focusable=\"false\"\n    >\n      <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n      <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n    </svg>\n  </button>\n</div>\n\n<div class=\"result-row\" aria-live=\"polite\" aria-atomic=\"true\">\n  @if (pdfQuery()) {\n    @if (searchResultCount() !== null && searchResultCount()! > 0) {\n    <span>{{ 'yuv.media.viewer.pdf.search.results.count.label' | translate : { current: currentMatchIndex(), total: searchResultCount() } }}</span>\n    } @else if (searchResultCount() === 0) {\n    <span class=\"no-results\">{{ 'yuv.media.viewer.pdf.search.no.results' | translate }}</span>\n    }\n  }\n</div>\n<!-- \n<div class=\"options-row\">\n  <button\n    type=\"button\"\n    class=\"option-chip\"\n    [class.active]=\"highlightAll()\"\n    [attr.aria-pressed]=\"highlightAll()\"\n    (click)=\"toggleHighlightAll()\"\n  >{{ 'yuv.media.viewer.pdf.search.highlight.all' | translate }}</button>\n\n  <button\n    type=\"button\"\n    class=\"option-chip\"\n    [class.active]=\"caseSensitive()\"\n    [attr.aria-pressed]=\"caseSensitive()\"\n    (click)=\"toggleCaseSensitive()\"\n  >{{ 'yuv.media.viewer.pdf.search.case.sensitive' | translate }}</button>\n\n  <button\n    type=\"button\"\n    class=\"option-chip\"\n    [class.active]=\"matchDiacritics()\"\n    [attr.aria-pressed]=\"matchDiacritics()\"\n    (click)=\"toggleMatchDiacritics()\"\n  >{{ 'yuv.media.viewer.pdf.search.match.diacritics' | translate }}</button>\n\n  <button\n    type=\"button\"\n    class=\"option-chip\"\n    [class.active]=\"wholeWord()\"\n    [attr.aria-pressed]=\"wholeWord()\"\n    (click)=\"toggleWholeWord()\"\n  >{{ 'yuv.media.viewer.pdf.search.whole.word' | translate }}</button>\n\n  <button\n    type=\"button\"\n    class=\"option-chip\"\n    [class.active]=\"matchAnyWord()\"\n    [attr.aria-pressed]=\"matchAnyWord()\"\n    (click)=\"toggleMatchAnyWord()\"\n  >{{ 'yuv.media.viewer.pdf.search.match.any.word' | translate }}</button>\n\n  <button\n    type=\"button\"\n    class=\"option-chip\"\n    [class.active]=\"regex()\"\n    [attr.aria-pressed]=\"regex()\"\n    (click)=\"toggleRegex()\"\n  >{{ 'yuv.media.viewer.pdf.search.regex' | translate }}</button>\n</div> -->\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n  name: 'zoomDisplay'\n})\nexport class ZoomDisplayPipe implements PipeTransform {\n  transform(value: number | null | undefined): string {\n    if (value == null || isNaN(value)) {\n      return '';\n    }\n    return `${(value * 100).toFixed(0)}%`;\n  }\n}\n","import { Component, computed, effect, ElementRef, inject, output, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ZoomScale } from '../../pdf-viewer/utils/typings';\nimport { ZoomDisplayPipe } from '../../pipe/zoom.display.pipe';\n\ntype ZoomPreset = { kind: 'scale'; value: ZoomScale; labelKey: string } | { kind: 'percent'; value: number; label: string };\n\n@Component({\n  selector: 'yuv-pdf-toolbar-zoom',\n  imports: [FormsModule, ZoomDisplayPipe, TranslatePipe],\n  templateUrl: './zoom.component.html',\n  styleUrls: [`./zoom.component.scss`],\n  host: {\n    class: 'yuv-pdf-toolbar-zoom',\n    '(wheel)': 'onWheel($event)'\n  }\n})\nexport class ToolBarZoomComponent {\n  #elementRef = inject(ElementRef);\n\n  zoomChange = output<number>();\n  zoomScaleChange = output<ZoomScale>();\n\n  zoom = signal(1); // scale (e.g. 1 = 100%)\n  currentZoomScale = signal<ZoomScale | null>(null);\n\n  zoomPresets = signal<ZoomPreset[]>([\n    // { kind: 'scale', value: 'page-width', labelKey: 'yuv.media.viewer.pdf.toolbar.zoom.fit.width' },\n    // { kind: 'scale', value: 'page-fit', labelKey: 'yuv.media.viewer.pdf.toolbar.zoom.fit.page' },\n    // { kind: 'scale', value: 'page-height', labelKey: 'yuv.media.viewer.pdf.toolbar.zoom.fit.height' },\n    { kind: 'percent', value: 0.5, label: '50%' },\n    { kind: 'percent', value: 0.75, label: '75%' },\n    { kind: 'percent', value: 1, label: '100%' },\n    { kind: 'percent', value: 1.25, label: '125%' },\n    { kind: 'percent', value: 1.5, label: '150%' },\n    { kind: 'percent', value: 2, label: '200%' },\n    { kind: 'percent', value: 3, label: '300%' },\n    { kind: 'percent', value: 4, label: '400%' }\n  ]);\n\n  isCustomZoom = computed(() => {\n    if (this.currentZoomScale() !== null) return false;\n    const currentZoom = this.zoom();\n    return !this.zoomPresets().some((p) => p.kind === 'percent' && Math.abs(p.value - currentZoom) < 0.01);\n  });\n\n  selectedValue = computed<string>(() => {\n    const scale = this.currentZoomScale();\n    if (scale) return scale;\n    const currentZoom = this.zoom();\n    const preset = this.zoomPresets().find((p) => p.kind === 'percent' && Math.abs(p.value - currentZoom) < 0.01);\n    return preset ? String(preset.value) : `custom:${currentZoom}`;\n  });\n\n  #zoomEffect = effect(() => this.zoomChange.emit(this.zoom()));\n\n  /**\n   * Increment zoom by a specified amount\n   * @param amount Amount to change zoom by (e.g., 0.1 for +10%, -0.1 for -10%)\n   */\n  incrementZoom(amount: number): void {\n    const newZoom = Math.round((this.zoom() + amount) * 10) / 10;\n    this.setZoom(newZoom);\n    // Reset zoom scale when manually adjusting\n    this.currentZoomScale.set(null);\n  }\n\n  /**\n   * Set zoom to a specific value\n   * @param value Zoom value (e.g., 1 = 100%)\n   */\n  setZoom(value: number): void {\n    // Clamp between 0.1 (10%) and 5.0 (500%)\n    const clampedZoom = Math.max(0.1, Math.min(5.0, value));\n    this.zoom.set(clampedZoom);\n  }\n\n  /**\n   * Handle preset dropdown change\n   */\n  onPresetChange(event: Event): void {\n    const select = event.target as HTMLSelectElement;\n    const option = select.selectedOptions[0];\n    const kind = option?.dataset['kind'];\n\n    if (kind === 'scale') {\n      const scale = select.value as ZoomScale;\n      if (scale === 'page-width') this.fitToWidth();\n      else if (scale === 'page-fit') this.fitToPage();\n      else if (scale === 'page-height') this.fitToHeight();\n      return;\n    }\n\n    if (kind === 'percent') {\n      const value = parseFloat(select.value);\n      if (!isNaN(value)) {\n        this.setZoom(value);\n        this.currentZoomScale.set(null);\n      }\n    }\n  }\n\n  /**\n   * Fit PDF to page width\n   */\n  fitToWidth(): void {\n    this.currentZoomScale.set('page-width');\n    this.zoomScaleChange.emit('page-width');\n  }\n\n  /**\n   * Fit PDF to page height\n   */\n  fitToHeight(): void {\n    this.currentZoomScale.set('page-height');\n    this.zoomScaleChange.emit('page-height');\n  }\n\n  /**\n   * Fit entire PDF page in viewport\n   */\n  fitToPage(): void {\n    this.currentZoomScale.set('page-fit');\n    this.zoomScaleChange.emit('page-fit');\n  }\n\n  /**\n   * Handle mouse wheel zoom\n   */\n  onWheel(event: WheelEvent): void {\n    // Only handle wheel events when Ctrl/Cmd is held (standard browser zoom gesture)\n    if (event.ctrlKey || event.metaKey) {\n      event.preventDefault();\n\n      const delta = event.deltaY < 0 ? 0.1 : -0.1;\n      this.incrementZoom(delta);\n    }\n  }\n}\n","<div class=\"zoom-controls\">\n  <!-- Zoom Out Button -->\n  <button\n    class=\"zoom-button\"\n    (click)=\"incrementZoom(-0.1)\"\n    type=\"button\"\n    [attr.aria-label]=\"'yuv.media.viewer.pdf.toolbar.zoom.out' | translate\"\n    [title]=\"'yuv.media.viewer.pdf.toolbar.zoom.out' | translate\"\n  >\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=\"20\"\n      height=\"20\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      stroke-width=\"2\"\n      stroke-linecap=\"round\"\n      stroke-linejoin=\"round\"\n      aria-hidden=\"true\"\n      focusable=\"false\"\n    >\n      <circle cx=\"11\" cy=\"11\" r=\"8\"></circle>\n      <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"></line>\n      <line x1=\"8\" y1=\"11\" x2=\"14\" y2=\"11\"></line>\n    </svg>\n  </button>\n\n  <!-- Zoom Preset Dropdown -->\n  <select\n    class=\"zoom-preset\"\n    [value]=\"selectedValue()\"\n    (change)=\"onPresetChange($event)\"\n    [attr.aria-label]=\"'yuv.media.viewer.pdf.toolbar.zoom.preset' | translate\"\n  >\n    @for (preset of zoomPresets(); track preset.value) { @if (preset.kind === 'scale') {\n    <option [value]=\"preset.value\" data-kind=\"scale\">{{ preset.labelKey | translate }}</option>\n    } @else {\n    <option [value]=\"preset.value\" data-kind=\"percent\">{{ preset.label }}</option>\n    } } @if (isCustomZoom()) {\n    <option [value]=\"'custom:' + zoom()\" data-kind=\"custom\" selected>\n      {{ 'yuv.media.viewer.pdf.toolbar.zoom.custom' | translate }}: {{ zoom() | zoomDisplay }}\n    </option>\n    }\n  </select>\n\n  <!-- Zoom In Button -->\n  <button\n    class=\"zoom-button\"\n    (click)=\"incrementZoom(0.1)\"\n    type=\"button\"\n    [attr.aria-label]=\"'yuv.media.viewer.pdf.toolbar.zoom.in' | translate\"\n    [title]=\"'yuv.media.viewer.pdf.toolbar.zoom.in' | translate\"\n  >\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=\"20\"\n      height=\"20\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      stroke-width=\"2\"\n      stroke-linecap=\"round\"\n      stroke-linejoin=\"round\"\n      aria-hidden=\"true\"\n      focusable=\"false\"\n    >\n      <circle cx=\"11\" cy=\"11\" r=\"8\"></circle>\n      <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"></line>\n      <line x1=\"11\" y1=\"8\" x2=\"11\" y2=\"14\"></line>\n      <line x1=\"8\" y1=\"11\" x2=\"14\" y2=\"11\"></line>\n    </svg>\n  </button>\n</div>\n","import { CdkMenu, CdkMenuTrigger } from '@angular/cdk/menu';\nimport { CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';\nimport { CdkPortal, CdkPortalOutlet } from '@angular/cdk/portal';\nimport {\n  afterNextRender,\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  DestroyRef,\n  ElementRef,\n  inject,\n  input,\n  model,\n  output,\n  signal,\n  viewChild\n} from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ZoomScale } from '../../pdf-viewer/utils/typings';\nimport { PagingComponent } from '../paging/paging.component';\nimport { RotateComponent } from '../rotate/rotate.component';\nimport { SearchComponent, SearchOptions } from '../search/search.component';\nimport { ToolBarZoomComponent } from '../zoom/zoom.component';\n\n@Component({\n  selector: 'yuv-toolbar',\n  imports: [\n    CdkConnectedOverlay,\n    CdkMenu,\n    CdkMenuTrigger,\n    CdkOverlayOrigin,\n    CdkPortal,\n    CdkPortalOutlet,\n    PagingComponent,\n    RotateComponent,\n    SearchComponent,\n    ToolBarZoomComponent,\n    TranslatePipe\n  ],\n  templateUrl: './toolbar.component.html',\n  styleUrls: [`./toolbar.component.scss`],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: 'yuv-toolbar',\n    '[class.is-narrow]': 'rotateInMenu()',\n    '[class.is-very-narrow]': 'zoomInMenu()',\n    '[class.is-minimal]': 'hidePageCount()'\n  }\n})\nexport class ToolbarComponent {\n  readonly #el = inject<ElementRef<HTMLElement>>(ElementRef);\n  readonly #destroyRef = inject(DestroyRef);\n\n  page = input<number>(1);\n  totalPages = input<number>(1);\n  searchResultCount = model<number | null>(null);\n  currentMatchIndex = model<number>(0);\n  pdfQuery = model<string>('');\n  searchCaseSensitive = model<boolean>(false);\n  searchWholeWord = model<boolean>(false);\n  searchHighlightAll = model<boolean>(true);\n  searchMatchDiacritics = model<boolean>(false);\n  searchMatchAnyWord = model<boolean>(false);\n  searchRegex = model<boolean>(false);\n  handMode = model<boolean>(false);\n\n  zoomChange = output<number>();\n  zoomScaleChange = output<ZoomScale>();\n  rotationChange = output<number>();\n  pageChange = output<number>();\n  searchQueryChange = output<SearchOptions>();\n\n  readonly width = signal(Number.POSITIVE_INFINITY);\n  readonly rotateInMenu = computed(() => this.width() < 1080);\n  readonly zoomInMenu = computed(() => this.width() < 960);\n  readonly hidePageCount = computed(() => this.width() < 680);\n  readonly hasOverflow = computed(() => this.rotateInMenu() || this.zoomInMenu());\n\n  readonly searchOpen = signal(false);\n  readonly searchTrigger = viewChild('searchOrigin', { read: ElementRef });\n\n  readonly overlayPositions = [\n    { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: 6 } as const,\n    { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -6 } as const\n  ];\n\n  constructor() {\n    afterNextRender(() => {\n      const ro = new ResizeObserver((entries) => {\n        const entry = entries[0];\n        entry && this.width.set(entry.contentRect.width);\n      });\n      ro.observe(this.#el.nativeElement);\n      this.#destroyRef.onDestroy(() => ro.disconnect());\n    });\n  }\n\n  toggleSearch(): void {\n    this.searchOpen.update((v) => !v);\n  }\n\n  openSearch(): void {\n    this.searchOpen.set(true);\n  }\n\n  closeSearch(): void {\n    const wasOpen = this.searchOpen();\n    this.searchOpen.set(false);\n    if (wasOpen) {\n      queueMicrotask(() => this.searchTrigger()?.nativeElement.focus());\n    }\n  }\n\n  onSearchAttached(): void {\n    // CDK attaches the overlay template into an overlay container outside the\n    // host view, so we focus the input via DOM query once attached.\n    queueMicrotask(() => {\n      const input = document.querySelector<HTMLInputElement>('.cdk-overlay-container yuv-pdf-toolbar-search input');\n      input?.focus();\n      input?.select();\n    });\n  }\n}\n","<yuv-pdf-toolbar-paging\n  [totalPages]=\"totalPages()\"\n  [page]=\"page()\"\n  [hideTotalPages]=\"hidePageCount()\"\n  (pageChange)=\"pageChange.emit($event)\"\n></yuv-pdf-toolbar-paging>\n\n<yuv-pdf-toolbar-zoom (zoomChange)=\"zoomChange.emit($event)\" (zoomScaleChange)=\"zoomScaleChange.emit($event)\" />\n\n<div class=\"end\">\n  <ng-container [cdkPortalOutlet]=\"!rotateInMenu() ? rotatePortal : null\" />\n\n  <ng-template cdkPortal #rotatePortal=\"cdkPortal\">\n    <yuv-pdf-toolbar-rotate [stacked]=\"rotateInMenu()\" (rotationChange)=\"rotationChange.emit($event)\" />\n  </ng-template>\n  <button\n    type=\"button\"\n    class=\"icon-btn hand-trigger\"\n    [class.active]=\"handMode()\"\n    [attr.aria-pressed]=\"handMode()\"\n    [attr.aria-label]=\"'yuv.media.viewer.pdf.toolbar.hand.tool' | translate\"\n    [title]=\"'yuv.media.viewer.pdf.toolbar.hand.tool' | translate\"\n    (click)=\"handMode.set(!handMode())\"\n  >\n    <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\n      <path\n        d=\"M480-80q-86 0-149-55.5T254-274l-78-324q-2-10 7-17.5t20-4.5l20 5q14 3 24.5 13t14.5 25l46 186v-380q0-17 11.5-28.5T348-811q17 0 28.5 11.5T388-771v311h40v-391q0-17 11.5-28.5T468-891q17 0 28.5 11.5T508-851v391h40v-351q0-17 11.5-28.5T588-851q17 0 28.5 11.5T628-811v351h40v-271q0-17 11.5-28.5T708-771q17 0 28.5 11.5T748-731v377q0 114-81 194T480-80Z\"\n      />\n    </svg>\n  </button>\n  <button\n    #searchOrigin=\"cdkOverlayOrigin\"\n    cdkOverlayOrigin\n    type=\"button\"\n    class=\"icon-btn search-trigger\"\n    [class.active]=\"searchOpen()\"\n    [attr.aria-expanded]=\"searchOpen()\"\n    [attr.aria-label]=\"'yuv.media.viewer.pdf.toolbar.search' | translate\"\n    [title]=\"'yuv.media.viewer.pdf.toolbar.search' | translate\"\n    (click)=\"toggleSearch()\"\n  >\n    <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\n      <path\n        d=\"M784-120 532-372q-30 24-69 38t-83 14q-109 0-184.5-75.5T120-580q0-109 75.5-184.5T380-840q109 0 184.5 75.5T640-580q0 44-14 83t-38 69l252 252-56 56ZM380-400q75 0 127.5-52.5T560-580q0-75-52.5-127.5T380-760q-75 0-127.5 52.5T180-580q0 75 52.5 127.5T380-400Z\"\n      />\n    </svg>\n  </button>\n\n  @if (hasOverflow()) {\n  <button\n    type=\"button\"\n    class=\"overflow-trigger\"\n    [cdkMenuTriggerFor]=\"overflow\"\n    [attr.aria-label]=\"'yuv.media.viewer.pdf.toolbar.more' | translate\"\n    [title]=\"'yuv.media.viewer.pdf.toolbar.more' | translate\"\n  >\n    <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#5f6368\" aria-hidden=\"true\" focusable=\"false\">\n      <path\n        d=\"M480-160q-33 0-56.5-23.5T400-240q0-33 23.5-56.5T480-320q33 0 56.5 23.5T560-240q0 33-23.5 56.5T480-160Zm0-240q-33 0-56.5-23.5T400-480q0-33 23.5-56.5T480-560q33 0 56.5 23.5T560-480q0 33-23.5 56.5T480-400Zm0-240q-33 0-56.5-23.5T400-720q0-33 23.5-56.5T480-800q33 0 56.5 23.5T560-720q0 33-23.5 56.5T480-640Z\"\n      />\n    </svg>\n  </button>\n  }\n</div>\n\n<ng-template\n  cdkConnectedOverlay\n  [cdkConnectedOverlayOrigin]=\"searchOrigin\"\n  [cdkConnectedOverlayOpen]=\"searchOpen()\"\n  [cdkConnectedOverlayPositions]=\"overlayPositions\"\n  [cdkConnectedOverlayHasBackdrop]=\"false\"\n  [cdkConnectedOverlayViewportMargin]=\"8\"\n  (overlayOutsideClick)=\"closeSearch()\"\n  (attach)=\"onSearchAttached()\"\n>\n  <yuv-pdf-toolbar-search\n    [(pdfQuery)]=\"pdfQuery\"\n    [(caseSensitive)]=\"searchCaseSensitive\"\n    [(wholeWord)]=\"searchWholeWord\"\n    [(highlightAll)]=\"searchHighlightAll\"\n    [(matchDiacritics)]=\"searchMatchDiacritics\"\n    [(matchAnyWord)]=\"searchMatchAnyWord\"\n    [(regex)]=\"searchRegex\"\n    [(searchResultCount)]=\"searchResultCount\"\n    [(currentMatchIndex)]=\"currentMatchIndex\"\n    (searchQueryChange)=\"searchQueryChange.emit($event)\"\n    (closed)=\"closeSearch()\"\n  />\n</ng-template>\n\n<ng-template #overflow>\n  <div cdkMenu class=\"yuv-toolbar-overflow-panel\">\n    <ng-container [cdkPortalOutlet]=\"rotateInMenu() ? rotatePortal : null\" />\n  </div>\n</ng-template>\n","import { HttpClient } from '@angular/common/http';\nimport { ChangeDetectionStrategy, Component, computed, effect, HostListener, inject, OnDestroy, signal, viewChild } from '@angular/core';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\n/* @vite-ignore */\nimport { PDFDocumentProxy } from 'pdfjs-dist';\nimport { AbstractViewerComponent } from '../abstract/abstract.viewer.component';\nimport { PdfViewerComponent } from './pdf-viewer/pdf-viewer.component';\nimport { PDFProgressData, ZoomScale } from './pdf-viewer/utils/typings';\nimport { PdfKeyboardShortcutsService } from './services/pdf-keyboard-shortcuts.service';\nimport { PdfSecurityService } from './services/pdf-security.service';\nimport { SearchOptions } from './toolbar/search/search.component';\nimport { ToolbarComponent } from './toolbar/toolbar/toolbar.component';\n\n@Component({\n  selector: 'yuv-pdf',\n  imports: [ToolbarComponent, TranslatePipe, PdfViewerComponent],\n  providers: [PdfKeyboardShortcutsService],\n  templateUrl: './pdf.component.html',\n  styleUrls: ['./pdf.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    '(document:keydown)': 'onKeydown($event)'\n  }\n})\nexport class PdfComponent extends AbstractViewerComponent implements OnDestroy {\n  readonly http = inject(HttpClient);\n  readonly #keyboardShortcutsService = inject(PdfKeyboardShortcutsService);\n  readonly #securityService = inject(PdfSecurityService);\n  readonly #translate = inject(TranslateService);\n\n  loadingPdf = signal(false);\n  showToolbar = computed(() => {\n    const metadata = this.metadata();\n    return metadata?.['showToolbar'] ?? true;\n  });\n  page = signal<number>(1);\n  totalPages = signal<number>(0);\n\n  zoomOptions = [\n    { value: 0.5, label: '50%' },\n    { value: 1, label: '100%' },\n    { value: 1.2, label: '125%' },\n    { value: 1.5, label: '150%' },\n    { value: 2.0, label: '200%' },\n    { value: 3.0, label: '300%' },\n    { value: 4.0, label: '400%' }\n  ];\n\n  error: { message: string; name: string } | null = null;\n  rotation = signal(0);\n  zoom = signal(1.0);\n  zoomScale = signal<ZoomScale>('page-width');\n\n  originalSize = signal(true);\n  pdf = signal<PDFDocumentProxy | null>(null);\n\n  renderText = signal(true);\n  progressData = signal<PDFProgressData | null>(null);\n  isLoaded = signal(false);\n  stickToPage = signal(false);\n  showAll = signal(true);\n  autoresize = signal(true);\n  fitToPage = signal(false);\n  outline = signal<any[]>([]);\n  isOutlineShown = signal(false);\n  pdfQuery = signal<string>('');\n  searchResultCount = signal<number | null>(null);\n  searchCurrentMatchIndex = signal<number>(0);\n  searchCaseSensitive = signal<boolean>(false);\n  searchWholeWord = signal<boolean>(false);\n  searchHighlightAll = signal<boolean>(true);\n  searchMatchDiacritics = signal<boolean>(false);\n  searchMatchAnyWord = signal<boolean>(false);\n  searchRegex = signal<boolean>(false);\n  #searchListenersRegistered = false;\n  selectedText = signal<string>('');\n\n  handMode = signal<boolean>(false);\n  #panStartX = 0;\n  #panStartY = 0;\n  #panStartScrollLeft = 0;\n  #panStartScrollTop = 0;\n  #panActive = false;\n\n  #overflowObserver?: ResizeObserver;\n  #hadHorizontalOverflow = false;\n\n  pdfComponent = viewChild.required<PdfViewerComponent>(PdfViewerComponent);\n  toolbarComponent = viewChild<ToolbarComponent>(ToolbarComponent);\n\n  // Computed signals for ARIA announcements\n  pageAnnouncement = computed(() => {\n    const current = this.page();\n    const total = this.totalPages();\n    if (total > 0) {\n      return this.#translate.instant('yuv.media.viewer.pdf.aria.page.change', { current, total });\n    }\n    return '';\n  });\n\n  zoomAnnouncement = computed(() => {\n    const zoom = Math.round(this.zoom() * 100);\n    return this.#translate.instant('yuv.media.viewer.pdf.aria.zoom.change', { zoom });\n  });\n\n  loadingAnnouncement = computed(() => {\n    const progress = this.progressData();\n    const loaded = this.isLoaded();\n\n    if (loaded) {\n      return this.#translate.instant('yuv.media.viewer.pdf.aria.loaded');\n    } else if (progress && progress.total > 0) {\n      const percent = Math.round((progress.loaded / progress.total) * 100);\n      return this.#translate.instant('yuv.media.viewer.pdf.aria.loading', { percent });\n    }\n    return '';\n  });\n\n  // Validated PDF source - ensures security before loading\n  validatedSrc = computed(() => {\n    const rawSrc = this.src();\n    if (!rawSrc) {\n      return null;\n    }\n\n    // Validate source for security\n    const isValid = this.#securityService.validateSource(rawSrc);\n    if (!isValid) {\n      console.error('[PdfComponent] Blocked unsafe PDF source');\n      this.error = {\n        name: 'SecurityError',\n        message: 'PDF source validation failed. The PDF source may contain unsafe content.'\n      };\n      return null;\n    }\n\n    return rawSrc;\n  });\n\n  #selectionChangeHandler = () => {\n    const selection = window.getSelection();\n    const selectedText = selection?.toString().trim() || '';\n    this.selectedText.set(selectedText);\n  };\n\n  constructor() {\n    super();\n    this.#setupTextSelectionHandler();\n    this.#setupKeyboardShortcuts();\n    this.#setupHandMode();\n  }\n\n  #setupHandMode(): void {\n    effect((onCleanup) => {\n      const active = this.handMode();\n      const container = document.querySelector<HTMLElement>('pdf-viewer .pdf-viewer-container');\n      if (!container) return;\n\n      container.classList.toggle('hand-mode', active);\n      if (!active) return;\n\n      container.addEventListener('pointerdown', this.#onPanDown);\n      container.addEventListener('pointermove', this.#onPanMove);\n      container.addEventListener('pointerup', this.#onPanUp);\n      container.addEventListener('pointercancel', this.#onPanUp);\n\n      onCleanup(() => {\n        container.removeEventListener('pointerdown', this.#onPanDown);\n        container.removeEventListener('pointermove', this.#onPanMove);\n        container.removeEventListener('pointerup', this.#onPanUp);\n        container.removeEventListener('pointercancel', this.#onPanUp);\n        container.classList.remove('hand-mode', 'panning');\n        this.#panActive = false;\n      });\n    });\n  }\n\n  #onPanDown = (event: PointerEvent): void => {\n    if (event.button !== 0) return;\n    const container = event.currentTarget as HTMLElement;\n    this.#panActive = true;\n    this.#panStartX = event.clientX;\n    this.#panStartY = event.clientY;\n    this.#panStartScrollLeft = container.scrollLeft;\n    this.#panStartScrollTop = container.scrollTop;\n    container.setPointerCapture(event.pointerId);\n    container.classList.add('panning');\n    event.preventDefault();\n  };\n\n  #onPanMove = (event: PointerEvent): void => {\n    if (!this.#panActive) return;\n    const container = event.currentTarget as HTMLElement;\n    container.scrollLeft = this.#panStartScrollLeft - (event.clientX - this.#panStartX);\n    container.scrollTop = this.#panStartScrollTop - (event.clientY - this.#panStartY);\n  };\n\n  #onPanUp = (event: PointerEvent): void => {\n    if (!this.#panActive) return;\n    this.#panActive = false;\n    const container = event.currentTarget as HTMLElement;\n    if (container.hasPointerCapture(event.pointerId)) {\n      container.releasePointerCapture(event.pointerId);\n    }\n    container.classList.remove('panning');\n  };\n\n  #setupTextSelectionHandler(): void {\n    if (typeof window !== 'undefined') {\n      document.addEventListener('selectionchange', this.#selectionChangeHandler);\n    }\n  }\n\n  /**\n   * Subscribe to keyboard shortcut actions\n   */\n  #setupKeyboardShortcuts(): void {\n    this.#keyboardShortcutsService.action$.subscribe(({ action, event }) => {\n      this.#handleShortcutAction(action, event);\n    });\n  }\n\n  /**\n   * Handle keyboard events and delegate to shortcuts service\n   */\n  onKeydown(event: KeyboardEvent): void {\n    // Check if focus is in an input/textarea/select element\n    const activeElement = document.activeElement;\n    const isInFormControl = activeElement && (activeElement.tagName === 'INPUT' || activeElement.tagName === 'TEXTAREA' || activeElement.tagName === 'SELECT');\n\n    // For arrow keys and space, don't handle if focus is in a form control\n    // (unless it's an arrow key combo like Ctrl+Arrow)\n    const isArrowOrSpace = ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight', ' '].includes(event.key);\n    if (isInFormControl && isArrowOrSpace && !event.ctrlKey && !event.metaKey) {\n      return; // Let the form control handle it\n    }\n\n    // Let the shortcuts service handle the event\n    const handled = this.#keyboardShortcutsService.handleKeyboardEvent(event);\n\n    // If a shortcut was handled, prevent default browser behavior\n    if (handled) {\n      event.preventDefault();\n    }\n  }\n\n  /**\n   * Get pdf information after it's loaded\n   * @param pdf pdf document proxy\n   */\n  afterLoadComplete(pdf: PDFDocumentProxy) {\n    this.pdf.set(pdf);\n    this.totalPages.set(pdf.numPages);\n    this.loadOutline();\n  }\n\n  /**\n   * Get outline\n   */\n  loadOutline() {\n    const pdf = this.pdf();\n    pdf && pdf.getOutline().then((outline: any[]) => this.outline.set(outline));\n  }\n\n  /**\n   * Handle error callback\n   *\n   * @param error error message\n   */\n  onError(error: any) {\n    this.error = error; // set error\n  }\n\n  /**\n   * Pdf loading progress callback\n   * @param progressData pdf progress data\n   */\n  onProgress(progressData: PDFProgressData) {\n    this.progressData.set(progressData);\n\n    this.isLoaded.set(progressData.loaded >= progressData.total);\n    this.error = null; // clear error\n  }\n\n  /**\n   * Navigate to destination\n   * @param destination pdf navigate to\n   */\n  navigateTo(destination: any) {\n    this.pdfComponent().pdfLinkService.goToDestination(destination);\n  }\n\n  /**\n   * Page rendered callback, which is called when a page is rendered (called multiple times)\n   *\n   * @param e custom event\n   */\n  pageRendered(e: CustomEvent) {\n    // console.log('(page-rendered)', e);\n  }\n\n  /**\n   * Page initialized callback.\n   *\n   * @param {CustomEvent} e\n   */\n  pageInitialized(e: CustomEvent) {\n    this.#setupOverflowAutoHandMode();\n  }\n\n  #setupOverflowAutoHandMode(): void {\n    if (this.#overflowObserver) return;\n    const container = document.querySelector<HTMLElement>('pdf-viewer .pdf-viewer-container');\n    if (!container) return;\n\n    const check = () => {\n      const hasOverflow = container.scrollWidth > container.clientWidth;\n      if (hasOverflow && !this.#hadHorizontalOverflow) {\n        this.handMode.set(true);\n      }\n      this.#hadHorizontalOverflow = hasOverflow;\n    };\n\n    this.#overflowObserver = new ResizeObserver(check);\n    this.#overflowObserver.observe(container);\n\n    const pdfViewer = container.querySelector<HTMLElement>('.pdfViewer');\n    if (pdfViewer) {\n      this.#overflowObserver.observe(pdfViewer);\n    }\n\n    check();\n  }\n\n  /**\n   * Page change callback, which is called when a page is changed (called multiple times)\n   *\n   * @param e number\n   */\n  pageChange(e: number) {\n    this.page.set(e);\n  }\n\n  searchQueryChanged(searchOptions: SearchOptions) {\n    if (!this.pdfComponent().eventBus) return;\n\n    const { query, caseSensitive, wholeWord, highlightAll, matchDiacritics, matchAnyWord, regex, findPrevious } = searchOptions;\n    const type = query !== this.pdfQuery() ? '' : 'again';\n    this.pdfQuery.set(query);\n    this.searchCaseSensitive.set(caseSensitive);\n    this.searchWholeWord.set(wholeWord);\n    this.searchHighlightAll.set(highlightAll);\n    this.searchMatchDiacritics.set(matchDiacritics);\n    this.searchMatchAnyWord.set(matchAnyWord);\n    this.searchRegex.set(regex);\n\n    // Clear results and highlights if query is empty\n    if (!query) {\n      this.searchResultCount.set(null);\n      this.searchCurrentMatchIndex.set(0);\n      this.pdfComponent().eventBus.dispatch('findbarclose', { source: this });\n      return;\n    }\n\n    if (!this.#searchListenersRegistered) {\n      this.#searchListenersRegistered = true;\n\n      // Listen for match count updates\n      this.pdfComponent().eventBus.on('updatefindmatchescount', (e: any) => {\n        if (e.matchesCount) {\n          this.searchResultCount.set(e.matchesCount.total);\n          this.searchCurrentMatchIndex.set(e.matchesCount.current ?? 0);\n        }\n      });\n\n      // Listen for current match updates\n      this.pdfComponent().eventBus.on('updatefindcontrolstate', (e: any) => {\n        if (e.matchesCount) {\n          this.searchResultCount.set(e.matchesCount.total);\n          this.searchCurrentMatchIndex.set(e.matchesCount.current ?? 0);\n        }\n      });\n    }\n\n    this.pdfComponent().eventBus.dispatch('find', {\n      source: this,\n      type,\n      query,\n      caseSensitive,\n      entireWord: wholeWord,\n      phraseSearch: !wholeWord && !matchAnyWord,\n      matchAnyWord,\n      useRegex: regex,\n      findPrevious,\n      highlightAll,\n      matchDiacritics\n    });\n  }\n\n  onAnchorKeyup(event: KeyboardEvent, dest: any) {\n    if (event.key === 'Enter' || event.key === ' ') {\n      this.navigateTo(dest);\n      event.preventDefault();\n    }\n  }\n\n  /**\n   * Handle keyboard shortcut actions\n   */\n  #handleShortcutAction(action: string, event: KeyboardEvent): void {\n    switch (action) {\n      case 'zoomIn':\n        this.zoom.update((z) => Math.min(5.0, z + 0.1));\n        break;\n\n      case 'zoomOut':\n        this.zoom.update((z) => Math.max(0.1, z - 0.1));\n        break;\n\n      case 'resetZoom':\n        this.zoom.set(1.0);\n        this.zoomScale.set('page-width');\n        break;\n\n      case 'previousPage':\n        if (this.page() > 1) {\n          this.page.update((p) => p - 1);\n        }\n        break;\n\n      case 'nextPage':\n        if (this.page() < this.totalPages()) {\n          this.page.update((p) => p + 1);\n        }\n        break;\n\n      case 'firstPage':\n        this.page.set(1);\n        break;\n\n      case 'lastPage':\n        this.page.set(this.totalPages());\n        break;\n\n      case 'focusSearch':\n        // Focus the search input - need to access it through toolbar\n        this.#focusSearchInput();\n        break;\n\n      case 'searchNext':\n        if (this.pdfQuery()) {\n          this.searchQueryChanged(this.#currentSearchOptions(false));\n        }\n        break;\n\n      case 'searchPrevious':\n        if (this.pdfQuery()) {\n          this.searchQueryChanged(this.#currentSearchOptions(true));\n        }\n        break;\n\n      case 'clearSearch':\n        this.pdfQuery.set('');\n        this.searchResultCount.set(null);\n        this.searchCurrentMatchIndex.set(0);\n        this.toolbarComponent()?.closeSearch();\n        break;\n\n      case 'scrollUp':\n        this.#scrollViewer(0, -40);\n        break;\n\n      case 'scrollDown':\n        this.#scrollViewer(0, 40);\n        break;\n\n      case 'scrollLeft':\n        this.#scrollViewer(-40, 0);\n        break;\n\n      case 'scrollRight':\n        this.#scrollViewer(40, 0);\n        break;\n\n      case 'scrollPageDown':\n        this.#scrollViewerByPage(1);\n        break;\n\n      case 'scrollPageUp':\n        this.#scrollViewerByPage(-1);\n        break;\n    }\n  }\n\n  /**\n   * Scroll the PDF viewer by specified amount\n   */\n  #scrollViewer(deltaX: number, deltaY: number): void {\n    const viewerContainer = document.querySelector('pdf-viewer .pdf-viewer-container') as HTMLElement;\n    if (viewerContainer) {\n      viewerContainer.scrollBy({\n        left: deltaX,\n        top: deltaY,\n        behavior: 'smooth'\n      });\n    }\n  }\n\n  /**\n   * Scroll the PDF viewer by a page height\n   */\n  #scrollViewerByPage(direction: number): void {\n    const viewerContainer = document.querySelector('pdf-viewer .pdf-viewer-container') as HTMLElement;\n    if (viewerContainer) {\n      const pageHeight = viewerContainer.clientHeight * 0.9; // 90% of viewport height\n      viewerContainer.scrollBy({\n        top: pageHeight * direction,\n        behavior: 'smooth'\n      });\n    }\n  }\n\n  /**\n   * Open the search popout and focus the input.\n   */\n  #focusSearchInput(): void {\n    this.toolbarComponent()?.openSearch();\n  }\n\n  #currentSearchOptions(findPrevious: boolean): SearchOptions {\n    return {\n      query: this.pdfQuery(),\n      caseSensitive: this.searchCaseSensitive(),\n      wholeWord: this.searchWholeWord(),\n      highlightAll: this.searchHighlightAll(),\n      matchDiacritics: this.searchMatchDiacritics(),\n      matchAnyWord: this.searchMatchAnyWord(),\n      regex: this.searchRegex(),\n      findPrevious\n    };\n  }\n\n  ngOnDestroy(): void {\n    document.removeEventListener('selectionchange', this.#selectionChangeHandler);\n    this.#overflowObserver?.disconnect();\n  }\n}\n","<!-- Skip Navigation Links -->\n<div class=\"skip-links\">\n  <a href=\"#pdf-content\" class=\"skip-link\">{{ 'yuv.media.viewer.pdf.skip.to.content' | translate }}</a>\n</div>\n\n<!-- ARIA Live Regions for Screen Reader Announcements -->\n<div aria-live=\"polite\" aria-atomic=\"true\" class=\"sr-only\">\n  @if (pageAnnouncement()) {\n  <span>{{ pageAnnouncement() }}</span>\n  }\n</div>\n<div aria-live=\"polite\" aria-atomic=\"true\" class=\"sr-only\">\n  @if (zoomAnnouncement()) {\n  <span>{{ zoomAnnouncement() }}</span>\n  }\n</div>\n<div aria-live=\"polite\" aria-atomic=\"true\" class=\"sr-only\">\n  @if (loadingAnnouncement()) {\n  <span>{{ loadingAnnouncement() }}</span>\n  }\n</div>\n\n<header id=\"pdf-toolbar\" role=\"banner\" [attr.aria-label]=\"'yuv.media.viewer.pdf.aria.toolbar' | translate\">\n  @let progress = progressData();\n  <!-- Progress Check -->\n  @if(!isLoaded() && !error && progress){\n  <div\n    class=\"progress\"\n    role=\"progressbar\"\n    [attr.aria-valuemin]=\"0\"\n    [attr.aria-valuemax]=\"progress.total\"\n    [attr.aria-valuenow]=\"progress.loaded\"\n    [attr.aria-label]=\"loadingAnnouncement()\"\n  >\n    <div class=\"bg\">\n      <div class=\"bar\" [style.width]=\"(progress.loaded / progress.total) * 100 + '%'\"></div>\n    </div>\n  </div>\n  } @if(showToolbar()){\n  <nav>\n    <yuv-toolbar\n      [page]=\"page()\"\n      [totalPages]=\"totalPages()\"\n      [(pdfQuery)]=\"pdfQuery\"\n      [(searchCaseSensitive)]=\"searchCaseSensitive\"\n      [(searchWholeWord)]=\"searchWholeWord\"\n      [(searchHighlightAll)]=\"searchHighlightAll\"\n      [(searchMatchDiacritics)]=\"searchMatchDiacritics\"\n      [(searchMatchAnyWord)]=\"searchMatchAnyWord\"\n      [(searchRegex)]=\"searchRegex\"\n      [(searchResultCount)]=\"searchResultCount\"\n      [(currentMatchIndex)]=\"searchCurrentMatchIndex\"\n      [(handMode)]=\"handMode\"\n      (searchQueryChange)=\"searchQueryChanged($event)\"\n      (pageChange)=\"page.set($event)\"\n      (zoomChange)=\"zoom.set($event)\"\n      (zoomScaleChange)=\"zoomScale.set($event)\"\n      (rotationChange)=\"rotation.set($event)\"\n    />\n  </nav>\n  } @if(error){\n  <div class=\"mb error\" role=\"alert\" aria-live=\"assertive\">\n    {{ error.message }}\n  </div>\n  }\n</header>\n\n@if (validatedSrc()) {\n<pdf-viewer\n  id=\"pdf-content\"\n  role=\"region\"\n  [attr.aria-label]=\"'yuv.media.viewer.pdf.aria.viewer' | translate\"\n  [src]=\"validatedSrc()!\"\n  [(page)]=\"page\"\n  [rotation]=\"rotation()\"\n  [original-size]=\"originalSize()\"\n  [show-all]=\"showAll()\"\n  [fit-to-page]=\"fitToPage()\"\n  (after-load-complete)=\"afterLoadComplete($event)\"\n  [zoom]=\"zoom()\"\n  [zoom-scale]=\"zoomScale()\"\n  [stick-to-page]=\"stickToPage()\"\n  [render-text]=\"renderText()\"\n  [external-link-target]=\"'blank'\"\n  [autoresize]=\"autoresize()\"\n  (pdf-error)=\"onError($event)\"\n  (pdf-progress)=\"onProgress($event)\"\n  (page-rendered)=\"pageRendered($event)\"\n  (pages-initialized)=\"pageInitialized($event)\"\n  (pageChangeing)=\"pageChange($event)\"\n  [show-borders]=\"false\"\n></pdf-viewer>\n}\n","/**\n * Public API for PDF viewer configuration\n */\nexport {\n  PdfViewerConfig,\n  PDF_VIEWER_CONFIG,\n  DEFAULT_PDF_VIEWER_CONFIG,\n  providePdfViewerConfig\n} from './pdf-viewer.config';\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\n\n/**\n * This pipe bypass security and trust the given value to be a safe style URL, i.e. a value that can be used in hyperlinks or img src.\n * @example\n * <iframe [src]=\"previewSrc | safeUrl\"></iframe>\n */\n@Pipe({ name: 'safeUrl' })\nexport class SafeUrlPipe implements PipeTransform {\n  constructor(private sanitizer: DomSanitizer) {}\n\n  public transform(url: any): SafeResourceUrl {\n    return this.sanitizer.bypassSecurityTrustResourceUrl(url);\n  }\n}\n","import { InjectionToken } from '@angular/core';\nimport { MediaViewerProvidersOptions } from '../models';\n\nexport const ENVIRONMENT_DATA_DEFAULT: MediaViewerProvidersOptions = {\n  office: {\n    path: '',\n    reloadOffset: 1500\n  },\n  einvoice: {\n    saxonJsUrl: ''\n  }\n};\n\nexport const ENVIRONMENT_DATA = new InjectionToken<MediaViewerProvidersOptions>('ENVIRONMENT_DATA', { factory: () => ENVIRONMENT_DATA_DEFAULT });\n","import { Provider } from '@angular/core';\nimport { ENVIRONMENT_DATA, ENVIRONMENT_DATA_DEFAULT } from '../token';\nimport { MediaViewerProvidersOptions } from '../models';\n\nexport const provideMediaViewer = (options?: MediaViewerProvidersOptions | null): Provider => {\n  const useValue = { ...ENVIRONMENT_DATA_DEFAULT, ...(options || {}) };\n  return {\n    provide: ENVIRONMENT_DATA,\n    useValue\n  };\n};\n","export enum DASHLET_WINDOW_MESSAGE_EVENTS {\n  OBJECT_UPDATING = 'Host_PostmessageObjectUpdating',\n  OBJECT_CONVERTED = 'Host_PostmessageObjectConverted',\n  EDIT_CLICK = 'UI_EditClick',\n  MESSAGE_ID = 'MessageId',\n  USER_ACTIVITY = 'User_Activity'\n}\n","export enum DASHLET_MESSAGE_EVENTS {\n  OFFICE_DOCUMENT_UPDATE = 'yuv.office.document.update',\n  OFFICE_DOCUMENT_CONVERTED = 'yuv.office.document.converted',\n  OFFICE_DOCUMENT_UNKNOWN = 'yuv.office.document.unknown'\n}\n","import { HttpClient, HttpResponse } from '@angular/common/http';\nimport { ChangeDetectionStrategy, Component, DestroyRef, computed, inject, signal } from '@angular/core';\nimport { rxResource, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { catchError, map, of } from 'rxjs';\nimport { OfficeMetadata } from '../../models/viewer.interfaces';\nimport { SafeUrlPipe } from '../../pipes/save.url.pipe';\nimport { MediaViewerService } from '../../services';\nimport { ENVIRONMENT_DATA } from '../../token/environment.data.token';\nimport { AbstractViewerComponent } from '../abstract/abstract.viewer.component';\nimport { DASHLET_WINDOW_MESSAGE_EVENTS } from './internal.office.message.events';\nimport { DASHLET_MESSAGE_EVENTS } from './office.message.events';\n\n@Component({\n  selector: 'yuv-office',\n  imports: [TranslatePipe, SafeUrlPipe],\n  template: `\n    @if(dashletIsAvailable()){\n    <div class=\"iframe-container\">\n      <iframe [src]=\"srcPath() | safeUrl\" width=\"100%\" height=\"100%\" frameborder=\"0\"></iframe>\n      @if(isDocumentUpdating()){\n      <div class=\"updating-overlay\">\n        <span>{{ 'yuv.media.viewer.office.updating' | translate }}</span>\n      </div>\n      }\n    </div>\n    } @else {\n    <div class=\"no-office\">\n      <h1>{{ 'yuv.media.viewer.office.error.header' | translate : params }}</h1>\n      <p>{{ 'yuv.media.viewer.office.error.message' | translate }}</p>\n      @if (downloadPath) {\n      <a download href=\"{{ downloadPath }}\">{{ 'yuv.media.viewer.download.content' | translate }}</a>\n      }\n    </div>\n    }\n  `,\n  styles: `\n  :host {\n    display: block;\n    width: 100%;\n    height: 100%;\n  }\n  .iframe-container {\n    position: relative;\n    width: 100%;\n    height: 100%;\n  }\n  .updating-overlay {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    background: rgba(255, 255, 255, 0.7);\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    z-index: 1;\n  }\n  .updating-overlay span {\n    font-size: 1.2rem;\n    color: #333;\n  }\n  .no-office {\n    display: flex;\n    flex-direction: column;\n    justify-content: end;\n    align-items: center;\n    height: 50vh;\n  }`,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    '(window:message)': 'onMessage($event)'\n  }\n})\nexport class OfficeComponent extends AbstractViewerComponent<OfficeMetadata> {\n  readonly #http = inject(HttpClient);\n  readonly #mediaViewerService = inject(MediaViewerService);\n  readonly #destroyRef = inject(DestroyRef);\n\n  readonly environmentData = inject<{ office: { path: string; reloadOffset: number } }>(ENVIRONMENT_DATA);\n\n  timeTrigger = signal<string | null>(null);\n  isDocumentUpdating = signal(false);\n\n  params = { name: 'Office 365' };\n\n  downloadPath: string | null = null;\n\n  #dashletIsAvailableResource = rxResource({\n    stream: () => this.#checkStatus()\n  });\n\n  dashletIsLoading = this.#dashletIsAvailableResource.isLoading;\n  dashletIsAvailable = this.#dashletIsAvailableResource.value;\n\n  onMessage(event: MessageEvent) {\n    if (this.#eventCheck(event, DASHLET_WINDOW_MESSAGE_EVENTS.MESSAGE_ID)) return;\n    const data = JSON.parse(event.data);\n    if (!data) return;\n    const isConverted = data.MessageId === DASHLET_WINDOW_MESSAGE_EVENTS.OBJECT_CONVERTED;\n    const isUpdating = data.MessageId === DASHLET_WINDOW_MESSAGE_EVENTS.OBJECT_UPDATING;\n\n    if (isUpdating || isConverted) {\n      this.isDocumentUpdating.set(true);\n      setTimeout(() => {\n        this.metadata()?.sendEvent &&\n          window.postMessage(\n            {\n              type: isUpdating\n                ? DASHLET_MESSAGE_EVENTS.OFFICE_DOCUMENT_UPDATE\n                : isConverted\n                ? DASHLET_MESSAGE_EVENTS.OFFICE_DOCUMENT_CONVERTED\n                : DASHLET_MESSAGE_EVENTS.OFFICE_DOCUMENT_UNKNOWN\n            },\n            window.location.origin\n          );\n        this.timeTrigger.set(new Date().toISOString());\n        this.isDocumentUpdating.set(false);\n      }, this.environmentData.office.reloadOffset ?? 1500);\n    } else if (data.MessageId === DASHLET_WINDOW_MESSAGE_EVENTS.EDIT_CLICK && data.Values.url) {\n      const w = window.open(decodeURIComponent(data.Values.url));\n      w &&\n        w.addEventListener('message', (e) => {\n          if (this.#eventCheck(e, DASHLET_WINDOW_MESSAGE_EVENTS.MESSAGE_ID)) return;\n          if (e.data.match(DASHLET_WINDOW_MESSAGE_EVENTS.USER_ACTIVITY)) {\n            this.#http.get(`api-web/api/idm/whoami`).pipe(takeUntilDestroyed(this.#destroyRef)).subscribe();\n          }\n        });\n    }\n  }\n\n  srcPath = computed(() => {\n    const id = this.metadata()?.id;\n    const metadata = this.metadata();\n    const user = this.metadata()?.user;\n    const timeTrigger = this.timeTrigger();\n    const data = metadata?.dmsObject;\n    if (data === null || data === undefined || !id || user === null || user === undefined) return null;\n\n    const editMode = this.metadata()?.editable ?? false;\n    const searchParams = new URLSearchParams();\n    const path = this.#mediaViewerService.srcPath(id, this.environmentData.office, metadata?.version);\n\n    this.downloadPath = path;\n\n    searchParams.append('id', id);\n    metadata?.version && searchParams.append('version', `${metadata.version}`);\n    searchParams.append('mimeType', data['system:contentStreamMimeType'] as string);\n    searchParams.append('path', path);\n    searchParams.append('fileExtension', this.#mediaViewerService.fileExtension(data['system:contentStreamFileName'] as string));\n    searchParams.append('locale', user.userSettings?.locale);\n    searchParams.append('allowedExtensions', 'doc,docx,xls,xlsx,ppt,pptx,odt');\n    searchParams.append('editMode', `${editMode}`);\n    searchParams.append('displayName', `${user.username} (${user.lastname}, ${user.firstname})`);\n    searchParams.append('fileName', `${data['system:contentStreamFileName']}`);\n\n    // cache buster to force reload\n    timeTrigger && searchParams.append('_reload', timeTrigger);\n    return `/dashlet365/?${searchParams.toString()}`;\n  });\n\n  #eventCheck(event: MessageEvent, key: string): boolean {\n    return !event || !event.data || !event.data.match || !event.data.match(key);\n  }\n\n  #checkStatus() {\n    return this.#http\n      .get(`/dashlet365/config`, {\n        observe: 'response'\n      })\n      .pipe(\n        map((response: HttpResponse<any>) => ([200, 302].includes(response.status) ? true : false)),\n        catchError((err) => of(false))\n      );\n  }\n}\n","import { ChangeDetectionStrategy, Component, computed } from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { AbstractViewerComponent } from '../abstract/abstract.viewer.component';\nimport { PdfComponent } from '../pdf/pdf.component';\n\n@Component({\n  selector: 'app-open-office',\n  imports: [PdfComponent, TranslatePipe],\n  template: `@if(id()) {\n    <nav class=\"toolbar\">\n      <div class=\"warning-overlay\">\n        <span class=\"warning-icon\">&#9888;</span>\n        <span>{{ 'yuv.media.viewer.open.office.viewer.representation.warning' | translate }}</span>\n      </div>\n      <a class=\"download-btn\" download href=\"{{ src() }}\" [attr.aria-label]=\"'yuv.media.viewer.open.office.viewer.download' | translate\">\n        <span class=\"download-icon\">&#11123;</span>\n      </a>\n    </nav>\n    <yuv-pdf [id]=\"id()\" [metadata]=\"metadata()\" [type]=\"type()\" [src]=\"renditionSrc()\"></yuv-pdf>\n    }`,\n  styleUrls: ['./open.office.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class OpenOfficeComponent extends AbstractViewerComponent {\n  renditionSrc = computed(() => {\n    const id = this.id();\n    const src = this.src();\n    return src.startsWith('data:') ? src : `/api/dms/objects/${id}/contents/renditions/pdf`;\n  });\n}\n","declare const SaxonJS: any; // Declare SaxonJS globally\n\nimport { HttpClient } from '@angular/common/http';\nimport { inject, Injectable, signal } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { XMLParser } from 'fast-xml-parser';\nimport { catchError, finalize, firstValueFrom, forkJoin, map, of, switchMap } from 'rxjs';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class XmlProcessorService {\n  readonly #http = inject(HttpClient);\n  readonly translate = inject(TranslateService);\n\n  #loading = signal<boolean>(false);\n\n  loadingIndicator = this.#loading.asReadonly();\n\n  #displayError(message: string, detail: string) {\n    return {\n      type: 'error',\n      title: 'Error',\n      message,\n      detail\n    };\n  }\n\n  #namespaceResolver(prefix: string | null) {\n    const ns = {\n      rsm: 'urn:my-namespace:rsm',\n      ram: 'urn:my-namespace:ram'\n    };\n    return ns[prefix as keyof typeof ns] || null;\n  }\n\n  async #transformAndDisplay(content: string, stylesheetFileName: string) {\n    const parser = new DOMParser();\n    const xmlDoc = parser.parseFromString(content, 'text/xml');\n    const typecode = xmlDoc.evaluate('//rsm:ExchangedDocument/ram:TypeCode', xmlDoc, this.#namespaceResolver, XPathResult.STRING_TYPE, null).stringValue;\n    const isOrder = Number(typecode) === 220 || Number(typecode) === 231;\n\n    return await firstValueFrom(\n      this.#http.get(stylesheetFileName, { responseType: 'json' }).pipe(\n        map((stylesheetInternal) =>\n          SaxonJS.transform({\n            stylesheetInternal,\n            sourceText: content,\n            destination: 'serialized'\n          })\n        ),\n        switchMap((output: { principalResult: Record<string, string> }) => {\n          return this.translate.get(this.translate.getCurrentLang()).pipe(\n            map((translations) => {\n              const filteredTranslations = Object.entries(translations)\n                .filter(([key, _]) => key.startsWith('yuv.media.viewer.e.invoice.'))\n                .reduce((acc, [key, value]) => {\n                  acc[key] = value as string;\n                  return acc;\n                }, {} as Record<string, string>);\n              return { principalResult: output.principalResult, translations: filteredTranslations };\n            }),\n            switchMap((output: { principalResult: Record<string, string>; translations: Record<string, string> }) => {\n              if (isOrder) {\n                const keys = ['bt1_order', 'bt2_order', 'bt3_order', 'bg22_order', 'bt25_order', 'bt26_order', 'details_order'];\n                const transl = keys.map((key) => this.translate.get(`yuv.media.viewer.e.invoice.${key}`).pipe(map((value) => ({ [key]: value }))));\n                const { principalResult, translations } = output;\n                return forkJoin(transl).pipe(\n                  map((order) => {\n                    order.forEach((orderTranslation) => {\n                      const orderKey = Object.keys(orderTranslation)[0];\n                      const orderValue = orderTranslation[orderKey];\n                      const translationKey = Object.keys(translations).find((key) => key.endsWith(orderKey.split('_')[0]));\n                      if (translationKey) {\n                        translations[translationKey] = orderValue;\n                      }\n                    });\n                    return { principalResult, translations };\n                  })\n                );\n              }\n              return of(output);\n            })\n          );\n        }),\n        switchMap((output: { principalResult: Record<string, string>; translations: Record<string, string> }) =>\n          this.#http.get('assets/xslt/xrechnung-html.uni.sef.json', { responseType: 'json' }).pipe(\n            map((stylesheetInternal) =>\n              SaxonJS.transform({\n                stylesheetInternal,\n                sourceText: output.principalResult,\n                destination: 'serialized',\n                stylesheetParams: {\n                  isOrder: isOrder,\n                  showIds: false,\n                  'Q{}i18n': output.translations\n                }\n              })\n            )\n          )\n        ),\n        map((response) => response.principalResult),\n        finalize(() => this.#loading.set(false))\n      )\n    );\n  }\n\n  #transformAndDisplayCII(content: string) {\n    return this.#transformAndDisplay(content, 'assets/xslt/cii-xr.sef.json');\n  }\n  #transformAndDisplayUBL(content: string) {\n    return this.#transformAndDisplay(content, 'assets/xslt/ubl-xr.sef.json');\n  }\n\n  #transformAndDisplayCIO(content: string) {\n    return this.#transformAndDisplay(content, 'assets/xslt/cio-xr.sef.json');\n  }\n\n  #transformAndDisplayUBLCN(content: string) {\n    return this.#transformAndDisplay(content, 'assets/xslt/ubl-creditnote-xr.sef.json');\n  }\n\n  async #transformAndDisplayZF1(content: string) {\n    return await firstValueFrom(\n      this.#http.get('assets/xslt/ZUGFeRD_1p0_c1p0_s1p0.sef.json', { responseType: 'json' }).pipe(\n        map((stylesheetInternal) =>\n          SaxonJS.transform({\n            stylesheetInternal,\n            sourceText: content,\n            destination: 'serialized'\n          })\n        ),\n        map((response) => response.principalResult),\n        finalize(() => this.#loading.set(false)),\n        catchError((error) => {\n          const errMessage = error?.message ? error.message : error;\n          throw this.#displayError('Exception', errMessage);\n        })\n      )\n    );\n  }\n\n  async loadAndDisplayXML(xmlUrl: string) {\n    const parser = new XMLParser();\n    this.#loading.set(true);\n    try {\n      return await firstValueFrom(\n        this.#http.get(xmlUrl, { responseType: 'text' }).pipe(\n          map((content) => {\n            for (const key in parser.parse(content)) {\n              if (key.includes('CrossIndustryInvoice')) {\n                return this.#transformAndDisplayCII(content);\n              } else if (key.includes('SCRDMCCBDACIOMessageStructure')) {\n                return this.#transformAndDisplayCIO(content);\n              } else if (key.includes('Invoice')) {\n                return this.#transformAndDisplayUBL(content);\n              } else if (key.includes('CreditNote')) {\n                return this.#transformAndDisplayUBLCN(content);\n              } else if (key.includes('CrossIndustryDocument')) {\n                return this.#transformAndDisplayZF1(content);\n              }\n            }\n            return of(this.#displayError('File format not recognized', 'Is it a UBL 2.1 or UN/CEFACT 2016b XML file or PDF you are trying to open?'));\n          }),\n          finalize(() => this.#loading.set(false)),\n          catchError((error) => {\n            const errMessage = error?.message ? error.message : error;\n            throw this.#displayError('Exception', errMessage);\n          })\n        )\n      );\n    } catch (error: unknown) {\n      const errMessage = error instanceof Error ? error.message : String(error);\n      this.#loading.set(false);\n      throw this.#displayError('Exception', errMessage);\n    }\n  }\n}\n","import { ChangeDetectionStrategy, Component, effect, ElementRef, inject, OnInit, signal, viewChild } from '@angular/core';\nimport { SafeResourceUrl } from '@angular/platform-browser';\nimport { ProgressComponent } from '../../helper/progress.component';\nimport { AbstractViewerComponent } from '../abstract/abstract.viewer.component';\nimport { XmlProcessorService } from './services/xml-processor';\n\n@Component({\n  selector: 'yuv-e-invoice',\n  imports: [ProgressComponent],\n  template: `@if (isLoading()) {\n    <yuv-progress />\n    }\n    <iframe #outputFrame title=\"e invoice\"></iframe>`,\n  styles: `\n    :host {\n      display:grid;\n      grid-template-columns: 1fr;\n      grid-template-rows: 1.5fr;\n      grid-auto-flow: row;\n      grid-template-areas:\n        'content';\n      height: 100%;\n      overflow: auto;\n      \n      &.is-loading {\n        grid-template-rows: auto 1.5fr;\n        grid-gap: 0;\n        grid-template-areas:\n          'progress'\n          'content';\n    }\n\n    yuv-progress {\n      grid-area: progress;\n    }\n\n\n    iframe {\n      grid-area: content;\n      width: 100%;\n      height: 100%;\n      border: 1px solid #ccc;\n    }\n  }`,\n  host: {\n    '[class.is-loading]': 'isLoading()'\n  },\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class EInvoiceComponent extends AbstractViewerComponent implements OnInit {\n  readonly #xmlService = inject(XmlProcessorService);\n  invoiceHtml = signal<SafeResourceUrl | null>(null);\n  isLoading = this.#xmlService.loadingIndicator;\n  frame = viewChild.required<ElementRef<HTMLIFrameElement>>('outputFrame');\n\n  #iframeSrc = effect(() => {\n    const invoiceHtml = this.invoiceHtml();\n    const frame = this.frame()?.nativeElement;\n    invoiceHtml && frame && (frame.srcdoc = invoiceHtml as unknown as string);\n  });\n\n  async ngOnInit() {\n    try {\n      const invoiceHtml = await this.#xmlService.loadAndDisplayXML(this.src());\n      this.invoiceHtml.set(invoiceHtml);\n    } catch (error: any) {\n      this.invoiceHtml.set(error);\n    }\n  }\n}\n","import { ComponentRef, Directive, OnChanges, OnInit, Type, ViewContainerRef, computed, inject, input, signal } from '@angular/core';\nimport {\n  AudioComponent,\n  ErrorComponent,\n  ImageComponent,\n  MailComponent,\n  MonacoDirectComponent,\n  OfficeComponent,\n  PdfComponent,\n  TextComponent,\n  VideoComponent,\n  EInvoiceComponent,\n  OpenOfficeComponent\n} from '../components';\nimport { MediaViewerService } from '../services/media-viewer.service';\nimport { Metadata } from '../models/viewer.interfaces';\nimport { KeyTypes } from '../services';\n\nexport type ComponentsType = Components | any;\n\nexport type Components =\n  | AudioComponent\n  | VideoComponent\n  | TextComponent\n  | MailComponent\n  | ErrorComponent\n  | ImageComponent\n  | MonacoDirectComponent\n  | PdfComponent\n  | OfficeComponent\n  | OpenOfficeComponent\n  | EInvoiceComponent;\n\nexport const componentsMapper: { [key in KeyTypes]: Type<ComponentsType> } = {\n  AUDIO: AudioComponent,\n  VIDEO: VideoComponent,\n  TEXT: TextComponent,\n  EMAIL: MailComponent,\n  ERROR: ErrorComponent,\n  IMAGE: ImageComponent,\n  MONACO_DIRECT: MonacoDirectComponent,\n  PDF: PdfComponent,\n  OFFICE: OfficeComponent,\n  OPENOFFICE: OpenOfficeComponent,\n  XRECHNUNG: EInvoiceComponent\n};\n@Directive({\n  selector: '[yuvDynamicViewer]'\n})\nexport class DynamicViewerDirective implements OnInit, OnChanges {\n  readonly #container = inject(ViewContainerRef);\n  readonly #mediaViewerService = inject(MediaViewerService);\n\n  id = input.required<string>();\n  type = input.required({\n    transform: (v: string | unknown) => ((v || 'error') as string).toLowerCase()\n  });\n  src = input<string | null>(null);\n  metadata = input<Metadata | null>(null);\n  componentType = computed(() => this.#mediaViewerService.getComponentType(this.type()));\n  component!: ComponentRef<Components>;\n  isError = signal<boolean>(false);\n\n  #getComponentType(): Type<Components> {\n    const component = this.#mediaViewerService.defaultComponents()[this.componentType()];\n    this.isError.set(!component);\n    return component ? component : ErrorComponent;\n  }\n\n  #setErrorComponentInput(component: ComponentRef<Components>) {\n    component.setInput('error', 'supported');\n    component.setInput('errorMessage', 'yuv.viewer.content.not.supported');\n  }\n\n  ngOnChanges() {\n    if (this.component) {\n      this.#container.clear();\n      this.component = this.#container.createComponent(this.#getComponentType());\n      this.component.setInput('id', this.id());\n      this.component.setInput('type', this.type());\n      this.component.setInput('src', this.src());\n      this.component.setInput('metadata', this.metadata());\n      this.isError() && this.#setErrorComponentInput(this.component);\n    }\n  }\n\n  ngOnInit() {\n    if (this.type()) {\n      this.component = this.#container.createComponent(this.#getComponentType());\n      this.component.setInput('id', this.id());\n      this.component.setInput('type', this.type());\n      this.component.setInput('src', this.src());\n      this.component.setInput('metadata', this.metadata());\n      this.isError() && this.#setErrorComponentInput(this.component);\n    }\n  }\n}\n","import { ChangeDetectionStrategy, Component, computed, effect, input, OnDestroy } from '@angular/core';\nimport { DynamicViewerDirective } from '../../../directives/viewer.directive';\n\n@Component({\n  selector: 'yuv-media-viewer',\n  imports: [DynamicViewerDirective],\n  template: `<ng-container yuvDynamicViewer [id]=\"id()\" [metadata]=\"extendedData()\" [src]=\"src()\" [type]=\"type()\"></ng-container> `,\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class YuvMediaViewerComponent implements OnDestroy {\n  id = input.required<string>();\n  type = input.required<string | unknown>();\n  metadata = input<any | null>(null);\n  src = input<string | null>(null);\n\n  #resizeObserver: ResizeObserver | null = null;\n\n  extendedData = computed(() => ({\n    ...(this.#isObject(this.metadata()) ? this.metadata() : { [`${this.metadata()}`]: this.metadata() })\n  }));\n\n  #isObject(value: any): boolean {\n    return value !== null && typeof value === 'object' && !Array.isArray(value) && !(value instanceof Function);\n  }\n\n  ngOnDestroy(): void {\n    if (this.#resizeObserver) {\n      this.#resizeObserver.disconnect();\n    }\n  }\n}\n","import { marker } from '@colsen1991/ngx-translate-extract-marker';\n\nexport * from './lib/container';\nexport * from './lib/components';\n\nexport * from './lib/services';\nexport * from './lib/token';\nexport * from './lib/models';\n\nmarker('yuv.media.viewer.content.not.autherized');\nmarker('yuv.media.viewer.download.content');\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["pdfjsLib","i1"],"mappings":"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"}