{"version":3,"file":"eternalheart-ngx-file-preview.mjs","sources":["../../../libs/ngx-file-preview/src/lib/services/theme.service.ts","../../../libs/ngx-file-preview/src/lib/i18n/i18n.utils.ts","../../../libs/ngx-file-preview/src/lib/services/preview.service.ts","../../../libs/ngx-file-preview/src/lib/services/file-reader.service.ts","../../../libs/ngx-file-preview/src/lib/preview-types/base-preview/base-preview.component.ts","../../../libs/ngx-file-preview/src/lib/directives/tooltip.diretive.ts","../../../libs/ngx-file-preview/src/lib/components/preview-icon/preview-icon.component.ts","../../../libs/ngx-file-preview/src/lib/i18n/i18n.pipe.ts","../../../libs/ngx-file-preview/src/lib/preview-types/excel-preview/excel-preview.component.ts","../../../libs/ngx-file-preview/src/lib/preview-types/archive-preview/archive-preview.component.ts","../../../libs/ngx-file-preview/src/lib/preview-types/word-preview/word-preview.component.ts","../../../libs/ngx-file-preview/src/lib/preview-types/pdf-preview/pdf-preview.component.ts","../../../libs/ngx-file-preview/src/lib/preview-types/image-preview/image-preview.component.ts","../../../libs/ngx-file-preview/src/lib/preview-types/video-preview/video-preview.component.ts","../../../libs/ngx-file-preview/src/lib/preview-types/ppt-preview/ppt-preview.component.ts","../../../libs/ngx-file-preview/src/lib/utils/preview.utils.ts","../../../libs/ngx-file-preview/src/lib/directives/preview.directive.ts","../../../libs/ngx-file-preview/src/lib/preview-types/text-preview/text-preview.component.ts","../../../libs/ngx-file-preview/src/lib/preview-types/audio-preview/audio-preview.component.ts","../../../libs/ngx-file-preview/src/lib/preview-types/unknown-preview/unknown-preview.component.ts","../../../libs/ngx-file-preview/src/lib/preview-types/markdown-preview/markdown.pipe.ts","../../../libs/ngx-file-preview/src/lib/preview-types/markdown-preview/markdown-preview.component.ts","../../../libs/ngx-file-preview/src/lib/preview-types/markdown-preview/markdown-preview.component.html","../../../libs/ngx-file-preview/src/lib/components/theme-icon/theme-icon.component.ts","../../../libs/ngx-file-preview/src/lib/components/theme-icon/theme-icon.component.html","../../../libs/ngx-file-preview/src/lib/components/preview-modal/preview-modal.component.ts","../../../libs/ngx-file-preview/src/lib/components/preview-modal/preview-modal.component.html","../../../libs/ngx-file-preview/src/lib/components/index.ts","../../../libs/ngx-file-preview/src/lib/preview-list/file-size.pipe.ts","../../../libs/ngx-file-preview/src/lib/preview-list/preview-list.component.ts","../../../libs/ngx-file-preview/src/lib/preview-list/preview-list.component.html","../../../libs/ngx-file-preview/src/version.ts","../../../libs/ngx-file-preview/src/index.ts","../../../libs/ngx-file-preview/src/eternalheart-ngx-file-preview.ts"],"sourcesContent":["import {Injectable, Renderer2} from '@angular/core';\nimport {BehaviorSubject} from 'rxjs';\nimport {AutoThemeConfig, ThemeMode} from '../types/theme.types';\n\n@Injectable()\nexport class ThemeService {\n  private readonly THEME_KEY = 'fp-theme-mode';\n  private themeSubject$ = new BehaviorSubject<ThemeMode>('dark');\n  private autoConfig: AutoThemeConfig = {\n    dark: {start: 18, end: 6}\n  };\n\n  private autoChangeTimer: any;\n  systemThemeQuery: MediaQueryList | null = null;\n  private systemThemeListener: ((e: MediaQueryListEvent) => void) | null = null;\n  private localDomElement: HTMLElement | null = null;\n  constructor(private renderer: Renderer2) {\n  }\n\n  /**\n   * 绑定最外围元素\n   * @param domElement\n   */\n  bindElement(domElement: HTMLElement) {\n    this.localDomElement = domElement;\n  }\n\n  ngOnInit() {\n    if (window.matchMedia) {\n      this.systemThemeQuery = window.matchMedia('(prefers-color-scheme: dark)');\n      this.systemThemeListener = (e) => {\n        if (this.theme === 'auto') {\n          this.checkAndApplyAutoTheme();\n        }\n      };\n      this.systemThemeQuery.addEventListener('change', this.systemThemeListener);\n    }\n    this.applyTheme('dark');\n  }\n\n  get theme() {\n    return this.themeSubject$.getValue();\n  }\n\n  getThemeObservable() {\n    return this.themeSubject$.asObservable();\n  }\n\n  setMode(mode: ThemeMode) {\n    this.themeSubject$.next(mode);\n    if (mode === 'auto') {\n      this.startAutoCheck();\n    } else {\n      this.stopAutoCheck();\n      this.applyTheme(mode);\n    }\n  }\n\n  setAutoConfig(config: AutoThemeConfig) {\n    this.autoConfig = {...this.autoConfig, ...config};\n    if (this.themeSubject$.getValue() === 'auto') {\n      this.checkAndApplyAutoTheme();\n    }\n  }\n\n  private startAutoCheck() {\n    this.checkAndApplyAutoTheme();\n    this.autoChangeTimer = setInterval(() => {\n      this.checkAndApplyAutoTheme();\n    }, 60000); // 每分钟检查一次\n  }\n\n  private stopAutoCheck() {\n    if (this.autoChangeTimer) {\n      clearInterval(this.autoChangeTimer);\n      this.autoChangeTimer = null;\n    }\n  }\n\n  private checkAndApplyAutoTheme() {\n    const hour = new Date().getHours();\n    const {start, end} = this.autoConfig.dark;\n\n    // 检查是否在暗色时间范围内\n    const isDarkTime = start > end\n      ? (hour >= start || hour < end)  // 跨夜间\n      : (hour >= start && hour < end); // 同一天内\n\n    // 检查系统主题\n    const prefersDark = this.systemThemeQuery?.matches ?? false;\n\n    // 优先使用时间判断，其次使用系统主题\n    this.applyTheme(isDarkTime || prefersDark ? 'dark' : 'light');\n  }\n\n  private applyTheme(theme: 'light' | 'dark') {\n    // 更新当前主题\n    this.themeSubject$.next(theme);\n    if(this.localDomElement){\n      // 移除现有主题\n      this.renderer.removeAttribute(this.localDomElement, 'data-nfp-theme');\n      // 应用新主题\n      if (theme === 'dark') {\n        this.renderer.setAttribute(this.localDomElement, 'data-nfp-theme', 'dark');\n      } else {\n        this.renderer.setAttribute(this.localDomElement, 'data-nfp-theme', 'light');\n      }\n    }\n    // 保存到本地存储\n    localStorage.setItem(this.THEME_KEY, theme);\n  }\n\n  toggleTheme() {\n    const newTheme = this.theme === 'light' ? 'dark' : 'light';\n    this.setMode(newTheme);\n  }\n\n  ngOnDestroy() {\n    this.stopAutoCheck();\n\n    // 清理系统主题监听\n    if (this.systemThemeQuery && this.systemThemeListener) {\n      this.systemThemeQuery.removeEventListener('change', this.systemThemeListener);\n    }\n  }\n}\n","import ZH from \"../../assets/i18n/zh.json\";\nimport EN from \"../../assets/i18n/en.json\";\n\nconst LangMapping: Record<string, any> = {\n  'zh': ZH,\n}\nexport const I18nUtils = {\n  /**\n   * 获取语言包\n   * @param locale\n   */\n  get(locale: string) {\n    return new I18nParser(locale || 'zh')\n  },\n  /**\n   * 注册语言包\n   */\n  register(locale: string, langJson: typeof ZH) {\n    LangMapping[locale] = langJson;\n  }\n}\n\n/**\n * 注册使用示例\n */\nI18nUtils.register('en', EN)\n\n/**\n * 单例模式优化语言包的获取 单个语言只会创建一个语言转化实例\n */\nclass I18nParser {\n  static InstanceMap: Record<string, I18nParser> = {}\n  public locale: string = 'zh';\n\n  constructor(locale: string) {\n    this.locale = locale\n    if (I18nParser.InstanceMap[locale]) return I18nParser.InstanceMap[locale];\n    I18nParser.InstanceMap[locale] = this\n  }\n  // 翻译\n  public t(key: string, ...args:(string|number)[]): string {\n    const translated = I18nParser.getValue(LangMapping[this.locale], key);\n    if(args.length>0) return translated.replace(/\\${(\\d+)}/g, (match:any, index:number) => args[index]);\n    if (translated) return translated\n    return key;\n  }\n\n  // 获取深层值\n  static getValue(data: Record<string, any>, prop: string | string[]): any {\n    let ps = Array.isArray(prop) ? prop : prop.split('.');\n    try {\n      return ps.length == 1 ? data[ps.shift()!] : I18nParser.getValue(data[ps.shift()!], ps);\n    } catch (e) {\n      return undefined;\n    }\n  }\n}\n","import {\n  ApplicationRef,\n  ComponentRef,\n  createComponent,\n  EnvironmentInjector,\n  inject,\n  Injectable,\n  Injector\n} from '@angular/core';\nimport {PreviewFile, PreviewOptions} from '../types/preview.types';\nimport {BehaviorSubject} from 'rxjs';\nimport {PreviewModalComponent} from '../components';\nimport {ThemeService} from \"./theme.service\";\nimport {I18nUtils} from \"../i18n/i18n.utils\";\n\nexport const INITIAL_PREVIEW_STATE = {\n  isVisible: false,\n  currentIndex: 0,\n  files: []\n}\n\nexport interface PreviewState {\n  isVisible: boolean;\n  currentFile?: PreviewFile;\n  currentIndex: number;\n  files: PreviewFile[];\n}\n\n@Injectable()\nexport class PreviewService {\n  // region 服务管理\n  /**\n   * 初始化 需要将所有service注入到modal\n   */\n  private injector!: Injector;\n  private envInjector!: EnvironmentInjector;\n  private appRef = inject(ApplicationRef)\n  private lang: string = 'zh';\n  private loading: BehaviorSubject<boolean> = new BehaviorSubject(false);\n\n  /**\n   * 初始化\n   * @param injector\n   * @param envInjector\n   */\n  init(injector: Injector, envInjector: EnvironmentInjector) {\n    this.envInjector = envInjector;\n    this.injector = injector;\n  }\n\n  /**\n   * 设置语言\n   * @param lang\n   */\n  setLang(lang: string) {\n    this.lang = lang;\n  }\n\n  /**\n   * 获取实际的lang parser\n   */\n  getLangParser() {\n    return I18nUtils.get(this.lang)\n  }\n\n  // endregion\n  // region 状态管理\n  readonly stateSubject = new BehaviorSubject<PreviewState>(INITIAL_PREVIEW_STATE);\n\n  get state() {\n    return this.stateSubject.getValue();\n  }\n\n  getStateObservable() {\n    return this.stateSubject.asObservable();\n  }\n\n  previous() {\n    const state = this.state;\n    const newIndex = Math.max(0, state.currentIndex - 1);\n    this.updatePreviewState(true, state.files, newIndex);\n  }\n\n  next() {\n    const state = this.state;\n    const newIndex = Math.min(state.files.length - 1, state.currentIndex + 1);\n    this.updatePreviewState(true, state.files, newIndex);\n  }\n\n  private updatePreviewState(isVisible: boolean, files: PreviewFile[], index: number) {\n    const currentFile = files[index];\n    this.stateSubject.next({\n      isVisible,\n      currentFile,\n      currentIndex: index,\n      files\n    });\n  }\n\n  /**\n   * 设置加载中状态\n   * @param loading\n   */\n  setLoading(loading: boolean) {\n    this.loading.next(loading);\n  }\n\n  getLoadingObservable() {\n    return this.loading.asObservable();\n  }\n\n  // endregion\n  // region Modal管理\n  private modalRef?: ComponentRef<PreviewModalComponent>;\n\n  get modalElement() {\n    return this.modalRef?.location.nativeElement\n  }\n\n  open(options: PreviewOptions) {\n    const {files, index = 0} = options;\n    if (this.modalRef) {\n      this.cleanupModal()\n    }\n    try {\n      this.modalRef = createComponent(PreviewModalComponent, {\n        environmentInjector: this.envInjector,\n        elementInjector: this.injector,\n      });\n      Object.assign(this.modalRef.instance, options)\n      this.injector.get(ThemeService).bindElement(this.modalRef.location.nativeElement)\n      document.body.appendChild(this.modalRef.location.nativeElement);\n      this.modalRef.changeDetectorRef.detectChanges();\n      this.updatePreviewState(true, files, index);\n      this.appRef.attachView(this.modalRef.hostView);\n    } catch (error) {\n      console.error('Error creating preview-list modal:', error);\n      this.cleanupModal();\n    }\n  }\n\n  close() {\n    if (document.fullscreenElement) {\n      document?.exitFullscreen();\n    }\n    this.updatePreviewState(false, [], 0);\n    this.cleanupModal();\n  }\n\n  private cleanupModal() {\n    if (!this.modalRef) return;\n    try {\n      // 从 DOM 中移除模态框\n      const element = this.modalRef.location.nativeElement;\n      if (element.parentNode) {\n        element.parentNode.removeChild(element);\n      }\n      // 从 ApplicationRef 中分离视图\n      this.appRef.detachView(this.modalRef.hostView);\n      // 销毁组件\n      this.modalRef.destroy();\n    } catch (error) {\n      console.error('Error cleaning up modal:', error);\n    } finally {\n      this.modalRef = undefined;\n    }\n  }\n\n  // endregion\n\n\n}\n","import {Injectable} from '@angular/core';\nimport {Observable, Subject, from} from 'rxjs';\nimport {PreviewFile} from \"../types\";\n\nexport interface FileReaderResponse {\n  type: 'success' | 'error';\n  data?: ArrayBuffer;\n  text?: string;\n  json?: any;\n  error?: string;\n}\n\n@Injectable()\nexport class FileReaderService {\n  private responseSubject = new Subject<FileReaderResponse>();\n  private async readFileData(file: PreviewFile, fileType: 'arraybuffer' | 'text' | 'json'): Promise<FileReaderResponse> {\n    try {\n      const response = await fetch(file.url);\n      if (!response.ok) {\n        throw new Error(`HTTP error! status: ${response.status}`);\n      }\n\n      const result: FileReaderResponse = { type: 'success' };\n\n      switch (fileType) {\n        case 'arraybuffer':\n          result.data = await response.arrayBuffer();\n          break;\n        case 'text':\n          result.text = await response.text();\n          break;\n        case 'json':\n          const text = await response.text();\n          try {\n            result.json = JSON.parse(text);\n          } catch (parseError: any) {\n            throw new Error(`JSON parse failed: ${parseError.message}`);\n          }\n          break;\n      }\n\n      return result;\n    } catch (error) {\n      return {\n        type: 'error',\n        error: error instanceof Error ? error.message : 'Unknown error'\n      };\n    }\n  }\n\n  readFile(file: PreviewFile, fileType: 'arraybuffer' | 'text' | 'json' = 'arraybuffer'): Observable<FileReaderResponse> {\n    return from(this.readFileData(file, fileType));\n  }\n\n  ngOnDestroy() {\n    this.responseSubject.complete();\n  }\n}\n","import {ChangeDetectorRef, Directive, inject, Input} from '@angular/core';\nimport {AutoThemeConfig, PreviewFile, ThemeMode} from '../../types';\nimport {FileReaderResponse, FileReaderService, PreviewService} from \"../../services\";\nimport {firstValueFrom} from \"rxjs\";\n\n@Directive({\n  standalone: true,\n})\nexport abstract class BasePreviewComponent {\n  @Input() file!: PreviewFile;\n  @Input({transform: (value: ThemeMode | null): ThemeMode => value!}) themeMode!: ThemeMode;\n  @Input() autoThemeConfig?: AutoThemeConfig;\n\n  protected fileReader = inject(FileReaderService);\n  protected previewService = inject(PreviewService);\n  protected cdr = inject(ChangeDetectorRef);\n\n  get isLoading() {\n    return this.previewService.getLoadingObservable();\n  }\n\n  t(key: string, ...args: (string | number)[]) {\n    return this.previewService?.getLangParser()?.t(key, ...args);\n  }\n\n  protected async loadFile(fileType?: 'arraybuffer' | 'text' | 'json'): Promise<void> {\n    if (!this.file) return;\n    this.startLoading();\n    try {\n      const content = await firstValueFrom(this.fileReader.readFile(this.file, fileType));\n      await this.handleFileContent(content);\n    } catch (error) {\n      console.error('Failed to read file:', error);\n    } finally {\n      this.stopLoading();\n    }\n  }\n\n  protected abstract handleFileContent(content: FileReaderResponse): Promise<any>;\n\n  protected startLoading() {\n    this.previewService.setLoading(true)\n    this.cdr.markForCheck();\n  }\n\n  protected stopLoading() {\n    this.previewService.setLoading(false)\n    this.cdr.markForCheck();\n  }\n}\n","import {\n  Component,\n  Directive,\n  ElementRef,\n  HostListener,\n  Input,\n  OnDestroy,\n  Renderer2,\n  ViewContainerRef\n} from \"@angular/core\";\nimport {PreviewService} from \"../services\";\n\n@Directive({ selector: '[tooltip]' ,standalone: true})\nexport class TooltipDirective implements OnDestroy {\n  @Input('tooltip') content!: string;\n  @Input() delay: number = 500;\n\n  private tooltip!: HTMLElement;\n  private showTimeout?: any;\n  private hideTimeout?: any;\n  private positions = ['top', 'bottom', 'left', 'right'];\n  private currentPosition = 'top';\n\n  constructor(\n    private el: ElementRef,\n    private renderer: Renderer2,\n    private viewContainer: ViewContainerRef,\n    private previewService:PreviewService\n  ) {}\n\n  @HostListener('mouseenter') onMouseEnter() {\n    this.clearTimers();\n    this.showTimeout = setTimeout(() => this.show(), this.delay);\n  }\n\n  @HostListener('mouseleave') onMouseLeave() {\n    this.clearTimers();\n    this.hideTimeout = setTimeout(() => this.hide(), 100);\n  }\n\n  private show() {\n    if(!this.content)return;\n    if (!this.tooltip) {\n      // 动态创建组件\n      const factory = this.viewContainer.createComponent(TooltipComponent);\n      this.tooltip = factory.location.nativeElement;\n      factory.instance.content = this.content;\n      // 立即显示内容\n      this.renderer.addClass(this.tooltip, 'visible');\n      this.previewService.modalElement?.querySelector('.nfp-modal__overlay').appendChild(this.tooltip);\n      factory.changeDetectorRef.detectChanges()\n    }\n\n    // 计算最佳位置\n    const hostRect = this.el.nativeElement.getBoundingClientRect();\n    const tooltipRect = this.tooltip.getBoundingClientRect();\n    const viewportWidth = window.innerWidth;\n    const viewportHeight = window.innerHeight;\n\n    // 检查每个位置的可用空间\n    const spaces: Record<string, number> = {\n      top: hostRect.top,\n      bottom: viewportHeight - (hostRect.bottom),\n      left: hostRect.left,\n      right: viewportWidth - (hostRect.right)\n    };\n\n    // 找到最佳位置\n    this.currentPosition = this.positions.reduce((best, current) =>\n      spaces[current] > spaces[best] ? current : best\n    );\n\n    // 根据位置设置样式类\n    this.positions.forEach(pos => this.renderer.removeClass(this.tooltip, pos));\n    this.renderer.addClass(this.tooltip, this.currentPosition);\n\n    // 根据位置计算坐标\n    let top, left;\n    switch(this.currentPosition) {\n      case 'top':\n        top = hostRect.top - tooltipRect.height - 8;\n        left = hostRect.left + (hostRect.width - tooltipRect.width) / 2;\n        break;\n      case 'bottom':\n        top = hostRect.bottom + 8;\n        left = hostRect.left + (hostRect.width - tooltipRect.width) / 2;\n        break;\n      case 'left':\n        top = hostRect.top + (hostRect.height - tooltipRect.height) / 2;\n        left = hostRect.left - tooltipRect.width - 8;\n        break;\n      case 'right':\n        top = hostRect.top + (hostRect.height - tooltipRect.height) / 2;\n        left = hostRect.right + 8;\n        break;\n    }\n\n    // 确保tooltip不超出视口\n    top = Math.max(8, Math.min(viewportHeight - tooltipRect.height - 8, top));\n    left = Math.max(8, Math.min(viewportWidth - tooltipRect.width - 8, left));\n\n    this.renderer.setStyle(this.tooltip, 'top', `${top}px`);\n    this.renderer.setStyle(this.tooltip, 'left', `${left}px`);\n  }\n\n  private hide() {\n    if (this.tooltip) {\n      this.renderer.removeClass(this.tooltip, 'visible');\n      setTimeout(() => {\n        this.viewContainer.clear()\n        this.tooltip = null!\n      }, 300); // 增加动画时间\n    }\n  }\n\n  private clearTimers() {\n    clearTimeout(this.showTimeout);\n    clearTimeout(this.hideTimeout);\n  }\n\n  ngOnDestroy() {\n    this.viewContainer.clear();\n  }\n}\n@Component({\n  selector: 'ngx-file-tooltip',\n  template: `{{ content }}`,\n  standalone: true,\n  styles: [`\n    :host {\n      position: absolute;\n      background: rgba(0, 0, 0, 0.85);\n      color: #fff;\n      font-size: 14px;\n      padding: 6px 8px;\n      border-radius: 2px;\n      box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n      max-width: 250px;\n      min-height: 24px;\n      word-wrap: break-word;\n      z-index: 999;\n      pointer-events: none;\n      opacity: 0;\n      display: flex;\n      justify-content: center;\n      align-items: center;\n      transform: scale(0.8);\n      transform-origin: center;\n      transition: opacity 0.2s ease-in-out, transform 0.2s ease-in-out;\n    }\n\n    :host.visible {\n      opacity: 1;\n      transform: scale(1);\n    }\n\n    :host::after {\n      content: '';\n      position: absolute;\n      width: 0;\n      height: 0;\n      border: 5px solid transparent;\n    }\n\n    :host.top::after {\n      border-top-color: rgba(0, 0, 0, 0.85);\n      bottom: -10px;\n      left: 50%;\n      transform: translateX(-50%);\n    }\n\n    :host.bottom::after {\n      border-bottom-color: rgba(0, 0, 0, 0.85);\n      top: -10px;\n      left: 50%;\n      transform: translateX(-50%);\n    }\n\n    :host.left::after {\n      border-left-color: rgba(0, 0, 0, 0.85);\n      right: -10px;\n      top: 50%;\n      transform: translateY(-50%);\n    }\n\n    :host.right::after {\n      border-right-color: rgba(0, 0, 0, 0.85);\n      left: -10px;\n      top: 50%;\n      transform: translateY(-50%);\n    }\n  `]\n})\nexport class TooltipComponent {\n  @Input() content: string = \"\";\n}\n","import {Component, CUSTOM_ELEMENTS_SCHEMA, HostBinding, Input, NO_ERRORS_SCHEMA} from \"@angular/core\";\nimport {CommonModule} from \"@angular/common\";\nimport {ThemeMode} from \"../../types/theme.types\";\nimport {TooltipDirective} from \"../../directives/tooltip.diretive\";\n\n@Component({\n  selector: \"preview-icon\",\n  template: `\n    <ng-container *ngIf=\"name\">\n      <i [tooltip]=\"title\" class=\"fp-font-icon NGX-FILE-PREVIEW\" [class]=\"'nfp-'+name\"\n         [style.width]=\"size\" [style.font-size]=\"size\"\n         [style.color]=\"color ? color: (themeMode=='light'?'#333333':'#FFFFFF')\"></i>\n    </ng-container>\n    <ng-container *ngIf=\"svg\">\n      <svg class=\"fp-svg-icon\" [style.width]=\"size\" [style.height]=\"size\" [tooltip]=\"title\" aria-hidden=\"true\">\n        <use [attr.xlink:href]=\"'#nfp-' + svg\">\"></use>\n      </svg>\n    </ng-container>\n  `,\n  styles: [`:host {\n    display: inline-block;\n    line-height: 0;\n\n    .fp-svg-icon {\n      width: 1em;\n      height: 1em;\n      vertical-align: -0.15em;\n      fill: currentColor;\n      overflow: hidden;\n    }\n\n    .fp-font-icon {\n      color: #FFFFFF;\n      display: inline-flex;\n      justify-content: center;\n      align-items: center;\n      aspect-ratio: 1;\n      overflow: hidden;\n    }\n  }\n  `],\n  imports: [CommonModule, TooltipDirective],\n  standalone: true,\n  schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA]\n})\nexport class PreviewIconComponent {\n  @Input() name: string = \"\";\n  @Input() svg: string = \"\";\n  @Input({transform: (v: any) => typeof v === 'number' ? `${v}px` : v}) size: number | string = '16px';\n  @Input() color?: string;\n  @Input() themeMode?: ThemeMode | null;\n  @Input() title: string = \"\";\n  @Input()\n  @HostBinding('style.cursor')\n  cursor = 'pointer'\n}\n","import {Optional, Pipe} from \"@angular/core\";\nimport {PreviewService} from \"../services\";\n\n@Pipe({\n  name: 'i18n',\n  standalone: true\n})\nexport class I18nPipe {\n  constructor(private previewService: PreviewService) {\n  }\n  transform(key: string, ...args:any[]): string {\n    const parser = this.previewService.getLangParser();\n    return parser.t(key,...args);\n  }\n}\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  OnChanges,\n  OnDestroy,\n  SimpleChanges,\n  ViewChild\n} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {BasePreviewComponent} from '../base-preview/base-preview.component';\nimport {PreviewIconComponent} from '../../components/preview-icon/preview-icon.component';\nimport * as XLSX from 'xlsx';\nimport {FileReaderResponse} from \"../../services\";\nimport {I18nPipe} from \"../../i18n\";\n\ninterface TableData {\n  headers: string[];\n  rows: any[][];\n}\n\n@Component({\n  selector: 'ngx-excel-preview',\n  standalone: true,\n  imports: [CommonModule, PreviewIconComponent, I18nPipe],\n  template: `\n    <div class=\"excel-container\" #container>\n      <div class=\"toolbar\">\n        <div class=\"left-controls\">\n          <button class=\"tool-btn\" (click)=\"zoomOut()\">\n            <preview-icon [themeMode]=\"themeMode\" name=\"zoom-out\" [title]=\"'preview.toolbar.zoomOut'|i18n\"></preview-icon>\n          </button>\n          <span class=\"zoom-text\" (click)=\"resetZoom()\" [title]=\"'preview.toolbar.resetZoom'|i18n\">\n            {{ (scale * 100).toFixed(0) }}%\n          </span>\n          <button class=\"tool-btn\" (click)=\"zoomIn()\">\n            <preview-icon [themeMode]=\"themeMode\" name=\"zoom-in\" [title]=\"'preview.toolbar.zoomIn'|i18n\"></preview-icon>\n          </button>\n        </div>\n        <div class=\"sheet-controls\" *ngIf=\"sheets.length > 0\">\n          <button class=\"sheet-btn\"\n                  *ngFor=\"let sheet of sheets\"\n                  [class.active]=\"currentSheet === sheet\"\n                  (click)=\"switchSheet(sheet)\">\n            {{ sheet }}\n          </button>\n        </div>\n        <div class=\"right-controls\">\n          <button class=\"tool-btn\" (click)=\"toggleFullscreen()\">\n            <preview-icon [themeMode]=\"themeMode\" name=\"fullscreen\" [title]=\"'preview.toolbar.fullscreen'|i18n\"></preview-icon>\n          </button>\n        </div>\n      </div>\n\n      <div class=\"preview-container\">\n        <div class=\"preview-content\">\n          <div class=\"table-wrapper\"\n               #tableWrapper\n               (mousedown)=\"startDrag($event)\"\n               (wheel)=\"handleWheel($event)\"\n               [class.dragging]=\"isDragging\"\n               [style.transform]=\"'scale(' + scale + ')'\">\n            <table *ngIf=\"tableData\">\n              <colgroup>\n                <col class=\"row-header-col\">\n                <col *ngFor=\"let header of tableData.headers\" class=\"data-col\">\n                <col *ngFor=\"let i of extraColumns\" class=\"data-col\">\n              </colgroup>\n              <thead>\n              <tr>\n                <th class=\"corner-cell\"></th>\n                <th *ngFor=\"let header of tableData.headers; let i = index\">\n                  {{ getColumnName(i) }}\n                </th>\n                <th *ngFor=\"let i of extraColumns;let j=index\" class=\"empty-column\">\n                  {{ getColumnName(tableData.headers.length + j) }}\n                </th>\n              </tr>\n              </thead>\n              <tbody>\n              <tr *ngFor=\"let row of visibleRows; let rowIndex = index\">\n                <td class=\"row-header\">{{ getRowNumber(rowIndex) }}</td>\n                <td *ngFor=\"let cell of row; let colIndex = index\"\n                    [class.empty-cell]=\"!cell && cell !== 0\">\n                  {{ cell }}\n                </td>\n                <td *ngFor=\"let i of extraColumns\" class=\"empty-cell\"></td>\n              </tr>\n              </tbody>\n            </table>\n          </div>\n        </div>\n      </div>\n    </div>\n  `,\n  styleUrls: [\"../../styles/_theme.scss\", \"excel-preview.component.scss\"],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ExcelPreviewComponent extends BasePreviewComponent implements OnChanges, AfterViewInit, OnDestroy {\n  @ViewChild('container') container!: ElementRef<HTMLDivElement>;\n  @ViewChild('tableWrapper') tableWrapper!: ElementRef<HTMLDivElement>;\n\n  scale = 1;\n  sheets: string[] = [];\n  currentSheet = '';\n  tableData: TableData = {headers: [], rows: []};\n  displayRows: any[][] = [];\n  extraRows = 100; // 增加额外显示的空行数\n  extraColumns = Array(5).fill(0);\n  visibleRows: any[][] = [];\n\n  private workbook?: XLSX.WorkBook;\n  private readonly SCALE_STEP = 0.1;\n  private readonly MAX_SCALE = 3;\n  private readonly MIN_SCALE = 0.1;\n\n  isDragging = false;\n  private startX = 0;\n  private startY = 0;\n  private scrollLeft = 0;\n  private scrollTop = 0;\n  private mouseMoveListener?: (e: MouseEvent) => void;\n  private mouseUpListener?: (e: MouseEvent) => void;\n\n  private readonly DEFAULT_SCALE = 1;\n  private keydownListener?: (e: KeyboardEvent) => void;\n\n  get totalColumns(): number[] {\n    const total = (this.tableData.headers.length + this.extraColumns.length) || 0;\n    return Array(total).fill(0);\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['file'] && this.file) {\n      this.loadFile();\n    }\n  }\n\n  ngAfterViewInit() {\n    this.setupDragListeners();\n    this.setupKeyboardListeners();\n  }\n\n  ngOnDestroy() {\n    this.removeDragListeners();\n    this.removeKeyboardListeners();\n  }\n\n  protected override async handleFileContent(content: FileReaderResponse) {\n    const {data} = content\n    this.workbook = XLSX.read(data, {type: 'array'});\n    this.sheets = this.workbook.SheetNames;\n    if (this.sheets.length > 0) {\n      await this.switchSheet(this.sheets[0]);\n    }\n  }\n\n  private setupDragListeners() {\n    this.mouseMoveListener = (e: MouseEvent) => this.onDrag(e);\n    this.mouseUpListener = () => this.stopDrag();\n\n    document.addEventListener('mousemove', this.mouseMoveListener);\n    document.addEventListener('mouseup', this.mouseUpListener);\n  }\n\n  private removeDragListeners() {\n    if (this.mouseMoveListener) {\n      document.removeEventListener('mousemove', this.mouseMoveListener);\n    }\n    if (this.mouseUpListener) {\n      document.removeEventListener('mouseup', this.mouseUpListener);\n    }\n  }\n\n  startDrag(e: MouseEvent) {\n    // 如果点击的是滚动条，不启动拖动\n    const wrapper = this.tableWrapper.nativeElement;\n    const rect = wrapper.getBoundingClientRect();\n    const isClickOnScrollbarX = e.clientY > (rect.bottom - 12);\n    const isClickOnScrollbarY = e.clientX > (rect.right - 12);\n\n    if (isClickOnScrollbarX || isClickOnScrollbarY) {\n      return;\n    }\n\n    this.isDragging = true;\n    this.startX = e.pageX - wrapper.offsetLeft;\n    this.startY = e.pageY - wrapper.offsetTop;\n    this.scrollLeft = wrapper.scrollLeft;\n    this.scrollTop = wrapper.scrollTop;\n  }\n\n  private onDrag(e: MouseEvent) {\n    if (!this.isDragging) return;\n\n    e.preventDefault();\n    const wrapper = this.tableWrapper.nativeElement;\n    const x = e.pageX - wrapper.offsetLeft;\n    const y = e.pageY - wrapper.offsetTop;\n    const walkX = (x - this.startX) * 1.5; // 增加一些移动速度\n    const walkY = (y - this.startY) * 1.5;\n\n    wrapper.scrollLeft = this.scrollLeft - walkX;\n    wrapper.scrollTop = this.scrollTop - walkY;\n  }\n\n  private stopDrag() {\n    this.isDragging = false;\n  }\n\n  async switchSheet(sheetName: string) {\n    if (!this.workbook) return;\n\n    try {\n      const worksheet = this.workbook.Sheets[sheetName];\n      const jsonData = XLSX.utils.sheet_to_json<any[]>(worksheet, {header: 1});\n\n      // 确保所有行的长度一致\n      const maxLength = Math.max(...jsonData.map((row: any[]) => row?.length || 0), 0);\n      this.displayRows = jsonData.map((row: any[]) => {\n        const paddedRow = Array.isArray(row) ? [...row] : [];\n        while (paddedRow.length < maxLength) {\n          paddedRow.push(null);\n        }\n        return paddedRow;\n      });\n\n      // 添加额外的空行\n      const emptyRows = Array(this.extraRows).fill(0).map(() => Array(maxLength).fill(null));\n      this.visibleRows = [...this.displayRows, ...emptyRows];\n\n      this.tableData = {\n        headers: Array(maxLength).fill(''),\n        rows: this.displayRows\n      };\n\n      this.currentSheet = sheetName;\n      this.cdr.markForCheck();\n    } catch (error) {\n      console.error('切换工作表失败:', error);\n    }\n  }\n\n  zoomIn() {\n    if (this.scale < this.MAX_SCALE) {\n      this.scale = Math.min(this.MAX_SCALE, this.scale + this.SCALE_STEP);\n      this.applyZoom();\n    }\n  }\n\n  zoomOut() {\n    if (this.scale > this.MIN_SCALE) {\n      this.scale = Math.max(this.MIN_SCALE, this.scale - this.SCALE_STEP);\n      this.applyZoom();\n    }\n  }\n\n  toggleFullscreen() {\n    if (!document.fullscreenElement) {\n      document.documentElement.requestFullscreen();\n    } else {\n      document.exitFullscreen();\n    }\n  }\n\n  getColumnName(index: number): string {\n    let name = '';\n    let num = index;\n\n    do {\n      name = String.fromCharCode(65 + (num % 26)) + name;\n      num = Math.floor(num / 26) - 1;\n    } while (num >= 0);\n\n    return name;\n  }\n\n  getRowNumber(index: number): number {\n    return index + 1;\n  }\n\n  handleWheel(event: WheelEvent) {\n    if (event.ctrlKey || event.metaKey) {\n      event.preventDefault();\n      const delta = event.deltaY || event.detail || 0;\n\n      if (delta < 0) {\n        this.zoomIn();\n      } else {\n        this.zoomOut();\n      }\n    }\n  }\n\n  private applyZoom() {\n    if (this.tableWrapper) {\n      const wrapper = this.tableWrapper.nativeElement;\n\n      // 保存当前滚动位置的相对百分比\n      const scrollLeftPercent = wrapper.scrollLeft / (wrapper.scrollWidth - wrapper.clientWidth);\n      const scrollTopPercent = wrapper.scrollTop / (wrapper.scrollHeight - wrapper.clientHeight);\n\n      // 应用缩放\n      wrapper.style.transform = `scale(${this.scale})`;\n\n      // 在下一个事件循环中恢复滚动位置\n      setTimeout(() => {\n        wrapper.scrollLeft = scrollLeftPercent * (wrapper.scrollWidth - wrapper.clientWidth);\n        wrapper.scrollTop = scrollTopPercent * (wrapper.scrollHeight - wrapper.clientHeight);\n      });\n    }\n    this.cdr.markForCheck();\n  }\n\n  private setupKeyboardListeners() {\n    this.keydownListener = (e: KeyboardEvent) => {\n      // 按下 Ctrl/Command + 0 重置缩放\n      if ((e.ctrlKey || e.metaKey) && e.key === '0') {\n        e.preventDefault();\n        this.resetZoom();\n      }\n    };\n\n    document.addEventListener('keydown', this.keydownListener);\n  }\n\n  private removeKeyboardListeners() {\n    if (this.keydownListener) {\n      document.removeEventListener('keydown', this.keydownListener);\n    }\n  }\n\n  resetZoom() {\n    this.scale = this.DEFAULT_SCALE;\n    this.applyZoom();\n  }\n}\n","import {ChangeDetectionStrategy, Component} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {PreviewIconComponent} from '../../components/preview-icon/preview-icon.component';\nimport {BasePreviewComponent} from \"../base-preview/base-preview.component\";\nimport {FileReaderResponse} from \"../../services\";\nimport {I18nPipe} from \"../../i18n\";\n\n@Component({\n  selector: 'ngx-archive-preview',\n  standalone: true,\n  imports: [CommonModule, PreviewIconComponent, I18nPipe],\n  template: `\n    <div class=\"archive-container\">\n      <div class=\"archive-info\">\n        <div class=\"icon\">\n          <preview-icon [themeMode]=\"themeMode\" [svg]=\"'zip'\" [size]=\"48\"></preview-icon>\n        </div>\n        <div class=\"details\">\n          <h2>{{ file.name }}</h2>\n          <div class=\"meta\">\n            <span>{{ 'zip.type'|i18n }}: {{ getArchiveType() }}</span>\n            <span>{{ 'zip.size'|i18n }}: {{ formatFileSize(file.size) }}</span>\n          </div>\n        </div>\n      </div>\n    </div>\n  `,\n  styleUrls: [\"../../styles/_theme.scss\", \"archive-preview.component.scss\"],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ArchivePreviewComponent extends BasePreviewComponent {\n  getArchiveType(): string {\n    const extension = this.file.name.split('.').pop()?.toLowerCase();\n    const that = this;\n    const types: { [key: string]: string } = ['zip', 'rar', '7z', 'tar', 'gz'].reduce((ts, key) => Object.assign(ts, {\n      [key]: that.t('zip.types.' + key)\n    }), {});\n    console.log(\"types\", types, this.t(\"zip.types.zip\"))\n    return types[extension || ''] || this.t('zip.types.unknown');\n  }\n\n  protected override async handleFileContent(content: FileReaderResponse) {\n  }\n\n  formatFileSize(bytes?: number): string {\n    if (!bytes) return this.t('zip.unknownSize');\n\n    const units = ['B', 'KB', 'MB', 'GB', 'TB'];\n    let size = bytes;\n    let unitIndex = 0;\n\n    while (size >= 1024 && unitIndex < units.length - 1) {\n      size /= 1024;\n      unitIndex++;\n    }\n\n    return `${size.toFixed(2)} ${units[unitIndex]}`;\n  }\n\n}\n","import {ChangeDetectionStrategy, Component, ElementRef, OnChanges, SimpleChanges, ViewChild} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {BasePreviewComponent} from '../base-preview/base-preview.component';\nimport {PreviewIconComponent} from '../../components/preview-icon/preview-icon.component';\nimport {renderAsync} from 'docx-preview';\nimport {FileReaderResponse} from \"../../services\";\nimport {I18nPipe} from \"../../i18n\";\n\n@Component({\n  selector: 'ngx-word-preview',\n  standalone: true,\n  imports: [CommonModule, PreviewIconComponent, I18nPipe],\n  template: `\n    <div class=\"word-container\">\n      <div class=\"toolbar\">\n        <div class=\"left-controls\">\n          <button class=\"tool-btn\" (click)=\"zoomOut()\" [disabled]=\"scale <= MIN_SCALE\">\n            <preview-icon [themeMode]=\"themeMode\" name=\"zoom-out\" [title]=\"'preview.toolbar.zoomOut'|i18n\"></preview-icon>\n          </button>\n          <span class=\"zoom-text\" (click)=\"resetZoom()\" [title]=\"'preview.toolbar.resetZoom'|i18n\">\n            {{ (scale * 100).toFixed(0) }}%\n          </span>\n          <button class=\"tool-btn\" (click)=\"zoomIn()\" [disabled]=\"scale >= MAX_SCALE\">\n            <preview-icon [themeMode]=\"themeMode\" name=\"zoom-in\" [title]=\"'preview.toolbar.zoomIn'|i18n\"></preview-icon>\n          </button>\n        </div>\n        <div class=\"right-controls\">\n          <button class=\"tool-btn\" (click)=\"toggleFullscreen()\">\n            <preview-icon [themeMode]=\"themeMode\" name=\"fullscreen\" [title]=\"'preview.toolbar.fullscreen'|i18n\"></preview-icon>\n          </button>\n        </div>\n      </div>\n\n      <div class=\"preview-container\"\n           #previewContainer\n           (wheel)=\"handleWheel($event)\"\n           (pointerdown)=\"startDrag($event)\"\n           (pointermove)=\"onDrag($event)\"\n           (pointerup)=\"stopDrag($event)\"\n           [class.dragging]=\"isDragging\">\n        <div class=\"content-wrapper\">\n          <div #content\n               class=\"preview-content\"\n               [style.transform]=\"'scale(' + scale + ')'\">\n          </div>\n        </div>\n      </div>\n    </div>\n  `,\n  styleUrls: [\"../../styles/_theme.scss\", \"word-preview.component.scss\"],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class WordPreviewComponent extends BasePreviewComponent implements OnChanges {\n  @ViewChild('content') content!: ElementRef<HTMLDivElement>;\n  @ViewChild('previewContainer') previewContainer!: ElementRef<HTMLDivElement>;\n\n  // 缩放相关常量\n  protected readonly MIN_SCALE = 0.25;\n  protected readonly MAX_SCALE = 4;\n  protected readonly SCALE_STEP = 0.1;\n  protected readonly DEFAULT_SCALE = 1;\n\n  // 状态\n  protected scale = 1;\n  protected isDragging = false;\n\n  // 拖拽相关\n  private startX = 0;\n  private startY = 0;\n  private scrollLeft = 0;\n  private scrollTop = 0;\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['file']) {\n      this.loadFile()\n    }\n  }\n  override async handleFileContent(content: FileReaderResponse) {\n    try {\n      await renderAsync(content.data, this.content.nativeElement, undefined, {\n        className: 'docx-content',\n        inWrapper: false,\n        ignoreWidth: false,\n        ignoreHeight: false,\n        ignoreFonts: false,\n        breakPages: true,\n        useBase64URL: true,\n      });\n    } catch (error) {\n      console.log(\"error\", error)\n    }\n    this.cdr.markForCheck();\n  }\n\n  handleWheel(event: WheelEvent) {\n    if (event.ctrlKey || event.metaKey) {\n      event.preventDefault();\n      const delta = event.deltaY < 0 ? 1 : -1;\n      if (delta > 0) {\n        this.zoomIn();\n      } else {\n        this.zoomOut();\n      }\n    }\n  }\n\n  startDrag(event: PointerEvent) {\n    if (event.button !== 0) return;\n\n    this.isDragging = true;\n    const container = this.previewContainer.nativeElement;\n    this.startX = event.clientX;\n    this.startY = event.clientY;\n    this.scrollLeft = container.scrollLeft;\n    this.scrollTop = container.scrollTop;\n\n    container.setPointerCapture(event.pointerId);\n    event.preventDefault();\n  }\n\n  onDrag(event: PointerEvent) {\n    if (!this.isDragging) return;\n\n    const container = this.previewContainer.nativeElement;\n    const deltaX = event.clientX - this.startX;\n    const deltaY = event.clientY - this.startY;\n\n    container.scrollLeft = this.scrollLeft - deltaX;\n    container.scrollTop = this.scrollTop - deltaY;\n  }\n\n  stopDrag(event: PointerEvent) {\n    if (!this.isDragging) return;\n\n    this.isDragging = false;\n    this.previewContainer.nativeElement.releasePointerCapture(event.pointerId);\n  }\n\n\n  zoomIn() {\n    if (this.scale < this.MAX_SCALE) {\n      this.scale = Math.min(this.MAX_SCALE, this.scale + this.SCALE_STEP);\n      this.applyZoom();\n    }\n  }\n\n  zoomOut() {\n    if (this.scale > this.MIN_SCALE) {\n      this.scale = Math.max(this.MIN_SCALE, this.scale - this.SCALE_STEP);\n      this.applyZoom();\n    }\n  }\n\n  resetZoom() {\n    this.scale = this.DEFAULT_SCALE;\n    this.applyZoom();\n  }\n\n  private applyZoom() {\n    if (this.content?.nativeElement && this.previewContainer?.nativeElement) {\n      const container = this.previewContainer.nativeElement;\n      const rect = container.getBoundingClientRect();\n\n      // 获取当前滚动中心点\n      const centerX = (container.scrollLeft + rect.width / 2) / this.scale;\n      const centerY = (container.scrollTop + rect.height / 2) / this.scale;\n\n      // 更新缩放\n      this.content.nativeElement.style.transform = `scale(${this.scale})`;\n      this.content.nativeElement.style.transformOrigin = 'top left';\n\n      // 调整滚动位置，确保视图保持缩放中心一致\n      requestAnimationFrame(() => {\n        container.scrollLeft = centerX * this.scale - rect.width / 2;\n        container.scrollTop = centerY * this.scale - rect.height / 2;\n      });\n    }\n    this.cdr.markForCheck();\n  }\n\n  toggleFullscreen() {\n    if (!document.fullscreenElement) {\n      document.documentElement.requestFullscreen();\n    } else {\n      document.exitFullscreen();\n    }\n  }\n}\n\n","import {ChangeDetectionStrategy, Component, ElementRef, OnInit, ViewChild} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {NgxExtendedPdfViewerComponent, NgxExtendedPdfViewerModule} from 'ngx-extended-pdf-viewer';\nimport {PreviewIconComponent} from '../../components/preview-icon/preview-icon.component';\nimport {BasePreviewComponent} from \"../base-preview/base-preview.component\";\nimport {FileReaderResponse} from \"../../services\";\nimport {I18nPipe} from \"../../i18n\";\n\n@Component({\n  selector: 'ngx-pdf-preview',\n  standalone: true,\n  imports: [CommonModule, NgxExtendedPdfViewerModule, PreviewIconComponent, I18nPipe],\n  template: `\n    <div class=\"pdf-container\">\n      <!-- 工具栏 -->\n      <div class=\"toolbar\">\n        <div class=\"left-controls\">\n          <div class=\"control\" (click)=\"zoomOut()\">\n            <preview-icon [themeMode]=\"themeMode\" name=\"zoom-out\" [title]=\"'preview.toolbar.zoomOut'|i18n\"></preview-icon>\n          </div>\n          <span (click)=\"resetZoom()\">{{ zoom == \"page-fit\" ? \"100%\" : zoom }}%</span>\n          <div class=\"control\" (click)=\"zoomIn()\">\n            <preview-icon [themeMode]=\"themeMode\" name=\"zoom-in\" [title]=\"'preview.toolbar.zoomIn'|i18n\"></preview-icon>\n          </div>\n          <div class=\"control\" (click)=\"autoFit()\">\n            <preview-icon [themeMode]=\"themeMode\" name=\"auto-fit\" [title]=\"'preview.toolbar.autoFit'|i18n\"></preview-icon>\n          </div>\n        </div>\n\n        <div class=\"right-controls\">\n          <div class=\"control\" (click)=\"rotate(-90)\">\n            <preview-icon [themeMode]=\"themeMode\" name=\"rotate-90\" [title]=\"'preview.toolbar.rotate-90'|i18n\"></preview-icon>\n          </div>\n          <div class=\"control\" (click)=\"rotate(90)\">\n            <preview-icon [themeMode]=\"themeMode\" name=\"rotate90\" [title]=\"'preview.toolbar.rotate90'|i18n\"></preview-icon>\n          </div>\n          <div class=\"control\" (click)=\"reset()\">\n            <preview-icon [themeMode]=\"themeMode\" name=\"reset\" [title]=\"'preview.toolbar.reset'|i18n\"></preview-icon>\n          </div>\n        </div>\n      </div>\n      <!-- PDF查看器 -->\n      <div class=\"viewer-container\" #viewerContainer>\n        <ngx-extended-pdf-viewer\n          [class.hidden]=\"isLoading|async\"\n          [src]=\"file.url\"\n          [rotation]=\"rotation\"\n          [zoom]=\"zoom\"\n          (currentZoomFactor)=\"onScaleChange($event)\"\n          [(page)]=\"currentPage\"\n          [backgroundColor]=\"'rgba(0,0,0,0)'\"\n          [showSidebarButton]=\"false\"\n          [textLayer]=\"true\"\n          [showToolbar]=\"false\"\n          [showTextEditor]=\"false\"\n          [showHandToolButton]=\"false\"\n          [showFindButton]=\"false\"\n          [showPagingButtons]=\"false\"\n          [showZoomButtons]=\"false\"\n          [showPresentationModeButton]=\"false\"\n          [showOpenFileButton]=\"false\"\n          [showPrintButton]=\"false\"\n          [showDownloadButton]=\"false\"\n          [showSecondaryToolbarButton]=\"false\"\n          [showRotateButton]=\"false\"\n          [showSpreadButton]=\"false\"\n          [showPropertiesButton]=\"false\"\n          (pagesLoaded)=\"pdfLoaded()\"\n          style=\"width: 100%; height: 100%;\"\n        ></ngx-extended-pdf-viewer>\n      </div>\n    </div>\n  `,\n  styleUrls: [\"../../styles/_theme.scss\", \"./pdf-preview.component.scss\"],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PdfPreviewComponent extends BasePreviewComponent implements OnInit{\n  zoom: any = \"page-fit\";// 'auto'|'page-actual'|'page-fit'|'page-width'|\n  rotation: 0 | 90 | 180 | 270 = 0;\n  currentPage = 0;\n  @ViewChild(NgxExtendedPdfViewerComponent) pdfViewer!: NgxExtendedPdfViewerComponent;\n  @ViewChild('viewerContainer') viewerContainer?: ElementRef<HTMLDivElement>\n  ngOnInit(){\n    this.startLoading()\n  }\n  protected override async handleFileContent(content: FileReaderResponse) {\n  }\n\n  pdfLoaded() {\n    this.stopLoading()\n    this.autoFit()\n  }\n\n  zoomIn() {\n    this.zoom = Math.floor(Math.min(this.zoom * 1.2, 300));\n  }\n\n  zoomOut() {\n    this.zoom = Math.floor(Math.max(this.zoom / 1.2, 10));\n  }\n\n  autoFit() {\n    this.zoom = 'page-fit';\n  }\n\n  resetZoom() {\n    this.zoom = 100;\n  }\n\n  reset() {\n    this.resetZoom();\n    this.rotation = 0;\n  }\n\n  rotate(degrees: number) {\n    this.rotation = (this.rotation + degrees + 360) % 360 as 0 | 90 | 180 | 270;\n  }\n\n  onScaleChange($event:number) {\n    const zoomNum = Math.floor(Number($event) * 100);\n    if (Number.isNaN(zoomNum) || this.zoom == zoomNum) {\n      return\n    }\n    this.zoom = zoomNum\n    this.cdr.markForCheck()\n  }\n\n}\n","import {AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, ViewChild} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {BasePreviewComponent} from '../base-preview/base-preview.component';\nimport {PreviewIconComponent} from \"../../components/preview-icon/preview-icon.component\";\nimport {FileReaderResponse} from \"../../services\";\nimport {I18nPipe} from \"../../i18n/i18n.pipe\";\n\n@Component({\n  selector: 'ngx-image-preview',\n  standalone: true,\n  imports: [CommonModule, PreviewIconComponent, I18nPipe],\n  template: `\n    <div class=\"image-preview\"\n         (mousedown)=\"startDrag($event)\"\n         (mousemove)=\"onDrag($event)\"\n         (mouseup)=\"stopDrag()\"\n         (mouseleave)=\"stopDrag()\"\n         (wheel)=\"handleWheel($event)\">\n      <div class=\"image-wrapper\"\n           #imageWrapper\n           [style]=\"transformStyle\"\n           [class.is-moving]=\"isDragging\">\n        <img #previewImage\n             [src]=\"file.url\"\n             [style.display]=\"(isLoading|async) ? 'none' : 'block'\"\n             (load)=\"onImageLoad()\"\n             alt=\"preview\"/>\n      </div>\n\n      <div class=\"image-info\" *ngIf=\"!(isLoading|async)\">\n        <span class=\"filename\">{{ file.name }}</span>\n        <span class=\"dimensions\">{{ imageWidth }} × {{ imageHeight }}</span>\n      </div>\n\n      <div class=\"toolbar\" *ngIf=\"!(isLoading|async)\">\n        <div class=\"tool-group\">\n          <div class=\"control\" (click)=\"zoomOut()\" [class.disabled]=\"zoom <= minZoom\">\n            <preview-icon [themeMode]=\"themeMode\" name=\"zoom-out\" [title]=\"'preview.toolbar.zoomOut'|i18n\"></preview-icon>\n          </div>\n          <span class=\"zoom-text\">{{ (zoom * 100).toFixed(0) }}%</span>\n          <div class=\"control\" (click)=\"zoomIn()\" [class.disabled]=\"zoom >= maxZoom\">\n            <preview-icon [themeMode]=\"themeMode\" name=\"zoom-in\" [title]=\"'preview.toolbar.zoomIn'|i18n\"></preview-icon>\n          </div>\n        </div>\n\n        <div class=\"divider\"></div>\n\n        <div class=\"tool-group\">\n          <div class=\"control\" (click)=\"rotate(-90)\">\n            <preview-icon [themeMode]=\"themeMode\" name=\"rotate-90\" [title]=\"'preview.toolbar.rotate-90'|i18n\"></preview-icon>\n          </div>\n          <div class=\"control\" (click)=\"rotate(90)\">\n            <preview-icon [themeMode]=\"themeMode\" name=\"rotate90\" [title]=\"'preview.toolbar.rotate90'|i18n\"></preview-icon>\n          </div>\n        </div>\n\n        <div class=\"divider\"></div>\n\n        <div class=\"tool-group\">\n          <div class=\"control\" (click)=\"autoFit()\">\n            <preview-icon [themeMode]=\"themeMode\" name=\"auto-fit\" [title]=\"'preview.toolbar.autoFit'|i18n\"></preview-icon>\n          </div>\n          <div class=\"control\" (click)=\"originSize()\">\n            <preview-icon [themeMode]=\"themeMode\" name=\"origin-size\" [title]=\"'preview.toolbar.originSize'|i18n\"></preview-icon>\n          </div>\n          <div class=\"control\" (click)=\"resetView()\">\n            <preview-icon [themeMode]=\"themeMode\" name=\"reset\" [title]=\"'preview.toolbar.reset'|i18n\"></preview-icon>\n          </div>\n          <div class=\"control\" (click)=\"download()\">\n            <preview-icon [themeMode]=\"themeMode\" name=\"download\" [title]=\"'preview.toolbar.download'|i18n\"></preview-icon>\n          </div>\n        </div>\n      </div>\n    </div>\n  `,\n  styleUrls: [\n    \"../../styles/_theme.scss\",\n    './image-preview.component.scss'\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ImagePreviewComponent extends BasePreviewComponent implements AfterViewInit {\n  @ViewChild('imageWrapper') imageWrapper?: ElementRef<HTMLDivElement>;\n  @ViewChild('previewImage') previewImage?: ElementRef<HTMLImageElement>;\n\n  protected readonly minZoom = 0.1;\n  protected readonly maxZoom = 5;\n  private readonly zoomStep = 0.1;\n\n  zoom = 1;\n  rotation = 0;\n  translateX = 0;\n  translateY = 0;\n  isDragging = false;\n  imageWidth = 0;\n  imageHeight = 0;\n  transformStyle = '';\n\n  private dragStartX = 0;\n  private dragStartY = 0;\n\n  constructor(private el: ElementRef) {\n    super();\n  }\n\n  ngAfterViewInit() {\n    this.updateTransformStyle();\n  }\n\n  protected override async handleFileContent(content: FileReaderResponse) {\n  }\n\n  private updateTransformStyle() {\n    const transform = `translate(-50%, -50%)\n                      translate(${this.translateX}px, ${this.translateY}px)\n                      scale(${this.zoom})\n                      rotate(${this.rotation}deg)`;\n\n    const transition = this.isDragging ? 'none' : 'transform 0.3s ease';\n    this.transformStyle = `transform: ${transform}; transition: ${transition};`;\n    this.cdr.markForCheck();\n  }\n\n  handleWheel(event: WheelEvent) {\n    event.preventDefault();\n    if (!this.imageWrapper?.nativeElement) return;\n\n    const delta = event.deltaY < 0 ? 1 : -1;\n    const zoomFactor = 1 + (delta * this.zoomStep);\n    const newZoom = Math.max(this.minZoom, Math.min(this.maxZoom, this.zoom * zoomFactor));\n\n    if (newZoom !== this.zoom) {\n      const scale = newZoom / this.zoom;\n      this.translateX = this.translateX * scale;\n      this.translateY = this.translateY * scale;\n      this.zoom = newZoom;\n      this.updateTransformStyle();\n    }\n  }\n\n  startDrag(event: MouseEvent) {\n    if (event.button !== 0) return;\n    this.isDragging = true;\n    this.dragStartX = event.clientX - this.translateX;\n    this.dragStartY = event.clientY - this.translateY;\n    this.updateTransformStyle();\n  }\n\n  onDrag(event: MouseEvent) {\n    if (!this.isDragging) return;\n    event.preventDefault();\n\n    this.translateX = event.clientX - this.dragStartX;\n    this.translateY = event.clientY - this.dragStartY;\n    this.updateTransformStyle();\n  }\n\n  stopDrag() {\n    this.isDragging = false;\n    this.updateTransformStyle();\n  }\n\n  zoomIn() {\n    const newZoom = Math.min(this.maxZoom, this.zoom * (1 + this.zoomStep));\n    if (newZoom !== this.zoom) {\n      const scale = newZoom / this.zoom;\n      this.translateX = this.translateX * scale;\n      this.translateY = this.translateY * scale;\n      this.zoom = newZoom;\n      this.updateTransformStyle();\n    }\n  }\n\n  zoomOut() {\n    const newZoom = Math.max(this.minZoom, this.zoom / (1 + this.zoomStep));\n    if (newZoom !== this.zoom) {\n      const scale = newZoom / this.zoom;\n      this.translateX = this.translateX * scale;\n      this.translateY = this.translateY * scale;\n      this.zoom = newZoom;\n      this.updateTransformStyle();\n    }\n  }\n\n  rotate(angle: number) {\n    this.rotation += angle;\n    this.updateTransformStyle();\n  }\n\n  resetView() {\n    this.rotation = 0;\n    this.centerImage();\n    this.autoFit()\n  }\n\n  onImageLoad() {\n    if (this.previewImage?.nativeElement) {\n      const image = this.previewImage.nativeElement;\n      this.imageWidth = image.naturalWidth;\n      this.imageHeight = image.naturalHeight;\n      this.autoFit()\n    }\n  }\n\n  autoFit() {\n    if (!this.previewImage?.nativeElement) return;\n    const image = this.previewImage.nativeElement;\n    const container = this.el.nativeElement\n    const imageWidth = image.naturalWidth;\n    const imageHeight = image.naturalHeight;\n    const containerWidth = container.clientWidth\n    const containerHeight = container.clientHeight\n    if (!imageWidth || !imageHeight || !containerWidth || !containerHeight) return;\n    // 计算基于容器的缩放比例\n    const scaleX = containerWidth / imageWidth;\n    const scaleY = containerHeight / imageHeight;\n    // 取较小的缩放值，保证完整展示（等效 `object-fit: contain`）\n    const zoom = Math.min(scaleX, scaleY);\n    this.zoom = zoom > 0 ? zoom : 1;\n    setTimeout(() => this.updateTransformStyle());\n  }\n\n  originSize() {\n    this.zoom = 1;\n    setTimeout(() => this.updateTransformStyle());\n  }\n\n  private centerImage() {\n    if (!this.imageWrapper?.nativeElement || !this.previewImage?.nativeElement) return;\n\n    const wrapper = this.imageWrapper.nativeElement;\n    const image = this.previewImage.nativeElement;\n\n    const wrapperWidth = wrapper.clientWidth;\n    const wrapperHeight = wrapper.clientHeight;\n    const imageWidth = image.naturalWidth;\n    const imageHeight = image.naturalHeight;\n\n    if (!wrapperWidth || !wrapperHeight || !imageWidth || !imageHeight) return;\n\n    const wrapperRatio = wrapperWidth / wrapperHeight;\n    const imageRatio = imageWidth / imageHeight;\n\n    // 计算缩放比例，确保图片完整展示\n    this.zoom = imageRatio > wrapperRatio\n      ? wrapperWidth / imageWidth  // 以宽度为基准缩放\n      : wrapperHeight / imageHeight; // 以高度为基准缩放\n\n    // 避免 zoom = 0\n    if (!this.zoom || this.zoom <= 0) {\n      this.zoom = 1;\n    }\n\n    // 居中图片\n    this.translateX = 0;\n    this.translateY = 0;\n\n    // 确保样式更新\n    setTimeout(() => this.updateTransformStyle());\n  }\n\n  download() {\n    if (!this.file?.url) return;\n\n    const link = document.createElement('a');\n    link.href = this.file.url;\n    link.download = this.file.name || 'image';\n    link.target = '_blank';\n    link.rel = 'noopener noreferrer';\n\n    if (this.isExternalUrl(this.file.url)) {\n      const image = this.previewImage?.nativeElement;\n      if (!image) return;\n\n      const canvas = document.createElement('canvas');\n      canvas.width = image.naturalWidth;\n      canvas.height = image.naturalHeight;\n\n      const ctx = canvas.getContext('2d');\n      if (!ctx) return;\n\n      ctx.drawImage(image, 0, 0);\n\n      try {\n        canvas.toBlob((blob) => {\n          if (!blob) return;\n          const url = URL.createObjectURL(blob);\n          link.href = url;\n          link.click();\n          URL.revokeObjectURL(url);\n        }, 'image/png');\n      } catch (error) {\n        console.error('Failed to download image:', error);\n        window.open(this.file.url, '_blank');\n      }\n    } else {\n      link.click();\n    }\n  }\n\n  private isExternalUrl(url: string): boolean {\n    try {\n      const currentOrigin = window.location.origin;\n      const urlOrigin = new URL(url, window.location.href).origin;\n      return currentOrigin !== urlOrigin;\n    } catch {\n      return true;\n    }\n  }\n}\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  OnDestroy,\n  OnInit,\n  ViewChild\n} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {BasePreviewComponent} from '../base-preview/base-preview.component';\nimport {PreviewIconComponent} from '../../components/preview-icon/preview-icon.component';\nimport Hls from 'hls.js';\nimport {FileReaderResponse} from \"../../services\";\nimport {I18nPipe} from \"../../i18n\";\n\n@Component({\n  selector: 'ngx-video-preview',\n  standalone: true,\n  imports: [CommonModule, PreviewIconComponent, I18nPipe],\n  template: `\n    <div class=\"video-container\" #videoContainer [class.pip-mode]=\"isPiPMode\">\n      <video #videoPlayer\n             (loadeddata)=\"onVideoLoad()\"\n             (timeupdate)=\"onTimeUpdate()\"\n             (ended)=\"onVideoEnded()\"\n             (pause)=\"onVideoPause()\"\n             (click)=\"togglePlay()\">\n      </video>\n\n      <div class=\"controls\" [class.visible]=\"isControlsVisible\" (mouseover)=\"showControls()\"\n           (mouseleave)=\"hideControls()\">\n        <!-- 进度条 -->\n        <div class=\"progress-bar\"\n             (mousedown)=\"startDragging($event)\">\n          <div class=\"progress\" [style.width.%]=\"progress\"></div>\n        </div>\n\n        <div class=\"bottom-controls\">\n          <!-- 左侧控制按钮 -->\n          <div class=\"left-controls\">\n            <button (click)=\"togglePlay()\">\n              <preview-icon [name]=\"isPlaying ? 'pause' : 'play'\" [title]=\"(isPlaying ? 'preview.toolbar.pause' : 'preview.toolbar.play')|i18n\"></preview-icon>\n            </button>\n            <button (click)=\"back15s()\">\n              <preview-icon name=\"back15s\" [title]=\"'preview.toolbar.back15s'|i18n\"></preview-icon>\n            </button>\n            <button (click)=\"forward15s()\">\n              <preview-icon name=\"forward15s\" [title]=\"'preview.toolbar.forward15s'|i18n\"></preview-icon>\n            </button>\n            <span class=\"time\">\n              {{ formatTime(currentTime) }} / {{ formatTime(duration) }}\n            </span>\n          </div>\n\n          <!-- 右侧控制按钮 -->\n          <div class=\"right-controls\">\n            <!-- 倍速控制 -->\n            <div class=\"speed-control\"\n                 (mouseenter)=\"showSpeedControl = true\"\n                 (mouseleave)=\"showSpeedControl = false\">\n              <button>\n                {{ playbackSpeed }}x\n              </button>\n              <div class=\"speed-options\" *ngIf=\"showSpeedControl\">\n                <button *ngFor=\"let speed of playbackSpeeds\"\n                        (click)=\"setPlaybackSpeed(speed)\"\n                        [class.active]=\"playbackSpeed === speed\">\n                  {{ speed }}x\n                </button>\n              </div>\n            </div>\n\n            <!-- 亮度控制 -->\n            <div class=\"control-group\"\n                 (mouseenter)=\"showBrightnessControl = true\"\n                 (mouseleave)=\"showBrightnessControl = false\">\n              <button (click)=\"cycleBrightness()\">\n                <preview-icon [name]=\"'lightness'\"></preview-icon>\n              </button>\n              <div class=\"slider-container\" *ngIf=\"showBrightnessControl\">\n                <input type=\"range\"\n                       min=\"0\"\n                       max=\"200\"\n                       [value]=\"brightness\"\n                       (input)=\"adjustBrightness($event)\">\n              </div>\n            </div>\n\n            <!-- 音量控制 -->\n            <div class=\"control-group\"\n                 (mouseenter)=\"showVolumeControl = true\"\n                 (mouseleave)=\"showVolumeControl = false\">\n              <button (click)=\"cycleVolume()\">\n                <preview-icon [name]=\"getVolumeIcon()\"></preview-icon>\n              </button>\n              <div class=\"slider-container\" *ngIf=\"showVolumeControl\">\n                <input type=\"range\"\n                       min=\"0\"\n                       max=\"100\"\n                       [value]=\"volume * 100\"\n                       (input)=\"adjustVolume($event)\">\n              </div>\n            </div>\n\n            <button (click)=\"togglePip()\">\n              <preview-icon name=\"pip\" [title]=\"'preview.toolbar.pip'|i18n\"></preview-icon>\n            </button>\n            <button (click)=\"toggleFullscreen()\">\n              <preview-icon name=\"fullscreen\" [title]=\"'preview.toolbar.fullscreen'|i18n\"></preview-icon>\n            </button>\n          </div>\n        </div>\n      </div>\n    </div>\n  `,\n  styleUrls: [\"../../styles/_theme.scss\", \"video-preview.component.scss\"],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class VideoPreviewComponent extends BasePreviewComponent implements OnInit, AfterViewInit, OnDestroy {\n  @ViewChild('videoPlayer') videoPlayer!: ElementRef<HTMLVideoElement>;\n  @ViewChild('videoContainer') videoContainer!: ElementRef<HTMLDivElement>;\n  private hls?: Hls;\n  isPlaying = false;\n  currentTime = 0;\n  duration = 0;\n  progress = 0;\n  volume = 1;\n  previousVolume = 1;\n  brightness = 100;\n  isPiPMode = false;\n  isControlsVisible = true;\n  showVolumeControl = false;\n  showBrightnessControl = false;\n  controlsTimeout: any;\n  isMuted = false;\n  playbackSpeed = 1;\n  playbackSpeeds = [0.75, 1, 1.5, 2.0, 3.0, 5.0];\n  showSpeedControl = false;\n  isDragging = false;\n\n  ngOnInit() {\n    this.startLoading();\n    this.cdr.markForCheck();\n  }\n\n  ngAfterViewInit() {\n    this.setupVideo();\n  }\n\n  onVideoLoad() {\n    this.stopLoading()\n    this.duration = this.videoPlayer.nativeElement.duration;\n    this.cdr.markForCheck();\n  }\n\n  private setupVideo() {\n    const video = this.videoPlayer.nativeElement;\n    const url = this.file.url;\n\n    if (this.isHLSVideo(url)) {\n      this.setupHLS(video, url);\n    } else {\n      // 对于普通视频，直接设置 src\n      video.src = url;\n    }\n  }\n\n  // 播放控制\n  togglePlay() {\n    const video = this.videoPlayer.nativeElement;\n    if (video.paused) {\n      video.play().then(() => {\n        this.isPlaying = true;\n        this.cdr.markForCheck();\n      }).catch((error) => {\n        console.error('播放失败:', error);\n        this.isPlaying = false;\n        this.cdr.markForCheck();\n      });\n    } else {\n      video.pause();\n      this.isPlaying = false;\n      this.cdr.markForCheck();\n    }\n  }\n\n  private isHLSVideo(url: string): boolean {\n    return url.toLowerCase().includes('.m3u8') ||\n      url.includes('application/x-mpegURL') ||\n      url.includes('application/vnd.apple.mpegurl');\n  }\n\n  // 进度更新\n  onTimeUpdate() {\n    const video = this.videoPlayer.nativeElement;\n    this.currentTime = video.currentTime;\n    this.progress = (video.currentTime / video.duration) * 100;\n  }\n\n  adjustVolume(event: Event) {\n    const value = +(event.target as HTMLInputElement).value;\n    this.volume = value / 100;\n    this.isMuted = this.volume === 0;\n    if (this.volume > 0) {\n      this.previousVolume = this.volume;\n    }\n    this.videoPlayer.nativeElement.volume = this.volume;\n    this.cdr.markForCheck();\n  }\n\n  adjustBrightness(event: Event) {\n    const value = +(event.target as HTMLInputElement).value;\n    this.brightness = value;\n    this.videoPlayer.nativeElement.style.filter = `brightness(${this.brightness}%)`;\n    this.cdr.markForCheck();\n  }\n\n  // 画中画模式\n  async togglePip() {\n    if (!document.pictureInPictureElement) {\n      try {\n        await this.videoPlayer.nativeElement.requestPictureInPicture();\n        this.isPiPMode = true;\n      } catch (error) {\n        console.error('画中画模式不支持:', error);\n      }\n    } else {\n      await document.exitPictureInPicture();\n      this.isPiPMode = false;\n    }\n  }\n\n  private setupHLS(video: HTMLVideoElement, url: string) {\n    if (Hls.isSupported()) {\n      this.hls = new Hls({\n        debug: false,\n        enableWorker: true,\n        // 添加一些 HLS 配置以确保更好的兼容性\n        capLevelToPlayerSize: true,\n        startLevel: -1,\n        abrMaxWithRealBitrate: true\n      });\n\n      this.hls.loadSource(url);\n      this.hls.attachMedia(video);\n\n      this.hls.on(Hls.Events.MANIFEST_PARSED, () => {\n        // 清单解析完成后，尝试播放\n        video.play().catch(() => {\n          console.log('Autoplay prevented');\n        });\n      });\n\n      this.hls.on(Hls.Events.ERROR, (event, data) => {\n        if (data.fatal) {\n          console.error('HLS error:', data);\n        }\n      });\n    } else if (video.canPlayType('application/vnd.apple.mpegurl')) {\n      // Safari 原生支持\n      video.src = url;\n    }\n  }\n\n  protected override async handleFileContent(content: FileReaderResponse) {}\n\n  toggleFullscreen() {\n    const video = this.videoContainer.nativeElement;\n    if (!document.fullscreenElement) {\n      video.requestFullscreen();\n    } else {\n      document.exitFullscreen();\n    }\n  }\n\n  // 控制栏显示/隐藏\n  showControls() {\n    this.isControlsVisible = true;\n    clearTimeout(this.controlsTimeout);\n  }\n\n  hideControls() {\n    this.controlsTimeout = setTimeout(() => {\n      if (this.isPlaying) {\n        this.isControlsVisible = false;\n        this.cdr.markForCheck();\n      }\n    }, 2000);\n  }\n\n  // 后退15秒\n  back15s() {\n    this.videoPlayer.nativeElement.currentTime -= 15;\n  }\n\n  // 前进15秒\n  forward15s() {\n    this.videoPlayer.nativeElement.currentTime += 15;\n  }\n\n  ngOnDestroy() {\n    if (this.hls) {\n      this.hls.destroy();\n    }\n  }\n\n  // 跳转播放\n  seek(event: MouseEvent) {\n    const progressBar = event.currentTarget as HTMLElement;\n    const rect = progressBar.getBoundingClientRect();\n    const pos = (event.clientX - rect.left) / rect.width;\n    if (pos >= 0 && pos <= 1) { // 确保在有效范围内\n      const video = this.videoPlayer.nativeElement;\n      video.currentTime = pos * video.duration;\n      this.progress = pos * 100;\n      this.cdr.markForCheck();\n    }\n  }\n\n  // 进度条拖动\n  startDragging(event: MouseEvent) {\n    this.isDragging = true;\n    this.seek(event);\n    // 添加全局鼠标事件监听\n    document.addEventListener('mousemove', this.onGlobalDrag);\n    document.addEventListener('mouseup', this.stopDragging);\n  }\n\n  private onGlobalDrag = (event: MouseEvent) => {\n    if (this.isDragging) {\n      const progressBar = this.videoPlayer.nativeElement.parentElement?.querySelector('.progress-bar');\n      if (progressBar) {\n        const rect = progressBar.getBoundingClientRect();\n        const pos = Math.max(0, Math.min(1, (event.clientX - rect.left) / rect.width));\n        const video = this.videoPlayer.nativeElement;\n        video.currentTime = pos * video.duration;\n        this.progress = pos * 100;\n        this.cdr.markForCheck();\n      }\n    }\n  }\n\n  stopDragging = () => {\n    if (this.isDragging) {\n      this.isDragging = false;\n      // 移除全局事件监听\n      document.removeEventListener('mousemove', this.onGlobalDrag);\n      document.removeEventListener('mouseup', this.stopDragging);\n    }\n  }\n\n  // 音量控制\n  cycleVolume() {\n    if (this.volume > 0) {\n      this.previousVolume = this.volume;\n      this.volume = 0;\n      this.isMuted = true;\n    } else {\n      this.volume = this.previousVolume;\n      this.isMuted = false;\n    }\n    this.videoPlayer.nativeElement.volume = this.volume;\n    this.cdr.markForCheck();\n  }\n\n  getVolumeIcon(): string {\n    if (this.volume === 0) return 'mute';\n    return 'volume';\n  }\n\n  // 亮度控制\n  cycleBrightness() {\n    const levels = [0, 100, 200];\n    const currentIndex = levels.indexOf(this.brightness);\n    const nextIndex = (currentIndex + 1) % levels.length;\n    this.brightness = levels[nextIndex];\n    this.videoPlayer.nativeElement.style.filter = `brightness(${this.brightness}%)`;\n    this.cdr.markForCheck();\n  }\n\n  // 倍速控制\n  toggleSpeedControl() {\n    this.showSpeedControl = !this.showSpeedControl;\n    this.showVolumeControl = false;\n    this.showBrightnessControl = false;\n    this.cdr.markForCheck();\n  }\n\n  setPlaybackSpeed(speed: number) {\n    this.playbackSpeed = speed;\n    this.videoPlayer.nativeElement.playbackRate = speed;\n    this.showSpeedControl = false;\n    this.cdr.markForCheck();\n  }\n\n  formatTime(seconds: number): string {\n    if (!seconds) return '00:00:00';\n\n    const hours = Math.floor(seconds / 3600);\n    const minutes = Math.floor((seconds % 3600) / 60);\n    const secs = Math.floor(seconds % 60);\n\n    return [hours, minutes, secs]\n      .map(val => val.toString().padStart(2, '0'))\n      .join(':');\n  }\n\n  onVideoEnded() {\n    this.isPlaying = false;\n    this.cdr.markForCheck();\n  }\n\n  onVideoPause() {\n    this.isPlaying = false;\n    this.cdr.markForCheck();\n  }\n}\n","import {ChangeDetectionStrategy, Component, ElementRef, SimpleChanges, ViewChild} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {BasePreviewComponent} from '../base-preview/base-preview.component';\nimport {PreviewIconComponent} from '../../components/preview-icon/preview-icon.component';\nimport {init} from \"pptx-preview\";\nimport {FileReaderResponse} from \"../../services\";\n\n@Component({\n  selector: 'ngx-ppt-preview',\n  standalone: true,\n  imports: [CommonModule, PreviewIconComponent],\n  template: `\n    <div class=\"ppt-container\" #container>\n      <div class=\"toolbar\">\n        <div class=\"left-controls\">\n          <button class=\"tool-btn\" (click)=\"zoomOut()\">\n            <preview-icon name=\"zoom-out\" [themeMode]=\"themeMode\"></preview-icon>\n          </button>\n          <span class=\"zoom-text\" (click)=\"resetZoom()\" title=\"点击重置缩放\">\n            {{ (scale * 100).toFixed(0) }}%\n          </span>\n          <button class=\"tool-btn\" (click)=\"zoomIn()\">\n            <preview-icon [themeMode]=\"themeMode\" name=\"zoom-in\"></preview-icon>\n          </button>\n        </div>\n        <div class=\"right-controls\">\n          <button class=\"tool-btn\" (click)=\"toggleFullscreen()\">\n            <preview-icon [themeMode]=\"themeMode\" name=\"fullscreen\"></preview-icon>\n          </button>\n        </div>\n      </div>\n\n      <div class=\"preview-container\"\n           #previewContainer\n           (wheel)=\"handleWheel($event)\"\n           (mousedown)=\"startDrag($event)\"\n           [class.dragging]=\"isDragging\">\n        <div class=\"content-wrapper\">\n          <div #content\n               class=\"preview-content\">\n          </div>\n        </div>\n      </div>\n    </div>\n  `,\n  styleUrls: [\"../../styles/_theme.scss\", \"ppt-preview.component.scss\"],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PptPreviewComponent extends BasePreviewComponent {\n  @ViewChild('content') content!: ElementRef<HTMLDivElement>;\n  @ViewChild('previewContainer') previewContainer!: ElementRef<HTMLDivElement>;\n  @ViewChild('container') container!: ElementRef<HTMLDivElement>;\n\n  private pptxPreviewer: any;\n  scale = 1;\n  private readonly SCALE_STEP = 0.1;\n  private readonly MAX_SCALE = 3;\n  private readonly MIN_SCALE = 0.1;\n  private readonly DEFAULT_SCALE = 1;\n\n  isDragging = false;\n  private startScrollLeft = 0;\n  private startScrollTop = 0;\n  private lastMouseX = 0;\n  private lastMouseY = 0;\n  private mouseMoveListener?: (e: MouseEvent) => void;\n  private mouseUpListener?: (e: MouseEvent) => void;\n\n  constructor(private elementRef: ElementRef) {\n    super();\n  }\n\n  ngOnChanges(simpleChanges: SimpleChanges) {\n    if (simpleChanges['file'] && this.file) {\n      this.loadFile().then(() => {});\n    }\n  }\n\n  ngAfterViewInit() {\n    this.setupDragListeners();\n    this.disableNativeDragAndSelect();\n    this.setupResizeObserver();\n  }\n\n  ngOnDestroy() {\n    this.removeDragListeners();\n  }\n\n\n  protected override async handleFileContent(content: FileReaderResponse) {\n    try {\n      const {data} = content;\n      const container = this.previewContainer.nativeElement;\n      const {width} = container.getBoundingClientRect();\n      this.pptxPreviewer = init(this.content.nativeElement, {\n        width: Math.min(1200, width),\n        renderer: 'canvas'\n      });\n      await this.pptxPreviewer.preview(data);\n    } catch (e) {\n      console.log(\"error\", e)\n    }\n  }\n\n  private setupResizeObserver() {\n    const resizeObserver = new ResizeObserver(() => {\n      if (this.pptxPreviewer) {\n        this.updatePreviewSize();\n      }\n    });\n    resizeObserver.observe(this.container.nativeElement);\n  }\n\n  private updatePreviewSize() {\n    const container = this.previewContainer.nativeElement;\n    const {width} = container.getBoundingClientRect();\n    const scaledWidth = Math.min(1200, width) * this.scale;\n\n    if (this.pptxPreviewer) {\n      this.pptxPreviewer?.resize?.(scaledWidth);\n    }\n  }\n\n  private setupDragListeners() {\n    this.mouseMoveListener = (e: MouseEvent) => this.onDrag(e);\n    this.mouseUpListener = () => this.stopDrag();\n\n    document.addEventListener('mousemove', this.mouseMoveListener);\n    document.addEventListener('mouseup', this.mouseUpListener);\n  }\n\n  private removeDragListeners() {\n    if (this.mouseMoveListener) {\n      document.removeEventListener('mousemove', this.mouseMoveListener);\n    }\n    if (this.mouseUpListener) {\n      document.removeEventListener('mouseup', this.mouseUpListener);\n    }\n  }\n\n  startDrag(e: MouseEvent) {\n    if (e.target instanceof HTMLButtonElement ||\n      e.target instanceof HTMLInputElement ||\n      (e.target as HTMLElement).closest('.toolbar')) {\n      return;\n    }\n\n    const container = this.previewContainer.nativeElement;\n    const rect = container.getBoundingClientRect();\n\n    const isClickOnScrollbarX = e.clientY > (rect.bottom - 12);\n    const isClickOnScrollbarY = e.clientX > (rect.right - 12);\n    if (isClickOnScrollbarX || isClickOnScrollbarY) {\n      return;\n    }\n\n    this.isDragging = true;\n    this.lastMouseX = e.clientX;\n    this.lastMouseY = e.clientY;\n    this.startScrollLeft = container.scrollLeft;\n    this.startScrollTop = container.scrollTop;\n\n    document.body.style.userSelect = 'none';\n    document.body.style.cursor = 'grabbing';\n  }\n\n  private onDrag(e: MouseEvent) {\n    if (!this.isDragging) return;\n\n    e.preventDefault();\n    const container = this.previewContainer.nativeElement;\n\n    const deltaX = e.clientX - this.lastMouseX;\n    const deltaY = e.clientY - this.lastMouseY;\n\n    this.lastMouseX = e.clientX;\n    this.lastMouseY = e.clientY;\n\n    requestAnimationFrame(() => {\n      container.scrollLeft -= deltaX;\n      container.scrollTop -= deltaY;\n    });\n  }\n\n  private stopDrag() {\n    if (!this.isDragging) return;\n\n    this.isDragging = false;\n    document.body.style.removeProperty('user-select');\n    document.body.style.removeProperty('cursor');\n    window.getSelection()?.removeAllRanges();\n  }\n\n  handleWheel(event: WheelEvent) {\n    if (event.ctrlKey || event.metaKey) {\n      event.preventDefault();\n      const delta = event.deltaY || event.detail || 0;\n\n      const container = this.previewContainer.nativeElement;\n      const rect = container.getBoundingClientRect();\n\n      // 获取鼠标相对容器的位置\n      const mouseX = event.clientX - rect.left;\n      const mouseY = event.clientY - rect.top;\n\n      const oldScale = this.scale;\n\n      // 调整缩放比例\n      if (delta < 0) {\n        this.zoomIn();\n      } else {\n        this.zoomOut();\n      }\n\n      // 如果缩放比例变化，则调整滚动条位置\n      if (oldScale !== this.scale) {\n        const scaleChange = this.scale / oldScale;\n\n        // 鼠标位置在内容中的坐标\n        const contentX = (container.scrollLeft + mouseX) / oldScale;\n        const contentY = (container.scrollTop + mouseY) / oldScale;\n\n        // 缩放后鼠标位置对应的新坐标\n        const newContentX = contentX * this.scale;\n        const newContentY = contentY * this.scale;\n\n        // 调整滚动条位置\n        container.scrollLeft = newContentX - mouseX;\n        container.scrollTop = newContentY - mouseY;\n      }\n    }\n  }\n\n\n  zoomIn() {\n    if (this.scale < this.MAX_SCALE) {\n      const oldScale = this.scale;\n      this.scale = Math.min(this.MAX_SCALE, this.scale + this.SCALE_STEP);\n      this.applyScale(oldScale);\n    }\n  }\n\n  zoomOut() {\n    if (this.scale > this.MIN_SCALE) {\n      const oldScale = this.scale;\n      this.scale = Math.max(this.MIN_SCALE, this.scale - this.SCALE_STEP);\n      this.applyScale(oldScale);\n    }\n  }\n\n  resetZoom() {\n    const oldScale = this.scale;\n    this.scale = this.DEFAULT_SCALE;\n    this.applyScale(oldScale);\n  }\n\n  private applyScale(oldScale: number) {\n    const container = this.previewContainer.nativeElement;\n    const contentWrapper = this.content.nativeElement;\n\n    const rect = container.getBoundingClientRect();\n\n    const scaleChange = this.scale / oldScale;\n\n    // 计算内容中心点\n    const centerX = (container.scrollLeft + rect.width / 2) / oldScale;\n    const centerY = (container.scrollTop + rect.height / 2) / oldScale;\n\n    // 更新内容缩放样式\n    contentWrapper.style.transform = `scale(${this.scale})`;\n    contentWrapper.style.transformOrigin = 'top left';\n\n    // 调整滚动条位置以保持视图中心\n    container.scrollLeft = centerX * this.scale - rect.width / 2;\n    container.scrollTop = centerY * this.scale - rect.height / 2;\n\n    this.cdr.markForCheck();\n  }\n\n  toggleFullscreen() {\n    if (!document.fullscreenElement) {\n      document.documentElement.requestFullscreen();\n    } else {\n      document.exitFullscreen();\n    }\n  }\n\n  private disableNativeDragAndSelect() {\n    if (this.content) {\n      const element = this.content.nativeElement;\n      element.addEventListener('dragstart', (e: Event) => e.preventDefault());\n      element.addEventListener('selectstart', (e: Event) => {\n        if (this.isDragging) {\n          e.preventDefault();\n        }\n      });\n    }\n  }\n}\n","import {PreviewFile, PreviewFileInput, PreviewType} from '../types/preview.types';\n\nexport class PreviewUtils {\n  static formatFileSize(bytes?: number): string {\n    if (bytes === undefined || bytes === null) return '未知大小';\n    if (bytes === 0) return '0 B';\n\n    const units = ['B', 'KB', 'MB', 'GB', 'TB'];\n    const k = 1024;\n    const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n    return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + units[i];\n  }\n\n  static getFileType(file: File): PreviewType {\n    // 首先检查 MIME 类型\n    const mimeType = file.type.toLowerCase();\n\n    if (mimeType.startsWith('image/')) return 'image';\n    if (mimeType.startsWith('video/') || mimeType.includes('application/x-mpegURL') || mimeType.includes('application/vnd.apple.mpegurl')) return 'video';\n    if (mimeType.startsWith('audio/')) return 'audio';\n\n    // 检查文件扩展名\n    const extension = file.name.split('.').pop()?.toLowerCase();\n    return this.getFileTypeFromExtension(extension);\n  }\n\n  static getFileTypeFromUrl(url: string): PreviewType {\n    try {\n      const extension = url.split('.').pop()?.toLowerCase();\n      return PreviewUtils.isBase64Url(url) ? \"image\" : this.getFileTypeFromExtension(extension);\n    } catch {\n      return 'unknown';\n    }\n  }\n\n  static isBase64Url(url: string): boolean {\n    return url.startsWith('data:');\n  }\n\n  private static getFileTypeFromExtension(extension?: string): PreviewType {\n    if (!extension) return 'unknown';\n\n    switch (extension) {\n      case 'jpg':\n      case 'jpeg':\n      case 'png':\n      case 'gif':\n      case 'bmp':\n      case 'webp':\n        return 'image';\n      case 'mp4':\n      case 'webm':\n      case 'ogg':\n      case 'mov':\n      case 'm3u8':\n      case 'm3u':\n      case 'ts':\n      case 'avi':\n      case 'wmv':\n      case 'flv':\n      case 'mkv':\n      case '3gp':\n        return 'video';\n      case 'mp3':\n      case 'wav':\n        return 'audio';\n      case 'pdf':\n        return 'pdf';\n      case 'ppt':\n      case 'pptx':\n        return 'ppt';\n      case 'doc':\n      case 'docx':\n        return 'word';\n      case 'xls':\n      case 'xlsx':\n        return 'excel';\n      case 'txt':\n      case 'json':\n        return 'txt';\n      case 'md':\n        return 'markdown';\n      case 'zip':\n      case 'rar':\n      case '7z':\n        return 'zip';\n\n      default:\n        return 'unknown';\n    }\n  }\n\n  /**\n   * 转换为 PreviewFile 类型\n   */\n  static normalizeFiles(input: PreviewFileInput): PreviewFile[] {\n    // 转换为数组\n    const inputArray = Array.isArray(input) ? input : [input];\n    return inputArray.map(item => PreviewUtils.normalizeFile(item));\n  }\n\n  static normalizeFile(input: PreviewFileInput): PreviewFile {\n    // 如果已经是 PreviewFile 类型，直接返回\n    if (PreviewUtils.isPreviewFile(input)) {\n      return input;\n    }\n\n    // 如果是 File 对象\n    if (input instanceof File) {\n      return {\n        url: URL.createObjectURL(input),\n        name: input.name,\n        type: PreviewUtils.getFileType(input),\n        size: input.size,\n        lastModified: input.lastModified\n      };\n    }\n\n    // 如果是字符串 URL\n    if (typeof input === 'string') {\n      return {\n        url: input,\n        name: PreviewUtils.getFileNameFromUrl(input),\n        type: PreviewUtils.getFileTypeFromUrl(input)\n      };\n    }\n    // 自推测类型\n    if (typeof input === 'object' && 'url' in input) {\n      return {\n        url: input.url as string,\n        name: input.name as string,\n        type: PreviewUtils.getFileTypeFromUrl(input.url as string)\n      }\n    }\n\n\n    throw new Error('Invalid file input');\n  }\n\n  static isPreviewFile(input: any): input is PreviewFile {\n    return typeof input === 'object' &&\n      'url' in input &&\n      'name' in input &&\n      'type' in input;\n  }\n\n  static getFileNameFromUrl(url: string): string {\n    try {\n      const urlObj = new URL(url);\n      const pathname = urlObj.pathname;\n      const fileName = pathname.split('/').pop();\n      return fileName || 'unknown';\n    } catch {\n      return 'unknown';\n    }\n  }\n\n}\n","import {\n  Directive,\n  ElementRef,\n  EnvironmentInjector,\n  EventEmitter,\n  Injector,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output\n} from '@angular/core';\nimport { FileReaderService, PreviewService, ThemeService } from '../services';\nimport { AutoThemeConfig, PreviewEvent, PreviewFileInput, ThemeMode } from '../types';\nimport { PreviewUtils } from '../utils';\nimport { fromEvent, merge, Subject, timer } from 'rxjs';\nimport { filter, map, switchMap, takeUntil, tap } from 'rxjs/operators';\n\n@Directive({\n  selector: '[ngxFilePreview]',\n  standalone: true,\n  providers: [PreviewService, ThemeService, FileReaderService]\n})\nexport class PreviewDirective implements OnInit, OnDestroy {\n  @Input('ngxFilePreview') fileInput: PreviewFileInput;\n  @Input() previewIndex = 0;\n  @Input() trigger = 'click'; // 默认触发方式\n  private _themeMode: ThemeMode = 'auto';\n  @Input()\n  get themeMode(): ThemeMode {\n    return this._themeMode;\n  }\n\n  set themeMode(value: ThemeMode) {\n    this._themeMode = value;\n    this.themeService.setMode(this.themeMode);\n    if (this.themeMode === 'auto' && this.autoConfig) {\n      this.themeService.setAutoConfig(this.autoConfig);\n    }\n  }\n  @Input() autoConfig?: AutoThemeConfig;\n  private _lang:string = 'zh';\n  @Input()\n  get lang(): string {\n    return this._lang;\n  }\n\n  set lang(value: string) {\n    this._lang = value;\n    this.previewService.setLang(value);\n  }\n  @Output() previewEvent = new EventEmitter<PreviewEvent>();\n\n  t(key: string, ...args: (string | number)[]) {\n    return this.previewService?.getLangParser()?.t(key, ...args);\n  }\n\n  private destroy$ = new Subject<void>();\n  private element: HTMLElement;\n  private longPressTimer: any;\n  private isLongPressing = false;\n\n  constructor(\n    private previewService: PreviewService,\n    private themeService: ThemeService,\n    private injector: Injector,\n    private envInjector: EnvironmentInjector,\n    private elementRef: ElementRef\n  ) {\n    this.previewService.init(this.injector, this.envInjector);\n    this.element = this.elementRef.nativeElement;\n  }\n\n  ngOnInit() {\n    this.setupTriggers();\n  }\n\n  private setupTriggers() {\n    const triggers = this.trigger.split(',').map(t => t.trim());\n    const observables = triggers.map(trigger => {\n      const [eventName, param] = trigger.split(':');\n      \n      switch(eventName) {\n        case 'click':\n          return fromEvent(this.element, 'click');\n        case 'contextmenu':\n          return fromEvent(this.element, 'contextmenu').pipe(\n            tap(e => e.preventDefault())\n          );\n        case 'dblclick':\n          return fromEvent(this.element, 'dblclick');\n        case 'longpress':\n          const duration = parseInt(param) || 800;\n          return fromEvent<MouseEvent>(this.element, 'mousedown').pipe(\n            switchMap(() => timer(duration).pipe(\n              takeUntil(fromEvent(document, 'mouseup'))\n            ))\n          );\n        case 'hover':\n          const delay = parseInt(param) || 500;\n          return fromEvent(this.element, 'mouseenter').pipe(\n            switchMap(() => timer(delay).pipe(\n              takeUntil(fromEvent(this.element, 'mouseleave'))\n            ))\n          );\n        case 'keydown':\n          return fromEvent<KeyboardEvent>(this.element, 'keydown').pipe(\n            filter(e => !param || e.key === param)\n          );\n        default:\n          return fromEvent(this.element, 'click');\n      }\n    });\n\n    merge(...observables)\n      .pipe(takeUntil(this.destroy$))\n      .subscribe(() => this.preview());\n  }\n\n  private preview() {\n    if (!this.fileInput) return;\n    const files = PreviewUtils.normalizeFiles(this.fileInput);\n    if (files.length > 0) {\n      this.previewService.open({\n        files,\n        index: this.previewIndex,\n        themeMode: this.themeMode,\n        autoThemeConfig: this.autoConfig\n      });\n    } else {\n      this.previewEvent.emit({type: 'error', message: this.t('preview.error.noFiles')})\n    }\n  }\n\n  ngOnDestroy() {\n    this.destroy$.next();\n    this.destroy$.complete();\n    // 清理由 createObjectURL 创建的 URL\n    if (this.fileInput instanceof File) {\n      URL.revokeObjectURL(PreviewUtils.normalizeFile(this.fileInput).url);\n    } else if (Array.isArray(this.fileInput)) {\n      this.fileInput.forEach(item => {\n        if (item instanceof File) {\n          URL.revokeObjectURL(PreviewUtils.normalizeFile(item).url);\n        }\n      });\n    }\n  }\n}\n","import {ChangeDetectionStrategy, Component, OnChanges, OnDestroy, OnInit, SimpleChanges} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {PreviewIconComponent} from '../../components';\nimport {BasePreviewComponent} from \"../base-preview/base-preview.component\";\nimport {FileReaderResponse} from \"../../services\";\nimport {I18nPipe} from \"../../i18n/i18n.pipe\";\nimport {TooltipDirective} from \"../../directives\";\n\n@Component({\n  selector: 'ngx-text-preview',\n  standalone: true,\n  imports: [CommonModule, PreviewIconComponent, I18nPipe, TooltipDirective],\n  template: `\n    <div class=\"text-container\">\n      <div class=\"toolbar\">\n        <div class=\"left-controls\">\n          <button class=\"tool-btn\" (click)=\"zoomOut()\">\n            <preview-icon [themeMode]=\"themeMode\" name=\"zoom-out\" [tooltip]=\"'preview.toolbar.zoomOut'|i18n\"></preview-icon>\n          </button>\n          <span class=\"zoom-text\" (click)=\"resetZoom()\" [tooltip]=\"'preview.toolbar.resetZoom'|i18n\">\n            {{ (scale * 100).toFixed(0) }}%\n          </span>\n          <button class=\"tool-btn\" (click)=\"zoomIn()\">\n            <preview-icon [themeMode]=\"themeMode\" name=\"zoom-in\" [tooltip]=\"'preview.toolbar.zoomIn'|i18n\"></preview-icon>\n          </button>\n          <button class=\"tool-btn\" (click)=\"toggleWrap()\">\n            <preview-icon [themeMode]=\"themeMode\" [name]=\"isWrapped ? 'nowrap' : 'wrap'\" [tooltip]=\"(isWrapped ? 'preview.toolbar.nowrap' : 'preview.toolbar.wrap')|i18n\"></preview-icon>\n          </button>\n        </div>\n        <div class=\"right-controls\">\n          <button class=\"tool-btn\" (click)=\"toggleFullscreen()\">\n            <preview-icon [themeMode]=\"themeMode\" name=\"fullscreen\" [tooltip]=\"'preview.toolbar.fullscreen'|i18n\"></preview-icon>\n          </button>\n        </div>\n      </div>\n\n      <div class=\"content-container\"\n           [class.wrap]=\"isWrapped\"\n           (wheel)=\"handleWheel($event)\">\n        <div class=\"content-wrapper\" [style]=\"'--scale:'+scale\" [class.wrap]=\"isWrapped\">\n          <pre\n            [style.transform-origin]=\"'left top'\"\n            [class.wrap]=\"isWrapped\"\n          >{{ content }}</pre>\n        </div>\n      </div>\n    </div>\n  `,\n  styleUrls: ['../../styles/_theme.scss', './text-preview.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TextPreviewComponent extends BasePreviewComponent implements OnInit, OnDestroy, OnChanges {\n  content = '';\n  isWrapped = false;\n  scale = 1;\n\n  private readonly SCALE_STEP = 0.1;\n  private readonly MAX_SCALE = 3;\n  private readonly MIN_SCALE = 0.1;\n  private readonly DEFAULT_SCALE = 1;\n  private keydownListener?: (e: KeyboardEvent) => void;\n\n  ngOnInit() {\n    this.setupKeyboardListeners();\n  }\n\n  ngOnDestroy() {\n    this.removeKeyboardListeners();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['file']) {\n      this.loadFile('text')\n    }\n  }\n\n  protected override async handleFileContent(content: FileReaderResponse) {\n    if (content.error) {\n      this.content = '文件加载失败:' + content.error;\n    } else {\n      this.content = content.text || '文件内容为空';\n    }\n  }\n\n\n  private setupKeyboardListeners() {\n    this.keydownListener = (e: KeyboardEvent) => {\n      if ((e.ctrlKey || e.metaKey) && e.key === '0') {\n        e.preventDefault();\n        this.resetZoom();\n      }\n    };\n\n    document.addEventListener('keydown', this.keydownListener);\n  }\n\n  private removeKeyboardListeners() {\n    if (this.keydownListener) {\n      document.removeEventListener('keydown', this.keydownListener);\n    }\n  }\n\n  handleWheel(event: WheelEvent) {\n    if (event.ctrlKey || event.metaKey) {\n      event.preventDefault();\n      const delta = event.deltaY || event.detail || 0;\n\n      if (delta < 0) {\n        this.zoomIn();\n      } else {\n        this.zoomOut();\n      }\n    }\n  }\n\n  zoomIn() {\n    if (this.scale < this.MAX_SCALE) {\n      this.scale = Math.min(this.MAX_SCALE, this.scale + this.SCALE_STEP);\n      this.applyZoom();\n    }\n  }\n\n  zoomOut() {\n    if (this.scale > this.MIN_SCALE) {\n      this.scale = Math.max(this.MIN_SCALE, this.scale - this.SCALE_STEP);\n      this.applyZoom();\n    }\n  }\n\n  resetZoom() {\n    this.scale = this.DEFAULT_SCALE;\n    this.applyZoom();\n  }\n\n  private applyZoom() {\n    this.cdr.markForCheck();\n  }\n\n  toggleWrap() {\n    this.isWrapped = !this.isWrapped;\n    this.cdr.markForCheck();\n  }\n\n  toggleFullscreen() {\n    if (!document.fullscreenElement) {\n      document.documentElement.requestFullscreen();\n    } else {\n      document.exitFullscreen();\n    }\n  }\n}\n","import {AfterViewInit, Component, ElementRef, OnDestroy, OnInit, ViewChild} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {BasePreviewComponent} from '../base-preview/base-preview.component';\nimport {SafeUrl} from '@angular/platform-browser';\nimport {FileReaderResponse} from \"../../services\";\nimport {PreviewIconComponent} from '../../components';\nimport {I18nPipe} from \"../../i18n\";\n\n@Component({\n  selector: 'ngx-audio-preview',\n  standalone: true,\n  imports: [CommonModule, PreviewIconComponent, I18nPipe],\n  template: `\n    <div class=\"audio-container\">\n      <audio #audioPlayer\n             [src]=\"file.url\"\n             (loadeddata)=\"onAudioLoad()\"\n             (timeupdate)=\"onTimeUpdate()\">\n      </audio>\n\n      <div class=\"audio-player\">\n        <!-- 封面图 -->\n        <div class=\"cover\">\n          <ng-container *ngIf=\"coverUrl; else defaultCover\">\n            <img [src]=\"coverUrl\" alt=\"album cover\">\n          </ng-container>\n          <ng-template #defaultCover>\n            <preview-icon [themeMode]=\"themeMode\" name=\"music\" [size]=\"48\"></preview-icon>\n          </ng-template>\n        </div>\n\n        <!-- 控制区域 -->\n        <div class=\"controls\">\n          <!-- 文件信息 -->\n          <div class=\"info\">\n            <span class=\"filename\">{{ file.name }}</span>\n          </div>\n\n          <!-- 播放控制 -->\n          <div class=\"player-controls\">\n            <div class=\"main-controls\">\n              <button class=\"control-btn\" (click)=\"togglePlay()\">\n                <preview-icon [themeMode]=\"themeMode\" [name]=\"isPlaying ? 'pause' : 'play'\" [title]=\"(isPlaying ? 'preview.toolbar.pause' : 'preview.toolbar.play')|i18n\" [size]=\"24\"></preview-icon>\n              </button>\n            </div>\n\n            <div class=\"progress-area\">\n              <span class=\"time current\">{{ formatTime(currentTime) }}</span>\n              <div class=\"progress-bar\" (mousedown)=\"startDragging($event)\">\n                <div class=\"progress-bg\"></div>\n                <div class=\"progress\" [style.width.%]=\"progress\">\n                  <div class=\"progress-handle\"></div>\n                </div>\n              </div>\n              <span class=\"time duration\">{{ formatTime(duration) }}</span>\n            </div>\n          </div>\n\n          <!-- 辅助控制 -->\n          <div class=\"extra-controls\">\n            <!-- 倍速控制 -->\n            <div class=\"speed-control\"\n                 (mouseenter)=\"showSpeedControl = true\"\n                 (mouseleave)=\"showSpeedControl = false\">\n              <button class=\"text-btn\">\n                {{ playbackSpeed }}x\n              </button>\n              <div class=\"speed-options\" *ngIf=\"showSpeedControl\">\n                <button *ngFor=\"let speed of playbackSpeeds\"\n                        (click)=\"setPlaybackSpeed(speed)\"\n                        [class.active]=\"playbackSpeed === speed\">\n                  {{ speed }}x\n                </button>\n              </div>\n            </div>\n\n            <!-- 音量控制 -->\n            <div class=\"volume-control\"\n                 (mouseenter)=\"showVolumeControl = true\"\n                 (mouseleave)=\"showVolumeControl = false\">\n              <button class=\"control-btn\" (click)=\"cycleVolume()\">\n                <preview-icon [themeMode]=\"themeMode\" [name]=\"getVolumeIcon()\"></preview-icon>\n              </button>\n              <div class=\"slider-container\" *ngIf=\"showVolumeControl\">\n                <input type=\"range\"\n                       min=\"0\"\n                       max=\"100\"\n                       [value]=\"volume * 100\"\n                       (input)=\"adjustVolume($event)\">\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  `,\n  styleUrls: ['../../styles/_theme.scss', './audio-preview.component.scss'],\n})\nexport class AudioPreviewComponent extends BasePreviewComponent implements OnInit, AfterViewInit, OnDestroy {\n  @ViewChild('audioPlayer') audioPlayer!: ElementRef<HTMLAudioElement>;\n  coverUrl: SafeUrl | null = null;\n\n  isPlaying = false;\n  currentTime = 0;\n  duration = 0;\n  progress = 0;\n  volume = 1;\n  previousVolume = 1;\n  isDragging = false;\n  showVolumeControl = false;\n  showSpeedControl = false;\n  playbackSpeed = 1;\n  playbackSpeeds = [0.75, 1, 1.5, 2.0, 3.0, 5.0];\n\n  private playHandler = () => {\n    this.isPlaying = true;\n    this.cdr.markForCheck();\n  };\n\n  private pauseHandler = () => {\n    this.isPlaying = false;\n    this.cdr.markForCheck();\n  };\n\n  private endedHandler = () => {\n    this.isPlaying = false;\n    this.cdr.markForCheck();\n  };\n\n  ngOnInit() {\n    this.startLoading()\n    this.loadCover();\n    this.cdr.markForCheck();\n  }\n\n  private async loadCover() {\n    try {\n      // 如果文件对象中已经有封面URL，直接使用\n      if (this.file.coverUrl) {\n        this.coverUrl = this.file.coverUrl;\n        return;\n      }\n      // 如果没有封面，使用默认图标\n      this.coverUrl = null;\n      this.cdr.markForCheck();\n    } catch (error) {\n      console.error('加载封面失败:', error);\n      this.coverUrl = null;\n      this.cdr.markForCheck();\n    }\n  }\n\n  ngAfterViewInit() {\n    // 在视图初始化后设置事件监听\n    const audio = this.audioPlayer.nativeElement;\n    audio.addEventListener('play', this.playHandler);\n    audio.addEventListener('pause', this.pauseHandler);\n    audio.addEventListener('ended', this.endedHandler);\n  }\n\n  onAudioLoad() {\n    this.stopLoading()\n    this.duration = this.audioPlayer.nativeElement.duration;\n    this.cdr.markForCheck();\n  }\n\n  onTimeUpdate() {\n    if (!this.isDragging) {\n      const audio = this.audioPlayer.nativeElement;\n      this.currentTime = audio.currentTime;\n      this.progress = (audio.currentTime / audio.duration) * 100;\n      this.cdr.markForCheck();\n    }\n  }\n\n  async togglePlay() {\n    const audio = this.audioPlayer.nativeElement;\n    try {\n      if (this.isPlaying) {\n        await audio.pause();\n      } else {\n        // 在播放前重置音频时间（如果已经结束）\n        if (audio.ended) {\n          audio.currentTime = 0;\n        }\n        await audio.play();\n      }\n    } catch (error) {\n      console.error('播放控制错误:', error);\n    }\n    // 状态会通过事件监听器自动更新\n  }\n\n  // 进度条控制\n  startDragging(event: MouseEvent) {\n    this.isDragging = true;\n    this.seek(event);\n    document.addEventListener('mousemove', this.onGlobalDrag);\n    document.addEventListener('mouseup', this.stopDragging);\n  }\n\n  private seek(event: MouseEvent) {\n    const progressBar = event.currentTarget as HTMLElement;\n    const rect = progressBar.getBoundingClientRect();\n    const pos = (event.clientX - rect.left) / rect.width;\n    if (pos >= 0 && pos <= 1) {\n      const audio = this.audioPlayer.nativeElement;\n      audio.currentTime = pos * audio.duration;\n      this.progress = pos * 100;\n      this.cdr.markForCheck();\n    }\n  }\n\n  private onGlobalDrag = (event: MouseEvent) => {\n    if (this.isDragging) {\n      const progressBar = this.audioPlayer.nativeElement.parentElement?.querySelector('.progress-bar');\n      if (progressBar) {\n        const rect = progressBar.getBoundingClientRect();\n        const pos = Math.max(0, Math.min(1, (event.clientX - rect.left) / rect.width));\n        const audio = this.audioPlayer.nativeElement;\n        audio.currentTime = pos * audio.duration;\n        this.progress = pos * 100;\n        this.cdr.markForCheck();\n      }\n    }\n  }\n\n  stopDragging = () => {\n    if (this.isDragging) {\n      this.isDragging = false;\n      document.removeEventListener('mousemove', this.onGlobalDrag);\n      document.removeEventListener('mouseup', this.stopDragging);\n    }\n  }\n\n  // 音量控制\n  cycleVolume() {\n    if (this.volume > 0) {\n      this.previousVolume = this.volume;\n      this.volume = 0;\n    } else {\n      this.volume = this.previousVolume;\n    }\n    this.audioPlayer.nativeElement.volume = this.volume;\n    this.cdr.markForCheck();\n  }\n\n  adjustVolume(event: Event) {\n    const value = +(event.target as HTMLInputElement).value;\n    this.volume = value / 100;\n    if (this.volume > 0) {\n      this.previousVolume = this.volume;\n    }\n    this.audioPlayer.nativeElement.volume = this.volume;\n    this.cdr.markForCheck();\n  }\n\n  getVolumeIcon(): string {\n    if (this.volume === 0) return 'mute';\n    return 'volume';\n  }\n\n  // 倍速控制\n  setPlaybackSpeed(speed: number) {\n    this.playbackSpeed = speed;\n    this.audioPlayer.nativeElement.playbackRate = speed;\n    this.showSpeedControl = false;\n    this.cdr.markForCheck();\n  }\n\n  formatTime(seconds: number): string {\n    if (!seconds) return '00:00';\n\n    const minutes = Math.floor(seconds / 60);\n    const secs = Math.floor(seconds % 60);\n\n    return [minutes, secs]\n      .map(val => val.toString().padStart(2, '0'))\n      .join(':');\n  }\n\n  ngOnDestroy() {\n    if (this.audioPlayer?.nativeElement) {\n      const audio = this.audioPlayer.nativeElement;\n      audio.removeEventListener('play', this.playHandler);\n      audio.removeEventListener('pause', this.pauseHandler);\n      audio.removeEventListener('ended', this.endedHandler);\n    }\n    this.stopDragging();\n  }\n\n  protected override async handleFileContent(content: FileReaderResponse) {\n  }\n}\n","import {Component} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport { PreviewIconComponent} from '../../components';\nimport {FileReaderResponse} from \"../../services\";\nimport {BasePreviewComponent} from \"../base-preview/base-preview.component\";\nimport {I18nPipe} from \"../../i18n/i18n.pipe\";\n\n@Component({\n  selector: 'ngx-unknown-preview',\n  standalone: true,\n  imports: [CommonModule, PreviewIconComponent, I18nPipe],\n  template: `\n    <div class=\"unknown-preview\">\n      <div class=\"unknown-message\">\n        <preview-icon [themeMode]=\"themeMode\" [size]=\"72\" svg=\"unknown\"></preview-icon>\n        <p>{{ file.name }}</p>\n        <p>{{'unknownFileTips'|i18n}}</p>\n      </div>\n    </div>\n  `,\n  styleUrls: ['../../styles/_theme.scss', 'unknown-preview.component.scss'],\n})\nexport class UnknownPreviewComponent extends BasePreviewComponent {\n  protected override async handleFileContent(content: FileReaderResponse) {\n  }\n}\n","import {Pipe, PipeTransform} from '@angular/core';\nimport MarkdownIt from 'markdown-it';\nimport hljs from \"highlight.js\"\n\nimport {DomSanitizer} from '@angular/platform-browser';\n\n@Pipe({name: 'markdown', standalone: true})\nexport class MarkdownPipe implements PipeTransform {\n  private md: MarkdownIt;\n\n  constructor(private sanitizer: DomSanitizer) {\n    this.md = new MarkdownIt({\n      html: true,\n      linkify: true,\n      typographer: true,\n      highlight: function (str, lang) {\n        if (lang && hljs.getLanguage(lang)) {\n          try {\n            return hljs.highlight(str, {language: lang}).value;\n          } catch (__) {\n          }\n        }\n        return ''; // use external default escaping\n      }\n    }); // 初始化 markdown-it 实例\n  }\n\n  transform(value: string): any {\n    if (!value) return '';\n    const html = this.md.render(value); // 解析 Markdown 为 HTML\n    return this.sanitizer.bypassSecurityTrustHtml(html); // 信任 HTML 内容\n  }\n}\n","import {ChangeDetectionStrategy, Component, SimpleChanges} from '@angular/core';\nimport {NgIf} from \"@angular/common\";\nimport {BasePreviewComponent} from \"../base-preview/base-preview.component\";\nimport {MarkdownPipe} from \"./markdown.pipe\";\nimport {PreviewIconComponent} from '../../components';\nimport {FileReaderResponse} from \"../../services\";\nimport {I18nPipe} from \"../../i18n\";\n\n@Component({\n  selector: 'ngx-markdown-preview',\n  standalone: true,\n  imports: [\n    NgIf,\n    PreviewIconComponent,\n    MarkdownPipe,\n    I18nPipe\n  ],\n  templateUrl: './markdown-preview.component.html',\n  styleUrls: ['../../styles/_theme.scss', './markdown-preview.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MarkdownPreviewComponent extends BasePreviewComponent {\n  content: string = \"\";\n  scale = 1;\n\n  private readonly SCALE_STEP = 0.1;\n  private readonly MAX_SCALE = 3;\n  private readonly MIN_SCALE = 0.1;\n  private readonly DEFAULT_SCALE = 1;\n\n  ngOnChanges(simpleChanges: SimpleChanges) {\n    if (simpleChanges['file'] && this.file) {\n      this.loadFile(\"text\").then(() => {\n      });\n    }\n  }\n\n  protected override async handleFileContent(content: FileReaderResponse): Promise<any> {\n    const {text = \"\"} = content;\n    this.content = text;\n  }\n\n  zoomIn() {\n    if (this.scale < this.MAX_SCALE) {\n      this.scale = Math.min(this.MAX_SCALE, this.scale + this.SCALE_STEP);\n      this.cdr.markForCheck();\n    }\n  }\n\n  zoomOut() {\n    if (this.scale > this.MIN_SCALE) {\n      this.scale = Math.max(this.MIN_SCALE, this.scale - this.SCALE_STEP);\n      this.cdr.markForCheck();\n\n    }\n  }\n\n  resetZoom() {\n    this.scale = this.DEFAULT_SCALE;\n    this.cdr.markForCheck();\n  }\n\n  toggleFullscreen() {\n    if (!document.fullscreenElement) {\n      document.documentElement.requestFullscreen();\n    } else {\n      document.exitFullscreen();\n    }\n  }\n}\n","<div class=\"markdown-container\">\n  <div class=\"toolbar\">\n    <div class=\"left-controls\">\n      <button class=\"tool-btn\" (click)=\"zoomOut()\">\n        <preview-icon [themeMode]=\"themeMode\" name=\"zoom-out\" [title]=\"'preview.toolbar.zoomOut'|i18n\"></preview-icon>\n      </button>\n      <span class=\"zoom-text\" (click)=\"resetZoom()\" [title]=\"'preview.toolbar.resetZoom'|i18n\">\n            {{ (scale * 100).toFixed(0) }}%\n          </span>\n      <button class=\"tool-btn\" (click)=\"zoomIn()\">\n        <preview-icon [themeMode]=\"themeMode\" name=\"zoom-in\" [title]=\"'preview.toolbar.zoomIn'|i18n\"></preview-icon>\n      </button>\n    </div>\n    <div class=\"right-controls\">\n      <button class=\"tool-btn\" (click)=\"toggleFullscreen()\">\n        <preview-icon [themeMode]=\"themeMode\" name=\"fullscreen\" [title]=\"'preview.toolbar.fullscreen'|i18n\"></preview-icon>\n      </button>\n    </div>\n  </div>\n\n  <div class=\"content-container\">\n    <div class=\"viewer\" [innerHTML]=\"content|markdown\"></div>\n  </div>\n</div>\n","import {Component, Input} from '@angular/core';\nimport {ThemeMode} from '../../types';\n\n@Component({\n  selector: 'ngx-theme-icon',\n  standalone: true,\n  imports: [\n  ],\n  templateUrl: './theme-icon.component.html',\n  styleUrl: './theme-icon.component.scss'\n})\nexport class ThemeIconComponent {\n  @Input() themeMode: ThemeMode | null = 'auto'\n}\n","@if (themeMode === 'light') {\n  <svg width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\">\n    <path fill=\"currentColor\"\n          d=\"M12 7c-2.76 0-5 2.24-5 5s2.24 5 5 5s5-2.24 5-5s-2.24-5-5-5zM2 13h2c.55 0 1-.45 1-1s-.45-1-1-1H2c-.55 0-1 .45-1 1s.45 1 1 1zm18 0h2c.55 0 1-.45 1-1s-.45-1-1-1h-2c-.55 0-1 .45-1 1s.45 1 1 1zM11 2v2c0 .55.45 1 1 1s1-.45 1-1V2c0-.55-.45-1-1-1s-1 .45-1 1zm0 18v2c0 .55.45 1 1 1s1-.45 1-1v-2c0-.55-.45-1-1-1s-1 .45-1 1zM5.99 4.58a.996.996 0 0 0-1.41 0a.996.996 0 0 0 0 1.41l1.06 1.06c.39.39 1.03.39 1.41 0s.39-1.03 0-1.41L5.99 4.58zm12.37 12.37a.996.996 0 0 0-1.41 0a.996.996 0 0 0 0 1.41l1.06 1.06c.39.39 1.03.39 1.41 0a.996.996 0 0 0 0-1.41l-1.06-1.06zm1.06-10.96a.996.996 0 0 0 0-1.41a.996.996 0 0 0-1.41 0l-1.06 1.06c-.39.39-.39 1.03 0 1.41s1.03.39 1.41 0l1.06-1.06zM7.05 18.36a.996.996 0 0 0 0-1.41a.996.996 0 0 0-1.41 0l-1.06 1.06c-.39.39-.39 1.03 0 1.41s1.03.39 1.41 0l1.06-1.06z\"/>\n  </svg>\n} @else {\n  <svg width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\">\n    <path fill=\"currentColor\"\n          d=\"M12 3c-4.97 0-9 4.03-9 9s4.03 9 9 9s9-4.03 9-9c0-.46-.04-.92-.1-1.36a5.389 5.389 0 0 1-4.4 2.26a5.403 5.403 0 0 1-3.14-9.8c-.44-.06-.9-.1-1.36-.1z\"/>\n  </svg>\n}\n\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  HostListener,\n  Input,\n  OnDestroy,\n  OnInit, ViewEncapsulation\n} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {PreviewService, ThemeService} from '../../services';\nimport {\n  ArchivePreviewComponent,\n  AudioPreviewComponent,\n  ExcelPreviewComponent,\n  ImagePreviewComponent, MarkdownPreviewComponent,\n  PdfPreviewComponent,\n  PptPreviewComponent,\n  TextPreviewComponent,\n  UnknownPreviewComponent,\n  VideoPreviewComponent,\n  WordPreviewComponent\n} from '../../preview-types';\nimport {PreviewIconComponent} from '../preview-icon';\nimport {Observable, Subscription} from 'rxjs';\nimport {AutoThemeConfig, PreviewFile, ThemeMode} from '../../types';\nimport {ThemeIconComponent} from \"../theme-icon/theme-icon.component\";\nimport {I18nPipe} from \"../../i18n/i18n.pipe\";\n\n@Component({\n  selector: 'ngx-file-preview-modal',\n  standalone: true,\n  imports: [\n    CommonModule,\n    ImagePreviewComponent,\n    VideoPreviewComponent,\n    PdfPreviewComponent,\n    TextPreviewComponent,\n    ArchivePreviewComponent,\n    PreviewIconComponent,\n    WordPreviewComponent,\n    ExcelPreviewComponent,\n    PptPreviewComponent,\n    AudioPreviewComponent,\n    UnknownPreviewComponent,\n    MarkdownPreviewComponent,\n    ThemeIconComponent,\n    I18nPipe\n  ],\n  templateUrl: 'preview-modal.component.html',\n  styleUrls: [\n    '../../styles/_theme.scss',\n    'preview-modal.component.scss'\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None\n})\nexport class PreviewModalComponent implements OnInit, OnDestroy {\n  @Input() file!: PreviewFile;\n  @Input({transform: (value: ThemeMode | null): ThemeMode => value!}) themeMode!: ThemeMode;\n  @Input() autoThemeConfig?: AutoThemeConfig;\n\n  isVisible = false;\n  currentFile?: PreviewFile;\n  private state$ = this.previewService.getStateObservable();\n  isControlsVisible = true;\n  private controlsTimeout?: number;\n  private readonly HIDE_DELAY = 2000;\n  theme$!: Observable<ThemeMode>;\n  private subscription?: Subscription;\n\n  public loading$:Observable<boolean> = this.previewService.getLoadingObservable();\n  constructor(private cdr: ChangeDetectorRef, private themeService: ThemeService, private previewService: PreviewService) {\n  }\n\n  ngOnInit() {\n    this.subscription = this.state$.subscribe(state => {\n      this.isVisible = state.isVisible;\n      this.currentFile = state.currentFile;\n      this.cdr.markForCheck();\n    });\n\n    this.themeService.setMode(this.themeMode);\n    this.theme$ = this.themeService.getThemeObservable()\n    this.subscription.add(this.theme$.subscribe(theme => this.themeMode = theme))\n  }\n\n  ngOnDestroy() {\n    this.subscription?.unsubscribe();\n    if (this.controlsTimeout) {\n      window.clearTimeout(this.controlsTimeout);\n    }\n    if (window.matchMedia) {\n      const prefersDark = window.matchMedia('(prefers-color-scheme: dark)');\n      prefersDark.removeEventListener('change', () => {\n      });\n    }\n  }\n\n  @HostListener('document:keydown', ['$event'])\n  handleKeyboardEvent(event: KeyboardEvent) {\n    switch (event.key) {\n      case 'Escape':\n        this.close();\n        break;\n      case 'ArrowLeft':\n        this.previous();\n        break;\n      case 'ArrowRight':\n        this.next();\n        break;\n    }\n  }\n\n  close() {\n    this.previewService.close();\n  }\n\n  previous() {\n    this.previewService.previous();\n  }\n\n  next() {\n    this.previewService.next();\n  }\n\n  canShowPrevious(): boolean {\n    const state = this.previewService.state;\n    return state.currentIndex > 0;\n  }\n\n  canShowNext(): boolean {\n    const state = this.previewService.state;\n    return state.currentIndex < state.files.length - 1;\n  }\n\n  getCurrentFileInfo(): string {\n    const state = this.previewService.state;\n    return `${state.currentIndex + 1} / ${state.files.length}`;\n  }\n\n  get hasMultipleFiles(): boolean {\n    const state = this.previewService.state;\n    return (state.files?.length || 0) > 1;\n  }\n\n  handleMouseMove() {\n    this.isControlsVisible = true;\n    this.cdr.markForCheck();\n\n    if (this.controlsTimeout) {\n      window.clearTimeout(this.controlsTimeout);\n    }\n\n    this.controlsTimeout = window.setTimeout(() => {\n      this.hideControls();\n    }, this.HIDE_DELAY);\n  }\n\n  hideControls() {\n    this.isControlsVisible = false;\n    this.cdr.markForCheck();\n\n    if (this.controlsTimeout) {\n      window.clearTimeout(this.controlsTimeout);\n    }\n  }\n\n  toggleTheme() {\n    this.themeService.toggleTheme();\n  }\n}\n","<div class=\"nfp-modal__overlay\" *ngIf=\"isVisible\" (click)=\"close()\">\n  <div class=\"nfp-modal__content\"\n       (click)=\"$event.stopPropagation()\"\n       (mousemove)=\"handleMouseMove()\"\n       (mouseleave)=\"hideControls()\">\n    <div class=\"nfp-modal__header\" [class.nfp-modal__header--multiple]=\"hasMultipleFiles\">\n      <div class=\"nfp-modal__header-left\">\n        <span class=\"nfp-modal__filename\">{{ currentFile?.name }}</span>\n        <span class=\"nfp-modal__fileindex\" *ngIf=\"hasMultipleFiles\">{{ getCurrentFileInfo() }}</span>\n      </div>\n      <div class=\"nfp-modal__header-right\">\n        <div class=\"nfp-modal__theme-toggle\" (click)=\"toggleTheme()\">\n         <ngx-theme-icon [themeMode]=\"theme$|async\"></ngx-theme-icon>\n        </div>\n        <preview-icon cursor=\"pointer\" name=\"close\" [themeMode]=\"theme$|async\" (click)=\"close()\"></preview-icon>\n      </div>\n    </div>\n    <div class=\"nfp-modal__body\">\n      <button class=\"nfp-modal__nav-btn nfp-modal__nav-btn--prev\"\n              *ngIf=\"canShowPrevious()\"\n              [class.nfp-modal__nav-btn--visible]=\"isControlsVisible\"\n              (click)=\"previous()\">\n        <preview-icon [themeMode]=\"themeMode\" [size]=\"36\" name=\"previous\"></preview-icon>\n      </button>\n\n      <div class=\"nfp-modal__preview\">\n        @if(loading$|async){\n          <div class=\"nfp-modal__loading-overlay\">\n            <div class=\"spinner\"></div>\n            <span>{{'loading'|i18n}}</span>\n          </div>\n        }\n        <ng-container [ngSwitch]=\"currentFile?.type\">\n          <ngx-image-preview\n            *ngSwitchCase=\"'image'\"\n            [file]=\"currentFile!\"\n            [themeMode]=\"theme$|async\"\n          ></ngx-image-preview>\n\n          <ngx-video-preview\n            *ngSwitchCase=\"'video'\"\n            [file]=\"currentFile!\"\n            [themeMode]=\"theme$|async\"\n          ></ngx-video-preview>\n\n          <ngx-pdf-preview\n            *ngSwitchCase=\"'pdf'\"\n            [file]=\"currentFile!\"\n            [themeMode]=\"theme$|async\"\n          ></ngx-pdf-preview>\n\n          <ngx-word-preview\n            *ngSwitchCase=\"'word'\"\n            [file]=\"currentFile!\"\n            [themeMode]=\"theme$|async\"\n          ></ngx-word-preview>\n\n          <ngx-excel-preview\n            *ngSwitchCase=\"'excel'\"\n            [file]=\"currentFile!\"\n            [themeMode]=\"theme$|async\"\n          ></ngx-excel-preview>\n\n          <ngx-ppt-preview\n            *ngSwitchCase=\"'ppt'\"\n            [file]=\"currentFile!\"\n            [themeMode]=\"theme$|async\"\n          ></ngx-ppt-preview>\n\n          <ngx-text-preview\n            *ngSwitchCase=\"'txt'\"\n            [file]=\"currentFile!\"\n            [themeMode]=\"theme$|async\"\n          ></ngx-text-preview>\n\n          <ngx-markdown-preview\n            *ngSwitchCase=\"'markdown'\"\n            [file]=\"currentFile!\"\n            [themeMode]=\"theme$|async\"\n          ></ngx-markdown-preview>\n\n          <ngx-archive-preview\n            *ngSwitchCase=\"'zip'\"\n            [file]=\"currentFile!\"\n            [themeMode]=\"theme$|async\"\n          ></ngx-archive-preview>\n\n          <ngx-audio-preview\n            *ngSwitchCase=\"'audio'\"\n            [file]=\"currentFile!\"\n            [themeMode]=\"theme$|async\"\n          ></ngx-audio-preview>\n\n          <ngx-unknown-preview\n            *ngSwitchCase=\"'unknown'\"\n            [file]=\"currentFile!\">\n            [themeMode]=\"theme$|async\"\n          </ngx-unknown-preview>\n        </ng-container>\n      </div>\n\n      <button class=\"nfp-modal__nav-btn nfp-modal__nav-btn--next\"\n              *ngIf=\"canShowNext()\"\n              [class.nfp-modal__nav-btn--visible]=\"isControlsVisible\"\n              (click)=\"next()\">\n        <preview-icon [themeMode]=\"themeMode\" [size]=\"36\" name=\"next\"></preview-icon>\n      </button>\n    </div>\n  </div>\n</div>\n","/**\n * 工具\n */\nexport * from './preview-modal';\nexport * from './preview-icon';\nexport * from './theme-icon'\n","import {Pipe} from \"@angular/core\";\nimport {PreviewUtils} from \"../utils\";\n\n@Pipe({\n  name: 'fileSize',\n  standalone: true\n})\nexport class FileSizePipe {\n  transform(size: number|undefined): string {\n    return PreviewUtils.formatFileSize(size);\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ContentChild,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnInit,\n  Output,\n  QueryList,\n  TemplateRef,\n  ViewChildren,\n  ViewEncapsulation\n} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {AutoThemeConfig, PreviewEvent, PreviewFile, PreviewFileInput, ThemeMode} from '../types';\nimport {PreviewIconComponent} from '../components';\nimport {PreviewDirective} from \"../directives\";\nimport {PreviewUtils} from \"../utils\";\nimport {PreviewService, ThemeService} from '../services';\nimport {I18nPipe} from \"../i18n/i18n.pipe\";\nimport {FileSizePipe} from \"./file-size.pipe\";\n\n@Component({\n  selector: 'ngx-preview-list',\n  standalone: true,\n  imports: [\n    CommonModule,\n    PreviewIconComponent,\n    PreviewDirective,\n    I18nPipe,\n    FileSizePipe\n  ],\n  providers: [ThemeService,PreviewService],\n  templateUrl: 'preview-list.component.html',\n  styleUrls: [\n    '../styles/_theme.scss',\n    'preview-list.component.scss'\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None\n})\nexport class PreviewListComponent {\n  @Input() trigger = 'click'; // 默认触发方式\n  private _files: PreviewFile[] = [];\n  @Input()\n  get files(): PreviewFile[] {\n    return this._files;\n  }\n  set files(value: PreviewFileInput) {\n    this._files = PreviewUtils.normalizeFiles(value);\n  }\n\n  @Input() index = 0;\n  private _themeMode: ThemeMode = 'auto';\n  @Input()\n  get themeMode(): ThemeMode {\n    return this._themeMode;\n  }\n  set themeMode(value: ThemeMode) {\n    this._themeMode = value;\n    this.themeService.setMode(this._themeMode);\n    if (this._themeMode === 'auto' && this.autoConfig) {\n      this.themeService.setAutoConfig(this.autoConfig);\n    }\n  }\n  @Input() autoConfig?: AutoThemeConfig;\n  private _lang:string = 'zh'\n  @Input()\n  get lang(): string {\n    return this._lang;\n  }\n  set lang(value: string) {\n    this._lang = value;\n    this.previewService.setLang(value)\n  }\n  @Output() previewEvent = new EventEmitter<PreviewEvent>();\n  @ContentChild('itemTemplate') itemTemplate?: TemplateRef<any>;\n  @ViewChildren('previewTrigger') previewTriggers!: QueryList<ElementRef>;\n\n  constructor(private themeService: ThemeService,public previewService:PreviewService,private elementRef: ElementRef) {\n    this.themeService.bindElement(this.elementRef.nativeElement);\n  }\n\n  triggerSelect(index: number) {\n    this.index = index;\n    this.previewEvent.emit({type: 'select', event: this.files[index]});\n  }\n}\n","<div class=\"ngx-preview-list\">\n  <div class=\"ngx-preview-list__header\">\n    <span>{{ 'list.title'|i18n }}</span>\n    <span class=\"count\">\n      @if (files?.length) {\n        {{ 'list.total'|i18n:files?.length }}\n      }\n    </span>\n  </div>\n  <div class=\"ngx-preview-list__content\">\n    @for (file of files; let i = $index; track file.name) {\n      <ng-container *ngIf=\"itemTemplate; else defaultTemplate\">\n        <div style=\"display: none\" #previewTrigger\n             [ngxFilePreview]=\"file\"\n             [trigger]=\"trigger\"\n             [themeMode]=\"themeMode\"\n             [lang]=\"lang\"></div>\n        <ng-container\n          [ngTemplateOutlet]=\"itemTemplate\"\n          [ngTemplateOutletContext]=\"{\n                $implicit: file,\n                index: i,\n                isActive: i === index,\n                themeMode: themeMode,\n                type: ('types.'+file.type)|i18n,\n                select: triggerSelect.bind(this,i),\n                preview: previewTrigger.click.bind(previewTrigger)\n              }\"\n        ></ng-container>\n      </ng-container>\n      <ng-template #defaultTemplate>\n        <div class=\"item\"\n             (click)=\"triggerSelect(i)\"\n             [ngxFilePreview]=\"file\"\n             [trigger]=\"trigger\"\n             [themeMode]=\"themeMode\"\n             [lang]=\"lang\"\n             [class.active]=\"i === index\">\n              <span class=\"icon\">\n                <preview-icon [themeMode]=\"themeMode\" [size]=\"40\" [svg]=\"file.type\"></preview-icon>\n              </span>\n          <div class=\"info\">\n            <div class=\"main-info\">\n              <span class=\"name\">{{ file.name }}</span>\n              <span class=\"size\">{{ file.size|fileSize }}</span>\n            </div>\n            <div class=\"sub-info\">\n              <span class=\"type\">{{ ('types.' + file.type)|i18n }}</span>\n              <span class=\"date\" *ngIf=\"file.lastModified\">\n                    {{ file.lastModified|date:'yyyy-MM-dd HH:mm:ss' }}\n                  </span>\n            </div>\n          </div>\n        </div>\n      </ng-template>\n    } @empty {\n      <div class=\"empty\">{{ 'list.empty'|i18n }}</div>\n    }\n  </div>\n</div>\n<ng-content></ng-content>\n","/**\n * 当前的版本号\n */\nexport const version = '1.0.12';\n","// 内部使用不导出\n// export * from './lib/preview-types';\n// export * from \"./lib/utils\"\n// export * from \"./lib/workers\"\n// export * from './lib/components'\n// export * from './lib/services';\n// 只导出必要组件\nexport * from './lib/types';\nexport * from './lib/preview-list'\nexport {ThemeIconComponent} from './lib/components'\nexport {PreviewDirective} from './lib/directives';\nexport {I18nUtils} from \"./lib/i18n\"\nexport {version} from \"./version\"\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.PreviewService","i1.ThemeService","i1","i2"],"mappings":"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"}